タグ付けされた質問 「blas」

基本線形代数サブプログラム-ベクトル-ベクトル、行列-ベクトル、および行列-行列演算を備えた標準APIライブラリ。

6
Fortranコンパイラは実際にどれほど優れていますか?
この質問は、「C ++ vs Fortran for HPC」への回答で最近出された2つの議論の延長です。そして、それは質問よりも少し挑戦です... Fortranを支持する最もよく耳にする引数の1つは、コンパイラーが優れていることです。ほとんどのC / Fortranコンパイラは同じバックエンドを共有するため、両方の言語で意味的に同等のプログラム用に生成されたコードは同一である必要があります。ただし、コンパイラが最適化するのはC / Fortranの方が多かれ少なかれ簡単だと主張することができます。 そこで、簡単なテストを試すことにしました。daxpy.fとdaxpy.cのコピーを入手し、gfortran / gccでコンパイルしました。 daxpy.cはdaxpy.fのf2c変換(自動生成コード、見苦しい)なので、そのコードを取り、それを少しクリーンアップしました(daxpy_cに会います)。 for ( i = 0 ; i < n ; i++ ) dy[i] += da * dx[i]; 最後に、gccのベクトル構文を使用して書き直しました(daxpy_cvecと入力します)。 #define vector(elcount, type) __attribute__((vector_size((elcount)*sizeof(type)))) type vector(2,double) va = { da , da }, *vx, *vy; vx = …
74 fortran  c  blas  benchmarking 

3
BLAS、LAPACK、およびその他の線形代数ライブラリの関係は何ですか?
私が取り組んでいるプロジェクトのC ++線形代数ライブラリを検討しています。私がまだ把握していないことは、BLASとLAPACKを他の線形代数ライブラリに接続することです。 線形代数ライブラリに関するこの記事を見ると、次のことが興味深いことがわかりました。 一部のライブラリはBLASおよびLAPACKから独立しています 一部にはBLASとLAPACKが必要です 一部にはBLASおよびLAPACKへのオプションのインターフェースがあります そして、私が理解しているように、BLASとLAPACKを使用して線形代数の問題を直接解決できます。 一部のライブラリは、CおよびFortranで記述されたBLASおよびLAPACKライ​​ブラリに対する単なるC ++インターフェイスであり、他のライブラリは独自の代替ルーチンを実装していると想像できますが、 BLASおよびLAPACKへのオプションのインターフェイスの意味は何ですか?オプトアウトすることで失うものは何ですか?代わりにライブラリは何をしていますか? ライブラリは、単なるインターフェイス以上のものを提供しますか?たとえば、UMFPACKはCで記述されており、BLASおよびLAPACKへのオプションのインターフェースがあります。BLASとLAPACKが単独ではできないUMFPACK(または他のライブラリ)は何ができますか?

3
BLAS実装は、まったく同じ結果をもたらすことが保証されていますか?
2つの異なるBLAS実装を考えると、まったく同じ浮動小数点計算を行い、同じ結果を返すと期待できますか?または1つのようにスカラー積を計算することは、例えば、起こることができる そしてような一つ そうおそらくIEEE浮動小数点に異なる結果を与えます算術?((x1y1+ x2y2)+ x3y3)+ x4y4((バツ1y1+バツ2y2)+バツ3y3)+バツ4y4 ((x_1y_1 + x_2y_2) + x_3y_3) + x_4y_4 (x1y1+ x2y2)+ (x3y3+ x4y4)、(バツ1y1+バツ2y2)+(バツ3y3+バツ4y4)、 (x_1y_1 + x_2y_2) + (x_3y_3 + x_4y_4),

3

3
行列ベクトル乗算のスケーリングが行われないのはなぜですか?
長い投稿で申し訳ありませんが、最初の段階で関連があると思ったものをすべて含めたかったのです。 私が欲しいもの Krylov Subspace Methods for Dense Matricesの並列バージョンを実装しています。主にGMRES、QMRおよびCG。(プロファイリング後)私のDGEMVルーチンは哀れなことに気付きました。それで、私はそれを分離することによってそれに集中することに決めました。12コアのマシンで実行してみましたが、以下の結果は4コアのIntel i3ラップトップ用です。傾向に大きな違いはありません。 私のKMP_AFFINITY=VERBOSE出力はここにあります。 私は小さなコードを書きました: size_N = 15000 A = randomly_generated_dense_matrix(size_N,size_N); %Condition Number is not bad b = randomly_generated_dense_vector(size_N); for it=1:n_times %n_times I kept at 50 x = Matrix_Vector_Multi(A,b); end これは、50回の反復でCGの動作をシミュレートすると思います。 私が試したもの: 翻訳 私はもともとFortranでコードを書いていました。C、MATLAB、Python(Numpy)に翻訳しました。言うまでもなく、MATLABとPythonは恐ろしいものでした。驚くべきことに、上記の値ではCはFORTRANよりも1〜2秒優れていました。一貫して。 プロファイリング 実行するコードのプロファイルを作成し、46.075数秒間実行しました。これは、MKL_DYNAMICがに設定されFALSE、すべてのコアが使用されていたときです。MKL_DYNAMICをtrueとして使用した場合、特定の時点で使用されていたコアの数は(およそ)半分だけです。詳細は次のとおりです。 Address Line Assembly CPU Time 0x5cb51c mulpd %xmm9, …

