matlabからCUDAカーネルを呼び出しています。
以前、(David Kirkの本)スレッドごとに16kbの共有メモリしか使用できないと言われましたが、それよりはるかに多くを消費することができます。
__global__ void plain(float* arg)
{
__shared__ float array[12000];
int k;
for (k=1;k<12000; k++)
{
array[k]=1;
}
}
CUDA Cは、floatが4バイトであることを報告します。これは、アレイの合計サイズが48Kbであり、12Kbより大きいことを意味します。それはうまく動作します、それでこれはどうしてできますか?
また、GPUで共有メモリのサイズが非常に小さいと言われて います-それについて何ができますか? ブロックごとの最大共有メモリが重要であること。カードのブロックあたりの最大共有メモリは49152バイトですが、ブロックあたり1000スレッドで上記のコードを実行できます。
ブロックあたり49Kbを使用するようですが、これは正しくありません。SMは一度に1つのブロックのみを処理し、ドンではスレッドブロックあたり49Kbしか存在できないという条件を維持しているのでしょうか。
ブロックあたり49Kbの共有メモリとスレッドあたり16Kbの共有メモリはどのように調整されますか?
ありがとう