Комментарии 2
Обеспечивается ли атомарность записи? Например, если выполнить код для четырех image'ей:
Будет ли в результате fact[1] = 4000? Или же это будет случайное число меньше 4000, зависящее от приоритетов потоков?
integer, codimension[*] :: fact
do x = 1, 1000
fact[1] = fact[1] + 1
end do
Будет ли в результате fact[1] = 4000? Или же это будет случайное число меньше 4000, зависящее от приоритетов потоков?
Спасибо за отличный вопрос! Нет, результат будет рандомный, атомарности нет. Кстати, приоритетов потоков тоже нет. Здесь речь о MPI процессах — копиях приложения. Для получения 4000, придётся самому вводить критическую секцию (тоже часть Coarray), примерно так:
critical
do x = 1, 1000
fact[1] = fact[1] + 1
end do
end critical
sync all
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Знакомство с Coarray Fortran: будем параллельны?