diff --git a/examples/benchmark/05_analyze_results.ipynb b/examples/benchmark/05_analyze_results.ipynb index 4f9d8a7..8d8ec1a 100644 --- a/examples/benchmark/05_analyze_results.ipynb +++ b/examples/benchmark/05_analyze_results.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 51, + "execution_count": 69, "metadata": {}, "outputs": [], "source": [ @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 70, "metadata": {}, "outputs": [], "source": [ @@ -24,7 +24,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 71, "metadata": {}, "outputs": [ { @@ -159,7 +159,7 @@ "4 38.16 G " ] }, - "execution_count": 55, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } @@ -174,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 72, "metadata": {}, "outputs": [ { @@ -285,7 +285,7 @@ " 14772.027297\n", " 100\n", " GPU\n", - " 18.5\n", + " 18.5 G\n", " 5.4 G\n", " \n", " \n", @@ -312,10 +312,10 @@ "1 25 GPU 10.9 G 1.82 G \n", "2 50 GPU 14.18 G 3.91 G \n", "3 75 GPU 16.5 G 4.2 G \n", - "4 100 GPU 18.5 5.4 G " + "4 100 GPU 18.5 G 5.4 G " ] }, - "execution_count": 56, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } @@ -330,7 +330,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 73, "metadata": {}, "outputs": [ { @@ -382,7 +382,7 @@ " 1\n", " CPU\n", " 9.86 G\n", - " NaN\n", + " -\n", " \n", " \n", " 1\n", @@ -397,7 +397,7 @@ " 25\n", " CPU\n", " 17.10 G\n", - " NaN\n", + " -\n", " \n", " \n", " 2\n", @@ -412,7 +412,7 @@ " 50\n", " CPU\n", " 28.22 G\n", - " NaN\n", + " -\n", " \n", " \n", " 3\n", @@ -427,7 +427,7 @@ " 75\n", " CPU\n", " 34.57 G\n", - " NaN\n", + " -\n", " \n", " \n", " 4\n", @@ -442,7 +442,7 @@ " 100\n", " CPU\n", " 38.16 G\n", - " NaN\n", + " -\n", " \n", " \n", "\n", @@ -464,26 +464,27 @@ "4 596641.058382 5142.740966 21579.261236 21790.251365 100 CPU \n", "\n", " max_memory_cpu max_memory_gpu \n", - "0 9.86 G NaN \n", - "1 17.10 G NaN \n", - "2 28.22 G NaN \n", - "3 34.57 G NaN \n", - "4 38.16 G NaN " + "0 9.86 G - \n", + "1 17.10 G - \n", + "2 28.22 G - \n", + "3 34.57 G - \n", + "4 38.16 G - " ] }, - "execution_count": 57, + "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results = pd.concat([time_cpu, time_gpu], ignore_index=True, axis=0)\n", + "results = results.fillna(\"-\")\n", "results.head()" ] }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 74, "metadata": {}, "outputs": [], "source": [ @@ -500,7 +501,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 75, "metadata": {}, "outputs": [ { @@ -529,7 +530,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 76, "metadata": {}, "outputs": [], "source": [ @@ -541,12 +542,12 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 77, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -589,407 +590,15 @@ }, { "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
commandmeanstddevmedianusersystemminmaxmap_sizedevicemax_memory_cpumax_memory_gpu
0drexml run --no-add disease.env756.0886342.099031755.57252611070.151766725.128525753.675460759.3183031CPU9.86 GNaN
1drexml run --no-add disease.env5015.78069728.5435435009.626727125638.2303402058.7209194985.3248245061.48613625CPU17.10 GNaN
2drexml run --no-add disease.env11384.61687563.46303511373.451941303602.9335613445.28258211265.59237111487.68791850CPU28.22 GNaN
3drexml run --no-add disease.env16514.21931860.96398016510.313850448056.6026844461.34308416424.87633816597.54972475CPU34.57 GNaN
4drexml run --no-add disease.env21658.04168170.04911321636.453246596641.0583825142.74096621579.26123621790.251365100CPU38.16 GNaN
5drexml run --n-gpus 3 --no-add disease.env799.6404622.141657799.80711311038.003039378.631615797.057585802.3025811GPU6.76 G0.41 G
6drexml run --n-gpus 3 --no-add disease.env3692.5388958.3773423692.99499136117.5988522086.9819723680.6693903707.77005225GPU10.9 G1.82 G
7drexml run --n-gpus 3 --no-add disease.env7456.55707214.0991797458.38960259511.5144984488.1798157431.8912047474.41586150GPU14.18 G3.91 G
8drexml run --n-gpus 3 --no-add disease.env11050.91518917.46115911046.71883085566.1514106756.18251911022.50931911085.77847175GPU16.5 G4.2 G
9drexml run --n-gpus 3 --no-add disease.env14736.68172619.63219914733.902063106680.6275169168.40027114703.76434014772.027297100GPU18.55.4 G
\n", - "
" - ], - "text/plain": [ - " command mean stddev \\\n", - "0 drexml run --no-add disease.env 756.088634 2.099031 \n", - "1 drexml run --no-add disease.env 5015.780697 28.543543 \n", - "2 drexml run --no-add disease.env 11384.616875 63.463035 \n", - "3 drexml run --no-add disease.env 16514.219318 60.963980 \n", - "4 drexml run --no-add disease.env 21658.041681 70.049113 \n", - "5 drexml run --n-gpus 3 --no-add disease.env 799.640462 2.141657 \n", - "6 drexml run --n-gpus 3 --no-add disease.env 3692.538895 8.377342 \n", - "7 drexml run --n-gpus 3 --no-add disease.env 7456.557072 14.099179 \n", - "8 drexml run --n-gpus 3 --no-add disease.env 11050.915189 17.461159 \n", - "9 drexml run --n-gpus 3 --no-add disease.env 14736.681726 19.632199 \n", - "\n", - " median user system min max \\\n", - "0 755.572526 11070.151766 725.128525 753.675460 759.318303 \n", - "1 5009.626727 125638.230340 2058.720919 4985.324824 5061.486136 \n", - "2 11373.451941 303602.933561 3445.282582 11265.592371 11487.687918 \n", - "3 16510.313850 448056.602684 4461.343084 16424.876338 16597.549724 \n", - "4 21636.453246 596641.058382 5142.740966 21579.261236 21790.251365 \n", - "5 799.807113 11038.003039 378.631615 797.057585 802.302581 \n", - "6 3692.994991 36117.598852 2086.981972 3680.669390 3707.770052 \n", - "7 7458.389602 59511.514498 4488.179815 7431.891204 7474.415861 \n", - "8 11046.718830 85566.151410 6756.182519 11022.509319 11085.778471 \n", - "9 14733.902063 106680.627516 9168.400271 14703.764340 14772.027297 \n", - "\n", - " map_size device max_memory_cpu max_memory_gpu \n", - "0 1 CPU 9.86 G NaN \n", - "1 25 CPU 17.10 G NaN \n", - "2 50 CPU 28.22 G NaN \n", - "3 75 CPU 34.57 G NaN \n", - "4 100 CPU 38.16 G NaN \n", - "5 1 GPU 6.76 G 0.41 G \n", - "6 25 GPU 10.9 G 1.82 G \n", - "7 50 GPU 14.18 G 3.91 G \n", - "8 75 GPU 16.5 G 4.2 G \n", - "9 100 GPU 18.5 5.4 G " - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "results" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
devicemap_sizemeanstddevmax_memory_cpumax_memory_gpu
0CPU1756.0886342.0990319.86 GNaN
1CPU255015.78069728.54354317.10 GNaN
2CPU5011384.61687563.46303528.22 GNaN
3CPU7516514.21931860.96398034.57 GNaN
4CPU10021658.04168170.04911338.16 GNaN
5GPU1799.6404622.1416576.76 G0.41 G
6GPU253692.5388958.37734210.9 G1.82 G
7GPU507456.55707214.09917914.18 G3.91 G
8GPU7511050.91518917.46115916.5 G4.2 G
9GPU10014736.68172619.63219918.55.4 G
\n", - "
" - ], - "text/plain": [ - " device map_size mean stddev max_memory_cpu max_memory_gpu\n", - "0 CPU 1 756.088634 2.099031 9.86 G NaN\n", - "1 CPU 25 5015.780697 28.543543 17.10 G NaN\n", - "2 CPU 50 11384.616875 63.463035 28.22 G NaN\n", - "3 CPU 75 16514.219318 60.963980 34.57 G NaN\n", - "4 CPU 100 21658.041681 70.049113 38.16 G NaN\n", - "5 GPU 1 799.640462 2.141657 6.76 G 0.41 G\n", - "6 GPU 25 3692.538895 8.377342 10.9 G 1.82 G\n", - "7 GPU 50 7456.557072 14.099179 14.18 G 3.91 G\n", - "8 GPU 75 11050.915189 17.461159 16.5 G 4.2 G\n", - "9 GPU 100 14736.681726 19.632199 18.5 5.4 G" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "results[[\"device\", \"map_size\", \"mean\", \"stddev\", \"max_memory_cpu\", \"max_memory_gpu\"]]" - ] - }, - { - "cell_type": "code", - "execution_count": 64, + "execution_count": 78, "metadata": {}, "outputs": [], "source": [ "x = (\n", " results[[\"device\", \"map_size\", \"mean\", \"stddev\", \"max_memory_cpu\", \"max_memory_gpu\"]]\n", - " .rename(columns={\"map_size\": \"Map size\", \"device\": \"Device\"})\n", + " .rename(columns={\"map_size\": \"Map size\", \n", + " \"device\": \"Device\",\n", + " })\n", ").pivot(index=\"Map size\", columns=\"Device\")\n", "\n", "caption_str = r\"\"\"Memory (in GB) and clock time benchmarking results (in seconds) for the \\texttt{drexml} \n", @@ -1003,7 +612,8 @@ " .format(precision=2)\n", " .format_index(\"\\\\textbf{{{}}}\", escape=\"latex\", axis=1)\n", " .to_latex(\n", - " results_folder.joinpath(f\"{fname}.tex\"),\n", + " results_folder.joinpath(f\"{fname}_withmem.tex\"),\n", + " column_format=\"r\",\n", " multicol_align=\"c\",\n", " multirow_align=\"l\",\n", " clines=\"skip-last;data\",\n", diff --git a/examples/benchmark/results/memory_gpu.csv b/examples/benchmark/results/memory_gpu.csv index 0e3b57d..0c4ecb0 100644 --- a/examples/benchmark/results/memory_gpu.csv +++ b/examples/benchmark/results/memory_gpu.csv @@ -1,5 +1,5 @@ map_size,max_memory_cpu,max_memory_gpu -100, 18.5, 5.4 G +100, 18.5 G, 5.4 G 75, 16.5 G, 4.2 G 50, 14.18 G, 3.91 G 25, 10.9 G, 1.82 G diff --git a/examples/benchmark/results/time_benchmark.tex b/examples/benchmark/results/time_benchmark_withmem.tex similarity index 60% rename from examples/benchmark/results/time_benchmark.tex rename to examples/benchmark/results/time_benchmark_withmem.tex index 1c09e87..297277e 100644 --- a/examples/benchmark/results/time_benchmark.tex +++ b/examples/benchmark/results/time_benchmark_withmem.tex @@ -5,17 +5,17 @@ configurations (CPU/GPU). } \label{tab:time} -\begin{tabular}{lrrrrllll} +\begin{tabular}{r} \toprule & \multicolumn{2}{c}{\textbf{mean}} & \multicolumn{2}{c}{\textbf{stddev}} & \multicolumn{2}{c}{\textbf{max\_memory\_cpu}} & \multicolumn{2}{c}{\textbf{max\_memory\_gpu}} \\ Device & \textbf{CPU} & \textbf{GPU} & \textbf{CPU} & \textbf{GPU} & \textbf{CPU} & \textbf{GPU} & \textbf{CPU} & \textbf{GPU} \\ Map size & & & & & & & & \\ \midrule -1 & 756.09 & 799.64 & 2.10 & 2.14 & 9.86 G & 6.76 G & nan & 0.41 G \\ -25 & 5015.78 & 3692.54 & 28.54 & 8.38 & 17.10 G & 10.9 G & nan & 1.82 G \\ -50 & 11384.62 & 7456.56 & 63.46 & 14.10 & 28.22 G & 14.18 G & nan & 3.91 G \\ -75 & 16514.22 & 11050.92 & 60.96 & 17.46 & 34.57 G & 16.5 G & nan & 4.2 G \\ -100 & 21658.04 & 14736.68 & 70.05 & 19.63 & 38.16 G & 18.5 & nan & 5.4 G \\ +1 & 756.09 & 799.64 & 2.10 & 2.14 & 9.86 G & 6.76 G & - & 0.41 G \\ +25 & 5015.78 & 3692.54 & 28.54 & 8.38 & 17.10 G & 10.9 G & - & 1.82 G \\ +50 & 11384.62 & 7456.56 & 63.46 & 14.10 & 28.22 G & 14.18 G & - & 3.91 G \\ +75 & 16514.22 & 11050.92 & 60.96 & 17.46 & 34.57 G & 16.5 G & - & 4.2 G \\ +100 & 21658.04 & 14736.68 & 70.05 & 19.63 & 38.16 G & 18.5 G & - & 5.4 G \\ \bottomrule \end{tabular} \end{table}