diff --git a/analysis/process_nsight_deepcam.ipynb b/analysis/process_nsight_deepcam.ipynb
index 8037989..8a3003c 100644
--- a/analysis/process_nsight_deepcam.ipynb
+++ b/analysis/process_nsight_deepcam.ipynb
@@ -57,106 +57,113 @@
"source": [
"def transpose_frame(df_metrics):\n",
" #Copy the profile frame to make sure not to overwrite it and potentially read it in again if we screwed it up\n",
- " selectkeys = [\"Precision\", \"Network Name\", \"Batch Size\", \"Pass\", \"Name\"]\n",
+ " selectkeys = [\"ID\", \"Name\", \"Network Name\", \"Batch Size\", \"Pass\", \"Precision\"]\n",
+ " resultkeys = [\"Precision\", \"Network Name\", \"Batch Size\", \"Pass\", \"Name\"]\n",
" \n",
" tc_peak_perf_flops = 125*10**12\n",
- "\n",
+ " \n",
" #as metricdf use df_summary\n",
" metricdf = df_metrics.copy()\n",
- " metricdf.sort_values(by=selectkeys,inplace=True)\n",
- " metricdf.reset_index(drop=True, inplace=True)\n",
+ " profiledf = pd.DataFrame(columns=selectkeys)\n",
"\n",
" ####### Get timing information\n",
- "\n",
" ### CUDA Time\n",
- " cudatimedf = metricdf[ (metricdf[\"Metric Name\"].str.contains(\"smsp__cycles_elapsed\")) ].sort_values(selectkeys)\n",
- " # get cycles and rates\n",
- " cyclesdf = metricdf.loc[(metricdf[\"Metric Name\"]==\"smsp__cycles_elapsed\") & (metricdf[\"Metric Type\"]==\"total\"), selectkeys+[\"Metric Value\"]]\n",
- " ratesdf = metricdf.loc[(metricdf[\"Metric Name\"]==\"smsp__cycles_elapsed\") & (metricdf[\"Metric Type\"]==\"rate\"), selectkeys+[\"Metric Value\"]]\n",
- " \n",
- " # combine\n",
- " cudatimedf = cyclesdf.merge(ratesdf, on=selectkeys, how=\"outer\").fillna(0.)\n",
- " cudatimedf[\"CUDA Time Avg\"] = cudatimedf[\"Metric Value_x\"] / (cudatimedf[\"Metric Value_y\"] * 1e9)\n",
- " cudatimedf = cudatimedf.fillna(0.)\n",
- " # merge into results\n",
- " metricdf = metricdf.merge(cudatimedf[selectkeys+[\"CUDA Time Avg\"]], on=selectkeys, how=\"inner\")\n",
+ " # get cycles\n",
+ " metricname = \"CUDA Cycles\"\n",
+ " cyclesdf = metricdf.loc[(metricdf[\"Metric Name\"]==\"smsp__cycles_elapsed\") & (metricdf[\"Metric Type\"]==\"total\"),\n",
+ " selectkeys+[\"Metric Unit\", \"Metric Value\"]].reset_index(drop=True).sort_values(by=selectkeys).rename(columns={\"Metric Value\": metricname}).copy()\n",
+ " # get rates\n",
+ " metricname = \"CUDA Rates\"\n",
+ " ratesdf = metricdf.loc[(metricdf[\"Metric Name\"]==\"smsp__cycles_elapsed\") & (metricdf[\"Metric Type\"]==\"rate\"),\n",
+ " selectkeys+[\"Metric Unit\", \"Metric Value\"]].reset_index(drop=True).sort_values(by=selectkeys).rename(columns={\"Metric Value\": metricname}).copy()\n",
+ " # check consistency\n",
+ " if not cyclesdf[['ID', 'Name']].equals(ratesdf[['ID', 'Name']]):\n",
+ " raise ValueError(\"CUDA Time data not consistent\")\n",
+ " # adjust metric unit\n",
+ " ratesdf.loc[ratesdf[\"Metric Unit\"].str.contains(\"cycle/nsecond\"), [\"CUDA Rates\"]] *= 1e9\n",
+ " # manual merge and compute CUDA Time\n",
+ " cyclesdf[\"CUDA Rates\"] = list(ratesdf[\"CUDA Rates\"])\n",
+ " cyclesdf[\"CUDA Time\"] = cyclesdf[\"CUDA Cycles\"] / cyclesdf[\"CUDA Rates\"]\n",
+ " # merge with output\n",
+ " profiledf = cyclesdf[selectkeys+['CUDA Time']].copy()\n",
" \n",
" ### Tensor Core Time\n",
- " tctimedf = metricdf[ (metricdf[\"Metric Name\"].str.contains(\"smsp__pipe_tensor_op_hmma_cycles_active\")) ].sort_values(selectkeys)\n",
- " # get cycles and rates\n",
- " cyclesdf = metricdf.loc[(metricdf[\"Metric Name\"]==\"smsp__pipe_tensor_op_hmma_cycles_active\") & (metricdf[\"Metric Type\"]==\"total\"), selectkeys+[\"Metric Value\"]]\n",
- " ratesdf = metricdf.loc[(metricdf[\"Metric Name\"]==\"smsp__pipe_tensor_op_hmma_cycles_active\") & (metricdf[\"Metric Type\"]==\"rate\"), selectkeys+[\"Metric Value\"]]\n",
+ " # get cycles\n",
+ " metricname = \"TC Cycles\"\n",
+ " cyclesdf = metricdf.loc[(metricdf[\"Metric Name\"]==\"smsp__pipe_tensor_op_hmma_cycles_active\") & (metricdf[\"Metric Type\"]==\"total\"),\n",
+ " selectkeys+[\"Metric Unit\", \"Metric Value\"]].reset_index(drop=True).sort_values(by=selectkeys).rename(columns={\"Metric Value\": metricname}).copy()\n",
+ " # get rates\n",
+ " metricname = \"TC Rates\"\n",
+ " ratesdf = metricdf.loc[(metricdf[\"Metric Name\"]==\"smsp__pipe_tensor_op_hmma_cycles_active\") & (metricdf[\"Metric Type\"]==\"rate\"),\n",
+ " selectkeys+[\"Metric Unit\", \"Metric Value\"]].reset_index(drop=True).sort_values(by=selectkeys).rename(columns={\"Metric Value\": metricname}).copy()\n",
+ " # check consistency\n",
+ " if not cyclesdf[['ID', 'Name']].equals(ratesdf[['ID', 'Name']]):\n",
+ " raise ValueError(\"TC Time data not consistent\")\n",
+ " # adjust metric unit\n",
+ " ratesdf.loc[ratesdf[\"Metric Unit\"].str.contains(\"cycle/nsecond\"), [\"TC Rates\"]] *= 1e9\n",
+ " # manual merge and compute CUDA Time\n",
+ " cyclesdf[\"TC Rates\"] = list(ratesdf[\"TC Rates\"])\n",
+ " cyclesdf[\"TC Time\"] = cyclesdf[\"TC Cycles\"] / cyclesdf[\"TC Rates\"]\n",
+ " # merge & cleanup\n",
+ " profiledf = profiledf.merge(cyclesdf[selectkeys+['TC Time']], on=selectkeys, how=\"outer\").fillna(0.)\n",
" \n",
- " # combine\n",
- " tctimedf = cyclesdf.merge(ratesdf, on=selectkeys, how=\"outer\").fillna(0.)\n",
- " tctimedf[\"TC Time Avg\"] = tctimedf[\"Metric Value_x\"] / (tctimedf[\"Metric Value_y\"] * 1e9).fillna(0.)\n",
- " tctimedf = tctimedf.fillna(0.)\n",
- " metricdf = metricdf.merge(tctimedf[selectkeys+[\"TC Time Avg\"]], on=selectkeys, how=\"inner\")\n",
- " \n",
- " ### check\n",
- " #tmpdf = metricdf.loc[(abs(metricdf[\"CUDA Time Avg\"] - metricdf[\"TC Time Avg\"])/metricdf[\"CUDA Time Avg\"] > 0.01) & (metricdf[\"TC Time Avg\"] != 0)]\n",
- " #if not tmpdf.empty:\n",
- " # print(tmpdf)\n",
- " # raise ValueError(\"CUDA Time not consistent wit TC Time\") \n",
- " \n",
- " \n",
+ " ### Combine\n",
+ " del profiledf['ID']\n",
+ " del metricdf['ID']\n",
+ " profiledf['Invocations'] = 1\n",
+ " profiledf = profiledf.groupby(resultkeys).sum().reset_index()\n",
+ " #profiledf.sort_values(by=resultkeys, inplace=True)\n",
+ " #profiledf.reset_index(drop=True, inplace=True)\n",
+ "\n",
" ####### Get number of FLOPs\n",
" \n",
" ### FMA FLOPs = number of FMA instructions x 2\n",
" metricdf.loc[metricdf[\"Metric Name\"].str.contains(\"fma\"), [\"Metric Value\"]] *= 2\n",
" \n",
- "\n",
- " ### FP64 FLOPs\n",
- " #metrics = ['smsp__sass_thread_inst_executed_op_dadd_pred_on',\n",
- " # 'smsp__sass_thread_inst_executed_op_dfma_pred_on',\n",
- " # 'smsp__sass_thread_inst_executed_op_dmul_pred_on']\n",
- " #tmpdf = metricdf.loc[ metricdf[\"Metric Name\"].isin(metrics), selectkeys+[\"Metric Value\"] ].copy()\n",
- " #tmpdf = tmpdf.groupby(selectkeys).sum().reset_index().rename(columns={\"Metric Value\": \"FP64 FLOPs\"})\n",
- " #metricdf = metricdf.merge(tmpdf[selectkeys+[\"FP64 FLOPs\"]], on=selectkeys, how=\"inner\")\n",
- " \n",
- " \n",
" ### FP32 FLOPs\n",
" metrics = ['smsp__sass_thread_inst_executed_op_fadd_pred_on',\n",
" 'smsp__sass_thread_inst_executed_op_ffma_pred_on',\n",
" 'smsp__sass_thread_inst_executed_op_fmul_pred_on']\n",
- " tmpdf = metricdf.loc[ metricdf[\"Metric Name\"].isin(metrics), selectkeys+[\"Metric Value\"] ].copy()\n",
- " tmpdf = tmpdf.groupby(selectkeys).sum().reset_index().rename(columns={\"Metric Value\": \"FP32 FLOPs Avg\"})\n",
- " metricdf = metricdf.merge(tmpdf[selectkeys+[\"FP32 FLOPs Avg\"]], on=selectkeys, how=\"inner\")\n",
+ " tmpdf = metricdf.loc[ metricdf[\"Metric Name\"].isin(metrics), resultkeys+[\"Metric Value\"] ].copy()\n",
+ " tmpdf = tmpdf.groupby(resultkeys).sum().reset_index().rename(columns={\"Metric Value\": \"FP32 FLOPs\"})\n",
+ " # merge\n",
+ " profiledf = profiledf.merge(tmpdf[resultkeys+[\"FP32 FLOPs\"]], on=resultkeys, how=\"inner\")\n",
" \n",
" ### FP16 FLOPs\n",
" metrics = ['smsp__sass_thread_inst_executed_op_hadd_pred_on',\n",
" 'smsp__sass_thread_inst_executed_op_hfma_pred_on',\n",
" 'smsp__sass_thread_inst_executed_op_hmul_pred_on']\n",
- " tmpdf = metricdf.loc[ metricdf[\"Metric Name\"].isin(metrics), selectkeys+[\"Metric Value\"] ].copy()\n",
- " tmpdf = tmpdf.groupby(selectkeys).sum().reset_index().rename(columns={\"Metric Value\": \"FP16 FLOPs Avg\"})\n",
- " metricdf = metricdf.merge(tmpdf[selectkeys+[\"FP16 FLOPs Avg\"]], on=selectkeys, how=\"inner\")\n",
+ " tmpdf = metricdf.loc[ metricdf[\"Metric Name\"].isin(metrics), resultkeys+[\"Metric Value\"] ].copy()\n",
+ " tmpdf = tmpdf.groupby(resultkeys).sum().reset_index().rename(columns={\"Metric Value\": \"FP16 FLOPs\"})\n",
+ " # merge\n",
+ " profiledf = profiledf.merge(tmpdf[resultkeys+[\"FP16 FLOPs\"]], on=resultkeys, how=\"inner\")\n",
" \n",
" #### TC FLOPs\n",
- " tmpdf = metricdf.loc[ metricdf[\"Metric Name\"] == \"sm__inst_executed_pipe_tensor_op_hmma\", selectkeys+[\"TC Time Avg\", \"Metric Value\"] ].copy()\n",
- " tmpdf[\"Utilization\"] = 0.01 * tmpdf[\"Metric Value\"]\n",
- " tmpdf[\"TC FLOPs Avg\"] = tc_peak_perf_flops * tmpdf[\"Utilization\"] * tmpdf[\"TC Time Avg\"]\n",
- " metricdf = metricdf.merge(tmpdf[selectkeys+[\"TC FLOPs Avg\"]], on=selectkeys, how=\"inner\")\n",
- "\n",
+ " tmpdf = metricdf.loc[ metricdf[\"Metric Name\"] == \"sm__inst_executed_pipe_tensor_op_hmma\", resultkeys+[\"Metric Value\"] ].copy()\n",
+ " tmpdf = tmpdf.groupby(resultkeys).sum().reset_index().rename(columns={\"Metric Value\": \"TC Utilization\"})\n",
+ " tmpdf[\"TC Utilization\"] = 0.01 * tmpdf[\"TC Utilization\"]\n",
+ " profiledf = profiledf.merge(tmpdf[resultkeys+[\"TC Utilization\"]], on=resultkeys, how=\"inner\")\n",
+ " profiledf[\"TC Utilization\"] = profiledf[\"TC Utilization\"] / profiledf['Invocations']\n",
+ " profiledf[\"TC FLOPs\"] = tc_peak_perf_flops * profiledf[\"TC Utilization\"] * profiledf[\"TC Time\"]\n",
" \n",
" ### Total FLOPs\n",
- " metricdf[\"FLOPs Avg\"] = metricdf[\"FP32 FLOPs Avg\"] + metricdf[\"FP16 FLOPs Avg\"] + metricdf[\"TC FLOPs Avg\"] #+ metricdf[\"FP64 FLOPs\"]\n",
- " \n",
+ " profiledf[\"FLOPs\"] = profiledf[\"FP32 FLOPs\"] + profiledf[\"FP16 FLOPs\"] + profiledf[\"TC FLOPs\"] #+ metricdf[\"FP64 FLOPs\"]\n",
" \n",
" ### FLOPs fractions\n",
- " #metricdf[\"FP64 FLOPs Fraction\"] = metricdf[\"FP64 FLOPs\"]/metricdf[\"FLOPs\"]\n",
- " metricdf[\"FP32 FLOPs Fraction Avg\"] = metricdf[\"FP32 FLOPs Avg\"]/metricdf[\"FLOPs Avg\"]\n",
- " metricdf[\"FP16 FLOPs Fraction Avg\"] = metricdf[\"FP16 FLOPs Avg\"]/metricdf[\"FLOPs Avg\"]\n",
- " metricdf[\"TC FLOPs Fraction Avg\"] = metricdf[\"TC FLOPs Avg\"]/metricdf[\"FLOPs Avg\"]\n",
+ " #profiledf[\"FP64 FLOPs Fraction\"] = profiledf[\"FP64 FLOPs\"]/profiledf[\"FLOPs\"]\n",
+ " profiledf[\"FP32 FLOPs Fraction\"] = profiledf[\"FP32 FLOPs\"]/profiledf[\"FLOPs\"]\n",
+ " profiledf[\"FP16 FLOPs Fraction\"] = profiledf[\"FP16 FLOPs\"]/profiledf[\"FLOPs\"]\n",
+ " profiledf[\"TC FLOPs Fraction\"] = profiledf[\"TC FLOPs\"]/profiledf[\"FLOPs\"]\n",
+ " \n",
" \n",
" ####### Get number of bytes\n",
" \n",
" ### Shared transactions\n",
" #project out\n",
- " shareddf = metricdf.loc[metricdf[\"Metric Name\"].str.contains(\"l1tex__data_pipe_lsu_wavefronts_mem_shared_op\"), selectkeys+[\"Metric Value\"] ].copy()\n",
- " shareddf = shareddf.groupby(selectkeys).sum().reset_index().rename(columns={\"Metric Value\": \"Shared Transactions Avg\"})\n",
+ " shareddf = metricdf.loc[metricdf[\"Metric Name\"].str.contains(\"l1tex__data_pipe_lsu_wavefronts_mem_shared_op\"), resultkeys+[\"Metric Value\"] ].copy()\n",
+ " shareddf = shareddf.groupby(resultkeys).sum().reset_index().rename(columns={\"Metric Value\": \"Shared Transactions\"})\n",
" #add to timings\n",
- " metricdf = metricdf.merge(shareddf[selectkeys+[\"Shared Transactions Avg\"]], on=selectkeys, how=\"inner\")\n",
- "\n",
+ " profiledf = profiledf.merge(shareddf[resultkeys+[\"Shared Transactions\"]], on=resultkeys, how=\"inner\")\n",
" \n",
" ### L1 atomic transactions\n",
" # project out\n",
@@ -164,117 +171,94 @@
" 'l1tex__t_set_accesses_pipe_lsu_mem_global_op_red',\n",
" 'l1tex__t_set_accesses_pipe_tex_mem_surface_op_atom',\n",
" 'l1tex__t_set_accesses_pipe_tex_mem_surface_op_red']\n",
- " atomicdf = metricdf.loc[ metricdf[\"Metric Name\"].isin(metrics), selectkeys+[\"Metric Value\"] ].copy()\n",
+ " atomicdf = metricdf.loc[ metricdf[\"Metric Name\"].isin(metrics), resultkeys+[\"Metric Value\"] ].copy()\n",
" # get reads and writes\n",
- " atomicdf = atomicdf.groupby(selectkeys).sum().reset_index().rename(columns={\"Metric Value\": \"L1 Atomic Transactions Avg\"})\n",
+ " atomicdf = atomicdf.groupby(resultkeys).sum().reset_index().rename(columns={\"Metric Value\": \"L1 Atomic Transactions\"})\n",
" # add to timings\n",
- " metricdf = metricdf.merge(atomicdf[selectkeys+[\"L1 Atomic Transactions Avg\"]], on=selectkeys, how=\"inner\")\n",
- " \n",
- " \n",
+ " profiledf = profiledf.merge(atomicdf[resultkeys+[\"L1 Atomic Transactions\"]], on=resultkeys, how=\"inner\")\n",
+ "\n",
" ### Local transactions \n",
" # project out\n",
- " localdf = metricdf.loc[metricdf[\"Metric Name\"].str.contains(\"l1tex__t_sectors_pipe_lsu_mem_local_op\"), selectkeys+[\"Metric Value\"] ].copy()\n",
- " localdf = localdf.groupby(selectkeys).sum().reset_index().rename(columns={\"Metric Value\": \"Local Transactions Avg\"})\n",
+ " localdf = metricdf.loc[metricdf[\"Metric Name\"].str.contains(\"l1tex__t_sectors_pipe_lsu_mem_local_op\"), resultkeys+[\"Metric Value\"] ].copy()\n",
+ " localdf = localdf.groupby(resultkeys).sum().reset_index().rename(columns={\"Metric Value\": \"Local Transactions\"})\n",
" # add to timings\n",
- " metricdf = metricdf.merge(localdf[selectkeys+[\"Local Transactions Avg\"]], on=selectkeys, how=\"inner\")\n",
- " \n",
+ " profiledf = profiledf.merge(localdf[resultkeys+[\"Local Transactions\"]], on=resultkeys, how=\"inner\")\n",
" \n",
" ### Global transactions \n",
" # project out\n",
- " globaldf = metricdf.loc[metricdf[\"Metric Name\"].str.contains(\"l1tex__t_sectors_pipe_lsu_mem_global_op\"), selectkeys+[\"Metric Value\"] ].copy()\n",
- " globaldf = globaldf.groupby(selectkeys).sum().reset_index().rename(columns={\"Metric Value\": \"Global Transactions Avg\"})\n",
+ " globaldf = metricdf.loc[metricdf[\"Metric Name\"].str.contains(\"l1tex__t_sectors_pipe_lsu_mem_global_op\"), resultkeys+[\"Metric Value\"] ].copy()\n",
+ " globaldf = globaldf.groupby(resultkeys).sum().reset_index().rename(columns={\"Metric Value\": \"Global Transactions\"})\n",
" # add to timings\n",
- " metricdf = metricdf.merge(globaldf[selectkeys+[\"Global Transactions Avg\"]], on=selectkeys, how=\"inner\")\n",
- " \n",
+ " profiledf = profiledf.merge(globaldf[resultkeys+[\"Global Transactions\"]], on=resultkeys, how=\"inner\")\n",
" \n",
" ### L1 Bytes\n",
- " metricdf[\"L1 Transactions Avg\"] = (metricdf[\"Shared Transactions Avg\"] + metricdf[\"L1 Atomic Transactions Avg\"]\n",
- " + metricdf[\"Local Transactions Avg\"] + metricdf[\"Global Transactions Avg\"])\n",
- " metricdf[\"L1 Bytes Avg\"] = metricdf[\"L1 Transactions Avg\"] * 32\n",
- " \n",
+ " profiledf[\"L1 Transactions\"] = (profiledf[\"Shared Transactions\"] + profiledf[\"L1 Atomic Transactions\"]\n",
+ " + profiledf[\"Local Transactions\"] + profiledf[\"Global Transactions\"])\n",
+ " profiledf[\"L1 Bytes\"] = profiledf[\"L1 Transactions\"] * 32\n",
" \n",
" ### L2 atomic & reduction\n",
" metricdf.loc[(metricdf[\"Metric Name\"].str.contains(\"lts__t_sectors_op\")) & (metricdf[\"Metric Type\"]==\"total\"), [\"Metric Value\"]] *= 2\n",
"\n",
- " \n",
" ### L2 transactions\n",
" # project out\n",
- " l2df = metricdf.loc[metricdf[\"Metric Name\"].str.contains(\"lts__t_sectors_op\"), selectkeys+[\"Metric Value\"] ].copy()\n",
- " l2df = l2df.groupby(selectkeys).sum().reset_index().rename(columns={\"Metric Value\": \"L2 Transactions Avg\"})\n",
- " l2df[\"L2 Bytes Avg\"] = l2df[\"L2 Transactions Avg\"] * 32\n",
+ " l2df = metricdf.loc[metricdf[\"Metric Name\"].str.contains(\"lts__t_sectors_op\"), resultkeys+[\"Metric Value\"] ].copy()\n",
+ " l2df = l2df.groupby(resultkeys).sum().reset_index().rename(columns={\"Metric Value\": \"L2 Transactions\"})\n",
+ " l2df[\"L2 Bytes\"] = l2df[\"L2 Transactions\"] * 32\n",
" # add to timings\n",
- " metricdf = metricdf.merge(l2df[selectkeys+[\"L2 Transactions Avg\", \"L2 Bytes Avg\"]], on=selectkeys, how=\"inner\")\n",
- " \n",
- " \n",
+ " profiledf = profiledf.merge(l2df[resultkeys+[\"L2 Transactions\", \"L2 Bytes\"]], on=resultkeys, how=\"inner\")\n",
+ "\n",
" ### DRAM Bytes\n",
" # project out\n",
- " dramdf = metricdf[ metricdf[\"Metric Name\"].str.contains(\"dram__sectors\") ].sort_values(selectkeys)\n",
- " # get reads and writes\n",
- " dramreadsdf = dramdf.loc[(dramdf[\"Metric Name\"]==\"dram__sectors\") & (dramdf[\"Metric Type\"]==\"read\"), selectkeys+[\"Metric Value\"]]\n",
- " dramwritesdf = dramdf.loc[(dramdf[\"Metric Name\"]==\"dram__sectors\") & (dramdf[\"Metric Type\"]==\"write\"), selectkeys+[\"Metric Value\"]]\n",
- " # combine\n",
- " dramdf = dramwritesdf.merge(dramreadsdf, on=selectkeys, how=\"outer\").fillna(0.)\n",
- " dramdf[\"DRAM Transactions Avg\"] = dramdf[\"Metric Value_x\"] + dramdf[\"Metric Value_y\"]\n",
- " dramdf[\"DRAM Bytes Avg\"] = dramdf[\"DRAM Transactions Avg\"] * 32\n",
- " #print(dramdf[['Name', 'Metric Value_x', 'Metric Value_y']])\n",
- " metricdf = metricdf.merge(dramdf[selectkeys+[\"DRAM Transactions Avg\", \"DRAM Bytes Avg\"]], on=selectkeys, how=\"inner\")\n",
- " \n",
- " \n",
+ " dramdf = metricdf.loc[metricdf[\"Metric Name\"].str.contains(\"dram__sectors\"), resultkeys+[\"Metric Value\"] ].copy()\n",
+ " dramdf = dramdf.groupby(resultkeys).sum().reset_index().rename(columns={\"Metric Value\": \"DRAM Transactions\"})\n",
+ " dramdf[\"DRAM Bytes\"] = dramdf[\"DRAM Transactions\"] * 32\n",
+ " # add to timings\n",
+ " profiledf = profiledf.merge(dramdf[resultkeys+[\"DRAM Transactions\", \"DRAM Bytes\"]], on=resultkeys, how=\"inner\")\n",
+ " \n",
" ### Host Memory Bytes\n",
" # project out\n",
- " sysmemdf = metricdf[ metricdf[\"Metric Name\"].str.contains(\"lts__t_sectors_aperture_sysmem_op\") ].sort_values(selectkeys)\n",
- " # get reads and writes\n",
- " sysmemreadsdf = sysmemdf.loc[(sysmemdf[\"Metric Name\"]==\"lts__t_sectors_aperture_sysmem_op\") & (sysmemdf[\"Metric Type\"]==\"read\"), selectkeys+[\"Metric Value\"]]\n",
- " sysmemwritesdf = sysmemdf.loc[(sysmemdf[\"Metric Name\"]==\"lts__t_sectors_aperture_sysmem_op\") & (sysmemdf[\"Metric Type\"]==\"write\"), selectkeys+[\"Metric Value\"]]\n",
- " # combine\n",
- " sysmemdf = sysmemwritesdf.merge(sysmemreadsdf, on=selectkeys, how=\"outer\").fillna(0.)\n",
- " sysmemdf[\"SYSMEM Transactions Avg\"] = sysmemdf[\"Metric Value_x\"] + sysmemdf[\"Metric Value_y\"]\n",
- " sysmemdf[\"SYSMEM Bytes Avg\"] = sysmemdf[\"SYSMEM Transactions Avg\"] * 32\n",
- " #print(dramdf[['Name', 'Metric Value_x', 'Metric Value_y']])\n",
- " metricdf = metricdf.merge(sysmemdf[selectkeys+[\"SYSMEM Transactions Avg\", \"SYSMEM Bytes Avg\"]], on=selectkeys, how=\"inner\")\n",
- " \n",
- " ####### Clean up and return:\n",
- " del metricdf[\"Metric Value\"]\n",
- " del metricdf[\"Metric Name\"]\n",
- " del metricdf[\"Metric Type\"]\n",
- " #del metricdf[\"Invocations\"]\n",
- " metricdf.drop_duplicates(keep = 'first', inplace = True)\n",
- " \n",
+ " sysmemdf = metricdf.loc[metricdf[\"Metric Name\"].str.contains(\"lts__t_sectors_aperture_sysmem_op\"), resultkeys+[\"Metric Value\"] ].copy()\n",
+ " sysmemdf = sysmemdf.groupby(resultkeys).sum().reset_index().rename(columns={\"Metric Value\": \"SYSMEM Transactions\"})\n",
+ " sysmemdf[\"SYSMEM Bytes\"] = sysmemdf[\"SYSMEM Transactions\"] * 32\n",
+ " # add to timings\n",
+ " profiledf = profiledf.merge(sysmemdf[resultkeys+[\"SYSMEM Transactions\", \"SYSMEM Bytes\"]], on=resultkeys, how=\"inner\")\n",
"\n",
+ " \n",
" ### Get performance\n",
- " metricdf[\"Performance GFlop/s\"] = metricdf[\"FLOPs Avg\"] / (metricdf[\"CUDA Time Avg\"]*10**9)\n",
- " metricdf[\"FP32 Performance GFlop/s\"] = metricdf[\"FP32 FLOPs Avg\"] / (metricdf[\"CUDA Time Avg\"]*10**9)\n",
- " metricdf[\"FP16 Performance GFlop/s\"] = metricdf[\"FP16 FLOPs Avg\"] / (metricdf[\"CUDA Time Avg\"]*10**9)\n",
- " metricdf[\"TC Performance GFlop/s\"] = metricdf[\"TC FLOPs Avg\"] / (metricdf[\"TC Time Avg\"]*10**9)\n",
+ " profiledf[\"Performance GFlop/s\"] = profiledf[\"FLOPs\"] / (profiledf[\"CUDA Time\"]*10**9)\n",
+ " profiledf[\"FP32 Performance GFlop/s\"] = profiledf[\"FP32 FLOPs\"] / (profiledf[\"CUDA Time\"]*10**9)\n",
+ " profiledf[\"FP16 Performance GFlop/s\"] = profiledf[\"FP16 FLOPs\"] / (profiledf[\"CUDA Time\"]*10**9)\n",
+ " profiledf[\"TC Performance GFlop/s\"] = profiledf[\"TC FLOPs\"] / (profiledf[\"TC Time\"]*10**9)\n",
"\n",
" \n",
" ### Get AI\n",
" # L1\n",
- " metricdf[\"L1 AI\"] = metricdf[\"FLOPs Avg\"] / metricdf[\"L1 Bytes Avg\"]\n",
- " metricdf[\"FP32 L1 AI\"] = metricdf[\"FP32 FLOPs Avg\"] / metricdf[\"L1 Bytes Avg\"]\n",
- " metricdf[\"FP16 L1 AI\"] = metricdf[\"FP16 FLOPs Avg\"] / metricdf[\"L1 Bytes Avg\"]\n",
- " metricdf[\"TC L1 AI\"] = metricdf[\"TC FLOPs Avg\"] / metricdf[\"L1 Bytes Avg\"]\n",
+ " profiledf[\"L1 AI\"] = profiledf[\"FLOPs\"] / profiledf[\"L1 Bytes\"]\n",
+ " profiledf[\"FP32 L1 AI\"] = profiledf[\"FP32 FLOPs\"] / profiledf[\"L1 Bytes\"]\n",
+ " profiledf[\"FP16 L1 AI\"] = profiledf[\"FP16 FLOPs\"] / profiledf[\"L1 Bytes\"]\n",
+ " profiledf[\"TC L1 AI\"] = profiledf[\"TC FLOPs\"] / profiledf[\"L1 Bytes\"]\n",
" # L2\n",
- " metricdf[\"L2 AI\"] = metricdf[\"FLOPs Avg\"] / metricdf[\"L2 Bytes Avg\"]\n",
- " metricdf[\"FP32 L2 AI\"] = metricdf[\"FP32 FLOPs Avg\"] / metricdf[\"L2 Bytes Avg\"]\n",
- " metricdf[\"FP16 L2 AI\"] = metricdf[\"FP16 FLOPs Avg\"] / metricdf[\"L2 Bytes Avg\"]\n",
- " metricdf[\"TC L2 AI\"] = metricdf[\"TC FLOPs Avg\"] / metricdf[\"L2 Bytes Avg\"]\n",
+ " profiledf[\"L2 AI\"] = profiledf[\"FLOPs\"] / profiledf[\"L2 Bytes\"]\n",
+ " profiledf[\"FP32 L2 AI\"] = profiledf[\"FP32 FLOPs\"] / profiledf[\"L2 Bytes\"]\n",
+ " profiledf[\"FP16 L2 AI\"] = profiledf[\"FP16 FLOPs\"] / profiledf[\"L2 Bytes\"]\n",
+ " profiledf[\"TC L2 AI\"] = profiledf[\"TC FLOPs\"] / profiledf[\"L2 Bytes\"]\n",
" # DRAM\n",
- " metricdf[\"DRAM AI\"] = metricdf[\"FLOPs Avg\"] / metricdf[\"DRAM Bytes Avg\"]\n",
- " metricdf[\"FP32 DRAM AI\"] = metricdf[\"FP32 FLOPs Avg\"] / metricdf[\"DRAM Bytes Avg\"]\n",
- " metricdf[\"FP16 DRAM AI\"] = metricdf[\"FP16 FLOPs Avg\"] / metricdf[\"DRAM Bytes Avg\"]\n",
- " metricdf[\"TC DRAM AI\"] = metricdf[\"TC FLOPs Avg\"] / metricdf[\"DRAM Bytes Avg\"]\n",
+ " profiledf[\"DRAM AI\"] = profiledf[\"FLOPs\"] / profiledf[\"DRAM Bytes\"]\n",
+ " profiledf[\"FP32 DRAM AI\"] = profiledf[\"FP32 FLOPs\"] / profiledf[\"DRAM Bytes\"]\n",
+ " profiledf[\"FP16 DRAM AI\"] = profiledf[\"FP16 FLOPs\"] / profiledf[\"DRAM Bytes\"]\n",
+ " profiledf[\"TC DRAM AI\"] = profiledf[\"TC FLOPs\"] / profiledf[\"DRAM Bytes\"]\n",
" # SYSMEM\n",
- " metricdf[\"SYSMEM AI\"] = metricdf[\"FLOPs Avg\"] / metricdf[\"SYSMEM Bytes Avg\"]\n",
- " metricdf[\"FP32 SYSMEM AI\"] = metricdf[\"FP32 FLOPs Avg\"] / metricdf[\"SYSMEM Bytes Avg\"]\n",
- " metricdf[\"FP16 SYSMEM AI\"] = metricdf[\"FP16 FLOPs Avg\"] / metricdf[\"SYSMEM Bytes Avg\"]\n",
- " metricdf[\"TC SYSMEM AI\"] = metricdf[\"TC FLOPs Avg\"] / metricdf[\"SYSMEM Bytes Avg\"]\n",
+ " profiledf[\"SYSMEM AI\"] = profiledf[\"FLOPs\"] / profiledf[\"SYSMEM Bytes\"]\n",
+ " profiledf[\"FP32 SYSMEM AI\"] = profiledf[\"FP32 FLOPs\"] / profiledf[\"SYSMEM Bytes\"]\n",
+ " profiledf[\"FP16 SYSMEM AI\"] = profiledf[\"FP16 FLOPs\"] / profiledf[\"SYSMEM Bytes\"]\n",
+ " profiledf[\"TC SYSMEM AI\"] = profiledf[\"TC FLOPs\"] / profiledf[\"SYSMEM Bytes\"]\n",
"\n",
+ " \n",
" ### Cleanup\n",
- " metricdf.sort_values(by=selectkeys).reset_index(drop=True, inplace=True)\n",
+ " profiledf.sort_values(by=resultkeys).reset_index(drop=True, inplace=True)\n",
" #print(metricdf[['CUDA Time Avg', 'TC Time Avg']])\n",
" \n",
- " return metricdf"
+ " return profiledf"
]
},
{
@@ -293,7 +277,7 @@
"#get all the files\n",
"files = []\n",
"for datadir in datadirs:\n",
- " files += [ os.path.join(datadir,x) for x in os.listdir(datadir) if ((os.path.splitext(x)[-1] == \".ncu-rep\"))]\n",
+ " files += [ os.path.join(datadir,x) for x in os.listdir(datadir) if ((os.path.splitext(x)[-1] == \".ncu-rep\") or (os.path.splitext(x)[-1] == \".csv\"))]\n",
"\n",
"#recs\n",
"records = []\n",
@@ -316,7 +300,7 @@
" records.append({\"prefix\": prefix, \"file\": os.path.join(path, file)})\n",
"\n",
"#put in df\n",
- "recorddf = pd.DataFrame(records).sort_values([\"prefix\"])\n",
+ "recorddf = pd.DataFrame(records).sort_values([\"prefix\"]).reset_index(drop=True)\n",
"#with pd.option_context('display.max_rows', None, 'display.max_columns', None):"
]
},
@@ -329,75 +313,70 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_dram__sectors_read.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_dram__sectors_write.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__data_pipe_lsu_wavefronts_mem_shared_op_ld.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__data_pipe_lsu_wavefronts_mem_shared_op_st.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_global_op_ld.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_global_op_st.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_local_op_ld.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_local_op_st.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_set_accesses_pipe_lsu_mem_global_op_atom.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_set_accesses_pipe_lsu_mem_global_op_red.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_set_accesses_pipe_tex_mem_surface_op_atom.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_set_accesses_pipe_tex_mem_surface_op_red.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_aperture_sysmem_op_read.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_aperture_sysmem_op_write.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_op_atom.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_op_read.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_op_red.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_op_write.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_sm__inst_executed_pipe_tensor_op_hmma.avg.pct_of_peak_sustained_active.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__cycles_elapsed.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__cycles_elapsed.sum.per_second.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__inst_executed_pipe_tensor_op_hmma.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__pipe_tensor_op_hmma_cycles_active.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__pipe_tensor_op_hmma_cycles_active.sum.per_second.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_fadd_pred_on.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_ffma_pred_on.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_fmul_pred_on.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hadd_pred_on.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hfma_pred_on.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hmul_pred_on.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_dram__sectors_read.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_dram__sectors_write.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__data_pipe_lsu_wavefronts_mem_shared_op_ld.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__data_pipe_lsu_wavefronts_mem_shared_op_st.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_global_op_ld.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_global_op_st.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_local_op_ld.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_local_op_st.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_set_accesses_pipe_lsu_mem_global_op_atom.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_set_accesses_pipe_lsu_mem_global_op_red.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_set_accesses_pipe_tex_mem_surface_op_atom.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_set_accesses_pipe_tex_mem_surface_op_red.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_aperture_sysmem_op_read.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_aperture_sysmem_op_write.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_op_atom.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_op_read.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_op_red.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_op_write.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_sm__inst_executed_pipe_tensor_op_hmma.avg.pct_of_peak_sustained_active.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__cycles_elapsed.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__cycles_elapsed.sum.per_second.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__inst_executed_pipe_tensor_op_hmma.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__pipe_tensor_op_hmma_cycles_active.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__pipe_tensor_op_hmma_cycles_active.sum.per_second.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_fadd_pred_on.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_ffma_pred_on.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_fmul_pred_on.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hadd_pred_on.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hfma_pred_on.sum.ncu-rep\n",
- "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hmul_pred_on.sum.ncu-rep\n"
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_dram__sectors_read.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_dram__sectors_write.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__data_pipe_lsu_wavefronts_mem_shared_op_ld.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__data_pipe_lsu_wavefronts_mem_shared_op_st.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_global_op_ld.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_global_op_st.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_local_op_ld.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_local_op_st.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_set_accesses_pipe_lsu_mem_global_op_atom.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_set_accesses_pipe_lsu_mem_global_op_red.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_set_accesses_pipe_tex_mem_surface_op_atom.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_l1tex__t_set_accesses_pipe_tex_mem_surface_op_red.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_aperture_sysmem_op_read.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_aperture_sysmem_op_write.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_op_atom.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_op_read.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_op_red.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_lts__t_sectors_op_write.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_sm__inst_executed_pipe_tensor_op_hmma.avg.pct_of_peak_sustained_active.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__cycles_elapsed.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__cycles_elapsed.sum.per_second.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__inst_executed_pipe_tensor_op_hmma.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__pipe_tensor_op_hmma_cycles_active.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__pipe_tensor_op_hmma_cycles_active.sum.per_second.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_fadd_pred_on.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_ffma_pred_on.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_fmul_pred_on.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hadd_pred_on.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hfma_pred_on.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_backward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hmul_pred_on.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_dram__sectors_read.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_dram__sectors_write.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__data_pipe_lsu_wavefronts_mem_shared_op_ld.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__data_pipe_lsu_wavefronts_mem_shared_op_st.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_global_op_ld.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_global_op_st.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_local_op_ld.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_sectors_pipe_lsu_mem_local_op_st.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_set_accesses_pipe_lsu_mem_global_op_atom.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_set_accesses_pipe_lsu_mem_global_op_red.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_set_accesses_pipe_tex_mem_surface_op_atom.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_l1tex__t_set_accesses_pipe_tex_mem_surface_op_red.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_aperture_sysmem_op_read.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_aperture_sysmem_op_write.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_op_atom.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_op_read.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_op_red.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_lts__t_sectors_op_write.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_sm__inst_executed_pipe_tensor_op_hmma.avg.pct_of_peak_sustained_active.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__cycles_elapsed.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__cycles_elapsed.sum.per_second.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__inst_executed_pipe_tensor_op_hmma.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__pipe_tensor_op_hmma_cycles_active.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__pipe_tensor_op_hmma_cycles_active.sum.per_second.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_fadd_pred_on.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_ffma_pred_on.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_fmul_pred_on.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hadd_pred_on.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hfma_pred_on.sum.csv\n",
+ "../data/pytorch_1.5/profile.pass_forward.batchsize_2.metric_smsp__sass_thread_inst_executed_op_hmul_pred_on.sum.csv\n"
]
}
],
"source": [
- "#sort by those keys:\n",
- "sortkeys = [\"Network Name\", \\\n",
- " \"Batch Size\", \"Pass\", \\\n",
- " \"Precision\", \"Device\", \"Name\"]\n",
- " \n",
"#group by prefixes and files\n",
"all_prefixes = set([x.split(\".pass\")[0] for x in recorddf[\"prefix\"]])\n",
"all_passes = set([re.match(r'.*\\.pass_(.*?)\\.', x).groups()[0] for x in recorddf[\"prefix\"].unique()])\n",
@@ -405,13 +384,7 @@
"#metrics\n",
"df_profiles = []\n",
"\n",
- "for pref in all_prefixes:\n",
- " \n",
- " #set empty lists\n",
- " df_times = []\n",
- " df_timeline = []\n",
- " df_summary = []\n",
- " \n",
+ "for pref in all_prefixes: \n",
" #print prefix\n",
" #print(pref)\n",
" \n",
@@ -422,9 +395,15 @@
" \n",
" #project frame\n",
" files = recorddf.loc[recorddf[\"prefix\"].apply(lambda x: re.match(r'.*\\.pass_(.*?)\\.', x).groups()[0]) == pas, \"file\"].values\n",
- " \n",
+ "\n",
" #project the invididual files\n",
" metricfiles = [x for x in files if x.endswith(\".ncu-rep\")]\n",
+ " metriccsvs = [x for x in files if x.endswith(\".csv\")]\n",
+ " \n",
+ " ImportFromNsight = True\n",
+ " if len(metricfiles) == len(metriccsvs):\n",
+ " ImportFromNsight = False\n",
+ " metricfiles = metriccsvs\n",
" \n",
" for metricfile in metricfiles:\n",
" \n",
@@ -435,7 +414,7 @@
" parameters = parse_filename_nsight(os.path.basename(metricfile))\n",
" \n",
" #metrics\n",
- " metricdf = import_nsight_metric(metricfile, cuda_dir=cudadir)\n",
+ " metricdf = import_nsight_metric(ImportFromNsight, metricfile, cuda_dir=cudadir)\n",
" for key in parameters:\n",
" metricdf[key] = parameters[key]\n",
" \n",
@@ -496,16 +475,16 @@
" \n",
" \n",
" | \n",
- " Name | \n",
- " Invocations | \n",
+ " Precision | \n",
" Network Name | \n",
" Batch Size | \n",
" Pass | \n",
- " Precision | \n",
- " CUDA Time Avg | \n",
- " TC Time Avg | \n",
- " FP32 FLOPs Avg | \n",
- " FP16 FLOPs Avg | \n",
+ " Name | \n",
+ " CUDA Time | \n",
+ " TC Time | \n",
+ " Invocations | \n",
+ " FP32 FLOPs | \n",
+ " FP16 FLOPs | \n",
" ... | \n",
" FP16 L2 AI | \n",
" TC L2 AI | \n",
@@ -522,71 +501,71 @@
"
\n",
" \n",
" 0 | \n",
- " Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... | \n",
- " 384.0 | \n",
+ " mixed | \n",
" deepCam | \n",
" 2 | \n",
" backward | \n",
- " mixed | \n",
- " 0.000165 | \n",
- " 0.000165 | \n",
- " 3.382784e+06 | \n",
+ " Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... | \n",
+ " 0.063457 | \n",
+ " 0.063608 | \n",
+ " 384 | \n",
+ " 1.298989e+09 | \n",
" 0.0 | \n",
" ... | \n",
" 0.000000 | \n",
- " 86.269259 | \n",
- " 460.004408 | \n",
+ " 86.558155 | \n",
+ " 461.544485 | \n",
" 0.110112 | \n",
" 0.000000 | \n",
- " 459.894296 | \n",
- " 6.308905e+07 | \n",
+ " 461.434373 | \n",
+ " 6.330027e+07 | \n",
" 1.510171e+04 | \n",
" 0.000000 | \n",
- " 6.307394e+07 | \n",
+ " 6.328516e+07 | \n",
"
\n",
" \n",
" 1 | \n",
- " Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... | \n",
- " 12.0 | \n",
+ " mixed | \n",
" deepCam | \n",
" 2 | \n",
" backward | \n",
- " mixed | \n",
- " 0.000120 | \n",
- " 0.000120 | \n",
- " 2.048000e+06 | \n",
+ " Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... | \n",
+ " 0.001441 | \n",
+ " 0.001439 | \n",
+ " 12 | \n",
+ " 2.457600e+07 | \n",
" 0.0 | \n",
" ... | \n",
" 0.000000 | \n",
- " 175.980559 | \n",
- " 411.945348 | \n",
+ " 176.590749 | \n",
+ " 413.373309 | \n",
" 0.117225 | \n",
" 0.000000 | \n",
- " 411.828123 | \n",
- " 3.212944e+07 | \n",
+ " 413.256085 | \n",
+ " 3.224081e+07 | \n",
" 9.142857e+03 | \n",
" 0.000000 | \n",
- " 3.212029e+07 | \n",
+ " 3.223167e+07 | \n",
"
\n",
" \n",
" 2 | \n",
- " Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... | \n",
- " 6.0 | \n",
+ " mixed | \n",
" deepCam | \n",
" 2 | \n",
" backward | \n",
- " mixed | \n",
- " 0.002004 | \n",
- " 0.002003 | \n",
- " 6.930432e+06 | \n",
+ " Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... | \n",
+ " 0.012022 | \n",
+ " 0.012020 | \n",
+ " 6 | \n",
+ " 4.158259e+07 | \n",
" 0.0 | \n",
" ... | \n",
" 0.000000 | \n",
- " 421.062825 | \n",
- " 1362.422104 | \n",
+ " 421.062833 | \n",
+ " 1362.422128 | \n",
" 0.056049 | \n",
" 0.000000 | \n",
- " 1362.366055 | \n",
+ " 1362.366079 | \n",
" 7.520624e+08 | \n",
" 3.093943e+04 | \n",
" 0.000000 | \n",
@@ -594,51 +573,51 @@
"
\n",
" \n",
" 3 | \n",
- " Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x2... | \n",
- " 12.0 | \n",
+ " mixed | \n",
" deepCam | \n",
" 2 | \n",
" backward | \n",
- " mixed | \n",
- " 0.002617 | \n",
- " 0.002624 | \n",
- " 3.538944e+06 | \n",
+ " Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x2... | \n",
+ " 0.031397 | \n",
+ " 0.031395 | \n",
+ " 12 | \n",
+ " 4.246733e+07 | \n",
" 0.0 | \n",
" ... | \n",
" 0.000000 | \n",
- " 133.586092 | \n",
- " 1491.376331 | \n",
+ " 133.167388 | \n",
+ " 1486.701917 | \n",
" 0.020842 | \n",
" 0.000000 | \n",
- " 1491.355488 | \n",
- " 1.130491e+09 | \n",
+ " 1486.681075 | \n",
+ " 1.126947e+09 | \n",
" 1.579886e+04 | \n",
" 0.000000 | \n",
- " 1.130475e+09 | \n",
+ " 1.126932e+09 | \n",
"
\n",
" \n",
" 4 | \n",
- " Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_64x32... | \n",
- " 24.0 | \n",
+ " mixed | \n",
" deepCam | \n",
" 2 | \n",
" backward | \n",
- " mixed | \n",
- " 0.000211 | \n",
- " 0.000230 | \n",
- " 2.347008e+06 | \n",
+ " Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_64x32... | \n",
+ " 0.005062 | \n",
+ " 0.005076 | \n",
+ " 24 | \n",
+ " 5.632819e+07 | \n",
" 0.0 | \n",
" ... | \n",
" 0.000000 | \n",
- " 30.525030 | \n",
- " 70.019151 | \n",
+ " 28.108023 | \n",
+ " 64.476321 | \n",
" 0.017258 | \n",
" 0.000000 | \n",
- " 70.001893 | \n",
- " 4.251066e+07 | \n",
+ " 64.459064 | \n",
+ " 3.914544e+07 | \n",
" 1.047771e+04 | \n",
" 0.000000 | \n",
- " 4.250018e+07 | \n",
+ " 3.913497e+07 | \n",
"
\n",
" \n",
" ... | \n",
@@ -666,87 +645,87 @@
"
\n",
" \n",
" 110 | \n",
- " volta_fp16_s884cudnn_fp16_256x64_ldg8_relu_f2f... | \n",
- " 6.0 | \n",
+ " mixed | \n",
" deepCam | \n",
" 2 | \n",
" forward | \n",
- " mixed | \n",
- " 0.000080 | \n",
- " 0.000080 | \n",
- " 1.061683e+07 | \n",
- " 663552.0 | \n",
+ " volta_fp16_s884cudnn_fp16_256x64_ldg8_relu_f2f... | \n",
+ " 0.000477 | \n",
+ " 0.000477 | \n",
+ " 6 | \n",
+ " 6.370099e+07 | \n",
+ " 3981312.0 | \n",
" ... | \n",
" 0.010521 | \n",
- " 63.149830 | \n",
- " 262.910613 | \n",
+ " 63.151051 | \n",
+ " 262.915682 | \n",
" 0.698876 | \n",
" 0.043680 | \n",
- " 262.168057 | \n",
- " 1.783014e+07 | \n",
+ " 262.173126 | \n",
+ " 1.783048e+07 | \n",
" 4.739657e+04 | \n",
" 2962.285714 | \n",
- " 1.777978e+07 | \n",
+ " 1.778013e+07 | \n",
"
\n",
" \n",
" 111 | \n",
- " volta_fp16_s884cudnn_fp16_256x64_ldg8_relu_f2f... | \n",
- " 6.0 | \n",
+ " mixed | \n",
" deepCam | \n",
" 2 | \n",
" forward | \n",
- " mixed | \n",
- " 0.000303 | \n",
- " 0.000307 | \n",
- " 5.662310e+07 | \n",
- " 3538944.0 | \n",
+ " volta_fp16_s884cudnn_fp16_256x64_ldg8_relu_f2f... | \n",
+ " 0.001821 | \n",
+ " 0.001844 | \n",
+ " 6 | \n",
+ " 3.397386e+08 | \n",
+ " 21233664.0 | \n",
" ... | \n",
" 0.010270 | \n",
- " 57.673099 | \n",
- " 234.258467 | \n",
+ " 57.676963 | \n",
+ " 234.274116 | \n",
" 0.665453 | \n",
" 0.041591 | \n",
- " 233.551423 | \n",
- " 8.898636e+07 | \n",
+ " 233.567072 | \n",
+ " 8.899231e+07 | \n",
" 2.527817e+05 | \n",
" 15798.857143 | \n",
- " 8.871778e+07 | \n",
+ " 8.872373e+07 | \n",
"
\n",
" \n",
" 112 | \n",
- " volta_fp16_s884gemm_fp16_128x128_ldg8_f2f_nt | \n",
- " 36.0 | \n",
+ " mixed | \n",
" deepCam | \n",
" 2 | \n",
" forward | \n",
- " mixed | \n",
- " 0.000425 | \n",
- " 0.000469 | \n",
- " 5.573837e+07 | \n",
+ " volta_fp16_s884gemm_fp16_128x128_ldg8_f2f_nt | \n",
+ " 0.015462 | \n",
+ " 0.015516 | \n",
+ " 36 | \n",
+ " 2.006581e+09 | \n",
" 0.0 | \n",
" ... | \n",
" 0.000000 | \n",
- " 64.365833 | \n",
- " 246.901319 | \n",
+ " 59.159849 | \n",
+ " 226.962966 | \n",
" 0.387155 | \n",
" 0.000000 | \n",
- " 246.514164 | \n",
- " 1.586883e+08 | \n",
+ " 226.575811 | \n",
+ " 1.458735e+08 | \n",
" 2.488320e+05 | \n",
" 0.000000 | \n",
- " 1.584394e+08 | \n",
+ " 1.456247e+08 | \n",
"
\n",
" \n",
" 113 | \n",
- " volta_fp16_scudnn_fp16_128x64_relu_interior_nn_v1 | \n",
- " 12.0 | \n",
+ " mixed | \n",
" deepCam | \n",
" 2 | \n",
" forward | \n",
- " mixed | \n",
- " 0.000171 | \n",
+ " volta_fp16_scudnn_fp16_128x64_relu_interior_nn_v1 | \n",
+ " 0.002050 | \n",
" 0.000000 | \n",
- " 1.833173e+09 | \n",
+ " 12 | \n",
+ " 2.199808e+10 | \n",
" 0.0 | \n",
" ... | \n",
" 0.000000 | \n",
@@ -762,15 +741,15 @@
"
\n",
" \n",
" 114 | \n",
- " volta_fp16_sgemm_fp16_128x32_nt | \n",
- " 12.0 | \n",
+ " mixed | \n",
" deepCam | \n",
" 2 | \n",
" forward | \n",
- " mixed | \n",
- " 0.000301 | \n",
+ " volta_fp16_sgemm_fp16_128x32_nt | \n",
+ " 0.003614 | \n",
" 0.000000 | \n",
- " 3.630957e+09 | \n",
+ " 12 | \n",
+ " 4.357148e+10 | \n",
" 0.0 | \n",
" ... | \n",
" 0.000000 | \n",
@@ -786,76 +765,76 @@
"
\n",
" \n",
"\n",
- "115 rows × 47 columns
\n",
+ "115 rows × 48 columns
\n",
""
],
"text/plain": [
- " Name Invocations \\\n",
- "0 Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... 384.0 \n",
- "1 Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... 12.0 \n",
- "2 Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... 6.0 \n",
- "3 Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x2... 12.0 \n",
- "4 Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_64x32... 24.0 \n",
- ".. ... ... \n",
- "110 volta_fp16_s884cudnn_fp16_256x64_ldg8_relu_f2f... 6.0 \n",
- "111 volta_fp16_s884cudnn_fp16_256x64_ldg8_relu_f2f... 6.0 \n",
- "112 volta_fp16_s884gemm_fp16_128x128_ldg8_f2f_nt 36.0 \n",
- "113 volta_fp16_scudnn_fp16_128x64_relu_interior_nn_v1 12.0 \n",
- "114 volta_fp16_sgemm_fp16_128x32_nt 12.0 \n",
+ " Precision Network Name Batch Size Pass \\\n",
+ "0 mixed deepCam 2 backward \n",
+ "1 mixed deepCam 2 backward \n",
+ "2 mixed deepCam 2 backward \n",
+ "3 mixed deepCam 2 backward \n",
+ "4 mixed deepCam 2 backward \n",
+ ".. ... ... ... ... \n",
+ "110 mixed deepCam 2 forward \n",
+ "111 mixed deepCam 2 forward \n",
+ "112 mixed deepCam 2 forward \n",
+ "113 mixed deepCam 2 forward \n",
+ "114 mixed deepCam 2 forward \n",
"\n",
- " Network Name Batch Size Pass Precision CUDA Time Avg TC Time Avg \\\n",
- "0 deepCam 2 backward mixed 0.000165 0.000165 \n",
- "1 deepCam 2 backward mixed 0.000120 0.000120 \n",
- "2 deepCam 2 backward mixed 0.002004 0.002003 \n",
- "3 deepCam 2 backward mixed 0.002617 0.002624 \n",
- "4 deepCam 2 backward mixed 0.000211 0.000230 \n",
- ".. ... ... ... ... ... ... \n",
- "110 deepCam 2 forward mixed 0.000080 0.000080 \n",
- "111 deepCam 2 forward mixed 0.000303 0.000307 \n",
- "112 deepCam 2 forward mixed 0.000425 0.000469 \n",
- "113 deepCam 2 forward mixed 0.000171 0.000000 \n",
- "114 deepCam 2 forward mixed 0.000301 0.000000 \n",
+ " Name CUDA Time TC Time \\\n",
+ "0 Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... 0.063457 0.063608 \n",
+ "1 Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... 0.001441 0.001439 \n",
+ "2 Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x1... 0.012022 0.012020 \n",
+ "3 Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_128x2... 0.031397 0.031395 \n",
+ "4 Volta_hmma_implicit_gemm_wgrad_fp32_nhwc_64x32... 0.005062 0.005076 \n",
+ ".. ... ... ... \n",
+ "110 volta_fp16_s884cudnn_fp16_256x64_ldg8_relu_f2f... 0.000477 0.000477 \n",
+ "111 volta_fp16_s884cudnn_fp16_256x64_ldg8_relu_f2f... 0.001821 0.001844 \n",
+ "112 volta_fp16_s884gemm_fp16_128x128_ldg8_f2f_nt 0.015462 0.015516 \n",
+ "113 volta_fp16_scudnn_fp16_128x64_relu_interior_nn_v1 0.002050 0.000000 \n",
+ "114 volta_fp16_sgemm_fp16_128x32_nt 0.003614 0.000000 \n",
"\n",
- " FP32 FLOPs Avg FP16 FLOPs Avg ... FP16 L2 AI TC L2 AI DRAM AI \\\n",
- "0 3.382784e+06 0.0 ... 0.000000 86.269259 460.004408 \n",
- "1 2.048000e+06 0.0 ... 0.000000 175.980559 411.945348 \n",
- "2 6.930432e+06 0.0 ... 0.000000 421.062825 1362.422104 \n",
- "3 3.538944e+06 0.0 ... 0.000000 133.586092 1491.376331 \n",
- "4 2.347008e+06 0.0 ... 0.000000 30.525030 70.019151 \n",
- ".. ... ... ... ... ... ... \n",
- "110 1.061683e+07 663552.0 ... 0.010521 63.149830 262.910613 \n",
- "111 5.662310e+07 3538944.0 ... 0.010270 57.673099 234.258467 \n",
- "112 5.573837e+07 0.0 ... 0.000000 64.365833 246.901319 \n",
- "113 1.833173e+09 0.0 ... 0.000000 0.000000 30.543450 \n",
- "114 3.630957e+09 0.0 ... 0.000000 0.000000 29.308326 \n",
+ " Invocations FP32 FLOPs FP16 FLOPs ... FP16 L2 AI TC L2 AI \\\n",
+ "0 384 1.298989e+09 0.0 ... 0.000000 86.558155 \n",
+ "1 12 2.457600e+07 0.0 ... 0.000000 176.590749 \n",
+ "2 6 4.158259e+07 0.0 ... 0.000000 421.062833 \n",
+ "3 12 4.246733e+07 0.0 ... 0.000000 133.167388 \n",
+ "4 24 5.632819e+07 0.0 ... 0.000000 28.108023 \n",
+ ".. ... ... ... ... ... ... \n",
+ "110 6 6.370099e+07 3981312.0 ... 0.010521 63.151051 \n",
+ "111 6 3.397386e+08 21233664.0 ... 0.010270 57.676963 \n",
+ "112 36 2.006581e+09 0.0 ... 0.000000 59.159849 \n",
+ "113 12 2.199808e+10 0.0 ... 0.000000 0.000000 \n",
+ "114 12 4.357148e+10 0.0 ... 0.000000 0.000000 \n",
"\n",
- " FP32 DRAM AI FP16 DRAM AI TC DRAM AI SYSMEM AI FP32 SYSMEM AI \\\n",
- "0 0.110112 0.000000 459.894296 6.308905e+07 1.510171e+04 \n",
- "1 0.117225 0.000000 411.828123 3.212944e+07 9.142857e+03 \n",
- "2 0.056049 0.000000 1362.366055 7.520624e+08 3.093943e+04 \n",
- "3 0.020842 0.000000 1491.355488 1.130491e+09 1.579886e+04 \n",
- "4 0.017258 0.000000 70.001893 4.251066e+07 1.047771e+04 \n",
- ".. ... ... ... ... ... \n",
- "110 0.698876 0.043680 262.168057 1.783014e+07 4.739657e+04 \n",
- "111 0.665453 0.041591 233.551423 8.898636e+07 2.527817e+05 \n",
- "112 0.387155 0.000000 246.514164 1.586883e+08 2.488320e+05 \n",
- "113 30.543450 0.000000 0.000000 8.183808e+06 8.183808e+06 \n",
- "114 29.308326 0.000000 0.000000 1.620963e+07 1.620963e+07 \n",
+ " DRAM AI FP32 DRAM AI FP16 DRAM AI TC DRAM AI SYSMEM AI \\\n",
+ "0 461.544485 0.110112 0.000000 461.434373 6.330027e+07 \n",
+ "1 413.373309 0.117225 0.000000 413.256085 3.224081e+07 \n",
+ "2 1362.422128 0.056049 0.000000 1362.366079 7.520624e+08 \n",
+ "3 1486.701917 0.020842 0.000000 1486.681075 1.126947e+09 \n",
+ "4 64.476321 0.017258 0.000000 64.459064 3.914544e+07 \n",
+ ".. ... ... ... ... ... \n",
+ "110 262.915682 0.698876 0.043680 262.173126 1.783048e+07 \n",
+ "111 234.274116 0.665453 0.041591 233.567072 8.899231e+07 \n",
+ "112 226.962966 0.387155 0.000000 226.575811 1.458735e+08 \n",
+ "113 30.543450 30.543450 0.000000 0.000000 8.183808e+06 \n",
+ "114 29.308326 29.308326 0.000000 0.000000 1.620963e+07 \n",
"\n",
- " FP16 SYSMEM AI TC SYSMEM AI \n",
- "0 0.000000 6.307394e+07 \n",
- "1 0.000000 3.212029e+07 \n",
- "2 0.000000 7.520315e+08 \n",
- "3 0.000000 1.130475e+09 \n",
- "4 0.000000 4.250018e+07 \n",
- ".. ... ... \n",
- "110 2962.285714 1.777978e+07 \n",
- "111 15798.857143 8.871778e+07 \n",
- "112 0.000000 1.584394e+08 \n",
- "113 0.000000 0.000000e+00 \n",
- "114 0.000000 0.000000e+00 \n",
+ " FP32 SYSMEM AI FP16 SYSMEM AI TC SYSMEM AI \n",
+ "0 1.510171e+04 0.000000 6.328516e+07 \n",
+ "1 9.142857e+03 0.000000 3.223167e+07 \n",
+ "2 3.093943e+04 0.000000 7.520315e+08 \n",
+ "3 1.579886e+04 0.000000 1.126932e+09 \n",
+ "4 1.047771e+04 0.000000 3.913497e+07 \n",
+ ".. ... ... ... \n",
+ "110 4.739657e+04 2962.285714 1.778013e+07 \n",
+ "111 2.527817e+05 15798.857143 8.872373e+07 \n",
+ "112 2.488320e+05 0.000000 1.456247e+08 \n",
+ "113 8.183808e+06 0.000000 0.000000e+00 \n",
+ "114 1.620963e+07 0.000000 0.000000e+00 \n",
"\n",
- "[115 rows x 47 columns]"
+ "[115 rows x 48 columns]"
]
},
"execution_count": 7,
@@ -886,74 +865,257 @@
"#copy profiledf\n",
"combineddf = profiledf.copy()\n",
"\n",
- "#get the aggregated performance, including all kernels:\n",
- "#compute weights: multiply all measures by the number of invocations\n",
- "weighted = True\n",
- "if weighted:\n",
- " #first, get all the names of metrics which need to be weighted\n",
- " metrics = [x for x in combineddf.columns if \"Avg\" in x]\n",
- " for metric in metrics:\n",
- " combineddf[metric] *= combineddf[\"Invocations\"]\n",
- "\n",
"#sum up\n",
"combineddf = combineddf.groupby(by=combinedselectkeys).sum()#.reset_index()\n",
"\n",
"\n",
"#the flop fractions need to be recomputed\n",
- "combineddf[\"FP32 FLOPs Fraction Avg\"] = combineddf[\"FP32 FLOPs Avg\"] / combineddf[\"FLOPs Avg\"]\n",
- "combineddf[\"FP16 FLOPs Fraction Avg\"] = combineddf[\"FP16 FLOPs Avg\"] / combineddf[\"FLOPs Avg\"]\n",
- "combineddf[\"TC FLOPs Fraction Avg\"] = combineddf[\"TC FLOPs Avg\"] / combineddf[\"FLOPs Avg\"]\n",
+ "combineddf[\"FP32 FLOPs Fraction\"] = combineddf[\"FP32 FLOPs\"] / combineddf[\"FLOPs\"]\n",
+ "combineddf[\"FP16 FLOPs Fraction\"] = combineddf[\"FP16 FLOPs\"] / combineddf[\"FLOPs\"]\n",
+ "combineddf[\"TC FLOPs Fraction\"] = combineddf[\"TC FLOPs\"] / combineddf[\"FLOPs\"]\n",
"\n",
"### Get performance\n",
- "combineddf[\"Performance GFlop/s\"] = combineddf[\"FLOPs Avg\"] / (combineddf[\"CUDA Time Avg\"]*10**9)\n",
- "combineddf[\"FP32 Performance GFlop/s\"] = combineddf[\"FP32 FLOPs Avg\"] / (combineddf[\"CUDA Time Avg\"]*10**9)\n",
- "combineddf[\"FP16 Performance GFlop/s\"] = combineddf[\"FP16 FLOPs Avg\"] / (combineddf[\"CUDA Time Avg\"]*10**9)\n",
- "combineddf[\"TC Performance GFlop/s\"] = combineddf[\"TC FLOPs Avg\"] / (combineddf[\"TC Time Avg\"]*10**9)\n",
+ "combineddf[\"Performance GFlop/s\"] = combineddf[\"FLOPs\"] / (combineddf[\"CUDA Time\"]*10**9)\n",
+ "combineddf[\"FP32 Performance GFlop/s\"] = combineddf[\"FP32 FLOPs\"] / (combineddf[\"CUDA Time\"]*10**9)\n",
+ "combineddf[\"FP16 Performance GFlop/s\"] = combineddf[\"FP16 FLOPs\"] / (combineddf[\"CUDA Time\"]*10**9)\n",
+ "combineddf[\"TC Performance GFlop/s\"] = combineddf[\"TC FLOPs\"] / (combineddf[\"TC Time\"]*10**9)\n",
"\n",
"\n",
"### Get AI\n",
"# L1\n",
- "combineddf[\"L1 AI\"] = combineddf[\"FLOPs Avg\"] / combineddf[\"L1 Bytes Avg\"]\n",
- "combineddf[\"FP32 L1 AI\"] = combineddf[\"FP32 FLOPs Avg\"] / combineddf[\"L1 Bytes Avg\"]\n",
- "combineddf[\"FP16 L1 AI\"] = combineddf[\"FP16 FLOPs Avg\"] / combineddf[\"L1 Bytes Avg\"]\n",
- "combineddf[\"TC L1 AI\"] = combineddf[\"TC FLOPs Avg\"] / combineddf[\"L1 Bytes Avg\"]\n",
+ "combineddf[\"L1 AI\"] = combineddf[\"FLOPs\"] / combineddf[\"L1 Bytes\"]\n",
+ "combineddf[\"FP32 L1 AI\"] = combineddf[\"FP32 FLOPs\"] / combineddf[\"L1 Bytes\"]\n",
+ "combineddf[\"FP16 L1 AI\"] = combineddf[\"FP16 FLOPs\"] / combineddf[\"L1 Bytes\"]\n",
+ "combineddf[\"TC L1 AI\"] = combineddf[\"TC FLOPs\"] / combineddf[\"L1 Bytes\"]\n",
"# L2\n",
- "combineddf[\"L2 AI\"] = combineddf[\"FLOPs Avg\"] / combineddf[\"L2 Bytes Avg\"]\n",
- "combineddf[\"FP32 L2 AI\"] = combineddf[\"FP32 FLOPs Avg\"] / combineddf[\"L2 Bytes Avg\"]\n",
- "combineddf[\"FP16 L2 AI\"] = combineddf[\"FP16 FLOPs Avg\"] / combineddf[\"L2 Bytes Avg\"]\n",
- "combineddf[\"TC L2 AI\"] = combineddf[\"TC FLOPs Avg\"] / combineddf[\"L2 Bytes Avg\"]\n",
+ "combineddf[\"L2 AI\"] = combineddf[\"FLOPs\"] / combineddf[\"L2 Bytes\"]\n",
+ "combineddf[\"FP32 L2 AI\"] = combineddf[\"FP32 FLOPs\"] / combineddf[\"L2 Bytes\"]\n",
+ "combineddf[\"FP16 L2 AI\"] = combineddf[\"FP16 FLOPs\"] / combineddf[\"L2 Bytes\"]\n",
+ "combineddf[\"TC L2 AI\"] = combineddf[\"TC FLOPs\"] / combineddf[\"L2 Bytes\"]\n",
"# DRAM\n",
- "combineddf[\"DRAM AI\"] = combineddf[\"FLOPs Avg\"] / combineddf[\"DRAM Bytes Avg\"]\n",
- "combineddf[\"FP32 DRAM AI\"] = combineddf[\"FP32 FLOPs Avg\"] / combineddf[\"DRAM Bytes Avg\"]\n",
- "combineddf[\"FP16 DRAM AI\"] = combineddf[\"FP16 FLOPs Avg\"] / combineddf[\"DRAM Bytes Avg\"]\n",
- "combineddf[\"TC DRAM AI\"] = combineddf[\"TC FLOPs Avg\"] / combineddf[\"DRAM Bytes Avg\"]\n",
+ "combineddf[\"DRAM AI\"] = combineddf[\"FLOPs\"] / combineddf[\"DRAM Bytes\"]\n",
+ "combineddf[\"FP32 DRAM AI\"] = combineddf[\"FP32 FLOPs\"] / combineddf[\"DRAM Bytes\"]\n",
+ "combineddf[\"FP16 DRAM AI\"] = combineddf[\"FP16 FLOPs\"] / combineddf[\"DRAM Bytes\"]\n",
+ "combineddf[\"TC DRAM AI\"] = combineddf[\"TC FLOPs\"] / combineddf[\"DRAM Bytes\"]\n",
"\n",
"combineddf.sort_values(by=combinedselectkeys).reset_index(drop=True, inplace=True)"
]
},
{
- "cell_type": "markdown",
+ "cell_type": "code",
+ "execution_count": 9,
"metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " CUDA Time | \n",
+ " TC Time | \n",
+ " Invocations | \n",
+ " FP32 FLOPs | \n",
+ " FP16 FLOPs | \n",
+ " TC Utilization | \n",
+ " TC FLOPs | \n",
+ " FLOPs | \n",
+ " FP32 FLOPs Fraction | \n",
+ " FP16 FLOPs Fraction | \n",
+ " ... | \n",
+ " FP16 L2 AI | \n",
+ " TC L2 AI | \n",
+ " DRAM AI | \n",
+ " FP32 DRAM AI | \n",
+ " FP16 DRAM AI | \n",
+ " TC DRAM AI | \n",
+ " SYSMEM AI | \n",
+ " FP32 SYSMEM AI | \n",
+ " FP16 SYSMEM AI | \n",
+ " TC SYSMEM AI | \n",
+ "
\n",
+ " \n",
+ " Precision | \n",
+ " Network Name | \n",
+ " Batch Size | \n",
+ " Pass | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " mixed | \n",
+ " deepCam | \n",
+ " 2 | \n",
+ " backward | \n",
+ " 1.349231 | \n",
+ " 0.260532 | \n",
+ " 9136 | \n",
+ " 1.799501e+12 | \n",
+ " 3.725807e+11 | \n",
+ " 10.091165 | \n",
+ " 2.173761e+13 | \n",
+ " 2.390969e+13 | \n",
+ " 0.075262 | \n",
+ " 0.015583 | \n",
+ " ... | \n",
+ " 0.579800 | \n",
+ " 33.827449 | \n",
+ " 98.231720 | \n",
+ " 7.393158 | \n",
+ " 1.530729 | \n",
+ " 89.307834 | \n",
+ " 5.278744e+09 | \n",
+ " 5.562857e+08 | \n",
+ " 1.882723e+08 | \n",
+ " 4.534186e+09 | \n",
+ "
\n",
+ " \n",
+ " forward | \n",
+ " 0.615992 | \n",
+ " 0.119549 | \n",
+ " 4782 | \n",
+ " 1.388716e+12 | \n",
+ " 6.145969e+10 | \n",
+ " 3.279819 | \n",
+ " 9.519808e+12 | \n",
+ " 1.096998e+13 | \n",
+ " 0.126592 | \n",
+ " 0.005603 | \n",
+ " ... | \n",
+ " 0.255036 | \n",
+ " 39.503903 | \n",
+ " 90.478692 | \n",
+ " 11.453912 | \n",
+ " 0.506910 | \n",
+ " 78.517870 | \n",
+ " 1.458617e+09 | \n",
+ " 3.423932e+08 | \n",
+ " 3.427154e+06 | \n",
+ " 1.112797e+09 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
2 rows × 43 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " CUDA Time TC Time Invocations \\\n",
+ "Precision Network Name Batch Size Pass \n",
+ "mixed deepCam 2 backward 1.349231 0.260532 9136 \n",
+ " forward 0.615992 0.119549 4782 \n",
+ "\n",
+ " FP32 FLOPs FP16 FLOPs \\\n",
+ "Precision Network Name Batch Size Pass \n",
+ "mixed deepCam 2 backward 1.799501e+12 3.725807e+11 \n",
+ " forward 1.388716e+12 6.145969e+10 \n",
+ "\n",
+ " TC Utilization TC FLOPs \\\n",
+ "Precision Network Name Batch Size Pass \n",
+ "mixed deepCam 2 backward 10.091165 2.173761e+13 \n",
+ " forward 3.279819 9.519808e+12 \n",
+ "\n",
+ " FLOPs FP32 FLOPs Fraction \\\n",
+ "Precision Network Name Batch Size Pass \n",
+ "mixed deepCam 2 backward 2.390969e+13 0.075262 \n",
+ " forward 1.096998e+13 0.126592 \n",
+ "\n",
+ " FP16 FLOPs Fraction ... \\\n",
+ "Precision Network Name Batch Size Pass ... \n",
+ "mixed deepCam 2 backward 0.015583 ... \n",
+ " forward 0.005603 ... \n",
+ "\n",
+ " FP16 L2 AI TC L2 AI DRAM AI \\\n",
+ "Precision Network Name Batch Size Pass \n",
+ "mixed deepCam 2 backward 0.579800 33.827449 98.231720 \n",
+ " forward 0.255036 39.503903 90.478692 \n",
+ "\n",
+ " FP32 DRAM AI FP16 DRAM AI \\\n",
+ "Precision Network Name Batch Size Pass \n",
+ "mixed deepCam 2 backward 7.393158 1.530729 \n",
+ " forward 11.453912 0.506910 \n",
+ "\n",
+ " TC DRAM AI SYSMEM AI \\\n",
+ "Precision Network Name Batch Size Pass \n",
+ "mixed deepCam 2 backward 89.307834 5.278744e+09 \n",
+ " forward 78.517870 1.458617e+09 \n",
+ "\n",
+ " FP32 SYSMEM AI FP16 SYSMEM AI \\\n",
+ "Precision Network Name Batch Size Pass \n",
+ "mixed deepCam 2 backward 5.562857e+08 1.882723e+08 \n",
+ " forward 3.423932e+08 3.427154e+06 \n",
+ "\n",
+ " TC SYSMEM AI \n",
+ "Precision Network Name Batch Size Pass \n",
+ "mixed deepCam 2 backward 4.534186e+09 \n",
+ " forward 1.112797e+09 \n",
+ "\n",
+ "[2 rows x 43 columns]"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- "# Export Data"
+ "combineddf"
]
},
{
- "cell_type": "code",
- "execution_count": 9,
+ "cell_type": "markdown",
"metadata": {},
- "outputs": [],
"source": [
- "metricdf.to_csv(\"./metrics.csv\")\n",
- "profiledf.to_csv(\"./profile.csv\")"
+ "# Export Data"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {},
"outputs": [],
- "source": []
+ "source": [
+ "combineddf.to_csv(\"./combined.csv\")\n",
+ "profiledf.to_csv(\"./profile.csv\")"
+ ]
}
],
"metadata": {
diff --git a/analysis/roofline_plot.ipynb b/analysis/roofline_plot.ipynb
index 278eaca..2a2d31e 100644
--- a/analysis/roofline_plot.ipynb
+++ b/analysis/roofline_plot.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
@@ -26,7 +26,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
@@ -54,7 +54,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
@@ -144,7 +144,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
@@ -156,7 +156,7 @@
" \n",
" #Mixed data\n",
" df_mixed = df[ df[\"Precision\"] == \"mixed\" ]\n",
- " Times_mixed = df_mixed[\"CUDA Time Avg\"].values\n",
+ " Times_mixed = df_mixed[\"CUDA Time\"].values\n",
" FLOPs_mixed = df_mixed[\"Performance GFlop/s\"].values #list(df_fp16[\"FP16 Performance GFlop/s\"])\n",
" \n",
" if mem_level == \"L1\":\n",
@@ -212,7 +212,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
@@ -222,12 +222,12 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
- "image/png": "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blx4u2vXrhx++OEeo8meNWvW8Oqrr4bt3/3udx6jERHJTco0p06DZskrxcXFPPbYY2H78ssvV6WMiNtvv51du3YBcOCBB9K7d2/PEWXH1q1befDBB8P2b37zGxo0aOAxIhGR3KRBc+o0PUPySjSL2rNnT9q0aeMxmtzy6KOP8v333wOwzz77MGTIEM8RZU+07nTXrl3p0KGDx2hERCQfKNMseSNab7hdu3b06NHDc0S54+9//zurVq0K2/l8iexoNv2ggw7K22y6iMjeUp3m9BTUoNnM+gH9lHXKP9OnTw/rDTdo0IDf/va3niPKHevXr+fFF18M2yNGjMjbShkPP/xwmWz6VVdd5TkiEZHcpkFz6gpqeoZzbp5zbkiTJk18hyIZtHDhQj7//HNAFRISxWIxpk2bFrYvuOACmjZt6jGi7Hn99df55JNPAL0OREQk8woq0yz5Z/Xq1SxevDhsq0JCWWPHjg1vn3DCCRx99NEeo8me9evXs2DBgrA9YsQIateu7TEiEZEaQHWa01JQmWbJL8XFxcycOTNsX3zxxaqQEHHXXXexY8cOAFq0aEH//v09R5Qd27dv3yObrk+TREQk05Rplhoreonsbt26cdhhh3mMJrc8/vjjbN68GYC6desybNgwzxFlTzSb3rlz57zNpouIZIMyzanToFlqpPHjx4cVEg4++GDOOOMMzxHljrfffpsVK1aE7Xye2zthwgR27twJBNn0fv36eY5IRKRm0aA5dZqeITXOww8/zA8//ABA/fr1ufLKKz1HlDu++eYbnnnmmbA9bNiwvL24y+zZsykqKgLyP5suIiL+KdMsNUpihYR8rjecrlgsxsSJE8N2v379aNGihceIsuftt99m5cqVYfumm27yGI2ISM2kOs3p0aBZaox169btUSFBdoteBa9Tp0507tzZYzTZs3HjxjLZ9Ouuu446dfSnTESkKjRoTp2mZ0iNEIvFuO+++8L2gAEDVCEhYtKkScRiMQCaNWvGgAEDPEeUHbFYjHvuuSds9+vXj/33399jRCIiUiiUnpEaYcyYMeHtE088kU6dOnmMJrf89a9/ZdOmTQDUqVOH4cOHe44oe6KVMo455pi8zaaLiFQL1WlOiwbNkvPuvPPOsELCAQccwNlnn+05otyxfPly/vnPf4btfJ7bO3HixLDu9E9+8hPOP/98zxGJiNR8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\n",
+ "image/png": "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5JTHHnssJ+rplsfHH3/M22+/HbazeS7tE088wf79+wE48cQTszYLLiJSEmWIA8oQS86YP38+u3btAqBatWpZXU+3rPbt28fzzz8ftgcMGED16tU9RpQ+iVnwkSNHeo5IRER8U4ZYcsL//u//8t5774Xt0aNHe4wm80SnkVx66aU0b97cYzTpk5gFV2UREcl1yhAHNCCWrJeXl8crr7wStu+8805VEogYN25cWFGiefPmXHbZZX4DSpO9e/cekQWvUaOGx4hERPxSHeJCmjIhWS0WixWpJNC9e3caN27sMaLMMnPmTPbt2wfACSecwIABA/wGlCbOOSZMmBC2u3TpkrVZcBERKTtliCWrRQdBbdq0oWPHjh6jySwrVqxg69atAJhZVk8fGD9+fJgFP+200+jatavniEREMoMyxAENiCVrTZs2LawkUKdOHfr37+85oszx2WefsXLlyrA9cuRIzLLzf8WZM2eSn58PQM2aNbn11ls9RyQikiFUhzikKROSlRYvXsyOHTuAoJLAiBEjPEeUOfbt28fTTz8dtvv370+tWrX8BZRGr7/+es5kwUVEpPyUIZass2nTJlavXh22x4wZ4zGazDN+/PjwcceOHWnTpo3HaNJny5YtvPHGG2H7d7/7ncdoREQykzLEAQ2IJavk5+fzwgsvhO3bbrtNFSUiHnroIQ4fPgzAySefTPfu3T1HlB4//vgjs2bNCts33ngjNWvW9BiRiEhm0oA4oCkTklWi2c+uXbvSrFkzj9Fklueff57vv/8egOOPP55BgwZ5jih9onWVO3bsSOvWrT1GIyIimU4ZYska0Xq6LVq0oEuXLp4jyhz//d//zccffxy2s/m2zNEs+CmnnJK1WXARkWOlOsSFcmpAbGa9gF7KFmWfGTNmhPV0a9asyW9/+1vPEWWO7du385e//CVsDx8+PGsrSjz77LNFsuB33HGH54hERDKbBsSBnJoy4Zxb4JwbVLduXd+hSAotX76czz//HFAlgUSxWIwnnngibP/617+mXr16HiNKn7feeou///3vgN4HIiJSNjmVIZbss3nzZlatWhW2VUmgqHHjxoWPL7jgAs4++2yP0aTP9u3bWbp0adgePnw4VatW9RiRiEgloDrEoZzKEEt2yc/PZ/bs2WH7pptuUiWBiEceeYSDBw8C0KhRI3r37u05ovQ4cODAEVlw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\n",
"text/plain": [
"