LoginSignup
14
12

More than 5 years have passed since last update.

Numba で並列処理ができることを知ったので.

Last updated at Posted at 2017-10-21

本日は

Numba のドキュメントをぼーっと眺めているとprangeというfor loop を並列することができるそうねということをしりました.

コード


import random
from numba import jit, prange
import time


@jit(nopython=True, parallel=True)
def calc_pi(NUM):
    counter = 0
    for i in prange(NUM):
        x = random.random()
        y = random.random()
        if x*x+y*y < 1.0:
            counter += 1
    pi = 4.0*counter/NUM
    return pi


def main():
    NUM = 1000000000
    start = time.time()
    pi = calc_pi(NUM)
    end = time.time()
    print("pi, {}, elapsed={}".format(pi, end-start))

if __name__ == '__main__':
    main()

jitデコレータの引数として parallel=True をいれることと,for i in range のような通常のループを for i in prange とすることで並列処理をしてくれます.parallel=Trueのキーワードを有効にするには Numba のバージョンを0.34以上にする必要があるみたいですね.

ちなみに手持ちのWindows環境で時間計測をすると2秒ほどで処理が終わりました.すごい!!!.Cythonで固めたOpenMPをつかうコードをするよりもパフォーマンスが良かったです.素晴らしい!

14
12
0

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
14
12