Wir alle wissen, dass die DO
Schleife leistungsfähiger ist als die FORALL
Anweisung in Fortran. Das heißt, Sie können eine FORALL
immer durch eine DO
ersetzen, aber nicht umgekehrt.Äquivalenz von IF und WHERE
Was ist mit der WHERE
Anweisung und Block?
Kann ich die IF
immer durch eine WHERE
ersetzen? Ist es immer möglich, die Bedingungen und Verzweigungen mit einer WHERE
zu codieren, so dass die IF
vermieden wird?
Die ursprüngliche Absicht von FORALL- den maskierten Array-Zuweisungen zu ermöglichen, wurde parallel durchgeführt werden - es kam aus einer Variante High Performance Fortran genannt und wurde angenommen in Fortran 95. Leider war die Semantik von FORALL nicht förderlich für die Parallelisierung, daher hat Fortran 2008 DO CONCURRENT hinzugefügt, das nicht nur den Fortran-Programmierern vertrauter ist, sondern auch eine bessere Semantik für die Parallelisierung bietet. Vielleicht möchten Sie sich MERGE anschauen, was mit einigen cleveren Masken sehr mächtig sein kann. –
Gehen Sie weiter, was @SteveLionel gesagt hat, beachten Sie, dass 'MERGE' * innerhalb des' WHERE'-Blocks verwendet werden kann, während eine 'IF'-Anweisung * nicht * kann. –
Denken Sie auch daran, dass 'FORALL' eine reine Zuweisungsanweisung oder ein Block ist, während' DO' ein allgemeineres Ablaufsteuerungskonstrukt ist. – milancurcic