OpenGL计算着色器中的快速傅里叶变换

时间:2016-04-11 20:36:36

标签: opengl glsl opencl fft compute-shader

我正在尝试在教育目的的OpenGL计算着色器中实现FFT(这就是我不想使用CUDA和OpenCL的原因),但我认为OpenCL中使用的并行编程的一些方法类似于OpenGL计算着色器。我在OpenCL中找到了几个FFT的代码示例:其中一个是Eric Bainville's article。它的示例源代码如下:

__kernel void fft_radix2(__global const float2 * x,__global float2 * y,int p)

{

  int i = get_global_id(0); // number of threads

  int t = get_global_size(0); // current thread

  int k = i & (p-1); // index in input sequence, in 0..P-1

  x += i; // input offset

  y += (i<<1) - k; // output offset

  float4 u = dft2( (float4)(x[0], mul_1(exp_alpha_1(-M_PI*(float)k/(float)p),x[t]) ));

  y[0] = u.lo;

  y[p] = u.hi;

}

此处输入x,并为FFT中的每一步输出y
之后,他说“必须为p = 1调用此内核,然后{ {1}}等等,直到p = 2。每次调用的线程数为p = N/2,工作组大小WG无关紧要,因为所有线程都是独立的。“这里N/2是输入的大小(应该是2的幂)。

所以,我的问题是关于参数N。如何在计算着色器中推送该参数,以便后者将被调用p,然后p = 1等,直到p = 2

0 个答案:

没有答案
相关问题