gpt4 book ai didi

使用 numba prange 封装 for 循环的 Python 并行化。为什么不工作

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:59 47 4
gpt4 key购买 nike

在用 numba 并行化 3 个封装的 for 循环的实验中,我意识到幼稚的方法实际上并不能提高性能。以下代码产生以下时间(以秒为单位):

0.154625177383  # no numba
0.420143127441 # numba first time (lazy initialisation)
0.196285963058 # numba second time
0.200047016144 # nubma third time
0.199403047562 # nubma fourth time

知道我做错了什么吗?

import numpy as np
from numba import jit, prange
import time


def run_1():
dims = [100,100,100]
a = np.zeros(dims)
for x in range(100):
for y in range(100):
for z in range(100):
a[x,y,z] = 1
return a

@jit
def run_2():
dims = [100,100,100]
a = np.zeros(dims)
for x in prange(100):
for y in prange(100):
for z in prange(100):
a[x,y,z] = 1
return a


if __name__ == '__main__':
t = time.time()
run_1()
elapsed1 = time.time() - t
print elapsed1

t = time.time()
run_2()
elapsed2 = time.time() - t
print elapsed2

t = time.time()
run_2()
elapsed3 = time.time() - t
print elapsed3

t = time.time()
run_2()
elapsed3 = time.time() - t
print elapsed3

t = time.time()
run_2()
elapsed3 = time.time() - t
print elapsed3

最佳答案

我想知道这些循环中是否有任何需要 JIT 的代码:没有需要编译的重要 Python 代码,只有 C 代码上的薄包装器(是的,range 是C 代码)。 JIT 可能只会增加尝试分析和生成(不成功)更高效代码的开销。

如果你想要加速,请考虑 parallelization using scipy或者也许direct access to NumPy arrays from Cython .

关于使用 numba prange 封装 for 循环的 Python 并行化。为什么不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49239665/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com