2010-10-11 3 views
9

Может ли кто-то рекомендовать хорошую ссылку или учебник для интерфейса cblas? В google ничего не появляется, все страницы man, которые я нашел, предназначены для интерфейса fortran blas, а pdf-файл, который поставляется с MKL, буквально занимает десять секунд для поиска и не помог.Любая хорошая документация для интерфейса cblas?

В частности, мне любопытно, почему есть дополнительный параметр для строки и столбца; не могут ли те же операции уже выполняться с помощью флагов транспонирования? Похоже, что дополнительный параметр только усложняет уже уже подверженный ошибкам интерфейс.

ответ

1

В этой статье показано, как использовать cblas (и другие) в C с помощью простого примера: 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; 
} 

Чтобы скомпилировать эту программу, мы используем следующую команду.

куб.см 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 

, который показывает, что все работает нормально, и что мы даже по ошибке не использовал транспонированную матрицу.

Смежные вопросы