atomicAddと関連機能
ハードウェアによる読み取り・変更・書き込み操作を学びます。
「atomicAddと関連機能」はCoddyKit上の無料CUDA Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCUDA Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CUDA Academyコースには全4レッスンが含まれています。
分割できない1つの処理
アトミック操作は、ほかのスレッドに割り込まれることなく、値の読み取り、変更、書き込みを1つの処理として実行します。これで競合状態をなくせます。⚛️
atomicAdd を使う
atomicAddはポインターと値を受け取り、安全に加算して、加算前の値を返します。多数のスレッドが同じアドレスにアクセスしても、更新が失われることはありません。
atomicAdd(total, 1);競合するカウンターを修正する
通常のインクリメントを atomicAdd に置き換えると、実行するスレッド数に関係なく、毎回正しいカウントになります。
__global__ void count(int* total) {
atomicAdd(total, 1);
}戻り値は便利
atomicAdd は、加算する前に保持されていた値を返します。その古い値は、インデックスやチケット番号として使える一意のスロットになります。
int slot = atomicAdd(counter, 1);豊富な仲間たち
atomicAdd には多くの仲間があります。atomicSub、atomicMax、atomicMin、atomicExch、atomicAnd、atomicOr、atomicXor はすべて同じようにアトミックに動作します。
値を交換する
atomicExchは新しい値を格納し、古い値を1つの処理で返します。フラグの確保や以前の状態の安全な取得に便利です。
int prev = atomicExch(flag, 1);アトミックな最大値と最小値
atomicMaxは、指定した値のほうが大きい場合にのみ対象を更新します。すべてのスレッドから競合なしでグローバル最大値を求めるのに最適です。
atomicMax(best, myValue);対応している型
アトミック演算は int、unsigned に対応し、新しいハードウェアでは float と double にも対応します。使用したい呼び出しが、自分の型とアーキテクチャでサポートされているか必ず確認してください。
アトミック演算にはコストがある
アトミック演算は、同じアドレスを対象とするスレッドを直列化します。1か所への激しい競合はボトルネックになるため、必要な場所でのみ使用してください。
負荷を分散する
スレッドが異なるアドレスを更新してから結果を結合することで、競合を減らせます。衝突が少なければ、アトミック演算は高速なままです。
アトミック演算とリダクション
巨大な配列の合計では、大量のアトミック演算よりツリーリダクションのほうが高速なことがよくあります。更新がまばら、または不規則な場合にアトミック演算を使ってください。
クイックチェック
atomicAdd の動作をどれだけ理解できているか確認しましょう。
まとめ:atomicAdd と仲間たち
アトミック演算の仲間たちに出会い、競合するカウンターを修正し、アトミック演算は古い値を返す一方で競合時には時間がかかることを学びました。✅
よくある質問
「atomicAddと関連機能」レッスンは無料ですか?
はい。「atomicAddと関連機能」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CUDA Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CUDA Academyコースには全4レッスンが含まれています。
「atomicAddと関連機能」で何を学びますか?
ハードウェアによる読み取り・変更・書き込み操作を学びます。 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CUDA Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCUDA Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「atomicAddと関連機能」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCUDA Academyレッスンでコードを書いて実行できますか?
はい。すべてのCUDA Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- GPUの競合状態
- atomicAddと関連機能
- ヒストグラムを構築する
- atomicCASでカスタムアトミック操作を作る