169 lines
4.2 KiB
Bash
Executable File
169 lines
4.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
rand() {
|
|
echo $((RANDOM%($2-$1)+$1))
|
|
}
|
|
|
|
index_expr_rand() {
|
|
echo "pfor::ctv<$(rand 0 100)>*i+pfor::ctv<$(rand 0 100)>"
|
|
}
|
|
|
|
index_expr_fixed() {
|
|
echo "pfor::ctv<3>*i+pfor::ctv<2>"
|
|
}
|
|
|
|
header() {
|
|
cat<<EOF
|
|
#include <pfor/pfor.h>
|
|
#include <cstdio>
|
|
|
|
std::size_t pfor::ParallelForParameters::nThreads = 16;
|
|
|
|
constexpr unsigned n = BUFSIZ;
|
|
|
|
int main() {
|
|
pfor::Index i;
|
|
EOF
|
|
}
|
|
|
|
footer() {
|
|
cat<<EOF
|
|
}
|
|
EOF
|
|
}
|
|
|
|
variable() {
|
|
i=$1
|
|
echo -e "\tint v${i}_[n];\tauto v${i} = pfor::Operand<int*, class TID${i}>{v${i}_};"
|
|
}
|
|
|
|
independent_with() {
|
|
index_expr_str=$1; shift
|
|
index_expr() {
|
|
eval ${index_expr_str}
|
|
}
|
|
for i in $@; do
|
|
echo -ne ",\n\t\tv${i}[$(index_expr)] = v1[$(index_expr)]"
|
|
done
|
|
}
|
|
|
|
dependent_with() {
|
|
index_expr_str=$1; shift
|
|
index_expr() {
|
|
eval ${index_expr_str}
|
|
}
|
|
ii=$1; shift
|
|
for i in $@; do
|
|
echo -ne ",\n\t\tv${i}[$(index_expr)] = v${ii}[$(index_expr)]"
|
|
ii=$i
|
|
done
|
|
}
|
|
|
|
####
|
|
|
|
fixed_count=100
|
|
|
|
fixed_var_count() {
|
|
mode=$1; shift
|
|
opening=$1; shift
|
|
index_expr_str=$1; shift
|
|
|
|
header
|
|
for i in $(seq ${fixed_count}); do
|
|
variable "${i}"
|
|
done
|
|
|
|
echo -ne "\t${opening}"
|
|
eval "${mode} '${index_expr_str}' $*"
|
|
echo -e "\n\t);"
|
|
|
|
footer
|
|
}
|
|
|
|
fixed_instr_count() {
|
|
mode=$1; shift
|
|
opening=$1; shift
|
|
index_expr_str=$1; shift
|
|
var_count=$1
|
|
|
|
[ "${mode}" = 'dependent_with' ] && vars='1 ' || vars=
|
|
|
|
ntimes=$(((fixed_count+(var_count-1)-1)/(var_count-1) - 1))
|
|
vars_last="${vars}$(seq -s' ' 2 $((fixed_count-ntimes*(var_count-1) + 1)))"
|
|
vars="${vars}$(seq -s' ' 2 ${var_count})"
|
|
|
|
header
|
|
for i in $(seq ${var_count}); do
|
|
variable "${i}"
|
|
done
|
|
|
|
echo -ne "\t${opening}"
|
|
for i in $(seq ${ntimes}); do
|
|
eval "${mode} '${index_expr_str}' ${vars}"
|
|
done
|
|
eval "${mode} '${index_expr_str}' ${vars_last}"
|
|
echo -e "\n\t);"
|
|
|
|
footer
|
|
}
|
|
|
|
fixed_instr_var_count() {
|
|
mode=$1; shift
|
|
opening=$1; shift
|
|
index_expr_str=$1; shift
|
|
loop_count=$1
|
|
|
|
[ "${mode}" = 'dependent_with' ] && first_=1 || first_=2
|
|
[ "${mode}" = 'dependent_with' ] && offset=0 || offset=-1
|
|
|
|
instr_count=$((fixed_count/loop_count))
|
|
remainder=$((fixed_count - instr_count*loop_count))
|
|
|
|
header
|
|
for i in $(seq ${fixed_count}); do
|
|
variable "${i}"
|
|
done
|
|
|
|
first=${first_}
|
|
for i in $(seq $((loop_count))); do
|
|
n=$((instr_count + ! ! remainder))
|
|
last=$((first + n + offset))
|
|
if [ ${last} -gt ${fixed_count} ]; then
|
|
first=${first_}
|
|
last=$((first + n + offset))
|
|
fi
|
|
|
|
echo -ne "\t${opening}"
|
|
eval "${mode} '${index_expr_str}' $(seq -s' ' ${first} ${last})"
|
|
echo -e "\n\t);"
|
|
|
|
first=$((last+1))
|
|
|
|
remainder=$((remainder > 0 ? remainder-1 : 0))
|
|
done
|
|
|
|
footer
|
|
}
|
|
|
|
####
|
|
|
|
outdir=srcs
|
|
opening='pfor::parallelFor<pfor::ForLoopThread>(pfor::RangeCT<0,2>{n}'
|
|
|
|
for count in $(echo 5 $(seq 10 10 100)); do
|
|
fixed_var_count>"${outdir}/main_fixedv_indep_randi_${count}.cpp" independent_with "${opening}" 'index_expr_rand' $(seq 2 ${count})
|
|
fixed_var_count>"${outdir}/main_fixedv_dep_randi_${count}.cpp" dependent_with "${opening}" 'index_expr_rand' $(seq ${count})
|
|
fixed_var_count>"${outdir}/main_fixedv_indep_fixedi_${count}.cpp" independent_with "${opening}" 'index_expr_fixed' $(seq 2 ${count})
|
|
fixed_var_count>"${outdir}/main_fixedv_dep_fixedi_${count}.cpp" dependent_with "${opening}" 'index_expr_fixed' $(seq ${count})
|
|
|
|
# fixed_instr_count>"${outdir}/main_fixedi_indep_randi_${count}.cpp" independent_with "${opening}" 'index_expr_rand' "${count}"
|
|
# fixed_instr_count>"${outdir}/main_fixedi_dep_randi_${count}.cpp" dependent_with "${opening}" 'index_expr_rand' "${count}"
|
|
# fixed_instr_count>"${outdir}/main_fixedi_indep_fixedi_${count}.cpp" independent_with "${opening}" 'index_expr_fixed' "${count}"
|
|
# fixed_instr_count>"${outdir}/main_fixedi_dep_fixedi_${count}.cpp" dependent_with "${opening}" 'index_expr_fixed' "${count}"
|
|
|
|
fixed_instr_var_count>"${outdir}/main_fixediv_indep_randi_${count}.cpp" independent_with "${opening}" 'index_expr_rand' "${count}"
|
|
fixed_instr_var_count>"${outdir}/main_fixediv_dep_randi_${count}.cpp" dependent_with "${opening}" 'index_expr_rand' "${count}"
|
|
fixed_instr_var_count>"${outdir}/main_fixediv_indep_fixedi_${count}.cpp" independent_with "${opening}" 'index_expr_fixed' "${count}"
|
|
fixed_instr_var_count>"${outdir}/main_fixediv_dep_fixedi_${count}.cpp" dependent_with "${opening}" 'index_expr_fixed' "${count}"
|
|
done
|