diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f4ff8046795b8c34e77c5cfcee0d798634ba1fb4..e4f4cafdc1bab443fcd9dec764d840128391009f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -119,7 +119,7 @@ database: when: always paths: - ./*.csv - - ./*.png + - ./*.pdf - ./*.sqlite3 - ./scripts/results/ diff --git a/scripts/database.sh b/scripts/database.sh index 53d5741efeeec01830e93abc7dae75780a17afd3..9d6f5699c27b5bfd2655d485f200a37768fd157d 100755 --- a/scripts/database.sh +++ b/scripts/database.sh @@ -38,6 +38,7 @@ python3 ./scripts/add_result.py -e https://elasticsearch.bordeaux.inria.fr -t co python3 ./scripts/add_result.py -e https://elasticsearch.bordeaux.inria.fr -t concace -p scalfmm -n timeomp scalfmm_timeomp.csv # plot some figures at this precise commit +python3 ./scripts/plot_wrong_accuracy.py -f scalfmm_accuracy.csv -n accuracy python3 ./scripts/plot.py -f scalfmm_accuracy.csv -n accuracy python3 ./scripts/plot.py -f scalfmm_timeseq.csv -n timeseq python3 ./scripts/plot.py -f scalfmm_timeomp.csv -n timeomp diff --git a/scripts/plafrim_level1.sh b/scripts/plafrim_level1.sh index 243c56fab8da67a6cb4a06d3945dd595a92916d2..4fe7ef1bf887468ffff9495126e8fd5c95f7e2bc 100755 --- a/scripts/plafrim_level1.sh +++ b/scripts/plafrim_level1.sh @@ -21,7 +21,7 @@ case "${CI_BENCHMARK}" in ;; timeomp) SLURM_NAME=scalfmm_timeomp - SLURM_NCORES=16 + SLURM_NCORES=32 ;; *) echo "CI_BENCHMARK is set to an unknown value." diff --git a/scripts/plot.py b/scripts/plot.py index d56a62c9a21092e823958e1114345efd2ddec329..38334593cf84493ff2ae228f150cae35981195f9 100644 --- a/scripts/plot.py +++ b/scripts/plot.py @@ -14,39 +14,44 @@ def main( df = pd.read_csv(file) if name == "accuracy": - for (ndim, kernel_type, interp_type, tree_height), group in df.groupby(['ndim', 'kernel_type', 'interp_type', 'tree_height']): - x = group['interp_order'] - y = group['error'] - plt.plot(x, y, label=f"{ndim}-{kernel_type}-{interp_type}-{tree_height}") - plt.yscale('log') + for ndim, group_ndim in df.groupby('ndim'): + plt.figure() + for (kernel_type, interp_type, tree_height), group in group_ndim.groupby(['kernel_type', 'interp_type', 'tree_height']): + x = group['interp_order'] + y = group['error'] + plt.plot(x, y, label=f"k={kernel_type}-i={interp_type}-h={tree_height}") + plt.yscale('log') + plt.xlabel('Order') + plt.ylabel('Relative norm-2 error') + plt.title(f'Error vs. Order (d={ndim})') + plt.legend() + plt.savefig(f'scalfmm_accuracy_d={ndim}.pdf', bbox_inches='tight') - plt.xlabel('Order') - plt.ylabel('Relative norm-2 error') - plt.title('Error vs. Order') - plt.legend() - plt.savefig('scalfmm_accuracy.png', bbox_inches='tight') elif name == "timeseq": - for (ndim, kernel_type, interp_type, tree_height, interp_order), group in df.groupby(['ndim', 'kernel_type', 'interp_type', 'tree_height', 'interp_order']): - x = group['size'] - y = group['timefull_avg'] - plt.plot(x, y, label=f"{ndim}-{kernel_type}-{interp_type}-{tree_height}-{interp_order}") + for ndim, group_ndim in df.groupby('ndim'): + plt.figure() + for (kernel_type, interp_type, tree_height, interp_order), group in group_ndim.groupby(['kernel_type', 'interp_type', 'tree_height', 'interp_order']): + x = group['size'] + y = group['timefull_avg'] + plt.plot(x, y, label=f"k={kernel_type}-i={interp_type}-h={tree_height}-o={interp_order}") + plt.xlabel('Size') + plt.ylabel('Time (s)') + plt.title(f'Time vs. Size (d={ndim})') + plt.legend() + plt.savefig(f'scalfmm_timeseq_d={ndim}.pdf', bbox_inches='tight') - plt.xlabel('Size') - plt.ylabel('Time (s)') - plt.title('Time vs. Size') - plt.legend() - plt.savefig('scalfmm_timeseq.png', bbox_inches='tight') elif name == "timeomp": - for (ndim, kernel_type, interp_type, tree_height, interp_order, size, groupsize), group in df.groupby(['ndim', 'kernel_type', 'interp_type', 'tree_height', 'interp_order', 'size', 'groupsize']): - x = group['nthread'] - y = group['timefull_avg'] - plt.plot(x, y, label=f"{ndim}-{kernel_type}-{interp_type}-{tree_height}-{interp_order}-{size}-{groupsize}") - - plt.xlabel('Number of threads') - plt.ylabel('Time (s)') - plt.title('Time vs. Number of threads') - plt.legend() - plt.savefig('scalfmm_timeomp.png', bbox_inches='tight') + for ndim, group_ndim in df.groupby('ndim'): + plt.figure() + for (kernel_type, interp_type, tree_height, interp_order, size, groupsize), group in group_ndim.groupby(['kernel_type', 'interp_type', 'tree_height', 'interp_order', 'size', 'groupsize']): + x = group['nthread'] + y = group['timefull_avg'] + plt.plot(x, y, label=f"k={kernel_type}-i={interp_type}-h={tree_height}-o={interp_order}-{size}-{groupsize}") + plt.xlabel('Number of threads') + plt.ylabel('Time (s)') + plt.title(f'Time vs. Number of threads (d={ndim})') + plt.legend() + plt.savefig(f'scalfmm_timeomp_d={ndim}.pdf', bbox_inches='tight') if __name__ == "__main__": main() \ No newline at end of file diff --git a/scripts/plot_wrong_accuracy.py b/scripts/plot_wrong_accuracy.py index 32d84caaf1c1c48475f38fd8ca07380cc0af75b3..f148d3f730dd4bf7d45370013a531ebad108bd57 100644 --- a/scripts/plot_wrong_accuracy.py +++ b/scripts/plot_wrong_accuracy.py @@ -2,10 +2,7 @@ # ['gitcommit', 'gitcommitdate', 'hostname', 'ndim', 'kernel_type', 'interp_type', 'tree_height', 'interp_order', 'error'] # Je souhaite comparer le champ de la colonne 'error' avec le champ 10.0^(1-o) pour o dans la colonne 'interp_order' lorsque la valeur de 'interp_order' est < 12 # je souhaite afficher toutes les lignes telsque si comparaison est False alors j'extrais le tuple associé sux colonnes 'ndim', 'kernel_type', 'interp_type', 'tree_height' et pour ce tuple de valeur j'extraie les lignes -# # - - - +# import pandas as pd import numpy as np import matplotlib.pyplot as plt @@ -13,7 +10,7 @@ import matplotlib.pyplot as plt file="scalfmm_accuracy.csv" df = pd.read_csv(file) -coeff = 3.0 +coeff = 3.0 # Calcul de 10^(1 - interp_order) df['computed_value'] = coeff*(10.0 ** (1 - df['interp_order'])) xref= df['interp_order'].unique() @@ -35,11 +32,11 @@ tuples_faux = df_faux_comparaison[['ndim', 'kernel_type', 'interp_type', 'tree_h df_resultat = pd.DataFrame(columns=df.columns) for _, couple in tuples_faux.iterrows(): ndim, kernel, interp, tree = couple['ndim'], couple['kernel_type'], couple['interp_type'], couple['tree_height'] - + # Filtrer les lignes du DataFrame d'origine qui ont ce tuple - result = df[(df['ndim'] == ndim) & (df['kernel_type'] == kernel) & + result = df[(df['ndim'] == ndim) & (df['kernel_type'] == kernel) & (df['interp_type'] == interp) & (df['tree_height'] == tree)] - + # Afficher les lignes pour chaque tuple print(f"Résultats pour ndim = {ndim}, kernel_type = {kernel}, interp_type = {interp}, tree_height = {tree}:") # print(result) @@ -59,7 +56,7 @@ for d in range(1,4): if ndim == d: x = group['interp_order'] y = group['error'] - plt.plot(x, y, label=f"{ndim}-{kernel_type}-{interp_type}-{tree_height}") + plt.plot(x, y, label=f"k={kernel_type}-i={interp_type}-h={tree_height}") plt.yscale('log') plt.plot(xref,yref,'-x') @@ -67,5 +64,4 @@ for d in range(1,4): plt.ylabel('Relative norm-2 error') plt.title('Error vs. Order') plt.legend() - file = 'scalfmm_wrong_accuracy_d='+str(d)+'.pdf' - plt.savefig(file, bbox_inches='tight') \ No newline at end of file + plt.savefig(f"scalfmm_wrong_accuracy_d={d}.pdf", bbox_inches='tight') diff --git a/scripts/scalfmm-accuracy.xml b/scripts/scalfmm-accuracy.xml index 77073acf27337fc7b44bf0eef907efeeb677caa9..5812c37504c0262c1edb72ff38f8e7093330beaf 100644 --- a/scripts/scalfmm-accuracy.xml +++ b/scripts/scalfmm-accuracy.xml @@ -7,17 +7,17 @@ <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="kernel_type" type="int" >0</parameter> --> - <parameter name="interp_type" type="int" >0, 1, 2, 3, 4</parameter> + <parameter name="interp_type" type="int" >1, 2, 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> - <parameter name="tree_height" type="int" >3, 4, 5</parameter> - <parameter name="interp_order" type="int" >3, 4, 5, 6, 7, 8, 9, 10, 11, 12</parameter> + <parameter name="tree_height" type="int" >4, 5</parameter> + <parameter name="interp_order" type="int" >3, 4, 5, 6, 7, 8, 9, 10</parameter> <!-- <parameter name="interp_order" type="int" >3, 4</parameter> --> - <parameter name="command" type="string">$SCALFMM_EXE_DIR/fmm-computation-seq --direct-computation --fmm-computation --dimension ${ndim} --group-size ${groupsize} --interp-settings ${interp_type} --kernel ${kernel_type} --order ${interp_order} --nb-runs ${nrun} --threads ${nthread} --tree-height ${tree_height}</parameter> + <parameter name="size" type="int" >15000</parameter> + <parameter name="command" type="string">$SCALFMM_EXE_DIR/fmm-computation-seq --direct-computation --fmm-computation --dimension ${ndim} --group-size ${groupsize} --interp-settings ${interp_type} --kernel ${kernel_type} --order ${interp_order} --nb-runs ${nrun} --size ${size} --tree-height ${tree_height}</parameter> </parameterset> <!-- Execution commands --> diff --git a/scripts/scalfmm-time-omp.xml b/scripts/scalfmm-time-omp.xml index 0b48f4acfae611ba59cfe532be2830a0dbd58a8d..a8bef1a6a90dd334b15d208b822d11057ff1eddf 100644 --- a/scripts/scalfmm-time-omp.xml +++ b/scripts/scalfmm-time-omp.xml @@ -6,18 +6,14 @@ <!-- Cartesian product of input parameters --> <parameterset name="param"> <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" >2</parameter> <parameter name="nrun" type="int" >1</parameter> - <parameter name="tree_height" type="int" >3, 4, 5</parameter> - <!-- <parameter name="tree_height" type="int" >5</parameter> --> <parameter name="interp_order" type="int" >5</parameter> - <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" >10, 100</parameter> --> + <parameter name="size" type="int" >500000</parameter> + <parameter name="nthread" type="int" >1, 2, 4, 8, 16, 32</parameter> + <parameter name="tree_height" mode="python" type="int">int(((int($size/(10*$interp_order^$ndim))).bit_length() - 1)/$ndim)</parameter> + <parameter name="groupsize" type="int" >10, 100, 1000, 5000</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 e6c6629ed20411f38cc49e01c3a11831720ff434..f3c3ddb4d1c7e889f89aff06abdf040acccd7ef5 100644 --- a/scripts/scalfmm-time-seq.xml +++ b/scripts/scalfmm-time-seq.xml @@ -6,18 +6,14 @@ <!-- Cartesian product of input parameters --> <parameterset name="param"> <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, 4</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="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, 50000</parameter> --> + <parameter name="tree_height" mode="python" type="int">int(((int($size/(10*$interp_order^$ndim))).bit_length() - 1)/$ndim)</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>