1GBのメモリを搭載したGPUを使用しているが、アプリケーションに2GBのビデオカードメモリが必要であるとしましょう。プログラムを実行するとどうなりますか?アプリケーションはRAMからメモリを取得しますか?不十分なビデオメモリをどのように処理しますか?
何らかの理由で、まだアプリケーションを実行できますが、プロセスsystem.exe
がかなりのメモリ(〜800 MB)を使用していることに気付きました。これが不十分なビデオメモリに関連しているか、他にあるかはわかりません。問題。
最新のGPUはハイブリッドモードを実行し、ドライバー/ GPUがPCIeバスを介してシステムRAMからテクスチャデータのストリーミングを開始し、「欠落している」RAMを補います。システムRAMはGDDR5よりも3〜5倍遅く、待ち時間がはるかに長くなります。「VRAM」が不足すると、アプリケーションが遅くなり、FPSが大幅に失われます。
ただし、パフォーマンスはPCIe帯域幅(6 GB/s)によって制限されます。
CUDAツールキット(v2.2 +)でプログラミングする場合、これはzero-copyとして知られています。
これがその仕組みに興味がある人のためのコードです。
float *a_h, *a_map;
cudaGetDeviceProperties(&prop, 0);
if (!prop.canMapHostMemory)
exit(0);
cudaSetDeviceFlags(cudaDeviceMapHost);
cudaHostAlloc(&a_h, nBytes, cudaHostAllocMapped);
cudaHostGetDevicePointer(&a_map, a_h, 0);
kernel<<<gridSize, blockSize>>>(a_map);
続きを読む: http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#ixzz3nEbijjQZ
プログラムを実行するとどうなりますか?
システムで使用可能なVRAMを100%使用します。システムメモリも使用するように実装されているため、または十分なVRAMがないため、予期しない動作をする可能性があるため、問題なく動作します。
アプリケーションはRAMからメモリを取得しますか?
アプリケーションが2GBのVRAMを必要とする場合、アプリケーションがそうするように設計されていない限り、システムメモリを増やしても実際には役に立ちません。
不十分なビデオメモリをどのように処理しますか?
これは完全に、アプリケーションの作成者が実装することを選択した実装次第です。