2
PETScは密行列にどの程度役立ちますか?
私が見たところどこでも、PETScのチュートリアル/ドキュメントなどは、線形代数に有用であり、通常、スパースシステムが有益であることを指定しています。密行列はどうですか?密なAのを解くのが心配です。A x = bAバツ=bAx=bAAA FortranでCGとQMRのコードを独自に作成しました。基本的な構成は、疑似コードをリッピングし、可能な限りBLASルーチン(ddot、dnrmおよびdgemv)を少しの自己調整で追加することです。これはPETScと比較してどうですか? 最善の答えは自分で試してみることだと思いますが、時間やその他の理由により不可能です。 どんな助けも大歓迎です。

2
科学計算における複雑な算術演算の危険性
複素内積二つの異なる定義が規則によって決定した:ˉ U Tの VまたはU T ˉ V。BLASで、cdotu、zdotu、およびcdotc、zdotcのルーチンを見つけました。前の2つのルーチンは実際にu T v(偽の内積!)を計算し、最後の2つのルーチンは内積の最初のベクトルを共役させます。また、いずれかの定義によって(共役U又はV)、⟨ U 、V ⟩ = ¯ ⟨ V 、U ⟩⟨ U 、V ⟩⟨u,v⟩\langle u,v\rangleあなたは¯Tvu¯Tv\bar{u}^TvあなたはTv¯uTv¯u^T\bar{v}あなたはTvuTvu^Tvあなたはuuvvv⟨ U 、V ⟩ = ⟨ V 、U ⟩¯¯¯¯¯¯¯¯¯¯¯⟨u,v⟩=⟨v,u⟩¯\langle u,v\rangle=\overline{\langle v,u\rangle}活用して!さらに、コメントで指摘されているように、多値の複雑な関数の主要な値を選択することは、慣習に依存する可能性があります。 私の質問は次のとおりです。この複雑さは科学計算での複雑な算術演算の使用に対して真の危険を引き起こしますか?この問題は、複素数を常に実部と虚部に分割し、実算のみを使用することを提案するdeal.iiの著者によって強調されています。しかし、分割アプローチが便利だとは思いませんでした。たとえば、時間調和マックスウェル方程式のPMLについて考えます。 FreeFem ++およびlibmeshを除くほとんどのオープンソースFEMソフトウェアでは、複素数を使用することの心配が一般的であるようです。ただし、2つの例外についても、複雑な算術演算は実際よりもテストされていません。 私の最後の質問は、複素数の使用を常に避けなければならないのかということです。

6
C / C ++でBLASの参照レベルの実装はありますか?
netlib BLAS実装は優れたリファレンスであり、ほとんどが最適化されておらず、十分に文書化されています(例:zgemm)。ただし、Fortran 77に含まれているため、より現代的なプログラミング教育を受けた人にはややアクセスしにくくなっています。C / C ++にnetlibのようなBLASの参照レベルの実装はありますか?
11 blas  education 

2
GPUシステムでのBLAS / LAPACKまたはその他の線形代数ルーチンの最速の実装は何ですか?
たとえば、nVidiaにはCUBLASがあり、7-14倍の高速化が約束されています。簡単に言えば、これはnVidiaのGPUカードの理論的なスループットに近いものではありません。GPUでの線形代数の高速化における課題は何ですか?また、より高速な線形代数のルーティングが既に利用可能ですか?


1
行列の乗算パフォーマンスの急激な低下
行列がキャッシュに収まらない場合の密な行列乗算の実装について読んでいます。私が見たグラフの1つ(これらのスライドのスライド9 )は、単純なアルゴリズムを使用した場合のパフォーマンスの急激な低下を示しています。この低下は速度の約50%であり、マトリックスがまだキャッシュに収まっている間に発生し、1つまたは2つのサイズでのみ発生します。素朴なアルゴリズムを使用するつもりはありませんが、突然のパフォーマンス低下の原因を知りたいのですが。(低下はブロックされたアルゴリズムでも発生しますが、はるかに小さいです。)

4
DAXPY、DCOPY、DSCALはやりすぎですか?
インテルMKLにリンクすることにより、CGをFORTRANに実装しました。 次のようなステートメントがある場合:(Wikipediaを参照) p=r; x=x+alpha*p r=r-alpha*Ap; またはQMRの類似のもの(はるかに多い) v_tld = r; y = v_tld; rho = norm( y ); w_tld = r; z = w_tld; xi = norm( z ); (and more) DAXPY、DCOPY、DSCALなどのBLASレベル1実装を使用することには意味がありますか? 私の質問の動機は: アルゴリズムの実装は2つあります。NormsとMatVecsのみをMKLにリンクしたもの。コピー、スケーリング、追加は、Fortranの組み込み関数と、可能なすべてのサブルーチンがBLASによって実行される別の関数によって行われます。 私は、BLASより速くなることはできないという考えでした。しかし、Fortranの組み込み関数を使用する私のコードは、BLASレベル1サブルーチンを使用するコードよりも100%高速であることがわかりました(FWIW、これは小さな問題ではありませんでした。 GB RAM)。私は2スレッドで(2コアマシンで)両方を実行ifort QMR.f90 -mklしていましたMKL_DYNAMIC=TRUE 私がいたSOの質問を BLASの拡張に関するけど、私は自分のコードにBLASレベル1が含まれるようにしようとしたとして、私のコードは遅く、遅くなって続けました。 私は何か間違ったことをしていますか、これは予想されますか? また、BLASを拡張してy = 2.89*xbyのような自明ではない操作を行うことは理にかなっていDCOPY(n,2.89*x,1,y,1) or even DSCAL then DCOPYますか? また興味深いのは、パフォーマンスDDOTをDNRM2向上させることです。彼らは倍精度の乗算を実行するため、並列に配置すると役立つ可能性があるという事実に起因しました。 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.