嗨,我試圖實現在開放CL距離向量程序..傳遞結構的數組的內核在開放CL
基本上我具有與通過結構的陣列到內核作爲問題參數..
我的結構定義是
typedef struct
{
int a[nodes][4];
}node;
node * srcA;
該分配存儲器後..我已經使用此代碼
捆綁成一個緩衝對象和我的內核參數設置這樣
err = clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *) &memobjs1);
現在我想這個數組結構(即由srcA表示指出)的傳進我已經這樣做了內核 ..
const char *ocl_test_programs[] = {\
"__kernel void disvec (__global node *x,__global int *p)"\
"{"\
"int i=1,r=1,n;"\
"r=p[1]; "\
"n=p[0];"\
//"for(i=1;i<=n;i++) "\
"{"\
"if(x[r].a[i][2]!=999 && x[r].a[i][2]!=0)"\
"{"\
"int j = get_global_id(0); "\
/* "int k=x[r].a[i][2] + x[i].a[j][2];"\
"if(x[r].a[j][2]>k)"\
"{ "\
" x[r].a[j][2] = k;"\
"x[r].a[j][3] = i; } "\ */
//" } "\
" } "\
" } "\
" } "
};
當我運行這個程序它說節點類型沒有定義...我必須記住一些其他參數傳遞?有什麼變化,我打破了.. ??如果有人可以至少給我一個簡單的代碼來說明結構傳遞到內核用一個簡單的例子,它將非常感激..非常感謝:)
不要這樣做。你不應該通過結構。改用普通數組。 –
@ SK-邏輯我試圖使用一個3d數組的結構,而不是它說棧對齊問題或類似的東西..因此,我無法做到這一點.. coud你建議一個替代的數據結構我反對使用存儲我已經在struct節點定義中定義了哪些節點? –
嘗試使用平面陣列,相應地重新計算索引。 –