{ "cells": [ { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import pandas as pd\n", "from pandas import DataFrame, Series\n", "import numpy as np\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "from scipy import stats\n", "import sys" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "matrixMalEX=\"data_GG.csv\"\n", "matrixMal=\"data_GM.csv\"\n", "matrixIt=\"data_L.csv\"\n", "n_qty=2 #CAMBIAR SEGUN LA CANTIDAD DE NODOS USADOS\n", "repet = 3 * 2 #CAMBIAR EL PRIMER NUMERO SEGUN NUMERO DE EJECUCIONES POR CONFIG\n", "\n", "p_value = 0.05\n", "values = [2, 10, 20, 40]\n", "dist_names = ['null', 'BestFit', 'WorstFit']" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "def speedUp(arr, seq, df):\n", " numP = df.loc[arr.index[0]].NP\n", " return seq[( seq.NP == numP )]['EX'] / arr.mean()" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "dfG = pd.read_csv( matrixMalEX )\n", "\n", "dfG = dfG.drop(columns=dfG.columns[0])\n", "dfG['S'] = dfG['N']\n", "dfG['N'] = dfG['S'] + dfG['%Async']\n", "dfG['%Async'] = (dfG['%Async'] / dfG['N']) * 100\n", "\n", "if(n_qty == 1):\n", " group = dfG.groupby(['%Async', 'Groups'])['TE']\n", "else: \n", " group = dfG.groupby(['Dist', '%Async', 'Groups'])['TE']\n", "\n", "#group\n", "grouped_aggG = group.agg(['mean'])\n", "grouped_aggG.rename(columns={'mean':'TE',}, inplace=True)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "dfM = pd.read_csv( matrixMal )\n", "dfM = dfM.drop(columns=dfM.columns[0])\n", "\n", "dfM['S'] = dfM['N']\n", "dfM['N'] = dfM['S'] + dfM['%Async']\n", "dfM[\"TR\"] = dfM[\"TC\"] + dfM[\"TS\"] + dfM[\"TA\"]\n", "dfM['%Async'] = (dfM['%Async'] / dfM['N']) * 100\n", "\n", "if(n_qty == 1):\n", " groupM = dfM.groupby(['%Async','NP', 'NS'])['TC', 'TS', 'TA', 'TR']\n", "else:\n", " groupM = dfM.groupby(['Dist', '%Async','NP', 'NS'])['TC', 'TS', 'TA', 'TR']\n", "\n", "#group\n", "grouped_aggM = groupM.agg(['mean'])\n", "grouped_aggM.columns = grouped_aggM.columns.get_level_values(0)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:12: FutureWarning: set_axis currently defaults to operating inplace.\n", "This will change in a future version of pandas, use inplace=True to avoid this warning.\n", " if sys.path[0] == '':\n" ] } ], "source": [ "dfL = pd.read_csv( matrixIt )\n", "dfL = dfL.drop(columns=dfL.columns[0])\n", "\n", "if(n_qty == 1):\n", " groupL = dfL[dfL['NS'] != 0].groupby(['Tt', '%Async', 'NP', 'NS'])['Ti', 'To']\n", "else:\n", " groupL = dfL[dfL['NS'] != 0].groupby(['Tt', 'Dist', '%Async', 'NP', 'NS'])['Ti', 'To']\n", "\n", "#group\n", "grouped_aggL = groupL.agg(['mean', 'count'])\n", "grouped_aggL.columns = grouped_aggL.columns.get_level_values(0)\n", "grouped_aggL.set_axis(['Ti', 'Iters', 'To', 'Iters2'], axis='columns')\n", "\n", "grouped_aggL['Iters'] = np.ceil(grouped_aggL['Iters']/6) # TODO Cambiar a repeticiones realizadas\n", "grouped_aggL['Iters2'] = np.ceil(grouped_aggL['Iters2']/6)" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "grouped_aggL.to_excel(\"resultL.xlsx\") \n", "grouped_aggM.to_excel(\"resultM.xlsx\") \n", "grouped_aggG.to_excel(\"resultG.xlsx\") " ] }, { "cell_type": "code", "execution_count": 65, "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%AsyncGroupsDistMatrixCommTamTimeItersTES
020000000000.020,402,210000000.21,103.3259152000000000
120000000000.020,402,210000000.21,103.6616732000000000
220000000000.020,402,210000000.21,103.6472412000000000
3200000000075.010,401,110000000.21,102.710496500000000
4200000000075.010,401,110000000.21,102.785736500000000
.................................
475200000000050.010,102,210000000.21,101.2920791000000000
476200000000050.010,102,210000000.21,101.6835711000000000
477200000000050.040,201,110000000.21,103.1076881000000000
478200000000050.040,201,110000000.21,103.1695511000000000
479200000000050.040,201,110000000.21,103.4421011000000000
\n", "

480 rows × 10 columns

\n", "
" ], "text/plain": [ " N %Async Groups Dist Matrix CommTam Time Iters TE \\\n", "0 2000000000 0.0 20,40 2,2 100000 0 0.2 1,10 3.325915 \n", "1 2000000000 0.0 20,40 2,2 100000 0 0.2 1,10 3.661673 \n", "2 2000000000 0.0 20,40 2,2 100000 0 0.2 1,10 3.647241 \n", "3 2000000000 75.0 10,40 1,1 100000 0 0.2 1,10 2.710496 \n", "4 2000000000 75.0 10,40 1,1 100000 0 0.2 1,10 2.785736 \n", ".. ... ... ... ... ... ... ... ... ... \n", "475 2000000000 50.0 10,10 2,2 100000 0 0.2 1,10 1.292079 \n", "476 2000000000 50.0 10,10 2,2 100000 0 0.2 1,10 1.683571 \n", "477 2000000000 50.0 40,20 1,1 100000 0 0.2 1,10 3.107688 \n", "478 2000000000 50.0 40,20 1,1 100000 0 0.2 1,10 3.169551 \n", "479 2000000000 50.0 40,20 1,1 100000 0 0.2 1,10 3.442101 \n", "\n", " S \n", "0 2000000000 \n", "1 2000000000 \n", "2 2000000000 \n", "3 500000000 \n", "4 500000000 \n", ".. ... \n", "475 1000000000 \n", "476 1000000000 \n", "477 1000000000 \n", "478 1000000000 \n", "479 1000000000 \n", "\n", "[480 rows x 10 columns]" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfG" ] }, { "cell_type": "code", "execution_count": 66, "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", "
TE
Dist%AsyncGroups
1,10.010,107.238413
10,27.495134
10,201.052943
10,402.412291
2,101.812608
............
2,2100.020,403.978562
40,103.869905
40,24.056287
40,204.384910
40,403.143114
\n", "

160 rows × 1 columns

\n", "
" ], "text/plain": [ " TE\n", "Dist %Async Groups \n", "1,1 0.0 10,10 7.238413\n", " 10,2 7.495134\n", " 10,20 1.052943\n", " 10,40 2.412291\n", " 2,10 1.812608\n", "... ...\n", "2,2 100.0 20,40 3.978562\n", " 40,10 3.869905\n", " 40,2 4.056287\n", " 40,20 4.384910\n", " 40,40 3.143114\n", "\n", "[160 rows x 1 columns]" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grouped_aggG" ] }, { "cell_type": "code", "execution_count": 67, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
N%AsyncNPNSDistMatrixCommTamTimeItersTCTSTASTR
020000000000.020402,210000000.21,101.5232841.5719820.00000020000000003.095266
120000000000.020402,210000000.21,101.3957802.0679170.00000020000000003.463697
220000000000.020402,210000000.21,101.5154331.9398580.00000020000000003.455291
3200000000075.010401,110000000.21,101.3318210.2179881.2799155000000002.829724
4200000000075.010401,110000000.21,101.3385150.2688721.3598645000000002.967251
.............................................
475200000000050.010102,210000000.21,100.5731350.0913220.67927810000000001.343735
476200000000050.010102,210000000.21,100.5684950.0966221.07534010000000001.740457
477200000000050.040201,110000000.21,101.1713730.5577001.84343710000000003.572510
478200000000050.040201,110000000.21,101.2277440.6348881.88140610000000003.744038
479200000000050.040201,110000000.21,101.1013870.6952182.29693210000000004.093537
\n", "

480 rows × 14 columns

\n", "
" ], "text/plain": [ " N %Async NP NS Dist Matrix CommTam Time Iters TC \\\n", "0 2000000000 0.0 20 40 2,2 100000 0 0.2 1,10 1.523284 \n", "1 2000000000 0.0 20 40 2,2 100000 0 0.2 1,10 1.395780 \n", "2 2000000000 0.0 20 40 2,2 100000 0 0.2 1,10 1.515433 \n", "3 2000000000 75.0 10 40 1,1 100000 0 0.2 1,10 1.331821 \n", "4 2000000000 75.0 10 40 1,1 100000 0 0.2 1,10 1.338515 \n", ".. ... ... .. .. ... ... ... ... ... ... \n", "475 2000000000 50.0 10 10 2,2 100000 0 0.2 1,10 0.573135 \n", "476 2000000000 50.0 10 10 2,2 100000 0 0.2 1,10 0.568495 \n", "477 2000000000 50.0 40 20 1,1 100000 0 0.2 1,10 1.171373 \n", "478 2000000000 50.0 40 20 1,1 100000 0 0.2 1,10 1.227744 \n", "479 2000000000 50.0 40 20 1,1 100000 0 0.2 1,10 1.101387 \n", "\n", " TS TA S TR \n", "0 1.571982 0.000000 2000000000 3.095266 \n", "1 2.067917 0.000000 2000000000 3.463697 \n", "2 1.939858 0.000000 2000000000 3.455291 \n", "3 0.217988 1.279915 500000000 2.829724 \n", "4 0.268872 1.359864 500000000 2.967251 \n", ".. ... ... ... ... \n", "475 0.091322 0.679278 1000000000 1.343735 \n", "476 0.096622 1.075340 1000000000 1.740457 \n", "477 0.557700 1.843437 1000000000 3.572510 \n", "478 0.634888 1.881406 1000000000 3.744038 \n", "479 0.695218 2.296932 1000000000 4.093537 \n", "\n", "[480 rows x 14 columns]" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfM" ] }, { "cell_type": "code", "execution_count": 68, "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", "
TCTSTATR
Dist%AsyncNPNS
1,10.0220.2461720.6581240.0000000.904296
100.3725260.8461830.0000001.218709
200.4632370.9754180.0000001.438655
405.8976141.3065020.0000007.204116
1024.6233900.8234430.0000005.446832
........................
2,2100.020401.4643160.0000002.3806713.844987
4020.4825020.0000003.5101943.992695
101.0265740.0000002.7813013.807875
201.3978940.0000002.8144644.212358
401.4459460.0000001.5974863.043431
\n", "

160 rows × 4 columns

\n", "
" ], "text/plain": [ " TC TS TA TR\n", "Dist %Async NP NS \n", "1,1 0.0 2 2 0.246172 0.658124 0.000000 0.904296\n", " 10 0.372526 0.846183 0.000000 1.218709\n", " 20 0.463237 0.975418 0.000000 1.438655\n", " 40 5.897614 1.306502 0.000000 7.204116\n", " 10 2 4.623390 0.823443 0.000000 5.446832\n", "... ... ... ... ...\n", "2,2 100.0 20 40 1.464316 0.000000 2.380671 3.844987\n", " 40 2 0.482502 0.000000 3.510194 3.992695\n", " 10 1.026574 0.000000 2.781301 3.807875\n", " 20 1.397894 0.000000 2.814464 4.212358\n", " 40 1.445946 0.000000 1.597486 3.043431\n", "\n", "[160 rows x 4 columns]" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grouped_aggM" ] }, { "cell_type": "code", "execution_count": 69, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
N%AsyncNPN_parNSDistCompute_tamComm_tamTimeItersTiTtTo
020000000000.040200210000000.2100.0098260.011.0
120000000000.040200210000000.2100.0258120.011.0
220000000000.040200210000000.2100.0098190.011.0
320000000000.040200210000000.2100.0110710.011.0
420000000000.040200210000000.2100.0098150.011.0
..........................................
14951200000000050.040020110000000.210.0258181.011.0
14952200000000050.040020110000000.210.0098121.011.0
14953200000000050.040020110000000.210.0258131.011.0
14954200000000050.040020110000000.210.0258101.011.0
14955200000000050.040020110000000.210.0098201.011.0
\n", "

14956 rows × 13 columns

\n", "
" ], "text/plain": [ " N %Async NP N_par NS Dist Compute_tam Comm_tam Time \\\n", "0 2000000000 0.0 40 20 0 2 100000 0 0.2 \n", "1 2000000000 0.0 40 20 0 2 100000 0 0.2 \n", "2 2000000000 0.0 40 20 0 2 100000 0 0.2 \n", "3 2000000000 0.0 40 20 0 2 100000 0 0.2 \n", "4 2000000000 0.0 40 20 0 2 100000 0 0.2 \n", "... ... ... .. ... .. ... ... ... ... \n", "14951 2000000000 50.0 40 0 20 1 100000 0 0.2 \n", "14952 2000000000 50.0 40 0 20 1 100000 0 0.2 \n", "14953 2000000000 50.0 40 0 20 1 100000 0 0.2 \n", "14954 2000000000 50.0 40 0 20 1 100000 0 0.2 \n", "14955 2000000000 50.0 40 0 20 1 100000 0 0.2 \n", "\n", " Iters Ti Tt To \n", "0 10 0.009826 0.0 11.0 \n", "1 10 0.025812 0.0 11.0 \n", "2 10 0.009819 0.0 11.0 \n", "3 10 0.011071 0.0 11.0 \n", "4 10 0.009815 0.0 11.0 \n", "... ... ... ... ... \n", "14951 1 0.025818 1.0 11.0 \n", "14952 1 0.009812 1.0 11.0 \n", "14953 1 0.025813 1.0 11.0 \n", "14954 1 0.025810 1.0 11.0 \n", "14955 1 0.009820 1.0 11.0 \n", "\n", "[14956 rows x 13 columns]" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfL" ] }, { "cell_type": "code", "execution_count": 70, "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", "
TiItersToIters2
TtDist%AsyncNPNS
0.010.0220.1997021.0224.01.0
100.1997091.0224.01.0
200.1997041.0224.01.0
400.1996951.0224.01.0
1020.0392401.044.01.0
...........................
1.02100.020400.05702521.022.021.0
4020.02141781.011.081.0
100.02104766.011.066.0
200.02460954.011.054.0
400.03087126.011.026.0
\n", "

288 rows × 4 columns

\n", "
" ], "text/plain": [ " Ti Iters To Iters2\n", "Tt Dist %Async NP NS \n", "0.0 1 0.0 2 2 0.199702 1.0 224.0 1.0\n", " 10 0.199709 1.0 224.0 1.0\n", " 20 0.199704 1.0 224.0 1.0\n", " 40 0.199695 1.0 224.0 1.0\n", " 10 2 0.039240 1.0 44.0 1.0\n", "... ... ... ... ...\n", "1.0 2 100.0 20 40 0.057025 21.0 22.0 21.0\n", " 40 2 0.021417 81.0 11.0 81.0\n", " 10 0.021047 66.0 11.0 66.0\n", " 20 0.024609 54.0 11.0 54.0\n", " 40 0.030871 26.0 11.0 26.0\n", "\n", "[288 rows x 4 columns]" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grouped_aggL" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TIEMPO EJECUCCION\n", "Distribución BestFit -------------------------\n", "Para 2 padres\n", "EX numC= 2 p = 0.0 Diff = 0.675 Asíncrono\n", "EX numC= 20 p = 0.012 Diff = 0.139 Síncrono\n", "Para 10 padres\n", "Para 20 padres\n", "EX numC= 2 p = 0.0 Diff = 1.915 Asíncrono\n", "EX numC= 20 p = 0.013 Diff = 0.705 Síncrono\n", "EX numC= 40 p = 0.014 Diff = 0.8 Síncrono\n", "Para 40 padres\n", "EX numC= 20 p = 0.039 Diff = 0.734 Síncrono\n", "EX numC= 40 p = 0.005 Diff = 0.368 Síncrono\n", "Distribución WorstFit -------------------------\n", "Para 2 padres\n", "EX numC= 2 p = 0.0 Diff = 0.691 Asíncrono\n", "Para 10 padres\n", "EX numC= 2 p = 0.0 Diff = 1.894 Asíncrono\n", "Para 20 padres\n", "EX numC= 10 p = 0.022 Diff = 0.513 Síncrono\n", "EX numC= 40 p = 0.021 Diff = 0.434 Síncrono\n", "Para 40 padres\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:12: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " if sys.path[0] == '':\n", "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:13: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " del sys.path[0]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "EX numC= 20 p = 0.029 Diff = 0.762 Síncrono\n", "EX numC= 40 p = 0.002 Diff = 0.302 Síncrono\n", "SINC: 22 || ASINC: 10\n" ] } ], "source": [ "print(\"TIEMPO EJECUCCION\")\n", "sinc = 0\n", "asinc = 0\n", "for dist in [1,2]:\n", " print(\"Distribución \" + dist_names[dist] + \" -------------------------\")\n", " dist_v = str(dist)+\",\"+str(dist)\n", " for numP in values:\n", " print(\"Para \", numP, \" padres\")\n", " for numC in values:\n", " #if numP != numC:\n", " group = str(numP) + \",\" + str(numC)\n", " v1 = dfG[(dfG[\"%Async\"] == 0.0)][(dfG.Groups == group)][(dfG[\"Dist\"] == dist_v)]['TE']\n", " v2 = dfG[(dfG[\"%Async\"] == 100.0)][(dfG.Groups == group)][(dfG[\"Dist\"] == dist_v)]['TE']\n", " res = stats.ttest_ind(v1, v2)\n", " diff = grouped_aggG['TE'].loc[(dist_v, 0.0, group)] - grouped_aggG['TE'].loc[(dist_v, 100.0, group)]\n", " if diff > 0:\n", " mejor = \"Asíncrono\"\n", " asinc+=1\n", " else:\n", " mejor = \"Síncrono\"\n", " sinc+=1\n", " \n", " if res[1] < p_value:\n", " print(\"EX numC=\", numC, \"p =\", round(res[1],3), \"Diff =\", abs(round(diff,3)), mejor)\n", "print(\"SINC: \" + str(sinc) + \" || ASINC: \" + str(asinc))" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TIEMPO MALLEABILITY\n", "Distribución BestFit -------------------------\n", "Para 2 padres\n", "TR numC= 2 p = 0.0 Diff = 0.143 Síncrono\n", "Para 10 padres\n", "TR numC= 10 p = 0.0 Diff = 0.05 Síncrono\n", "TR numC= 20 p = 0.03 Diff = 0.087 Síncrono\n", "Para 20 padres\n", "TR numC= 10 p = 0.02 Diff = 0.531 Síncrono\n", "TR numC= 20 p = 0.005 Diff = 0.839 Síncrono\n", "TR numC= 40 p = 0.007 Diff = 0.877 Síncrono\n", "Para 40 padres\n", "TR numC= 2 p = 0.0 Diff = 2.23 Síncrono\n", "TR numC= 10 p = 0.034 Diff = 0.791 Síncrono\n", "TR numC= 20 p = 0.005 Diff = 1.086 Síncrono\n", "TR numC= 40 p = 0.0 Diff = 0.453 Síncrono\n", "Distribución WorstFit -------------------------\n", "Para 2 padres\n", "TR numC= 2 p = 0.0 Diff = 0.13 Síncrono\n", "Para 10 padres\n", "TR numC= 2 p = 0.011 Diff = 0.116 Síncrono\n", "TR numC= 10 p = 0.035 Diff = 0.929 Síncrono\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:9: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " if __name__ == '__main__':\n", "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:10: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " # Remove the CWD from sys.path while we load stuff.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "TR numC= 20 p = 0.02 Diff = 0.74 Síncrono\n", "Para 20 padres\n", "TR numC= 2 p = 0.008 Diff = 3.713 Síncrono\n", "TR numC= 10 p = 0.001 Diff = 1.051 Síncrono\n", "TR numC= 20 p = 0.028 Diff = 0.398 Síncrono\n", "TR numC= 40 p = 0.037 Diff = 0.521 Síncrono\n", "Para 40 padres\n", "TR numC= 10 p = 0.04 Diff = 1.07 Síncrono\n", "TR numC= 20 p = 0.001 Diff = 0.944 Síncrono\n", "TR numC= 40 p = 0.001 Diff = 0.443 Síncrono\n" ] } ], "source": [ "print(\"TIEMPO MALLEABILITY\")\n", "for dist in [1,2]:\n", " print(\"Distribución \" + dist_names[dist] + \" -------------------------\")\n", " dist_v = str(dist)+\",\"+str(dist)\n", " for numP in values:\n", " print(\"Para \", numP, \" padres\")\n", " for numC in values:\n", " #if numP != numC:\n", " v1 = dfM[(dfM[\"%Async\"] == 0.0)][(dfM.NP == numP)][(dfM.NS == numC)][(dfM[\"Dist\"] == dist_v)]['TS']\n", " v2 = dfM[(dfM[\"%Async\"] == 100.0)][(dfM.NP == numP)][(dfM.NS == numC)][(dfM[\"Dist\"] == dist_v)]['TA']\n", " res = stats.ttest_ind(v1, v2)\n", " diff = grouped_aggM['TS'].loc[(dist_v, 0.0, numP, numC)] - grouped_aggM['TA'].loc[(dist_v, 100.0, numP, numC)]\n", " if diff > 0:\n", " mejor = \"Asíncrono\"\n", " else:\n", " mejor = \"Síncrono\"\n", " if res[1] < p_value:\n", " print(\"TR numC=\", numC, \"p =\", round(res[1],3), \"Diff =\", abs(round(diff,3)), mejor)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TIEMPO Iters\n", "Distribución BestFit -------------------------\n", "Para 2 padres\n", "Ti numC= 40 p = 0.02 Diff = 0.0421 Síncrono\n", "Para 10 padres\n", "Ti numC= 10 p = 0.012 Diff = 0.0 Síncrono\n", "Ti numC= 20 p = 0.02 Diff = 0.0 Síncrono\n", "Ti numC= 40 p = 0.0 Diff = 0.023 Síncrono\n", "Para 20 padres\n", "Ti numC= 2 p = 0.011 Diff = 0.0009 Síncrono\n", "Ti numC= 10 p = 0.0 Diff = 0.0037 Síncrono\n", "Ti numC= 20 p = 0.0 Diff = 0.0139 Síncrono\n", "Ti numC= 40 p = 0.0 Diff = 0.0158 Síncrono\n", "Para 40 padres\n", "Ti numC= 2 p = 0.0 Diff = 0.0089 Síncrono\n", "Ti numC= 10 p = 0.0 Diff = 0.0099 Síncrono\n", "Ti numC= 20 p = 0.0 Diff = 0.0125 Síncrono\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:12: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " if sys.path[0] == '':\n", "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:13: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " del sys.path[0]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Ti numC= 40 p = 0.0 Diff = 0.0208 Síncrono\n", "Distribución WorstFit -------------------------\n", "Para 2 padres\n", "Ti numC= 20 p = 0.048 Diff = 0.0463 Síncrono\n", "Ti numC= 40 p = 0.003 Diff = 0.0688 Síncrono\n", "Para 10 padres\n", "Ti numC= 10 p = 0.0 Diff = 0.0218 Síncrono\n", "Ti numC= 20 p = 0.0 Diff = 0.0373 Síncrono\n", "Ti numC= 40 p = 0.0 Diff = 0.0409 Síncrono\n", "Para 20 padres\n", "Ti numC= 2 p = 0.0 Diff = 0.0165 Síncrono\n", "Ti numC= 10 p = 0.0 Diff = 0.0265 Síncrono\n", "Ti numC= 20 p = 0.0 Diff = 0.041 Síncrono\n", "Ti numC= 40 p = 0.0 Diff = 0.0374 Síncrono\n", "Para 40 padres\n", "Ti numC= 2 p = 0.0 Diff = 0.0116 Síncrono\n", "Ti numC= 10 p = 0.0 Diff = 0.0112 Síncrono\n", "Ti numC= 20 p = 0.0 Diff = 0.0148 Síncrono\n", "Ti numC= 40 p = 0.0 Diff = 0.0211 Síncrono\n" ] } ], "source": [ "print(\"TIEMPO Iters\")\n", "for dist in [1,2]:\n", " print(\"Distribución \" + dist_names[dist] + \" -------------------------\")\n", " dist_v = str(dist)+\",\"+str(dist)\n", " for numP in values:\n", " print(\"Para \", numP, \" padres\")\n", " for numC in values:\n", " #if numP != numC:\n", " #exp = dfL[(dfL[\"Tt\"] == 0)][(dfL[\"Dist\"] == 1)][(dfL[\"%Async\"] == 0.0)][(dfL.NP == numP)][(dfL.NS == numC)]\n", " #TimeOp = exp['Ti'] \n", " #print(TimeOp)\n", " v1 = dfL[(dfL[\"Tt\"] == 0)][(dfL[\"Dist\"] == dist)][(dfL[\"%Async\"] == 100.0)][(dfL.NP == numP)][(dfL.NS == numC)]['Ti']\n", " v2 = dfL[(dfL[\"Tt\"] == 1)][(dfL[\"Dist\"] == dist)][(dfL[\"%Async\"] == 100.0)][(dfL.NP == numP)][(dfL.NS == numC)]['Ti']\n", " res = stats.ttest_ind(v1, v2, equal_var = False)\n", " diff = grouped_aggL['Ti'].loc[(0, dist, 0.0, numP, numC)] - grouped_aggL['Ti'].loc[(1, dist, 100.0, numP, numC)]\n", " if diff > 0:\n", " mejor = \"Asíncrono\"\n", " else:\n", " mejor = \"Síncrono\"\n", " if res[1] < p_value:\n", " #and abs(diff) > grouped_aggL['Ti'].loc[(0, dist, 0.0, numP, numC)]\n", " print(\"Ti numC=\", numC, \"p =\", round(res[1],3), \"Diff =\", abs(round(diff,4)), mejor)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10.0\n" ] } ], "source": [ "auxIter = pd.DataFrame(dfM['Iters'].str.split(',',1).tolist(),columns = ['Iters0','Iters1'])\n", "auxIter['Iters1'] = pd.to_numeric(auxIter['Iters1'], errors='coerce')\n", "iters = auxIter['Iters1'].mean()\n", "print(iters)\n" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Distribución BestFit -------------------------\n", "Para 2 padres\n", "NC=2 Es mejor Asíncrono con una diff de 0.659\n", "NC=10 Es mejor Asíncrono con una diff de 0.124\n", "NC=20 Es mejor Asíncrono con una diff de 0.039\n", "NC=40 Es mejor Síncrono con una diff de 0.077\n", "Para 10 padres\n", "NC=2 Es mejor Asíncrono con una diff de 1.996\n", "NC=10 Es mejor Asíncrono con una diff de 0.147\n", "NC=20 Es mejor Asíncrono con una diff de 0.097\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:10: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " # Remove the CWD from sys.path while we load stuff.\n", "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:14: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " \n", "/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:16: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " app.launch_new_instance()\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "NC=40 Es mejor Síncrono con una diff de 0.16\n", "Para 20 padres\n", "NC=2 Es mejor Asíncrono con una diff de 1.938\n", "NC=10 Es mejor Síncrono con una diff de 0.137\n", "NC=20 Es mejor Síncrono con una diff de 0.642\n", "NC=40 Es mejor Síncrono con una diff de 0.775\n", "Para 40 padres\n", "NC=2 Es mejor Síncrono con una diff de 0.225\n", "NC=10 Es mejor Síncrono con una diff de 0.397\n", "NC=20 Es mejor Síncrono con una diff de 0.889\n", "NC=40 Es mejor Síncrono con una diff de 0.351\n", "Distribución WorstFit -------------------------\n", "Para 2 padres\n", "NC=2 Es mejor Asíncrono con una diff de 0.671\n", "NC=10 Es mejor Asíncrono con una diff de 0.132\n", "NC=20 Es mejor Síncrono con una diff de 0.185\n", "NC=40 Es mejor Síncrono con una diff de 0.455\n", "Para 10 padres\n", "NC=2 Es mejor Asíncrono con una diff de 1.888\n", "NC=10 Es mejor Síncrono con una diff de 0.536\n", "NC=20 Es mejor Síncrono con una diff de 0.533\n", "NC=40 Es mejor Síncrono con una diff de 0.176\n", "Para 20 padres\n", "NC=2 Es mejor Síncrono con una diff de 1.71\n", "NC=10 Es mejor Síncrono con una diff de 0.657\n", "NC=20 Es mejor Síncrono con una diff de 0.191\n", "NC=40 Es mejor Síncrono con una diff de 0.416\n", "Para 40 padres\n", "NC=2 Es mejor Asíncrono con una diff de 1.02\n", "NC=10 Es mejor Síncrono con una diff de 0.676\n", "NC=20 Es mejor Síncrono con una diff de 0.738\n", "NC=40 Es mejor Síncrono con una diff de 0.338\n" ] } ], "source": [ "#iters = dfM['Iters'].mean()\n", "resultados = [0,0]\n", "for dist in [1,2]:\n", " print(\"Distribución \" + dist_names[dist] + \" -------------------------\")\n", " dist_v = str(dist)+\",\"+str(dist)\n", " for numP in values:\n", " print(\"Para \", numP, \" padres\")\n", " for numC in values:\n", " #if numP != numC:\n", " Titer = dfL[(dfL[\"Tt\"] == 0)][(dfL[\"Dist\"] == dist)][(dfL.NP == numC)]['Ti'].mean() #Tiempo por iteracion\n", " i=0\n", " for adr in [0.0, 100.0]:\n", " \n", " auxExp = dfM[(dfM[\"Dist\"] == dist_v)][(dfM[\"%Async\"] == adr)][(dfM.NP == numP)][(dfM.NS == numC)]\n", " Tr = auxExp['TS'].mean() + auxExp['TA'].mean() #Tiempo de redistribucion\n", " M_it = dfL[(dfL[\"Tt\"] == 1)][(dfL[\"Dist\"] == dist)][(dfL[\"%Async\"] == adr)][(dfL.NP == numP)][(dfL.NS == numC)]['Ti'].count()/3 #Iteraciones asincronas\n", " #No se presupone una diferencia temporal entre iteraciones sincronas y asincronas\n", " if(M_it > iters):\n", " M_it = iters\n", " resultados[i] = (iters - M_it) * Titer + Tr\n", " i+=1\n", " #print(M_it)\n", " #print(Titer)\n", " #print(iters)\n", " #print((iters - M_it) * Titer)\n", " #print(Tr)\n", " #print(\"End\")\n", "\n", " if resultados[0] > resultados[1]:\n", " mejor = \"Asíncrono\"\n", " else:\n", " mejor = \"Síncrono\"\n", " diff = abs(round(resultados[0] - resultados[1], 3))\n", " print(\"NC=\"+ str(numC) + \" Es mejor \" + mejor + \" con una diff de \"+ str(diff))\n", " #TODO Comprobar" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "image/png": "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QQqjBaBAKiIiIpIWKYnQa3wveo3vteFYeVk5i49cxczDw0RvWETp5FKF0namTWhFREREWtC4ZvSJM6LMODKyYU1peVl50KV1KwqkIiIiIjlkXsC0aHQqMmVefa9Q2n4USEVERESaae1qeoXS9qdAKiIiItJMxYyKVq+mbwylFTMqOriy7kkXNYmIiIg0k892oH0n99XFTe1EI6QiIiIiEigFUhEREREJlAKpiIiIiARKgVREREREAqVAKiIiIiKBUiAVERERkUApkIqIiIhIoBRIRURERCRQCqQiIiIiEigFUhEREREJlAKpiIiIiARKgVREREREAqVAKiIiIiKBUiAVERERkUApkIqIiIhIoBRIRURERCRQCqQiIiIiEigFUhEREREJlAKpiIiIiARKgVREREREAqVAKiIiIiKBUiAVERERkUApkIqIiIhIoBRIRURERCRQCqQiIiIiEigFUhEREREJlAKpiIiIiARKgVREREREAlXQQGpmh5rZR2Y2x8wuyfH8BWY2y8zeMbOnzWxwIesRERERkc6nYIHUzMLAdcBhwFjgBDMb2+y0N4GJ7r4rcC9wVaHqEREREZHOqZAjpHsCc9x9nrvXAHcBR2We4O5l7r4+/fAVYGAB6xERERGRTqiQgXQA8FnG44XpYy05DfhXrifM7Ewzm2lmM5ctW9aOJYqIiIhI0AoZSC3HMc95otmJwETgd7med/eb3X2iu0/s379/O5YoIiIiIkGLFPC1FwKDMh4PBBY1P8nMDgZ+Chzg7tUFrEdEREREOqFCjpDOAEaa2VAziwHHA9MzTzCzCcBNwJHuvrSAtYiIiIhIJ1WwQOrudcC5wOPAB8A0d3/fzC43syPTp/0O6AXcY2Zvmdn0Fl5ORERERLqpQk7Z4+6PAo82O3ZZxv2DC/n+IiIiItL5aacmEREREQmUAqmIiIiIBEqBVEREREQCpUAqIiIiIoFSIBURERGRQCmQioiIiEigFEhFREREJFAKpCIiIiISKAVSEREREQmUAqmIiIiIBEqBVEREREQCpUAqIiIiIoFSIBURERGRQCmQioiIiEigFEhFREREJFAKpCIiIiISKAVSEREREQmUAqmIiIiIBEqBVEREREQCpUAqIiIiIoFSIBURERGRQCmQioiIiEigFEhFREREJFAKpCIiIiISKAVSEREREQmUAqmIiIiI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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqQAAAHhCAYAAAC4O6zrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdeXhU1f3H8fc3JKwJe0DZEgiEJAQRQbaya0VEXKDgjmu1WlrXqm2pS7WK/qRVbG1Fi4pbK+64UwkoKAqoyKIsIvsia9hDlvP748zAECbJBBImgc/reeYhM3PnzvfeWfjMueeca845RERERESiJSbaBYiIiIjI8U2BVERERESiSoFURERERKJKgVREREREoio22gWIiIiIVERz5sxpFBsb+zSQiRrxykIBMD8vL++aTp06/RR6hwKpiIiISBixsbFPn3DCCemJiYlbY2JiNC3RESooKLCNGzdmrF+//mngnND7lPZFREREwstMTEzcrjBaNmJiYlxiYmI2vsX54PuiUI+IiIhIZRBTYhgdNaoxkyYlFLvMpEkJjBrVuCwLq6wC+/OQ/KlAKiIiInK4unbdzYgRrYoMpZMmJTBiRCu6dt1d2lUvXbo0rmvXrqmtWrVq17p163b33XdfoyOuN4yhQ4cmP/PMM/XKY92RUiAVEREROVyDB+9gwoRlYUNpMIxOmLCMwYN3lHbVcXFxjBkzZvWyZcsWzJo167t///vfjebMmVO9zGovQV5e3tF6KgVSERERkSMSLpQeYRgFSEpKyu3Zs+dugHr16hWkpKTsWblyZdXCyw0dOjT54osvbtGpU6e2ycnJmS+//HIdgEWLFlXt1KlT24yMjPSMjIz0yZMn1wIoKChgxIgRLVJSUtr17du39aZNm/YPcm/atGn722677cROnTq1HT9+fL0FCxZU69WrV5t27dqld+rUqe3XX39dHWD8+PH12rRp065t27YZnTt3bns42xdKo+xFRERESnLVVc2ZP79mscs0bpzLkCFtSEzMZePGOFJS9nLffU24777wy2dm7mb8+FWRPP2iRYuqLly4sGafPn12hrt/1apV1b788stFCxcurHb66ae3Pffcc+c1adIk79NPP11cs2ZNN2/evGoXXXRRq/nz53/3/PPP1126dGm1RYsWLVi9enVc+/bt211xxRWbg+uqXr16wZw5cxYBdO/ePXXcuHEr2rdvnzNlypRa119/fYuZM2cuHj169IkfffTR4pYtW+Zu2rSpSiTbUBwFUhEREZGyULt2PomJuaxbV5UTT9xH7dr5ZbHa7OzsmCFDhqSMHj16Vf369QvCLTN06NAtVapUoX379jnNmzfP+eabb6q3bdt239VXX520cOHCGjExMaxYsaIawLRp0xKGDx++JTY2luTk5Nzu3bsf1II7YsSIrcHn/frrr+OHDRuWErxv3759BtC5c+edl1xySfLQoUO3XnLJJVuPdBsVSEVERERKEklLZvAw/Y03ruO55xL505/WHu7h+qCcnBwbNGhQyrBhw7Zcfvnl24pazswOuf6Xv/ylcaNGjXJfe+21HwsKCqhRo0anopYPlZCQUACQn59PQkJC3vfff7+w8DIvvfTSyilTptR6++2365x88sntvvnmmwUnnHDCYQdw9SEVEREROVKhfUYffXRtkQOdSqGgoIALL7wwKTU1de8999yzobhlX3/99Xr5+fksWLCg2qpVq6p16NBhb3Z2dpUTTzwxt0qVKjzxxBMN8vN9XuzTp8+OiRMn1s/Ly2PFihVxM2fODFtj/fr1C5o1a7Zv/Pjx9YL1fP755zUAFixYUK1///67Hn300bX16tXLW7Zs2SF9W0tDgVRERETkSIQbwFTc6PsITZ48Of7NN99sMH369IS0tLSMtLS0jP/+9791wi3bunXrnC5durQdNGhQm0cffXRFzZo13U033fTTyy+/3KBDhw5pixcvrl6jRo0CgMsuu2xbq1atctq2bdvu6quvbtGlS5ciW3FffvnlZc8880zDtm3bZrRp06bda6+9Vhfg5ptvbpaamprRpk2bdt26ddvRrVu3PYezjUHmnE4+ICIiIlLY3Llzl3fo0GFTsQuVNJq+DEbbl2To0KHJZ599dvaVV155xH05j4a5c+c27NChQ3LobWohFRERETlcX3xRs9iwGWwp/eKL4kfoH+fUQioiIiISRkQtpFJqaiEVERERkQpHgVREREREokqBVERERESiSoFURERE5HDNHdWYNSVM67RmUgJzRzU+ShVVSgqkIiIiIoerYdfdfDaiVZGhdM2kBD4b0YqGXXcfzuqHDRuWXL9+/Q5t2rRpF3r7hg0bqvTo0aNNUlJSZo8ePdps3LjxiM8nX9jYsWMbjBgxokVZrzccBVIRERGRw9V08A56TFgWNpQGw2iPCctoenhzkF511VWb3n777SWFb7/77rtP7Nu3744VK1bM79u374677rrrhMPcglLLzc0t83UqkIqIiIgciXChtAzCKMDAgQN3JiYm5hW+/YMPPqh73XXXbQa47rrrNr///vv1Ci8zduzYBqeddlpKr1692iQnJ2feeuutJwbvO/3001PatWuX3rp163aPPPJIw+Dtjz32WIPk5OTMU089te1nn30WH7x96NChyddcc02zrl27pt5www3Ntm/fHjNs2LDkzMzM9PT09IwXXnihLsDs2bOrt2/fPj0tLS0jNTU1Y968edUi2c7Y0u0WERERkePQzKuas21+8ZPbV2+cyydD2lAtMZecjXHEp+xl3n1NmHdf+OXrZu6m2/hVh1PO5s2bY5OSknIBkpKScrds2RI203377be15s2btyA+Pr6gY8eOGeeee2527969d7/44ovLGzdunL9z507r2LFjxqWXXro1JycnZvTo0U3mzJnzXf369fN79OjRNjMzc39Xgx9++KH6jBkzFsfGxjJy5Mim/fr12z5x4sTlmzZtqtK5c+f0c845Z/vjjz+eeMMNN2y4/vrrt+zdu9fy8g7J0mEpkIqIiIiUhbja+VRLzGXvuqpUP3EfcbXzo11Sz549t59wwgn5AIMGDdo6derU+N69e+9+6KGHGr/77rt1AdavXx+3YMGC6mvXro3r1q3bjiZNmuQBDBkyZMvixYurB9c1ZMiQrbGxPjpOnTq19ocfflh37NixJwDk5OTY0qVLq3bv3n3XI488cuLq1aurXnjhhVvbt2+fE0mdCqQiIiIiJYmkJTN4mL7tjetY9lwi7f+09kgO1xenQYMGeStWrIhLSkrKXbFiRVz9+vXDNkWa2SHX33nnnYRp06YlzJ49+/uEhISCLl26tN2zZ09MuOVDxcfHFwT/ds7x6quvLu3QocNBgfOUU07Z26tXr11vvPFGnYEDB6Y+8cQTy88555wS94H6kIqIiIgcqdA+o50eXVvkQKcyMmDAgG1PPvlkA4Ann3yywZlnnrkt3HLTp0+vvWHDhio7d+609957r26fPn12btu2rUqdOnXyExISCr7++uvqc+fOrQXQu3fvXTNnzkxYv359lZycHHvjjTcO6Zca1K9fv+1jxoxpXFDgM+qMGTNqACxc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OXLkxgEDBuxcsmRJ1QEDBrRZtmzZgv79+7e+8847151xxhm7srOzY2rWrFkQFxdXeL8ecqYmTYwvIiIiUgZia8fmxyXG5e5bt69q1ROr7isujEbi5ZdfrtOwYcO8Xr167X7nnXf2dwcI15ho/vTDhxg4cOC2+Ph4Fx8fn9e9e/ftn376aa3hw4dn33TTTc1mzpwZHxMTw08//VR19erVsVlZWfFnnXXWtoSEhAKAM844Y1voui666KItwb9nzJhRe8mSJfuPPuzcubPK1q1bY7p167bztttuaz58+PAtF1100daUlJQiT1gSqtwCqZmNxx8K+ck5d0i/NfPncb4jcHUncH3oYVQRERGRiqKklkw4cJi+6Y1N1214bkNi0p+S1h7J4frp06fHT548uW7Tpk3r5OTkxOzatSvm3HPPbfnGG2/8uGPHjiq5ubnExcWxfPnyqo0aNQrbsdPMDrn+5JNP1t+8eXPsvHnzvqtWrZpr2rRp+z179sSEWz5UMKiCD8WzZ8/+Lj4+/qAg/MADD6w/77zzst966606PXr0SP/ggw8Wd+zYcW9J21qefUifxfexKsqPQB/n3EnAffiJ2UVEREQqndA+o20ebbO2qIFOpfGPf/xjzYYNG75ds2bNvGeffXZZt27ddrz11ls/xsTE0K1btx3PPPNMPYDx48c3OPvss7eFW8f7779fd/fu3bZ+/foqM2fOTOjZs+eu7OzsKg0bNsytVq2amzRpUsLatWurAvTv33/nu+++W3fnzp22devWmMmTJxc5e0fPnj23P/TQQ/unWvzss89qACxYsKBaly5d9vzlL39Z3759+13z58+vHsm2llsgdc59gp/Psaj7PwuZN28mfnCDiIiISKUSbgBTcaPvy8KYMWNWP/744ye0aNEic+vWrbE33nhj2MF4HTt23HXaaae16dq1a/ptt922Ljk5Ofeaa67ZMnfu3FqZmZnpL7zwQv2WLVvuBejZs+fu888/f0tmZma7s88+O6VLly47i3r+cePGrfrqq69qpaamZqSkpLT7+9//ngjw8MMPN2rTpk27tm3bZtSoUaPgF7/4RXYk21Oug5rMnxninXCH7AstdxuQ5pw75LSPgfuvxZ8ekFq1anVKS0sr40oPtWzjLgBaJdYq9+eSsqHXTIqj94eIlNbDDz/MCSf4aX9z8vzR6mqxB7fl7ftiH9m3ZlNnTB2qdq16yDp2fborP+fOHHeko+0Pxy233NIkPj4+/89//vOGkpc+eirkoCYz64efJ7NnUcs4f07dcQCdO3d2s2fPLve6LnjSn376v9eFPbmGVEB6zaQ4en+ISGl99913pKenA/DDRt9YmJJ48MkIV76zkqTXkqjXr17YdcwvmJ/TckLL1du/2F7zaAfSyiSqgdTMTsLPATjQHXyuYREREZEKr8XtRZ7Qbb+GgxvuiEYY/etf/1rUmRArnKhNjB+Y+Pp14DLn3OJo1SEiIiIi0VWe0z69DPQFGprZavxp/+IAnHP/wp8ysgH+dHcAec65zuVVj4iIiEhpOeeKnQpJSqegoMDwp1c+SLkFUufcRSXcfw0QdhCTiIiISLRVr16dzZs306BBg2iXckwoKCiwjRs31uHgU+ACFWBQk4iIiEhF1KxZM1avXs3GjRvZuCMHgH2bqpXwqIOtX78+Nj8/v2F51FcJFQDz8/LyDmmQVCAVERERCSMuLo6WLVsCcM/+mTpOLtU6MjIy5qlLYsmiNqhJRERERAQUSEVEREQkyhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEhFREREJKoUSEVEREQkqhRIRURERCSqFEiDHn4YsrKKXyYryy8nIiIiImWm3AKpmY03s5/MbH4R95uZjTWzpWb2rZmdUl61ROTUU2H48KJDaVaWv//UU49uXSIiIiLHuPJsIX0WOLOY+wcCbQKX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fs/4rEvY6h7tMbWjIt2ZBc3bLKB/BCa1fW7d/jpqtta0uR3s7hd3U725muj+xCUD594O6441Vn/QGEal4yiQiki3Vl8zenzeLfRPm8JXTv9sj2poEhEIpgcJFgZJL0yiZGB34pKBFfdvYNRyx6DvDFIYTYGuv96CiMhBim9g6p82BWjaIVuyvsTnEYpIV2JmhHJDZI7JJO+kPPpf3J8hVw0h//R8snbBsrOClN1VRnlJeftvJgdEgVREuqW2uukVSkUkWfU1o09dGqb03BDjF41n9YLVCqUdTIFURLql0rLSNi/L14fS0rLSTh6ZiBwu4huYysZ4kSl/Tr5CaQqohlREuqVktgOdM0Lb/4lIYs276Vnb+Fx8KFWDU8fQDKmIiIhIMxWlFW2GzfpQWlFa0ckj6540QyoiIiLSTDLbgebPydfsaAfRDKmIiIiI+EqBVERERER8pUAqIiIiIr5SIBURERERXymQioiIiIivFEhFRERExFcKpCIiIiLiKwVSEREREfGVAqmIiIiI+EqBVERERER8pUAqIiIiIr5SIBURERERXymQioiIiIivFEhFRERExFcKpCIiIiLiKwVSEREREfGVAqmIiIiI+EqBVERERER8pUAqIiIiIr5SIBURERERXymQioiIiIivFEhFRERExFcKpCIiIiLiKwVSEREREfGVAqmIiIiI+EqBVERERER8pUAqIiIiIr5KaSA1s7lm9raZvWtm1yd4/mozW21mb5jZ02Y2LJXjEREREZGuJ2WB1MyCwK+BM4HxwKfMbHyz014FpjrnJgGLgdtSNR4RERER6ZpSOUM6HXjXOfeec64aKAbOiz/BOVfinKuM3X0ZGJLC8YiIiIhIF5TKQDoY+DDu/sbYY635EvC3RE+Y2WVmtszMlm3btq0DhygiIiIifktlILUEj7mEJ5p9BpgK/CTR8865e5xzU51zU/v169eBQxQRERERv4VS+N4bgaFx94cAZc1PMrNTgW8DJznnqlI4HhERERHpglI5Q1oKjDazEWYWAYqAJfEnmNkxwG+Ac51zW1M4FhERERHpolIWSJ1ztcDXgCeBNcAi59wqM7vZzM6NnfYToBfwoJm9ZmZLWnk7EREREemmUnnJHufcE8ATzR67Ke72qan8/iIiIiLS9WmnJhERERHxlQKpiIiIiPhKgVREREREfKVAKiIiIiK+UiAVEREREV8pkIqIiIiIrxRIRURERMRXCqQiIiIi4isFUhERERHxlQKpiIiIiPhKgVREREREfKVAKiIiIiK+UiAVEREREV8pkIqIiIiIrxRIRURERMRXCqQiIiIi4isFUhERERHxlQKpiIiIiPhKgVREREREfKVAKiIiIiK+UiAVEREREV8pkIqIiIiIrxRIRURERMRXCqQiIiIi4isFUhERERHxlQKpiIiIiPhKgVREREREfKVAKiIiIiK+UiAVEREREV8pkIqIiIiIrxRIRURERMRXCqQiIiIi4isFUhERERHxlQKpiIiIiPhKgVREREREfKVAKiIiIiK+UiAVEREREV8pkIqIiIiIrxRIRURERMRXCqQiIiIi4isFUhERERHxlQKpiIiIiPhKgVREREREfKVAKiIiIiK+UiAVEREREV8pkIqIiIiIrxRIRURERMRXCqQiIiIi4isFUhERERHxlQKpiIiIiPhKgVREREREfKVAKiIiIiK+UiAVEREREV8pkIqIiIiIr1IaSM1srpm9bWbvmtn1CZ5PM7OFsedfMbPhqRyPiIiIiHQ9KQukZhYEfg2cCYwHPmVm45ud9iWg3Dk3CvgF8ONUjUdEREREuqZUzpBOB951zr3nnKsGioHzmp1zHvDH2O3FwClmZikck4iIiIh0MakMpIOBD+Pub4w9lvAc51wtsAvok8IxiYiIiEgXE0rheyea6XQHcQ5mdhlwWezuHjN7+xDHlqy+i77Cx530vaRj6M9M2qKfDxE5FAfzO2RYSkbSzaQykG4EhsbdHwKUtXLORjMLAbnAjuZv5Jy7B7gnReNslZktc85N7ezvKwdPf2bSFv18iMih0O+Q1EnlJftSYLSZjTCzCFAELGl2zhLg87Hb84FnnHMtZkhFREREpPtK2Qypc67WzL4GPAkEgd8751aZ2c3AMufcEuBe4H4zexdvZrQoVeMRERERka4plZfscc49ATzR7LGb4m7vBy5K5RgOUaeXCcgh05+ZtEU/HyJyKPQ7JEVMV8hFRERExE/aOlREREREfKVAmoCZDTWzEjNbY2arzOwqv8ckLZnZ781sq5mtjHust5n9w8zeiX3N93OM4p/W/h7rZ0REkmVmQTN71cwei90fEdvq/J3Y1ucRv8fYXSiQJlYLfNM5Nw44Drgiwban4r8/AHObPXY98LRzbjTwdOy+9Eyt/T3Wz4iIJOsqYE3c/R8Dv4j9/ijH2wJdOoACaQLOuU3OuRWx2xV4P4zNd5kSnznnnqflurXx29H+ETi/UwclXUYbf4/1MyIi7TKzIcDZwO9i9w34BN5W56DfHx1KgbQdZjYcOAZ4xd+RSJIKnHObwAskQH+fxyNdQLO/x/oZEZFk3A5cC0Rj9/sAO2NbnUPiLdHlICmQtsHMegEPAf/lnNvt93hE5MDp77GIHCgzOwfY6pxbHv9wglO1VFEHSek6pIczMwvj/SP2gHPuYb/HI0nbYmYDnXObzGwgsNXvAYl/Wvl7rJ8REWnPTOBcMzsLSAdy8GZM88wsFJslTbQluhwkzZAmEKsTuRdY45z7ud/jkQMSvx3t54FHfByL+KiNv8f6GRGRNjnnbnDODXHODcfbRfIZ59yngRK8rc5Bvz86lBbGT8DMZgFLgTdprB25MbbzlHQRZvZn4GSgL7AF+C7wV2ARUAhsAC5yzjVvfJIeoLW/x3h1pPoZEZGkmNnJwLecc+eY2RFAMdAbeBX4jHOuys/xdRcKpCIiIiLiK12yFxERERFfKZCKiIiIiK8USEVERETEVwqkIiIiIuIrBVIRERER8ZUCqYh0CWZWZ2avmdlKM3vQzDL9HlOyzOxZM5ua4PGpZvbL2O1zzez6zh+diEjXp2WfRKRLMLM9zrlesdsPAMvjF7SPLXRvzrloa+/hFzN7Fm+dwmV+j0VE5HCkGVIR6YqWAqPMbLiZrTGzO4EVwFAz+5SZvRmbSf1x/QvMbK6ZrTCz183s6dhjWWb2ezMrNbNXzey82OMTzOzfsRnZN8xsdOzxq2Pvu9LM/ivuPR6Pve9KM7u4lTFfFHvPtWY2O/bak83ssdjtL5jZr2K3h5nZ07Hv/bSZFabmP6OIyOFBe9mLSJdiZiHgTODvsYfGAJc4575qZoOAHwNTgHLgKTM7H3gR+C1wonNuvZn1jr3223hb/n3RzPKAf5vZP4GvAHc45x4wswgQNLMpwCXADMCAV8zsOeAIoMw5d3ZsfLmtDD3knJse2/v6u8CpbXzMXwH3Oef+aGZfBH4JnH9g/6VERLoPzZCKSFeRYWavAcvwtvS8N/b4B865l2O3pwHPOue2OedqgQeAE4HjgOedc+sB4rYCPR24Pva+zwLpeFuGvgTcaGbXAcOcc/uAWcBfnHN7nXN7gIeB2Xhbj55qZj82s9nOuV2tjP/h2NflwPB2PuvxwJ9it++PfW8RkR5LM6Qi0lXsc84dHf+AVzbK3viHWnmtAYkK4g240Dn3drPH15jZK8DZwJNm9p+tvbdzbm1s9vQs4H/M7Cnn3M0JTq3fz7qOA//dqmJ+EenRNEMqIoeTV4CTzKyvmQWBTwHP4c14nmRmIwDiLtk/CVwZa4jCzI6JfT0CeM8590tgCTAJeB4438wyzSwLuABYGisTqHTO/R/wU+DYDvgc/wKKYrc/DbzQAe8pInLY0gypiBw2nHObzOwGoARvRvMJ59wjAGZ2GfCwmQWArcBpwC3A7cAbsVD6PnAOcDHwGTOrATYDNzvndpjZH4B/x77d75xzr5rZGcBPzCwK1ACXH8pHiH39OvB7M7sG2IZXuyoi0mNp2ScRkU5gZt8Ecpxz3/V7LCIiXY1mSEVEUszMvgJ8Afikz0MREemSNEMqIiIiIr5SU5OIiIiI+EqBVERERER8pUAqIiIiIr5SIBURERERXymQioiIiIivFEhFRERExFf/H9/4Pss2XlfLAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for dist in [1,2]:\n", " v1 = grouped_aggL.loc[(0,dist,100.0,slice(None))]\n", " v2 = grouped_aggL.loc[(1,dist,100.0,slice(None))]\n", " aux_aggL = v1['Ti'].values / v2['Ti'].values\n", "\n", " colors = ['r', 'orange', 'g', 'm', 'y']\n", " markers = ['+', 'x', '1', '2', 'X']\n", "\n", " f=plt.figure(figsize=(10, 7))\n", " ax1 = f.add_subplot(111)\n", " plt.xlim(0, max(values)+1)\n", " plt.ylim(0, 1.2)\n", " plt.xticks(values)\n", " ax1.set_ylabel('Aumento de velocidad')\n", " ax1.set_xlabel('Procesos hijo')\n", " ax1.set_title(\"Aumento de velocidad al realizar redistribuciones asíncronas - \" + dist_names[dist])\n", "\n", "\n", " for i in range(len(values)):\n", " numP = values[i]\n", " c = colors[i]\n", " \n", " mini = i * len(values)\n", " maxi = (i+1) * len(values)\n", " array_values = aux_aggL[mini:maxi]\n", " indexes = np.arange(len(values))\n", " aux_j=0\n", " for j in range(len(values)):\n", " indexes[aux_j] = values[j]\n", " aux_j+=1\n", " \n", " x = indexes\n", " y = array_values\n", " label = str(numP) + ' padres'\n", " ax1.axvline(numP)\n", " plt.plot(x, y, color=colors[i], label=label, marker=markers[1], markersize=10)\n", " \n", " ax1.axhline(1, color='k')\n", " f.legend()\n", " #f.tight_layout()\n", " f.savefig(\"Images/\"+\"Iters\"+ dist_names[dist] +\"_SpeedUp\", format=\"png\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }