ВУЗ:
Составители:
Рубрика:
- 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 циклов может
Страницы
- « первая
- ‹ предыдущая
- …
- 88
- 89
- 90
- 91
- 92
- …
- следующая ›
- последняя »