Форма поиска

 

Библиотеки. BLAS, LAPACK и MKL

Расположение библиотек в Вычислительном центре СПбГУ

Название Язык Бибилиотека Заголовок
BLAS  Фортран /usr/local/mathlib/blas/3.8.0/lib/ -
LAPACK  Фортран /usr/local/mathlib/lapack/3.8.0/lib/ -
СBLAS  Си /usr/local/mathlib/cblas/lib/ /usr/local/mathlib/cblas/include/
LAPACKE Си /usr/local/mathlib/lapacke/3.8.0/lib/ /usr/local/mathlib/lapacke/3.8.0/include/
CLAPACK  Си /usr/local/mathlib/clapack/3.2.1/lib/ /usr/local/mathlib/clapack/3.2.1/include/
ScaLAPACK  Фортран /usr/local/mathlib/scalapack/2.0.2/lib/ -

 

СОДЕРЖАНИЕ:

1) BLAS
2) LAPACK
3) MKL
Введение
  При моделировании физических процессов требуется очень много ресурсов, поэтому очень остро стоит проблема разработки экономичных алгоритмов, которые эффективно используют ограниченную память. Кроме того, проблемой является эффективное программирование, которое позволяет экономить время счёта средством эффективного использования архитектуры компьютера. За долгое время численного моделирования были выработаны основные базовые составляющие любого программного комплекса. Их объединением стали библиотеки, которые содержали основные функции для создания программ численного моделирования. Примером таких библиотек являются  BLAS и LAPACK
 
BLAS 
BLAS (англ. Basic Linear Algebra Subprograms — базовые подпрограммы линейной алгебры) — стандарт де-факто интерфейса программирования приложений для создания библиотек, выполняющих основные операции линейной алгебры, такие как умножение векторов и матриц.
 
Впервые опубликован в 1979 году, и использован для создания больших пакетов, например LAPACK. Интенсивно используемые в высокопроизводительных вычислениях, высокооптимизированные реализации интерфейса BLAS были разработаны производителями аппаратного обеспечения, такими как Intel, а также другими авторами (например, ATLAS — переносимый самооптимизирующийся BLAS). Тест LINPACK Benchmark в своей работе основывается в большой степени на DGEMM, подпрограмме BLAS.
 
 
LAPACK
LAPACK (Linear Algebra PACKage) — библиотека с открытым исходным кодом, содержащая методы для решения основных задач линейной алгебры. Написана на языке Fortran с использованием другой библиотеки BLAS и является развитием пакета LINPACK.
 
 
MKL
 Каждый производитель процессоров разрабатывает собственную библиотеку, функции которой имеют тот же интерфейс, что и функции общепринятых библиотек. Естественно реализация «родных» библиотек учитывает архитектуру процессора. Одними из распространённых процессоров являются процессоры фирмы Intel, которая создала собственную библиотеку Math Kernel Library (MKL), базирующуюся на библиотеках BLAS и LAPACK. 
 
 
Рассмотрим некоторые функции этой библиотеки:
 
1. умножение вектора на число,
2. сложение векторов,
3. копирование векторов,
4. скалярное произведение,
5. вычисление эвклидовой нормы вектора,
6. умножение разреженной матрицы на вектор.
 

MKL. Быстрая линкова - опция "-mkl"

Опция комплилятора Intel "-mkl" осуществляет автоматическую линковку нужных MKL-библиотек с вашей программой. 

Поддерживаемые опции:

-mkl or -mkl=parallel происходит связь с многопоточными библиотеками Intel MKL (либо OpenMP - "-qopenmp", либо TBB - "-tbb")
-mkl=sequential связь с последовательными библиотеками Intel MKL 
-mkl=cluster связь с кластерной версией  Intel MKL, которая использует Intel MPI

Примечание:

- опция "-qopenmp" имеет более высокий приоритет, чем "-tbb", при выборе уровня потоковой передачи Intel MKL для связывания.

- в системах архитектуры Intel® 64 для каждого варианта опции -mkl компилятор связывает ваше приложение с использованием интерфейса LP64;

- в случаях, не предусмотренных опцией -mkl, используйте Link-line Advisor 

- использование библиотек "ILP64 либо LP64" зависит от количества элементов массива, если элементов более 231-1, то "ILP64"

- официальная инструкция

- перед сборкой программы при помощи Intel 2018, необходимо обязательно добавить переменные окружения:

$ source /usr/local/ipsxece/ipsxece_2018_u3/bin/compilervars.sh intel64 # компиляторы: icc, ifort
$ source /usr/local/ipsxece/ipsxece_2018_u3/mkl/bin/mklvars.sh intel64 # Intel MKL
$ source /usr/local/ipsxece/ipsxece_2018_u3/impi/2018.3.222/bin64/mpivars.sh # Intel MPI
 
Примеры:
1) Автоматическая линковка с Intel MKL (OpenMP):
$ ifort myprog.f -mkl
 
2) Статическая линковка c Intel MKL (OpenMP):
$ MKLPATH=$MKLROOT/lib/ia64_lin
$ MKLINCLUDE=$MKLROOT/include
$ ifort myprog.f -L$MKLPATH -I$MKLINCLUDE \
  -Wl,--start-group \
    $MKLPATH/libmkl_intel_lp64.a \
    $MKLPATH/libmkl_intel_thread.a \
    $MKLPATH/libmkl_core.a \
  -Wl,--end-group \
    -liomp5 \
    -lpthread \
    -lm
 
3) Динамическая линковка c Intel MKL (OpenMP):
$ MKLPATH=$MKLROOT/lib/ia64_lin
$ MKLINCLUDE=$MKLROOT/include
$ ifort myprog.f -L$MKLPATH -I$MKLINCLUDE \
  -lmkl_intel_lp64 \
  -lmkl_intel_thread \
  -lmkl_core \
  -liomp5 \
  -lpthread \
  -lm