コンスタントメモリについて
コンスタントメモリとは†
コンスタントメモリはオンチップのキャッシュを持つ読み込み専用メモリ領域です.
メモリ領域自体はデバイスメモリ上の専用領域にありますが,
キャッシュがオンチップなのでうまく使えばとても高速に処理できます.
割り当て†
コンスタントメモリは変数修飾子 __constant__ を付けることで宣言できます.
1
2
| | __constant__ float x = 10.0f;
__constant__ int n[3] = { 1, 2, 3 };
|
コンスタントメモリに実行時に値が決まるものを格納する場合は,デバイスからは書き込めません(読み込み専用なので)が,
ホストからは書き込めます.
1
2
3
4
5
6
7
| | __constant__ float cX[256];
__host__
void HostFunc(float hX[256])
{
cudaMemcpyToSymbol(cX, hX, sizeof(float)*256);
}
|
コンスタントメモリの大きさ†
デバイスプロパティを取得し,totalConstMemで確認できます.
1
2
3
4
| | cudaDeviceProp dev;
cutilSafeCall(cudaGetDeviceProperties(&dev, 0));
printf(" total constant memory : %d (KB)\n", dev.totalConstMem/1024);
|