real a(l,l),eps,maxeps,b(l,l),c(l,l)
! arrays A and B with block distribution
print *, '********** TEST_JACOBI **********'
maxeps = 5.000000e-008
!nest of two parallel loops, iteration (i,j) will be executed on
!processor, which is owner of element A(i,j)
!$OMP PARALLEL PRIVATE(i)
!$OMP DO
do j = 1,l
do i = 1,l
a(i,j) = 0.
if (i .eq. 1 .or. j .eq. 1 .or. i .eq. l .or. j .eq. l) then
b(i,j) = 0.
else
b(i,j) = 1. + i + j
endif
enddo
enddo
!$OMP END DO
!$OMP END PARALLEL
do it = 1,itmax
eps = 0
!variable EPS is used for calculation of maximum value
!$OMP PARALLEL PRIVATE(i)
!$OMP DO
do j = 2,l - 1
do i = 2,l - 1
a(i,j) = b(i,j)
enddo
enddo
!Copying shadow elements of array A from
!neighbouring processors before loop execution
!$OMP END DO NOWAIT
!$OMP DO
do j = 2,l - 1
do i = 2,l - 1
a(i,j) = (c(i - 1,j) + c(i,j - 1) + c(i + 1,j) + c(i,j +
&1)) / 4
enddo
enddo
!$OMP END DO
!$OMP END PARALLEL
print 200, it,0
200 FORMAT(' IT = ',I4, ' EPS = ', E14.7)
if (0 .lt. 5.000000e-008) goto 3
enddo
3 open (unit = 3,file = 'JAC.DAT',form = 'FORMATTED',status = 'UNKNO
&WN')
write (unit = 3,fmt = *) b
close (unit = 3)
end
Общее время последовательного выполнения: 7667 у.е.
Общее время параллельного выполнения (4 нити): 2471 у.е.
Суммарное ускорение: в 3,1 раза
В рамках дипломной работы был реализован "Эксперт по распараллеливанию на мультипроцессор", как компонент "Системы автоматизации распараллеливания".
Работа системы была протестирована на примерах, описанных в пункте 5.5. В качестве выходного результата формируется файл с выходной программой, а также файл, описывающий пошаговые действия "Эксперта" с аргументированием причины формирования выходного файла, а также подсчитывающего ускорение программы.
Проект реализован в программе VisualStudio .NET на языке C++. Общий объем программного кода, реализующего "Эксперт"- свыше 1800 строк.
Потенциально Параллельный Цикл (ППЦ) – цикл, который можно распараллелить средствами OpenMP, не обязательно эффективно.
Цикл Неподдающийся Распараллеливанию (ЦНР) – циклы с зависимостями следующих видов:
1) содержащие ввод/вывод,
2) содержащие вызовы процедур,
3) содержащие выход из цикла,
4) содержащие неизвестные анализатору зависимости,
5) циклы, с которыми не справился анализатор.
Параллельный регион – последовательность циклов, линейных фрагментов, ветвлений, которая будет заключена в рамки !$OMPPARALLEL - !$OMPENDPARALLEL.
Вариант параллелизма программы (Вариант параллелизма) – вариантдиректив OpenMP, описывающих параллельные области и параллельные циклы (без директив локализации переменных).
Вариант локализации переменных (Вариант локализации) – вариантдиректив локализации переменных. Для каждого варианта параллелизма может существовать несколько вариантов локализации.
Схема распараллеливания – фиксация одного варианта параллелизма и одного варианта локализации.
1-е внутреннее представление – дерево, по структуре схожее с деревом из Базы Данных, в котором помечены все ППЦ и для каждого ППЦ обозначены пометки для локализации. Является результатом работы 1-го шага.
2-е внутреннее представление - дерево, по структуре схожее с деревом из Базы Данных, в котором расставлены пометки, по которым в базу данных можно занести комментарии по распараллеливанию (Распараллеливание и Локализацию). Является результатом работы 3-го шага.
Наилучшие комментарии – комментарии такие, что оценочная функция для программы с такими комментариями будет минимальна по сравнению с программой с любыми другими комментариями. Нахождение таких комментариев - главная задача эксперта.
Проверка Альтернативного Распараллеливания – нахождения минимума оценочной функции между текущим 2-м внутренним представлением и неким другим (альтернативным) распараллеливанием, с фиксацией распараллеливания с минимальной оценочной функцией во 2-м внутреннем представлении.
Проверка Альтернативной Локализации – нахождения минимума оценочной функции для набора локализаций для данного распараллеливания с фиксированием комментариев, соответствующих минимальной оценочной функцией во 2-м внутреннем представлении.