thesis version
This commit is contained in:
168
ctbenchmarks/gen_ct
Executable file
168
ctbenchmarks/gen_ct
Executable file
@ -0,0 +1,168 @@
|
||||
#!/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
|
Reference in New Issue
Block a user