0Pricing
CUDA Academy · レッスン

メモリトランザクションとは何か

キャッシュラインと32/128バイトのセグメントを学びます。

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

メモリはチャンク単位で扱われる

GPUは1バイトだけを単独で取得することはありません。値を1つしか要求していなくても、メモリトランザクションと呼ばれる固定サイズのブロック単位でメモリを移動します。

ワープがまとめて要求する

32スレッドのワープは、同時に読み取りを発行します。ハードウェアは32個すべての要求を集め、できるだけ少ないトランザクションで処理しようとします。

キャッシュラインとセグメント

グローバルメモリは、アラインされたセグメントに分割されています。一般的な幅は32バイトまたは128バイトです。各トランザクションは部分的な範囲ではなく、セグメント全体を取得します。

128バイトが重要な理由

128バイトのラインには、4バイトのfloatがちょうど32個入ります。これはワープ内の各スレッドに1つずつ対応するため、整然としたワープなら1回のトランザクションで処理できます。

// 32 threads x 4-byte float = 128 bytes = one line

アラインメントが重要

セグメントは固定されたアライン済みアドレスから始まります。データがセグメントの途中から始まると、1つのワープが2つのラインにまたがり、余分なトランザクションが必要になることがあります。

使わないバイトにも料金を払う

ワープが128バイトのラインの数バイトだけにアクセスしても、GPUは128バイトすべてを移動します。使わないバイトは、結局支払うことになる無駄な帯域幅です。

トランザクションを数える

性能は、多くの場合、ワープに必要なトランザクション数で決まります。トランザクションが少ないほど読み取る量が減り、処理が速く完了します。

最良のケース

32個のスレッドがアラインされたアドレスから隣接する32個のfloatを読み取ると、GPUは128バイトのライン1つで応答できます。これが理想的な単一トランザクションです。

float v = data[blockIdx.x * blockDim.x + threadIdx.x];

最悪のケース

各スレッドが近隣のスレッドから離れた値を取得すると、ワープは最大32個の個別のトランザクションを発生させ、ほとんど使わないラインを32本も読み込むことがあります。

帯域幅が制約になる

ほとんどのカーネルは演算ではなく、メモリを移動できる速度によって制限されます。トランザクション数を減らすと、実効帯域幅が直接向上します。🚀

準備を整える

コストの単位がセグメントサイズのトランザクションであることが分かりました。これから学ぶコアレッシングの工夫はすべて、ワープをできるだけ少ないトランザクションに詰め込むことが目的です。

理解度チェック

トランザクションサイズの理解度を確認しましょう。

まとめ

GPUは固定サイズのセグメント単位でメモリを移動し、ワープは可能な限り少ないトランザクションで処理されることを学びました。トランザクションが少ないほど、カーネルは高速になります。🎉

よくある質問

「メモリトランザクションとは何か」レッスンは無料ですか?

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

「メモリトランザクションとは何か」で何を学びますか?

キャッシュラインと32/128バイトのセグメントを学びます。 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「メモリトランザクションとは何か」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. メモリトランザクションとは何か
  2. コアレスアクセスとストライドアクセス
  3. Structure of ArraysとArray of Structs
  4. 実効帯域幅を測定する
← CUDA Academyに戻る