Компиляция кода Фортрана с использованием модулей BLAS (LAPACK) - PullRequest
0 голосов
/ 13 декабря 2018

Я только начал использовать Fortran и у меня возникла проблема с использованием модулей BLAS из (?) LAPACK в моей программе.

Я работаю в Ubuntu 18.04, я уже установил (?)Пакеты LAPACK и BLAS по команде sudo apt-get install libblas-dev liblapack-dev.Я также скачал LAPACK с сайта http://www.netlib.org/lapack/ и установил его в соответствии с этим видео .

В моей программе предполагается использовать модуль blas_sparse, поэтому я написал что-то вродечто:

program example

use blas_sparse

implicit none

    ! some code ...

end program example

Я пытаюсь скомпилировать мой код (example.F90), используя gfortran, с помощью следующей команды:

gfortran example.F90 -llapack -lblas

как в в этом примере видео (1:11).Однако это не работает, компилятор возвращает:

example.F90:3:8:

 use blas_sparse
    1
Fatal Error: Can't open module file ‘blas_sparse.mod’ for reading at (1): No such file or directory

В чем здесь проблема?Я вижу три возможные причины:

  1. Код неверный.
  2. Команда, которую я использую для компиляции, неверна.
  3. LAPACK и BLAS на самом деле не установлены.

объявление.1. Может быть, мне стоит добавить модуль с именем blas_sparse в мой код?Более того, это просто перемещает проблему в другое место, потому что мне все еще нужно каким-то образом импортировать процедуры из BLAS.К сожалению, я действительно не знаю, как работает команда use, поэтому я не знаю, что мне следует изменить.

ad.2. Может быть, мой компилятор просто не знает, где находятся библиотеки -llapack и -lblas.Я пытался написать это явно, используя команду

gfortran example.F90 -llapack -lblas -L/usr/local/lib

, потому что при установке LAPACK и BLAS я создал символические ссылки на liblapack.a и liblapack.a (см. П. 3.).Я не знаю, что такое флаги -llapack и -lblas, и мне сложно проверить, «компилятор» их «видит».

ad.3. Чтобы установить BLAS и LAPACK на свой компьютер, я сделал следующее:

  • загрузив LAPACK 3.8.0 с веб-сайта netlib.org/lapack
  • , используя следующие команды для извлечения библиотеки иустановить файлы на мой компьютер

:

tar zxvf lapack-3.8.0.tar.gz
cd lapack-3.8.0/
cp make.inc.example make.inc
make blaslib
make lapacklib
sudo ln -s /home/Download/lapack-3.8.0/liblapack.a /usr/local/lib/liblapack.a
sudo ln -s /home/Download/lapack-3.8.0/librefblas.a /usr/local/lib/librefblas.a

А также установить его через apt-get:

sudo apt-get install libblas-dev liblapack-dev

Я буду очень благодарен залюбая помощь для решения этой проблемы.

РЕДАКТИРОВАТЬ:

Я действительно обнаружил, что я должен создать эти .mod файлы, используя blas_sparse.f90, blas_sparse_namedconstant.f90 и blas_sparse_proto.h файлы из Сайт BLAST .Первые два из них я только что добавил в свой код как модули, и компилятор gfortan создает правильные (я надеюсь) файлы .mod.Однако третий написан на языке Си, поэтому я не могу просто вставить его в свой код.

Так что теперь вопрос в том, как связать файл .h с моим кодом.Нужно ли создавать какой-либо makefile или компилировать .h файл для создания .mod файла?

EDIT2:

Похоже, я просто не установил разреженный BLAS из Сайт BLAST ...

1 Ответ

0 голосов
/ 13 декабря 2018

Вы используете не просто обычный BLAS, о котором говорится в большинстве уроков, вопросов и ответов.На самом деле вы используете современные интерфейсы Fortran с использованием модулей.

Большинство компиляторов используют файлы .mod для описания модулей, и вы должны сообщить компилятору, где он найдет эти файлы для вашего разреженного BLAS.В gfortran вы делаете это, используя -Ipath, где path - это путь к этим файлам .mod.Это очень похоже на необходимость заголовочных файлов в C ++ в связанном вопросе Разве разреженный BLAS не включен в BLAS?

...