ここで、利用可能なすべてのメモリを cuda テクノロジで割り当てる必要があります。私は、Tesla C2050、Quadro 600、および GeForce GTX 560 Ti で次のように実行します。まず、デバイスに 0 バイトのグローバル メモリを割り当てます。2 番目のステップは、cudaMemGetInfo 関数によってデバイスの使用可能なメモリを定義し、その使用可能なメモリを割り当てます。上記のデバイスで動作します。ただし、このメカニズムは GeForce GTX 690 では機能しません。
GeForce GTX 690 デバイスまたはその操作のパラダイムにメモリを割り当てるためにどのメカニズムを使用できますか?
次のようになります。
cudaSetDevice(deviceIndex);
int (*reservedMemory);
cudaMalloc(&reservedMemory, 0);
size_t freeMemory, totalMemory;
cudaMemGetInfo(&freeMemory, &totalMemory);
cudaMalloc(&reservedMemory, freeMemory);
GeForce GTX 690 では、2 つの既存のストリーミング マルチプロセッサのうちの 1 つが 2147483648 バイトのメモリで動作しますが、2050109440 バイトに等しい 1341915136 バイトの空きグローバル メモリしか割り当てることができません。Quadro 600 では、1 つの既存のストリーミング マルチプロセッサが 1073414144 バイトのメモリで動作し、859803648 バイトに相当する空きグローバル メモリの使用可能なすべての 859803648 バイトを割り当てることができます。
Quadro 600 の例 (コンパイル、リンク、および実行手順を示します):
D:\Gdmt> nvcc -arch=compute_20 -code=sm_21 -c ./Gdmt.cu -o ./Gdmt.obj
Gdmt.cu
tmpxft_00000bb4_00000000-3_Gdmt.cudafe1.gpu
tmpxft_00000bb4_00000000-8_Gdmt.cudafe2.gpu
Gdmt.cu
tmpxft_00000bb4_00000000-3_Gdmt.cudafe1.cpp
tmpxft_00000bb4_00000000-14_Gdmt.ii
D:\Gdmt> nvcc ./Gdmt.obj -o ./Gdmt.exe
D:\Gdmt> nvcc -arch=compute_20 -code=sm_21 -c ./Gdmt_additional.cu -o ./Gdmt_add
itional.obj
Gdmt_additional.cu
tmpxft_00000858_00000000-3_Gdmt_additional.cudafe1.gpu
tmpxft_00000858_00000000-8_Gdmt_additional.cudafe2.gpu
Gdmt_additional.cu
tmpxft_00000858_00000000-3_Gdmt_additional.cudafe1.cpp
tmpxft_00000858_00000000-14_Gdmt_additional.ii
D:\Gdmt> nvcc ./Gdmt_additional.obj -o ./Gdmt_additional.exe
D:\Gdmt> Gdmt.exe
Total amount of memory: 1073414144 Bytes;
Memory to reserve: 859803648 Bytes;
Memory reserved: 859803648 Bytes;
^C
D:\Gdmt> Gdmt_additional.exe
Allocation is succeeded on 890830848 bytes of reserved memory.
^C
D:\Gdmt>
GeForce GTX 690 の例 (コンパイル、リンク、および実行手順を示します):
J:\Gdmt> nvcc -arch=compute_30 -code=sm_30 -c ./Gdmt.cu -o ./Gdmt.obj
Gdmt.cu
tmpxft_000011f0_00000000-5_Gdmt.cudafe1.gpu
tmpxft_000011f0_00000000-10_Gdmt.cudafe2.gpu
Gdmt.cu
tmpxft_000011f0_00000000-5_Gdmt.cudafe1.cpp
tmpxft_000011f0_00000000-15_Gdmt.ii
J:\Gdmt> nvcc ./Gdmt.obj -o ./Gdmt.exe
J:\Gdmt> nvcc -arch=compute_30 -code=sm_30 -c ./Gdmt_additional.cu -o ./Gdmt_add
itional.obj
Gdmt_additional.cu
tmpxft_00001164_00000000-5_Gdmt_additional.cudafe1.gpu
tmpxft_00001164_00000000-10_Gdmt_additional.cudafe2.gpu
Gdmt_additional.cu
tmpxft_00001164_00000000-5_Gdmt_additional.cudafe1.cpp
tmpxft_00001164_00000000-15_Gdmt_additional.ii
J:\Gdmt> nvcc ./Gdmt_additional.obj -o ./Gdmt_additional.exe
J:\Gdmt> Gdmt.exe
Total amount of memory: 2147483648 Bytes;
Memory to reserve: 2050109440 Bytes;
Warning, memory allocation process is not succeeded!
^C
J:\Gdmt> Gdmt_additional.exe
Allocation is succeeded on 1341915136 bytes of reserved memory.
^C
例は次の場所にアーカイブされています。
(z7 アーカイブ - 78.5 KB ~ 80,434 バイト) https://docs.google.com/file/d/0BzZ5q0v8n-qTTDctVDV5Mnh2ODA/edit (zip アーカイブ - 163 KB ~ 167,457 バイト) https://docs.google.com/file /d/0BzZ5q0v8n-qTT2xoV3NXSzhQMDQ/編集
このトピックは、「The GeForce Lounge」および「CUDA Programming and Performance」に投稿された同じ名前のトピックのクローンです。