NumbaはPythonおよびNumPyのサブセットのソースコードを高速に実行する機械語に変換するJITコンパイラ。llvmliteにて、LLVMをバックエンドに使用し、CPU向けにコンパイルする。Anaconda, Inc.がスポンサーになっている。
かつてはNVIDIA CUDA向けもNumba内で開発されていたが、Numba 0.61より非推奨になり、Numba CUDAに分離され、NVIDIAが開発することになった。
実行時コンパイル
Pythonの関数に @jit のデコレーターを付けることで、実行時にJITコンパイルされる。
下記の例においては、Numba 0.27.0において、Pythonよりも200倍高速に動作し、NumPyの組み込みのsum()関数よりも30%高速に動作する。
Numba CUDA
Numba CUDAはNVIDIAが開発していて、通常はCUDAカーネルをC で記述するが、Numba CUDAはそれをPythonで記述できる。なお、CUDAカーネルをC で記述するので構わないが、CUDAをPythonで実行したい場合は、PyCUDAやCUDA Pythonなどがある。
Numba CUDAのCUDAカーネル内では、Pythonの記法で記載するが、メモリ確保が出来ないため、NumPyのほとんどの機能は使えない。Numba CUDAはCuPyと併用することが出来て、CUDAカーネル外になるが、CuPyではNumPyの機能が使える。以下、CuPyを併用したときのB = A A.Tのサンプルコード。
参照
関連項目
- JAX (ライブラリ)
外部リンク
- 公式ウェブサイト
- numba/numba: NumPy aware dynamic Python compiler using LLVM - GitHub