Библиотеки подпрограмм для многопроцессорных вычислительных систем
А.А. Чаплинский,
студент кафедры информационных систем МГУП имени Ивана Федорова1
В статье, в сжатой форме рассмотрены существующие на данный момент библиотеки подпрограмм, направленные на решение задач линейной алгебры с использованием многопроцессорных вычислительных систем. Для каждой библиотеки перечислены ее основные возможности и особенности. Представленные библиотеки охватывают собой различные архитектуры и вычислительные платформы.
Использование многопроцессорных систем значительно расширяет возможности решения сложных вычислительных задач. Однако разработка эффективных программ для многопроцессорных систем представляет собой достаточно трудную задачу. Эту задачу можно облегчить, используя различные библиотеки подпрограмм.
Одной из первых и основных областей приложения параллельных вычислений является линейная алгебра. Решение систем линейных алгебраических уравнений лежит в основе численных методов большого класса научных приложений и на ее решение может приходиться до 85% операций с плавающей точкой всего приложения [1]. Таким образом, настройка производительности научного приложения (именно на этом уровне решения численной задачи) позволяет получить наиболее существенный выигрыш.
На сегодняшний день существует целый ряд подобных библиотек. Большая их часть в своей основе содержит BLAS (Basic Linear Algebra Subprograms - базовые подпрограммы линейной алгебры) [2]. BLAS де-факто является стандартным API для создания библиотек, вы-
1 Научный руководитель А.А. Марков, д.т.н., профессор.
полняющих операции линейной алгебры. Функционально BLAS делится на три уровня: операции типа «вектор-вектор», операции типа «матрица-вектор» и операции вида «матрица-матрица». Например, в Листинге 1 приведена программа для перемножения матриц на языке Си с использованием BLAS.
Листинг№ 1
int main (void) i double a[] = { 0.11, 0.12, 0.13, 0.21, 0.22, 0.23 }; double b[] = { 1011, 1012, 1021, 1022, 1031, 1032 }; double c[] = i 0.00, 0.00, 0.00, 0.00 I;
gsl_matrix_view A = gsl_matrix_view_array(a, 2, 3); gsl_matrix_view B = gsl_matrix_view_array(b, 3, 2); gsl_matrix_view C = gsl_matrix_view_array(c, 2, 2); /* Compute C = A B */
gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0, &A.matrix, &B.matrix, 0.0, &C.matrix); printf (»[ %g, %g\n», c[0], c[1]); printf (» %g, %g ]\n», c[2], c[3]);
return 0; I
Вывод программы будет следующим: [ 367.76, 368.12 674.06, 674.72 ]
На основе BLAS создано множество различных реализаций, одной из первых и наиболее популярных является LAPACK (Linear Algebra PACKage) [3], созданная в 1989 году. Однако она не использует возможности параллелизма.
Для обеспечения параллелизации вычислений в кластерных системах используются специальные библиотеки, осуществляющие передачу данных и команд между элементами кластера. Наиболее распространенными являются библиотеки MPI (Message Passing Interface) и PVM (Parallel Virtual Machine). Они обе имеют множество реализаций, как открытых, так и коммерческих, предназначенных для различных платформ.
Существует свободно распространяемая версия LAPACK, реализующая параллельные вычисления - ScaLAPACK [4]. Пакет ScaLAPACK в работе с матрицами опирается на набор библиотек, осуще-
ствляющих примитивные операции и распределенные вычисления: BLAS,r LAPACK,r BLACS (Basic Linear Algebra Communication Subprograms -набор подпрограмм, предназначенных для распределенной работы с объектами линейной алгебры), PBLAS (аналог BLAS для распределенных вычислений).
Для распараллеливания в ScaLAPACK была выбрана схема организации процессов (программ, выполняемых на разных компьютерах или процессорах), в которой они образуют двумерную сетку, т. е. каждому процессу сопоставляется номер строки и номер столбца в сетке. Это позволяет распределять данные между процессами наиболее эффективным образом. Блочно-циклическая схема (block-cyclic distribution) , используемая ScaLAPACK при работе с плотными матрицами, представляет собой такое распределение данных, при котором сначала матрица разбивается на блоки равного размера, которые, в свою очередь, передаются процессам циклически.
ScaLAPACK на данный момент имеет реализацию только для операционных систем семейства Unix. Ее аналогом на операционных системах семейства Windows является PLAPACK [5].
В 2008 году была впервые представлена библиотека PLASMA (Parallel Linear Algebra Software for Multicore Architectures - Параллельное программное обеспечение для решения задач линейной алгебры на многоядерных архитектурах). Ее целью является увеличение эффективности решения задач линейной алгебры на современных компьютерах с многоядерными процессорами [6]. Также PLASMA использует новые или улучшенные алгоритмы. Однако по сравнению с LAPACK, PLASMA обладает более ограниченным функционалом, в частности, не поддерживаются ленточные матрицы и нахождение собственных значений. В то же время PLASMA, в отличие от ScaLAPACK, не поддерживает использование распределенной памяти (distributed memory), ограничиваясь лишь поддержкой общей (shared-memory). Также, для увеличения производительности PLASMA, важно использовать оптимизмро-ванную реализацию BLAS для используемой платформы. Многие реализации поставляются бесплатно производителями процессоров, например:
• AMD Core Math Library (ACML) от AMD,
• Math Kernel Library (MKL) от Intel,
• Engineering and Scientific Software Library (ESSL) от IBM,
• VecLib от Apple.
Кроме того, существуют открытые альтернативы, такие как Goto BLAS, Automatically Tuned Linear Algebra Software (ATLAS).
Также важно отметить, что при использовании PLASMA не следует использовать применяемый во многих реализациях BLAS параллелизм, основанный на многопоточности, так как PLASMA исполь-
зует BLAS только для операций на одном ядре, а параллелизм проявляется на алгоритмическом уровне, над уровнем BLAS.
В 2009 году появилась первая реализация другого проекта MAGMA (Matrix Algebra on GPU and Multicore Architectures), который предназначен для использования на гибридных и гетерогенных архитектурах, в первую очередь с использованием GPU и многоядерных процессоров [7]. На данный момент (версия 0.2) поддерживается один GPU. MAGMA предоставляет исследователю интерфейс, похожий на LAPACK. Для каждой функции есть два варианта: один для CPU, другой для GPU. В то же время библиотека использует стандартный формат данных, поэтому может быть использована как дополнение к LAPACK для увеличения производительности. В MAGMA также используется специальная реализация BLAS (MAGMA BLAS), которая основана на CUBLAS, реализации BLAS от NVIDIA для платформы CUDA.
На рис. 1 показан график зависимости производительности (ГФлоп/с) от размера матрицы при выполнении разложения Холецко-го с помощью MAGMA и MKL.
Рис. 1. Сравнение производительности MAGMA (верхний график) и MKL (нижний график)
Таким образом, на сегодняшний день существует несколько библиотек для параллельного решения задач линейной алгебры, при этом необходимо выбирать библиотеку в зависимости от архитектуры системы, на которой будут осуществляться вычисления.
Библиографический список
1. R.C. Whaley, A. Petitet, and J.J. Dongarra. Automated empirical optimizations of software and the ATLAS project. Parallel Computing, 27(1-2):3-35, 2001.
2. L. S. Blackford, J. Demmel, J. Dongarra, I. Duff, S. Hammarling, G. Henry, M. Heroux, L. Kaufman, A. Lumsdaine, A. Petitet, R. Pozo, K. Remington, R.C. Whaley, An Updated Set of Basic Linear Algebra Subprograms (BLAS), ACM Trans. Math. Soft., 28-2 (2002), pp. 135-151.
3. Anderson, E.; Bai, Z.; Bischof, C.; Blackford, S.; Demmel, J.; Dongarra, J.; Du Croz, J.; Greenbaum, A.; Hammarling, S.; McKenney, A.; Sorensen, D. (1999). LAPACK Users' Guide (Third ed.). Philadelphia, PA: Society for Industrial and Applied Mathematics.
4. L. S. Blackford, J. Choi, A. Cleary, E. D'Azevedo, J. Demmel, I. Dhillon, J. Dongarra, S. Hammarling, G. Henry, A. Petitet, K. Stanley, D. Walker, R. C. Whaley. ScaLAPACK Users' Guide. Society for Industrial and Applied Mathematics, 1997.
5. Almadena Chtchelkanova, John Gunnels, Greg Morrow, James Overfelt, Robert van de Geijn, «Parallel Implementation of BLAS: General Techniques for Level 3 BLAS,» Concurrency: Practice and Experience , VOL. 9(9), 837-857 (Sept. 1997).
6. Kurzak, J., Luszczek, P., Faverge, M., Dongarra, J. «Programming the LU Factorization for a Multicore System with Accelerators,» Proceedings of VECPAR'12, Kobe, Japan, April, 2012.
7. Malony, A., Biersdorff, S., Shende, S., Jagode, H., Tomov, S., Juckeland, G., Dietrich, R., Duncan Poole, P., Lamb, C. «Parallel Performance Measurement of Heterogeneous Parallel Systems with GPUs,» International Conference on Parallel Processing (ICPP'11), Taipei, Taiwan, September 1316, 2011.