你能帮我理解如何用Python编写CUDA内核吗? AFAIK, numba.vectorize 可以基于 target 在cuda,cpu,parallel(multi-cpus)上执行 . 但是target = 'cuda'需要设置CUDA内核 .
主要问题是很多例子,互联网上的答案与 deprecated NumbaPro库有关,所以很难遵循 not-updated WIKIs,特别是如果你是新手 .
我有:
-
最新Anaconda(v2)
-
最新Numba(v0.25)
-
最新的CUDA工具包(v7)
这是我得到的错误:
numba.cuda.cudadrv.driver.CudaAPIError:1调用cuLaunchKernel导致CU DA_ERROR_INVALID_VALUE
import numpy as np
import time
from numba import vectorize, cuda
@vectorize(['float32(float32, float32)'], target='cuda')
def VectorAdd(a, b):
return a + b
def main():
N = 32000000
A = np.ones(N, dtype=np.float32)
B = np.ones(N, dtype=np.float32)
start = time.time()
C = VectorAdd(A, B)
vector_add_time = time.time() - start
print "C[:5] = " + str(C[:5])
print "C[-5:] = " + str(C[-5:])
print "VectorAdd took for % seconds" % vector_add_time
if __name__ == '__main__':
main()
1 回答
发布的代码是正确的,可以在Python 2 Numbapro / Accelerate系统上运行而不会出错 .
可能是用于运行代码的特定系统的容量不是很大,并且使用3200万个元素向量命中显示驱动程序看门狗或空闲内存错误 . 减小输入数据的大小允许代码正确运行 .
[这个答案汇总了评论,并作为社区维基条目添加,以便将这个问题从未答复的清单中删除]