c - uint 结构数组上的 async_work_group_copy

标签 c arrays struct opencl

我希望能够将结构数组从全局内存复制到本地内存。这些结构具有以下类型:

typedef struct{
  uint boo;
  uint moo;
} boo_moo;

我有一个由名为 B 的 boo_moo* 指向的数组。我希望能够将全局内存中 B 的内容复制到本地内存中名为 B_loc 的同等大数组。

不幸的是,我的内核工作组大小不能很好地映射到此操作,因此我尝试使用 async_work_group_copy。问题是 async_work_group_copy 需要一个 gentype,而 boo_moo* 则不是。

有没有一种方法可以将 B 和 B_loc 转换为 gentype,以便 async_work_group_copy 工作而无需更改数组的初始声明或在全局内存中进行额外的复制?

理想情况下,我仍然希望能够像这样引用 B:

A[i] = B[i].moo;

我见过有一个叫做as_type的东西,但我还没有看到它在数组上使用。如果我可以告诉 async_work_group_copy 将 B 和 B_local 视为两个 uint2*,那就太棒了。

async_work_group_copy((uint2*)B_loc, (uint2*) B, num_elements, 0);

但是,当我在内核中执行此操作时,AMD 的 OpenCL 编译器会提示:

invalid type conversion

最佳答案

您缺少内存地址空间限定符。这是固定代码:

async_work_group_copy((__local uint2*)B_loc, (__global uint2*) B, num_elements, 0);

关于c - uint 结构数组上的 async_work_group_copy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33087271/

相关文章:

java - 如何在方法中输入数组作为参数?

struct - Apache 节俭 : Assign default values to enclosed struct

C 如何管理多个源文件之间的#include 关系并创建正确的 makefile

c - 将返回的 cstring 分配给变量

c - 使用 OpenMP 的一个线程串行执行比并行执行更快

arrays - 如何在 x86 程序集中正确索引数组

javascript - 打印数组 JAVASCRIPT/d3 中所有项目的值

c++ - 结构元素的枚举 C++

c - 如何修复此表达式不可分配的错误?

c - 带有 C 共享库的 ffi Node.js 中的 undefined symbol - libmodbus