Created
March 10, 2025 18:08
-
-
Save FrancescAlted/ac5713abf7bc8501d867a328e71ab826 to your computer and use it in GitHub Desktop.
Micro-benchmark for blosc2, using numpy functions, reductions and broadcasting
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "1211addf-7bc3-49e3-beb1-94b0a544429c", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "import numba as nb\n", | |
| "import blosc2 as b2\n", | |
| "from time import time" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "id": "bd325077-a550-4338-9973-74f9c0ba2ed3", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def compute_reduction_numpy(a, b, c):\n", | |
| " return np.sum(((a ** 3 + np.sin(a * 2)) < c) & (b > 0), axis=1)\n", | |
| "\n", | |
| "@nb.njit(parallel=True)\n", | |
| "def compute_reduction_numba(a, b, c):\n", | |
| " return np.sum(((a ** 3 + np.sin(a * 2)) < c) & (b > 0), axis=1)\n", | |
| "\n", | |
| "@b2.jit\n", | |
| "def compute_reduction_blosc2(a, b, c):\n", | |
| " return np.sum(((a ** 3 + np.sin(a * 2)) < c) & (b > 0), axis=1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "id": "fedba64d-48f1-4437-b8e6-760a4f23ba94", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "N = 1000, size=0.015 GB\n", | |
| "N = 2000, size=0.060 GB\n", | |
| "N = 3000, size=0.134 GB\n", | |
| "N = 4000, size=0.238 GB\n", | |
| "N = 5000, size=0.373 GB\n", | |
| "N = 6000, size=0.536 GB\n", | |
| "N = 7000, size=0.730 GB\n", | |
| "N = 8000, size=0.954 GB\n", | |
| "N = 9000, size=1.207 GB\n", | |
| "N = 10000, size=1.490 GB\n", | |
| "N = 11000, size=1.803 GB\n", | |
| "N = 12000, size=2.146 GB\n", | |
| "N = 13000, size=2.518 GB\n", | |
| "N = 14000, size=2.921 GB\n", | |
| "N = 15000, size=3.353 GB\n", | |
| "N = 16000, size=3.815 GB\n", | |
| "N = 17000, size=4.306 GB\n", | |
| "N = 18000, size=4.828 GB\n", | |
| "N = 19000, size=5.379 GB\n", | |
| "N = 20000, size=5.960 GB\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# Iterate over different sizes\n", | |
| "np_times = []\n", | |
| "nb_times = []\n", | |
| "b2_times = []\n", | |
| "size_list = range(1, 21)\n", | |
| "for i in size_list:\n", | |
| " N = 1000 * i\n", | |
| " print(f\"N = {N}, size={N * N * 2 * 8 / 2**30:.3f} GB\")\n", | |
| "\n", | |
| " a = np.linspace(0, 1, N * N, dtype=np.float64).reshape(N, N)\n", | |
| " b = np.linspace(1, 2, N * N, dtype=np.float64).reshape(N, N)\n", | |
| " c = np.linspace(0, 1, N, dtype=np.float64)\n", | |
| "\n", | |
| " #print(\"Using numpy:\", end=\" \")\n", | |
| " t0 = time()\n", | |
| " rnp = compute_reduction_numpy(a, b, c)\n", | |
| " t1 = time() - t0\n", | |
| " np_times.append(t1)\n", | |
| " #print(f\"{t1:.3f} s\")\n", | |
| "\n", | |
| " #print(\"Using numba:\", end=\" \")\n", | |
| " t0 = time()\n", | |
| " rnb = compute_reduction_numba(a, b, c)\n", | |
| " t1 = time() - t0\n", | |
| " nb_times.append(t1)\n", | |
| " #print(f\"{t1:.3f} s\")\n", | |
| "\n", | |
| " #print(\"Using blosc2:\", end=\" \")\n", | |
| " t0 = time()\n", | |
| " rb2 = compute_reduction_blosc2(a, b, c)\n", | |
| " t1 = time() - t0\n", | |
| " b2_times.append(t1)\n", | |
| " #print(f\"{t1:.3f} s\")\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "id": "d4a97626-1cba-4fe7-b769-3537bac2fa5a", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAuQVJREFUeJzs3Xd4VGX6xvF7MukhmUBIAwKETuhVEBWwgCAs2LsCig2wsK4u6i5iw3VdZdEVxQIiiq6LDQvCTykWIHSkKhBIgIRAQjppM+f3x5DAkBASSDJzku/nunLBnDnnzJN5Esid9z3vsRiGYQgAAAAAAFQ7L3cXAAAAAABAXUXoBgAAAACghhC6AQAAAACoIYRuAAAAAABqCKEbAAAAAIAaQugGAAAAAKCGELoBAAAAAKghhG4AAAAAAGoIoRsAAAAAgBpC6AYAuMXcuXNlsVhKP7y9vdWsWTONHTtWBw8erNbXKiws1H333afo6GhZrVZ17969Ws9fX/3000+64YYb1LRpU/n6+spms+nCCy/UrFmzlJub6+7yatygQYM0aNAgd5cBAPBw3u4uAABQv82ZM0cdOnTQ8ePHtXLlSk2fPl0rVqzQb7/9pqCgoGp5jVmzZumtt97Sa6+9pl69eqlBgwbVct76bOrUqXrmmWd04YUX6tlnn1Xr1q2Vl5enX3/9VU8//bR+//13vfrqq+4us0a98cYb7i4BAGAChG4AgFt17txZvXv3liQNHjxYdrtdzz77rL744gvdeuut53XuvLw8BQYGauvWrQoICNDEiROro2RJ0vHjxxUQEFBt5zOTTz/9VM8884zuuusuvf3227JYLKXPDRs2TI899phWrVrlxgprVsnXVVxcnLtLAQCYANPLAQAepV+/fpKk/fv3S5IMw9Abb7yh7t27KyAgQA0bNtR1112nvXv3uhw3aNAgde7cWStXrtSFF16owMBAjRs3ThaLRe+8846OHz9eOpV97ty5kqT8/HxNmTJFsbGx8vX1VdOmTTVhwgRlZGS4nLtly5YaMWKEPvvsM/Xo0UP+/v6aNm2ali9fLovFoo8++kiPP/64oqOj1aBBA40cOVKHDx9Wdna27rnnHjVu3FiNGzfW2LFjlZOT43Lu//znP7rkkksUERGhoKAgdenSRS+99JKKiorK/fzWrl2riy++WIGBgWrVqpVefPFFORwOl30zMjL05z//Wa1atZKfn58iIiI0fPhw7dy5s3SfwsJCPffcc+rQoYP8/PwUHh6usWPH6siRI2ft0TPPPKOGDRtq5syZLoG7RHBwsIYMGVL6uKrv89dff60ePXooICBAHTt21Ndffy3JeUlCx44dFRQUpL59+2rdunUux48ZM0YNGjTQtm3bdNlllykoKEjh4eGaOHGi8vLyzut9P/3rquS506eXz5o1S926dVODBg0UHBysDh066IknnnDZZ+vWrRo1apQaNmwof39/de/eXe+//77LPiVfWwsWLNCTTz6pJk2aKCQkRJdffrl27dp1hs4AADwRI90AAI+ye/duSVJ4eLgk6d5779XcuXP14IMP6h//+IfS09NLpzVv3rxZkZGRpccmJyfrtttu02OPPaYXXnhBXl5eevjhh/Xss89q2bJl+vHHHyVJrVu3lmEYGj16tH744QdNmTJFF198sbZs2aKpU6dq1apVWrVqlfz8/ErPvWHDBu3YsUNPPfWUYmNjFRQUVHrd8hNPPKHBgwdr7ty52rdvnx599FHdfPPN8vb2Vrdu3bRgwQJt3LhRTzzxhIKDgzVz5szS8+7Zs0e33HJLaSDdvHmznn/+ee3cuVPvvfeey3uTkpKiW2+9VX/+8581depUff7555oyZYqaNGmiO+64Q5KUnZ2tiy66SPv27dPjjz+uCy64QDk5OVq5cqWSk5PVoUMHORwOjRo1Sj/99JMee+wxXXjhhdq/f7+mTp2qQYMGad26dWccxU9OTtbWrVt14403KjAw8Kz9rOr7vHnzZk2ZMkVPPvmkbDabpk2bpmuuuUZTpkzRDz/8oBdeeEEWi0WPP/64RowYoYSEBJdai4qKNHz4cN17773661//ql9//VXPPfec9u/fr0WLFp3T+17e11V5Pv74Yz3wwAOaNGmSXn75ZXl5eWn37t3avn176T67du3ShRdeqIiICM2cOVNhYWGaP3++xowZo8OHD+uxxx5zOecTTzyhAQMG6J133lFWVpYef/xxjRw5Ujt27JDVaj3r+w8A8AAGAABuMGfOHEOSsXr1aqOoqMjIzs42vv76ayM8PNwIDg42UlJSjFWrVhmSjH/9618uxyYlJRkBAQHGY489Vrpt4MCBhiTjhx9+KPNad955pxEUFOSybfHixYYk46WXXnLZ/sknnxiSjNmzZ5dua9GihWG1Wo1du3a57Lts2TJDkjFy5EiX7Q8//LAhyXjwwQddto8ePdpo1KjRGd8Tu91uFBUVGfPmzTOsVquRnp5e5vNbs2aNyzFxcXHG0KFDSx8/88wzhiRj6dKlZ3ydBQsWGJKMhQsXumxfu3atIcl44403znjs6tWrDUnGX//61zPuc6qqvs8BAQHGgQMHSrdt2rTJkGRER0cbubm5pdu/+OILQ5Lx1VdflW678847DUnGv//9b5fXev755w1Jxs8//1xujZV538v7uho4cKAxcODA0scTJ040QkNDK3w/brrpJsPPz89ITEx02T5s2DAjMDDQyMjIMAzj5NfW8OHDXfb773//a0gyVq1aVeHrAAA8B9PLAQBu1a9fP/n4+Cg4OFgjRoxQVFSUvvvuO0VGRurrr7+WxWLRbbfdpuLi4tKPqKgodevWTcuXL3c5V8OGDXXppZdW6nVLRr3HjBnjsv36669XUFCQfvjhB5ftXbt2Vbt27co914gRI1wed+zYUZJ01VVXldmenp7uMsV848aN+tOf/qSwsDBZrVb5+PjojjvukN1u1++//+5yfFRUlPr27VumrpKp+JL03XffqV27drr88svP9Knr66+/VmhoqEaOHOnyvnbv3l1RUVFl3tfzUdX3uXv37mratGnp45L3ctCgQS4j6yXbT/3cS5y+FsAtt9wiSVq2bFnptqq875X9uurbt68yMjJ0880368svv9TRo0fL7PPjjz/qsssuU0xMjMv2MWPGKC8vr8y18H/6059cHnft2lVS+Z83AMAzMb0cAOBW8+bNU8eOHeXt7a3IyEhFR0eXPnf48GEZhuEyhfxUrVq1cnl86rFnk5aWJm9v79Jp7CUsFouioqKUlpZW6XM3atTI5bGvr2+F2/Pz89WgQQMlJibq4osvVvv27fXvf/9bLVu2lL+/v+Lj4zVhwgQdP37c5fiwsLAyr+3n5+ey35EjR9S8efMz1io539eMjIzSek5XXlgsUXLuhISECl+jRFXf53N5L0/l7e1d5n2KiooqrUVSld/3yn5d3X777SouLtbbb7+ta6+9Vg6HQ3369NFzzz2nK664orSG8s7XpEkTlxpLnP65lEzFP71GAIDnInQDANyqY8eOpauXn65x48ayWCz66aefXK77LXH6tvIW9TqTsLAwFRcX68iRIy6B0DAMpaSkqE+fPud87sr64osvlJubq88++0wtWrQo3b5p06ZzPmd4eLgOHDhQ4T6NGzdWWFiYFi9eXO7zwcHBZzw2OjpaXbp00ZIlS0pX8a5IVd/n81VcXKy0tDSXsJqSklJai1T1970qvR87dqzGjh2r3NxcrVy5UlOnTtWIESP0+++/q0WLFgoLC1NycnKZ4w4dOiTJ2RsAQN3C9HIAgMcaMWKEDMPQwYMH1bt37zIfXbp0OedzX3bZZZKk+fPnu2xfuHChcnNzS5+vSSVh7tRfHhiGobfffvuczzls2DD9/vvvpdO6yzNixAilpaXJbreX+762b9++wtf429/+pmPHjunBBx+UYRhlns/JydGSJUskued9/vDDD10ef/TRR5JUutJ4TbzvpwsKCtKwYcP05JNPqrCwUNu2bZPkfD9+/PHH0pBdYt68eQoMDCxdvR8AUHcw0g0A8FgDBgzQPffco7Fjx2rdunW65JJLFBQUpOTkZP3888/q0qWL7r///nM69xVXXKGhQ4fq8ccfV1ZWlgYMGFC6qnaPHj10++23V/NnU34Nvr6+uvnmm/XYY48pPz9fs2bN0rFjx875nA8//LA++eQTjRo1Sn/961/Vt29fHT9+XCtWrNCIESM0ePBg3XTTTfrwww81fPhwPfTQQ+rbt698fHx04MABLVu2TKNGjdLVV199xte4/vrr9be//U3PPvusdu7cqbvuukutW7dWXl6e1qxZo7feeks33nijhgwZUuvvs6+vr/71r38pJydHffr0KV29fNiwYbrooosk1cz7Lknjx49XQECABgwYoOjoaKWkpGj69Omy2WylI/pTp07V119/rcGDB+vvf/+7GjVqpA8//FDffPONXnrpJdlstvN+DwAAnoWRbgCAR3vrrbf0+uuva+XKlbrpppt01VVX6e9//7tyc3PLLCpWFRaLRV988YUmT56sOXPmaPjw4Xr55Zd1++2368cffyx3Ont169ChgxYuXKhjx47pmmuu0aRJk9S9e3eXW4pVVXBwsH7++Wfdddddmj17tq666iqNHz9eu3btKr1u2Gq16quvvtITTzyhzz77TFdffbVGjx6tF198Uf7+/pWaQfDMM89oxYoVio6O1pNPPqnLL79cN954o77//ntNnjxZzzzzjKTaf599fHz09ddfa+nSpRo1apRmzpyp8ePH69NPPy3dpybed0m6+OKL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Ow9Dhw4NGEQtWsOGDQsJ0MGvAeV3s2DBAhQXF2PEiBH417/+5dv2ww8/wGaz4eyzz273+xMREcUCQzcREVEXGTlyJG644YaoprSaPHlyyHzT/fv3R1lZGb755hscP34cdrs9qve94447cPjwYdx1113Ys2cP/vOf/2DhwoWYN2+e737uCy+8EK+88gq++OILfPfdd5g1axbUarXvGKtWrcLKlSvx3Xff4cCBA3jllVeQkpKC/Px89OvXDzqdDkuXLsWBAwfwzjvv4JFHHmnHb0bx29/+Fi+88AJeeOEF7Nu3DwsXLsTOnTt928vKyrBgwQKUlJSgvLwcH330Efbt2xdwX/cXX3yBgQMH+u75JiIiijeGbiIioi70yCOPhHTjDufGG2/Erl27AqbUuuqqqzBlyhRccMEFyMrKwpo1a6J6z969e+P999/H5s2bceaZZ+L222/HzTffjN///ve+MgsWLMCECRMwdepUXHrppbjiiisCgmt6ejqef/55jB8/HmeccQY+/fRTvPvuu+jRoweysrKwatUqvPHGGxg+fDgWL16Mv/71r+34rShmzJiBhx56CPfffz9GjRqF8vJyzJ0717fdaDRiz549uOqqqzB48GDceuutuPPOO3Hbbbf5yqxZswZz5sxp93sTERHFiiSi+eQnIiKiLnffffehrq4OK1asiHdVksJ3332Hiy66CPv27YPFYol3dYiIiACwpZuIiChhPfjgg8jPzz+p+7i7o4qKCrz88ssM3ERElFDY0k1EREREREQUI2zpJiIiIiIiIooRhm4iIiIiIiKiGGHoJiIiIiIiIooRhm4iIiIiIiKiGGHoJiIiIiIiIooRhm4iIiIiIiKiGGHoJiIiIiIiIooRhm4iIiIiIiKiGGHoJiIiIiIiIooRhm4iIiIiIiKiGPn/wncT3+HyRGAAAAAASUVORK5CYII=", | |
| "text/plain": [ | |
| "<Figure size 1000x600 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# Plot the results with log scale on y-axis\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "plt.figure(figsize=(10, 6))\n", | |
| "plt.plot(size_list, np_times, 'o-', label=\"numpy\")\n", | |
| "plt.plot(size_list, nb_times, 's-', label=\"numba\")\n", | |
| "plt.plot(size_list, b2_times, '^-', label=\"blosc2\")\n", | |
| "#plt.yscale('log') # Set y-axis to logarithmic scale\n", | |
| "plt.xlabel(\"N (thousands)\")\n", | |
| "plt.ylabel(\"Time (s)\")\n", | |
| "plt.title(\"Performance Comparison\")\n", | |
| "#plt.title(\"Performance Comparison (Log Scale)\")\n", | |
| "plt.grid(True, which=\"both\", ls=\"-\", alpha=0.2)\n", | |
| "plt.legend()\n", | |
| "plt.tight_layout()\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "1553280c-224c-4a27-9e86-402febb4e8b8", | |
| "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.13.1" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment