Мы все знаем, что цикл DO
более мощный, чем оператор FORALL
в Фортране. То есть вы всегда можете заменить FORALL
на DO
, но не наоборот.Эквивалентность IF и WHERE
Как насчет инструкции и блока WHERE
?
Могу ли я всегда подставлять IF
на WHERE
? Всегда ли можно кодировать условные обозначения и бифуркации с помощью WHERE
, избегая при этом IF
?
Первоначальная цель FORALL должна была позволить маскированные задания массива должно быть сделано параллельно - он пришел из варианта под названием High Performance Fortran и был принят в Fortran 95. К сожалению, семантика FORALL не способствовала распараллеливанию, поэтому Fortran 2008 добавила DO CONCURRENT, которая не только более знакома с программистами Fortran, но также имеет лучшую семантику для распараллеливания. Вы можете посмотреть на MERGE, который может с помощью некоторых умных масок быть достаточно мощным. –
Находясь на том, что сказал @SteveLionel, обратите внимание, что '' MERGE' * * может использоваться внутри блока 'WHERE', в то время как оператор' IF' * не может *. –
Также имейте в виду, что 'FORALL' является чисто оператором присваивания или блоком, тогда как' DO' является более общей конструкцией управления потоком. – milancurcic