Консультация № 184315
24.10.2011, 20:43
88.49 руб.
0 1 1
Здравствуйте! У меня возникли сложности с таким вопросом: Помогите написать параллельную программу на Фортране. Условие: распараллелить выражение W=(Q+R)**N. Код прокомментировать. Заранее Большое Спасибо!!!

Обсуждение

давно
Посетитель
7438
7205
28.10.2011, 17:33
общий
это ответ
Здравствуйте, Maverick!
Попробую ответить на Ваш вопрос...

Программа написана с учетом технологии OpenMP
Параллельные участки задаются специальными командами.

!$omp parallel do private(qr) shared(q,r)
задает начало выполнения параллельной области
private задает список переменных, для которых порождается локальная копия
shared задает список переменных, общих для всех нитей

!$omp& reduction(*:w)
задает оператор (*) и список общих переменных (w)
в каждой нити создаются локальные копии

!$omp end parallel
задает конец параллельного участка

Как работают операторы в параллельной области:

qr = q + r
в каждой нити считается своя переменная qr, равная сумме общих переменных q и r

w = w * qr
над локальными копиями переменной w после вычисления выполняется заданный опреатор *

Проверить не имею возможности, т.к. ни Фортраном, ни, тем более,
параллельным Фортраном не пользуюсь

Хочу предложить Вам неплохую документацию по технологии OpenMP: OpenMP.pdf (567.3 кб)

Код:

program compute_w
parameter (n = 100)
integer i
double precision w, q, r, qr
q = 1.2d0
r = 0.2d0
w = 1.0d0
!$omp parallel do private(qr) shared(q,r)
!$omp& reduction(*:w)
do i=1,n
qr = q + r
w = w * qr
end do
!$omp end parallel
print *, 'w = ', w
end
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа