2012-11-27 134 views
2

我正在做一个家庭作业项目,比较CPU和GPU上的快速傅立叶变换的性能。我完成了CPU部分,但与GPU,我有一个问题。OpenCL中FFT 2D内核运行时= 0

麻烦的是内核运行时为零,输入与输出图像相同。我在win7上使用VS2010和AMD APP SDK。这里是主机codethe kernel,加法header处理image,他们可以在OpenCL的编程书籍中找到(良土山...)

我的猜测错误是在我们传递值相从图像像素到cl_float2 *xm(主机代码中的第169-174行)。我无法访问矢量组件来检查它,编译器不接受.sX.xy,会引发错误。其他部分 - 内核,头... - 在我看来很好。

for (i=0; i < n; i++) { 
    for (j=0; j < n; j++) { 
     ((float*)xm)[(2*n*j)+2*i+0] = (float)ipgm.buf[n*j+i]; //real 
     ((float*)xm)[(2*n*j)+2*i+1] = (float)0; //imag 
    } 
} 

所以,希望你们帮助我。任何想法将不胜感激。

+1

请将您的问题中的所有相关代码(当然不会超过)。如果你至少不能把你的代码格式化为可读性,那么因为阅读一大堆缩进代码并不是我们许多人喜欢的东西。 – Grizzly

+0

哦;对不起 。我使用Opera作为主要浏览器,似乎它不是保持代码的格式:( – Tiana987642

回答

3

OpenCL提供了很多不同的错误代码。
您已通过在每次通话中执行ret = clInstruction();来检索它们,但您没有分析它。

如果此值等于CL_SUCCESS,请检查每次通话。
它可能总会发生,内存不足,硬件已被使用或源代码中有一个简单的错误。返回值会告诉你。

另外:请检查您的cl_context,cl_programNULL值。

+0

感谢您的建议,我在它上面,似乎没有加载内核 我会尽力解决它然后再回来查看更多的细节,所以我会在以后投票给你:) – Tiana987642

+0

好吧,我在内核中发现了一个错字,为什么它不起作用。谢谢:D – Tiana987642

+0

我的荣幸! :)(PS:你的意思是在OpenCL代码中?当我做'clCreateProgramWithSource()'怪异时,这样的错误直接显示在我的shell中。) – Nippey