初めての高速化を計測する
同じタスクでGPUとCPUの性能を測定します。
「初めての高速化を計測する」はCoddyKit上の無料CUDA Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCUDA Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CUDA Academyコースには全4レッスンが含まれています。
ここで性能向上を測定する
正しいカーネルができたので、次に気になるのは CPU よりどれだけ高速かということです。測定すれば、推測を実際の数値に変えられます。⏱️
CPU の基準時間を測る
まずは公平な基準を用意します。同じ加算を通常の CPU ループで実行し、その時間を測ります。GPU と比較する対象が必要です。
間違った時計で測定しない
待機し忘れた cudaMemcpy をまたいで時間を測らないでください。起動は非同期なので、単純なタイマーでは意味のない値が出ることがあります。
CUDA イベントを使う
適切なツールは2つの cudaEvent オブジェクトです。デバイス上で GPU のタイムスタンプを直接記録するため、カーネルの時間を正確に測定できます。
cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);カーネルを区間で囲む
起動の直前に start を記録し、直後に停止側を記録します。イベントはカーネルと同じストリームにキューイングされます。
cudaEventRecord(start);
vecAdd<<<blocks, threads>>>(d_A, d_B, d_C, n);
cudaEventRecord(stop);待機してから読み取る
停止側で cudaEventSynchronize を呼び、CPU が GPU を待つようにします。経過時間を読み取れるのはその後です。
cudaEventSynchronize(stop);
float ms = 0;
cudaEventElapsedTime(&ms, start, stop);最初にウォームアップする
最初の起動では、一度だけ発生する初期化コストがかかります。測定前に使い捨てのウォームアップ起動を行い、そのコストが数値に影響しないようにします。
複数回実行して平均する
1回の測定にはばらつきがあるため、カーネルを数回測定して平均を取ります。安定した数値があれば、性能向上の主張を信頼できます。
コピーの時間も数える
何を測定しているのかを正直に考えましょう。カーネルだけの時間は非常に速く見えますが、実際の性能向上にはPCIe 転送も含める必要があります。
高速化率を計算する
高速化率は、CPU 時間を GPU 時間で割った値です。小さな配列では、コピー時間まで含めると GPU のほうが遅くなることさえあります。
float speedup = cpu_ms / gpu_ms;配列が大きいほど効果が大きい
転送コストを隠せるだけの処理量があると、GPU の性能が発揮されます。n を大きくし、並列処理が支配的になるにつれて高速化率が上がる様子を確認してください。📈
クイックチェック
GPU カーネルの時間を正確に測定できるツールはどれでしょうか。
まとめ
CUDA events を使って初めての高速化率を測定しました。ウォームアップし、カーネルを区間で囲み、同期して、CPU 時間を GPU 時間で割ります。問題が大きいほど、効果も大きくなります。🎉
AI チューターと学ぶ C++ — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「初めての高速化を計測する」レッスンは無料ですか?
はい。「初めての高速化を計測する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CUDA Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CUDA Academyコースには全4レッスンが含まれています。
「初めての高速化を計測する」で何を学びますか?
同じタスクでGPUとCPUの性能を測定します。 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CUDA Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCUDA Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「初めての高速化を計測する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCUDA Academyレッスンでコードを書いて実行できますか?
はい。すべてのCUDA Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ベクトル加算カーネル
- ホスト側をつなぎ込む
- CPUで結果を検証する
- 初めての高速化を計測する