Механика оптимизации В фирме Alliant распараллеливание рассматривается как
некоторая форма оптимизации и в отсутствии параметра -О в команде вызова
компилятора не делается никаких попыток оптимизации.
Оптимизация может быть ограничена (например, только векторизацией) путем
добавления определенных букв после параметра -О. Если параметр -О опущен, то все
директивы компилятора игнорируются. Директивы компилятора в программе начинаются
с первой колонки ком-бинацией символов CVD$. Это означает, что другими
компиляторами для языка Фортран они ftyjsyi рассматриваться как комментарии, что
повышает мобильность программ. Буква, непосредственно следующая за знаком $,
говорит о том, применима ли эта директива только к следующему за ней циклу DO (в
этом случае используется буква L) или она относится ко всей оставшейся части
исходного файла (в этом случае используется буква G).
Ключевое слово, записанное начиная с седьмой колонки, определяет разрешение
или запрещение оптимизации. По умолчанию вызов подпрограммы внутри цикла
препятствует распараллеливанию тела цикла, начиная с точки вызова. Директива
CVD$L CNCALL отвергает это правило, позволяя такие циклы выполнять в
параллельном режиме. Директива оказывает действие только на следующий за ней
цикл, так как после знака $ записана буква L.
Этой директивой программист утверждает, что данная подпрограмма может
запускаться параллельно с другими выполнениями этой же подпрограммы или других
подпрограмм, вызванных в том же цикле. Параллельные задачи могуть создаваться с
помощью вызова подпрограммы в цикле DO, которому непосредственно предшествует
упомянутая выше директива CNCALL.
Подпрограмме может быть передан индекс цикла, с помощью которого в ней может
определяться номер соответствующей итерации, что позволяет каждой итерации
выполняться независимо и, если необходимо, с использованием оператора IF и
вычисляемого оператора GOTO. Такая под программа может даже вызвать другие
подпрограммы, которые будут продолжать параллельное выполнение. С помощью
директивы CDV$G N0C0NCUR можно запретить параллельное выполнение всех циклов
вплоть до конца исходного файла.