Программирование на кластерах с использованием инструментов Intel (Intel Cluster Studio)

Библиотеки Intel. Intel® Math Kernel Library

Показывать лекцию целиком

Презентацию к данной лекции Вы можете скачать здесь.

Общая характеристика Intel® Math Kernel Library

Intel® Math Kernel Library (Intel® MKL) – вычислительная математическая библиотека, содержащая хорошо оптимизированные многопоточные реализации математических функций. Содержит BLAS, LAPACK, ScaLAPACK, солверы для разреженных систем, быстрое преобразование Фурье, векторизованные математические функции и т.д.

Многоплатформенная библиотека, однако ScaLAPACK не поддерживается в Mac OS* X.

Поддерживаются C и Fortran.

Входит в состав следующих пакетов:

  • IntelR Parallel Studio XE
  • IntelR Cluster Studio XE
  • IntelR C++ Studio XE
  • IntelR Composer XE
  • IntelR C++ Composer XE
  • IntelR Fortran Composer XE
  • Состав Intel® Math Kernel Library

    Основные операции с векторами и матрицами:

  • BLAS (Basic Linear Algebra Subroutines);
  • SparseBLAS (Basic Linear Algebra Subroutines);
  • PBLAS (Parallel BLAS).
  • BLAS – эффективная библиотека, в которой реализованы основные операции: векторно-векторные (1 уровень), матрично-векторные (2 уровень) и матрично-матричные (3 уровень). Библиотека оптимизируется под разные архитектуры и используется в качестве "ядра" других библиотек более высокого уровня).

    SparseBLAS – расширение BLAS для работы с разреженными векторами и матрицами.

    PBLAS – параллельная реализация BLAS для вычислительных систем с распределенной памятью. Построена на основе MPI.

    Модуль линейной алгебры (решение систем линейных алгебраических уравнений, решение спектральных задач). Включает следующие компоненты:

  • LAPACK (Linear Algebra PACKage);
  • ScaLAPACK.
  • ).

    ).

    Модуль линейной алгебры для разреженных матриц:

  • PARDISO (PARallel DIrect SOlver);
  • итерационные солверы для разреженных матриц.
  • ). Подпрограммы библиотеки реализованы как для систем с общей, так и с распределенной памятью.

    Векторные функции:

  • VML (Vector Mathematical Library);
  • VSL (Vector Statistical Library).
  • VML – векторные реализации математических функций.

    VSL – параллельные (многопоточные) реализации генераторов псевдослучайных чисел.

    Модуль быстрого преобразования Фурье:

  • FFT (Fast Fourier Transform);
  • ClusterFFT – кластерная реализация библиотеки быстрого преобразования Фурье.
  • Модуль поддержки решения дифференциальных уравнений в частных производных:

  • TT (Trigonometric Transforms);
  • PL (Poisson Library).
  • Optimization solvers (метод наименьших квадратов):

    BLAS – Basic Linear Algebra Subroutines

    BLAS – Basic Linear Algebra Subroutines

    Структура:

  • 1 уровень: векторно-векторные;
  • 2 уровень: матрично-векторные;
  • 3 уровень: матрично-матричные.
  • Форматы хранения матриц:

  • плотный – матрица хранится в двумерном массиве;
  • упакованный – используется для симметричных или треугольных матриц. Элементы матрицы хранятся последовательно, по столбцам;
  • ленточный – используется для ленточных матриц. Двумерный массив хранит диагонали матрицы.
  • Производительность

    SparseBLAS

    Основные операции с разреженными векторами и матрицами.

    Структура:

  • 1 уровень: операции с разреженными векторами;
  • 2 уровень: операции с разреженными матрицами и плотными векторами;
  • 3 уровень: операции с разреженными и плотными матрицами.
  • Разнообразные форматы хранения матриц.

    Производительность

    LAPACK – Linear Algebra PACKage

    Структура:

  • системы линейных алгебраических уравнений: факторизация матриц, решение систем линейных алгебраических уравнений, оценка обусловленности, уточнение решения и оценка его погрешности, обращение матриц;
  • решение спектральных задач для симметричных и несимметричных матриц, метод наименьших квадратов: ортогональные разложения (QR, LQ), сингулярные разложения, линейный метод наименьших квадратов, обобщенный метод наименьших квадратов;
  • вспомогательные процедуры.
  • Производительность

    Солверы для разреженных систем

    SS – Sparse Solvers

    Прямые солверы:

  • PARDISO (PARallel DIrect Solver) – параллельный прямой солвер;
  • DSS (Direct Sparse Solver) – солвер разреженных систем, прямой метод.
  • Итерационные солверы:

  • CG (Conjugate Gradients) – метод сопряженных градиентов;
  • FGMRES (Generalized Minimal RESidual) – метод обобщенных минимальных невязок.
  • Предобуславливатели:

  • ILUO;
  • ILUT (Incomplete LU).
  • VML – Vector Mathematical Library

    Векторизованные математические функции.

    Структура

    Вещественные функции (неполная выборка)
    Тригонометрические Гиперболические Степени и корни Экспоненциальные, логарифмические Спецфункции Арифметические Округление
    Sin Sinh Pow2o3 Exp Erf Add Floor
    Cos Cosh Pow3o2 Ln Erfc Sub Cell
    Tan Tanh Pow Log10 ErfInv Sqr Trunc
    Asin Asinh Powx Exm1p ErfcInv Mul Round
    Acos Acosh Sqrt Log1p TGamma Abs NearbyInt
    Atan Atanh InvSqrt LGamma LinearFrac Rint
    Комплексные функции (неполная выборка)
    Тригонометрические Гиперболические Степени и корни Экспоненциальные, логарифмические Арифметические
    Sin Sinh Pow Exp Add
    Cos Cosh Powx Ln Sub
    Tan Tanh Sqrt Log10 Div
    Asin Asinh Mul
    Acos Acosh Abs
    Atan Atanh Conj

    Форматы

    Вещественный и комплексный, с простой и двойной точностью.

    Режимы точности и производительности

    Повышенная точность (HA – High Accuracy). Правильное округление выполняется более чем в 99% случаев. Самый медленный режим.

    Пониженная точность (LA – Low Accuracy). Неправильными могут быть до двух младших (наименее значимых) разрядов. Производительность, по сравнению с режимом высокой точности выше на 30-50%.

    Режим улучшенной производительности (EP – Enhanced Performance). Неправильными могут быть до половины двоичных разрядов. Производительность, по сравнению с режимом низкой точности выше на 30-50%.

    Библиотека поддерживает динамическое управление точностью.

    Формат вызова

    Вещественный и комплексный, с простой и двойной точностью.

    v(s, d)Exp(n, input_array, output_array)

    Функции VML могут вызываться в режиме in-place, когда входной и выходной массивы занимают одно и то же положение в памяти.

    Изменение режима точности

    Вызовом vmlSetMode(VML_EP)

    VSL – Vector Statistical Library

    Векторизованные функции генерации псевдо/квазислучайных чисел, статистика.

    Структура

    Генераторы случайных чисел (равномерное распределение) Генераторы псевдослучайных чисел (неравномерное распределение) Статистика
    Псевдослучайные Квазислучайные Непрерывные Дискретные
    Мультипликативный конгруэнтный 59-разрядный Соболя Равномерное Равномерное Центральные моменты до 4-го порядка включительно
    Мультипликативный конгруэнтный 31-разрядный Нидеррайтера Нормальное Бернулли Эксцесс, асимметрия
    На сдвиговом регистре с обратной связью Экспоненциальное Биномиальное Квантили, порядковые статистики
    Mersenne Twister Коши Гипергеометрическое Матрицы ковариации и корреляции
    Генератор Wichmann-Hill Бета Пуассона

    Заголовочный файл

    #include "mkl_vsl.h"

    Инициализация

    status = vslNewStream(stream, VSL_BRNG_MT19937, SEED)

    Генерация псевдо(квази)случайных значений

    status = vdRngUniform(method, stream, vector_size, r, 0.0, 1.0)

    Деинициализация

    status = vslDeleteStream(stream)

    FFT - Fast Fourier Transform Library

    FFT – Fast Fourier Transform

    Быстрое преобразование Фурье

  • Размерность: 1, 2, 3 и более.
  • Совместимость с FFTW (поддерживаются соответствующие интерфейсы).
  • Поддержка многопоточности, архитектур SMP и кластерных.
  • Поддержка преобразований со смешанным основанием.
  • Производительность

    DFL – Data Fitting Library

    Векторизованные функции, предназначенные для фитирования данных.

    Структура

    Сплайны Тип сплайна Граничные условия Внутренние условия
    Линейные 1-я производная
    Квадратичные Свободные 2-я производная
    Кубические Натуральные, эрмитовы, Бесселя, Акимы 1-я производная на левой/правой границах интервала Массив узлов
    Кусочно-постоянные Непрерывные слева, непрерывные справа Периодические
    Определенные пользователем

    Производительность

    Примеры

    Вычисление скалярного произведения

    #include <windows.h>
    #include <stdio.h>
    #include "mkl.h"
    
    #include "gettimeofday.h"
    #define N 100000000
    
    double a[N + 1], b[N + 1];   
    int i;   
    double gDotProduct = 0;
    
    int main()
    {
    // initialize vectors   
    for (i = 0; i < N; i++) 
    {      
      a[i] = 1.034; b[i] = 1.057;
    }
    printf("Computed value of vector sum: ");
     gDotProduct = cblas_ddot(N, a, 1, b, 1);
    //print dot product  
    printf("sum = %f\n", gDotProduct);   
    }

    Вычисление собственных значений

    program eigenLAPACK
    integer, parameter ::  NIN = 5, NOUT = 6
    integer :: I, IFAIL, INFO, J, N
    character(1) ::  UPLO='U'
    real, allocatable, dimension(:,:) :: A
    real, allocatable, dimension(:)   :: D
    real, allocatable, dimension(:)   :: E, TAU
    real, allocatable, dimension(:)   ::  WORK
    real, allocatable, dimension(:,:) :: Z
    external  f06qfe, sorgtr, ssteqr, ssytrd, x04cae
    
    write(NOUT, *) 'N=?'
    read(NIN,*) N
    
    allocate(D(N))
    LWORK = 64 * N
    allocate(WORK(LWORK))
    allocate(E(N-1))
    allocate(TAU(N-1))
    LDA = N
    allocate(A(LDA, N))
    LDZ = N
    allocate(Z(LDZ, N))
    allocate(TAU(N-1))
    LDA = N
    allocate(A(LDA, N))
    LDZ = N
    allocate(Z(LDZ, N))
    
    !
    !       Initialization of upper triangular part of A
    !
    
     do i=1, N
      do j=i, N
       a(i, j)=3.8*i-2.*j
      enddo
    enddo
    
    !
    ! Reduce A to tridiagonal form
    !
    
    call ssytrd(UPLO, N, A, LDA, D, E, TAU, WORK, LWORK, INFO)
    !
    !        Copy A into Z
    !
    
    call f06qfe(UPLO, N, N, A, LDA, Z, LDZ)
    
    !
    !  Form Q explicitly, storing the result in Z
    !
    
    call sorgtr(UPLO, N, Z, LDZ, TAU, WORK, LWORK, INFO)
    
    !
    ! Calculate all the eigenvalues and eigenvectors of A
    !
    
    call ssteqr('V', N, D, E, Z, LDZ, WORK, INFO)
    
    write(NOUT,*)
    if(INFO >0) then
     write(NOUT,*) 'Failure to converge.'
    else
    !
    ! Uncomment to print eigenvalues and eigenvectors
    !
    
    !write(NOUT,*) 'Eigenvalues'
    !write(NOUT, "(3X,(8F12.4))") (D(I),I=1,N)
    !IFAIL = 0
    !
    !call x04cae('General', ' ', N, N, Z, LDZ, 'Eigenvectors', IFAIL)
    
    end if
    
    deallocate(D)
    deallocate(WORK)
    deallocate(E)
    deallocate(TAU)
    deallocate(A)
    deallocate(Z)
    
    end
    Вернуться к учебному плану