2014-10-05 4 views
1

Я новичок в BLAS и пытаюсь скомпилировать мою программу Fortran, которая использует BLAS для матрично-матричного умножения. У меня есть две матрицы А и В.fortran compile blas program error

integer, parameter :: RK = selected_real_kind(10,2) 
real(kind=RK),pointer :: A(:,:), B(:,:), C(:,:) 

тогда я поставить некоторые случайные значения в него и попытаться умножить:

call dgemm('N', 'N', N, N, N, 1.0_RK, 
     A, N, B, N, 0.0_RK, C, N) 

N является размер обеих матриц. Правильно ли все параметры?

Я не могу скомпилировать и получить следующее сообщение об ошибке:

call dgemm('N', 'N', N, N, N, 1.0_RK, 
             1 
Error: Syntax error in argument list at (1) 
matrixmul.F90:44.2: 

    A, N, B, N, 0.0_RK, C, N) 
    1 
Error: Unclassifiable statement at (1) 

В чем проблема? Должен ли я скомпилировать определенный флаг BLAS? Я установил BLAS как explained here.

ответ

3

Вы не можете просто продолжать на новой линии в Fortran, необходимо обозначить конец линии для продолжения:

call dgemm('N', 'N', N, N, N, 1.0_RK, & 
     A, N, B, N, 0.0_RK, C, N) 

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

Не существует специального BLAS-флага, вам нужно только сообщить компоновщику, который вы хотите связать с библиотекой BLAS. В моей операционной системе это делается -lblas или -lmkl или аналогичным.

+0

Thans! Теперь я компилирую с -lblas и имею еще одну ошибку: matrixmul.F90 :(. Text + 0x592): неопределенная ссылка на 'dgemm_ '. Как я могу проверить, что BLAS установлен? – Bob

+0

искать 'libblas.so' или' libblas.a' или 'blas.dll' Какую ОС у вас? –

+0

My OS - Ubuntu 12.04 и после поиска у меня есть: /etc/alternatives/libblas.a /usr/lib/libblas.a /usr/lib/libblas/libblas.a, который указывает, что эта библиотека установлена. – Bob