【问题标题】:FFT 2D kernel runtime =0 in OpenCLFFT 2D 内核运行时 = OpenCL 中的 0
【发布时间】:2013-07-03 14:54:18
【问题描述】:

我正在做一个家庭作业项目,比较快速傅立叶变换在 CPU 和 GPU 上的性能。我已经完成了 CPU 部分,但是使用 GPU,我遇到了问题。

问题是内核运行时间为零,输入与输出图像相同。我在带有 AMD APP SDK 的 win7 上使用 VS2010。这里是主机 codethe kernel ,另外还有一个 header 来处理 image ,它们可以在 The OpenCL Programming Book (Ryoji Tsuchiyama …)

我猜错误是在我们将值从图像像素传递到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
    }   
}   

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

【问题讨论】:

  • 请在您的问题中输入所有相关代码(当然不能更多)。如果您不能对此感到困惑,至少将您的代码格式化为有点可读性,因为阅读大量缩进严重的代码并不是我们许多人喜欢的事情。
  • 哦;对不起 。我使用 Opera 作为主浏览器,似乎它没有保持代码的格式:(

标签: c++ vector opencl gpgpu


【解决方案1】:

OpenCL 提供了很多不同的错误代码。
您已经在每次调用时通过 ret = clInstruction(); 检索它们,但您没有对其进行分析。

请检查每次调用是否该值等于CL_SUCCESS
内存不足、硬件已在使用中或源代码中存在简单错误可能总是会发生。返回值会告诉你。

另外:请检查您的 cl_contextcl_program 等以获取 NULL 值。

【讨论】:

  • 感谢您的建议;我在上面。似乎无法加载内核。我会尝试自己解决,稍后再回来了解更多细节。所以我稍后会投票给你:)
  • 好吧;我在内核中发现了一个错字,这就是为什么它不起作用。谢谢:D
  • 我的荣幸! :) (PS:你的意思是在 OpenCL 代码中?当我执行 clCreateProgramWithSource()... 时,这样的错误会直接显示在我的 shell 中。)
  • 是的,在 OpenCL 代码中。我通过clGetProgramBuildInfo() 获取日志。
  • 啊,好的。我只有使用英特尔 SDK 的经验,而另一个我在这里无法命名;)两者都将错误直接打印到控制台中,因此我不必在这里调用任何 clGetProgramBuildInfo。很高兴知道。
猜你喜欢
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多