開発者、
誰かが私にヒントをくれませんか?同じカーネルに一定の動的共有メモリを割り当てる方法についての情報が見つかりませんでした。または、もっと貴重な質問をしましょう。割り当てる必要のある共有メモリの量がコンパイル時に部分的にわかっているカーネルを呼び出す方法は?たとえば、共有メモリの割り当てを参照すると、動的割り当ての方法が非常に明確になります。しかし、私が次のカーネルを持っていると仮定しましょう:
__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)) ?
私に教えてください、または単にいくつかのコードスニペットを指してください。よろしくお願いします。
乾杯