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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- cuBLAS GEMM を正しく使う
- Thrust のベクターと変換
- Thrust の Reduce、Scan、Sort
- ディープラーニングのための cuDNN