diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6369be08dbddfe782fd231ea7935b0efd217b66a..a88ac03cd0c68592607f6600563ea4577f7b8a7a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -89,6 +89,9 @@ benchmark: key: "$CI_JOB_NAME_SLUG-$CI_COMMIT_REF_SLUG" paths: - build + parallel: + matrix: + - CI_BENCHMARK: ['accuracy', 'timeseq', 'timeomp'] script: - ./scripts/plafrim_level1.sh artifacts: diff --git a/scripts/plafrim_level3.sh b/scripts/plafrim_level3.sh index c03be9767eaac9f3df53d89bd16b3fb179cd7d42..00b034b841f5f49710fdbc9dc3c1945e293fb1f2 100755 --- a/scripts/plafrim_level3.sh +++ b/scripts/plafrim_level3.sh @@ -18,34 +18,12 @@ if [[ -z "${CI_HOSTNAME}" ]]; then export CI_HOSTNAME=`hostname` fi -# configuration and compilation -cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-O3 -march=native" -Dscalfmm_BUILD_BENCH=ON -Dscalfmm_USE_MKL=ON -cmake --build build --target fmm-computation-seq & -cmake --build build --target fmm-computation-omp & -wait export SCALFMM_EXE_DIR=$PWD/build/bench/Release # clean old benchmarks if [ -d scripts/results ]; then rm scripts/results -r fi -# Execute benchmark commands -jube run scripts/scalfmm-accuracy.xml --id 1 -jube run scripts/scalfmm-time-seq.xml --id 2 -jube run scripts/scalfmm-time-omp.xml --id 3 - -# parse log files -jube analyse scripts/results --id 1 -jube analyse scripts/results --id 2 -jube analyse scripts/results --id 3 - -# reports in csv -jube result scripts/results --id 1 -o accuracy_csv > scalfmm_accuracy.csv -jube result scripts/results --id 2 -o timeseq_csv > scalfmm_timeseq.csv -jube result scripts/results --id 3 -o timeomp_csv > scalfmm_timeomp.csv -cat scalfmm_accuracy.csv -cat scalfmm_timeseq.csv -cat scalfmm_timeomp.csv # get current database file scalfmm.sqlite3 stored on gitlab if [[ ! -z "${CI_JOB_TOKEN}" ]]; then @@ -58,10 +36,48 @@ if [[ ! -z "${CI_JOB_TOKEN}" ]]; then fi fi -# update scalfmm.sqlite3 database -jube result scripts/results --id 1 -o accuracy -jube result scripts/results --id 2 -o timeseq -jube result scripts/results --id 3 -o timeomp +# configuration +cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-O3 -march=native" -Dscalfmm_BUILD_BENCH=ON -Dscalfmm_USE_MKL=ON + +# compilation and run benchmarks +case "${CI_BENCHMARK}" in + accuracy) + echo "CI_BENCHMARK is set to accuracy." + # compilation + cmake --build build --target fmm-computation-seq + # run benchmarks + jube run scripts/scalfmm-accuracy.xml --id 1 + # parse result log files + jube analyse scripts/results --id 1 + # generate csv file + jube result scripts/results --id 1 -o accuracy_csv > scalfmm_accuracy.csv + cat scalfmm_accuracy.csv + # update scalfmm.sqlite3 database, table accuracy + jube result scripts/results --id 1 -o accuracy + ;; + timeseq) + echo "CI_BENCHMARK is set to timeseq." + cmake --build build --target fmm-computation-seq + jube run scripts/scalfmm-time-seq.xml --id 2 + jube analyse scripts/results --id 2 + jube result scripts/results --id 2 -o timeseq_csv > scalfmm_timeseq.csv + cat scalfmm_timeseq.csv + jube result scripts/results --id 2 -o timeseq + ;; + timeomp) + echo "CI_BENCHMARK is set to timeomp." + cmake --build build --target fmm-computation-omp + jube run scripts/scalfmm-time-omp.xml --id 3 + jube analyse scripts/results --id 3 + jube result scripts/results --id 3 -o timeomp_csv > scalfmm_timeomp.csv + cat scalfmm_timeomp.csv + jube result scripts/results --id 3 -o timeomp + ;; + *) + echo "CI_BENCHMARK is set to an unknown value." + exit 1 + ;; +esac # upload updated scalfmm.sqlite3 on gitlab if [[ ! -z "${CI_JOB_TOKEN}" ]]; then diff --git a/scripts/scalfmm-accuracy.xml b/scripts/scalfmm-accuracy.xml index af35c89931d29d86393af73f7402fe09793b1132..a56f340246ac2e8fdbe57a4aa101691d4e602bd1 100644 --- a/scripts/scalfmm-accuracy.xml +++ b/scripts/scalfmm-accuracy.xml @@ -5,12 +5,12 @@ <!-- Cartesian product of input parameters --> <parameterset name="param"> - <parameter name="ndim" type="int" >1, 2, 3</parameter> - <!-- <parameter name="ndim" type="int" >2, 3</parameter> --> - <parameter name="kernel_type" type="int" >0, 6, 7</parameter> - <!-- <parameter name="kernel_type" type="int" >0, 7</parameter> --> - <parameter name="interp_type" type="int" >0, 1, 2, 3, 4</parameter> - <!-- <parameter name="interp_type" type="int" >2, 3</parameter> --> + <!-- <parameter name="ndim" type="int" >1, 2, 3</parameter> --> + <parameter name="ndim" type="int" >2, 3</parameter> + <!-- <parameter name="kernel_type" type="int" >0, 6, 7</parameter> --> + <parameter name="kernel_type" type="int" >0</parameter> + <!-- <parameter name="interp_type" type="int" >0, 1, 2, 3, 4</parameter> --> + <parameter name="interp_type" type="int" >3</parameter> <parameter name="nrun" type="int" >1</parameter> <parameter name="nthread" type="int" >4</parameter> <parameter name="groupsize" type="int" >1</parameter> diff --git a/scripts/scalfmm-time-omp.xml b/scripts/scalfmm-time-omp.xml index 9395523ee8a2f8128f5bf53e09ea67c8f07bcd9e..287a7310ca12a05406e6f45a4484b680e428ecf2 100644 --- a/scripts/scalfmm-time-omp.xml +++ b/scripts/scalfmm-time-omp.xml @@ -16,8 +16,8 @@ <parameter name="size" type="int" >100000</parameter> <parameter name="nthread" type="int" >1, 2, 4, 8, 16</parameter> <!-- <parameter name="nthread" type="int" >1, 2, 4</parameter> --> - <parameter name="groupsize" type="int" >1, 5, 10, 100, 1000</parameter> - <!-- <parameter name="groupsize" type="int" >1, 5, 10, 100</parameter> --> + <!-- <parameter name="groupsize" type="int" >1, 5, 10, 100, 1000</parameter> --> + <parameter name="groupsize" type="int" >10, 100</parameter> <parameter name="command" type="string">$SCALFMM_EXE_DIR/fmm-computation-omp --fmm-computation --dimension ${ndim} --group-size ${groupsize} --interp-settings ${interp_type} --kernel ${kernel_type} --order ${interp_order} --nb-runs ${nrun} --threads ${nthread} --size ${size} --tree-height ${tree_height}</parameter> </parameterset> diff --git a/scripts/scalfmm-time-seq.xml b/scripts/scalfmm-time-seq.xml index 43092c6f1eb3ce69096319a60465df5b068e6eed..7a3febcbb6c5dc9724ad0c395aa952a2fec27cdc 100644 --- a/scripts/scalfmm-time-seq.xml +++ b/scripts/scalfmm-time-seq.xml @@ -8,16 +8,16 @@ <parameter name="ndim" type="int" >1, 2, 3</parameter> <!-- <parameter name="ndim" type="int" >2</parameter> --> <parameter name="kernel_type" type="int" >0</parameter> - <parameter name="interp_type" type="int" >1, 2, 4</parameter> - <!-- <parameter name="interp_type" type="int" >1</parameter> --> + <!-- <parameter name="interp_type" type="int" >1, 2, 4</parameter> --> + <parameter name="interp_type" type="int" >1</parameter> <parameter name="nrun" type="int" >1</parameter> <parameter name="nthread" type="int" >1</parameter> <parameter name="groupsize" type="int" >1</parameter> - <parameter name="tree_height" type="int" >3, 4, 5</parameter> - <!-- <parameter name="tree_height" type="int" >3</parameter> --> + <!-- <parameter name="tree_height" type="int" >3, 4, 5</parameter> --> + <parameter name="tree_height" type="int" >3</parameter> <parameter name="interp_order" type="int" >5</parameter> - <parameter name="size" type="int" >1000, 5000, 10000, 50000, 100000, 500000, 1000000</parameter> - <!-- <parameter name="size" type="int" >1000, 5000, 10000</parameter> --> + <!-- <parameter name="size" type="int" >1000, 5000, 10000, 50000, 100000, 500000, 1000000</parameter> --> + <parameter name="size" type="int" >1000, 5000, 10000, 50000</parameter> <parameter name="command" type="string">$SCALFMM_EXE_DIR/fmm-computation-seq --fmm-computation --dimension ${ndim} --group-size ${groupsize} --interp-settings ${interp_type} --kernel ${kernel_type} --order ${interp_order} --nb-runs ${nrun} --threads ${nthread} --size ${size} --tree-height ${tree_height}</parameter> </parameterset>