mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2026-07-02 18:06:08 +02:00
Rework the multi-stream pipeline to eliminate per-frame sync barriers and fix the D2H staging architecture. Sync reduction: - Replace one cudaStreamSynchronize per frame with one per stream per batch, cutting synchronisation calls from O(n_frames x n_streams) to O(n_streams) - Introduce a unified per-frame D2H output layout [uint32_t count | clusters[max]] stored in a single class-level lazy-allocated pinned pool (h_output_pinned), replacing the per-stream separate cluster/count device buffers - Move CUDA event pool from per-stream fixed-size to per-frame-slot lazy-allocated, enabling correct kernel timing across any batch size Pinned H2D without CPU-side copy: - Add register_input_buffer(ptr, bytes) / unregister_input_buffer() wrapping cudaHostRegister so callers can pin their existing batch buffer once; all find_clusters_batched() slices then transfer at DMA speed (~22 GB/s) instead of ~15 GB/s for pageable, with no extra memcpy or WC-memory penalty Result (RTX 4090, 400x400 uint16, 3x3 clusters, batch=2000, 5 streams): Before: ~34 µs/frame -> After: ~28 µs/frame (−18 %)
548 lines
81 KiB
Plaintext
548 lines
81 KiB
Plaintext
{
|
||
"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: 20000\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 = 20000 #88999\n",
|
||
"cluster_size = (9, 9)\n",
|
||
"image_size = (f.rows, f.cols)\n",
|
||
"capacity = 50_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": "00e2f63a-5e64-4d3e-becf-5e2835c6d712",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Runs the destructor under the hood in case cf_cuda has already been constructed\n",
|
||
"# del cf_cuda\n",
|
||
"cf_cuda = None"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"id": "cbdcb805-708b-4205-bda9-2aa163d0e81f",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"N_STREAMS = 5\n",
|
||
"cf_cuda = ClusterFinderCUDA(image_size, \n",
|
||
" cluster_size, \n",
|
||
" n_sigma=7, \n",
|
||
" max_clusters_per_frame=2048,\n",
|
||
" n_streams=N_STREAMS) "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"id": "1546f405-1bf6-4073-ab35-8134be695a6c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Pedestal (1000 frames): 0.496s\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": 10,
|
||
"id": "4573be3d-5ba8-4e18-bab0-c874f2b7dcb2",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Reading 20000 frames: 1.195s (16742 FPS, 5109.275 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": 11,
|
||
"id": "fbb14fda-2852-4b73-ba2c-9952abac1d99",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"CPU clustering: 188.615s (106 FPS, 20325971 clusters, 1016.30/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": 12,
|
||
"id": "4f94cf35-5796-463d-bed8-f44a02d91fc6",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"BATCHED = True"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 45,
|
||
"id": "50848f8c-2e66-45b8-b6d5-ca80f368e6ba",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"if(BATCHED):\n",
|
||
" BATCH_SIZE = 5000\n",
|
||
"\n",
|
||
" # Before warmup, pin the entire data array once\n",
|
||
" cf_cuda.register_input_buffer(data)\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",
|
||
"\n",
|
||
" cf_cuda.unregister_input_buffer() # release when done with this dataset\n",
|
||
"\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",
|
||
" # Simpler: (non-batched) per-frame run on non-pinned data\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": 46,
|
||
"id": "502d0d3b-6b1e-4cc9-91df-9d998bd849b5",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"(9, 9)"
|
||
]
|
||
},
|
||
"execution_count": 46,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"cluster_size"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 47,
|
||
"id": "2e3e4b9c-7f23-4fb7-bc3e-fa3d766d51fc",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"CPU clustering: 188.615s (106 FPS, 20325971 clusters, 1016.30/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": 48,
|
||
"id": "4b8df93b-9a1b-41a5-9fed-9cda295fb523",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"CUDA clustering: 1.304s (15332 FPS, 20238568 clusters, 1011.93/frame)\n",
|
||
" Kernel only: 0.038 ms/frame\n",
|
||
" PCIe + overhead: 0.027 ms/frame\n",
|
||
"Speedup (CPU / CUDA): 144.60×\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": 49,
|
||
"id": "d3a850df-7df0-485b-971d-381cfdc6be81",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Cluster count diff: 87403 (0.43%)\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": 50,
|
||
"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": 51,
|
||
"id": "9adeea2f-9309-4c0a-905b-7d1203ba1f4e",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png":
|
||
"iVBORw0KGgoAAAANSUhEUgAAAxYAAAJOCAYAAAAqFJGJAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAtShJREFUeJzs3Qd4FNX6BvA3IY1ACITeRXpTlCIgCgqCCja8YgNREVQQRcSC2PCqWBCwoIgNL6ioF/GiIIIN5Q8IUkSkikgvAUJoIQlk/s971lk2m03Z7CbZ8v6eZ9lkdnZ29uxsmG/Od74TYVmWBRERERERER9E+vJkERERERERBRYiIiIiIuIX6rEQERERERGfKbAQERERERGfKbAQERERERGfKbAQERERERGfKbAQERERERGfKbAQERERERGfKbAQERERERGfKbAQEb9YvXo1brvtNtSrVw9xcXEoW7Yszj33XLz44os4ePCgc70uXbqYW1F54403MGXKlCLbvgSPUDwWfv75Z/Tp0wc1a9ZETEwMEhMT0bFjR7z55ps4duyYc70zzjgDERERzhu/j+eddx7+85//ZNse1+vVq5fH1/r111/NcwOlDQv6N8bb9/TUU09la6v4+HjUqlULPXr0wGuvvYYjR47kuk+ZmZmoVq2aed5///tfP79jkeCjwEJEfPb222+jdevWWLZsGR588EHMnTsXM2fOxHXXXYdJkyZhwIABxdbKoXgyKYUTasfCk08+iQsvvBA7d+7Ev//9b8yfPx/Tp09H165dzcnxY489lm39888/H4sXLzY3tgNPfvv372+CkGBTHH9juE22Fe/Hjh2LOnXq4KGHHkLz5s3x22+/eXzOV199hb1795qf3333XZ/3QSTYRZX0DohIcON/xHfffTcuueQSfPHFF4iNjXU+xmUPPPCA+Y86mFmWhRMnTqB06dIIBmlpaUGzr4GCV5554h0VFZj/LX722Wd4+umnzQk0T7K5r7bLLrvMnADzu+iqfPnyaN++vfP3bt26oW7duhg3bpz5zgaL4vobw8ClUqVKzt9vuOEG3HPPPejcuTOuvPJKbNy4Mdtr28EEe464zrx587Bjxw7T2yESrtRjISI+ee6558xJzuTJk3P8p0v8T5f/Kefmxx9/NM/nvau///47R8rCX3/9Zf6zr1GjhnmtqlWrmqu1q1atcqZA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w26rkrkXEREREfEnBRZhJPrwNjwQ9am5FxERERHxJwUWhfDGG2+gXr16iIuLQ+vWrfHzzz8jGJTKSMVFkb+ZexEREREJDlZEFFKteHMfyBRYeOmTTz7BsGHDMGrUKKxcuRIXXHABLrvsMmzbpl4AEREREfG/9IpNcXPmKHMfyBRYeGncuHEYMGAA7rjjDjRt2hQTJkxA7dq18eabbxbNJyQiIiIiEgQCuz8lwGRkZGD58uV45JFHsi3v3r07Fi1a5PE56enp5mZLTU113luWheJ05MhRxJzIMvf2fkj++DnZ7RUREaEmKyC1W+Go3dRuxU3HnNpNx1vgy9i6HC+fehEZW0sjNaFNsb724cOHzX1BzlsVWHhh//79OHXqFKpWrZptOX/fs2ePx+eMGTMGo0ePzrG8Tp06KDFPXV5yry0iIiIihTO6G0rKkSNHkJiYmOc6CiwKwf2qNSO43K5kjxw5EsOHD3f+npWVhYMHD6JixYrFfvWbESfTtrZv345y5coV62sHM7Wb2k3HW+DT91Rtp2MuOOi7GnztxvNcBhU1atTId10FFl6oVKkSSpUqlaN3Yt++fTl6MWyxsbHm5qp8+fIoSTwgFVio3XS8BTZ9T9VuOuaCg76rardwON4S8+mpsGnwthdiYmJMedn58+dnW87fO3bs6N0nJCIiIiISQtRj4SWmNfXr1w9t2rRBhw4dMHnyZFNq9q677iqaT0hEREREJAgosPDS9ddfjwMHDuDpp5/G7t270aJFC8yZMwd169ZFoGNK1pNPPpkjNUvUbjreAoe+p2o3HXPBQd9VtZuOt5wirOKueSoiIiIiIiFHYyxERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnCixERERERMRnYRtYjBkzBm3btkVCQgKqVKmCq6++Ghs2bMj3eQsWLEDr1q0RFxeHM888E5MmTSqW/RURERERCWRhG1gwQBgyZAiWLFmC+fPn4+TJk+jevTuOHTuW63O2bNmCyy+/HBdccAFWrlyJRx99FPfeey9m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w4cPNyf2vXr1yvbYl19+iWeeeQbjxo0r8PZ+/fXXbBWduG3q378/pkyZgt27d5vB4DYGEyNGjDDBRunSpc1+zJ49G5dffrlf3p+IiIiISDALmsBi0KBBZrZsVoVq0qQJGjdubHLN1q1bh40bN6JPnz5mnYLq0qWLGVmfGwYXrh566CFzExERERGRIB5jQUw/mj59Oho1amSCifXr15sA4+OPPzY3EREREREpGUHTY2FjzwRvIiIiIiISOIKqx0JERERERAKTAgsREREREfGZAgsREREREfGZAgsREREREQmfwKJGjRq4++678fXXX5s5JUREREREJHAETWDx0UcfIT4+Hvfeey8qVaqE6667DlOnTsXBgwdLetdERERERMJe0AQWnNDu5ZdfxqZNm7B48WKce+65mDhxIqpXr24eGz9+PDZv3lzSuykiIiIiEpaCJrBw1bx5c4wcORJLlizBtm3bcPPNN+P7779Hy5Yt0aJFC8yePbukd1FEREREJKwE3QR57qpWrYqBAwea2/Hjx/HNN98gNja2pHdLRERERCSsBH1g4YpjMK655pqS3g0RERERkbATlKlQIiIiIiISWBRYiIiIiIiIzxRYiIiIiIiIz0IisMjKysKXX36Jq6++uqR3RUREREQkLAV1YME5LVh2tlatWujTp09J746IiIiISNgKuqpQaWlp+PTTT/Huu++aeSxOnTplJse7/fbbUbZs2ZLePRERERGRsBQ0PRZLly7FoEGDUK1aNbz++uu49tprsX37dkRGRqJbt24KKkRERERESlDQ9Fh07NgRQ4cONQFG48aNS3p3REREREQkGAOLiy++2KQ/7du3D/369UOPHj0QERFR0rslIiIiIiLBlAo1b948/PHHH6a34u6770b16tVx3333mccUYIiIiIiIlKygCSyodu3aeOKJJ7BlyxZMnTrV9F5ERUXhqquuwqOPPooVK1aU9C6KiIiIiISloAosXF1yySX4+OOPsWvXLjP24uuvv0bbtm1LerdERERERMJS0AYWtgoVKpjAYuXKlVi2bFlJ746IiIiISFgKmsHb9gzbU6ZMweeff46///7bjK2oV68e/vWvf5kB3eeee25J76KIiIiISFgKmsDCsixceeWVmDNnDs4++2y0bNnSLFu3bh1uvfVWE2x88cUXJb2bIiIiIkFl27Zt2L9/v/m5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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": "f9b7c128-6d30-425c-87db-645ea8cda143",
|
||
"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
|
||
}
|