是什麼宣稱本地內存之間的區別如下:OpenCL的本地內存聲明
__kernel void mmul(const int Ndim, const int Mdim, const int Pdim,
const __global int* A,
const __global int* B,
__global char* C,
__local int* restrict block_a,
__local int* restrict block_b)
,並宣佈本地內存的內核中
#define a_size 1024
#define b_size 1024 * 1024
__kernel void mmul(const int Ndim, const int Mdim, const int Pdim,
const __global int* A,
const __global int* B,
__global char* C) {
__local int block_a[a_size]
__local int block_b[b_size]
...
}
在這兩種情況下,所有的線程將更新某一個單元在共享的A和B陣列中
我知道在內核中不可能有「可變」長度的數組(因此第二個內核頂部的#define),b ut有沒有其他區別?關於何時釋放內存有沒有什麼區別?
在內核中定義本地內存意味着它將被分配給每個工作組。有本地內存作爲參數的手段,在分配內存之前的任何地方,也爲每個工作組它是相同的指針。不要考慮何時以及如何釋放內存。 OpenCL就像1.編譯2.調用內核與多少組和工作人員3.現在知道將使用多少內存。 – Aitch 2015-02-07 22:45:10
優化提示:「如果每個線程只是讀取和寫入本地內存的一個位置,爲什麼你甚至需要本地內存?」 – DarkZeros 2015-02-11 12:20:28