有没有办法做这样的事情。
int length = 1000;
float *h_input = new float[length * 100];
size_t bytes = length * 100 * sizeof(float);
cl_mem m_input = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err);
cl_mem m_output = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err);
clEnqueueReadBuffer (queue, m_input, true, 0, bytes, h_input, 0, NULL, NULL);
for (int i = 0; i < 100; i++)
{
some_function(length, m_input + i, m_output + i);
}
我对此做了一些天真的测试,似乎没有用。这是我得到的错误。
invalid use of incomplete type 'struct _cl_mem'
除了将i作为额外参数传递之外,还有其他解决方法吗?引入额外参数需要将上游代码一直更改为内核..
编辑为了清晰起见,添加了更多信息。
m_input的偏移可以通过使用适当的偏移量 clEnqueueReadBuffer
来解决(即使它可能比执行单个调用更昂贵)。但是m_output稍后会重复使用,因此无法转移回主机。
编辑我的Google技能让我失望。
但是我通过查看cl.h找到了答案。 clCreateSubBuffer
就是答案。目前还没有答案。因此,我将使用 clCreateSubBuffer()
接受带有示例代码的第一个答案。
答案 0 :(得分:0)
我通过查看cl.h找到了答案。 clCreateSubBuffer
就是答案。目前还没有答案。因此,我将使用 clCreateSubBuffer()
接受带有示例代码的第一个答案。