2

私は最近、単純な CUDA 行列とベクトルの乗算を使用したいと考えていました。cublas ライブラリで適切な関数を見つけました: cublas<<>>gbmv。ここに公式ドキュメントがあります

klしかし、実際には非常に貧弱なので、とkuパラメータの意味を理解できませんでした。さらに、何が何でstrideあるかわかりません(それも提供する必要があります)。これらのパラメータの簡単な説明 (37 ページ) がありますが、他に何か知っておく必要があるようです。

インターネットで検索しても、この質問に関する有用な情報は多くありません。ほとんどの場合、別のバージョンのドキュメントへの参照です。

そこで、GPU/CUDA/cublas の達人にいくつか質問があります。

  1. cublas の使用に関するよりわかりやすいドキュメントやガイドを見つけるにはどうすればよいですか?
  2. この機能の使い方を知っているなら、使い方を説明してくれませんか?
  3. もしかしたら、cublas ライブラリーはやや特殊で、誰もがより人気のある、より適切に文書化されたものなどを使用しているのではないでしょうか?

どうもありがとう。

4

1 に答える 1

6

したがって、BLAS (Basic Linear Algebra Subprograms) は、名前が示すように、基本的な線形代数ルーチンに対する API です。これには、ベクトル - ベクトル操作 (レベル 1 blas ルーチン)、行列 - ベクトル操作 (レベル 2)、および行列 - 行列操作 (レベル 3) が含まれます。すべてを正しく実装する「リファレンス」BLASがありますが、ほとんどの場合、アーキテクチャに最適化された実装を使用します。cuBLAS は CUDA の実装です。

BLAS API は、基本的な操作を記述する API として非常に成功したため、広く採用されるようになりました。ただし、(a) 当時のアーキテクチャ上の制限により、名前は信じられないほど不可解であり (これは 1979 年のことであり、API は広くコンパイルできるように 8 文字以下の名前を使用して定義されていました)、(b) 成功した理由は次のとおりです。これは非常に一般的であるため、最も単純な関数呼び出しでさえ多くの無関係な引数が必要です。

非常に広く普及しているため、数値線形代数を行っている場合は、API の一般的な要点を既に知っていると想定されることが多いため、実装マニュアルでは重要な詳細が省略されていることがよくあります。

レベル 2 と 3 のルーチンは一般にTMMOO..Tは行列/ベクトルの数値型 ( S/Dは単精度/倍精度実数、C/Zは単精度/倍精度複素数)、MMは行列型 (GE一般 - 例、他に何も言うことができない単なる密な行列;GB一般的なバンド行列、SY対称行列など)、およびOO操作です。

これはすべて少しばかげているように見えますが、うまくいき、比較的うまく機能します.SGEMVが単精度の一般行列とベクトルの乗算になるように、これらをスキャンして使い慣れた操作をすぐに学びます(これはおそらくSGBMVではなく、あなたが望むものです)。 、DGEMM は倍精度の行列 - 行列乗算などですが、ある程度の練習が必要です。

したがって、cublas sgemv の指示、または元の のドキュメントを見ると、引数リストをステップ実行できます。まず、基本操作は

この関数は行列とベクトルの乗算を実行します y = a op(A)x + b y 。ここで、A は列優先形式で格納された amxn 行列、x と y はベクトル、および はスカラーです。

ここで、op(A) は A、ATまたはA Hです。したがって、一般的なケースのように、 だけが必要y = Axな場合はa = 1b = 0. とtransa == CUBLAS_OP_N

incxの異なる要素間のストライドxです。これが役立つ状況はたくさんありますが、 がxベクトルを含む単純な 1 次元配列である場合、ストライドは 1 になります。

SGEMV に必要なのはこれでほぼすべてです。

于 2012-05-23T17:42:27.817 に答える