cudaMallocHostでピン留めメモリを使う
高速DMA用のページロック済みバッファを使います。
「cudaMallocHostでピン留めメモリを使う」はCoddyKit上の無料CUDA Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCUDA Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CUDA Academyコースには全4レッスンが含まれています。
ピン留めメモリの登場
ピン留めメモリとは、オペレーティングシステムが移動もスワップアウトもしないと保証するホストメモリです。物理アドレスが固定されるため、GPU は直接読み取れます。
ページロックとも呼ばれます
ページロックという用語が、ピン留めの同義語として使われることもあります。どちらも、スワップが一切発生しないようページをその場に固定することを意味します。
正しく割り当てる
cudaMallocHost を使って、CUDA にピン留めメモリを要求します。返されるのは通常のホストポインターで、C++ の配列と同じように読み書きできます。
float* h_data;
cudaMallocHost(&h_data, N * sizeof(float));通常どおり使う
返されたポインターは通常のホストバッファーと同じように動作するため、CPU のコードは変更せずに済みます。これまでと同じように、データを書き込んだり読み取ったりするだけです。
for (int i = 0; i < N; ++i) h_data[i] = i * 1.0f;ステージングはもう不要
ページを移動できないため、ドライバーは内部で行っていたステージング用コピーを省略します。GPU はバッファーから直接読み取るので、二重コピーがなくなります。
より高速な転送
その効果は実効帯域幅に現れます。ピン留めメモリの転送は、リンクのピーク速度に近い速度で動作することが多く、ページング可能な場合の約 2 倍になることもあります。
正しく解放する
ピン留めメモリには専用の解放処理が必要です。通常の free は使わず、cudaFreeHost を使用してください。そうしないとクラッシュやメモリリークの原因になります。
cudaFreeHost(h_data);使い放題ではありません
ピン留めされたページはスワップできないため、実際のRAMを占有します。ピン留めしすぎると、システムの他の処理で使えるメモリが不足します。
割り当ては遅くなる
ページのロックには処理が必要なため、cudaMallocHost による割り当ては malloc より遅くなります。再割り当てを繰り返すのではなく、1 つのピン留めバッファーを複数の転送で再利用してください。
本当の強み
速度だけでなく、ピン留めメモリは真に非同期なコピーを可能にする鍵でもあります。これがなければ、cudaMemcpyAsync を他の処理とオーバーラップさせることはできません。
使うべき場面
頻繁に転送するバッファーや、ストリームにデータを供給するバッファーをピン留めしてください。小さな配列を一度だけコピーするなら、通常の malloc で十分です。🙂
簡単な確認
cudaMallocHost でバッファーを割り当てました。どのように解放すべきですか?
振り返り
cudaMallocHost はホストのページをピン留めするため、GPU が直接読み取れるようになり、コピーが高速化されて非同期オーバーラップも可能になります。必ず cudaFreeHost で解放してください。🔒
AI チューターと学ぶ C++ — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「cudaMallocHostでピン留めメモリを使う」レッスンは無料ですか?
はい。「cudaMallocHostでピン留めメモリを使う」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CUDA Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CUDA Academyコースには全4レッスンが含まれています。
「cudaMallocHostでピン留めメモリを使う」で何を学びますか?
高速DMA用のページロック済みバッファを使います。 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CUDA Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCUDA Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「cudaMallocHostでピン留めメモリを使う」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCUDA Academyレッスンでコードを書いて実行できますか?
はい。すべてのCUDA Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ページ可能メモリが遅い理由
- cudaMallocHostでピン留めメモリを使う
- ストリーム内でcudaMemcpyAsyncを使う
- ダブルバッファリングのパイプライン