Параллельные вычисления. Баканов В.М. - 90 стр.

UptoLike

Составители: 

- 90 -
Lahey/Fujitsu Fortran’95 (LF95, http://www.lahey.com) для Linux (LF95’Pro
включает возможность автоматической и OpenMP-параллелизации). Распа-
раллеливающие компиляторы постоянно совершенствуются и в настоящее
время пригодны для создания эффективных параллельных программ с разде-
ляемыми переменными; особенно это касается научных программ, содержа-
щих много циклов и длительных вычислений.
В табл.6 приведены некоторые преобразования циклов, автоматически
осуществляемые распараллеливающим Fortran-компилятором Lahey/Fujitsu
Fortran’95 (LF95,
http://www.lahey.com
) для Linux (LF95’Pro включает возмож-
ность автоматической и OpenMP-параллелизации). Распараллеливающие
компиляторы постоянно совершенствуются и в настоящее время пригодны
для создания эффективных параллельных программ с разделяемыми пере-
менными; особенно это касается научных программ, содержащих много цик-
лов и длительных вычислений.
Таблица 6 Операции над массивами и автоматическая параллелиза-
ция (на примере Fortran-базированной
распараллеливающей систе-
мы LF95’Pro).
Преобразо-
вание
До
преобразо-
вания
После
преобразо-
вания
После
распараллеливания
1 Сечения (slic-
ing) циклов
do i=1, 50000
a(i)=b(i)+c(i)
end do
Процессор 1:
do i1=1,25000
a(i1)=b(i1)+c(i1)
end do
Процессор 2:
do i2=25001,50000
a(i2)=b(i2)+c(i2)
end do
2 Перестановка
вложенных
(nested) циклов
do i= 2,10000
do j=1,10
a(i,j)=a(i-1,j)
+b(i,j)
end do
end do
do j=1,10
do i=2,10000
a(i,j)=a(i-1,j)
+b(i,j)
end do
end do
Процессор 1:
do j=1,5
do i=210000
a(i,j)=a(i-1,j)
+b(i,j)
end do
end do
Процессор 2:
do j=6,10
do i=2,10000
a(i,j)=a(i-1,j)
+b(i,j)
end do
end do
3 Слияние (fu-
sion) циклов
do i=1,10000
a(i)=b(i)+c(i)
end do
do i=1,10000
d(i)=e(i)+f(i)
end do
do i=1,10000
a(i)=b(i)+c(i)
d(i)=e(i)+f(i)
end do
Процессор 1:
do i=1,5000
a(i)= b(i)+c(i)
d(i)=e(i)+f(i)
end do
Процессор 2:
do i=5001,0000
a(i)=b(i)+c(i)
d(i)=e(i)+f(i)
end do
4 Приведение
(reduction)
циклов.
Приведение
циклов может
sum=0
do i=1,10000
sum=sum+a(i)
end do
Процессор 1:
sum1=0
do i=1,5000
sum1=sum1+a(i)
end do
Процессор 2:
sum2=0
do i=5001,0000
sum2=sum2+a(i)
end do
                                                     - 90 -


Lahey/Fujitsu Fortran’95 (LF95, http://www.lahey.com) для Linux (LF95’Pro
включает возможность автоматической и OpenMP-параллелизации). Распа-
раллеливающие компиляторы постоянно совершенствуются и в настоящее
время пригодны для создания эффективных параллельных программ с разде-
ляемыми переменными; особенно это касается научных программ, содержа-
щих много циклов и длительных вычислений.
  В табл.6 приведены некоторые преобразования циклов, автоматически
осуществляемые распараллеливающим Fortran-компилятором Lahey/Fujitsu
Fortran’95 (LF95, http://www.lahey.com) для Linux (LF95’Pro включает возмож-
ность автоматической и OpenMP-параллелизации). Распараллеливающие
компиляторы постоянно совершенствуются и в настоящее время пригодны
для создания эффективных параллельных программ с разделяемыми пере-
менными; особенно это касается научных программ, содержащих много цик-
лов и длительных вычислений.

    Таблица 6 — Операции над массивами и автоматическая параллелиза-
       ция (на примере Fortran-базированной распараллеливающей систе-
       мы LF95’Pro).

№      Преобразо-              До               После                            После
№        вание             преобразо-         преобразо-                   распараллеливания
                             вания              вания
1     Сечения (slic-     do i=1, 50000                         Процессор 1:         Процессор 2:
      ing) циклов         a(i)=b(i)+c(i)                       do i1=1,25000        do i2=25001,50000
                         end do                                 a(i1)=b(i1)+c(i1)    a(i2)=b(i2)+c(i2)
                                                               end do               end do

2     Перестановка       do i= 2,10000      do j=1,10          Процессор 1:         Процессор 2:
      вложенных          do j=1,10          do i=2,10000       do j=1,5             do j=6,10
      (nested) циклов     a(i,j)=a(i-1,j)    a(i,j)=a(i-1,j)   do i=210000          do i=2,10000
                                 +b(i,j)           +b(i,j)      a(i,j)=a(i-1,j)      a(i,j)=a(i-1,j)
                         end do             end do                     +b(i,j)              +b(i,j)
                         end do             end do             end do               end do
                                                               end do               end do
3     Слияние     (fu-   do i=1,10000       do i=1,10000       Процессор 1:         Процессор 2:
      sion) циклов        a(i)=b(i)+c(i)     a(i)=b(i)+c(i)    do i=1,5000          do i=5001,0000
                         end do              d(i)=e(i)+f(i)     a(i)= b(i)+c(i)      a(i)=b(i)+c(i)
                                            end do              d(i)=e(i)+f(i)       d(i)=e(i)+f(i)
                         do i=1,10000                          end do               end do
                          d(i)=e(i)+f(i)
                         end do

4     Приведение         sum=0                                 Процессор 1:         Процессор 2:
      (reduction)        do i=1,10000                          sum1=0               sum2=0
      циклов.             sum=sum+a(i)                         do i=1,5000          do i=5001,0000
                         end do                                 sum1=sum1+a(i)      sum2=sum2+a(i)
      Приведение                                               end do               end do
      циклов может