0

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

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

        /* Butterfly structure*/
     }

我把这个内核称为数千次。因此读/写到全局内存需要太多时间。twid(float2) 数组只是读取,从不操作,数组 X 是 READ & WRITE 类型的数组。

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

我是 OpenCL 的初学者。

4

2 回答 2

0

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

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

于 2014-03-25T05:46:50.430 回答
0

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

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

于 2014-03-25T08:03:59.677 回答