【问题标题】:kernel OpenCL not saving results?内核 OpenCL 不保存结果?
【发布时间】:2011-12-14 21:25:15
【问题描述】:

我在 OpenCL 中迈出了第一步,但我遇到了一个问题,我认为结果没有正确保存。我首先制作了一个简单的程序,它可以正常工作,给出正确的结果等。所以 main 运行正常,数组按照它们应该的方式填充等等。

程序的简要说明: 我有一个 4x4 点的网格(OP 数组),在一个 40x40 的字段中。有一架飞机在这片场地上空飞行,它的航线被分成 100 段(段数组)。 Coord 是一个 typedef 结构,目前只有双 x 和双 y 值。我知道有更简单的解决方案,但我以后必须使用它,所以我这样做。内核应该计算从点(OP)到段的距离。结果必须保存在数组 Distances 中。

内核的描述:它获取的是全局 id,从中计算它必须计算哪个 OP 和哪个段。使用该信息,它从这 2 中获取 x 和 y,并计算彼此之间的 x 和 y 距离。有了这些信息,它会根据距离和飞行高度求平方根。

问题是,距离表只显示零:P

kernel: http://pastebin.com/U9hTWvv2 有一个参数说 __global const Coord* Afstanden,这必须是 __global double* Afstanden

主要的 OpenCL 内容:http://pastebin.com/H3mPwuUH(因为我不能 100% 确定我这样做是对的)

我可以给你整个程序,但主要是荷兰语:P

我尽量解释清楚,如果有什么不清楚的地方,我会尽量澄清;)

由于我在第一个内核中犯了许多小错误,这里是他的继任者:http://pastebin.com/rs6T1nKs OpenCL 部分也进行了一些更新:http://pastebin.com/4NbUQ40L 因为它也有一个或两个错误。

在我看来,它现在应该可以工作了……但事实并非如此,问题仍然存在

【问题讨论】:

  • 我认为问题在于内核无法从 Coord 获取 x 和 y 值...但不确定,仍在寻找可以解决我的问题的人 :)跨度>

标签: opencl


【解决方案1】:

好吧,似乎“Afstanden”变量被声明为“const Coord*”。删除 constness - 即“仅限 Coord*” - 并确保当您使用 clCreateBuffer "CL_MEM_WRITE_ONLY" 或 "CL_MEM_READ_WRITE" 作为参数时。

“问题是,距离表只显示零:P” 您可能在 CPU 端用零初始化 Afstanden。我对么?这可以解释这种行为。

【讨论】:

  • 我确实已经删除了常量,因为我已经认为这会很奇怪。我贴的内核也有很多错误,所以我上传了第二个,我现在正在使用的那个。我还在我的主目录中发布了一个稍微修改过的 OpenCL 版本。回答你的第二段:但在内核的末尾,它应该有一些其他的值。但事实并非如此。它只是显示那些初始零。
猜你喜欢
  • 2015-07-06
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多