有人可以向我解释为什么每次运行此代码时,我的计算机会冻结吗?
from numbapro import cuda
import numpy as np
from timeit import default_timer as time
n = 100
dtype = np.float32
@cuda.jit('void(float32[:,:], float32[:], float32[:])')
def cu_matrix_vector(A, b, c):
y, x = cuda.grid(2)
if x < n and y < n:
c[y] = 0.0
for i in range(n):
c[y] += A[y, i] * b[i]
A = np.array(np.random.random((n, n)), dtype=dtype)
B = np.array(np.random.random((n, 1)), dtype=dtype)
C = np.empty_like(B)
blockDim = 32, 8
gridDim = (n + blockDim[0] - 1)/blockDim[0], (n + blockDim[1] - 1)/blockDim[1]
print 'blockDim = (%d,%d)' %blockDim
s = time()
stream = cuda.stream()
with stream.auto_synchronize():
dA = cuda.to_device(A,stream)
dB = cuda.to_device(B,stream)
dC = cuda.to_device(C,stream)
cu_matrix_vector[(bpg, bpg), (tpb, tpb),stream](dA, dB, dC)
dC.to_host(stream)
e = time()
tcuda = e - s
print tcuda
点击代码后,我的电脑冻结了。我不知道为什么。我提前感谢所有的帮助。
答案 0 :(得分:2)
数组B不应该是2D数组:
B = np.array(np.random.random((n, 1)), dtype=dtype)
应该是1D:
B = np.array(np.random.random(n), dtype=dtype)
关于冻结,我假设你正在使用OSX。 CUDA驱动程序应该在内核启动错误时返回错误代码,但是在OSX上,显示管理器似乎会冻结。