Конструкции Fortran 95, такие как WHERE, FORALL и SPREAD, обычно приводят к более быстрому параллельному коду?

Я прочитал книгу Меткалфа, Рида и Коэна по Fortran 95, а также числовые рецепты в Fortran 90. Они рекомендуют использовать WHERE, FORALL и SPREAD, среди прочего, чтобы избежать ненужной сериализации вашей программы.

Однако я наткнулся на этот ответ , который утверждает, что FORALL хорош в теории, но на практике это бессмысленно - вы можете писать циклы с таким же успехом, как они распараллеливают их, и вы можете явно распараллелить их, используя OpenMP (или автоматические функции некоторых компиляторов, таких как Intel).

Кто-нибудь может проверить на собственном опыте, нашли ли они вообще Эти конструкции предлагают какие-либо преимущества перед явными циклами и операторами if с точки зрения параллельной производительности?

И есть ли какие-либо другие параллельные функции языка, которые хороши в принципе, но не стоят того на практике?

Я понимаю, что ответы на эти вопросы в некоторой степени зависят от реализации, поэтому меня больше всего интересуют gfortran, процессоры Intel и параллелизм SMP.

15
задан Community 23 May 2017 в 10:31
поделиться