2010-10-11 9 views
9

Czy ktoś może polecić dobre referencje lub samouczek dla interfejsu cblas? Nic nie pojawia się w google, wszystkie strony podręcznika mana, które znalazłem, są przeznaczone dla interfejsu "fortran", a plik pdf dołączony do MKL dosłownie potrzebował dziesięciu sekund na przeszukanie i nie był pomocny.Dobra dokumentacja interfejsu cblas?

W szczególności jestem ciekawy, dlaczego istnieje dodatkowy parametr dla wiersza vs. kolumna-dur; czy nie można już uzyskać takich samych operacji za pomocą flag transpozycji? Wydaje się, że dodatkowy parametr tylko zwiększa złożoność już i tak już podatnego na błędy interfejsu.

Odpowiedz

1

Ten artykuł pokazuje jak używać cblas (i inne) w języku C z prostym przykładzie: http://www.seehuhn.de/pages/linear

I zacytował odpowiednią część poniżej w przypadku awarii witryny.

Korzystanie Blas

Aby przetestować procedury BLAS chcemy wykonać proste mnożenie macierzy wektorowych. Odczytując plik blas2-paper.ps.gz stwierdzamy, że nazwa odpowiedniej funkcji Fortrana to DGEMV. Tekst blas2-paper.ps.gz wyjaśnia także znaczenie argumentów dla tej funkcji. W pliku cblas.ps.gz stwierdzamy, że odpowiednia nazwa funkcji C to cblas_dgemv. W poniższym przykładzie użyto tej funkcji do obliczania iloczyn macierzowy-wektor

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

przykład pliku 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; 
} 

do kompilacji program zastosowano następujące polecenia.

cc testblas.c -o testblas -lblas -lm

Wyjście tego programu badawczego jest

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

co pokazuje, że wszystko działało w porządku i że przez pomyłkę nawet nie użył transponowanej matrycy.

Powiązane problemy