uint结构数组的async_work_group_copy

时间:2015-10-12 17:51:27

标签: c arrays struct opencl

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

String s1 = "FETCH /Students/Mark/School";
String endPart = s1.substring(s1.indexOf("/", 17));
System.out.println(s1.substring(0, 15) + endPart);

我有一个叫做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:

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

我见过有一种名为as_type的东西,但我还没有看到它在数组上使用过。如果我能告诉async_work_group_copy将B和B_local视为两个uint2 *,那将是非常棒的。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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