diff --git a/timing-analysis.ipynb b/timing-analysis.ipynb index fcb93ae..a679890 100644 --- a/timing-analysis.ipynb +++ b/timing-analysis.ipynb @@ -8555,6 +8555,67 @@ "res_spd_df.plot(kind='bar', x='Nodes', title='Minimum, Maximum, and Mean Speedups of MPI Tasking for Increasing Problem Sizes', ylabel=\"Speedup (Amdahl's)\", xlabel=\"Number of Nodes\")\n" ] }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [], + "source": [ + "eff_df = pd.DataFrame(columns=['Nodes', 'Efficiency'])\n", + "for node in [2,3,4,5,6,7,8,9,10,11,12]:\n", + " for expl in [6,12,24,48,96,192,384,768,1536,3072,6144]:\n", + " for app in [0,25,50,75,100]:\n", + " for load in [1,79,197,296,395]:\n", + " try:\n", + " eff_df.loc[-1] = [node, timing_df['runtime'][timing_df['nodes'] == 1][timing_df['exploit']==expl][timing_df['appl']==app][timing_df['load']==load].values[0]/(timing_df['runtime'][timing_df['nodes'] == node][timing_df['exploit']==expl][timing_df['appl']==app][timing_df['load']==load].values[0]*node)]\n", + " eff_df.index = eff_df.index+1\n", + " eff_df = eff_df.sort_index()\n", + " except:\n", + " tmp=0" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_1934/4145241967.py:2: FutureWarning:\n", + "\n", + "DataFrame.set_axis 'inplace' keyword is deprecated and will be removed in a future version. Use `obj = obj.set_axis(..., copy=False)` instead\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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PvtMK1eu1KxZs+75s/KFCxfUqlUrderUSR06dNDUqVPVqVMnffvttxo0aJD69++vLl26WPsNHzt2TPny5ctUG/z222/64Ycf9PLLL0uSIiIi1KpVK73++uuaMmWKBgwYoAsXLmjChAnq1auX1qxZk6n1fPTRR3ruuefUtWtXxcfHa+7cuerQoYN++ukntWzZ0qbu+vXrtWjRIg0YMED58uXTxx9/rPbt2+vo0aMqVKiQpP++sDVr1kyenp4aOXKkbt++rfDwcBUtWjRDcWV0H7h27Zr8/f11/Phx9evXT6VKldLvv/+u4cOH6+TJk5o0adJD2+a0XLt2LcVf1Dw8POTk5KRZs2bp888/1+bNm/Xll19K+q/7y6xZs/Tuu+/q6tWrioiIkCRVqVIlxXWcOHFCTzzxhC5evKi+ffuqcuXKOn78uBYuXKhr166letVozZo1at68uWrXrq3w8HA5ODhoxowZatKkiX777Tc98cQTNvXTc6waNWqURo4cqfr162v06NHKnTu3Nm3apDVr1qhZs2YpxpGYmKjnnntO69evV9++fVWlShXt3r1bH374of755x8tWbJEkvT333+rVatWql69ukaPHi1nZ2cdOHAg2YkhJb1791ZkZKSef/55DRkyRJs2bVJERIT27t1r7b+a0ntRv379ey47o/tqag4ePChJ6dqvMmLVqlU6dOiQQkJC5OXlpb///luff/65/v77b/3xxx/Wk2///v21cOFChYaGqmrVqjp37pzWr1+vvXv3prodP/30k55//nl17NhR06dPl6OjY5qxvPLKKypQoIDCw8MVExOjSZMmKTQ0VPPmzbPWGT58uCZMmKDWrVsrMDBQO3fuVGBg4D0ToypVqmjWrFkaPHiwSpYsae0G4enpqevXr6tRo0Y6cOCAQkNDVaZMGS1YsEA9e/bUxYsX9eqrr9osa8aMGbpx44b69u0rZ2dnFSxY8J7tfLfZs2frypUr6tevnywWiyZMmKB27drp0KFDypUrl6T/vjw1aNBAuXLlUt++feXj46ODBw/qxx9/1LvvvmuzvA4dOqhChQoaO3as9YLbu+++q7ffflvBwcHq3bu3zpw5o08++UQNGzbUn3/+af0FbsGCBbp27ZpeeuklFSpUSJs3b9Ynn3yif//9VwsWLLCuo3379vr777/1yiuvyMfHR6dPn9aqVat0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dnbW+PHjNWTIEBUtWlRPPvmkWrVqpe7du8vLy+ue8WX2vXVycrpn95k71atXT++8844sFovc3NxUpUqVFG+mv7u9ktZfqVKlZHWrVKmiFStWJLv59u62LVeunBwcHNL8XGfkXCQ9nHN9YGCgAgMDde3aNW3btk3z5s3TtGnT1KpVK+3bt++eOc+OHTvUv39/de7c2ebCRkbOG+k9nqTlvo6GXbp0UZ8+fRQbG6vmzZunuJPcS2p99ow7burM6Lwpld+5vNSuZt2Z2GZ2PXevK7OcnZ3Vrl07RUZG6tChQ2kOpj927Fi9/fbb6tWrl8aMGaOCBQvKwcFBgwYNSvFK259//mn9kOzevdvmqkpa7qcdzNjmv/32m5577jk1bNhQU6ZMUbFixZQrVy7NmDEjxZt9H+b7nZKM7AOJiYl65pln9Prrr6c4vWLFipLMv81ZJelzMXHixFQfxpM3b16b1w+rLRITE1WtWjV98MEHKU5POlG5urrq119/1dq1a7V06VItX75c8+bNU5MmTbRy5cp79n9+mA/Kysi+mqRatWoP9ctbkuDgYP3+++967bXX5Ovrq7x58yoxMVHPPvuszfExODjYOqb0ypUrNXHiRI0fP16LFi2y3mslScWKFVOxYsX0888/a+vWrRm64p9dPk93XnHOrAe9rXfHlJiYKIvFomXLlqW4rqTPb0JCgp555hmdP39eb7zxhipXrqw8efLo+PHj6tmzp80+MGjQILVu3VpLlizRihUr9PbbbysiIkJr1qyxGRo2JVn13hYuXDhdn5sH8R7eLT3HkPSei5I8zHO9m5ubGjRooAYNGqhw4cIaNWqUli1blmaCfeHCBbVv314VK1a03ouTJCPnjfQeT9JyXwl627Zt1a9fP/3xxx82N7mYXdI32ztHHZCSX0Wwty5dumj69OlycHCw6Vpyt4ULF6px48b66quvbMovXryowoUL25TFxcUpJCREVatWVf369TVhwgS1bdtWdevWfSjbkKRAgQLJ2luyb5t/9913cnFx0YoVK2yGRZsxY0amlpc0CkHSt+w77d+/P1PLTO8+UK5cOV29evWeB+4Hvc325unpKXd3d/31118Zmi+p2467u/sDSxLLlSunxMRE7dmzJ0NP4CxXrpx27typpk2b3vME6ODgoKZNm6pp06b64IMPNHbsWL311ltau3ZtqttR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qc43evRoFSlSRC+++GJWhAkAAIAsxigudnL27FklJCSoaNGiNuVFixbVvn37Upxn/fr1+uqrr7Rjx450rePmzZu6efOm9fXly5czHS8AAACyBlfQs4krV67ohRde0BdffKHChQuna56IiAjlz5/f+uft7f2QowQAAMD94gq6nRQuXFiOjo46deqUTfmpU6fk5eWVrP7BgwcVExOj1q1bW8sSExMl/ffo5f3796tcuXI28wwfPlxhYWHW15cvXyZJBwAAMDkSdDvJnTu3ateuraioKOtQiYmJiYqKilJoaGiy+pUrV9bu3bttyv73v//pypUr+uijj1JMvJ2dneXs7PxQ4gcAAMDDQYJuR2FhYerRo4fq1KmjJ554QpMmTVJcXJxCQkIkSd27d1eJEiUUEREhFxcXPf744zbze3h4SFKycgAAAGRfJOh21LFjR505c0YjRoxQbGysfH19tXz5cuuNo0ePHpWDA7cJAAAAPEoshmEY9g4CWePy5cvKnz+/Ll26JHd393TN4zNsaarTYsa1fFChAQCAVGTm/I3sjcuzAAAAgImQoAMAAAAmQoIOAAAAmAgJOgAAAGAiJOgAAACAiZCgAwAAACZCgg4AAACYCAk6AAAAYCIk6AAAAICJkKADAAAAJkKCDgAAAJgICToAAABgIiToAAAAgImQoAMAAAAmQoIOAAAAmAgJOgAAAGAiJOgAAACAiZCgAwAAACZCgg4AAACYCAk6AAAAYCIk6AAAAICJkKADAAAAJkKCDgAAAJgICToAAABgIiToAAAAgImQoAMAAAAmQoIOAAAAmAgJOgAAAGAiJOgAAACAiZCgAwAAACZCgg4AAACYCAk6AAAAYCIk6AAAAICJkKADAAAAJkKCDgAAAJgICToAAABgIiToAAAAgImQoAMAAAAmQoIOAAAAmAgJOgAAAGAiJOgAAACAiZCgAwAAACZCgg4AAACYCAk6AAAAYCIk6AAAAICJkKADAAAAJuJk7wAAAMCjwWfY0jSnx4xrmUWRAObGFXQAAADAREjQAQAAABMhQQcAAABMhD7oyHHS6uNI/0YAAGB2XEEHAAAATIQEHQAAADAREnQAAADAREjQAQAAABMhQQcAAABMhAQdAAAAMBESdAAAAMBESNABAAAAEyFBBwAAAEyEBB0AAAAwERJ0O5s8ebJ8fHzk4uKievXqafPmzanWXbRokerUqSMPDw/lyZNHvr6+mjVrVhZGCwAAgIeNBN2O5s2bp7CwMIWHh2v79u2qUaOGAgMDdfr06RTrFyxYUG+99ZY2btyoXbt2KSQkRCEhIVqxYkUWRw4AAICHhQTdjj744AP16dNHISEhqlq1qqZNmyY3NzdNnz49xfqNGjVS27ZtVaVKFZUrV06vvvqqqlevrvXr12dx5AAAAHhYnOwdwKMqPj5e27Zt0/Dhw61lDg4OCggI0MaNG+85v2EYWrNmjfbv36/x48c/zFABIMfzGbY0zekx41pmUSQAQIJuN2fPnlVCQoKKFi1qU160aFHt27cv1fkuXbqkEiVK6ObNm3J0dNSUKVP0zDPPpFj35s2bunnzpvX15cuXH0zwAAAAeGjo4pJBPXr00K+//mq39efLl087duzQli1b9O677yosLEzr1q1LsW5ERITy589v/fP29s7aYAEAAJBhJOgZdOnSJQUEBKhChQoaO3asjh8/nqnlFC5cWI6Ojjp16pRN+alTp+Tl5ZXqfA4ODipfvrx8fX01ZMgQPf/884qIiEix7vDhw3Xp0iXr37FjxzIVKwAAALIOCXoGLVmyRMePH9dLL72kefPmycfHR82bN9fChQt169atdC8nd+7cql27tqKioqxliYmJioqKkp+fX7qXk5iYaNON5U7Ozs5yd3e3+QMAAIC5kaBngqenp8LCwrRz505t2rRJ5cuX1wsvvKDixYtr8ODBio6OTtdywsLC9MUXXygyMlJ79+7VSy+9pLi4OIWEhEiSunfvbnMTaUREhFatWqVDhw5p7969ev/99zVr1ix169btoWwnAAAAsh43id6HkydPatWqVVq1apUcHR3VokUL7d69W1WrVtWECRM0ePDgNOfv2LGjzpw5oxEjRig2Nla+vr5avny59cbRo0ePysHh/75DxcXFacCAAfr333/l6uqqypUr65tvvlHHjh0f6nZmVrXIaqlO291jdxZGAgAAkH2QoGfQrVu39MMPP2jGjBlauXKlqlevrkGDBqlLly7WLiSLFy9Wr1697pmgS1JoaKhCQ0NTnHb3zZ/vvPOO3nnnnfveBgAAAJgXCXoGFStWTImJiercubM2b94sX1/fZHUaN24sDw+PLI8NAAAA2R8JegZ9+OGH6tChg1xcXFKt4+HhocOHD2dhVAAA4GFJ60FWPMQK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D1bnzp01Y8YMtW3b9r62CwDMiCvoAB4p1apVU9euXfXxxx/blDdq1EhnzpzRhAkTdPDgQU2ePFnLli17YOudPHmyFi9erH379unll1/WhQsX1KtXL0nSyy+/rPPnz6tz587asmWLDh48qBUrVigkJEQJCQkZWs9rr72m8ePHa968edq/f7+GDRumHTt26NVXX72v+FNrtyFDhigqKkpjxozRP//8o8jISH366afWm08rVaqkZ599Vv369dOmTZu0bds29e7dW66urtZlBAQEyM/PT0FBQVq5cqViYmL0+++/66233tLWrVt1/fp1hYaGat26dTpy5Ig2bNigLVu2qEqVKve1TQBgViToAB45o0ePTtYFpUqVKpoyZYomT56sGjVqaPPmzWmOcJJR48aN07hx41SjRg2tX79eP/zwgwoXLixJ1qveCQkJatasmapVq6ZBgwbJw8PDpr97egwcOFBhYWEaMmSIqlWrpuXLl+uHH35QhQoV7nsbUmq3WrVqaf78+Zo7d64ef/xxjRgxQqNHj1bPnj2tdWbMmKHixYvL399f7dq1U9++fVWkSBHrdIvFop9//lkNGzZUSEiIKlasqE6dOunIkSMqWrSoHB0dde7cOXXv3l0VK1ZUcHCwmjdvrlGjRt33NgGAGVmMuztdAgAAALAbrqADAAAAJkKCDgAAAJgICToAAABgIiToAAAAgImQoAMAAAAmQoIOAAAAmAgJOgAAAGAiJOgAAACAiZCgAwAAACZCgg4AAACYCAk6AAAAYCIk6AAAAICJ/D+Dtj3XN2+2EQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "res_eff_df = pd.DataFrame(eff_df.pivot_table(index=[\"Nodes\"], values=[\"Efficiency\"], aggfunc=['max', 'min', 'mean']).to_records())\n", + "res_eff_df.set_axis(['Nodes', 'Max', 'Min', 'Mean'], axis=1, inplace=True)\n", + "res_eff_df.plot(kind='bar', x='Nodes', title='Minimum, Maximum, and Mean Efficiencies of MPI Tasking for Increasing Problem Sizes', ylabel=\"Efficiency\", xlabel=\"Number of Nodes\")\n" + ] + }, { "attachments": {}, "cell_type": "markdown",