NB. test.ijs - Benchmarks for par.ijs NB. Run with: load 'test.ijs' load 'par.ijs' NB. ========================================================= NB. Test functions NB. ========================================================= NB. Medium computation - prime check isprime =: 3 : 0 if. y < 2 do. 0 return. end. if. y = 2 do. 1 return. end. if. 0 = 2 | y do. 0 return. end. d =. 3 while. d * d <: y do. if. 0 = d | y do. 0 return. end. d =. d + 2 end. 1 ) NB. Heavy computation - count primes up to n countprimes =: 3 : 0 +/ isprime"0 i. >: y ) NB. Very heavy - recursive fibonacci (intentionally slow) fibslow =: 3 : 0 if. y < 2 do. y return. end. (fibslow y - 1) + fibslow y - 2 ) NB. ========================================================= NB. Run benchmarks NB. ========================================================= run_benchmarks =: 3 : 0 echo '' echo 'par.ijs Benchmark Suite' echo '=======================' echo 'System: ', (": par_cores), ' cores, ', (": par_workers''), ' workers' echo '' NB. Light computation - large array (expect overhead > benefit) echo '--- Light: square 100,000 numbers ---' data =. i. 100000 tseq =. 6!:2 '*:"0 data' tpar =. 6!:2 '*: par data' echo 'Sequential: ', (": tseq), 's' echo 'Parallel: ', (": tpar), 's' echo 'Speedup: ', (": tseq % tpar), 'x' echo '' NB. Medium computation - prime checking 1000 numbers echo '--- Medium: isprime on 1,000 numbers ---' data =. 10000 + i. 1000 tseq =. 6!:2 'isprime"0 data' tpar =. 6!:2 'isprime par data' echo 'Sequential: ', (": tseq), 's' echo 'Parallel: ', (": tpar), 's' echo 'Speedup: ', (": tseq % tpar), 'x' echo '' NB. Heavy computation - count primes for 100 different limits echo '--- Heavy: countprimes on 100 values ---' data =. 500 + 50 * i. 100 tseq =. 6!:2 'countprimes"0 data' tpar =. 6!:2 'countprimes par data' echo 'Sequential: ', (": tseq), 's' echo 'Parallel: ', (": tpar), 's' echo 'Speedup: ', (": tseq % tpar), 'x' echo '' NB. Very heavy - fibonacci (exponential time complexity) echo '--- Very Heavy: fibonacci(20-39) ---' data =. 20 + i. 20 tseq =. 6!:2 'fibslow"0 data' tpar =. 6!:2 'fibslow par data' echo 'Sequential: ', (": tseq), 's' echo 'Parallel: ', (": tpar), 's' echo 'Speedup: ', (": tseq % tpar), 'x' echo '' echo 'Done.' ) NB. Quick demo demo =: 3 : 0 echo 'Quick demo of par vs sequential' echo '' echo 'Squaring 1-10:' echo ' *:"0 i.10 = ', ": *:"0 i.10 echo ' *: par i.10 = ', ": *: par i.10 echo '' echo 'Sum rows of matrix:' m =. 3 4 $ i.12 echo ' matrix =' echo m echo ' +/"1 matrix = ', ": +/"1 m echo ' +/ par matrix = ', ": +/ par m ) smoutput '' smoutput 'par.ijs test suite loaded' smoutput 'Commands:' smoutput ' demo'''' - quick functionality demo' smoutput ' run_benchmarks'''' - run performance benchmarks' run_benchmarks'' exit''