0
有沒有辦法做到這一點。OpenCL中的內存偏移量
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()
接受示例代碼的第一個答案。
假設你正在編寫主機代碼,而不是內核,你需要映射內存,然後使用映射的指針。 'cl_mem'是一個句柄,而不是指向實際內存的指針。 – Flexo
@flexo,爲了清晰起見,添加了更多信息。你能詳細說明可以做些什麼嗎? – ashokk
這段代碼究竟在做什麼?你有輸入和輸出緩衝區和句柄和指針混合起來 - 現在沒有任何意義。 –