Я работаю над добавлением некоторых директив OpenMP в большой набор довольно дорогих вложенных циклов.Я считаю, что мне нужно использовать предложение сокращения с моей директивой, поскольку операции над массивом не обязательно независимы.Однако, когда я пытаюсь добавить директиву сокращения, дамп ядра моего приложения (но компилируется).Я использую компилятор XL Fortran от IBM с поддержкой OpenMP 3.0.Мой (упрощенный) код приведен ниже:
!$omp parallel do reduction(+:f) private(n,m,l,i,j,k, &
!$omp parm,ista,iend,jsta,jend,ksta,kend)
do n=1,lm !k
do m=1,jm !j
do l=1,im !i
if (val(l,m,n) .ne. zero) then
jsta=max j bounds in box
jend=min j bounds in box
ista=max i bounds in box
iend=min i bounds in box
ksta=min k bounds in box
kend=max k bounds in box
do k=ksta,kend
do j=jsta,jend
do i=ista,iend
parm = exp( -dx*(abs(i-l)) &
-dy*(abs(j-m)) &
-dz*(abs(k-n)))
f(i,j,k) = f(i,j,k)+ val(l,m,n) * parm
end do
end do
end do
end if
end do
end do
end do
Где f имеет размерность (im, jm, lm).Это просто проблема синтаксиса?Я пробовал это на нескольких небольших игрушечных проблемах, но у меня возникают проблемы с получением того, что я изучаю, с меньшим тестом, чтобы применить в этом контексте.Для справки я задал похожий вопрос несколько месяцев назад, но с тех пор проблема немного изменилась, и я не верю, что решение сейчас так просто ( link ).
Спасибо залюбая помощь / комментарии!