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

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

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

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

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

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

Ответы на вопрос(5)

Ваш ответ на вопрос