210 likes | 375 Views
Гибридная модель параллельного программирования DVM / OpenMP. Бахтин В.А. ИПМ им.М.В.Келдыша РАН. г. Москва, 20 марта 2008 г. Данные. Вычисления. OpenMP. Core. Core. Core. Core. Core. Core. Core. Core. …. Узел 0. DVM/OpenMP – гибридная модель программирования высокого уровня.
E N D
Гибридная модель параллельного программирования DVM/OpenMP Бахтин В.А. ИПМ им.М.В.Келдыша РАН г. Москва, 20 марта 2008 г.
Данные Вычисления OpenMP Core Core Core Core Core Core Core Core … Узел 0 DVM/OpenMP – гибридная модель программирования высокого уровня Данные DVM DVM Данные Вычисления OpenMP … Узел N В.Бахтин
PROGRAM JAC_OpenMP_DVM • PARAMETER (L=8, ITMAX=20) • REAL A(L,L), B(L,L) • CDVM$ DISTRIBUTE ( BLOCK, BLOCK) :: A • CDVM$ ALIGN B(I,J) WITH A(I,J) • C$OMP PARALLEL SHARED(A,B) PRIVATE (I,J,ITMAX) • C$OMP SINGLE • PRINT *, '********** TEST_JACOBI **********‘ • C$OMP END SINGLE • DO IT = 1, ITMAX • CDVM$ PARALLEL (J,I) ON A(I, J) • C$OMP DO • DO J = 2, L-1 • DO I = 2, L-1 • A(I, J) = B(I, J) • ENDDO • ENDDO • CDVM$ PARALLEL (J,I) ON B(I, J), SHADOW_RENEW (A) • C$OMP DO • DO J = 2, L-1 • DO I = 2, L-1 • B(I, J) = (A(I-1, J) + A(I, J-1) + A(I+1, J) + • + A(I, J+1)) / 4 • ENDDO • ENDDO • ENDDO • C$OMP END PARALLEL • END
PROGRAM JAC_OpenMP_DVM • PARAMETER (L=8, ITMAX=20) • REAL A(L,L), B(L,L) • CDVM$ DISTRIBUTE ( BLOCK, BLOCK) :: A • CDVM$ ALIGN B(I,J) WITH A(I,J) • PRINT *, '********** TEST_JACOBI **********‘ • DO IT = 1, ITMAX • CDVM$ PARALLEL (J,I) ON A(I, J) • C$OMP PARALLEL DO SHARED (A,B), PRIVATE(I,J) • DO J = 2, L-1 • DO I = 2, L-1 • A(I, J) = B(I, J) • ENDDO • ENDDO • CDVM$ PARALLEL (J,I) ON B(I, J), SHADOW_RENEW (A) • C$OMP PARALLEL DO SHARED (A,B), PRIVATE(I,J) • DO J = 2, L-1 • DO I = 2, L-1 • B(I, J) = (A(I-1, J) + A(I, J-1) + A(I+1, J) + • + A(I, J+1)) / 4 • ENDDO • ENDDO • ENDDO • C$OMP END PARALLEL • END В.Бахтин
PROGRAM JAC_OpenMP_DVM • PARAMETER (L=8, ITMAX=20) • REAL A(L,L), B(L,L) • CDVM$ DISTRIBUTE ( BLOCK, BLOCK) :: A • CDVM$ ALIGN B(I,J) WITH A(I,J) • PRINT *, '********** TEST_JACOBI **********' • C$OMP PARALLEL SHARED(A,B) PRIVATE (I,J,IT) • DO IT = 1, ITMAX • CDVM$ PARALLEL (J,I) ON A(I, J) • C$OMP DO • DO J = 2, L-1 • DO I = 2, L-1 • A(I, J) = B(I, J) • ENDDO • ENDDO • CDVM$ PARALLEL (J,I) ON B(I, J), SHADOW_RENEW (A) • C$OMP DO • DO J = 2, L-1 • DO I = 2, L-1 • B(I, J) = (A(I-1, J) + A(I, J-1) + A(I+1, J) + • + A(I, J+1)) / 4 • ENDDO • ENDDO • ENDDO • C$OMP END PARALLEL • END
DVM/OpenMP – гибридная модель программирования высокого уровня В модели DVM/OpenMP можно описать следующие уровни параллелизмапрограммы: • Параллелизм распределенных задач, позволяющий отобразить параллельно выполняющиеся задачи на непересекающиеся многомерные секции узлов. • Параллелизм распределенных многомерных циклов, витки которых распределяются между узлами многомерной секции. • Параллелизм конструкций разделения работы OpenMP (циклы и секции). Эти конструкции могут быть в произвольном порядке вложены друг в друга. В.Бахтин
Преимущества OpenMP/DVM • Близость моделей OpenMP и DVM, что упрощает их совместное использование • Получение гибких программ, способных настраиваться на неоднородность узлов SMP-кластера • Возможность использования параллельной программы как последовательной, как OpenMP-программы, как DVM-программы, и как DVM/OpenMP -программы. В.Бахтин
PROGRAM SOR_DVM PARAMETER (L=8, ITMAX=20) REAL A(L,L) CDVM$ DISTRIBUTE ( BLOCK, BLOCK) :: A PRINT *, '********** TEST_SOR **********‘ DO IT = 1, ITMAX CDVM$ PARALLEL ( J, I) ON A( I, J), ACROSS (A(1:1,1:1)) DO J = 2, L-1 DO I = 2, L-1 A(I, J) = (A(I-1, J) + A(I, J-1) + A(I+1, J) + A(I, J+1)) / 4 ENDDO ENDDO ENDDO END В.Бахтин
Параллелизм по гиперплоскостям( dvm run 4 4 sor ) j i t1 t2 t3 В.Бахтин
t2 t3 t4 t5 t6 t7 t2 t3 t4 t5 t6 t7 t8 t3 t4 t5 t6 t7 t8 Конвейерный параллелизм( dvm run 3 1 sor ) j i t1 p0 p1 t9 p2 В.Бахтин
PROGRAM SOR_OpenMP PARAMETER (L=8, ITMAX=20) REAL A(L,L) PRINT *, '********** TEST_SOR **********‘ DO IT = 1, ITMAX !$OMP PARALLEL SHARED(A,B) PRIVATE(I,J,NEWJ,IAM) !$ IAM = OMP_GET_THREAD_NUM () DO NEWJ = 2, L-1 + OMP_GET_NUM_THREADS () – 1 J = NEWJ - IAM !$OMP DO SCHEDULE (STATIC) DO I = 2, L-1 !$ IF (J.LT. 2 .OR. J .GT. L - 1) THEN !$ CYCLE !$ ENDIF A(I, J) = (A(I-1, J) + A(I, J-1) + A(I+1, J) + A(I, J+1)) / 4 ENDDO ENDDO !$OMP END PARALLEL ENDDO END В.Бахтин
Конвейерный параллелизм t0 t1 t2 t3 Нить 0 t1 t2 t3 t4 Нить 1 t2 t3 t4 t5 Нить 2 t3 t4 t5 t6 Нить 3 В.Бахтин
PROGRAM SOR_OpenMPDVM PARAMETER (L=8, ITMAX=20) REAL A(L,L) !DVM$ DISTRIBUTE ( BLOCK, BLOCK) :: A PRINT *, '********** TEST_SOR **********‘ DO IT = 1, ITMAX !$OMP PARALLEL SHARED(A,B) PRIVATE(I,J,NEWJ,IAM) !$ IAM = OMP_GET_THREAD_NUM () !DVM$ PARALLEL ( NEWJ, I) ON A( I, NEWJ-IAM), !DVM$*ACROSS (A(1:1,1:1)) DO NEWJ = 2, L-1 + OMP_GET_NUM_THREADS () – 1 J = NEWJ - IAM !$OMP DO SCHEDULE (STATIC) DO I = 2, L-1 !$ IF (J.LT. 2 .OR. J .GT. L - 1) THEN !$ CYCLE !$ ENDIF A(I, J) = (A(I-1, J) + A(I, J-1) + A(I+1, J) + A(I, J+1)) / 4 ENDDO ENDDO !$OMP END PARALLEL ENDDO END В.Бахтин
Методика и средства отладки DVM-программ г. Москва, 20 марта 2008 г.
Функциональная отладкаDVM-программ Используется следующая методика поэтапной отладки программ: • На первом этапе программа отлаживается на рабочей станции как последовательная программа, используя обычные методы и средства отладки • На втором этапе программа выполняется на той же рабочей станции в специальном режиме проверки распараллеливающих указаний В.Бахтин
Функциональная отладкаDVM-программ • На третьем этапе программа выполняется на рабочей станции или на параллельной машине в специальном режиме, когда промежуточные результаты параллельного выполнения сравниваются с эталонными результатами (например, результатами последовательного выполнения) В.Бахтин
Динамический контроль • Выход за пределы массива • Чтение неинициализированных переменных • Необъявленная зависимость по данным в параллельной конструкции • Модификация в параллельной ветви размноженных переменных (не редукционных и не приватных) • Необъявленный доступ к нелокальным данным В.Бахтин
Динамический контроль • Чтение теневых граней распределенного массива до завершения операции их обновления • Использование редукционных переменных до завершения операции асинхронной редукции В.Бахтин
Недостатки динамического контроля • Накладные расходы (память, время) • Отсутствие ошибок при динамическом контроле не гарантирует правильной работы параллельной программы по следующим причинам В.Бахтин
Недостатки динамического контроля • динамический контроль не проверяет правильность описания редукционных операций; • источником ошибок могут быть процедуры, вызываемые из DVM-программ, но написанные на других языках и не подлежащие динамическому контролю; • отлаженная последовательная программа может содержать ошибки, которые не проявились при ее последовательном выполнении, но могут проявиться при параллельном выполнении. В.Бахтин
Сравнение результатов • Получение эталонной трассировки - управление объемом при компиляции, через параметры запуска, с помощью файла конфигурации • Особенности сравнения (редукция, учет правила собственных вычислений, точность) • Режим проверки указаний о редукционных операциях В.Бахтин