PCIe転送のボトルネック
コピーが遅い処理になりやすい理由を学びます。
「PCIe転送のボトルネック」はCoddyKit上の無料CUDA Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCUDA Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CUDA Academyコースには全4レッスンが含まれています。
世界をつなぐ橋
CPUとGPUは、PCIeバスで接続された別々のボード上にあります。すべてのcudaMemcpyは、この狭い橋を通らなければなりません。🌉
速度の差
GPUメモリの帯域幅は毎秒数テラバイトに達しますが、PCIeが提供できるのは数十ギガバイトにすぎません。バスが低速な経路になります。
コピーが支配的になることがある
短時間で終わるカーネルでは、転送時間が計算時間を大きく上回ることがあります。データの到着を待つ間、GPUはアイドル状態になります。
コピーを減らし、計算を増やす
最初の対策は簡単です。必要なものだけを移動し、GPU上にデータを置いた後は1バイトあたりにより多くの処理を行います。
データを常駐させる
配列を何度も往復させないでください。再アップロードする代わりに、複数のカーネルにわたってデバイス上に常駐させます。
小さなコピーをまとめる
小さな転送を多数行うと、それぞれで固定のオーバーヘッドが発生します。それらを1回の大きなコピーにまとめると、はるかに効率的です。📦
ストリームと重ね合わせる
streamsを使ってコピーと計算を重ね合わせると、転送コストを隠せます。その間もGPUはデータを流しながら処理できます。
ページ固定メモリが役立つ
Pinnedホストメモリを使うと、DMAや非同期コピーが高速になります。転送とカーネルを本当に重ね合わせるための鍵です。
推測せず測定する
コピーとカーネルの時間を別々に計測してください。Nsightのようなprofilerを使えば、バスのどこがボトルネックかを正確に確認できます。
Rooflineの考え方
転送がボトルネックの場合、カーネルを高速化しても効果はありません。まずデータ移動を減らし、その後で計算を最適化してください。
転送する価値はあるか
小規模な問題では、コピーのコストが高速化による効果を上回ることがあります。GPUの効果が出るのは、computeが転送時間を明確に上回る場合です。
確認問題
プロファイリングの結果、プログラムの大半の時間をPCIe経由のデータ移動に費やしていることが分かりました。最も効果的な対策は何ですか?
まとめ
PCIeが低速な経路になる理由を確認しました。コピーを減らし、データを常駐させ、転送をまとめ、ストリームと重ね合わせ、必ず測定してください。🎉
よくある質問
「PCIe転送のボトルネック」レッスンは無料ですか?
はい。「PCIe転送のボトルネック」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CUDA Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CUDA Academyコースには全4レッスンが含まれています。
「PCIe転送のボトルネック」で何を学びますか?
コピーが遅い処理になりやすい理由を学びます。 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CUDA Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCUDA Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「PCIe転送のボトルネック」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCUDA Academyレッスンでコードを書いて実行できますか?
はい。すべてのCUDA Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ホストからデバイスへの転送
- デバイスからホストへの転送
- コピー方向の列挙型
- PCIe転送のボトルネック