2010-10-11 30 views
9

Ai đó có thể giới thiệu một tài liệu tham khảo hoặc hướng dẫn tốt cho giao diện cblas không? Không có gì xuất hiện trên google, tất cả các trang của người đàn ông tôi tìm thấy đều dành cho giao diện fortran blas và pdf đi kèm với MKL nghĩa là mất mười giây để tìm kiếm và không hữu ích.Bất kỳ tài liệu nào tốt cho giao diện cblas?

Đặc biệt, tôi tò mò vì sao có tham số bổ sung cho hàng so với cột-chính; không thể thực hiện các thao tác tương tự với cờ chuyển tiếp? Có vẻ như tham số bổ sung chỉ thêm độ phức tạp cho giao diện đã bị lỗi.

Trả lời

1

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.

Các vấn đề liên quan