{ "cells": [ { "cell_type": "markdown", "id": "9b1ef299", "metadata": {}, "source": [ "# PixelHistogram — CPU vs CUDA\n", "\n", "Per-pixel histograms of a data file, filled by `PixelHistogram` on the CPU and\n", "by `PixelHistogramCUDA` on the GPU. Times both, then checks that the results are\n", "identical." ] }, { "cell_type": "code", "execution_count": 1, "id": "6c8b158f", "metadata": {}, "outputs": [], "source": [ "import sys; sys.path.append('/home/ferjao_k/aare/build')\n", "\n", "import time\n", "from pathlib import Path\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "from aare import File, PixelHistogram_u32, PixelHistogramCUDA" ] }, { "cell_type": "code", "execution_count": 2, "id": "518fd5c4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(100000, 400, 400) uint16 32.00 GB\n" ] } ], "source": [ "base = Path('/mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/')\n", "f = File(base / 'Cu_factor_10_data_master_0.json')\n", "frames = f.read_n(100_000) # (n_frames, rows, cols), uint16\n", "n_frames, rows, cols = frames.shape\n", "\n", "n_bins, xmin, xmax = 1000, 3500, 7500 # 4 ADU per bin\n", "n_threads = 16 # CPU threads\n", "print(frames.shape, frames.dtype, f'{frames.nbytes / 1e9:.2f} GB')" ] }, { "cell_type": "markdown", "id": "7c40949d", "metadata": {}, "source": [ "## CPU" ] }, { "cell_type": "code", "execution_count": 3, "id": "a418bbd4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU: 21.75 s, 4,598 frames/s\n" ] } ], "source": [ "cpu = PixelHistogram_u32(rows=rows, cols=cols, n_bins=n_bins, xmin=xmin, xmax=xmax,\n", " n_threads=n_threads)\n", "\n", "t0 = time.perf_counter()\n", "for frame in frames:\n", " cpu.fill_async(frame.astype(np.float64)) # the CPU binding takes float64\n", "values_cpu = cpu.values()\n", "t_cpu = time.perf_counter() - t0\n", "print(f'CPU: {t_cpu:.2f} s, {n_frames / t_cpu:,.0f} frames/s')" ] }, { "cell_type": "markdown", "id": "0b95f098", "metadata": {}, "source": [ "## GPU" ] }, { "cell_type": "code", "execution_count": 4, "id": "a60415d8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GPU fill: 1.512 s, 66,119 frames/s, 21.2 GB/s\n", "GPU values: 0.032 s\n", "GPU total: 1.545 s, speed-up 14.1x\n" ] } ], "source": [ "gpu = PixelHistogramCUDA(rows=rows, cols=cols, n_bins=n_bins, xmin=xmin, xmax=xmax,\n", " dtype=frames.dtype, storage_dtype=np.uint32, batch_size=128)\n", "gpu.register_input_buffer(frames) # pin once, before the timed loop\n", "values_gpu = np.empty((rows, cols, n_bins), dtype=np.uint32)\n", "gpu.register_output_buffer(values_gpu)\n", "\n", "t0 = time.perf_counter()\n", "gpu.fill_histogram(frames)\n", "gpu.flush() # fill_histogram only queues the work\n", "t1 = time.perf_counter()\n", "gpu.values(out=values_gpu) # transpose + copy back to the host\n", "t2 = time.perf_counter()\n", "\n", "t_gpu = t2 - t0\n", "print(f'GPU fill: {t1 - t0:.3f} s, {n_frames / (t1 - t0):,.0f} frames/s, '\n", " f'{frames.nbytes / (t1 - t0) / 1e9:.1f} GB/s')\n", "print(f'GPU values: {t2 - t1:.3f} s')\n", "print(f'GPU total: {t_gpu:.3f} s, speed-up {t_cpu / t_gpu:.1f}x')" ] }, { "cell_type": "markdown", "id": "43fff4d8", "metadata": {}, "source": [ "## Compare" ] }, { "cell_type": "code", "execution_count": 5, "id": "014cfc32", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "identical: True\n", "counts: 15997375206 15997375206\n" ] } ], "source": [ "print('identical:', np.array_equal(values_cpu, values_gpu))\n", "print('counts: ', values_cpu.sum(), values_gpu.sum())" ] }, { "cell_type": "code", "execution_count": 6, "id": "a0571bd1", "metadata": {}, "outputs": [ { "data": { "image/png": "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8lnI/ss+S8bCggULMGHChESp+NJyIEWBUju6ABERUVrIeVNuLssNeTlf79u3D9OmTVM33z3hOkaGy503bx46d+6sMgDk2kD28/bt22o/idxaWge+J6KMGTdunESgpn379pk6duxoypkzpylXrlym7t27m65cuWKzbZMmTdQkYmJi1OPChQubIiIibLabNm2aes1Vq1Zp6zZt2mRq3769KV++fCY/Pz/TY489ppb/97//adssWrRI/dzp06dT3O/GjRubnn32WZt1lp9PbpLnrd27d880ZMgQU5EiRUw6nc5UvXp10/Lly5P8fXv37jW1aNHClD17dlPu3LlNnTt3Np08eTLRdjVr1lSvl5JSpUolu5/yXEJr16411atXzxQQEKCO4WuvvZbo8xF6vV59piVLllTvqXz58qaPP/44yX0IDg42FShQwBQVFZXi/hIREaXVrVu3TH369DEVKlRInT8bNWpk2rJli831hJDzfsLzdGqvCZz5Ouaff/5R+/HEE0+YsmXLZgoMDDTVqVPHtHjxYv5nIrfnJf84+uYCkSeRsV6lRVruOKdUZd6ZSAq9pMrJuLPWfeocSVL1pVVc7vAPHDgQzkzS+iVL4ZVXXlHZDURERK7IVa9jiNwd+9gTUapI33JJNU9qGDtH2bx5s7rJIH3nnZ10N5AaA++++66jd4WIiIiI3AwDeyJKFSlCs3DhQlXoTsaSdQbt27fHmTNn0lwM0BHkmEmhIXtXJSYiIiIiYio+ERERERERkQtjiz0RERERERGRC2NgT0REREREROTCGNgTERERERERuTBfR++Aq5DCV5cuXUKuXLlUETEiIiJHkxFrZdhHKWrp7c179RnFcz0REbnquZ6BfSpJUF+iRAl7fT5ERER2c/78eRQvXpxHNIN4riciIlc91zOwTyVpqbcc0Ny5c9vn0yEiIsqAu3fvqpvOlnMUZQzP9URE5Krnegb2qWRJv5egnoE9ERE5E3YRs+9x5LmeiIhc7VzPDnlERERERERELoyBPREREXm0uXPnonLlyqhdu7ajd4WIiChdGNgTERGRRxs4cCCOHTuGPXv2OHpXiIiI0oV97ImIKMuGa4mJiYHRaOQRTyUfHx/4+vqyDz0RuS05JxgMBkfvBpHLn+sZ2BMRUabT6/WIiIjAgwcPeLTTKHv27ChatCh0Oh2PHRG5lfv37+PC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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = gpu.bin_centers()\n", "row, col = rows // 2, cols // 2\n", "\n", "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))\n", "ax1.step(x, values_cpu[row, col], where='mid', label='CPU')\n", "ax1.plot(x, values_gpu[row, col], 'rx', ms=5, label='GPU')\n", "ax1.set_xlim(x[values_cpu[row, col].argmax()] + np.array([-100, 100]))\n", "ax1.set(title=f'pixel ({row}, {col})', xlabel='ADU', ylabel='counts')\n", "ax1.legend()\n", "\n", "ax2.step(x, values_cpu.sum(axis=(0, 1)), where='mid', label='CPU')\n", "ax2.plot(x, values_gpu.sum(axis=(0, 1)), 'rx', ms=5, markevery=10, label='GPU (every 10th bin)')\n", "ax2.set_yscale('log')\n", "ax2.set(title='all pixels', xlabel='ADU', ylabel='counts')\n", "ax2.legend()\n", "plt.show()" ] } ], "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 }