問題タブ [cublas]
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.
thrust - CUBLAS の行/列ベクトルの混乱
CUBLAS/CUDA プログラミングを始めたばかりです。私は主にこれを行列演算とベクトル演算で使用します。CUBLAS で使用されるベクトルの方向について、かなり混乱しています。行ベクトルと列ベクトルに違いはないようです。では、レベル 2 関数を使用して行列にベクトルを乗算する場合、ベクトルの向きを指定するにはどうすればよいでしょうか? 常に列ベクトルとして扱われますか? 行列 (nxm) を作成するために列ベクトル (nx1) を行ベクトル (1xm) に乗算する場合、それらを常に行列として扱い、乗算にレベル 3 関数を使用する必要がありますか?
また、ベクトルを生成するために推力を使用しているため、推力ベクトル (n 要素) を cublasCgemm に渡して 1xn または nx1 行列 (行ベクトルまたは列ベクトル) を形成します。cublasOperation_t を CUBLAS_OP_N に設定すると、そのベクトルは 1xn または nx1 ベクトルとして扱われますか?
ありがとう。
cuda - CUBLAS で複素数の累乗を行うには?
C++ コードを CUDA & CUBLAS に移植しています。複雑な計算 (つまり、pow、log、exp など) に stl::complex を使用していますが、CuComplex ライブラリで定義されている同じ関数は見当たりませんでした。これらの関数を作成する方法はわかりませんが、オンラインでいくつかのコードを見つけました
上記の結果は正しい答えを与えませんでした。それはcpowに何か問題がありますか?複素数で累乗やその他の関数を実行する方が良いですか?
c++ - CUDA/CUBLAS 行列ベクトル乗算
以前、CUDA での行列とベクトルの乗算に関する質問と、独自のカーネルの作成に関する質問を投稿しました。これを行った後、より高いパフォーマンスを達成することを期待して、SOで一部のユーザー(@Robert Crovellaに感謝)が提案したCUBLASを使用して問題を実装することにしました(私のプロジェクトはパフォーマンス主導です)。
明確にするために、NxN行列に1xNベクトルを掛けたいと思います。
以下に貼り付けられたコードを数日間見てきましたが、乗算によって誤った結果が得られる理由がわかりません。< vector > 配列を使用して問題を引き起こしているのではないかと心配しています (これは、これらのデータ型を使用するより大きなシステムの一部です)。このスレッドをデバッグ ツールとして使用するつもりはありませんが、これを達成しようとしている他のユーザーにも役立つと思います。これは、インターネット上で特定の問題 (およびキューブラ) について特に包括的な情報源に出くわしていないためです。 v2 API)。前もって感謝します!
cuda - cuBLAS の標準 Fortran インターフェイス
私は、集中的な行列操作を行う Linux 上の商用シミュレーション ソフトウェアを使用しています。このソフトウェアはデフォルトでインテル® MKL を使用しますが、カスタム BLAS/LAPACK ライブラリーに置き換えることができます。このライブラリは、共有オブジェクト (.so) ライブラリである必要があり、BLAS および LAPACK 標準ルーチンの両方をエクスポートする必要があります。ソフトウェアには、それらすべてに標準の Fortran インターフェイスが必要です。
カスタム ライブラリを使用できることを確認するために、ATLAS をコンパイルし、その中に LAPACK (netlib から) をリンクしました。このソフトウェアは、コンパイルした ATLAS バージョンを問題なく使用できました。
ここで、シミュレーション速度を向上させるために、ソフトウェアに cuBLAS を使用させたいと考えています。cublas
私は、cuBLAS が標準の BLAS 関数名 (プレフィックスが付いている)をエクスポートしないという問題に直面しました。さらに、ライブラリ cuBLAS ライブラリには LAPACK ルーチンが含まれていません。readelf -a
エクスポートされた関数を確認するために使用します。
一方で、この問題を解決するためにマグマを使用してみました。ATLAS、LAPACK、cuBLASの全てに対してコンパイル、リンクすることに成功しました。しかし、それでも正しい関数をエクスポートせず、最終的な共有オブジェクトに LAPACK を含めません。これが想定されている方法なのか、ビルドプロセス中に何か間違ったことをしたのかはわかりません。
CULAも見つけましたが、これで問題が解決するかどうかはわかりません。
cuBLAS/LAPACK (または適切なラッパー) を単一 (.so) にリンクして、標準の Fortran インターフェイスを正しい関数名でエクスポートしようとした人はいますか? 概念的には可能だと思いますが、その方法がわかりません!
cuda - cublas: パフォーマンスを向上させるために同じ入力行列と出力行列を使用しますか?
CUBLAS は、単一の大きな行列の乗算または加算などの効率的なアルゴリズム パッケージである可能性があります。しかし、一般的な設定では、ほとんどの計算は依存しています。したがって、次のステップは前のステップの結果に依存します。
これは、出力行列が CUBLAS ルーチンの入力行列とは異なる必要があるため (入力行列は const であるため)、1 つの問題を引き起こします。これらの一時的な行列のために、空間を malloc し、デバイスからデバイスにデータをコピーするのに多くの時間が費やされます。
余分なメモリ操作時間を避けるために、最初の引数が出力行列で、2 番目/3 番目の引数が入力行列である乗算 (A、A、B) のようなことを行うことは可能ですか? または、より良い回避策はありますか?
どうもありがとう !