14

誰かが cblas インターフェースの良いリファレンスやチュートリアルを推薦できますか? 私が見つけたすべてのマニュアルページは fortran blas インターフェイス用であり、MKL に付属の pdf は文字通り検索に 10 秒かかり、役に立ちませんでした。

特に、行優先と列優先の追加のパラメーターがある理由に興味があります。転置フラグを使用して同じ操作を行うことはできませんか? 追加のパラメーターは、既にエラーが発生しやすいインターフェイスに複雑さを加えるだけのようです。

4

2 に答える 2

5

この記事では、C で cblas (およびその他) を使用する方法を簡単な例で示します: http://www.seehuhn.de/pages/linear

サイトがダウンした場合に備えて、関連する部分を以下に引用しました。

BLASの使用

BLAS ルーチンをテストするために、単純な行列とベクトルの乗算を実行します。ファイル blas2-paper.ps.gz を読むと、対応する Fortran 関数の名前が DGEMV であることがわかります。テキスト blas2-paper.ps.gz も、この関数の引数の意味を説明しています。cblas.ps.gz では、対応する C 関数名が cblas_dgemv であることがわかります。次の例では、この関数を使用して行列ベクトル積を計算します。

/ 3 1 3 \   / -1 \
| 1 5 9 | * | -1 |.
\ 2 6 5 /   \  1 /

サンプル ファイルtestblas.c :

#include <stdio.h>
#include <cblas.h>

double m[] = {
  3, 1, 3,
  1, 5, 9,
  2, 6, 5
};

double x[] = {
  -1, -1, 1
};

double y[] = {
  0, 0, 0
};

int
main()
{
  int i, j;

  for (i=0; i<3; ++i) {
    for (j=0; j<3; ++j) printf("%5.1f", m[i*3+j]);
    putchar('\n');
  }

  cblas_dgemv(CblasRowMajor, CblasNoTrans, 3, 3, 1.0, m, 3,
          x, 1, 0.0, y, 1);

  for (i=0; i<3; ++i)  printf("%5.1f\n", y[i]);

  return 0;
}

このプログラムをコンパイルするには、次のコマンドを使用します。

cc testblas.c -o testblas -lblas -lm

このテスト プログラムの出力は次のとおりです。

 3.0  1.0  3.0
 1.0  5.0  9.0
 2.0  6.0  5.0
-1.0
 3.0
-3.0

これは、すべてが正常に機能し、転置行列を誤って使用していないことを示しています。

于 2012-12-02T20:30:11.117 に答える
3

intro_cblas の irix man ページはかなり良いです:

http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?cmd=getdoc&coll=0650&db=man&fname=3%20INTRO_CBLAS

于 2010-10-11T15:25:03.367 に答える