diff --git a/fftma_module/gen/analysis.ipynb b/fftma_module/gen/analysis.ipynb index 2024b4f..d63e62e 100644 --- a/fftma_module/gen/analysis.ipynb +++ b/fftma_module/gen/analysis.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -106,19 +106,20 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "def create_df(file_name):\n", " data = get_data(file_name)\n", " df = pd.DataFrame(data)\n", + " print(df)\n", " return df.groupby(['function']).agg({'time': ['min', 'max', 'mean', 'sum', 'count'], 'memory': ['min', 'max', 'median'], 'cpu': ['min', 'max', 'mean']})" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -129,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -165,7 +166,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -184,7 +185,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -243,7 +244,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -284,14 +285,78 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[25.531034, 7.507407, 13.893103, 13.893103, 16.229032, 100.1, 10.814286, 20.1]\n" + "[67.687209, 53.041176, 63.629412, 100.1, 62.004762, 84.983721, 68.704651, 50.688235]\n", + " cpu function memory time\n", + "0 0.012500 ran2 0.0 0.000216\n", + "1 0.000000 ran2 -0.3 0.000221\n", + "2 0.012500 gasdev -0.3 0.001320\n", + "3 0.000000 gasdev 0.5 0.000245\n", + "4 0.000000 ran2 0.0 0.000320\n", + "5 0.000000 ran2 0.0 0.000220\n", + "6 0.000000 ran2 0.0 0.000219\n", + "7 0.000000 ran2 0.0 0.000218\n", + "8 0.025000 gasdev 0.0 0.002511\n", + "9 0.000000 gasdev 0.0 0.000222\n", + "10 0.000000 ran2 0.0 0.000213\n", + "11 0.012500 ran2 -1.0 0.000217\n", + "12 0.012500 gasdev -2.6 0.001264\n", + "13 0.025000 gasdev -3.0 0.000220\n", + "14 0.000000 ran2 0.0 0.000214\n", + "15 0.000000 ran2 0.0 0.000217\n", + "16 0.000000 gasdev 0.0 0.001264\n", + "17 37.537500 gasdev 0.0 0.000239\n", + "18 0.012500 ran2 0.5 0.000215\n", + "19 0.000000 ran2 0.0 0.000215\n", + "20 0.025000 gasdev 0.5 0.001269\n", + "21 0.000000 gasdev 0.0 0.000222\n", + "22 0.000000 ran2 0.0 0.000214\n", + "23 0.000000 ran2 0.0 0.000217\n", + "24 0.000000 gasdev 0.0 0.001258\n", + "25 0.000000 gasdev 0.5 0.000225\n", + "26 0.000000 ran2 0.0 0.000247\n", + "27 0.012500 ran2 0.0 0.000244\n", + "28 0.000000 ran2 0.0 0.000267\n", + "29 0.000000 ran2 0.0 0.000254\n", + "... ... ... ... ...\n", + "1901 0.000000 cov_value -1.0 0.000238\n", + "1902 0.000000 cov_value 0.5 0.000315\n", + "1903 0.000000 cov_value 0.0 0.000309\n", + "1904 0.000000 cov_value 0.0 0.000267\n", + "1905 0.000000 cov_value 0.0 0.000245\n", + "1906 0.000000 cov_value 0.0 0.000244\n", + "1907 25.025000 cov_value 0.0 0.000245\n", + "1908 0.000000 cov_value 0.0 0.000246\n", + "1909 0.000000 cov_value 0.0 0.000244\n", + "1910 0.000000 cov_value 0.5 0.000312\n", + "1911 0.000000 cov_value 0.0 0.000245\n", + "1912 0.000000 cov_value 0.0 0.000237\n", + "1913 12.512500 cov_value 0.0 0.000235\n", + "1914 0.000000 cov_value 0.0 0.000236\n", + "1915 0.012500 cov_value 0.0 0.000236\n", + "1916 0.000000 cov_value 0.0 0.000236\n", + "1917 0.000000 cov_value 0.0 0.000236\n", + "1918 0.000000 cov_value 0.0 0.000308\n", + "1919 0.012500 cov_value 0.5 0.000266\n", + "1920 12.525000 cov_value 0.0 0.000312\n", + "1921 0.000000 cov_value -0.3 0.000274\n", + "1922 64.810324 covariance 14.1 0.457605\n", + "1923 0.000000 fourt 0.0 0.000363\n", + "1924 0.012500 prebuild_gwn 0.0 0.000278\n", + "1925 0.000000 fourt 0.0 0.000347\n", + "1926 25.025000 build_real 0.5 0.000273\n", + "1927 0.000000 fourt 0.0 0.000380\n", + "1928 0.012500 clean_real 0.0 0.000276\n", + "1929 64.717406 fftma2 15.9 0.467197\n", + "1930 67.356665 Py_kgeneration 57.2 1.308772\n", + "\n", + "[1931 rows x 4 columns]\n" ] }, { @@ -319,23 +384,23 @@ " \n", " \n", " \n", - " time\n", " memory\n", " cpu\n", + " time\n", " \n", " \n", " \n", " min\n", " max\n", - " mean\n", - " sum\n", - " count\n", + " median\n", " min\n", " max\n", - " median\n", + " mean\n", " min\n", " max\n", " mean\n", + " sum\n", + " count\n", " \n", " \n", " function\n", @@ -355,243 +420,243 @@ " \n", " \n", " Py_kgeneration\n", - " 0.595284\n", - " 0.595284\n", - " 0.595284\n", - " 0.595284\n", + " 57.2\n", + " 57.2\n", + " 57.2\n", + " 67.356665\n", + " 67.356665\n", + " 67.356665\n", + " 1.308772\n", + " 1.308772\n", + " 1.308772\n", + " 1.308772\n", " 1\n", - " 0.1\n", - " 0.1\n", - " 0.1\n", - " 25.329470\n", - " 25.329470\n", - " 25.329470\n", " \n", " \n", " generate\n", - " 0.432435\n", - " 0.432435\n", - " 0.432435\n", - " 0.432435\n", + " 41.3\n", + " 41.3\n", + " 41.3\n", + " 68.854896\n", + " 68.854896\n", + " 68.854896\n", + " 0.840239\n", + " 0.840239\n", + " 0.840239\n", + " 0.840239\n", " 1\n", - " -0.2\n", - " -0.2\n", - " -0.2\n", - " 26.008496\n", - " 26.008496\n", - " 26.008496\n", " \n", " \n", " gasdev\n", - " 0.000086\n", - " 0.024420\n", - " 0.000613\n", - " 0.313931\n", - " 512\n", - " -0.2\n", - " 0.2\n", + " -14.4\n", + " 3.4\n", " 0.0\n", " 0.000000\n", - " 50.050000\n", - " 1.325659\n", + " 85.504167\n", + " 10.033426\n", + " 0.000220\n", + " 0.011673\n", + " 0.001223\n", + " 0.626111\n", + " 512\n", " \n", " \n", " fftma2\n", - " 0.160294\n", - " 0.160294\n", - " 0.160294\n", - " 0.160294\n", + " 15.9\n", + " 15.9\n", + " 15.9\n", + " 64.717406\n", + " 64.717406\n", + " 64.717406\n", + " 0.467197\n", + " 0.467197\n", + " 0.467197\n", + " 0.467197\n", " 1\n", - " 0.3\n", - " 0.3\n", - " 0.3\n", - " 24.091533\n", - " 24.091533\n", - " 24.091533\n", " \n", " \n", " covariance\n", - " 0.157064\n", - " 0.157064\n", - " 0.157064\n", - " 0.157064\n", + " 14.1\n", + " 14.1\n", + " 14.1\n", + " 64.810324\n", + " 64.810324\n", + " 64.810324\n", + " 0.457605\n", + " 0.457605\n", + " 0.457605\n", + " 0.457605\n", " 1\n", - " 0.3\n", - " 0.3\n", - " 0.3\n", - " 23.405370\n", - " 23.405370\n", - " 23.405370\n", " \n", " \n", " ran2\n", - " 0.000085\n", - " 0.001395\n", - " 0.000124\n", - " 0.086921\n", - " 702\n", - " -0.2\n", - " 0.2\n", + " -12.1\n", + " 2.0\n", " 0.0\n", " 0.000000\n", - " 37.537500\n", - " 0.375748\n", + " 62.562500\n", + " 2.266940\n", + " 0.000213\n", + " 0.000454\n", + " 0.000274\n", + " 0.192690\n", + " 702\n", " \n", " \n", " cov_value\n", - " 0.000086\n", - " 0.000170\n", - " 0.000099\n", - " 0.069126\n", - " 700\n", - " -0.2\n", - " 0.2\n", + " -5.9\n", + " 1.0\n", " 0.0\n", " 0.000000\n", - " 25.025000\n", - " 0.290690\n", + " 62.575000\n", + " 2.182732\n", + " 0.000218\n", + " 0.000386\n", + " 0.000264\n", + " 0.184634\n", + " 700\n", " \n", " \n", " cgrid\n", - " 0.001410\n", - " 0.001410\n", - " 0.001410\n", - " 0.001410\n", + " 1.3\n", + " 1.3\n", + " 1.3\n", + " 20.883333\n", + " 20.883333\n", + " 20.883333\n", + " 0.004164\n", + " 0.004164\n", + " 0.004164\n", + " 0.004164\n", " 1\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", - " 18.775000\n", - " 18.775000\n", - " 18.775000\n", " \n", " \n", " length\n", - " 0.000292\n", - " 0.000330\n", - " 0.000311\n", - " 0.000934\n", - " 3\n", - " 0.0\n", - " 0.0\n", " 0.0\n", + " 0.5\n", + " 0.3\n", " 0.000000\n", - " 18.775000\n", - " 6.258333\n", + " 12.525000\n", + " 4.175000\n", + " 0.000901\n", + " 0.000928\n", + " 0.000912\n", + " 0.002737\n", + " 3\n", " \n", " \n", " fourt\n", - " 0.000131\n", - " 0.000149\n", - " 0.000140\n", - " 0.000420\n", - " 3\n", " 0.0\n", " 0.0\n", " 0.0\n", " 0.000000\n", - " 0.012500\n", - " 0.004167\n", - " \n", - " \n", - " maxfactor\n", - " 0.000087\n", - " 0.000117\n", - " 0.000097\n", - " 0.000291\n", - " 3\n", - " 0.0\n", - " 0.0\n", - " 0.0\n", " 0.000000\n", - " 6.262500\n", - " 2.087500\n", + " 0.000000\n", + " 0.000347\n", + " 0.000380\n", + " 0.000363\n", + " 0.001090\n", + " 3\n", " \n", " \n", - " build_real\n", - " 0.000100\n", - " 0.000100\n", - " 0.000100\n", - " 0.000100\n", - " 1\n", - " 0.0\n", + " maxfactor\n", " 0.0\n", + " 0.5\n", " 0.0\n", " 0.000000\n", " 0.000000\n", " 0.000000\n", + " 0.000232\n", + " 0.000289\n", + " 0.000252\n", + " 0.000757\n", + " 3\n", " \n", " \n", " prebuild_gwn\n", - " 0.000094\n", - " 0.000094\n", - " 0.000094\n", - " 0.000094\n", - " 1\n", " 0.0\n", " 0.0\n", " 0.0\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", + " 0.012500\n", + " 0.012500\n", + " 0.012500\n", + " 0.000278\n", + " 0.000278\n", + " 0.000278\n", + " 0.000278\n", + " 1\n", " \n", " \n", " clean_real\n", - " 0.000093\n", - " 0.000093\n", - " 0.000093\n", - " 0.000093\n", - " 1\n", " 0.0\n", " 0.0\n", " 0.0\n", - " 0.000000\n", - " 0.000000\n", - " 0.000000\n", + " 0.012500\n", + " 0.012500\n", + " 0.012500\n", + " 0.000276\n", + " 0.000276\n", + " 0.000276\n", + " 0.000276\n", + " 1\n", + " \n", + " \n", + " build_real\n", + " 0.5\n", + " 0.5\n", + " 0.5\n", + " 25.025000\n", + " 25.025000\n", + " 25.025000\n", + " 0.000273\n", + " 0.000273\n", + " 0.000273\n", + " 0.000273\n", + " 1\n", " \n", " \n", "\n", "" ], "text/plain": [ - " time memory \\\n", - " min max mean sum count min max \n", - "function \n", - "Py_kgeneration 0.595284 0.595284 0.595284 0.595284 1 0.1 0.1 \n", - "generate 0.432435 0.432435 0.432435 0.432435 1 -0.2 -0.2 \n", - "gasdev 0.000086 0.024420 0.000613 0.313931 512 -0.2 0.2 \n", - "fftma2 0.160294 0.160294 0.160294 0.160294 1 0.3 0.3 \n", - "covariance 0.157064 0.157064 0.157064 0.157064 1 0.3 0.3 \n", - "ran2 0.000085 0.001395 0.000124 0.086921 702 -0.2 0.2 \n", - "cov_value 0.000086 0.000170 0.000099 0.069126 700 -0.2 0.2 \n", - "cgrid 0.001410 0.001410 0.001410 0.001410 1 0.0 0.0 \n", - "length 0.000292 0.000330 0.000311 0.000934 3 0.0 0.0 \n", - "fourt 0.000131 0.000149 0.000140 0.000420 3 0.0 0.0 \n", - "maxfactor 0.000087 0.000117 0.000097 0.000291 3 0.0 0.0 \n", - "build_real 0.000100 0.000100 0.000100 0.000100 1 0.0 0.0 \n", - "prebuild_gwn 0.000094 0.000094 0.000094 0.000094 1 0.0 0.0 \n", - "clean_real 0.000093 0.000093 0.000093 0.000093 1 0.0 0.0 \n", + " memory cpu time \\\n", + " min max median min max mean min \n", + "function \n", + "Py_kgeneration 57.2 57.2 57.2 67.356665 67.356665 67.356665 1.308772 \n", + "generate 41.3 41.3 41.3 68.854896 68.854896 68.854896 0.840239 \n", + "gasdev -14.4 3.4 0.0 0.000000 85.504167 10.033426 0.000220 \n", + "fftma2 15.9 15.9 15.9 64.717406 64.717406 64.717406 0.467197 \n", + "covariance 14.1 14.1 14.1 64.810324 64.810324 64.810324 0.457605 \n", + "ran2 -12.1 2.0 0.0 0.000000 62.562500 2.266940 0.000213 \n", + "cov_value -5.9 1.0 0.0 0.000000 62.575000 2.182732 0.000218 \n", + "cgrid 1.3 1.3 1.3 20.883333 20.883333 20.883333 0.004164 \n", + "length 0.0 0.5 0.3 0.000000 12.525000 4.175000 0.000901 \n", + "fourt 0.0 0.0 0.0 0.000000 0.000000 0.000000 0.000347 \n", + "maxfactor 0.0 0.5 0.0 0.000000 0.000000 0.000000 0.000232 \n", + "prebuild_gwn 0.0 0.0 0.0 0.012500 0.012500 0.012500 0.000278 \n", + "clean_real 0.0 0.0 0.0 0.012500 0.012500 0.012500 0.000276 \n", + "build_real 0.5 0.5 0.5 25.025000 25.025000 25.025000 0.000273 \n", "\n", - " cpu \n", - " median min max mean \n", - "function \n", - "Py_kgeneration 0.1 25.329470 25.329470 25.329470 \n", - "generate -0.2 26.008496 26.008496 26.008496 \n", - "gasdev 0.0 0.000000 50.050000 1.325659 \n", - "fftma2 0.3 24.091533 24.091533 24.091533 \n", - "covariance 0.3 23.405370 23.405370 23.405370 \n", - "ran2 0.0 0.000000 37.537500 0.375748 \n", - "cov_value 0.0 0.000000 25.025000 0.290690 \n", - "cgrid 0.0 18.775000 18.775000 18.775000 \n", - "length 0.0 0.000000 18.775000 6.258333 \n", - "fourt 0.0 0.000000 0.012500 0.004167 \n", - "maxfactor 0.0 0.000000 6.262500 2.087500 \n", - "build_real 0.0 0.000000 0.000000 0.000000 \n", - "prebuild_gwn 0.0 0.000000 0.000000 0.000000 \n", - "clean_real 0.0 0.000000 0.000000 0.000000 " + " \n", + " max mean sum count \n", + "function \n", + "Py_kgeneration 1.308772 1.308772 1.308772 1 \n", + "generate 0.840239 0.840239 0.840239 1 \n", + "gasdev 0.011673 0.001223 0.626111 512 \n", + "fftma2 0.467197 0.467197 0.467197 1 \n", + "covariance 0.457605 0.457605 0.457605 1 \n", + "ran2 0.000454 0.000274 0.192690 702 \n", + "cov_value 0.000386 0.000264 0.184634 700 \n", + "cgrid 0.004164 0.004164 0.004164 1 \n", + "length 0.000928 0.000912 0.002737 3 \n", + "fourt 0.000380 0.000363 0.001090 3 \n", + "maxfactor 0.000289 0.000252 0.000757 3 \n", + "prebuild_gwn 0.000278 0.000278 0.000278 1 \n", + "clean_real 0.000276 0.000276 0.000276 1 \n", + "build_real 0.000273 0.000273 0.000273 1 " ] }, - "execution_count": 16, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1687,9 +1752,91 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 29, "metadata": {}, "outputs": [ + { + "data": { + "text/html": [ + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, { "data": { "application/vnd.plotly.v1+json": { @@ -1721,9 +1868,9 @@ "length", "fourt", "maxfactor", - "build_real", "prebuild_gwn", - "clean_real" + "clean_real", + "build_real" ], "marker": { "colors": [ @@ -1738,8 +1885,8 @@ "#636efa", "#ab63fa", "#636efa", - "#636efa", "#ab63fa", + "#636efa", "#636efa" ] }, @@ -1756,31 +1903,30 @@ "", "fftma2", "", - "", "fftma2", + "", "" ], "type": "treemap", "values": [ - 0.1, - 0.2, - 0, - 0.3, - 0.3, - 0, + 57.2, + 41.3, 0, + 15.9, + 14.1, 0, 0, + 1.3, + 0.3, 0, 0, 0, 0, - 0 + 0.5 ] } ], "layout": { - "autosize": true, "legend": { "tracegroupgap": 0 }, @@ -1798,11 +1944,6 @@ "line": { "color": "#E5ECF6", "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 } }, "type": "bar" @@ -1814,11 +1955,6 @@ "line": { "color": "#E5ECF6", "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 } }, "type": "barpolar" @@ -2017,10 +2153,9 @@ "histogram": [ { "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 + "colorbar": { + "outlinewidth": 0, + "ticks": "" } }, "type": "histogram" @@ -2606,11 +2741,10 @@ } } }, - "image/png": "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rVroyn4nq13b1vrny1N1233/0PWXnVkbVYf3vFwLFy2x53nqcQdpxi+/6fhzrtWaa6xmz+XyC06U2Rk7rf9NalJaokfuuNJ+9qeee1OX33CvLjn3OO2969YqK6+06zT1g8/1z3E3aLXWLTTphbd16XV3a+MN1tY1A3pq0w3X1Xv//Up9r7pd++y6jQ1RXggggAACCCCAAAIIFJpAYIPKRMDQUeP02j9usVFjXj3OvkbbbLGRehy2jw45+dLaoPrw0290Yp+hNpKOO2Lf2jW479FnNeqeCXpp/Eit2baNDapHn3xZLzw2XJ3at7XHPTjhed3490d129Dz1Xm36t2m/3z4hXr1u9Hupmy9xYbqecEN+mX2HE15+EYbU+ZlbunrcuwAbbBuJxtV5vPufvh5dodn+Xh67Ol/aegt4/TiYyPszo953TluksaOf16vTLxZpSXF9V4z23c9Sz0O36f2lr8XXntX/a7+uy488xiddvzB9j3lFZXa44jqOUcOOrd2nE++mCazAzbsqt46qPNONrpuve+JPz3ow0TiTzNmafK4G+x7TVCVlVfouUduqj3PPpffotff+VhvPHWbWrWsXofbH3hS9z7yT334wj32OPOAkNlz5tV5iMjX303Xkaddqb9f19dG1jMvvq2BQ++2UXb8kfvVflZjb3bXpk6+o0GLQvuHis+DAAIIIIAAAgggEB6BwAbVTttsap/mZx7KcOzhnfX9jzNtRE285xr7f7yXD6r7H5uiEXc+rmcfulHrrrVm7eqa72EdfcbVNjYO2HsHG1Tmdrz3nrur9pia3RUTS+t0qn7vl9/+qKNOv0p33NBPe+28lbbreqa67r2jhg48vc6VYwLH7LK88eSttUFlbjHsfcrhtcctWVqmvY/qq1OPPUhnn3yY/fXDel5mn0546XknNHglNhRUY2+5VNtvtYl936dffm8j85oBveyu0vKvnQ/urUP239VGptmFM+f0ysRRdY6piUkTS2YXyQSVCU1z3jWvy264V1Pf+8x+n63m9eDEF+wtl8bR7FSZ2w/HTnheL7/xvn79ba7dxUomU9bEmJmdtpqgevzOq7XFX9evHevJKW/oihvv05P3D9HGf1krPP9kcqYIIIAAAggggAACgRAIbFCZ7yZdMvQu/fjTLD06+kqNumeiXnvnI/t/vGviquax6Wb3xezCmNvbVnxVVFbpsvNPtLfqmaCa8vK/9dak2/8UVP+aMNLe2lYnqK7va3d/ttz3NJ3SvasuPqfuE/euHv6AnnnhbX3wwj21QbXiDowZz8xrdnnMd56++m66jbWGHgtf88EaCqqnHhhib080r3fe/0zmVkfzHbHosp2zmvdXViW03x7batTg8+zu3UeffauiZd8lqznG3BZoYqgmZkxQrb9OB40a3KdOUH3w36/trtWKQfXulDvVtEmpjdmxE15Q3zOOtt8pM9+H+nnZ7YIrBtXkB6+3c9S8pvzr3/Z7Zub2wZrvWwXinyw+JAIIIIAAAggggEAoBAIdVDXBYHaPTr3wJp3YbX/17NH1T0E15vHnNGz0Y/aBDWanZcXXaq1b2tvVMgmqvXbZWiZuuuy9g65bYYeq71W36cNPv7W3Jdbc8ldfUH33wwy7K2V2l16f+rE++OSbeh9Gsfzn9hJUn339g7qfOcju4u21y1Z/Ou+mTUpsJJ5z6Sh9+/1PdW5FXP7gju3bqqS4yO5QZRJU5rZD82RG852wmtdHn36rE/oM+dMOlXkIh7lts+Y18Z+v6ephD2jSmOu0wXodQ/EPJSeJAAIIIIAAAgggEByBQAeVuW2sy3EDtPO2m2nS82/Z287ME/hW3KEyuy8nnDtEtww+T/vtuV3t6pjb7cz3e8yT/Mwr06Ayu0DmiYDPPTKs9jHoiURC+3bvb29fu33oBSsNKjN3z7432CfrvfHv/+qC04+u83S9+i4nE1TdD9undles5jtUy+9Qmd233Q/vY2+pM7twy7+m/W+GjSPzHad7Hp6sv495Si89PsL61bxm/TZPpSVFtd9RyySozC1/23Q5w353zTyUouZlnkT4xD9f15BLTtORB+5Re8vf8t8BM8cOHjlWTz//lt6ZfEe9O4zB+UeNT4oAAggggAACCCDQGAUCHVRmQcztfPc+/E/ttuMW9jHq5rViUJlfO2PAMJmdIBMWm268rmb/Ns8+/c6E0DMPXm+/d5VpUJmn1Znxux24p07pfoC9Te6Bx6fony9N1dhbL7U7LivboTKfzwTRgMF32tvhXn1ilN0RWtlr3+4XqkO71WufyvfuR1/ah1IsH1Tm/eZWx9EPPq0Lz+puv+9VUVmpCc+8qseefkUT7h5knzpY85S/tTu204VnHaP27VbXV9/+KPPDg00Q1jzQIpOgMrf8mYd2/PTLbBuWzZs1sfMvWrzU/nf3w/fRBacdpVff+cg+lMLsQp1zyhH626Z/0fv//VqDhj+gQ/ffVddc1Ksx/vPHOSGAAAIIIIAAAggEXCDwQWWC6MATLtHwq3rrwM47NRhU9udQ3fcPGy6zf5+v1i2baeftNlO/M47JeofKTPra1I/to8DN0+si0Yg233g9ndvzSO207ab2M60qqMyDGnY86Gz7gI1L+hy/ystq/KRX7M+NMj+ryjxS3JxffUFlBlr+51CVFhdp803Wtw/GqHl4hTnG/ByqkXePt48yX7K03D718IB9dtS5PY+ojbtMg+qH6b9o0PAx+uSraWrRrKl9FPz5p3XTsNGPa8LkV+3PAzOfxQTVPcMvkrlF8/1PvrI/h2q/PbeX+bljpaX1P+1wlVAcgAACCCCAAAIIIICAjwKBCiofHfI+tNnNuvT6e/TsQzdorQ5r5P3z5PoD1Dzlb/mnKeb6MzAfAggggAACCCCAAALpChBU6Yo5Pv776b/o869+0OCbx6rbQXvW+Z6R46kKejiCqqCXhw+HAAIIIIAAAggg0IAAQZXnS6Pz0f20eGmZDuuym40p84jzML4IqjCuOueMAAIIIIAAAggEX4CgCv4acgYIIIAAAggggAACCCCQJwGCKk/wTIsAAggggAACCCCAAALBFyCogr+GnAECCCCAAAIIIIAAAgjkSYCgyhM80yKAAAIIIIAAAggggEDwBQiq4K8hZ4AAAggggAACCCCAAAJ5EiCo8gTPtAgggAACCCCAAAIIIBB8AYIq+GvIGSCAAAIIIIAAAggggECeBAiqPMEzLQIIIIAAAggggAACCARfgKAK/hpyBggggAACCCCAAAIIIJAnAYIqT/BMiwACCCCAAAIIIIAAAsEXIKiCv4acAQIIIIAAAggggAACCORJgKDKEzzTIoAAAggggAACCCCAQPAFCKrgryFngAACCCCAAAIIIIAAAnkSIKjyBM+0CCCAAAIIIIAAAgggEHwBgir4a8gZIIAAAggggAACCCCAQJ4ECKo8wTMtAggggAACCCCAAAIIBF+AoAr+GnIGCCCAAAIIIIAAAgggkCcBgipP8EyLAAIIIIAAAggggAACwRcgqIK/hpwBAggggAACCCCAAAII5EmAoMoTPNMigAACCCCAAAIIIIBA8AUIquCvIWeAAAIIIIAAAggggAACeRIgqPIEz7QIIIAAAggggAACCCAQfAGCKvhryBkggAACCCCAAAIIIIBAngQIqjzBMy0CCCCAAAIIIIAAAggEX4CgCv4acgYIIIAAAggggAACCCCQJwGCKk/wTIsAAggggAACCCCAAALBFyCogr+GnAECCCCAAAIIIIAAAgjkSYCgyhM80yKAAAIIIIAAAggggEDwBQiq4K8hZ4AAAggggAACCCCAAAJ5EiCo8gTPtAgggAACCCCAAAIIIBB8AYIq+GvIGSCAAAIIIIAAAggggECeBAiqPMEzLQIIIIAAAggggAACCARfgKAK/hpyBggggAACCCCAAAIIIJAnAYIqT/BMiwACCCCAAAIIIIAAAsEXIKiCv4acAQIIIIAAAggggAACCORJgKDKEzzTIoAAAggggAACCCCAQPAFCKrgryFngAACCCCAAAIIIIAAAnkSIKjyBM+0CCCAAAIIIIAAAgggEHwBgir4a8gZIIAAAggggAACCCCAQJ4ECKo8wTMtAggggAACCCCAAAIIBF+AoAr+GnIGCCCAAAIIIIAAAgggkCcBgipP8EyLAAIIIIAAAggggAACwRcgqIK/hpwBAggggAACCCCAAAII5EmAoMoTPNMigAACCCCAAAIIIIBA8AUIquCvIWeAAAIIIIAAAggggAACeRIgqPIEz7QIIIAAAggggAACCCAQfAGCKvhryBkggAACCCCAAAIIIIBAngQIqjzBMy0CCCCAAAIIIIAAAggEX4CgCv4acgYIIIAAAggggAACCCCQJwGCKk/wTIsAAggggAACCCCAAALBFyCogr+GnAECCCCAAAIIIIAAAgjkSYCgyhM80yKAAAIIIIAAAggggEDwBQiq4K8hZ4AAAggggAACCCCAAAJ5EiCo8gTPtAgggAACCCCAAAIIIBB8AYIq+GvIGSCAAAIIIIAAAggggECeBAiqPMEzLQIIIIAAAggggAACCARfgKAK/hpyBggggAACCCCAAAIIIJAnAYIqT/BMiwACCCCAAAIIIIAAAsEXIKiCv4acAQIIIIAAAggggAACCORJgKDKEzzTIoAAAggggAACCCCAQPAFCKrgryFngAACCCCAAAIIIIAAAnkSIKjyBM+0CCCAAAIIIIAAAgggEHwBgir4a8gZIIAAAggggAACCCCAQJ4ECKo8wTMtAggggAACCCCAAAIIBF+AoAr+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", "text/html": [ - "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_treemap(df_improve, (\"memory\", \"median\"), \"memory_median\", \"Memory treemap\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Análisis de la CPU\n", + "\n", + "Se busca en los siguientes gráficos mostrar cómo evoluciona el uso de la CPU a lo largo de las distintas configuraciones.\n", + "\n", + "El gráfico se hizo en base al promedio de uso en la CPU de todos los cores disponibles (8 en nuestras computadoras)." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "domain": { + "x": [ + 0, + 1 + ], + "y": [ + 0, + 1 + ] + }, + "hovertemplate": "function=%{label}
cpu_mean=%{value}
parent=%{parent}", + "labels": [ + "Py_kgeneration", + "generate", + "gasdev", + "fftma2", + "covariance", + "ran2", + "cov_value", + "cgrid", + "length", "fourt", "maxfactor", "build_real", @@ -3660,316 +5135,25 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 11, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[20.299501, 14.456436, 5.228205, 52.891878, 51.790821, 13.206796, 9.190909, 8.515842]\n" + "ename": "KeyError", + "evalue": "'function'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0manalyze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'log_16-aa'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0moverall_time\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"16\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"Py_kgeneration\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"time\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"sum\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0moverall_memory\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"16\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"Py_kgeneration\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"memory\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"median\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36manalyze\u001b[0;34m(file_names)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0manalyze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile_names\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile_names\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mdf_grouped\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcreate_df\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile_names\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdf_grouped\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msort_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mby\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'time'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'sum'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mascending\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mcreate_df\u001b[0;34m(file_name)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfile_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupby\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'function'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0magg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'time'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'min'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'max'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'mean'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'sum'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'count'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'memory'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'min'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'max'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'median'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'cpu'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'min'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'max'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'mean'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/home/cecix/.local/lib/python2.7/site-packages/pandas/core/generic.pyc\u001b[0m in \u001b[0;36mgroupby\u001b[0;34m(self, by, axis, level, as_index, sort, group_keys, squeeze, observed, **kwargs)\u001b[0m\n\u001b[1;32m 7630\u001b[0m return groupby(self, by=by, axis=axis, level=level, as_index=as_index,\n\u001b[1;32m 7631\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgroup_keys\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mgroup_keys\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msqueeze\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msqueeze\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 7632\u001b[0;31m observed=observed, **kwargs)\n\u001b[0m\u001b[1;32m 7633\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7634\u001b[0m def asfreq(self, freq, method=None, how=None, normalize=False,\n", + "\u001b[0;32m/home/cecix/.local/lib/python2.7/site-packages/pandas/core/groupby/groupby.pyc\u001b[0m in \u001b[0;36mgroupby\u001b[0;34m(obj, by, **kwds)\u001b[0m\n\u001b[1;32m 2108\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'invalid type: {}'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2109\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2110\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mklass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mby\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/home/cecix/.local/lib/python2.7/site-packages/pandas/core/groupby/groupby.pyc\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, obj, keys, axis, level, grouper, exclusions, selection, as_index, sort, group_keys, squeeze, observed, **kwargs)\u001b[0m\n\u001b[1;32m 358\u001b[0m \u001b[0msort\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 359\u001b[0m \u001b[0mobserved\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mobserved\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 360\u001b[0;31m mutated=self.mutated)\n\u001b[0m\u001b[1;32m 361\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 362\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/home/cecix/.local/lib/python2.7/site-packages/pandas/core/groupby/grouper.pyc\u001b[0m in \u001b[0;36m_get_grouper\u001b[0;34m(obj, key, axis, level, sort, observed, mutated, validate)\u001b[0m\n\u001b[1;32m 576\u001b[0m \u001b[0min_axis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlevel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgpr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgpr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 577\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 578\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgpr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 579\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgpr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mGrouper\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mgpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkey\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 580\u001b[0m \u001b[0;31m# Add key to exclusions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'function'" ] - }, - { - "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", - " \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", - "
timememorycpu
minmaxmeansumcountminmaxmedianminmaxmean
function
Py_kgeneration2.8661752.8661752.8661752.8661751-26.2-26.2-26.222.26854622.26854622.268546
generate2.1132492.1132492.1132492.1132491-25.7-25.7-25.721.94754821.94754821.947548
gasdev0.0000830.0232590.0003811.5621714096-7.80.20.00.00000075.0750001.122834
fftma20.7504520.7504520.7504520.7504521-0.5-0.5-0.523.43971723.43971723.439717
covariance0.7466900.7466900.7466900.7466901-0.5-0.5-0.523.45624623.45624623.456246
ran20.0000810.0013120.0000910.4817035268-7.80.20.00.00000037.5375000.273394
cov_value0.0000830.0001780.0000910.3232413564-1.10.20.00.00000037.5375000.273404
cgrid0.0012510.0012510.0012510.00125110.00.00.00.0125000.0125000.012500
fourt0.0003270.0004400.0003730.00112030.00.00.00.0000000.0125000.008333
length0.0002760.0002770.0002770.00083030.00.00.00.0000000.0125000.004167
maxfactor0.0000820.0000830.0000820.00024730.00.00.00.0000000.0000000.000000
build_real0.0001410.0001410.0001410.00014110.00.00.00.0000000.0000000.000000
clean_real0.0001270.0001270.0001270.00012710.00.00.012.51250012.51250012.512500
prebuild_gwn0.0001060.0001060.0001060.00010610.00.00.00.0000000.0000000.000000
\n", - "
" - ], - "text/plain": [ - " time memory \\\n", - " min max mean sum count min max \n", - "function \n", - "Py_kgeneration 2.866175 2.866175 2.866175 2.866175 1 -26.2 -26.2 \n", - "generate 2.113249 2.113249 2.113249 2.113249 1 -25.7 -25.7 \n", - "gasdev 0.000083 0.023259 0.000381 1.562171 4096 -7.8 0.2 \n", - "fftma2 0.750452 0.750452 0.750452 0.750452 1 -0.5 -0.5 \n", - "covariance 0.746690 0.746690 0.746690 0.746690 1 -0.5 -0.5 \n", - "ran2 0.000081 0.001312 0.000091 0.481703 5268 -7.8 0.2 \n", - "cov_value 0.000083 0.000178 0.000091 0.323241 3564 -1.1 0.2 \n", - "cgrid 0.001251 0.001251 0.001251 0.001251 1 0.0 0.0 \n", - "fourt 0.000327 0.000440 0.000373 0.001120 3 0.0 0.0 \n", - "length 0.000276 0.000277 0.000277 0.000830 3 0.0 0.0 \n", - "maxfactor 0.000082 0.000083 0.000082 0.000247 3 0.0 0.0 \n", - "build_real 0.000141 0.000141 0.000141 0.000141 1 0.0 0.0 \n", - "clean_real 0.000127 0.000127 0.000127 0.000127 1 0.0 0.0 \n", - "prebuild_gwn 0.000106 0.000106 0.000106 0.000106 1 0.0 0.0 \n", - "\n", - " cpu \n", - " median min max mean \n", - "function \n", - "Py_kgeneration -26.2 22.268546 22.268546 22.268546 \n", - "generate -25.7 21.947548 21.947548 21.947548 \n", - "gasdev 0.0 0.000000 75.075000 1.122834 \n", - "fftma2 -0.5 23.439717 23.439717 23.439717 \n", - "covariance -0.5 23.456246 23.456246 23.456246 \n", - "ran2 0.0 0.000000 37.537500 0.273394 \n", - "cov_value 0.0 0.000000 37.537500 0.273404 \n", - "cgrid 0.0 0.012500 0.012500 0.012500 \n", - "fourt 0.0 0.000000 0.012500 0.008333 \n", - "length 0.0 0.000000 0.012500 0.004167 \n", - "maxfactor 0.0 0.000000 0.000000 0.000000 \n", - "build_real 0.0 0.000000 0.000000 0.000000 \n", - "clean_real 0.0 12.512500 12.512500 12.512500 \n", - "prebuild_gwn 0.0 0.000000 0.000000 0.000000 " - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ @@ -17797,21 +18981,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.9" + "pygments_lexer": "ipython2", + "version": "2.7.18" } }, "nbformat": 4, diff --git a/fftma_module/gen/include/chunk_array.h b/fftma_module/gen/include/chunk_array.h new file mode 100644 index 0000000..ba23813 --- /dev/null +++ b/fftma_module/gen/include/chunk_array.h @@ -0,0 +1,36 @@ +#ifndef _CHUNKARRAY_H +#define _CHUNKARRAY_H + +#include +#include +#include +#include +#include + +#define MAX_CHUNK_SIZE 32 + +typedef struct chunk_array { + size_t init_pos; + size_t chunk_size; + size_t total_size; + FILE* fp; + double* data; +}chunk_array_t; + +chunk_array_t* chunk_array_create(char* filename, size_t total_size, size_t chunk_size); + +void chunk_array_read(chunk_array_t* chunk_array); + +//void chunk_array_write(chunk_array_t* chunk_array, char* filename); + +void chunk_array_free(chunk_array_t* chunk_array); + +bool chunk_array_get(chunk_array_t* chunk_array, size_t pos, double *value_ptr); + +bool chunk_array_save(chunk_array_t* chunk_array, size_t pos, double valor); + +void chunk_array_flush(chunk_array_t* chunk_array); + +size_t chunk_array_size(chunk_array_t* chunk_array); + +#endif \ No newline at end of file diff --git a/fftma_module/gen/include/geostat.h b/fftma_module/gen/include/geostat.h index 85811d9..33cf755 100644 --- a/fftma_module/gen/include/geostat.h +++ b/fftma_module/gen/include/geostat.h @@ -2,6 +2,7 @@ #include #include #include +#include "chunk_array.h" #ifndef _GEOSTAT_H #define _GEOSTAT_H @@ -283,6 +284,7 @@ struct realization_mod { int n; int code; double* vector; + chunk_array_t* vector_2; }; /*=====================================================*/ diff --git a/fftma_module/gen/lib_src/chunk_array.c b/fftma_module/gen/lib_src/chunk_array.c new file mode 100644 index 0000000..9084e24 --- /dev/null +++ b/fftma_module/gen/lib_src/chunk_array.c @@ -0,0 +1,72 @@ +#include "chunk_array.h" +#include "stdbool.h" + +void chunk_array_free(chunk_array_t* chunk_array) { + fclose(chunk_array->fp); + free(chunk_array->data); + free(chunk_array); +} + +bool chunk_array_update_read(chunk_array_t* chunk_array) { + size_t newLen = fread(chunk_array->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp); + chunk_array->init_pos += newLen; +} + +bool chunk_array_get(chunk_array_t* chunk_array, size_t pos, double *valor) { + if (pos>((chunk_array->init_pos + chunk_array->chunk_size)-1)) { + chunk_array_update_read(chunk_array); + } + *valor=chunk_array->data[pos%chunk_array->chunk_size]; + return true; +} + +bool chunk_array_save(chunk_array_t* chunk_array, size_t pos, double valor) { + if (pos>((chunk_array->init_pos + chunk_array->chunk_size)-1)) { + chunk_array_flush(chunk_array); + } + chunk_array->data[pos%chunk_array->chunk_size]=valor; + return true; +} + +chunk_array_t* chunk_array_create(char* filename, size_t total_size, size_t chunk_size) { + chunk_array_t* chunk_array = (chunk_array_t*)malloc(sizeof(chunk_array_t)); + + chunk_array->fp = fopen(filename, "w+"); + + if (chunk_array == NULL || chunk_array->fp == NULL) { + return NULL; + } + + chunk_array->data = malloc(chunk_size * sizeof(double)); + + if (chunk_size > 0 && chunk_array->data == NULL) { + free(chunk_array); + return NULL; + } + + chunk_array->init_pos = 0; + chunk_array->chunk_size = chunk_size; + chunk_array->total_size = total_size; + return chunk_array; +} + +void chunk_array_read(chunk_array_t* chunk_array) { + rewind(chunk_array->fp); + chunk_array->init_pos = 0; + size_t newLen = fread(chunk_array->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp); +} + +void chunk_array_write(chunk_array_t* chunk_array, char* filename) { + chunk_array->fp = fopen(filename, "w"); + if (chunk_array->fp == NULL) { + printf("ke"); + fclose(chunk_array->fp); + chunk_array->fp = fopen(filename, "w"); + } + chunk_array->init_pos = 0; +} + +void chunk_array_flush(chunk_array_t* chunk_array) { + size_t newLen = fwrite(chunk_array->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp); + chunk_array->init_pos += newLen; +} diff --git a/fftma_module/gen/lib_src/generate.c b/fftma_module/gen/lib_src/generate.c index 7309b85..369f7a3 100644 --- a/fftma_module/gen/lib_src/generate.c +++ b/fftma_module/gen/lib_src/generate.c @@ -41,15 +41,19 @@ void generate(long* seed, int n, struct realization_mod* realization, int cores) /*realization definition*/ (*realization).n = n; (*realization).code = 0; - (*realization).vector = (double*)malloc(n * sizeof(double)); - if ((*realization).vector == NULL) { + (*realization).vector_2 = chunk_array_create("realization1.txt", n, 32); + if ((*realization).vector_2 == NULL) { log_error("RESULT = failed - No memory available in generate"); - exit; + exit(1); } /*Gaussian white noise generation*/ - for (i = 0; i < n; i++) - (*realization).vector[i] = gasdev(seed, &idum2, &iy, iv, cores); + for (i = 0; i < n; i++) { + double value = gasdev(seed, &idum2, &iy, iv, cores); + chunk_array_save((*realization).vector_2, i, value); + } + + chunk_array_flush((*realization).vector_2); t = clock() - t; double time_taken = ((double)t)/CLOCKS_PER_SEC; // calculate the elapsed time diff --git a/fftma_module/gen/lib_src/geostat.h b/fftma_module/gen/lib_src/geostat.h index 00936c2..35d8bcc 100644 --- a/fftma_module/gen/lib_src/geostat.h +++ b/fftma_module/gen/lib_src/geostat.h @@ -2,6 +2,7 @@ #include #include #include +#include "chunk_array.h" #ifndef _GEOSTAT_H #define _GEOSTAT_H @@ -284,6 +285,7 @@ struct realization_mod { int n; int code; double* vector; + chunk_array_t* vector_2; }; /*=====================================================*/ diff --git a/fftma_module/gen/lib_src/prebuild_gwn.c b/fftma_module/gen/lib_src/prebuild_gwn.c index a59d809..1773d5e 100644 --- a/fftma_module/gen/lib_src/prebuild_gwn.c +++ b/fftma_module/gen/lib_src/prebuild_gwn.c @@ -42,9 +42,10 @@ void prebuild_gwn(struct grid_mod grid, int n[3], struct realization_mod* realin ntot = n[0] * n[1] * n[2]; realization[0] = 0.; + chunk_array_read((*realin).vector_2); if (solver == 1) { for (i = 0; i < ntot; i++) { - realization[i + 1] = (*realin).vector[i]; + chunk_array_get((*realin).vector_2, i, &realization[i + 1]); } } else { for (k = 1; k <= n[2]; k++) { @@ -53,7 +54,7 @@ void prebuild_gwn(struct grid_mod grid, int n[3], struct realization_mod* realin maille1 = i + (j - 1 + (k - 1) * n[1]) * n[0]; if (i <= grid.NX && j <= grid.NY && k <= grid.NZ) { maille0 = i - 1 + (j - 1 + (k - 1) * grid.NY) * grid.NX; - realization[maille1] = (*realin).vector[maille0]; + chunk_array_get((*realin).vector_2, maille0, &realization[maille1]); } else { realization[maille1] = 0.; } diff --git a/fftma_module/gen/moduleFFTMA.c b/fftma_module/gen/moduleFFTMA.c index 0757228..56cf15c 100644 --- a/fftma_module/gen/moduleFFTMA.c +++ b/fftma_module/gen/moduleFFTMA.c @@ -8,6 +8,7 @@ #include "toolsFFTPSIM.h" #include "toolsIO.h" #include "lib_src/log.h" +#include "chunk_array.h" #include #include #include @@ -55,8 +56,10 @@ static PyObject* genFunc(PyObject* self, PyObject* args) { free(variogram.alpha); free(variogram.scf); free(variogram.ap); - free(Z.vector); - + + chunk_array_free(Z.vector_2); + remove("realization1.txt"); + log_info("RESULT = success"); return out_array; } diff --git a/fftma_module/gen/parse_array.py b/fftma_module/gen/parse_array.py new file mode 100644 index 0000000..404c5a3 --- /dev/null +++ b/fftma_module/gen/parse_array.py @@ -0,0 +1,25 @@ +import collections + +def parse_array(): + with open("log_16-aa") as log_file: + + # rearrange data + lines_parsed = [] + lines = log_file.readlines() + for line in lines: + if "iv[0]" in line: + line_splitted = line.split()[2::3] + lines_parsed.append(line_splitted) + + # create histogram + histogram = {} + for i in range(len(lines_parsed)): + for j in range(len(lines_parsed[i])): + histogram[j] = histogram.get(j, []) + histogram[j].append(lines_parsed[i][j]) + + # iterate histogram + for position, values in histogram.items(): + print(collections.Counter(values)) + +parse_array() \ No newline at end of file diff --git a/fftma_module/gen/save_logs.sh b/fftma_module/gen/save_logs.sh index f12fd6a..63dd6f9 100755 --- a/fftma_module/gen/save_logs.sh +++ b/fftma_module/gen/save_logs.sh @@ -1,2 +1,2 @@ python3 setup.py install --user -ENV=analysis python3 test.py $1 2>&1 | split -l 5000000 - log_$1- \ No newline at end of file +ENV=analysis python3 test.py $1 2>&1 | split -l 5000000 - log_$1_generate_improve- \ No newline at end of file diff --git a/fftma_module/gen/setup.py b/fftma_module/gen/setup.py index da23647..9feb438 100644 --- a/fftma_module/gen/setup.py +++ b/fftma_module/gen/setup.py @@ -4,7 +4,7 @@ import numpy module_FFTMA = Extension( "FFTMA", include_dirs=["./include", numpy.get_include()], - extra_compile_args=["-g", "-std=c99", "-Wall", "-Wconversion", "-Wtype-limits", "-pedantic"], + extra_compile_args=["-g", "-std=gnu99", "-Wall", "-Wconversion", "-Wtype-limits", "-pedantic"], sources=[ "moduleFFTMA.c", "./lib_src/Py_getvalues.c", @@ -43,7 +43,8 @@ module_FFTMA = Extension( "./lib_src/testmemory.c", "./lib_src/genlib.c", "./lib_src/log.c", - "./lib_src/memory.c" + "./lib_src/memory.c", + "./lib_src/chunk_array.c" ], )