LoginSignup
1
1

More than 1 year has passed since last update.

Numbaと並列処理のあれこれ

Posted at

モチベ

Pythonの高速化の手法として、multiprocessing等のモジュールを利用した並列処理とnumbaを利用したJITコンパイルによる高速化がある。
2つの高速化は競合する場合があるので、備忘録としてここにまとめる。

numbaと各並列処理手法の相性

  nojit jitfunction jitclass
MultiProcessing O X※1
MultiThreading X※2 O X※3

※1: マルチプロセスでjitclasオブジェクトを別プロセスに送ることができない。なぜなら、子プロセスに送るオブジェクトはpickleにして送るが、jitclassはpickleにできないため。子プロセスの中でjitclassのインスタンスを生成するなら問題ない。

※2: Python(Cpython)ではGlobal Interpreter Lock(GIL)によって、実行可能なスレッドが1つに制限される。そのため、マルチスレッドによる高速化は期待できない。ただ、IOバウンドなど特殊な条件では高速化できる場合もある(https://qiita.com/nyax/items/659b07cd755f2ced563f)

※3: 2022/3時点でjitclassではgilを解除をしてメソッドを実行することができない。しかし、オーバーロードでjit関数をメソッドとして入れるというゴリ押しならnogil=Trueの恩恵が得られるらしい。実装がわかりにくく、jit関数の中だけでしかオーバーロードが有効にならず使い勝手も悪い(https://numba.discourse.group/t/how-to-pass-jit-options-to-jitclasses/177/5)。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1