3

ピン留めまたはページロックされたメモリは、ロックされていないメモリと比較して、GPUに高速に転送されます。CUDAは、ページロックメモリを割り当てまたは登録するためのcudaHostAllocおよび呼び出しを提供します。cudaHostRegister次に、Nvidiaドライバーは、ホストメモリがロックされているかどうかをメモリ転送でチェックし、コピーコードパスに従って発行します。

システムコールでメモリをページロックして、mlock()(転送速度に関して)まったく同じ効果を達成することは可能cudaHostRegisterですか?または、それに応じたCUDA呼び出しは、ドライバーが照会する内部データベースを更新しますか?

4

2 に答える 2

2

それらは同等ではありません。cuMemHostRegister()はメモリをページロックしますが、GPU(またはポータブルの場合はGPU)のページテーブルにマップして、GPUが直接アクセスできるようにします。GPUにマッピングせずにメモリをページロックすると、他のメモリと同じようにGPUに見えます。

于 2012-05-19T23:41:34.927 に答える
2

NVIDIAドライバーは、などを介してアクセスできる独自のページロックメモリを維持していると思いますcudaHostAlloc。システムコールmlockは、ドライバーが行うことと技術的に同等のカーネルロックを使用しますが、カーネルページロックは非常にリソース制限されRLIMIT_MEMLOCKており、非常に小さいです。したがって、NVIDIA ドライバーは独自のページ ロック メカニズムを使用します。また、カーネルの残りの部分がアクセスできる大量のメモリを盗むため、過度の使用について警告します。

したがって、メモリをページロックするという意味でcudaHostRegisterは と同等ですが、リソースの制限に縛られているという意味では同等ではありません。加速mlock()するという意味ではありません。cudaMemcpy

于 2012-05-18T14:17:23.763 に答える