Я прочитал книгу Меткалфа, Рида и Коэна по Fortran 95, а также числовые рецепты в Fortran 90. Они рекомендуют использовать WHERE, FORALL и SPREAD, среди прочего, чтобы избежать ненужной сериализации вашей программы.
Однако я наткнулся на этот ответ , который утверждает, что FORALL хорош в теории, но на практике это бессмысленно - вы можете писать циклы с таким же успехом, как они распараллеливают их, и вы можете явно распараллелить их, используя OpenMP (или автоматические функции некоторых компиляторов, таких как Intel).
Кто-нибудь может проверить на собственном опыте, нашли ли они вообще Эти конструкции предлагают какие-либо преимущества перед явными циклами и операторами if с точки зрения параллельной производительности?
И есть ли какие-либо другие параллельные функции языка, которые хороши в принципе, но не стоят того на практике?
Я понимаю, что ответы на эти вопросы в некоторой степени зависят от реализации, поэтому меня больше всего интересуют gfortran, процессоры Intel и параллелизм SMP.