Любая хорошая документация для интерфейса cblas?

Может кто-нибудь порекомендовать хороший справочник или учебник по интерфейсу cblas? В Google ничего не появляется, все справочные страницы, которые я нашел, посвящены интерфейсу Fortran Blas, а PDF-файл, поставляемый с MKL, буквально занимал десять секунд для поиска и не помог.

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

2 ответа

В этой статье показано, как использовать cblas (и другие) в C на простом примере: http://www.seehuhn.de/pages/linear

Я процитировал соответствующую часть ниже на случай, если сайт отключится.

Использование BLAS

Чтобы протестировать процедуры BLAS, мы хотим выполнить простое умножение матрицы на вектор. Читая файл blas2-paper.ps.gz, мы обнаруживаем, что именем соответствующей функции на Фортране является 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

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

Справочная страница irix для intro_cblas довольно хороша:

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

Другие вопросы по тегам