3

你能帮我理解如何用 Python 编写 CUDA 内核吗?AFAIK, numba.vectorize可以基于target在cuda, cpu, parallel(multi-cpus)上执行。但是target='cuda'需要设置 CUDA 内核。

主要问题是互联网上的许多示例和答案都与已弃用的 NumbaPro 库有关,因此很难遵循诸如未更新的 WIKI 之类的问题,尤其是如果您是新手。

我有:

  • 最新的 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()
4

1 回答 1

1

发布的代码是正确的,并且将在 Python 2 Numbapro/Accelerate 系统上运行而不会出错。

很可能用于运行代码的特定系统的容量不是很大,并且在使用 3200 万个元素向量时遇到了显示驱动程序看门狗或空闲内存错误。减小输入数据的大小使代码能够正确运行。

[此答案从评论中收集并添加为社区 wiki 条目,以将此问题从未回答列表中删除]

于 2016-04-09T09:12:50.873 回答