|
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