2017-05-25 79 views
2

我試圖設置新的__local浮點數,但當我將float的大小作爲參數傳遞時出現錯誤。在OpenCL中設置__local浮點數

此代碼給出錯誤:

int TILE_DIM = get_local_size(0)*get_local_size(1); //local size 
__local float buffer[TILE_DIM]; 

此代碼不:

int TILE_DIM = get_local_size(0)*get_local_size(1); //local size 
__local float buffer[512]; 

回答

2

本地內存必須始終內核運行之前進行分配。因此,沒有內核運行時長度的數組是可能的。但是,您可以將指針傳遞給(未初始化的)內存作爲內核的參數。這個長度可以在clSetKernelArg()調用中設置。 (查看鏈接文檔以獲取關於本地內存內核參數的詳細信息。)因此,每個入隊內核的可變長度,但不是每個工作組。

2

__local數組的大小可以傳遞給clBuildProgramoptions說法:"-DTILE_DIM=512"

例如: clBuildProgram(program, 1, &device.device_id, "-DTILE_DIM=512", NULL, NULL);

這樣,本地數組的大小可以在編譯內核的時間來決定。