Files
TomoATT/test/plot_time.ipynb

357 lines
157 KiB
Plaintext
Raw Normal View History

2025-12-17 10:53:43 +08:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f1fa43c2f40>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEGCAYAAABiq/5QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAA6dElEQVR4nO3dd3gU5drH8e+dTkJCKk1K6IRASCAISFEBEQUBlSJFQc4BBQUBuwcVbK+KHhULHsUOAmKhCCoCIioihI4UAQldCC1ASEh73j9mEwKkAdnMJrk/17VXNrMzs7+NeM/sMzP3iDEGpZRSZYeb3QGUUkoVLy38SilVxmjhV0qpMkYLv1JKlTFa+JVSqozxsDtAYYSGhprw8HC7YyilVImyevXqI8aYsAunl4jCHx4eTlxcnN0xlFKqRBGR3blN16EepZQqY7TwK6VUGaOFXymlypgSMcavVGmSlpbGvn37SElJsTuKKiV8fHyoVq0anp6ehZpfC79SxWzfvn34+/sTHh6OiNgdR5VwxhiOHj3Kvn37qFWrVqGW0aEepYpZSkoKISEhWvRVkRARQkJCLukbpBZ+pWygRV8VpUv991SqC//aRdNZ+eV/7Y6hlFIupVQXflnzKVEbX+Dg33/aHUUplzV+/HheeeUVp77HzTffzIkTJy57+fLlyxddmGI2d+5cXnzxRQBmz57N5s2bs1976qmnWLRoUbFnKtWFv3L/d0jFk8SZ92IyM+yOo1SZtWDBAgIDA+2OYYvu3bvz2GOPARcX/meeeYZOnToVe6bSXfir1WJ9xIM0PLuBTfPetDuOUi7j+eefp379+rRt25Zt27ZlT1+3bh2tWrUiKiqKW2+9lePHjwNw3XXXMWbMGGJjY4mIiGDVqlXcdttt1KtXj3HjxmUv37NnT5o3b05kZCTvvfde9vTw8HCOHDlCfHw8ERERDB06lMjISDp37kxycvJF+Xbt2kXr1q1p0qTJeesHmDhxIi1atCAqKoqnn346e/qnn35KVFQUTZs25c477wQgPj6eDh06EBUVRceOHdmzZw8AgwcPZvjw4bRq1YratWuzdOlShgwZQkREBIMHD85eZ/ny5RkzZgyRkZF07NiRhISEfP9OkyZNolGjRkRFRXHHHXcA8PHHH3P//fezfPly5s6dy8MPP0x0dDQ7d+5k8ODBfPnllwAsXryYmJgYmjRpwpAhQzh79mz23+7pp5+mWbNmNGnShK1bt17Kf+pclfrTOVv3GsP6F+dQZ+1LnG59K+Ur1rQ7klLZJsz7k80HThbpOhtVDeDpWyLzfH316tXMmDGDdevWkZ6eTrNmzWjevDkAd911F2+++SbXXnstTz31FBMmTOD1118HwMvLi7i4ON544w169OjB6tWrCQ4Opk6dOowZM4aQkBA+/PBDgoODSU5OpkWLFtx+++2EhISc9/7bt29n+vTpvP/++/Tp04evvvqKgQMHnjfPAw88wPDhw7nrrrt4++23s6cvXLiQ7du3s3LlSowxdO/enWXLlhESEsJzzz3H8uXLCQ0N5dixYwCMHDmSQYMGMWjQID788ENGjRrF7NmzATh+/Di///47c+fOpXv37vz2229MmTKFFi1asG7dOqKjo0lKSiI2NpbXXnuNZ555hgkTJvDWW2/l+Xd68cUX2bVrF97e3hcNbV1zzTV0796dbt260atXr/NeS0lJYfDgwSxevJj69etz1113MXnyZEaPHg1AaGgoa9as4Z133uGVV15hypQphfq3kJdSvccP4OHhjuetb+Fu0tk/dTjoPYZVGffLL79w66234uvrS0BAAN27dwcgMTGREydOcO211wIwaNAgli1blr1c1nxNmjQhMjKSKlWq4O3tTe3atdm7dy9g7fE2bdqUVq1asXfvXrZv337R+9eqVYvo6GgAmjdvTnx8/EXz/Pbbb/Tr1w8ge+8drMK/cOFCYmJiaNasGVu3bmX79u0sWbKE3r17ExoaCkBwcDAAv//+O/37989ez6+//pq9rltuuQURoUmTJlSqVIkmTZrg5uZGZGRkdiY3Nzf69u0LwMCBA/n111/z/TtFRUUxYMAApk6diodH4fert23bRq1atahfv/5F6wS47bbb8v17XapSv8cP0CiyKd9Xu4cu+99k97LPqHntXXZHUgog3z1zV+Pt7Q1YxTDredbv6enpLF26lEWLFvH777/j6+vLddddl+u55TmXdXd3z3WoB3I/RdEYw+OPP84999xz3vQ337z0odyCPk9hM+U0f/58li1bxrx583j++efZuHHjJefKL6u7u3ue2S5Fqd/jz3LNgHFsknoELv0P6acS7I6jlG3at2/P7NmzSU5O5tSpU8ybNw+AChUqEBQUxC+//ALAZ599lr1XWxiJiYkEBQXh6+vL1q1bWbFixWVnbNOmDTNmzABg2rRp2dNvvPFGPvzwQ06fPg3A/v37OXz4MB06dGDWrFkcPXoUIHuo55prrjlvPe3atbukHJmZmdlj8J9//jlt27bN8++UmZnJ3r17uf7663nppZdITEzMzpnF39+fU6dOXfQ+DRo0ID4+nh07dpy3TmcpE3v8AAG+Phzt8Ar1F91G/LRR1L13ut2RlLJFs2bN6Nu3L02bNqVixYq0aNEi+7VPPvmEe++9lzNnzlC7dm0++uijQq+3S5cuvPvuu0RERNCgQQNatWp12RnfeOMN+vfvz0svvUSPHj2yp3fu3JktW7bQunVrwDr4OnXqVCIjI/nPf/7Dtddei7u7OzExMXz88ce8+eab3H333UycOJGwsLBL+jwAfn5+rFy5kueee46KFSsyc+ZMIPe/U0ZGBgMHDiQxMRFjDKNGjbroTKY77riDoUOHMmnSpOwNCli9dj766CN69+5Neno6LVq04N57773Mv17BxJSAMe/Y2FhTFDdiMcYw+7WR3HryM471+IzgmO5FkE6pS7NlyxYiIiLsjqEKoXz58hfttbuq3P5dichqY0zshfOWmaEesMbnmg98lr9MNfh2LKQU7dkUSilVEpSpwg9Qo2IQG5o9R2D6EfbNetTuOEopF1ZS9vYvVZkr/ADdu/bga+/uVNv5OSk7lhW8gFJKlSJlsvB7ebgR3usF9mSGcebLEZCW++lkSilVGpXJwg8QW78a39d+guCUvRyd/4zdcZRSqtiU2cIP0Lv3QL6RjgSue5fMfWvtjqOUUsXCqYVfRMaIyJ8isklEpouIj4jUEpE/RGSHiMwUES9nZshPkJ8Xbjc+xxETQOLMYZCRZlcUpVQRy2qOBoVrPZ1znsttl+wqbZcL4rTCLyJXAaOAWGNMY8AduAN4CXjNGFMXOA78y1kZCqN7ywg+Cx5F0Km/SFryqp1RlFKXqCjaF+Tmctslu0rb5YI4e6jHAygnIh6AL3AQ6ABkXbL2CdDTyRnyJSL07HcPCzJb4r38FUjYVvBCSpVgSUlJdO3alaZNm9K4cWNmzpyZ3WYZYM6cOZQrV47U1FRSUlKoXbs2ADt37qRLly40b96cdu3aZbcHTkhI4Pbbb6dFixa0aNGC3377DbD2oO+8805at25NvXr1eP/99y/KEh8fT8OGDRkwYAARERH06tWLM2fOAFbRbNGiBY0bN2bYsGFkXWx63XXXMXr0aGJjY3njjTeYN28eLVu2JCYmhk6dOnHo0KF8P39enyOnrHbJcXFxREdHEx0dTZMmTbJ79bz//vu0aNGCpk2bcvvtt3PmzBmXartcEKe1bDDG7BeRV4A9QDKwEFgNnDDGZG2m9wFXOStDYdWtWJ5FV4/n9KpeuM28h4ARi8HN3e5Yqiz47jH4p2gaeWWr3ARuejHPl7///nuqVq3K/PnzAavHjp+fH+vWrQOs7p2NGzdm1apVpKen07JlSwCGDRvGu+++S7169fjjjz8YMWIES5Ys4YEHHmDMmDG0bduWPXv2cOONN7JlyxYANmzYwIoVK0hKSiImJoauXbtStWrV8/Js27aNDz74gDZt2jBkyBDeeecdHnroIe6//36eeuopwOqs+e2333LLLbcAkJqaStbV/MePH2fFihWICFOmTOHll1/m1Vfz/va
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import numpy\n",
"import matplotlib.pyplot as plt\n",
"\n",
"n_grid_each_dir = 100\n",
"\n",
"stencil_order = 1\n",
"#stencil_order = 3\n",
"\n",
"sweep_type = 2 \n",
"\n",
"# only domain decomposition with\n",
"nsubdom = [1,2,4,8]\n",
"time_only_domain_decomp = [85.3463,64.9523,31.8637,28.703]\n",
"L1_error_only_domain_decomp = [0.390742,0.382573,0.382575,0.382537]\n",
"Linf_error_only_domain_decomp = [1.33398,1.73339,1.73339,1.73339]\n",
"\n",
"# only sweep parallelization\n",
"nsubproc = [1,2,4,8]\n",
"time_only_sweep_parallelization = [85.3463,65.819,36.532,27.7725]\n",
"L1_error_only_sweep_parallelization = [0.390742,0.382708,0.382708,0.382708]\n",
"Linf_error_only_sweep_parallelization = [1.33398,1.73339,1.73339,1.73339]\n",
"\n",
"# both\n",
"\n",
"\n",
"plt.plot(nsubdom,time_only_domain_decomp,label='domain decomposition')\n",
"plt.plot(nsubproc,time_only_sweep_parallelization,label='sweep parallelization')\n",
"plt.xlabel('number of processors')\n",
"plt.ylabel('time (s)')\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f1fa2c4caf0>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtMAAAFzCAYAAAD8AIVCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAACRd0lEQVR4nOzdd3hUxdfA8e+k90A6PUBCCyVAQu9dpSqIBQVUEJQu2H+KiK8iKoKCiCJiBSug0pv0XoTQEiDUEJIAKaTvzvvHhgjSAmxyU87neXzC7t69czbmbk5mZ85RWmuEEEIIIYQQd87G6ACEEEIIIYQoqiSZFkIIIYQQ4i5JMi2EEEIIIcRdkmRaCCGEEEKIuyTJtBBCCCGEEHdJkmkhhBBCCCHukp3RAdwLHx8fHRgYaHQYQghxV3bu3BmvtfY1Oo6CIu/ZQoii7Gbv2UU6mQ4MDGTHjh1GhyGEEHdFKXXC6BgKkrxnCyGKspu9Z8syDyGEEEIIIe6SJNNCCCGEEELcJUmmhRBCCCGEuEtFes20EPkhKyuL06dPk56ebnQoophwcnKifPny2NvbGx1KoSPXm7A2ud5EQZNkWoj/OH36NO7u7gQGBqKUMjocUcRprUlISOD06dNUrlzZ6HAKHbnehDXJ9SaMIMs8hPiP9PR0vL295Re7sAqlFN7e3jLzehNyvQlrkutNGEGSaSFuQH6xC2uSn6dbk++PsCb5eRIFTZJpIQq58ePH88EHH+TrGPfffz+XLl266+e7ublZL5gCtmjRIt577z0AFixYwIEDB3Ife+ONN1i5cqVRoQkDyPWWv+R6E8VRvq2ZVkp9BXQFzmuta+fcNxnoBmQCR4GBWutLOY+9AjwNmIARWutl+RWbEOJaixcvNjoEw3Tv3p3u3bsDll/uXbt2pVatWgBMmDDByNBEMSXXm1xvonjJz5npr4Eu/7lvBVBba10XOAK8AqCUqgU8AoTkPGeGUso2H2MTolB75513qFatGi1atODw4cO59+/Zs4cmTZpQt25devXqxcWLFwFo06YNo0ePJiwsjJo1a7J9+3YefPBBgoODef3113Of37NnTxo2bEhISAizZs3KvT8wMJD4+Hiio6OpWbMmgwYNIiQkhE6dOpGWlnZdfMePH6dp06bUqVPnmvMDTJ48mfDwcOrWrcubb76Ze/8333xD3bp1qVevHk888QQA0dHRtGvXjrp169K+fXtOnjwJwIABAxg6dChNmjShSpUqrF27lqeeeoqaNWsyYMCA3HO6ubkxevRoQkJCaN++PXFxcbf8Pk2bNo1atWpRt25dHnnkEQC+/vprhg0bxqZNm1i0aBHjxo0jNDSUo0ePMmDAAH755RcAVq1aRf369alTpw5PPfUUGRkZud+7N998kwYNGlCnTh0OHTp0J/+rizylVCml1C9KqUNKqYNKqaZGx3Sn5HqT602Ie5FvM9Na63VKqcD/3Lf8qptbgN45/+4BzNNaZwDHlVJRQCNgc37FJ0RevPVHBAfOJln1nLXKevBmt5CbPr5z507mzZvHnj17yM7OpkGDBjRs2BCAJ598kk8++YTWrVvzxhtv8NZbb/Hxxx8D4ODgwI4dO5g6dSo9evRg586deHl5UbVqVUaPHo23tzdfffUVXl5epKWlER4ezkMPPYS3t/c140dGRvLjjz/yxRdf8PDDD/Prr7/Sr1+/a44ZOXIkQ4cO5cknn2T69Om59y9fvpzIyEi2bduG1pru3buzbt06vL29mThxIps2bcLHx4cLFy4AMHz4cPr370///v356quvGDFiBAsWLADg4sWLbN68mUWLFtG9e3c2btzIl19+SXh4OHv27CE0NJTLly8TFhbGlClTmDBhAm+99RaffvrpTb9P7733HsePH8fR0fG6j9mbNWtG9+7d6dq1K717977msfT0dAYMGMCqVauoVq0aTz75JJ999hmjRo0CwMfHh127djFjxgw++OADvvzyyzz9LBQTU4GlWuveSikHwOVuTyTXm1xvINebKHqMXDP9FLAk59/lgFNXPXY65z6rO3l4Nwc2L7n9gUIYZP369fTq1QsXFxc8PDxyPxJNTEzk0qVLtG7dGoD+/fuzbt263OddOa5OnTqEhIRQpkwZHB0dqVKlCqdOWS6vadOmUa9ePZo0acKpU6eIjIy8bvzKlSsTGhoKQMOGDYmOjr7umI0bN/Loo48C5M56geWX+/Lly6lfvz4NGjTg0KFDREZGsnr1avr06YOPjw8AXl5eAGzevJnHHnss9zwbNmzIPVe3bt1QSlGnTh38/f2pU6cONjY2hISE5MZkY2ND3759AejXrx8bNmy45fepbt26PP7443z33XfY2eV9LuHw4cNUrlyZatWqXXdOgAcffPCW36/iSinlCbQCZgNorTOvLN0rKuR6s5DrTZQUWmurn9OQOtNKqdeAbOD7u3juYGAwQMWKFe947KRfR+GafRGa3nfHzxUlz61mtAobR0dHwPIL78q/r9zOzs5m7dq1rFy5ks2bN+Pi4kKbNm1uWD7q6ufa2tre8GNnuPGOea01r7zyCs8+++w193/yySdWfz15jelqf/31F+vWreOPP/7gnXfeYd++fXcc161itbW1vWlsxVRlIA6Yo5SqB+wERmqtL1854E7es+V6k+vtTmItgdebsIKE9ATsbezxdPS02jkLfGZaKTUAy8bEx/W/fx6cASpcdVj5nPuuo7WepbUO01qH+fr63vH4aZXaUtl8ghPHj9zxc4UoCK1atWLBggWkpaWRnJzMH3/8AYCnpyelS5dm/fr1AHz77be5s0F5kZiYSOnSpXFxceHQoUNs2bLlrmNs3rw58+bNA+D77//9m7hz58589dVXpKSkAHDmzBnOnz9Pu3bt+Pnnn0lISADI/di5WbNm15ynZcuWdxSH2WzOXWP5ww8/0KJFi5t+n8xmM6dOnaJt27ZMmjSJxMTE3DivcHd3Jzk5+bpxqlevTnR0NFFRUdecU2AHNAA+01rXBy4DL199wL2+Z+c3ud7yTq43UZSlZqUC4OPsg4eDh1XPXaAz00qpLsCLQGutdepVDy0CflBKfQSUBYKBbfkRQ8XG3SFyCse3LKJS5bH5MYQQ96RBgwb07duXevXq4efnR3h4eO5jc+fOZciQIaSmplKlShXmzJmT5/N26dKFmTNnUrNmTapXr06TJk3uOsapU6fy2GOPMWnSJHr06JF7f6dOnTh48CBNm1r2oLm5ufHdd98REhLCa6+9RuvWrbG1taV+/fp8/fXXfPLJJwwcOJDJkyfj6+t7R68HwNXVlW3btjFx4kT8/PyYP38+cOPvk8lkol+/fiQmJqK1ZsSIEZQqVeqa8z3yyCMMGjSIadOm5SYNYGlPPGfOHPr06UN2djbh4eEMGTLkLr97xcpp4LTWemvO7V/4TzJd2Mn1lndyvYmiKi41jieXPMljNR/jiVpPWL0WucqPtSMASqkfgTaADxALvImleocjkJBz2Bat9ZCc41/Dso46Gxiltb7twuawsDC9Y8eOOwtMa+LeDiLSvjrNXim55YnEzR08eJCaNWsaHYbIAzc3t+tmuwqrG/1cKaV2aq3DDArJKpRS64FntNaHlVLjAVet9bgbHXuj92y53oqOon69iZIpMSORAUsHcDblLF92+pI6vnXu+lw3e8/Oz2oej97g7tm3OP4d4J38iieXUpz3a0HtmGXEXkzGv7R7vg8phBDF2HDg+5xKHseAgQbHI4QQAFzOuszQlUM5mXSSGR1m3FMifSslsgNi6Xr346HS2LN5hdGhCCHuQVGZJSvOtNZ7ctZE19Va99RaXzQ6JpE/5HoTRYlZmxm5ZiQHEg4wufVkGpdpnG9jlchkukxoZ7KxJeOgNFkUQgghhChubJQNXQK7MKH5BNpVbJevYxlSGs9oyrkUZ93rEpS4mcS0LDyd7Y0OSQghhBBC3COzNhOdFE0Vzyr0rtb79k+wghI5Mw1gU60jtWxOsHlvhNGhCCGEEEKIe6S1ZvL2yfT9oy8nkk4U2LglNpku27ArAOd3/2VwJEIIIYQQ4l7N3DuT7w5+R+9qvan
"text/plain": [
"<Figure size 864x432 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# test 2\n",
"# first order stencil\n",
"\n",
"n_grid_each_dir = 100\n",
"\n",
"stencil_order = 1\n",
"#stencil_order = 3\n",
"\n",
"sweep_type = 2 \n",
"\n",
"# only domain decomposition with\n",
"nsubdom = [1,2,4,6]\n",
"time_only_domain_decomp = [119.745,66.6102,42.9897,36.4134] \n",
"L1_error_only_domain_decomp = [] \n",
"Linf_error_only_domain_decomp = [] \n",
"\n",
"# only sweep parallelization\n",
"nsubproc = [1,2,4,6]\n",
"time_only_sweep_parallelization = [119.745,60.6498,37.7447,29.9794]\n",
"L1_error_only_sweep_parallelization = []\n",
"Linf_error_only_sweep_parallelization = []\n",
"\n",
"# speed up\n",
"dom_decomp_speedup = []\n",
"swp_para_speedup = []\n",
"\n",
"# calculate speedup rate\n",
"for i in range(len(time_only_domain_decomp)):\n",
" dom_decomp_speedup.append(time_only_domain_decomp[0]/time_only_domain_decomp[i])\n",
" swp_para_speedup.append(time_only_sweep_parallelization[0]/time_only_sweep_parallelization[i])\n",
"\n",
"fig, axs = plt.subplots(1,2, figsize=(12,6))\n",
"\n",
"# plot raw time\n",
"axs[0].plot(nsubdom,time_only_domain_decomp,label='domain decomposition')\n",
"axs[0].plot(nsubproc,time_only_sweep_parallelization,label='sweep parallelization')\n",
"axs[0].set_xlabel('number of processors')\n",
"axs[0].set_ylabel('time (s)')\n",
"axs[0].legend()\n",
"\n",
"# plot speedup\n",
"axs[1].plot(nsubdom,dom_decomp_speedup,label='domain decomposition')\n",
"axs[1].plot(nsubproc,swp_para_speedup,label='sweep parallelization')\n",
"axs[1].set_xlabel('number of processors')\n",
"axs[1].set_ylabel('speedup')\n",
"# plot perfect speedup\n",
"axs[1].plot(nsubdom,nsubdom,'--',label='perfect')\n",
"# plot 70 % speedup\n",
"nsubdom_70 = [1,1*0.7+1,1+3*0.7,1+5*0.7]\n",
"axs[1].plot(nsubdom,nsubdom_70,'--',label='70 %')\n",
"axs[1].legend()\n"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'number of iterations')"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1296x432 with 4 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# test 3 time par iteration\n",
"# first order stencil\n",
"\n",
"n_grid_each_dir = 100\n",
"\n",
"stencil_order = 1\n",
"#stencil_order = 3\n",
"\n",
"sweep_type = 2 \n",
"\n",
"# only domain decomposition with\n",
"nsubdom = [1,2,4,6]\n",
"time_only_domain_decomp = [122.169,77.0518,40.005,35.3397] \n",
"n_iter_dom_decomp = [39,45,46,47]\n",
"\n",
"# only sweep parallelization\n",
"nsubproc = [1,2,4,6]\n",
"time_only_sweep_parallelization = [102.32,55.6871,35.7869,27.649]\n",
"n_iter_swp_para = [39,39,39,39]\n",
"\n",
"# time par iteration\n",
"dom_decomp_time_par_iteration = []\n",
"swp_para_time_par_iteration = []\n",
"\n",
"# calculate time par iteration\n",
"for i in range(len(time_only_domain_decomp)):\n",
" dom_decomp_time_par_iteration.append(time_only_domain_decomp[i]/n_iter_dom_decomp[i])\n",
" swp_para_time_par_iteration.append(time_only_sweep_parallelization[i]/n_iter_swp_para[i])\n",
"\n",
"# speed up\n",
"dom_decomp_speedup = []\n",
"swp_para_speedup = []\n",
"# speed up par iteration\n",
"dom_decomp_speedup_par_iter = []\n",
"swp_para_speedup_par_iter = []\n",
"\n",
"\n",
"# calculate speedup rate\n",
"for i in range(len(time_only_domain_decomp)):\n",
" dom_decomp_speedup.append(time_only_domain_decomp[0]/time_only_domain_decomp[i])\n",
" swp_para_speedup.append(time_only_sweep_parallelization[0]/time_only_sweep_parallelization[i])\n",
"\n",
"# calculate time par iteration\n",
"for i in range(len(time_only_domain_decomp)):\n",
" dom_decomp_speedup_par_iter.append(dom_decomp_time_par_iteration[0]/dom_decomp_time_par_iteration[i])\n",
" swp_para_speedup_par_iter.append(swp_para_time_par_iteration[0]/swp_para_time_par_iteration[i])\n",
"\n",
"fig, axs = plt.subplots(1,4, figsize=(18,6))\n",
"\n",
"# plot raw time\n",
"axs[0].plot(nsubdom,time_only_domain_decomp,label='domain decomposition')\n",
"axs[0].plot(nsubproc,time_only_sweep_parallelization,label='sweep parallelization')\n",
"axs[0].set_xlabel('number of processors')\n",
"axs[0].set_ylabel('time (s)')\n",
"axs[0].legend()\n",
"# title\n",
"axs[0].set_title('time')\n",
"\n",
"# plot speedup\n",
"axs[1].plot(nsubdom,dom_decomp_speedup,label='domain decomposition')\n",
"axs[1].plot(nsubproc,swp_para_speedup,label='sweep parallelization')\n",
"axs[1].set_xlabel('number of processors')\n",
"axs[1].set_ylabel('speedup')\n",
"# plot perfect speedup\n",
"axs[1].plot(nsubdom,nsubdom,'--',label='perfect')\n",
"# plot 70 % speedup\n",
"nsubdom_70 = [1,1*0.7+1,1+3*0.7,1+5*0.7]\n",
"axs[1].plot(nsubdom,nsubdom_70,'--',label='70 %')\n",
"axs[1].legend()\n",
"# title\n",
"axs[1].set_title('speedup')\n",
"\n",
"# plot speed up par iteration\n",
"axs[2].plot(nsubdom,dom_decomp_speedup_par_iter,label='domain decomposition')\n",
"axs[2].plot(nsubproc,swp_para_speedup_par_iter,label='sweep parallelization')\n",
"axs[2].set_xlabel('number of processors')\n",
"axs[2].set_ylabel('speedup')\n",
"# plot perfect speedup\n",
"axs[2].plot(nsubdom,nsubdom,'--',label='perfect')\n",
"# plot 70 % speedup\n",
"nsubdom_70 = [1,1*0.7+1,1+3*0.7,1+5*0.7]\n",
"axs[2].plot(nsubdom,nsubdom_70,'--',label='70 %')\n",
"axs[2].legend()\n",
"# title\n",
"axs[2].set_title('speedup par iteration')\n",
"\n",
"# plot the number of iterations\n",
"axs[3].plot(nsubdom,n_iter_dom_decomp,label='domain decomposition')\n",
"axs[3].plot(nsubproc,n_iter_swp_para,label='sweep parallelization')\n",
"axs[3].set_xlabel('number of processors')\n",
"axs[3].set_ylabel('number of iterations')\n",
"axs[3].legend()\n",
"# title\n",
"axs[3].set_title('number of iterations')\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# test 3\n",
"# third order stencil\n",
"\n",
"n_grid_each_dir = 100\n",
"\n",
"#stencil_order = 1\n",
"stencil_order = 3\n",
"\n",
"sweep_type = 2 \n",
"\n",
"# only domain decomposition with\n",
"nsubdom = [1,2,4,6]\n",
"time_only_domain_decomp = [] \n",
"L1_error_only_domain_decomp = [] \n",
"Linf_error_only_domain_decomp = [] \n",
"\n",
"# only sweep parallelization\n",
"nsubproc = [1,2,4,6]\n",
"time_only_sweep_parallelization = []\n",
"L1_error_only_sweep_parallelization = []\n",
"Linf_error_only_sweep_parallelization = []\n",
"\n",
"# speed up\n",
"dom_decomp_speedup = []\n",
"swp_para_speedup = []\n",
"\n",
"# calculate speedup rate\n",
"for i in range(len(time_only_domain_decomp)):\n",
" dom_decomp_speedup.append(time_only_domain_decomp[0]/time_only_domain_decomp[i])\n",
" swp_para_speedup.append(time_only_sweep_parallelization[0]/time_only_sweep_parallelization[i])\n",
"\n",
"fig, axs = plt.subplots(1,2, figsize=(12,6))\n",
"\n",
"# plot raw time\n",
"axs[0].plot(nsubdom,time_only_domain_decomp,label='domain decomposition')\n",
"axs[0].plot(nsubproc,time_only_sweep_parallelization,label='sweep parallelization')\n",
"axs[0].set_xlabel('number of processors')\n",
"axs[0].set_ylabel('time (s)')\n",
"axs[0].legend()\n",
"\n",
"# plot speedup\n",
"axs[1].plot(nsubdom,dom_decomp_speedup,label='domain decomposition')\n",
"axs[1].plot(nsubproc,swp_para_speedup,label='sweep parallelization')\n",
"axs[1].set_xlabel('number of processors')\n",
"axs[1].set_ylabel('speedup')\n",
"# plot perfect speedup\n",
"axs[1].plot(nsubdom,nsubdom,'--',label='perfect')\n",
"# plot 70 % speedup\n",
"nsubdom_70 = [1,1*0.7+1,1+3*0.7,1+5*0.7]\n",
"axs[1].plot(nsubdom,nsubdom_70,'--',label='70 %')\n",
"axs[1].legend()\n"
]
}
],
"metadata": {
"interpreter": {
"hash": "02f83e1f4cd9619657a6845405e2dd67c4de23753ba48bca5dce2ebf57b3813a"
},
"kernelspec": {
"display_name": "Python 3.9.1 64-bit ('3.9.1': pyenv)",
"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.9.1"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}