Files
aare/python/tests/ClusterFinderCUDA.ipynb
T
kferjaoui 88e0e8d678
Build on RHEL8 / build (push) Successful in 2m51s
Build on RHEL9 / build (push) Successful in 3m15s
Run tests using data on local RHEL8 / build (push) Successful in 3m47s
Optimize CUDA cluster finder transfers and kernel hot path
- Use per-stream pinned host staging buffers for truly async CUDA transfers.
- Avoid reserving full device capacity per result frame.
- Reduce kernel work by delaying cluster payload construction.
- Use squared comparisons and removing per-pixel sqrtf() ops.
2026-04-30 18:23:31 +02:00

526 lines
79 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "789d5aab-0c75-4ed3-94bf-e66172f6737c",
"metadata": {},
"outputs": [],
"source": [
"import sys; sys.path.append('/home/ferjao_k/aare/build')\n",
"\n",
"from pathlib import Path\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.axes_grid1 import make_axes_locatable\n",
"import numpy as np\n",
"import boost_histogram as bh\n",
"import time\n",
"\n",
"from aare import File, ClusterFinder, ClusterFinderMT, ClusterCollector, ClusterFinderCUDA"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3f6089d6-2245-4aca-aad3-2417c16afae2",
"metadata": {},
"outputs": [],
"source": [
"# Helpers\n",
"N_BINS = 200\n",
"def make_hist(clusters):\n",
" h = bh.Histogram(bh.axis.Regular(N_BINS, -2, 4000))\n",
" h.fill(clusters.sum())\n",
" return h\n",
"\n",
"def make_hist_from_batch(result_list):\n",
" h = bh.Histogram(bh.axis.Regular(N_BINS, -2, 4000))\n",
" energies = [np.asarray(cv.sum()).ravel() for cv in result_list if cv.size > 0]\n",
" if energies:\n",
" h.fill(np.concatenate(energies))\n",
" return h"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "415b09d4-d0d0-4166-8601-9d84302617bd",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Image size: (400, 400)\n",
"Pedestal frames: 1000\n",
"Data frames: 88999\n"
]
}
],
"source": [
"base = Path('/mnt/sls_det_storage/matterhorn_data/aare_test_data/')\n",
"f = File(base / 'Moench03new/cu_half_speed_master_4.json')\n",
"\n",
"n_frames_pd = 1000\n",
"N = 88999\n",
"cluster_size = (9, 9)\n",
"image_size = (f.rows, f.cols)\n",
"capacity = 100_000 #3_000_000\n",
"\n",
"print(f'Image size: {image_size}')\n",
"print(f'Pedestal frames: {n_frames_pd}')\n",
"print(f'Data frames: {N}')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "3e49d862-45f4-4d37-a078-947e6b9ec9e3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"500000"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f.total_frames"
]
},
{
"cell_type": "markdown",
"id": "5531b79d-12ad-4de6-84b7-0224b10d13c3",
"metadata": {},
"source": [
"## Pedestal (both finders trained on identical frames)"
]
},
{
"cell_type": "markdown",
"id": "e33b421f-969a-41d6-8aa6-5bd859a88fb3",
"metadata": {},
"source": [
"- Modify the boolean `SERIAL` to choose between the sequential CPU version (ClusterFinder) and its multi-threaded homologue (ClusterFinderMT)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "6ee7c469-5a23-421a-9bb4-a76e8f57a0c1",
"metadata": {},
"outputs": [],
"source": [
"SERIAL = True"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "9d8f69bf-27f6-48c8-b2da-4157d67e6b04",
"metadata": {},
"outputs": [],
"source": [
"if(SERIAL):\n",
" cf_cpu = ClusterFinder(image_size, cluster_size, capacity=capacity)\n",
"else:\n",
" cf_cpu = ClusterFinderMT(image_size, cluster_size, capacity=capacity, n_threads=48)\n",
" sink = ClusterCollector(cf_cpu)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "cbdcb805-708b-4205-bda9-2aa163d0e81f",
"metadata": {},
"outputs": [],
"source": [
"N_STREAMS = 5\n",
"cf_cuda = ClusterFinderCUDA(image_size, cluster_size, n_sigma=7, capacity=capacity, n_streams=N_STREAMS)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "1546f405-1bf6-4073-ab35-8134be695a6c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pedestal (1000 frames): 0.501s\n"
]
}
],
"source": [
"t0 = time.perf_counter()\n",
"for _ in range(n_frames_pd):\n",
" img = f.read_frame()\n",
" cf_cpu.push_pedestal_frame(img.copy())\n",
" cf_cuda.push_pedestal_frame(img.copy())\n",
"print(f'Pedestal ({n_frames_pd} frames): {time.perf_counter() - t0:.3f}s')"
]
},
{
"cell_type": "markdown",
"id": "5df035f0-7a27-4d5a-8f8d-c94e745bcd1a",
"metadata": {},
"source": [
"## Read all data frames into memory (I/O out of the timing loop)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "4573be3d-5ba8-4e18-bab0-c874f2b7dcb2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Reading 88999 frames: 30.101s (2957 FPS, 902.311 GB/s)\n"
]
}
],
"source": [
"f.seek(n_frames_pd)\n",
"t0 = time.perf_counter()\n",
"data = f.read_n(N)\n",
"t_io = time.perf_counter() - t0\n",
"print(f'Reading {N} frames: {t_io:.3f}s ({N/t_io:.0f} FPS, '\n",
" f'{f.bytes_per_frame * N / 1024**2 / t_io:.3f} GB/s)')"
]
},
{
"cell_type": "markdown",
"id": "c1e9362e-dcc2-41af-bfa1-c62d0968477e",
"metadata": {},
"source": [
"## CPU clustering"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "fbb14fda-2852-4b73-ba2c-9952abac1d99",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU clustering: 835.664s (107 FPS, 90799856 clusters, 1020.23/frame)\n"
]
}
],
"source": [
"t0 = time.perf_counter()\n",
"for frame in data:\n",
" cf_cpu.find_clusters(frame)\n",
"t_cpu = time.perf_counter() - t0\n",
"\n",
"if(SERIAL):\n",
" clusters_cpu = cf_cpu.steal_clusters(realloc_same_capacity=False)\n",
" n_clusters_cpu = clusters_cpu.size\n",
" \n",
" hist_cpu = make_hist(clusters_cpu)\n",
"else:\n",
" cf_cpu.stop()\n",
" sink.stop()\n",
" \n",
" clusters_cpu = sink.steal_clusters() #cf_cpu.steal_clusters(realloc_same_capacity=False)\n",
" \n",
" hist_cpu = bh.Histogram(bh.axis.Regular(N_BINS, -2, 4000))\n",
" n_clusters_cpu = 0\n",
" for cv in clusters_cpu:\n",
" hist_cpu.fill(cv.sum())\n",
" n_clusters_cpu += cv.size\n",
" \n",
"print(f'CPU clustering: {t_cpu:.3f}s ({N/t_cpu:.0f} FPS, '\n",
" f'{n_clusters_cpu} clusters, {n_clusters_cpu/N:.2f}/frame)')"
]
},
{
"cell_type": "markdown",
"id": "8cfd7091-8020-49ff-b033-28bf773983d8",
"metadata": {},
"source": [
"## CUDA clustering"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "4f94cf35-5796-463d-bed8-f44a02d91fc6",
"metadata": {},
"outputs": [],
"source": [
"BATCHED = True"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "50848f8c-2e66-45b8-b6d5-ca80f368e6ba",
"metadata": {},
"outputs": [],
"source": [
"if(BATCHED):\n",
" BATCH_SIZE = 2000\n",
"\n",
" # Warmup: first kernel launch pays CUDA context + pedestal H2D upload cost\n",
" _ = cf_cuda.find_clusters_batched(data[0:BATCH_SIZE], first_frame=0)\n",
" \n",
" clusters_cuda_per_frame = []\n",
"\n",
" cf_cuda.reset_timers()\n",
" t0 = time.perf_counter()\n",
" for start in range(0, N, BATCH_SIZE):\n",
" stop = min(start + BATCH_SIZE, N)\n",
" clusters_cuda_per_frame.extend(\n",
" cf_cuda.find_clusters_batched(data[start:stop], first_frame=start)\n",
" )\n",
" t_cuda = time.perf_counter() - t0\n",
" kernel_ms = cf_cuda.avg_kernel_time_ms()\n",
" \n",
" n_clusters_cuda = sum(cv.size for cv in clusters_cuda_per_frame)\n",
"\n",
" hist_cuda = make_hist_from_batch(clusters_cuda_per_frame)\n",
" \n",
"else:\n",
" # Warmup\n",
" cf_cuda.find_clusters(data[0])\n",
" _ = cf_cuda.steal_clusters(realloc_same_capacity=False)\n",
"\n",
" cf_cuda.reset_timers()\n",
" t0 = time.perf_counter()\n",
"\n",
" n_clusters_cuda = 0\n",
" hist_cuda = None\n",
"\n",
" # steal the clusters as we go rather than at the end of the dataset \n",
" # which might trigger an std::bad_alloc...\n",
" for idx, frame in enumerate(data):\n",
" cf_cuda.find_clusters(frame)\n",
" clusters_frame = cf_cuda.steal_clusters(realloc_same_capacity=True)\n",
"\n",
" n_clusters_cuda += clusters_frame.size\n",
"\n",
" h = make_hist(clusters_frame)\n",
" hist_cuda = h if hist_cuda is None else hist_cuda + h\n",
" \n",
" t_cuda = time.perf_counter() - t0\n",
" kernel_ms = cf_cuda.avg_kernel_time_ms()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "502d0d3b-6b1e-4cc9-91df-9d998bd849b5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(9, 9)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cluster_size"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "2e3e4b9c-7f23-4fb7-bc3e-fa3d766d51fc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU clustering: 835.664s (107 FPS, 90799856 clusters, 1020.23/frame)\n"
]
}
],
"source": [
"print(f'CPU clustering: {t_cpu:.3f}s ({N/t_cpu:.0f} FPS, '\n",
" f'{n_clusters_cpu} clusters, {n_clusters_cpu/N:.2f}/frame)')"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "4b8df93b-9a1b-41a5-9fed-9cda295fb523",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CUDA clustering: 8.812s (10100 FPS, 89995010 clusters, 1011.19/frame)\n",
" Kernel only: 0.039 ms/frame\n",
" PCIe + overhead: 0.060 ms/frame\n",
"Speedup (CPU / CUDA): 94.83×\n"
]
}
],
"source": [
"print(f'CUDA clustering: {t_cuda:.3f}s ({N/t_cuda:.0f} FPS, '\n",
" f'{n_clusters_cuda} clusters, {n_clusters_cuda/N:.2f}/frame)')\n",
"print(f' Kernel only: {kernel_ms:.3f} ms/frame')\n",
"print(f' PCIe + overhead: {t_cuda*1000/N - kernel_ms:.3f} ms/frame')\n",
"print(f'Speedup (CPU / CUDA): {t_cpu / t_cuda:.2f}×')"
]
},
{
"cell_type": "markdown",
"id": "b966cce1-0f73-4565-a707-1aec2a69f75e",
"metadata": {},
"source": [
"## Agreement check: \n",
"- Cluster counts should match closely.\n",
"- However, as the CUDA CF updates the pedestal once per frame rather than per-pixel, a small divergence after the first few frames is expected."
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "d3a850df-7df0-485b-971d-381cfdc6be81",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cluster count diff: 804846 (0.89%)\n"
]
}
],
"source": [
"diff = abs(n_clusters_cpu - n_clusters_cuda)\n",
"rel = diff / max(n_clusters_cpu, 1)\n",
"print(f'Cluster count diff: {diff} ({rel:.2%})')"
]
},
{
"cell_type": "markdown",
"id": "81638ad3-6112-4bd7-a93a-f4d97f1f94cf",
"metadata": {},
"source": [
"## Plots"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "aff8db7e-8332-4228-857f-a9875cf940d3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"200 201\n",
"200 201\n"
]
}
],
"source": [
"print(len(hist_cpu.values()), len(hist_cpu.axes[0].edges))\n",
"print(len(hist_cuda.values()), len(hist_cuda.axes[0].edges))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "9adeea2f-9309-4c0a-905b-7d1203ba1f4e",
"metadata": {},
"outputs": [
{
"data": {
"image/png":
"iVBORw0KGgoAAAANSUhEUgAAAxYAAAJOCAYAAAAqFJGJAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAsURJREFUeJzs3Qd4U1UbB/B/96K7dFL2HoIMGaKAIChLXDgRFNkiCDgQB/Cp+AkCDoa4UJThgk8BWYogAoIM2UuBstvSRelu7/e8J9yQdNGdpPn/niekTU7uvTm5Kee95z3nOGiapoGIiIiIiKgUHEvzYiIiIiIiIgYWRERERERUJthjQUREREREpcbAgoiIiIiISo2BBRERERERlRoDCyIiIiIiKjUGFkREREREVGoMLIiIiIiIqNQYWBARERERUakxsCCiMrFv3z48+eSTqFWrFtzd3VGlShW0bNkS77zzDuLi4ozlOnfurG7lZe7cuVi4cGG5bZ9sR2U8F37//Xf0798fERERcHV1ha+vLzp06IB58+bh6tWrxnI1a9aEg4OD8Sbfx7Zt2+LLL780256U6927d777+uuvv9RrraUOi/o3prjvafLkyWZ15enpiWrVqqFHjx744IMPcOXKlQKPKTMzE6Ghoep13333XRm/YyLbw8CCiErt448/RqtWrbBz5048//zzWLNmDZYvX44HH3wQ8+fPx+DBgyuslitjY5JKprKdC6+//jpuv/12nDt3Dv/5z3+wfv16LF26FF27dlWN41deecWs/K233opt27apm9SDNH4HDhyoghBbUxF/Y2SbUldyP2PGDFSvXh0vvPACmjRpgr///jvf16xcuRKXLl1SP3/66aelPgYiW+ds6QMgItsm/xGPGDECd955J1asWAE3Nzfjc/LY+PHj1X/UtkzTNKSlpcHDwwO2IDU11WaO1VrIlWdpeDs7W+d/i99++y2mTp2qGtDSyJZj1d19992qASzfRVN+fn5o166d8fdu3bqhRo0amDlzpvrO2oqK+hsjgUtQUJDx94cffhjPPPMMOnXqhL59++LYsWNm+9aDCek5kjLr1q3D2bNnVW8Hkb1ijwURlcpbb72lGjkLFizI85+ukP905T/lgvz222/q9XJv6tSpU3lSFv7991/1n314eLjaV0hIiLpau3fvXmMKxMGDB7Fp0yZjWoM8pktKSsKECRNUKoUcl6STjB071iyFRMjrpEEhV0IbNWqk9vXFF18UWg/Lli1D+/bt4eXlpVI0JI1iz549ZmUGDRqknjtx4gR69uypfo6MjFQNo/T0dLOyGRkZeOONN9CwYUO1/6pVq6o0kJiYGLNyetrHDz/8gJtvvlmliEyZMkU9J3XRvXt3ldohrx81ahRWrVplVt9y5Vsa02fOnMnznp566ikEBgaqoKogN/pMTI9RrjDfdNNN6hhr166N999/P8/2ivoZ5eTkqDSVFi1aqCBKb0T/+OOPNzwX9HNu0aJFqu5lH3Ls8rnoaTG56Vf85bzM/b7kqrXUvRyHnC/yu/4a+V3OiVtuuUWl4ZSUBBX+/v6qzvI7Pm9vb/VZF0bqqEGDBjh9+jTKilzJl+PJ72r9zz//rJ7TPxM5d4cOHarOef2cll6VDRs2lOvfmNJo3rw5Jk2ahKioKPUdN3X+/HkV0PTp00f1osg5WZl6yIhKwjovzRCRTcjOzsavv/6qrvRJY6G8SWNc9ik51ZKmEBsbi61btyIhIUE9Lw3XBx54QOWdSxqM0BsiKSkp6qqiXFF8+eWXVQNXGp6vvfYa9u/frxo3pg02uTIq+ezyvORQBwcHF9rwkTQUafjLvQQF06dPx2233YYdO3agcePGZlfGpREkV56lUbt582bVuJdjln0JaaDcc889av9yJVpy6KUxKKkwMj5FGqimPRK7d+/G4cOH1b6lQS4N2QsXLqj3Kz9L6osc/5IlS1TAZGrYsGF488038dFHH6lARic565JmI+UlECjpZ6KTQEMCBGm4S31+/fXXGDNmjKorCSSK+xlJkPbVV1+pepRGtzQupR70hn9h54Ju4sSJKhiUANLR0bHQz7iwhrVsRxqfsi8J6u677z712C+//GJsFL/44osqCDl58qTxs5Njlc9L0pMKa5DKZ3ngwAE89NBDKkgsKTn35DySBn1ZNrwlqPr888/zpCPJe5I6lXNEDBgwQH1Gcr7Vr19fnSPy++XLl63mb0x+5Psq30P5rj7xxBNm70+OTwJwvTfos88+U+dCfsEfkV3QiIhK6OLFi5r8GXn44YeL/JpOnTqpm27jxo1qG3Jv6uTJk+rxzz//XP0eGxurfp89e3ah22/SpInZ9nXTpk3THB0dtZ07d5o9/t1336ntrl692viY/O7r66vFxcXd8P1ERUVpzs7O2ujRo80ev3LlihYaGqr179/f+NjAgQPVtr/55huzsj179tQaNGhg/H3JkiWq3Pfff29WTo5dHp87d67xsRo1amhOTk7a0aNHzco+//zzmoODg3bw4EGzx3v06JGnvuW4goODtfT0dONj//3vf1V9yedQkKJ+JnKMcix79+41e/zOO+/UfHx8tKtXrxbrM9q8ebP6fdKkSSU6F/Rz7vbbb8/z3Ouvv66ey03OQ3nctD7kfXl4eGhnz541PibvUcqFhYUZ35dYsWKFevzHH380Pnbq1Cn12T311FOFvo/t27er17700ktaUcmxyXmVmZmpbnLc+vkn54ZpuV69euW7Df1807+DBXn//fdVOdNzUL47bm5u2vjx442PValSRRs7dqxW3n9jivue9M88JiYm39ekpqaq5++++27jYzk5OVrdunW1iIgILSsry2w7v/zySzHeIVHlwlQoIrIJAQEBqFOnjuoJkBxxSTOSK/tFJekpTZs2VakzWVlZxpukLOWXinXHHXeo1JMbWbt2rdqOXMk03a5c5Zer77m3K/uS1AlTcmXeND1FjlXSVqSc6Tbl2OVqf+5tyuvlCrApSQGS92vaWyIeeeSRPO9Beg6io6NVHr+QepVejl69epmlkpXmM5EBsHJ129Sjjz6qUp/kqnVxPiNJsRGS2lUa999/P0pLjlVSqXSS+iSkZ8m0d0F/3PRzlivc8v7Ka9Dv6tWr4eLiom7SM/LNN99g9OjRZj1TZeGxxx5TvUGmvS7SOybpfdKLp5N0MCkj+9++fbvqQbEFhmsNyPP9ktQ56W1ycnJSj8l7lfNUei2I7BUDCyIqMRnoKI0nSe8ob/IftqSWSCNT0m5kmklJ6Xj22WcLnQ5SJzO3yHSVekNLv0luujQcJIXHVFhYWJGOS58Rpk2bNnm2LTnZubcr9ZU7tUgaZabjGGSbkiYi6T25t3nx4sUiHaukl8h4h9zye0xSWSRta86cOcYGvqTp5E6bKs1nIgFRbvpjeipMUT8jydWXxlx+2yyOon7GhZHgypR8ZoU9Xth4lYJIipko7vesY8eOahYlSZ07dOiQOqdkjIZ+LELG10g6T34k6BHyGRRG3qukC8lUtvq2JICQQEICSp18H6Qh/sknn6gUNHmdBORyTpfl35iyeE+m9GBQxhHp9GDw3nvvVfUqN0mFkzr//vvv86QCEtkLjrEgohKTxp0M1JUryCWdDUVvZOcevJy78axf4dX/Q5cZWuQKrOTsS56+5MkXRhooktte0NVE09lgRFFzpPXXyRz2cnxlQbYpg6YLmulGGto3OlZ5vR70mCqoESfBgEzdKb0HH374oeoBkRl3bqSon0l++9Ufk2MtzmckwYs0HOX1pQkO8qs30/PRdExGfudjRZH32KxZMzXrkIxDKeo4C2notm7dutAyEmjK9LX50R/PLxjNTa7WS4+XTIErgZAENLmntZXPb/bs2eomg6FlUPdLL72kessKOtdL8jemrN6TTh98rq+/k5iYqIIH/YJCfhYvXoyRI0cWeR9ElQV7LIioVGSQqlxNHjJkiGpM5ibpDj/99FOBr9dTbeRKdX7/mRdEGr4yWFkaXHoqjZDGoEy3mpsMnP3nn39UI1YaW7lvhaX8FEau1ssVUtl2ftu9UcMuP3KschVfGs/5bU9m9rkRScOSAb9ypdqUDMjOj1x5lQahDCiXQdLSKCruANSCPhMhg7BzrwUgjS8JkqSnozifkUyvKm60HkNB50JhCjofCzuHK8Krr76K+Ph4FQDml5qTnJysAo/ikkHH+Z0nQoJEfWG9G5EZqSQlTAZxy00CtPzS7nRyrkmPmASvuc+V0v6NKav3JOSclQH4cl7IwoT6eSvnlUy6sHHjxjw3CaCYDkX2ij0WRFQqktIgDTxpiMrMLTLfvKQ/yH/2knMvU0RK3nzucQU6SWeRhsC0adPUmAa5Ai7pNTJ9qilp6ElDRK6q16tXT6VzyGwx8rhc9dRJo1Yaz5J2IVOaSgNHHpMZieQqoyww9txzz6lxCTIeQK6cSoNMGtRFbWyYkgaHzEokM8HI1Kt33XWXeh/SWyAzQsmsTPr0r0Ul07fKrEkym46Mf5CUEkndkCu20nCRGaMkECiMvF9p3EgjXI5PrtBKg+jIkSPqeZkFKfeVYRmzILMXyTHLrEs3UtTPRE8jkXQZ6c2QK/Ayo5Nc3f7vf/9rvAJf1M9I0rZkhiHJ1Zd6loBEggg532RbMo6gsHOhMFLnkqKjzzYlQaOk9eQ3HW9pSYqNjFGR9KAbjbOQOpbgQhqz8hnK8clrpQfjzz//VLN6yaxRN5pyNjc5vySFSa7Gy0xcUj8SwEidSS+cjJ3J3UOWHzl/JK1Jyvv4+KiZsaTHRCdX+bt06aLG1cgUyrJN6dWQngopW5Z/Y0r6nnbt2qWOWbYrU8nK3yGZklhmtpLARU8hk89KvuMym1l+M6bp9SBBSe5xRUSVnqVHjxNR5SCz4cisM9WrV9dcXV01Ly8v7eabb9Zee+01LTo6usBZocSFCxe0Bx54QAsICFCzMT3++OPaX3/9ZTZ7y6VLl7RBgwZpDRs2VNuWGWZuuukmbdasWcZZWfSZdrp37655e3ur18sMMbrk5GTtlVdeUTMwyTHKvpo1a6Y999xzavYZnbxu1KhRxXr/MutPly5d1CxHMhuO7Ffe04YNG4xlpH7k2IsyE5HM5DNjxgytefPmmru7u3q/8t6HDRumHT9+vEgz4Bw4cEDr1q2ber3U7eDBg7UvvvhC7evvv//OU17qTp4bPnx4kd5zUT8T/RhldieZqUnqvmbNmtrMmTPzbLOon1F2drbaT9OmTY3l2rdvr/300083PBf0WaG+/fbbfN/Xjh07tA4dOqj3JLP+yOfzySef5DsrVH51n9/5o89yNn369DyPyXlRVJs2bVLnlcw65eLios43ed+y3aSkpBseW36kXkeMGKG+uzLDmdRXx44dC6yfghw7dky9H7mtX7/e7Lm0tDR1Xsn5Iccss2nJZyx1azp7Vln8jSnue9K/f/pNvr9Sv3LuvPfee2b1Kt8bKVPY7FZHjhxRZXLPFEdkDxzkH0sHN0REVDFkgTKZsUdSrUwH8QpZcE5SbSSNxHTQbWlJr45cUdYXjiMiosqJqVBERJWUpPJICpKkAUkOvjTsZUYeGQdhGlRIOonMuiPlJc2qLIMKIiKyHwwsiIgqKRmXIWtMyNgMmWZTxkFI7rfkoJuS8Royw5KMXbjR7FpEREQFYSoUERERERGVGqebJSIiIiKiUmNgQUREREREpcbAgoiIiIiISo2DtyuYLPYkC+/I4jzFXdWWiIiIiKgiycoUV65cUbMM5l5cNTcGFhVMgorIyMiK3i0RERERUYmdOXMG1apVK7QMA4sKJj0V+ofj4+NT4RFnYmIifH192VvCeuP5ZqX4PWW98ZyzDfyust7s5XxLSkpSF8X1NmxhGFhUMP1kkKDCEoGF3GS/TMNivfF8s078nrLeeM7ZBn5XWW/2dr45FGG/HLxNRERERESlxsCCiIiIiIhKjYEFERERERGVGsdYEBERUbnLzs5GZmZmpalpyXfPyMhAWloaxy2y3mz6fHNxcYGTk1OZbIuBBREREZVrg+jixYtISEiolGtTXb582dKHYXNYb9ZXb35+fggNDS110MLAgoiIiMqNHlQEBwfD09Oz0lzdl4BJemHkSm9leU8VgfVmXfUm201JSUF0dLT6PSwsrFTbY2BBRERE5UIaQnpQERgYWKlqmQ1k1ltlOd88PDzUvQQX8l0tTVoUB28TERFRudDHVEhPBRFZL/07WtpxUAwsiIiIqFwxVYjIPr6jFg8szp07h8cff1x1kUq01KJFC+zatcus62fy5MkIDw9XXTWdO3fGwYMHzbaRnp6O0aNHIygoCF5eXujbty/Onj1rViY+Ph4DBgxQS6HLTX7OPZAsKioKffr0UduQbT377LNqBL6p/fv3o1OnTupYIiIiMHXqVHWMRERERET2zKKBhTT2b731VjXN1c8//4xDhw7h3XffVSPTde+88w5mzpyJDz/8EDt37lQj1u+8805cuXLFWGbs2LFYvnw5li5dii1btiA5ORm9e/dWuWi6Rx99FHv37sWaNWvUTX6W4EInZXv16oWrV6+qbci2vv/+e4wfP95YJikpSe1bghw5lg8++AAzZsxQx0dERERUEW6//XYsXryYlV1OV+5XrFhhc3W7cuVK3HzzzWrmKIvSLOjFF1/UOnbsWODzOTk5WmhoqPb2228bH0tLS9N8fX21+fPnq98TEhI0FxcXbenSpcYy586d0xwdHbU1a9ao3w8dOiRdCtr27duNZbZt26YeO3LkiPp99erV6jXyWt2SJUs0Nzc3LTExUf0+d+5ctW85Bt20adO08PBwdaxFIduS/erbrEhyjPHx8UU+VmK98XyrePyest4q0zmXmpqq/g+We1t04cIF7ZlnntFq1aqlubq6atWqVdN69+6tbdiwQdVXZmamVqNGDfX/utw8PDy0Jk2aGNso4vXXX9eaN2+eZ9tS5/KajRs3FuuYfvrpJ61evXpadna28bETJ05o/fr104KCgjRvb2/twQcf1C5evGj2uri4OO3xxx/XfHx81E1+lmPQff7558b3kft26dIlY7lly5ap9yPvtXr16to777yT5xg//PBDrWHDhpq7u7tWv3597YsvvjA+p9fbzJkz1XNSRup17NixZueJ1Fvu4wgJCcmzLzm/+vTpo95TlSpVtLZt22qnT5/WSkr2s3z5cq0sbNy4UW3PtJ5L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st54ztkGfldZb/ZwvvneoKdCx8HbxeDq6qqml12/fr3Z4/J7hw4divcJERERERFVIuyxKCZJaxowYABat26N9u3bY8GCBWqq2eHDh5fPJ0REREREZAMYWBTTQw89hMuXL2Pq1Km4cOECmjZtitWrV6NGjRqwdpKS9frrr+dJzSLWG88368HvKeuN55xt4HeV9cbzLS8HraLnPCUiIiIiokqHYyyIiIiIiKjUGFgQEREREVGpMbAgIiIiIqJSY2BBRERERESlxsCCiIiIiIhKjYEFERERERGVGgMLIiIiIiIqNQYWRERERERUagwsiIiIiIio1BhYEBERERFRqTGwICIiIiKiUmNgQUREREREpcbAgoiIiIiISo2BBRERERERlRoDCyIiIiIiKjUGFkREREREVGoMLIiIiIiIqNQYWBARERERUanZbWAxbdo0tGnTBt7e3ggODka/fv1w9OjRG75u06ZNaNWqFdzd3VG7dm3Mnz+/Qo6XiIiIiMia2W1gIQHCqFGjsH37dqxfvx5ZWVno3r07rl69WuBrTp48iZ49e+K2227Dnj178PLLL+PZZ5/F999/X6HHTkRERERkbRw0TdMsfRDWICYmRvVcSMBx++2351vmxRdfxI8//ojDhw8bHxs+fDj+/vtvbNu2rQKPloiIiIjIujhb+gCsRWJioroPCAgosIwED9KrYapHjx749NNPkZmZCRcXlzyvSU9PVzddTk4O4uLiEBgYCAcHhzJ9D0REREREZUn6IK5cuYLw8HA4Ohae7MTA4lqFjRs3Dh07dkTTpk0LrKyLFy8iJCTE7DH5XdKoYmNjERYWlu9YjilTppT80yQiIiIisrAzZ86gWrVqhZZhYAHgmWeewb59+7Bly5YbVmruXgY9k6yg3oeJEyeqoMW0Z6R69eo4ffo0fHx8UJGkt0QCoKCgoBtGnMR64/lmGfyest54ztkGfldZb/ZyviUlJaFGjRpqwqMbsfvAYvTo0WrcxObNm28YhYWGhqpeC1PR0dFwdnZWqU35cXNzU7fc/Pz8LBJYZGRkqH0zsGC98XyzTvyest54ztkGfldZb/Zyvjle219RUvjt9rK19DRIT8UPP/yAX3/9FbVq1brha9q3b69mkDK1bt06tG7dOt/xFURERERE9sJuAwuZavarr77C4sWLVdeO9ETILTU11SyN6YknnjCbAUpSmCS1SWaG+uyzz9TA7QkTJljoXRARERERWQe7DSzmzZunxjt07txZDbrWb8uWLTOWuXDhAqKiooy/S6/G6tWr8dtvv6FFixb4z3/+g/fffx/333+/hd4FEREREZF1sNsxFkVZvmPhwoV5HuvUqRN2795dTkdFRERERGSb7LbHgoiIiIiIyg4DCyIiIiIiKjUGFkREREREVGoMLIiIiIiIqNQYWBARERERUakxsCAiIiIiolJjYEFERERERKXGwIKIiIiIiEqNgQUREREREZUaAwsiIiIiIio1BhZERERERFRqDCyIiIiIiKjUGFgQEREREVGpMbAgIiIiIqJSc4aNeOqpp/J93NfXFw0aNMDjjz+OKlWqVPhxERERERGRDfVYxMfH53vbu3cvXnvtNRVc/Pvvv5Y+TCIiIiIiu2QzPRbLly8v8LnU1FQ88cQTeOmll/DNN99U6HEREREREZEN9VgUxsPDAy+++CK2b99u6UMhIiIiIrJLlSKwEAEBAUhISLD0YRARERER2aVKE1hs3boVderUsfRhEBERERHZJZsZY7Fv3758H09MTMTOnTvx1ltv4Y033qjw4yIiIiIiIhsKLFq0aAEHBwdompbnuapVq6oxFsOHD7fIsRERERER2TubCSxOnjxZ4DoWfn5+FX48RERERERkg4FFjRo11H16ejqysrLg5eVl6UMiIiIiIiJbG7wdGxuLXr16qdW1fXx80KFDBy6IR0RERERkJWwmsJg4cSJ27dqFKVOmYPr06SrQGDZsmKUPi4iIiIiIbCkVau3atfjss8/Qs2dP9bvcN23aFJmZmXBxcbH04RERERER2TWb6bE4f/48br75ZuPvDRs2hKurq3qciIiIiIgsy2YCC5lm1tnZvINFfs/JybHYMRERERERkQ0GFl27dkXLli2Nt5SUFPTp08fssaLavHmzem14eLhaH2PFihWFlv/tt99Uudy3I0eOlMG7IyIiIiKybTYzxuL111/P89g999xT4u1dvXoVzZs3x5NPPon777+/yK87evSompXKdHE+IiIiIiJ7Z9OBRWncfffd6lZcwcHBXJCPiIiIiMhWA4u0tDSsW7cOXbp0gbe3t9lzSUlJKlWpR48ecHNzK9fjkAHkciyNGzfGK6+8oo6nMLKgn9xMj1XI2JCKHh8i+5OUMo5LYb3xfLNe/J6y3njO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kZJcnZcuQFlxfdeuXUXOeS9KQ10/Fr2hX15X54vSiC+vBry8lxulpsh+GTwQERHZPpsJLG5k2LBhal0Jqrjc+7JI4yksYMjvuaKkz9xIcRvwJcl5L2pD3bShXxFX59mIJyIiovJSaQILmbpVGn9UOGms57coTUly78sqjaewgME0CChq+syNFLcBX54572zoExERUWVRaQILmaFJ1pqggsmUdTJd2NatW42L0pQ0974s03gKCxgKCgLYICciIiKyLjYTWPz444/5Pi6LdezcuVPN0JTfuAi6ThrssrCLzHTVqFGjUufel0caDwMGIiIiIttkM4FFQatie3t7o2HDhiqokMWm6MakvnIvrlKSBj2DACIiIiKyucCisq5AS0RERERUGXDJQyIiIiIisp/A4tdff0Xjxo2RlJSU7ziLJk2a4Pfff7fIsRERERER2TubCSxmz56NIUOGwMfHJ89zvr6+ah2LmTNnWuTYiIiIiIjsnc0EFn///XehC6J1795drYxMREREREQVz2YCi0uXLsHFxaXA552dndXaCkREREREVPFsJrCIiIjA/v37C3x+3759CAsLq9BjIiIiIiIiGwssevbsiddeew1paWl5nktNTcXrr7+O3r17W+TYiIiIiIjsnc2sY/HKK6/ghx9+QP369fHMM8+gQYMGcHBwUKs/z5kzB9nZ2Zg0aZKlD5OIiIiIyC7ZTGAREhKCrVu3YsSIEZg4cSI0TVOPS3DRo0cPzJ07V5UhIiIiIqKKZzOBhahRowZWr16N+Ph4nDhxQgUX9erVg7+/v6UPjYiIiIjIrtlUYKGTQKJNmzaWPgwiIiIiIrK1wdtERERERGS9GFgQEREREVGpMbAgIiIiIqJSY2BBRERERESlxsCCiIiIiIhKjYEFERERERGVGgMLIiIiIiIqNQYWRERERERUagwsiIiIiIio1BhYEBERERFRqTGwICIiIiKiUmNgQUREREREpWb3gcXcuXNRq1YtuLu7o1WrVvj9998LrKzffvsNDg4OeW5Hjhwp/SdBRERERGTD7DqwWLZsGcaOHYtJkyZhz549uO2223D33XcjKiqq0NcdPXoUFy5cMN7q1atXYcdMRERERGSN7DqwmDlzJgYPHoynn34ajRo1wuzZsxEZGYl58+YV+rrg4GCEhoYab05OThV2zERERERE1shuA4uMjAzs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",
"text/plain": [
"<Figure size 800x600 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, (ax_spec, ax_ratio) = plt.subplots(\n",
" 2, 1, figsize=(8, 6), sharex=True,\n",
" gridspec_kw={'height_ratios': [3, 1]}\n",
")\n",
"\n",
"edges = hist_cpu.axes[0].edges\n",
"cpu_vals = hist_cpu.values()\n",
"cuda_vals = hist_cuda.values()\n",
"\n",
"ax_spec.stairs(cpu_vals, edges, label=f'CPU ({n_clusters_cpu} clusters)')\n",
"ax_spec.stairs(cuda_vals, edges, label=f'CUDA ({n_clusters_cuda} clusters)', linestyle='--')\n",
"ax_spec.set_ylabel('Counts')\n",
"ax_spec.set_title('Cluster energy spectrum: CPU vs CUDA')\n",
"ax_spec.legend()\n",
"ax_spec.grid(alpha=0.2)\n",
"\n",
"with np.errstate(divide='ignore', invalid='ignore'):\n",
" ratio = np.where(cpu_vals > 0, cuda_vals / cpu_vals, np.nan)\n",
"\n",
"ax_ratio.stairs(ratio, edges, color='k')\n",
"ax_ratio.axhline(1.0, color='gray', linewidth=0.5)\n",
"ax_ratio.set_ylabel('CUDA / CPU')\n",
"ax_ratio.set_xlabel('Energy [ADU]')\n",
"ax_ratio.set_ylim(0.5, 2.0)\n",
"ax_ratio.grid(alpha=0.3)\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e33bdd78-8f0c-4690-9153-3f9eaffd4afa",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.11.15"
}
},
"nbformat": 4,
"nbformat_minor": 5
}