1

行列の乗算(C = A * B)を計算するときに、cublasSgemm/ルーチンがGPUにどのようにマッピングされるかを知りたいです。clAmdBlasSgemm

入力行列の次元を想定します::A_rows= 6144; A_cols = 12288; B_rows = 12288; B_cols = 15360;

結果の行列の次元::C_rows= 6144; C_cols = 15360;

ホストで入力マトリックスを初期化し、マトリックスデータをデバイスメモリにコピーしたと仮定します。その後、GPUで行列の乗算を行うために次のcuBlasまたはルーチンを呼び出しています。clAmdBlas

void cublasSgemm (char transa, char transb, int m, int n, int k, float alpha, const float *A, int lda, const float *B, int ldb, float beta, float *C, int ldc);

ここで、m = A_rows; およびn=B_cols;

だから私の疑問は次のとおりです:
1。)これらのルーチンはGPUでどのように実装されていますか?
2.)mとnの値は1つの計算単位(SM)にマッピングされていますか?いいえの場合、mとnの最大値は何になりますか?
3.)スレッド/ブロックを制御できますか?

4

2 に答える 2

1

ホスト側のCUBLASAPI(clAmdBlasSgemmが同じであると想定する理由がわからないことに注意してください)の場合、質問に対する簡単な答えは次のとおりです。

  1. 最新のCUBLASはクローズドソースです。Magmaのようなコードベースがあり、少なくともCUBLASの実装方法を理解するために見ることができます。NVIDIAが提供するプロファイラーの1つでCUBLASコードを実行して、GPUでの動作を確認することもできます。しかし、重要なのは、それがどのように機能するかを知る必要がないということです。APIといくつかの非常に徹底的なドキュメントがあります。あなたが知る必要があるのはそれだけです。
  2. 問題の例では、約1.2Gbのメモリが必要です。それだけのメモリを備えたGPUがあり、ディスプレイドライバーのウォッチドッグタイマーを回避するのに十分な計算能力がある場合、またはコンピューティング専用のGPUがある場合は、それが機能します。メモリとディスプレイドライバの時間制限(該当する場合)が唯一の制限です。
  3. いいえ。

K20 Keplerデバイス用のCUBLASデバイスAPIもあり、上記の回答はそのライブラリには適用されないことに注意してください。

于 2013-02-13T10:46:34.970 に答える
0

先に進む前に、VolkovとDemmelの論文を読む必要があります。ここを参照してください:http : //www.cs.berkeley.edu/~volkov/SGEMMに関する彼の記事を参照してください。答えは2008年以来あります。

于 2013-05-12T18:21:08.417 に答える