我有兩個功能:OpenCL內核參數歧義
void sum1(short * a, short * b, short * res, int size);
void sum2(float * a, float * b, float * res, int size);
,我有一個通用內核
__kernel void sum(__global const T * a, __global const T * b, __global T * res, int size)
{
int x = get_global_id(0);
if (x < size) res[x] = a[x] + b[x];
}
是它安全地從編譯選項上面介紹的功能調用這個通用內核-DT = short和-DT = float分別?我是否需要使用對齊方式,還是OpenCL自動將內核參數與本例中的內核參數對齊到2和4字節?
通常,當我將cl_mem對象傳遞給內核時OpenCL不知道存儲在此cl_mem對象中的數據類型,我可以理解OpenCL如何將cl_mem對象轉換爲內核arg中的適當指針。需要幫助
謝謝,但對齊是什麼?程序員是否需要調整內核參數?或者當我們需要使用對齊時存在這種情況嗎? – sandye51
只要不侵犯對像*(((char *)指針)+1)'這樣的元素的訪問權限,就不需要對齊任何數組或結構。但是,如果對齊,某些結構可能會更好。順便說一句,如果你只是使用單個元素的數組,就沒有任何對齊。 – DarkZeros