2011-07-18 33 views
5

我是OpenCL的新手。我曾與OpenCL內核一起使用過一維數據。但是當我試圖傳遞一個3-D指針時,它無法構建內核。具體來說,我得到CL_BUILD_PROGRAM_FAILURE。下面是內核,我試圖建立的僞代碼 -如何在OpenCL內核中使用3-D數組?

__kernel void 3D_Test(__global float ***array) 
{ 

x = get_global_id(0); 
y = get_global_id(1); 
z = get_global_id(2); 

array[x][y][z] = 10.0; 

} 

任何人都可以給我什麼是錯的代碼的想法?提前致謝!

+0

您應該檢查生成日誌,與clGetProgramBuildInfo得到它。 –

+0

您還可以看看OpenCL 1.1支持的Image3D類型,它可以讓您輕鬆存儲和傳遞3D數組。 –

回答

5

這是無效的OpenCL C(這就是爲什麼它不能編譯),對於3D數組,你將不得不使用該數組的linearlized版本,只需創建一個適當大小的常規數組(sizeX * sizeY * sizeZ )和索引這樣說:

int index = x + y * sizeX + z * sizeX * sizeY; 

另一種選擇是使用3D圖像與clCreateImage3D

+0

@ Matias ..感謝您的幫助。它的工作! – andromida

0

你必須首先要保證在某種程度上你的陣列足夠的空間,各級...

您的數組如何聲明或分配的?

+0

我會在回覆時編輯答案,所以它應該是一個«真正的»... :) – Macmade

+0

@Macmade ..我已經在主機代碼中分配了它們。但我想知道這是否是在內核中使用3-D數組的問題。因爲當我傳遞'* array'並使用'array [x] = 10'時相同的代碼,編譯沒有問題。語法有什麼問題嗎?我沒有發現在OpenCL中使用3-D數組。 – andromida

+0

具體來說,我得到'CL_BUILD_PROGRAM_FAILURE'錯誤:( – andromida