|
38 | 38 | {
|
39 | 39 | "metadata": {
|
40 | 40 | "ExecuteTime": {
|
41 |
| - "end_time": "2025-10-07T10:20:23.571190Z", |
42 |
| - "start_time": "2025-10-07T10:20:23.567707Z" |
| 41 | + "end_time": "2025-10-07T10:32:18.289971Z", |
| 42 | + "start_time": "2025-10-07T10:32:18.284515Z" |
43 | 43 | }
|
44 | 44 | },
|
45 | 45 | "cell_type": "code",
|
46 | 46 | "source": [
|
47 | 47 | "import numba\n",
|
48 | 48 | "\n",
|
49 |
| - "@numba.jit(nopython=True)\n", |
50 |
| - "def fibonacci_numba(b):\n", |
| 49 | + "@numba.njit\n", |
| 50 | + "def fibonacci_numba_scalar(b):\n", |
51 | 51 | " b = b.copy()\n",
|
52 | 52 | " a = np.ones((), dtype=np.int32)\n",
|
53 | 53 | " for _ in range(N_STEPS):\n",
|
54 | 54 | " a[()], b[()] = a[()] + b[()], a[()]\n",
|
| 55 | + " return a\n", |
| 56 | + "\n", |
| 57 | + "@numba.njit\n", |
| 58 | + "def fibonacci_numba_array(b):\n", |
| 59 | + " a = np.ones((), dtype=np.int32)\n", |
| 60 | + " for _ in range(N_STEPS):\n", |
| 61 | + " a, b = np.asarray(a + b), a\n", |
55 | 62 | " return a"
|
56 | 63 | ],
|
57 | 64 | "id": "b1d657d366647ada",
|
58 | 65 | "outputs": [],
|
59 |
| - "execution_count": 2 |
| 66 | + "execution_count": 66 |
60 | 67 | },
|
61 | 68 | {
|
62 | 69 | "metadata": {
|
63 | 70 | "ExecuteTime": {
|
64 |
| - "end_time": "2025-10-07T10:20:26.947566Z", |
65 |
| - "start_time": "2025-10-07T10:20:23.615573Z" |
| 71 | + "end_time": "2025-10-07T10:32:19.607842Z", |
| 72 | + "start_time": "2025-10-07T10:32:19.423324Z" |
66 | 73 | }
|
67 | 74 | },
|
68 | 75 | "cell_type": "code",
|
69 | 76 | "source": [
|
70 | 77 | "b = np.ones((), dtype=np.int32)\n",
|
71 |
| - "assert fibonacci_pytensor(b) == fibonacci_numba(b)\n", |
72 |
| - "assert fibonacci_pytensor_numba(b) == fibonacci_numba(b)" |
| 78 | + "assert fibonacci_numba_array(b) == fibonacci_numba_scalar(b)" |
73 | 79 | ],
|
74 | 80 | "id": "7f45c87d259852e6",
|
75 | 81 | "outputs": [],
|
76 |
| - "execution_count": 3 |
| 82 | + "execution_count": 67 |
77 | 83 | },
|
78 | 84 | {
|
79 | 85 | "metadata": {
|
80 | 86 | "ExecuteTime": {
|
81 |
| - "end_time": "2025-10-07T10:20:28.819553Z", |
82 |
| - "start_time": "2025-10-07T10:20:27.015141Z" |
| 87 | + "end_time": "2025-10-07T10:32:22.705191Z", |
| 88 | + "start_time": "2025-10-07T10:32:20.090353Z" |
83 | 89 | }
|
84 | 90 | },
|
85 | 91 | "cell_type": "code",
|
86 |
| - "source": "%timeit fibonacci_pytensor(b)", |
87 |
| - "id": "90f27f42b275e9da", |
| 92 | + "source": "%timeit fibonacci_numba_scalar(b)", |
| 93 | + "id": "b01c8978960c6e3d", |
88 | 94 | "outputs": [
|
89 | 95 | {
|
90 | 96 | "name": "stdout",
|
91 | 97 | "output_type": "stream",
|
92 | 98 | "text": [
|
93 |
| - "2.22 ms ± 37.8 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" |
| 99 | + "3.21 μs ± 20.7 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n" |
94 | 100 | ]
|
95 | 101 | }
|
96 | 102 | ],
|
97 |
| - "execution_count": 4 |
| 103 | + "execution_count": 68 |
98 | 104 | },
|
99 | 105 | {
|
100 | 106 | "metadata": {
|
101 | 107 | "ExecuteTime": {
|
102 |
| - "end_time": "2025-10-07T10:20:42.302214Z", |
103 |
| - "start_time": "2025-10-07T10:20:28.871240Z" |
| 108 | + "end_time": "2025-10-07T10:32:25.876514Z", |
| 109 | + "start_time": "2025-10-07T10:32:23.122275Z" |
104 | 110 | }
|
105 | 111 | },
|
106 | 112 | "cell_type": "code",
|
107 |
| - "source": "%timeit fibonacci_pytensor_numba(b)", |
108 |
| - "id": "d918043168a39d59", |
| 113 | + "source": "%timeit fibonacci_numba_array(b)", |
| 114 | + "id": "bfc8794b219db03e", |
109 | 115 | "outputs": [
|
110 | 116 | {
|
111 | 117 | "name": "stdout",
|
112 | 118 | "output_type": "stream",
|
113 | 119 | "text": [
|
114 |
| - "165 μs ± 468 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" |
| 120 | + "32.8 μs ± 2.48 μs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" |
115 | 121 | ]
|
116 | 122 | }
|
117 | 123 | ],
|
118 |
| - "execution_count": 5 |
| 124 | + "execution_count": 69 |
| 125 | + }, |
| 126 | + { |
| 127 | + "metadata": {}, |
| 128 | + "cell_type": "code", |
| 129 | + "outputs": [], |
| 130 | + "execution_count": null, |
| 131 | + "source": [ |
| 132 | + "assert fibonacci_pytensor(b) == fibonacci_numba_scalar(b)\n", |
| 133 | + "assert fibonacci_pytensor_numba(b) == fibonacci_numba_scalar(b)" |
| 134 | + ], |
| 135 | + "id": "a2185c1de1297a11" |
119 | 136 | },
|
120 | 137 | {
|
121 | 138 | "metadata": {
|
122 | 139 | "ExecuteTime": {
|
123 |
| - "end_time": "2025-10-07T10:20:55.256172Z", |
124 |
| - "start_time": "2025-10-07T10:20:42.355007Z" |
| 140 | + "end_time": "2025-10-07T10:29:44.724064Z", |
| 141 | + "start_time": "2025-10-07T10:29:42.655693Z" |
125 | 142 | }
|
126 | 143 | },
|
127 | 144 | "cell_type": "code",
|
128 |
| - "source": "%timeit fibonacci_pytensor_numba.vm.jit_fn(b)", |
129 |
| - "id": "69ec1c01dad9fb66", |
130 | 145 | "outputs": [
|
131 | 146 | {
|
132 | 147 | "name": "stdout",
|
133 | 148 | "output_type": "stream",
|
134 | 149 | "text": [
|
135 |
| - "159 μs ± 1.41 μs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" |
| 150 | + "2.49 ms ± 327 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" |
136 | 151 | ]
|
137 | 152 | }
|
138 | 153 | ],
|
139 |
| - "execution_count": 6 |
| 154 | + "execution_count": 54, |
| 155 | + "source": "%timeit fibonacci_pytensor(b)", |
| 156 | + "id": "f1e8bb6a0c673c8f" |
140 | 157 | },
|
141 | 158 | {
|
142 | 159 | "metadata": {
|
143 | 160 | "ExecuteTime": {
|
144 |
| - "end_time": "2025-10-07T10:20:57.954364Z", |
145 |
| - "start_time": "2025-10-07T10:20:55.346865Z" |
| 161 | + "end_time": "2025-10-07T10:29:58.922566Z", |
| 162 | + "start_time": "2025-10-07T10:29:44.752331Z" |
146 | 163 | }
|
147 | 164 | },
|
148 | 165 | "cell_type": "code",
|
149 |
| - "source": "%timeit fibonacci_numba(b)", |
150 |
| - "id": "b01c8978960c6e3d", |
151 | 166 | "outputs": [
|
152 | 167 | {
|
153 | 168 | "name": "stdout",
|
154 | 169 | "output_type": "stream",
|
155 | 170 | "text": [
|
156 |
| - "3.2 μs ± 19.2 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n" |
| 171 | + "175 μs ± 6.13 μs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" |
157 | 172 | ]
|
158 | 173 | }
|
159 | 174 | ],
|
160 |
| - "execution_count": 7 |
| 175 | + "execution_count": 55, |
| 176 | + "source": "%timeit fibonacci_pytensor_numba(b)", |
| 177 | + "id": "17cd2859b4c6d3bd" |
| 178 | + }, |
| 179 | + { |
| 180 | + "metadata": { |
| 181 | + "ExecuteTime": { |
| 182 | + "end_time": "2025-10-07T10:30:11.832294Z", |
| 183 | + "start_time": "2025-10-07T10:29:59.016709Z" |
| 184 | + } |
| 185 | + }, |
| 186 | + "cell_type": "code", |
| 187 | + "outputs": [ |
| 188 | + { |
| 189 | + "name": "stdout", |
| 190 | + "output_type": "stream", |
| 191 | + "text": [ |
| 192 | + "158 μs ± 706 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" |
| 193 | + ] |
| 194 | + } |
| 195 | + ], |
| 196 | + "execution_count": 56, |
| 197 | + "source": "%timeit fibonacci_pytensor_numba.vm.jit_fn(b)", |
| 198 | + "id": "6deb056f63953a42" |
161 | 199 | },
|
162 | 200 | {
|
163 | 201 | "metadata": {
|
|
362 | 400 | {
|
363 | 401 | "metadata": {
|
364 | 402 | "ExecuteTime": {
|
365 |
| - "end_time": "2025-10-07T10:20:58.266498Z", |
366 |
| - "start_time": "2025-10-07T10:20:58.254087Z" |
| 403 | + "end_time": "2025-10-07T10:30:25.495418Z", |
| 404 | + "start_time": "2025-10-07T10:30:25.481386Z" |
367 | 405 | }
|
368 | 406 | },
|
369 | 407 | "cell_type": "code",
|
|
458 | 496 | ],
|
459 | 497 | "id": "bcefae049d4d2540",
|
460 | 498 | "outputs": [],
|
461 |
| - "execution_count": 13 |
| 499 | + "execution_count": 59 |
462 | 500 | },
|
463 | 501 | {
|
464 | 502 | "metadata": {
|
465 | 503 | "ExecuteTime": {
|
466 |
| - "end_time": "2025-10-07T10:21:01.526942Z", |
467 |
| - "start_time": "2025-10-07T10:20:58.310079Z" |
| 504 | + "end_time": "2025-10-07T10:30:31.559493Z", |
| 505 | + "start_time": "2025-10-07T10:30:30.263832Z" |
468 | 506 | }
|
469 | 507 | },
|
470 | 508 | "cell_type": "code",
|
471 | 509 | "source": [
|
472 | 510 | "b = np.ones((), dtype=np.int32)\n",
|
473 |
| - "assert comparable_fibonacci_numba(b) == fibonacci_numba(b)" |
| 511 | + "assert comparable_fibonacci_numba(b) == fibonacci_numba_scalar(b)" |
474 | 512 | ],
|
475 | 513 | "id": "65887ebba21f46c3",
|
476 | 514 | "outputs": [],
|
477 |
| - "execution_count": 14 |
| 515 | + "execution_count": 60 |
478 | 516 | },
|
479 | 517 | {
|
480 | 518 | "metadata": {
|
481 | 519 | "ExecuteTime": {
|
482 |
| - "end_time": "2025-10-07T10:21:06.041171Z", |
483 |
| - "start_time": "2025-10-07T10:21:01.578757Z" |
| 520 | + "end_time": "2025-10-07T10:30:35.999409Z", |
| 521 | + "start_time": "2025-10-07T10:30:31.567997Z" |
484 | 522 | }
|
485 | 523 | },
|
486 | 524 | "cell_type": "code",
|
|
491 | 529 | "name": "stdout",
|
492 | 530 | "output_type": "stream",
|
493 | 531 | "text": [
|
494 |
| - "55 μs ± 756 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" |
| 532 | + "54.6 μs ± 1.28 μs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" |
495 | 533 | ]
|
496 | 534 | }
|
497 | 535 | ],
|
498 |
| - "execution_count": 15 |
| 536 | + "execution_count": 61 |
499 | 537 | },
|
500 | 538 | {
|
501 | 539 | "metadata": {
|
|
0 commit comments