我一直在尝试在OpenCL中进行FFT。它对我有用这样的内核,
__kernel void butterfly(__global float2* twid, __global float2* X,
const int n,}
{
/* Butterfly structure*/
}
我称这个内核为数千次。因此,读取/写入全局存储器需要花费太多时间。 twid(float2)数组只是读取,从不操作,数组X是READ& WRITE类型的数组。
1.哪种类型的记忆最合适? 2.如果我使用本地内存,我是否可以将其作为参数传递给另一个内核而不将其复制到全局内存?
我是OpenCL的初学者。
答案 0 :(得分:0)
本地内存仅在工作组中可用;它不能被其他工作组看到,也不能被其他内核使用。只有全局记忆和图像才能做到这些。
将本地内存视为用户管理的缓存,用于加速对工作组内同一全局内存的多次访问。
答案 1 :(得分:0)
如果您正在为小块进行FFT,则可能适合私有内存。否则,正如Dithermaster所说,使用本地内存。
此外,我已经实施了一些FFT内核并强烈建议您避免使用蝴蝶计划,除非您100%确定它。简单的方案(甚至矩阵乘法)可以显示更好的结果,因为矢量化&良好的内存访问模式。 Butterfly方案针对顺序处理进行了优化。在GPU上,它可能表现不佳。