0Pricing
CUDA Academy · レッスン

cuBLAS GEMM を正しく使う

ハンドル、列優先、leading dimension

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

NVIDIAの力を活用する

高速な行列積を手作業で記述するのは大変です。cuBLASには、GPUをピーク性能近くまで引き出す、十分に検証されたGEMMが用意されています。🚀

GEMMの意味

GEMMはgeneral matrix-matrix multiply(一般行列行列積)の略です。C = alpha * A * B + beta * Cを計算し、グラフィックスやディープラーニングを支える中心的な処理です。

C = alpha * (A * B) + beta * C

すべての呼び出しにハンドルが必要

cuBLASは状態をハンドルに保持します。起動時に1つ作成し、すべての呼び出しで再利用して、最後に破棄します。

cublasHandle_t h;
cublasCreate(&h);
// ... use h ...
cublasDestroy(h);

列優先形式の意外な点

cuBLASはFortranのレイアウトである列優先の行列を想定します。C++の配列は通常、行優先なので、この違いでほとんどの人がつまずきます。

先行次元

先行次元は、メモリ上で列と列の間にあるストライドをcuBLASに伝えます。密に格納されたM行N列の列優先行列では、単純にMです。

int lda = M; // rows, column-major stride

転置のテクニック

便利な対処法があります。行優先のAとBの積は、列優先のBとAの積を転置したものに等しくなります。データを転置する代わりに、単にオペランドを入れ替える人も多いです。

スカラー値はalphaとbetaに格納する

alphaとbetaはポインタとして渡します。何も加えない単純なC = A * Bには、alpha = 1、beta = 0を使用します。

const float alpha = 1.0f, beta = 0.0f;

cublasSgemmを呼び出す

cublasSgemmは単精度浮動小数点数用のGEMMです。長い引数リストは、次元、転置フラグ、スカラー値、3つのデバイスポインタで構成されています。

cublasSgemm(h, CUBLAS_OP_N, CUBLAS_OP_N,
  M, N, K, &alpha, dA, M, dB, K, &beta, dC, M);

ポインタはデバイス上に置く

dA、dB、dCはデバイスメモリを指します。誤ってホストポインタを渡すと、cuBLASは結果ではなくエラーを返します。

精度のサフィックスを選ぶ

文字は型を表します。Sはfloat、Dはdouble、CとZは複素数です。倍精度が必要な場合はDgemmを選択します。

cublasDgemm(...); // double precision GEMM

戻り値のステータスを確認する

すべてのcuBLAS呼び出しはcublasStatus_tを返します。これをCUBLAS_STATUS_SUCCESSと比較し、無効なハンドルや次元を見逃さないようにします。

if (status != CUBLAS_STATUS_SUCCESS) { /* handle */ }

クイックチェック

cuBLASが想定するデータレイアウトについて考えてみましょう。

まとめ

ハンドルを作成し、列優先レイアウトと先行次元に従い、alphaとbetaを設定して、デバイスポインタを使ってSgemmを呼び出しました。🎯

よくある質問

「cuBLAS GEMM を正しく使う」レッスンは無料ですか?

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

「cuBLAS GEMM を正しく使う」で何を学びますか?

ハンドル、列優先、leading dimension ブラウザで直接実行するハンズオンコードでCUDA Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「cuBLAS GEMM を正しく使う」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. cuBLAS GEMM を正しく使う
  2. Thrust のベクターと変換
  3. Thrust の Reduce、Scan、Sort
  4. ディープラーニングのための cuDNN
← CUDA Academyに戻る