【问题标题】:Which is the suitable Memory for this OpenCL Kernel?哪个内存适合这个 OpenCL 内核?
【发布时间】:2014-03-25 19:06:38
【问题描述】:

我一直在尝试在 OpenCL 中进行 FFT。像这样的内核对我有用,

     __kernel void butterfly(__global float2* twid, __global float2* X,
                    const int n,}
     {

        /* Butterfly structure*/
     }

我数千次调用这个内核。因此,对全局内存的读/写需要花费太多时间。 twid(float2) 数组只是被读取,从不被操作,并且数组 X 是 READ & WRITE 类型的数组。

1.哪种内存最适合这个? 2. 如果我使用本地内存,是否可以将其作为参数传递给另一个内核而不将其复制到全局内存?

我是 OpenCL 的初学者。

【问题讨论】:

    标签: opencl pyopencl


    【解决方案1】:

    本地内存只能在工作组内使用;它不能被其他工作组看到,也不能被其他内核使用。只有全局内存和图像才能做那些事情。

    将本地内存视为用户管理的缓存,用于加速对工作组内同一全局内存的多次访问。

    【讨论】:

      【解决方案2】:

      如果你正在为小块做 FFT,你可能适合私人记忆。否则,正如 Dithermaster 所说,使用本地内存。

      另外,我已经实现了一些 FFT 内核,并强烈建议您避免使用蝶式方案,除非您 100% 确定它。由于矢量化和良好的内存访问模式,简单的方案(甚至矩阵乘法)可能会显示出更好的结果。蝴蝶方案针对顺序处理进行了优化。在 GPU 上它可能会表现出较差的性能。

      【讨论】:

      • 使用优化的蝶形,性能甚至超过 CUDAFFT!它的运行速度比标准的 OpenCL-PyFFT 快很多!
      • 私有内存和常量内存不一样吗?
      猜你喜欢
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2012-10-05
      • 1970-01-01
      相关资源
      最近更新 更多