【发布时间】:2011-05-04 16:28:18
【问题描述】:
我在包含大量无符号字符的内核中工作,我使用 clCreateBuffer 创建内存对象。比我通过 clEnqueueWriteBuffer 复制一大块无符号字符到这个内存对象。然后我在循环中调用从这个内存对象读取的内核,执行一些逻辑并将新数据写入同一个地方(在这个循环中我不调用 clEnqueueWriteBuffer 或 clEnqueueReadBuffer)。这是内核代码:
__kernel void test(__global unsigned char *in, unsigned int offset) {
int grId = get_group_id(0);
unsigned char msg[1024];
offset *= grId;
// Copy from global to private memory
size_t i;
for (i = 0; i < 1024; i++)
msg[i] = in[ offset + i ];
// Make some computation here, not complicated logic
// Copy from private to global memory
for (i = 0; i < 1024; i++)
in[ offset + i ] = msg[i];
}
当循环完成时(循环运行 cca 1000 次)然后我通过 clEnqueueReadBuffer 从内存对象读取结果。
这段代码可以优化吗?
【问题讨论】:
-
您可以使用 clCreateBuffer 从数组中创建一个缓冲区,然后使用 clEnqueueMapBuffer 将其映射到您的原始内存中吗?
标签: c optimization opencl