CUDA Academy · レッスン

レジスターとローカルメモリ

スレッドごとに使える最速の保存領域と、あふれた場合の動作を学びます。

レッスン 1/413 ステップ

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

最速のメモリ

すべてのスレッドは、チップ上で最も高速なストレージである専用のレジスタを持ちます。レジスタは演算ユニットのすぐ隣にあるため、読み取りのコストはほとんどありません。

通常の変数はレジスタになる

カーネル内で通常のローカル変数を宣言すると、コンパイラは通常それをレジスタに保持します。特別な構文はまったく必要ありません。🙂

__global__ void k() {
    int x = 5;   // x lives in a register
    float y = x * 2.0f;
}

1つのスレッドだけが使用する

レジスタの値は、厳密に1つのスレッドに属します。スレッド7からスレッド8のレジスタは見えないため、スレッドごとの処理をきれいに分離できます。

レジスタは共有プール

各ストリーミングマルチプロセッサには、容量が固定されたレジスタファイルがあります。常駐するすべてのスレッドでこれを分けて使うため、1スレッドあたりのレジスタ使用量を減らすと、同時に実行できるスレッド数が増えます。

使い切った場合

カーネルが使用可能な数を超えるレジスタを必要とすると、余分な値は別の場所に移されます。この処理をレジスタスピルと呼びます。

スピル先: ローカルメモリ

スピルした値はローカルメモリに格納されます。名前とは異なり、これはチップ上にはありません。実際には、低速なチップ外のDRAM上にあります。

ローカルでもスレッドごと

ローカルメモリはレジスタと同じように各スレッド専用です。違いは速度だけで、ローカルメモリへのアクセスははるかに低速です。

大きなローカル配列はスピルする

スレッドごとに大きな配列を宣言すると、すべての要素を保持できるほどレジスタが存在しないため、多くの場合ローカルメモリに置かれます。

__global__ void k() {
    float buf[64]; // likely lives in local memory
}

スピルは性能を損なう

スピルが発生するたびに、無料同然のレジスタアクセスが低速なDRAMへのアクセスに変わります。レジスタの使用圧力を下げることは、最も簡単にできる最適化の1つです。

レジスタ数を確認する

コンパイラに、スレッドあたりのレジスタ数を報告させることができます。nvccに--ptxas-options=-vを渡すと、各カーネルの使用量が出力されます。

nvcc --ptxas-options=-v kernel.cu

意図的にレジスタ数を制限する

__launch_bounds__修飾子を使うと、コンパイラにレジスタ数の制限を促せます。スレッドごとの速度を少し犠牲にして、同時に実行するスレッド数を増やします。

__global__ void __launch_bounds__(256)
myKernel() { /* ... */ }

理解度チェック

スレッドごとに大きな配列を宣言したところ、性能が低下しました。何が起きたと考えられますか。

まとめ: 高速かつ専用

レジスタはスレッドごとに使える最速のストレージであり、その容量には限りがあることを学びました。あふれた値は低速なローカルメモリにスピルします。レジスタの使用圧力を低く保ちましょう。🎯

無料で開始

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

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

コース
30
レッスン
120

よくある質問

「レジスターとローカルメモリ」レッスンは無料ですか?

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

「レジスターとローカルメモリ」で何を学びますか?

スレッドごとに使える最速の保存領域と、あふれた場合の動作を学びます。 ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「レジスターとローカルメモリ」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. レジスターとローカルメモリ
  2. グローバルメモリのトレードオフ
  3. コンスタントメモリとそのキャッシュ
  4. メモリ階層のメンタルモデル
← CUDA Academyに戻る