Files
aare/python/tests/ClusterFinderCUDA.ipynb
T
2026-05-06 11:30:59 +02:00

526 lines
78 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 = 1_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.515s\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: 4.574s (19458 FPS, 5938.097 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: 837.700s (106 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": 19,
"id": "4f94cf35-5796-463d-bed8-f44a02d91fc6",
"metadata": {},
"outputs": [],
"source": [
"BATCHED = True"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "50848f8c-2e66-45b8-b6d5-ca80f368e6ba",
"metadata": {},
"outputs": [],
"source": [
"if(BATCHED):\n",
" BATCH_SIZE = 5000\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": 21,
"id": "502d0d3b-6b1e-4cc9-91df-9d998bd849b5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(9, 9)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cluster_size"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "2e3e4b9c-7f23-4fb7-bc3e-fa3d766d51fc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU clustering: 837.700s (106 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": 23,
"id": "4b8df93b-9a1b-41a5-9fed-9cda295fb523",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CUDA clustering: 6.261s (14214 FPS, 88537254 clusters, 994.81/frame)\n",
" Kernel only: 0.040 ms/frame\n",
" PCIe + overhead: 0.030 ms/frame\n",
"Speedup (CPU / CUDA): 133.79×\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": 24,
"id": "d3a850df-7df0-485b-971d-381cfdc6be81",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cluster count diff: 2262602 (2.49%)\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": 25,
"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": 26,
"id": "9adeea2f-9309-4c0a-905b-7d1203ba1f4e",
"metadata": {},
"outputs": [
{
"data": {
"image/png":
"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6dWQngopW5V/Yyr6mXbt2qWOWbYrU8nK3yGZklhmtpLARU8hk9+VfMdlNjNrM6bp9SBBieW4IqJqz96jx4moepDZcGTWmbp162re3t5aQECAds0112gvv/yyFhcXV+ysUOLChQvafffdp4WFhanZmB599FHt999/N5u95dKlS9qQIUO05s2bq23LDDNt27bVZs+ebZyVRZ9pp1evXlpQUJB6v8wQo0tPT9defPFFNQOTHKPsq02bNtq//vUvNfuMTt43atSocn1+mfWne/fuapYjmQ1H9iufaf369cYyUj9y7GWZiUhm8nnrrbe0du3aab6+vurzymcfMWKEduzYsTLNgHPgwAGtZ8+e6v1St0OHDtU+//xzta8//vijSHmpO3ntqaeeKtNnLuvvRD9Gmd1JZmqSuq9fv742a9asItss6++ooKBA7ad169bGcp07d9Z++OGHUs8FfVao7777zurn2rFjh9alSxf1mWTWH/n9fPLJJ1ZnhbJW99bOH32WszfffLPIc3JelNWmTZvUeSWzTnl5eanzTT63bDc1NbXUY7NG6vXpp59W312Z4Uzq66abbiq2fopz9OhR9Xnktm7dOrPXsrOz1Xkl54ccs8ymJb9jqVvT2bOq4m9MeT+T/v3Tb/L9lfqVc+edd94xq1f53kiZkma3Onz4sCpjOVMckStwk3/sHdwQEZFtyAJlMmOPpFqZDuIVsuCcpNpIGonpoNvKkl4duaKsLxxHRETVE1OhiIiqKUnlkRQkSQOSHHxp2MuMPDIOwjSokHQSmXVHykuaVVUGFURE5DoYWBARVVMyLkPWmJCxGTLNpoyDkNxvyUE3JeM1ZIYlGbtQ2uxaRERExWEqFBERERERVRqnmyUiIiIiokpjYEFERERERJXGwIKIiIiIiCqNg7dtTBZ7koV3ZHGe8q5qS0RERERkS7IyRVpamppl0HJxVUsMLGxMgoo6derYerdERERERBV25swZ1K5du8QyDCxsTHoq9F9OcHCwzSPOlJQUhISEsLeE9cbzzUHxe8p64znnHPhdZb25yvmWmpqqLorrbdiSMLCwMf1kkKDCHoGF3GS/TMNivfF8c0z8nrLeeM45B35XWW+udr65lWG/HLxNRERERESVxsCCiIiIiIgqjYEFERERERFVGsdYEBER0VVXUFCAvLy8alPTku+em5uL7Oxsjltk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EBERERE5sHz/Wvg8/zZ178gYWLgQ34T9WOk9Rd0TERERkXPI94/Ed4Xd1L0jY2BBREREROTA3HNS0MntkLp3ZAwsiIiIiIgcmHfaabzk9aW6d2QMLIiIiIiIqNIYWBARERERUaUxsHAhOTWaYFjev9Q9EREREVFVYmDhQjRPX1zQItQ9ERERETkHzcMHp7Sa6t6RMbBwIV6ppzHR81t1T0RERETOISe0KUbljVf3joyBRQXMnTsXDRo0gK+vLzp06IBff/0VzsAjNwXd3f9Q90REREREVYmBRTktWbIE48ePx5QpU7Bnzx7cfPPN6NOnD06fZi8AEREREVU938sHscRrhrp3ZAwsymnWrFkYOnQonnzySbRo0QJz5sxBnTp1MG/evKvzGyIiIiIi16YVIsAtR907Mk97H4Azyc3Nxa5du/D888+bPd+rVy9s3brV6ntycnLUTZeSkmK81zQNtpSWlg7v7EJ1rx8HlU5+T3p9ubm5scrKiPVWMaw31put8ZxjvfF8c3xpdmzDpaamqvuytFsZWJRDQkICCgoKUKtWLbPn5fHFixetvmfmzJmYPn16kefr1q0Lu5l2h/32TURERERO14ZLS0tDSEhIiWUYWFSA5VVrieCKu5I9efJkTJgwwfi4sLAQiYmJCA8Pt/nVb4k4JW3rzJkzCA4Otum+nRnrjfXG883x8XvKuuM55xz4XXW+epN2rgQVMTExpZZlYFEOERER8PDwKNI7ERcXV6QXQ+fj46NupmrUqAF7khOSgQXrjeebY+P3lPXGc8458LvKenOF8y2klJ4KHQdvl4O3t7eaXnbdunVmz8vjLl26lO83RERERERUjbDHopwkrWnQoEHo2LEjOnfujI8++khNNfvUU09dnd8QEREREZETYGBRTg888AAuX76MGTNm4MKFC2jdujVWr16NevXqwdFJStbUqVOLpGYR643nm+Pg95T1xnPOOfC7ynrj+VaUm2brOU+JiIiIiKja4RgLIiIiIiKqNAYWRERERERUaQwsiIiIiIio0hhYEBERERFRpTGwICIiIiKiSmNgQURERERElcbAgoiIiIiIKo2BBRERERERVRoDCyIiIiIiqjQGFkREREREVGkMLIiIiIiIqNIYWBARERERUaUxsCAiIiIiokpjYEFERERERJXGwIKIiIiIiCqNgQUREREREVUaAwsiIiIiIqo0BhZERERERFRpLhtYzJw5E9dddx2CgoIQGRmJAQMG4MiRI6W+b9OmTejQoQN8fX3RsGFDzJ8/3ybHS0RERETkyFw2sJAAYdSoUdi+fTvWrVuH/Px89OrVCxkZGcW+58SJE7jjjjtw8803Y8+ePXjhhRcwduxYLF261KbHTkRERETkaNw0TdPsfRCOID4+XvVcSMBxyy23WC3z3HPP4fvvv8ehQ4eMzz311FP4448/sG3bNhseLRERERGRY/G09wE4ipSUFHUfFhZWbBkJHqRXw1Tv3r3x6aefIi8vD15eXkXek5OTo266wsJCJCYmIjw8HG5ublX6GYiIiIiIqpL0QaSlpSEmJgbu7iUnOzGw+KfCJkyYgJtuugmtW7cutrIuXryIWrVqmT0njyWNKiEhAdHR0VbHckyfPr3iv00iIiIiIjs7c+YMateuXWIZBhYARo8ejX379mHLli2lVqplL4OeSVZc78PkyZNV0GLaM1K3bl2cOnUKwcHBsCXpLZEAKCIiotSIk1hvPN/sg99T1hvPOefA7yrrzVXOt9TUVNSrV09NeFQalw8sxowZo8ZNbN68udQoLCoqSvVamIqLi4Onp6dKbbLGx8dH3SzVqFHDLoFFbm6u2jcDC9YbzzfHxO8p643nnHPgd5X15irnm/s/+ytLCr/LXraWngbpqVi2bBk2bNiABg0alPqezp07qxmkTK1duxYdO3a0Or6CiIiIiMhVuGxgIVPNfvnll/j6669V1470RMgtKyvLLI3pscceM5sBSlKYJLVJZob67LPP1MDtSZMm2elTEBERERE5BpcNLObNm6fGO3Tr1k0NutZvS5YsMZa5cOECTp8+bXwsvRqrV6/GL7/8gvbt2+Pf//433n33Xdx77712+hRERERERI7BZcdYlGX5joULFxZ5rmvXrti9e/dVOioiIiIiIufksj0WRERERERUdRhYEBERERFRpTGwICIiIiKiSmNgQURERERElcbAgoiIiIiIKo2BBRERERERVRoDCyIiIiIiqjQGFkREREREVGkMLIiIiIiIqNIYWBARERERUaUxsCAiIiIiokpjYEFERERERJXGwIKIiIiIiCqNgQUREREREVWaJ5zEE088YfX5kJAQNGvWDI8++igCAwNtflxEREREROREPRZJSUlWb3v37sXLL7+sgou///7b3odJ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RERERESuzmkCiz/++KPE6UV79eql1hkgIiIiIiLbc5rA4tKlS/Dy8ir2dU9PTzVTERERERER2Z7TBBaxsbHYv39/sa/v27cP0dHRNj0mIiIiIiJyssDijjvuwMsvv6xWQLaUlZWFqVOnom/fvnY5NiIiIiIiV+c0082++OKLapXnpk2bYvTo0WjWrBnc3NzUWgoffPABCgoKMGXKFHsfJhERERGRS3KawKJWrVpqxeinn34akydPhqZp6nkJLnr37o25c+eqMkREREREZHtOE1iIevXqYfXq1UhKSsLx48dVcNGkSROEhoba+9CIiIiIiFyaUwUWOgkkrrvuOnsfBhEREREROdvgbSIiIiIiclwMLIiIiIiIqNIYWBARERERUaUxsCAiIiIiokpjYEFERERERJXGwIKIiIiIiCqNgQUREREREVUaAwsiIiIiIqo0BhZERERERFRpDCyIiIiIiKjSGFgQEREREVGlMbAgIiIiIqJKc/nAYu7cuWjQoAF8fX3RoUMH/Prrr8VW1i+//AI3N7cit8OHD1f+N0FERERE5MRcOrBYsmQJxo8fjylTpmDPnj24+eab0adPH5w+fbrE9x05cgQXLlww3po0aWKzYyYiIiIickQuHVjMmjULQ4cOxZNPPokWLVpgzpw5qFOnDubNm1fi+yIjIxEVFWW8eXh42OyYiYiIiIgckcsGFrm5udi1axd69epl9rw83rp1a4nvveaaaxAdHY0ePXpg48aNV/lIiYiIiIgcnydcVEJCAgoKClCrVi2z5+XxxYsXrb5HgomPPvpIjcXIycnBokWLVHAhYy9uueUWq++RcnLTpaSkqPvk5GQUFhbCltLS0tQ+5V72T2UjdZaamgpvb2+4u7tsLF5urDfWG88358DvKuuN55vjS7NjG07aQELTtFLLumxgoZPB16ak0iyf0zVr1kzddJ07d8aZM2fw1ltvFRtYzJw5E9OnTy/yfL169WAv3bt3t9u+iYiIiMj52nAS1ISEhJRYxmUDi4iICDU2wrJ3Ii4urkgvRkluuOEGfPnll8W+PnnyZEyYMMH4WKLNxMREhIeHFxvAXM2IU8aQSDAUHBxs0307M9Yb643nm+Pj95R1x3POOfC76nz1JhfdJaiIiYkptazLBhaS1iIpTevWrcPdd99tfF4e33XXXWXejswmJSlSxfHx8VE3UzVq1IA9yQnJwIL1xvPNsfF7ynrjOecc+F1lvbnC+RZSSk8FXD2wENKTMGjQIHTs2FGlNcn4CZlq9qmnnjL2Npw7dw5ffPGFeiyzRtWvXx+tWrVSg7+lp2Lp0qXqRkRERETkylw6sHjggQdw+fJlzJgxQ61H0bp1a6xevdo4/kGeM13TQoKJSZMmqWDDz89PBRirVq3CHXfcYcdPQURERERkfy4dWIiRI0eqmzULFy40e/zss8+qm7OSlKypU6cWSc0i1hvPN8fB7ynrjeecc+B3lfXG860oN60sc0cRERERERGVgJPyExERERFRpTGwICIiIiKiSmNgQURERERElcbAwoXMnTsXDRo0gK+vr1rD49dff4WrmjZtmlqg0PQWFRVlfF2GHkkZWQxGZgDr1q0bDh48aLaNnJwcjBkzRi22GBAQgP79++Ps2bOoTjZv3ox+/fqpepA6WrFihdnrVVVPSUlJaupnmSdbbvJzcnIyqmu9DRkypMj5J4ttunq9zZw5E9dddx2CgoIQGRmJAQMG4MiRI2ZleM5VrN54zhU1b948tG3b1rgugEw7/+OPP/Jcq2S98Vwr+/dW/vaPHz++ev19k8HbVP0tXrxY8/Ly0j7++GPtzz//1MaNG6cFBARop06d0lzR1KlTtVatWmkXLlww3uLi4oyvv/7661pQUJC2dOlSbf/+/doDDzygRUdHa6mpqcYyTz31lBYbG6utW7dO2717t9a9e3etXbt2Wn5+vlZdrF69WpsyZYqqB/lzsXz5crPXq6qebr/9dq1169ba1q1b1U1+7tu3r1Zd623w4MHqM5uef5cvXzYr44r11rt3b23BggXagQMHtL1792p33nmnVrduXS09Pd1YhudcxeqN51xR33//vbZq1SrtyJEj6vbCCy+o/yelHnmuVbzeeK6VbseOHVr9+vW1tm3bqvZYdfr7xsDCRVx//fXqZDTVvHlz7fnnn9dcNbCQL6I1hYWFWlRUlPqC67Kzs7WQkBBt/vz56nFycrL6QyoBm+7cuXOau7u7tmbNGq06smwgV1U9SaAr296+fbuxzLZt29Rzhw8f1pxdcYHFXXfdVex7WG8GEuxL/W3atEk95jlXsXrjOVd2oaGh2ieffMJzrYL1xnOtdGlpaVqTJk1UYNC1a1djYFFd/r4xFcoFyMJ+u3btQq9evcyel8dbt26Fqzp27JjqbpT0sAcffBB///23ev7EiRO4ePGiWX3JfOVdu3Y11pfUZ15enlkZ2ZYssugqdVpV9bRt2zbVVdupUydjGUkLkueqc13+8ssvKm2ladOmGDZsGOLi4oyvsd4MUlJS1H1YWJi65zlXsXrjOVe6goICLF68GBkZGSq1h+daxeqN51rpRo0ahTvvvBM9e/Y0e766nHMuv0CeK0hISFBf/lq1apk9L4/lJHZF8oX74osvVKPu0qVLeOWVV9ClSxeVy6jXibX6OnXqlPpZynh7eyM0NNRl67Sq6knupYFtSZ6rrnXZp08f3H///ahXr576z+Sll17Crbfeqv7TkP9IWG+GXOMJEybgpptuUv9pCp5zFas3nnPF279/v2oQZ2dnIzAwEMuXL0fLli2NDTD+fStfvfFcK5kEYbt378bOnTuLvFZd/r4xsHAhMkjI8j8gy+dchTTsdG3atFF/IBs1aoTPP//cOIi2IvXlinVaFfVkrXx1rssHHnjA+LM0/jp27KiCjFWrVuGee+4p9n2uVG+jR4/Gvn37sGXLliKv8Zwrf73xnLOuWbNm2Lt3rxrYunTpUgwePBibNm3iuVbBepPggueadWfOnMG4ceOwdu1aNYlOcZz97xtToVyAzBzg4eFRJFKV1AvLyNhVycwKEmBIepQ+O1RJ9SVlJMVMZl4orkx1V1X1JGWk18hSfHy8y9RldHS0Cizk/BOuXm8y48n333+PjRs3onbt2sbnec5VrN6s4TlnIFd/GzdurIJ7maWnXbt2eOedd3iuVbDeeK4VT3qk5W+4zMrp6empbhKMvfvuu+pn/e+2s/+fysDCBcgfADmR161bZ/a8PJb0HzJM33bo0CH1n62MuZAvpml9yRdZ/gDo9SX16eXlZVbmwoULOHDggMvUaVXVk/QWSU74jh07jGV+++039Zyr1OXly5fV1Sw5/1y53uSKmlxxX7ZsGTZs2KDOMVM85ypWb9bwnCu+LuX/A55rFas3nmvF69Gjh0ohk54e/SaB2SOPPKJ+btiwYfX4P/WqDw8nh5pu9tNPP1UzBowfP15NN3vy5EnNFU2cOFH75ZdftL///lvNnCDTsMkUb3p9yKwMMhPDsmXL1JRvDz300P+3d++hOb9/HMffvtiaY0SYZZRTOS+U0jAZiTByaI5DLCuHiPEPCaGEHMtZEslZWMuK5Hya5lQOTY7JMVuO96/X1W93n3v3Nm434fZ81If78Lk/9+Xa557rfb+v6/0pseRbXFycLzs725V8S0pKirhys6peceXKFbfp18WyZcvc7aIyxT+rn1QaT2X3VLlCW6tWrf7qsqll9Zue0/mnEoD379/35eTk+Dp16uTKB/7r/Zaenu7OJ302vaV4CwoK/PtwzoXeb5xzJcvMzPSdPHnSfQ5zc3Nd2VRV18nKyuJc+8F+41wLjbcqVKT8fiOw+IesXr3aFx8f74uKivIlJCQElCL81xTVhlawFRsb60tJSfHl5eX5n1fZN5WkVem36OhoX2JiovuQexUWFvoyMjJ8NWvW9MXExLgPbX5+vi+SaNCrgXHxTeVSf2Y/6RoOqampLrjTptuvXr3yRWK/abCXnJzsq127tjv/dL0BPV68T/7Ffiupz7TpGg1FOOdC7zfOuZKlpaX5/0/U57F79+7+oIJz7cf6jXMtvMAiEn6/ldMfvz4vAgAAACCSscYCAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACEjcACAAAAQNgILAAAAACEjcACABDxunbtauXKlXPb1atXf3dzbPTo0f727N+//3c3BwB+CgILAECpg17v1qtXr7+6p8aPH29Pnjyxli1bBj2XnJxs5cuXt7Nnz5bZHxUrVrQ6depYjx49bNOmTfb169eAfUsLFKZMmeKCmyIrVqxwbQGASEJgAQAIoiBCA1/vtnPnzl/aUx8/fvylx69UqZLVrVvXKlSoEPB4fn6+nTlzxjIyMmzjxo1l9seDBw/s6NGj1q1bN5s8ebL16dPHPn/+HHJbqlev7toCAJGEwAIAECQ6OtoNfL1bjRo1Ar6Z37Bhgw0YMMAN2Js0aWIHDx4MOMaNGzesd+/eVqVKFfct/4gRI+zFixf+5/UNvgbz06ZNs1q1arksgOg4Ol5MTIwbwG/dutW93+vXr+39+/dWrVo127NnT8B7HTp0yCpXrmzv3r0L+ae5efNmFyCkp6fbrl273HuU1h/169e3hIQEmz17th04cMAFGVu2bOEMAgACCwDAj5o3b54NHjzYcnNzXQCRmppqL1++dM/p2/0uXbpY27Zt7eLFi3bs2DF79uyZ299LQYMyCKdPn7b169e7jMCgQYOsf//+bi3EhAkTbM6cOf79FTwMHTrUBQNeuq/XVa1aNaR/g8/nc68dPny4NW/e3Jo2bWq7d+/+rtcmJSVZmzZtbO/evSG9JwBEKjIWAIAghw8fdpkG7zZ//vygtQfDhg2zxo0b28KFC903/efPn3fPrV271n2zr8c1YG/Xrp1bk5CTk2N37tzxH0OvXbJkiTVr1sztt27dOnd76dKl7m8FEXofr3Hjxtnx48ft8ePH7r6yIGpvWlpayD/J7OxsKygosJ49e7r7CjBKmw5VErVZwRAAgMACAFACTUFSxsC7TZo0KWCf1q1bB2QSlC14/vy5u3/p0iUXRHgDEw3C5e7du/7XtW/fPuCYt2/ftg4dOgQ81rFjx6D7LVq0sG3btrn727dvtwYNGlhiYmLIP0sFEUOGDPGvu1CgdO7cOdeO7814aJoWAMAscAUbAAD/DxSUTSiLKiR5aYBdVCVJf/ft29cWL14c9Lp69eoFvM+3Bup6rDhlLVatWmWzZs1yU5nGjBkT8gBf07ZUwenTp08uw1Lky5cvLrtSUtuLu3nzpjVq1Mh/X8HVmzdvgvbT+hAt2AaASMZUKADAT6dpUHl5edawYUMXoHi34sGEl7IaFy5cCHhMazSK05QlVXNauXKle59Ro0aF3MYdO3ZYXFycXbt2LSAzs3z5crf241vVnk6cOGHXr1+3gQMHltl+BUbK4GhqFwBEMgILAECQDx8+2NOnTwM2b0Wnb9G0KWUENLVI6y7u3btnWVlZbh2EMgKl0WLtW7du2cyZM91aDC2kLqq65M1IqEJVSkqKzZgxw12DQgHCj0yD0oJvXdfCu6mNyjAcOXIkqD8ePXpkly9fdmtH+vXr56pJjRw50r/f9OnT3XGVTVH7FbSo8pWmfxWfSgYAkYbAAgAQRFWcNGXJu3Xu3Pm7eyo2NtZVelIQoYXRGrDrug+aDvTff6X/16NpRSolq0pLWsOhKUpFVaFU8tVr7Nix7toXP7JoWxkEDfq92QbvdCYFK95F3EX9oQyMrmmh9SPKlqjkrC6sV0RVrxQIKeOhtSI6joKKU6dOWXx8fMjtBIC/STlfSZNXAQD4QyxYsMBVi3r48GHQVCYFK6oOFRUVVeYxdM0Mlb7VNKc/ibIw+/btc+V1AeBvR8YCAPBHWbNmjVunoOlTqvik0rPeNRQqD6t1FYsWLXJTp74VVHiPq+pUWhfxu02cONG1BQAiCRkLAMAfZerUqe4K2FqjoTKyumJ3ZmamvyTs3LlzXRZD5WU1Fel7BuhaG1FYWOhu65jfG4z8KirL+/btW3dbU6zKWtAOAH8LAgsAAAAAYWMqFAAAAICwEVgAAAAACBuBBQAAAICwEVgAAAAACBuBBQAAAICwEVgAAAAACBuBBQAAAICwEVgAAAAACBuBBQAAAAAL1/8AM/+WcSBtTrgAAAAASUVORK5CYII=",
"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
}