44
реализации параллельных вычислений в кластерных вычислительных
системах при наличии многопроцессорных серверов с общей памятью
(
мультипроцессоров).
Разработка параллельных программ для мультипроцессоров может
осуществляться в рамках следующих двух основных схем реализации:
• общий подход (как и в случае многопроцессорных вычислитель-
ных системах с распределенной памятью) на основе технологии
передачи сообщений MPI;
• подход, основанный на использовании возможностей стандарта
OpenMP.
Первый
способ позволяет создавать мобильные параллельные про-
граммы, которые могут использоваться в многопроцессорных систе-
мах различного типа; второй подход обеспечивает учет возможностей
архитектуры параллельной системы с общей памятью.
Программный интерфейс приложений (API) OpenMP (см., напри-
мер, Chandra, R. аnd etc. (2000)) обеспечивает поддержку программи-
рования в модели общей памяти на языках C/C++ и Fortran и представ-
ляет собой достаточно простой
способ для разработки параллельных
программ, являющихся переносимыми (мобильными) между различ-
ными типами мультипроцессоров и операционных систем.
Для
проведения экспериментов применялись двух- и четырех-
процессорные сервера вычислительного кластера Нижегородского
университета. Разработка программ осуществлялась с помощью среды
разработки Microsoft
Visual Studio 6.0 с компиляторами Microsoft
32-bit C/C++ Optimizing Compiler и Intel
C++ Compiler 5.0. При про-
ведении
расчетов в качестве контрольного примера использовалась
задача матричного умножения, для решения которой были подготов-
лены три различные программные реализации одного и то же алгорит-
ма умножения матриц:
• последовательная программа, разработанная на основе стандарт-
ного последовательного алгоритма умножения матриц;
• параллельная программа, полученная из последовательного вари-
анта путем добавления соответствующих директив OpenMP; сле-
дует отметить, что выполнение этой работы не потребовала значи-
тельных усилий; главное изменение исходной программы свелось
к вставке только одной директивы распараллеливания перед ос-
новными циклами умножения:
45
#pragma omp for private(i,j,k) nowait
for (i=0;i
for (j=0;j
for (k=0;k
C[i][j]+=A[i][k]*B[k][j];
• параллельная программа, использующая для
организации взаимо-
действия процессоров механизм передачи сообщений MPI; для
распределения элементов перемножаемых матриц между процес-
сорами была задействована ленточная схема
организации парал-
лельных матричных вычислений (см., например, Kumar and etc.
(1994)), когда на каждый процессор пересылается одновременно
k
строк матрицы A и
k
столбцов матрицы B (значение
k
может
быть принято равным
p , где
p есть число имеющихся в системе
процессоров).
Результаты экспериментов для двухпроцессорного (2 процессора
Intel
Pentium III Xeon 1000 MHz, 256 Mb RAM) в числовой форме
сведены в таблице 2. В этой таблице приведены данные по времени
выполнении операции перемножения матриц разного порядка (от 300
до 2100) для всех трех вариантов программной реализации вычисле-
ний. Кроме того, для параллельных программ приведены показатели
получаемого ускорения времени решения задачи по сравнению с вре-
менем работы последовательной программы
пар
посл
T
T
S
/
=
.
Следует отметить, что при определении времени T
посл
, несмотря
на выполнение последовательной программы, используются оба про-
цессора вычислительного сервера (дополнительный процессор приме-
няется, в частности, для исполнения процессов операционной систе-
мы). Как результат, реальное время последовательного выполнения
является большим, чем приведено в таблице 2 (что, соответственно,
увеличивает
коэффициент ускорения, обеспечиваемого параллельны-
ми вариантами программ).
Для наглядности результаты вычислительных экспериментов
представлены также на рис. 4 в графической форме в виде графика
коэффициентов ускорения процесса решения задачи при использова-
нии параллельных вычислений.