CUDA Academy · レッスン

atomicCASでカスタムアトミック操作を作る

compare-and-swapで任意の更新処理を実装します。

レッスン 4/413 ステップ

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

組み込み機能だけでは足りないとき

組み込みのアトミック演算は、加算、最大値、交換などに対応しています。しかし、対応していないアトミック更新が必要な場合はどうすればよいでしょうか。atomicCASを使います。🔁

Compare-And-Swap

atomicCASは compare-and-swap を意味します。現在の値が期待した値と一致する場合にのみ、新しい値を書き込みます。これを1つのアトミックな処理として実行します。

atomicCAS(addr, expected, desired);

戻り値の意味

atomicCAS は、実際に格納されていた値を返します。それが自分のexpected値と等しければ交換は成功し、そうでなければ先に別のスレッドが値を変更しています。

再試行ループ

基本的なパターンはループです。現在の値を読み取り、新しい値を計算し、交換を試み、atomicCAS が成功を確認するまで繰り返します。

コード内の CAS ループ

このループは、読み取りと書き込みの間に別のスレッドが割り込まなくなるまで再試行を続けます。これがカスタムアトミックの核心です。

do {
  old = *addr;
  newv = f(old);
} while (atomicCAS(addr, old, newv) != old);

任意の操作を構築する

f の位置に任意の関数を入れれば、そのアトミック版を作れます。CAS を使うと、ハードウェアが直接提供していない更新処理も構築できます。

古いハードウェアでの Atomic Float

ネイティブな float のアトミック操作が登場する前は、__int_as_float のトリックを使い、ビットパターンに対して atomicCAS を適用して float 用の atomicAdd をエミュレートしていました。

ループがスピンする理由

競合が激しいと、スワップは頻繁に失敗して再試行されます。失敗するたびに別のスレッドが勝ったことになるため、ホットなアドレスでは CAS ループのスピンが長くなります。

進行は保証される

再試行があっても、このアルゴリズムはロックフリーです。スワップが失敗するたびに、必ず別のスレッドが処理を進めています。システム全体が停止することはありません。

幅を一致させる

atomicCAS は 32 ビットや 64 ビットなど、特定の幅に対して動作します。比較が生のビット列に対して行われるよう、データを対応する整数型にキャストしてください。

まず組み込み機能を使う

組み込みのアトミック操作がある場合は、まずそれを使ってください。より高速で簡単だからです。ほかの機能では対応できないカスタム更新に限って、atomicCAS を使います。

理解度チェック

compare-and-swap についての理解を確認しましょう。

まとめ: カスタムアトミック

atomicCAS と再試行ループを組み合わせると、任意のアトミック更新を構築できます。ロックフリーで動作しますが、競合があるとスピンする可能性があることを学びました。✅

無料で開始

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

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

コース
30
レッスン
120

よくある質問

「atomicCASでカスタムアトミック操作を作る」レッスンは無料ですか?

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

「atomicCASでカスタムアトミック操作を作る」で何を学びますか?

compare-and-swapで任意の更新処理を実装します。 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「atomicCASでカスタムアトミック操作を作る」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. GPUの競合状態
  2. atomicAddと関連機能
  3. ヒストグラムを構築する
  4. atomicCASでカスタムアトミック操作を作る
← CUDA Academyに戻る