【发布时间】:2019-06-20 08:54:32
【问题描述】:
我是 opencL 的新手,这个问题可能看起来很傻。
我有一个内核,它采用两个结构 A 和 C。我想将结构 A 的内容复制到结构 C。
结构如下:
struct Block {
bool used;
int size;
intptr_t data[1];
};
__kernel void function(__global struct Block *A, __global struct Block *C) {
//Do something on A
//COPY A to C by memcpy alternative
}
有没有像 memcpy 这样的函数可以在内核中使用?我在零拷贝的集成 GPU 中使用 opencl。
或者我是否必须逐块复制到结构 C?。
【问题讨论】:
-
您确定要在内核中执行此操作吗?您可以通过
clEnqueueCopyBuffer()使用 GPU 的 DMA 引擎进行副本。 -
如果有充分的理由在内核中执行此操作,您可能还想尝试使用
async_work_group_copy()和/或async_work_group_strided_copy()通过global分两个阶段复制数据 ->local->global内存可能比逐个复制结构更有效。我不知道在内核中使用直接的global->globalmemcpy()类似函数。
标签: opencl