開發人員,使用動態共享內存分配時的正確內核調用
可能有人給我一個提示嗎? 我沒有找到任何有關如何在同一個內核中分配常量和動態共享內存的信息,或者可以更加珍貴地詢問: 如何調用內核,其中需要分配的共享內存量在編譯時部分已知時間?例如參考allocating shared memory,如何做動態分配變得非常明顯。 但是讓我們假設我有以下的內核:
__global__ void MyKernel(int Float4ArrSize, int FloatArrSize)
{
__shared__ float Arr1[256];
__shared__ char Arr2[256];
extern __shared_ float DynamArr[];
float4* DynamArr1 = (float4*) DynamArr;
float* DynamArr = (float*) &DynamArr1[Float4ArrSize];
// do something
}
內核調用:
int SharedMemorySize = Float4ArrSize + FloatArrSize;
SubstractKernel<<< numBlocks, threadsPerBlock, SharedMemorySize, stream>>>(Float4ArrSize, FloatArrSize)
實際上,我無法弄清楚編譯器是如何連接的大小共享內存只我想要動態分配的部分。或者參數「SharedMemeorySize」表示每塊的共享內存總量,所以我需要計算常量內存的大小(int SharedMemorySize = Float4ArrSize + FloatArrSize + 256 * sizeof(float)+ 256 * sizeof(char) )?
請賜教或只是指向一些代碼片段。 非常感謝。
歡呼聲格雷格
OP!它只需要一個'__shared__'變量。嘗試將所有內容組合到一個結構中。 – 2013-03-18 16:52:45
@SorooshBateni不,它不!內核調用中的參數隻影響動態分配的共享內存的大小,靜態分配的部分不會受到影響,並且很好。 – RoBiK 2013-03-18 17:15:29
是的我說動態分配單元(:D)只需要一個'__shared__'變量。 – 2013-03-18 17:16:32