mirror of
https://github.com/smyalygames/FiniteVolumeGPU.git
synced 2025-05-17 22:14:14 +02:00
605 lines
198 KiB
Plaintext
605 lines
198 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"%matplotlib inline\n",
|
||
"\n",
|
||
"import numpy as np\n",
|
||
"import os\n",
|
||
"import json\n",
|
||
"import pandas as pd\n",
|
||
"from matplotlib import pyplot as plt"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"nproc = range(1, 17)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def speedup(t_serial, t):\n",
|
||
" return t_serial/t"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def read_profiling_files(profile_dir_path=\".\", drop_multinode=False, drop_singlenode=False):\n",
|
||
" profiling_data = pd.DataFrame()\n",
|
||
"\n",
|
||
" json_filenames = [file for file in os.listdir(profile_dir_path) if file.endswith(\"_profiling.json\")]\n",
|
||
"\n",
|
||
" if(drop_singlenode):\n",
|
||
" json_filenames = [file for file in json_filenames if \"1_nodes\" not in file]\n",
|
||
"\n",
|
||
" if(drop_multinode):\n",
|
||
" json_filenames = [file for file in json_filenames if \"1_nodes\" in file]\n",
|
||
"\n",
|
||
" for json_filename in json_filenames:\n",
|
||
" with open(os.path.join(profile_dir_path, json_filename)) as json_file:\n",
|
||
" profiling_data = profiling_data.append(json.load(json_file), ignore_index=True)\n",
|
||
" profiling_data = profiling_data.sort_values(by=[\"n_processes\"], ignore_index=True)\n",
|
||
"\n",
|
||
" profiling_data.n_processes = profiling_data.n_processes.astype(int)\n",
|
||
" profiling_data = profiling_data.sort_values(by=[\"n_processes\"], ignore_index=True)\n",
|
||
"\n",
|
||
" return profiling_data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Weak scaling"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"ename": "FileNotFoundError",
|
||
"evalue": "[Errno 2] No such file or directory: 'output_saga/weak_scaling/2022-06-21T235600/'",
|
||
"output_type": "error",
|
||
"traceback": [
|
||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||
"\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
|
||
"Cell \u001b[0;32mIn[5], line 12\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# DGX-2\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;66;03m#weak_scaling_profiling_data = read_profiling_files(\"output_dgx-2/weak_scaling/2022-06-09T134809/\")\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m#weak_scaling_profiling_data = read_profiling_files(\"output_dgx-2/weak_scaling/2022-06-23T154025/\")\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[38;5;66;03m#singlenode_weak_scaling_profiling_data = read_profiling_files(\"output_saga/weak_scaling/2022-06-16T151516/\", drop_multinode=True)\u001b[39;00m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m#multinode_weak_scaling_profiling_data = read_profiling_files(\"output_saga/weak_scaling/2022-06-16T151516/\", drop_singlenode=True)\u001b[39;00m\n\u001b[0;32m---> 12\u001b[0m singlenode_weak_scaling_profiling_data \u001b[38;5;241m=\u001b[39m \u001b[43mread_profiling_files\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43moutput_saga/weak_scaling/2022-06-21T235600/\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdrop_multinode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 13\u001b[0m multinode_weak_scaling_profiling_data \u001b[38;5;241m=\u001b[39m read_profiling_files(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moutput_saga/weak_scaling/2022-06-21T235600/\u001b[39m\u001b[38;5;124m\"\u001b[39m, drop_singlenode\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28mprint\u001b[39m(singlenode_weak_scaling_profiling_data)\n",
|
||
"Cell \u001b[0;32mIn[4], line 4\u001b[0m, in \u001b[0;36mread_profiling_files\u001b[0;34m(profile_dir_path, drop_multinode, drop_singlenode)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mread_profiling_files\u001b[39m(profile_dir_path\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m, drop_multinode\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, drop_singlenode\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[1;32m 2\u001b[0m profiling_data \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mDataFrame()\n\u001b[0;32m----> 4\u001b[0m json_filenames \u001b[38;5;241m=\u001b[39m [file \u001b[38;5;28;01mfor\u001b[39;00m file \u001b[38;5;129;01min\u001b[39;00m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlistdir\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprofile_dir_path\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mif\u001b[39;00m file\u001b[38;5;241m.\u001b[39mendswith(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_profiling.json\u001b[39m\u001b[38;5;124m\"\u001b[39m)]\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m(drop_singlenode):\n\u001b[1;32m 7\u001b[0m json_filenames \u001b[38;5;241m=\u001b[39m [file \u001b[38;5;28;01mfor\u001b[39;00m file \u001b[38;5;129;01min\u001b[39;00m json_filenames \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m1_nodes\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m file]\n",
|
||
"\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'output_saga/weak_scaling/2022-06-21T235600/'"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# DGX-2\n",
|
||
"#weak_scaling_profiling_data = read_profiling_files(\"output_dgx-2/weak_scaling/2022-06-09T134809/\")\n",
|
||
"#weak_scaling_profiling_data = read_profiling_files(\"output_dgx-2/weak_scaling/2022-06-23T154025/\")\n",
|
||
"\n",
|
||
"# HGX\n",
|
||
"#weak_scaling_profiling_data = read_profiling_files(\"output_hgx/weak_scaling/2022-06-16T162931/\")\n",
|
||
"##weak_scaling_profiling_data = read_profiling_files(\"output_hgx/weak_scaling/2022-06-16T170630/\")\n",
|
||
"\n",
|
||
"# Saga\n",
|
||
"#singlenode_weak_scaling_profiling_data = read_profiling_files(\"output_saga/weak_scaling/2022-06-16T151516/\", drop_multinode=True)\n",
|
||
"#multinode_weak_scaling_profiling_data = read_profiling_files(\"output_saga/weak_scaling/2022-06-16T151516/\", drop_singlenode=True)\n",
|
||
"singlenode_weak_scaling_profiling_data = read_profiling_files(\"output_saga/weak_scaling/2022-06-21T235600/\", drop_multinode=True)\n",
|
||
"multinode_weak_scaling_profiling_data = read_profiling_files(\"output_saga/weak_scaling/2022-06-21T235600/\", drop_singlenode=True)\n",
|
||
"\n",
|
||
"print(singlenode_weak_scaling_profiling_data)\n",
|
||
"print(multinode_weak_scaling_profiling_data)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Strong scaling"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def amdahls_speedup(parallel_share, nproc):\n",
|
||
" serial_share = 1.0 - parallel_share\n",
|
||
" return [1.0 / (serial_share + parallel_share / float(n)) for n in nproc]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def gustafsons_speedup(parallel_share, nproc):\n",
|
||
" serial_share = 1.0 - parallel_share\n",
|
||
" return [serial_share + parallel_share * float(n) for n in nproc]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" t_init t_total outfile \\\n",
|
||
"0 9.692163 80.12349 /cluster/work/jobs/5977971/ShallowWaterGPU/mpi... \n",
|
||
"\n",
|
||
" t_sim_init t_nc_write t_full_step t_mpi_halo_exchange \\\n",
|
||
"0 8.455713 35.275914 24.448944 0.0 \n",
|
||
"\n",
|
||
" t_mpi_halo_exchange_download t_mpi_halo_exchange_upload \\\n",
|
||
"0 23.929565 0.03894 \n",
|
||
"\n",
|
||
" t_mpi_halo_exchange_sendreceive t_mpi_step nx ny dt \\\n",
|
||
"0 0.340088 0.028564 24576.0 6144.0 0.000001 \n",
|
||
"\n",
|
||
" n_time_steps slurm_job_id n_cuda_devices n_processes \\\n",
|
||
"0 200.0 5977971.0 4 4 \n",
|
||
"\n",
|
||
" git_hash \\\n",
|
||
"0 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n",
|
||
"\n",
|
||
" git_status \n",
|
||
"0 M saga_scaling_benchmark.job\\n M saga_strong_... \n",
|
||
" t_init t_total outfile \\\n",
|
||
"0 10.973809 93.593265 /cluster/work/jobs/5977972/ShallowWaterGPU/mpi... \n",
|
||
"1 4.248161 39.835643 /cluster/work/jobs/5977974/ShallowWaterGPU/mpi... \n",
|
||
"2 11.035480 60.120367 /cluster/work/jobs/5983711/ShallowWaterGPU/mpi... \n",
|
||
"3 9.521014 44.935236 /cluster/work/jobs/5983714/ShallowWaterGPU/mpi... \n",
|
||
"\n",
|
||
" t_sim_init t_nc_write t_full_step t_mpi_halo_exchange \\\n",
|
||
"0 18.225805 32.501692 29.925707 0.0 \n",
|
||
"1 4.393575 15.181573 13.800955 0.0 \n",
|
||
"2 26.829786 10.607348 9.628182 0.0 \n",
|
||
"3 17.313007 8.706373 7.796057 0.0 \n",
|
||
"\n",
|
||
" t_mpi_halo_exchange_download t_mpi_halo_exchange_upload \\\n",
|
||
"0 23.949829 0.037476 \n",
|
||
"1 12.015137 0.035522 \n",
|
||
"2 8.051514 0.038574 \n",
|
||
"3 6.057861 0.042480 \n",
|
||
"\n",
|
||
" t_mpi_halo_exchange_sendreceive t_mpi_step nx ny dt \\\n",
|
||
"0 5.814209 0.025513 24576.0 6144.0 0.000001 \n",
|
||
"1 1.679688 0.023071 24576.0 3072.0 0.000001 \n",
|
||
"2 1.506348 0.025513 24576.0 2048.0 0.000001 \n",
|
||
"3 1.665527 0.029907 24576.0 1536.0 0.000001 \n",
|
||
"\n",
|
||
" n_time_steps slurm_job_id n_cuda_devices n_processes \\\n",
|
||
"0 200.0 5977972.0 1 4 \n",
|
||
"1 200.0 5977974.0 2 8 \n",
|
||
"2 200.0 5983711.0 3 12 \n",
|
||
"3 200.0 5983714.0 4 16 \n",
|
||
"\n",
|
||
" git_hash \\\n",
|
||
"0 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n",
|
||
"1 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n",
|
||
"2 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n",
|
||
"3 0f0cbad2dd661c59f9a2c43740eda12d90cca413\\n \n",
|
||
"\n",
|
||
" git_status \n",
|
||
"0 M saga_scaling_benchmark.job\\n M saga_strong_... \n",
|
||
"1 M saga_scaling_benchmark.job\\n M saga_strong_... \n",
|
||
"2 M saga_scaling_benchmark.job\\n M saga_strong_... \n",
|
||
"3 M saga_scaling_benchmark.job\\n M saga_strong_... \n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# DGX-2\n",
|
||
"#strong_scaling_profiling_data = read_profiling_files(\"output_dgx-2/strong_scaling/2022-06-09T160712/\")\n",
|
||
"#strong_scaling_profiling_data = read_profiling_files(\"output_dgx-2/strong_scaling/2022-06-23T172838/\")\n",
|
||
"\n",
|
||
"# HGX\n",
|
||
"#strong_scaling_profiling_data = read_profiling_files(\"output_hgx/strong_scaling/2022-06-16T152945/\")\n",
|
||
"\n",
|
||
"# Saga\n",
|
||
"singlenode_strong_scaling_profiling_data = read_profiling_files(\"output_saga/strong_scaling/2022-06-16T190721/\", drop_multinode=True)\n",
|
||
"multinode_strong_scaling_profiling_data = read_profiling_files(\"output_saga/strong_scaling/2022-06-16T190721/\", drop_singlenode=True)\n",
|
||
"\n",
|
||
"print(singlenode_strong_scaling_profiling_data)\n",
|
||
"print(multinode_strong_scaling_profiling_data)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Plotting"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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",
|
||
"text/plain": [
|
||
"<Figure size 1152x432 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"plt.rcParams['font.size'] = 16\n",
|
||
"plt.rcParams['legend.fontsize'] = 14\n",
|
||
"plt.rcParams['axes.linewidth'] = 2\n",
|
||
"plt.rcParams['lines.linewidth'] = 2\n",
|
||
"\n",
|
||
"fig, (ax_weak, ax_strong) = plt.subplots(1, 2, figsize=(16,6))\n",
|
||
"\n",
|
||
"t_total_no_init_or_file_io = weak_scaling_profiling_data[\"t_total\"] \\\n",
|
||
" -weak_scaling_profiling_data[\"t_init\"] \\\n",
|
||
" -weak_scaling_profiling_data[\"t_nc_write\"] \\\n",
|
||
" -weak_scaling_profiling_data[\"t_sim_init\"]\n",
|
||
"\n",
|
||
"t_total_halo_exchange = weak_scaling_profiling_data[\"t_mpi_halo_exchange_download\"] \\\n",
|
||
" +weak_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"] \\\n",
|
||
" +weak_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"]\n",
|
||
"\n",
|
||
"#ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
"# speedup(t_total_no_init_or_file_io[0], t_total_no_init_or_file_io), label=\"Total (no init or file I/O)\")\n",
|
||
"\n",
|
||
"ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(weak_scaling_profiling_data[\"t_full_step\"][0], weak_scaling_profiling_data[\"t_full_step\"]), label=\"Runtime (except init and file I/O)\")\n",
|
||
"ax_weak.locator_params(axis=\"x\", nbins=16)\n",
|
||
"\n",
|
||
"\"\"\"\n",
|
||
"ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"][0:].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(t_total_halo_exchange[0], t_total_halo_exchange[0:]), label=\"Halo exchange (D/E/U)\", linestyle=\"dashed\")\n",
|
||
"\n",
|
||
"ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(weak_scaling_profiling_data[\"t_total\"][0], weak_scaling_profiling_data[\"t_total\"]), label=\"Total\")\n",
|
||
"\n",
|
||
"ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(weak_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"][0], weak_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"]), label=\"MPI send/recv\")\n",
|
||
"\n",
|
||
"ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(weak_scaling_profiling_data[\"t_mpi_halo_exchange_download\"][0], weak_scaling_profiling_data[\"t_mpi_halo_exchange_download\"]), label=\"Download (GPU->CPU)\")\n",
|
||
"\n",
|
||
"ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(weak_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"][0], weak_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"]), label=\"Upload (CPU->GPU)\")\n",
|
||
"\n",
|
||
"ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(weak_scaling_profiling_data[\"t_nc_write\"][0], weak_scaling_profiling_data[\"t_nc_write\"]), label=\"Write to file\")\n",
|
||
"\n",
|
||
"ax_weak.plot(weak_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(weak_scaling_profiling_data[\"t_init\"][0], weak_scaling_profiling_data[\"t_init\"]), label=\"Init\")\n",
|
||
"\"\"\"\n",
|
||
"\n",
|
||
"ax_weak.plot(nproc, np.ones(len(nproc)), label=\"Ideal runtime (constant)\", linestyle=\"dotted\")\n",
|
||
"\n",
|
||
"ax_weak.set_xlabel(\"Number of ranks/GPUs\")\n",
|
||
"ax_weak.set_ylabel(\"Efficiency\")\n",
|
||
"ax_weak.legend(loc=\"upper right\", bbox_to_anchor=[1.0, 0.95])\n",
|
||
"#fig.show()\n",
|
||
"\n",
|
||
"##############################################\n",
|
||
"\n",
|
||
"#fig, ax = plt.subplots(figsize=(8,6))\n",
|
||
"\n",
|
||
"t_total_no_init_or_file_io = strong_scaling_profiling_data[\"t_total\"] \\\n",
|
||
" -strong_scaling_profiling_data[\"t_init\"] \\\n",
|
||
" -strong_scaling_profiling_data[\"t_nc_write\"] \\\n",
|
||
" -strong_scaling_profiling_data[\"t_sim_init\"]\n",
|
||
"\n",
|
||
"t_total_halo_exchange = strong_scaling_profiling_data[\"t_mpi_halo_exchange_download\"] \\\n",
|
||
" +strong_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"] \\\n",
|
||
" +strong_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"]\n",
|
||
"\n",
|
||
"#ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
"# speedup(t_total_no_init_or_file_io[0], t_total_no_init_or_file_io)*4, label=\"Total (no init or file I/O)\")\n",
|
||
"\n",
|
||
"ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(strong_scaling_profiling_data[\"t_full_step\"][0], strong_scaling_profiling_data[\"t_full_step\"])*4, label=\"Runtime (except init and file I/O)\")\n",
|
||
"\n",
|
||
"\"\"\"\n",
|
||
"ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(t_total_halo_exchange[0], t_total_halo_exchange)*4, label=\"Halo exchange (D/E/U)\", linestyle=\"dashed\")\n",
|
||
"\n",
|
||
"ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(strong_scaling_profiling_data[\"t_total\"][0], strong_scaling_profiling_data[\"t_total\"])*4, label=\"Total\")\n",
|
||
" \n",
|
||
"ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(strong_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"][0], strong_scaling_profiling_data[\"t_mpi_halo_exchange_sendreceive\"]), label=\"MPI send/recv\")\n",
|
||
"\n",
|
||
"ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(strong_scaling_profiling_data[\"t_mpi_halo_exchange_download\"][0], strong_scaling_profiling_data[\"t_mpi_halo_exchange_download\"]), label=\"Download (GPU->CPU)\")\n",
|
||
"\n",
|
||
"ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(strong_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"][0], strong_scaling_profiling_data[\"t_mpi_halo_exchange_upload\"]), label=\"Upload (CPU->GPU)\")\n",
|
||
"\n",
|
||
"ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(strong_scaling_profiling_data[\"t_nc_write\"][0], strong_scaling_profiling_data[\"t_nc_write\"]), label=\"Write to file\")\n",
|
||
"\n",
|
||
"ax_strong.plot(strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(strong_scaling_profiling_data[\"t_init\"][0], strong_scaling_profiling_data[\"t_init\"]), label=\"Init\")\n",
|
||
"\"\"\"\n",
|
||
"\n",
|
||
"#ax_strong.plot(nproc, amdahls_speedup(0.9, nproc), label=\"Amdahls 90%\", linestyle=\"dashed\")\n",
|
||
"#ax_strong.plot(nproc, amdahls_speedup(0.5, nproc), label=\"Amdahls 50%\", linestyle=\"dashed\")\n",
|
||
"#ax_strong.plot(nproc, amdahls_speedup(0.1, nproc), label=\"Amdahls 10%\", linestyle=\"dashed\")\n",
|
||
"\n",
|
||
"#ax_strong.plot(nproc, gustafsons_speedup(0.9, nproc), label=\"Gustafsons 90%\")\n",
|
||
"#ax_strong.plot(nproc, gustafsons_speedup(0.5, nproc), label=\"Gustafsons 50%\")\n",
|
||
"#ax_strong.plot(nproc, gustafsons_speedup(0.1, nproc), label=\"Gustafsons 10%\")\n",
|
||
"\n",
|
||
"ax_strong.plot(nproc[3:], nproc[3:], label=\"Ideal runtime (linear)\", linestyle=\"dotted\")\n",
|
||
"\n",
|
||
"ax_strong.set_xlabel(\"Number of ranks/GPUs\")\n",
|
||
"ax_strong.set_ylabel(\"Speedup\")\n",
|
||
"ax_strong.legend(loc=\"upper left\")\n",
|
||
"fig.show()\n",
|
||
"\n",
|
||
"fig.savefig(\"dgx-2-scaling.pdf\", bbox_inches='tight')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/cluster/projects/nn9882k/martinls/.conda/envs/ShallowWaterGPU_HPC/lib/python3.7/site-packages/ipykernel_launcher.py:50: UserWarning: Matplotlib is currently using module://matplotlib_inline.backend_inline, which is a non-GUI backend, so cannot show the figure.\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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",
|
||
"text/plain": [
|
||
"<Figure size 1152x432 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"###\n",
|
||
"### Saga\n",
|
||
"###\n",
|
||
"\n",
|
||
"plt.rcParams['font.size'] = 16\n",
|
||
"plt.rcParams['legend.fontsize'] = 14\n",
|
||
"plt.rcParams['axes.linewidth'] = 2\n",
|
||
"plt.rcParams['lines.linewidth'] = 2\n",
|
||
"\n",
|
||
"fig, (ax_weak, ax_strong) = plt.subplots(1, 2, figsize=(16,6))\n",
|
||
"\n",
|
||
"ax_weak.plot(singlenode_weak_scaling_profiling_data[\"n_processes\"][0:4].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(singlenode_weak_scaling_profiling_data[\"t_full_step\"][0], singlenode_weak_scaling_profiling_data[\"t_full_step\"][0:4]), \n",
|
||
" label=\"Shared-memory run time\", marker=\"x\")\n",
|
||
"\n",
|
||
"ax_weak.plot(singlenode_weak_scaling_profiling_data[\"n_processes\"][0:4].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(singlenode_weak_scaling_profiling_data[\"t_full_step\"][0], \n",
|
||
" np.append(singlenode_weak_scaling_profiling_data[\"t_full_step\"][0], multinode_weak_scaling_profiling_data[\"t_full_step\"][0:3])), \n",
|
||
" label=\"Distributed-memory (1-4 nodes) run time\", marker=\"o\", color=\"green\")\n",
|
||
"\n",
|
||
"ax_weak.locator_params(axis=\"x\", nbins=4)\n",
|
||
"ax_weak.set_ylim(0.89, 1.01)\n",
|
||
"\n",
|
||
"ax_weak.plot(nproc[0:4], np.ones(len(nproc[0:4])), label=\"Ideal run time (constant)\", linestyle=\"dotted\", color=\"orange\")\n",
|
||
"\n",
|
||
"ax_weak.set_xlabel(\"Number of ranks/GPUs\")\n",
|
||
"ax_weak.set_ylabel(\"Efficiency\")\n",
|
||
"ax_weak.legend(loc=\"lower left\")\n",
|
||
"ax_weak.title.set_text(\"Weak scaling\")\n",
|
||
"\n",
|
||
"##############################################\n",
|
||
"\n",
|
||
"#ax_strong.plot(singlenode_strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
"# speedup(singlenode_strong_scaling_profiling_data[\"t_full_step\"][0], singlenode_strong_scaling_profiling_data[\"t_full_step\"])*4, \n",
|
||
"# label=\"Single-node (no init or file I/O)\", marker=\"x\")\n",
|
||
"\n",
|
||
"ax_strong.plot(multinode_strong_scaling_profiling_data[\"n_processes\"].to_numpy(dtype=\"int\"), \n",
|
||
" speedup(multinode_strong_scaling_profiling_data[\"t_full_step\"][0], multinode_strong_scaling_profiling_data[\"t_full_step\"])*4, \n",
|
||
" label=\"Distributed-memory (4 nodes) run time\", marker=\"o\")\n",
|
||
"\n",
|
||
"ax_strong.locator_params(axis=\"x\", nbins=16)\n",
|
||
"\n",
|
||
"ax_strong.plot(nproc[0:], nproc[0:], label=\"Ideal run time (linear)\", linestyle=\"dotted\")\n",
|
||
"\n",
|
||
"ax_strong.set_xlabel(\"Number of ranks/GPUs\")\n",
|
||
"ax_strong.set_ylabel(\"Speedup\")\n",
|
||
"ax_strong.legend(loc=\"upper left\")\n",
|
||
"ax_strong.title.set_text(\"Strong scaling\")\n",
|
||
"fig.suptitle(\"Saga cluster\")\n",
|
||
"fig.show()\n",
|
||
"\n",
|
||
"fig.savefig(\"saga-scaling.pdf\", bbox_inches='tight')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"bar_width = 0.8\n",
|
||
"\n",
|
||
"share_init = (profiling_data[\"t_init\"]+profiling_data[\"t_sim_init\"])/profiling_data[\"t_total\"]\n",
|
||
"share_mpi = profiling_data[\"t_step_mpi_halo_exchange\"]/profiling_data[\"t_total\"]\n",
|
||
"share_simulate = profiling_data[\"t_step_mpi\"]/profiling_data[\"t_total\"]\n",
|
||
"\n",
|
||
"plt.bar(profiling_data[\"n_processes\"], \n",
|
||
" share_init, color='red', edgecolor='white', width=bar_width, label=\"Init\")\n",
|
||
"\n",
|
||
"plt.bar(profiling_data[\"n_processes\"], \n",
|
||
" share_mpi, bottom=share_init, color='orange', edgecolor='white', width=bar_width, label=\"MPI\")\n",
|
||
"\n",
|
||
"plt.bar(profiling_data[\"n_processes\"], \n",
|
||
" share_simulate, bottom=share_init+share_mpi , color='green', edgecolor='white', width=bar_width, label=\"Simulate\")\n",
|
||
"\n",
|
||
"plt.xlabel(\"Number of cores/GPUs\")\n",
|
||
"plt.ylabel(\"Share of normalized runtime\")\n",
|
||
"plt.legend(loc=\"upper left\")\n",
|
||
"\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"bar_width = 0.8\n",
|
||
"\n",
|
||
"share_init = (profiling_data[\"t_init\"]+profiling_data[\"t_sim_init\"])\n",
|
||
"share_mpi = profiling_data[\"t_step_mpi_halo_exchange\"]\n",
|
||
"share_simulate = profiling_data[\"t_step_mpi\"]\n",
|
||
"\n",
|
||
"plt.bar(profiling_data[\"n_processes\"], \n",
|
||
" share_init, color='red', edgecolor='white', width=bar_width, label=\"Init\")\n",
|
||
"\n",
|
||
"plt.bar(profiling_data[\"n_processes\"], \n",
|
||
" share_mpi, bottom=share_init, color='orange', edgecolor='white', width=bar_width, label=\"MPI\")\n",
|
||
"\n",
|
||
"plt.bar(profiling_data[\"n_processes\"], \n",
|
||
" share_simulate, bottom=share_init+share_mpi , color='green', edgecolor='white', width=bar_width, label=\"Simulate\")\n",
|
||
"\n",
|
||
"plt.xlabel(\"Number of cores/GPUs\")\n",
|
||
"plt.ylabel(\"Runtime (s)\")\n",
|
||
"plt.legend(loc=\"upper right\")\n",
|
||
"\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"bar_width = 0.8\n",
|
||
"\n",
|
||
"share_init = (profiling_data[\"t_init\"]+profiling_data[\"t_sim_init\"])\n",
|
||
"share_mpi = profiling_data[\"t_step_mpi_halo_exchange\"]\n",
|
||
"share_simulate = profiling_data[\"t_step\"]\n",
|
||
"\n",
|
||
"\n",
|
||
"plt.bar(profiling_data[\"n_processes\"], \n",
|
||
" share_simulate, color='green', edgecolor='white', width=bar_width, label=\"Simulate\")\n",
|
||
"\n",
|
||
"plt.xlabel(\"Number of cores/GPUs\")\n",
|
||
"plt.ylabel(\"Runtime (s)\")\n",
|
||
"plt.legend(loc=\"upper right\")\n",
|
||
"\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"1. ~~Sjekk opp behandling av randvilkår. Fungerer ikke som det skal. Offset-problematikk. Få periodiske render til å funke med 1 (først hele domenet, så indre og yttre domene) og 2 subdomener.~~\n",
|
||
"2. Sjekk overføringer east-west. Kan vi droppe? – Ja, men se punkt 1.\n",
|
||
"3. ~~Sjekk IC-bug? Bare to felter i K-H?!~~\n",
|
||
"4. ~~Kjør lenger kjøring~~\n",
|
||
"5. Sjekk på OsloMet-boks!\n",
|
||
"6. Sjekk reproduserbarhet av løsning\n",
|
||
"7. Ny profilering og sjekk av parallelkjøring"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "ShallowWaterGPU",
|
||
"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.19"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
}
|