Bài viết này cho thấy làm thế nào để sử dụng cblas (và những người khác) trong C với một ví dụ đơn giản: http://www.seehuhn.de/pages/linear
tôi đã trích dẫn phần liên quan bên dưới trong trường hợp trang web bị hỏng.
Sử dụng BLAS
Để kiểm tra thói quen BLAS chúng tôi muốn thực hiện một phép nhân ma trận vector đơn giản. Đọc tệp blas2-paper.ps.gz chúng tôi thấy rằng tên của hàm Fortran tương ứng là DGEMV. Văn bản blas2-paper.ps.gz cũng giải thích ý nghĩa của các đối số cho hàm này. Trong cblas.ps.gz chúng ta thấy rằng tên hàm C tương ứng là cblas_dgemv. Ví dụ sau sử dụng hàm này để tính các sản phẩm ma trận vector
/ 3 1 3 \ /-1 \
| 1 5 9 | * | -1 |.
\ 2 6 5/ \ 1/
Ví dụ tập tin 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;
}
Để biên dịch chương trình này, chúng ta sử dụng lệnh sau.
cc testblas.c -o testblas -lblas -lm
Kết quả của chương trình thử nghiệm này là
3.0 1.0 3.0
1.0 5.0 9.0
2.0 6.0 5.0
-1.0
3.0
-3.0
đó cho thấy rằng tất cả mọi thứ đã làm việc tốt và chúng ta thậm chí không sử dụng ma trận transposed do nhầm lẫn.
Tôi nghĩ liên kết này đã biến mất: - \ – Plamen