Проблемы Я облицовка, как указано ниже:OpenMP вызов подпрограммы в потоках
module k
integer :: l,m
end module k
program p4
use k
integer :: i,j,omp_get_thread_num,cr
i = 2
j = 3
!$omp parallel num_threads(2) shared(l,m) private(i,j,cr)
cr = omp_get_thread_num()
if (cr == 0) goto 1111
call sub1(i)
write(*,*) l
goto 2222
1111 call sub2(j)
write(*,*) m
2222 continue
!$omp end parallel
end program p4
subroutine sub1(a)
use k
integer :: a
l = a**2
write(*,*) 'entered sub1'
end subroutine sub1
subroutine sub2(b)
use k
integer :: b
m = b**2
write(*,*) 'entered sub2'
end subroutine sub2
Я попытался параллелизовать серийный, (который после распараллеливания выглядит как написано выше). Я хочу, чтобы одна и та же операция выполнялась дважды. Так В идеале, я хочу выход быть
entered sub1
4
enterer sub2
9
но выход
entered sub2
0
entered sub1
923239424
Я новичок параллельного программирования (моя актуальная проблема более сложная версия одного я конспектированный). Может ли кто-нибудь указать на ошибки и предложить улучшения. Благодарности
Согласовано с выше. То, что у вас есть, нечитаемо. Это Хаскелл? – Adam
@ Адам: Haskell ?? Нет, очевидно, Фортран. Ключевые подсказки: «продолжить». –
@IraBaxter ах да, я просто видел GOTO, тоже. Спасибо за совет. Возможно, я должен прекратить делать такую хорошую работу, избегая как Фортрана, так и Хаскелла. – Adam