問題タブ [cblas]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - GEMV BLAS と cuBLAS には「共役のみ」の注文オプションがありませんか?
BLAS と cublas のインターフェイスと、特定の行列とベクトルの乗算を行う方法について質問があります。
現在行っている呼び出しがcblas_zgemv
あり、正しい結果が得られます。
基本的に、私は複雑な 3x3 行列A
と複雑なベクトルv
(3 つのコンポーネント) をすべて隣接して c 順序付けしており、行列のエルミート共役 (共役と転置) をベクトルに乗算したいと考えています。この呼び出しは、cblas を使用して呼び出すことができます。
これは BLAS インターフェイスでは実装できないようです。 http://www.netlib.org/lapack/explore-html/dc/dc1/group__complex16__blas__level2_gafaeb2abd9fffa7442b938dc384aeaf47.html#gafaeb2abd9fffa7442b938dc384aeaf47
その理由は、BLAS の "trans" 引数に "conjugate-only" オプションがないことが原因のようです。
BLAS (cblas ではない) での同等の呼び出しは次のようになります。
trans
オプションは、( N
no-transpose、つまり C オーダーでの転置)、T
(transpose、つまり C での転置なし)、C
(conjugate-transpose、C での共役のみ) のみです。
対称性により、別の組み合わせが欠落していますCO
(「共役のみ」-転置なし--、C オーダーの共役転置に対応します)。
ということで、BLASには複雑な要素に対して不都合な穴が空いているようです。最悪なのは、基本的に BLAS と同じインターフェースを持つ CUDA BLAS (cuBLAS) にもこの制限が波及しているようです。cuBLAS 呼び出しを行うことが私の最終目標です。 https://docs.nvidia.com/cuda/cublas/index.html#cublas-lt-t-gt-gemv
BLAS と同様に、cuBLAS の転置オプションには、(enum を介して) 、 、 の 3 つのオプションしかありCUBLAS_OP_N
ませCUBLAS_OP_T
んCUBLAS_OP_H
。
明らかな何かが欠けていますか?これは既知の制限であり、よく知られている回避策はありますか?
注: おそらく、この特定のケースは GEMM を使用して ディメンション を使用して実装できることはわかっていますが、1xn
GEMM について同じ議論を行うことができます。「共役のみ」オプションがありません。
c - cblas_chpr 関数の使用
cblas ライブラリの cblas_chpr() 関数を使用して float 複素数ベクトルの相関行列を計算しようとしたときに問題が発生しました。
Lapack v3.10.0 ライブラリを netLib.org からダウンロードした後、コンパイルしてlibcblas.a 、 liblapack.a 、 liblapacke.a 、 librefblas.a 、およびlibtmglib.aファイルをプロジェクトにコピーし、ライブラリがリンクされていることを確認しました。正しく。
説明によると、cblas_chpr 関数は alpha * x * conjg(x') + A を計算し、結果を A に格納します。
関数は次のように定義されます。
パラメータは次のとおりです。
- レイアウト - これは emun であり、可能な 2 つの入力は CblasRowMajor と CblasColMajor です。
- Uplo - これは列挙型で、可能な 2 つの入力は CblasUpper と CblasLower です。
- N - 行列 A の次数とベクトル x の要素数。
- alpha - ベクトル X に乗算される倍率。
- X - ベクトル X。
- incX - X 内のストライド。たとえば、incX が 7 の場合、7 番目ごとの要素が使用されます。
- A - 行列 A。返された結果によって上書きされます。
私の関数の本体は次のとおりです。
ただし、「chpr_() at 0x55555555e70b」エラーでプログラムがクラッシュしました。
入力パラメータが正しくないと思います。CBLAS は、Fortran BLAS ライブラリのラッパーです。
以前にこのエラーに遭遇し、解決方法を知っている人はいますか?