CUDA Academy · レッスン

CPUで結果を検証する

基準となる答えと比較します。

レッスン 3/413 ステップ

「CPUで結果を検証する」はCoddyKit上の無料CUDA Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCUDA Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CUDA Academyコースには全4レッスンが含まれています。

信頼して、検証する

クラッシュせずに動くカーネルだからといって、正しいとは限りません。論理バグは気付きにくいため、数値を確認する必要があります。🔍

参照結果を計算する

最も簡単な確認方法は、同じ計算を行う通常の CPU ループです。この参照結果を、信頼できる正解として使います。

for (int i = 0; i < n; i++)
    ref[i] = h_A[i] + h_B[i];

要素ごとに比較する

両方の配列を走査し、GPU の各結果を参照結果と比較します。n個の要素をすべて1つのループで確認すれば、誤った値を見つけられます。

for (int i = 0; i < n; i++)
    if (h_C[i] != ref[i]) { /* mismatch */ }

浮動小数点数は正確ではない

浮動小数点数では、単純な等価比較を使わないでください。わずかな丸め誤差が生じるため、代わりに小さな許容誤差を使って比較します。

if (fabs(h_C[i] - ref[i]) > 1e-5f) { /* fail */ }

なぜ等価比較ではなく許容誤差なのか

GPU と CPU では丸めが異なる順序で行われることがあり、結果がごくわずかに異なる場合があります。1e-5 のような小さなイプシロンであれば、その無害な誤差を吸収できます。

エラー数を数える

最初の不一致で終了するのではなく、エラー数を記録します。失敗した要素の数を見ると、どのようなバグかを推測できます。

int errors = 0;
if (fabs(h_C[i] - ref[i]) > 1e-5f) errors++;

明確な判定を表示する

最後に、簡潔で正直なメッセージを1つ表示します。明確なPASS または FAILの行があれば、生の配列を目を凝らして確認せずに済みます。

printf(errors == 0 ? "PASS\n" : "FAIL: %d\n", errors);

端をスポットチェックする

境界に関するバグは、最初と最後の要素で発生しやすいものです。C[0] と C[n-1] を表示すれば、全体をループする前にすばやく健全性を確認できます。

オフバイワンの兆候

最後の要素だけが間違っている場合は、境界計算を疑ってください。ブロック数やガードの誤りによって、最後のスレッドが実行されないことがあります。

最適化する前に検証する

速度を調整する前に、必ず正しさを確認してください。間違った答えを返す高速なカーネルは、遅くても正しいカーネルより悪いものです。

検証処理を残しておく

開発中は検証処理を残しておきます。これは回帰テストとして機能し、カーネルを変更したときにミスをすぐ見つけてくれます。

クイックチェック

浮動小数点の GPU 結果を CPU の参照結果と比較するには、どうすればよいでしょうか。

まとめ

CPU の参照結果、許容誤差による比較、エラー数、明確な PASS または FAIL によって、結果を検証しました。常に正しさを最優先にしてください。✅

無料で開始

AI チューターと学ぶ C++ — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「CPUで結果を検証する」レッスンは無料ですか?

はい。「CPUで結果を検証する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CUDA Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CUDA Academyコースには全4レッスンが含まれています。

「CPUで結果を検証する」で何を学びますか?

基準となる答えと比較します。 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

CUDA Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCUDA Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「CPUで結果を検証する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCUDA Academyレッスンでコードを書いて実行できますか?

はい。すべてのCUDA Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ベクトル加算カーネル
  2. ホスト側をつなぎ込む
  3. CPUで結果を検証する
  4. 初めての高速化を計測する
← CUDA Academyに戻る