私は多くのノルム、ドットプロダクト、そして最も重要なのはマトリックスベクトル乗算を実行する必要があるアプリケーションを持っています。BLAS 2用Fortran vs
マトリックスおよびベクトルは、巨大です。
while(condition)
/* usually iterations=dimension of matrix, so around 1 million iterations are *at least* required (if not more) */
matrix-vector multiplication
3 dot prods
2 norms
私は現在、インテルMKLとインテル®Fortranを使用しています:行列の次元は、ループ構造がある100000x100000
なる傾向にあります。インテル®MKLのインテル®Cでコードを書き直すのに役立ちますか? 誰かが(特にDGEMVの)あらゆる種類のベンチマークを実行しましたか? コードの書き換えは大きな痛みですが、理由がわかったら書き直しても大丈夫です。
編集:私は間違っています:マトリックスの寸法は百万ではなく100000です。かなり重大なエラー:|
はい、行列は、密度が高く、密度が高い必要があります。です。 さらに、それは対称ではなく、正定でさえありません。 私のアルゴリズムはQMRの修正版です。
4000Gbの高密度マトリクスで作業していますか?もっと教えてください.... – talonmies
1Mx1Mの倍数の行列には8 TB(8,000 GB)のメモリが必要です。あなたは本当に密な行列が本当に必要であると確信していますか?あなたのアルゴリズムは、行列ベクトル積を必要とする典型的な反復線形代数アルゴリズムのように聞こえます。私はあなたのマトリックスが疎な構造を持っていると確信しています。そのため、標準的なBLASルーチンの一部ではない特別なデータ構造が存在します。これは、言語を切り替えることによって得られる小さなスピードアップ(もしあれば)を与えるのではなく、O(n^3)からO(n^2)までコードを高速化するため、最適化を探す最初のポイントになります。 –
Intel Cとは何ですか? ISO C99またはその他の標準言語を使用する必要があります。インテルの従業員として書いていますので、私は確かに反インテルではありません:-) – Jeff