【问题标题】:CUDA-Python: How to launch CUDA kernel in Python (Numba 0.25)?CUDA-Python:如何在 Python (Numba 0.25) 中启动 CUDA 内核?
【发布时间】:2016-04-08 06:33:55
【问题描述】:

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

主要问题是互联网上的许多示例,答案都与已弃用 NumbaPro库有关,因此很难遵循诸如未更新 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()

【问题讨论】:

  • 您发布的代码没有问题。我可以毫无错误地运行它。我可以想到两种可能性-(a)您的 numba 安装完全损坏,或者(b)您的 GPU 内存很少。您正在设备上分配三个 128Mb 向量,如果 GPU 没有太多内存,您可能会用完。尝试将 N 减少到更小的值,看看会发生什么
  • @talonmies,哇,它在 N=1000 万时工作,在 2000 万时失败。您能告诉我您是如何计算出 3 x 128 Mb 的吗?我有 GeForce 820M,它的内存是 2Gb,我相信
  • 32000000 * 4 = 128Mb。如果 GPU 运行显示器并且没有大量计算能力,您也可能会达到看门狗计时器的限制
  • @talonmies,谢谢,知道了。实际上,这段代码在 GPU 上的运行速度比在 CPU 上运行 target="cpu" VectorAdd 时慢:耗时 0.0160000324249 秒 GPU 上的 VectorAdd 耗时 0.695999860764 秒但我认为我安装了一些错误,因为“nvprof”表示“没有分析内核。 ",看来我根本不使用我的 GPU。
  • nvprof 问题并不意味着您的 GPU 没有被使用——它是。要使分析器工作,必须在程序退出之前调用特定的 CUDA API。这可能意味着内部 Numbapro 运行时不会在退出时调用该 API,因此分析器无法获取统计信息

标签: python cuda numba numba-pro


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-11-08
    • 2020-02-23
    • 2020-12-28
    • 1970-01-01
    • 2020-02-29
    • 2012-08-23
    • 2012-10-28
    • 2013-07-15
    • 2012-08-23
    相关资源
    最近更新 更多