我在內核中使用大量無符號字符工作,我用clCreateBuffer創建了內存對象。比我通過clEnqueueWriteBuffer複製一塊無符號字符到這個內存對象。而且,我在循環中調用從這個內存對象讀取的內核,執行一些邏輯並將新數據寫入同一位置(在本週期中,我沒有調用clEnqueueWriteBuffer或clEnqueueReadBuffer)。下面是內核代碼:OpenCL內核的優化
__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將它映射到你的orivate內存中嗎? – 2011-05-03 21:33:53