#!/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< #include std::size_t pfor::ParallelForParameters::nThreads = 16; constexpr unsigned n = BUFSIZ; int main() { pfor::Index i; EOF } footer() { cat<{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::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