He leído el libro Fortran 95 de Metcalf, Reid and Cohen, y Numerical Recipes en Fortran 90. Recomiendan utilizar WHERE, FORALL y SPREAD entre otras cosas para evitar la serialización innecesaria de su programa.¿Las construcciones de Fortran 95 como WHERE, FORALL y SPREAD generalmente dan como resultado un código paralelo más rápido?
Sin embargo, me encontré con this answer que afirma que FORALL es bueno en teoría, pero inútil en la práctica; también podría escribir bucles ya que paralelizan igual de bien y puede paralelizarlos explícitamente usando OpenMP (o funciones automáticas de algunos compiladores como Intel).
¿Alguien puede verificar por experiencia si generalmente han encontrado estas construcciones para ofrecer ventajas sobre los bucles explícitos y si las declaraciones en términos de rendimiento paralelo?
¿Y hay otras características paralelas del lenguaje que son buenas en principio pero que no valen la pena en la práctica?
Aprecio que las respuestas a estas preguntas sean de alguna manera dependientes de la implementación, así que estoy más interesado en gfortran, las CPU Intel y el paralelismo SMP.
No pregunté acerca de las operaciones de matriz completa porque en muchos casos hacen que el código sea más claro, por lo que incluso sin ganancia de rendimiento las usaría de todos modos. Spread crea una dimensión extra a lo largo de una matriz y copia la matriz a lo largo de ella: http://www.liv.ac.uk/HPC/HTMLF90Course/HTMLF90CourseNotesnode259.html. Con respecto a las pruebas de rendimiento, estoy menos interesado en optimizar un caso particular y más interesado en encontrar el mejor enfoque general para comenzar antes de comenzar a optimizar. – DaveP