【问题标题】:memset local variable/memory in OpenCLOpenCL中的memset局部变量/内存
【发布时间】:2016-01-17 16:19:36
【问题描述】:

我正在将现有的 Reed-Solomon 解码代码移植到 OpenCL 我的内核中有一些本地数组,比如 uint myarray[256];在本地函数中。 而且我对它们有很多 memset 函数,但我没有使用它们。 我可以写一个循环来填充它们,但这可能效率低下。另外,也欢迎一些关于编写这样一个循环的建议,因为 OpenCL 似乎没有 memset。

但 OpenCL 抱怨缺少 memset 的方式似乎并没有完全丢失它

警告:隐式声明 C 库函数 'memset' 的类型 'void *(void *, int, unsigned long)'

并建议包含<string.h>,但找不到它

fatal error: <string.h> file not found.

【问题讨论】:

  • 请发布一个最小、完整且可验证的示例 (mcve)
  • 好吧,从 OpenCL SDK 中获取最简单的 OpenCL 示例并编写类似 uint myarray[256]; memset(myarray, 0, 100);例如,在内核源代码的开头。
  • 你的代码中有#include <string.h>吗?
  • 是的,我已经尝试过了,并写了它产生的错误(找不到文件)。 OpenCL 是否有标准标头,如何包含它们?嗯,我没有用这种方式搜索过这个......
  • 谢谢!然后我会坚持循环填充。这其实是答案=\

标签: c++ c opencl


【解决方案1】:

OpenCL 设备代码中没有可用的 memset(也没有任何其他 C 标准库),因此您需要手动循环(可能带有 #pragma unroll 提示)或者,如果数组实际上是local 在 OpenCL 意义上(即在工作组中的工作项之间共享)让每个工作项都清楚其中一个元素(效率更高)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 2012-01-29
    • 1970-01-01
    相关资源
    最近更新 更多