我希望能够将结构数组从全局内存复制到本地内存。这些结构的类型如下:
typedef struct{
uint boo;
uint moo;
} boo_moo;
我有一个名为B的boo_moo*指向的这些家伙数组,我希望能够将全局内存中B的内容复制到本地内存中称为B_loc的相当大的数组中。
不幸的是,我的内核的工作组大小不能很好地映射到这个操作,所以我尝试使用async_work_group_copy。问题是,async_work_group_copy需要一个温和的类型,而boo_moo*则不是。
是否有一种方法可以将B和B_loc转换为温和类型,这样async_work_group_copy就可以工作,而不必更改数组的初始声明或在全局内存中执行额外的复制?
理想情况下,我仍然希望能够像这样引用B:
A[i] = B[i].moo;
我已经看到了一种叫做as_type的东西,但是我还没有看到它在数组中使用过。如果我能告诉async_work_group_copy把B和B_local当作两个uint2 2*,那就太棒了。
async_work_group_copy((uint2*)B_loc, (uint2*) B, num_elements, 0);
但是,当我在内核中这样做时,AMD的OpenCL编译器会抱怨:
invalid type conversion
发布于 2015-10-12 12:02:40
您缺少内存地址空间限定符。这是固定代码:
async_work_group_copy((__local uint2*)B_loc, (__global uint2*) B, num_elements, 0);
https://stackoverflow.com/questions/33087271
复制