【问题标题】:How to use shared memory between kernel call of CUDA?如何在 CUDA 的内核调用之间使用共享内存?
【发布时间】:2012-05-15 22:17:45
【问题描述】:

我想在一个内核的内核调用之间使用共享内存。 我可以在内核调用之间使用共享内存吗?

【问题讨论】:

    标签: cuda shared-memory gpgpu


    【解决方案1】:

    不,你不能。共享内存具有线程块生命周期。在一次__global__ 函数调用期间,属于一组的所有线程都可以访问存储在其中的变量。

    【讨论】:

    • 共享内存具有块作用域生命周期,而不是内核作用域。
    • @talonmies,谢谢!对不起,我的意思是一样的,但在术语上是错误的。我的意思是,没有办法在全局函数调用之间获取变量,而不是全局内存(当你不调用 cudaFree 时是实际的)。
    【解决方案2】:

    试试page-locked memory,但速度应该比显存慢很多。 cudaHostAlloc (void **ptr, size_t size, cudaHostAllocMapped); 然后将 ptr 发送到内核代码。

    【讨论】:

      【解决方案3】:

      以前您可以以非标准方式执行此操作,您将为每个共享内存块拥有唯一的 id,下一个内核将检查 id 并因此对该共享内存块执行所需的处理。这很难实现,因为您需要确保每个内核的完全占用并处理各种极端情况。此外,如果没有正式支持,您将无法依赖计算设备和 cuda 版本之间的兼容性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 2015-06-04
        • 2016-10-12
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 2022-01-06
        相关资源
        最近更新 更多