gpt4 book ai didi

python - CUDA 不支持边界检查

转载 作者:行者123 更新时间:2023-12-04 00:01:55 25 4
gpt4 key购买 nike

我正在尝试使用 Numba 并访问 GPU 以加速代码,但我收到以下错误:

in jit raise NotImplementedError("bounds checking is not supported for CUDA")
NotImplementedError: bounds checking is not supported for CUDA

我看到有人提出了另一个问题,但没有完全指定或回答here .当我看到矢量化代码 (y = corr*x + np.sqrt(1.-corr**2)*z) 不起作用时,我实现了 2-for 循环(同样的错误) .我还尝试使用选项 boundscheck,但这并没有改变结果。未指定 target 时不会出现错误,因为它会自动在 CPU 上运行(我猜)。

import numpy as np
from numba import jit

N = int(1e8)
@jit(nopython=True, target='cuda', boundscheck=False)
def Brownian_motions(T, N, corr):
x = np.random.normal(0, 1, size=(T,N))
z = np.random.normal(0, 1, size=(T,N))
y = np.zeros(shape=(T,N))
for i in range(T):
for j in range(N):
y[i,j] = corr*x[i,j] + np.sqrt(1.-corr**2)*z[i,j]
return(x,y)

x, y = Brownian_motions(T = 500, N = N, corr = -0.45)

你能帮帮我吗? Python 是 3.7.6,Numba 是 0.48.0。

最佳答案

在我的例子中,我还替换了 @jit,它是使用 XLA 编译多个操作的装饰器。这是一个查看 CPU 和 GPU 性能的示例代码。

from numba import jit
import numpy as np
# to measure exec time
from timeit import default_timer as timer

# normal function to run on cpu
def func(a):
for i in range(10000000):
a[i]+= 1

# function optimized to run on gpu
@jit
#(target ="cuda")
def func2(a):
for i in range(10000000):
a[i]+= 1
if __name__=="__main__":
n = 10000000
a = np.ones(n, dtype = np.float64)
b = np.ones(n, dtype = np.float32)

start = timer()
func(a)
print("without GPU:", timer()-start)

start = timer()
func2(a)
print("with GPU:", timer()-start)

结果:没有 GPU:5.353004818000045使用 GPU:0.23115529000006063

关于python - CUDA 不支持边界检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60117150/

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