創建線程的網格我寫了針對OpenCL內核,我初始化一個三維陣列中的所有元素 - >我* I * I + J *∫*∫。我現在在創建一個線程網格來執行元素初始化(併發)時遇到了問題。我知道我現在使用的代碼只使用3個線程,我該如何擴展?OpenCL中
請幫忙。我是OpenCL的新手,所以任何建議或解釋可能都很方便。謝謝!
這是代碼:
_kernel void initialize (
int X;
int Y;
int Z;
_global float*A) {
// Get global position in X direction
int dirX = get_global_id(0);
// Get global position in Y direction
int dirY = get_global_id(1);
// Get global position in Z direction
int dirZ = get_global_id(2);
int A[2000][100][4];
int i,j,k;
for (i=0;i<2000;i++)
{
for (j=0;j<100;j++)
{
for (k=0;k<4;k++)
{
A[dirX*X+i][dirY*Y+j][dirZ*Z+k] = i*i*i + j*j*j;
}
}
}
}
它看起來像這樣的代碼通過甲在作爲__global浮子*,然後redeclares它作爲一個int數組,這是固有的私人。那是故意的嗎? – boiler96
嗨,除了隱藏鍋爐96突出顯示的'A'變量,爲什麼你說你只使用3個線程?你的工作組大小有3個維度(X,Y和Z),所以我懷疑你在調用代碼中創建了多於3個線程(工作項目)。你想要什麼尺寸的最終輸出數組 - 2000x100x4或這些尺寸的倍數? –
@ boiler96我認爲這是我犯的一個錯誤,它應該是一個數組。你能幫助解決這個問題嗎? –