CPUで結果を検証する
基準となる答えと比較します。
「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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ベクトル加算カーネル
- ホスト側をつなぎ込む
- CPUで結果を検証する
- 初めての高速化を計測する