【问题标题】:pycuda shared memory up to device hard limitpycuda 共享内存达到设备硬限制
【发布时间】:2020-07-29 03:26:03
【问题描述】:

这是此处讨论的延伸:pycuda shared memory error "pycuda._driver.LogicError: cuLaunchKernel failed: invalid value"

pycuda中有没有等价于下面C++ API调用的方法?

#define SHARED_SIZE 0x18000 // 96 kbyte
cudaFuncSetAttribute(func, cudaFuncAttributeMaxDynamicSharedMemorySize, SHARED_SIZE)

在最近的 GPU (Nvidia V100) 上工作,超过 48 KB 共享内存需要设置此函数属性。没有它,就会出现与上述主题相同的启动错误。设备上的“硬”限制是 96 KB 共享内存(为 L1 缓存留出 32 KB)。

有一个已弃用的方法Fuction.set_shared_size(bytes) 听起来很有希望,但我找不到它应该被替换的内容。

【问题讨论】:

    标签: pycuda


    【解决方案1】:

    PyCUDA 使用驱动 API,设置函数动态内存限制对应的函数调用为cuFuncSetAttribute

    我在当前 PyCUDA 树的任何地方都找不到它,因此怀疑它还没有实现。

    【讨论】:

      【解决方案2】:

      我不确定这是否是您正在寻找的东西,但这可能会帮助有人朝这个方向寻找。

      PyCUDA 中的动态共享内存大小可以使用以下任一方式设置:

      1. shared 直接内核调用中的参数(“未准备的调用”)。例如:
      myFunc(arg1, arg2, shared=numBytes, block=(1,1,1), grid=(1,1))
      
      1. shared_size 准备好的内核调用中的参数。例如:
      myFunc.prepared_call(grid, block, arg1, arg2, shared_size=numBytes)
      

      其中numBytes 是您希望在运行时分配的内存量(以字节为单位)。

      【讨论】:

        猜你喜欢
        • 2014-05-11
        • 2013-08-27
        • 2015-08-22
        • 2015-09-27
        • 2012-03-29
        • 1970-01-01
        • 2012-09-10
        • 2011-08-09
        • 1970-01-01
        相关资源
        最近更新 更多