Векторизация петли и как ее избежать - PullRequest
2 голосов
/ 13 декабря 2010

Векторизация цикла - это когда все правые выражения вычисляются в начале.Я только что обнаружил, что мои петли векторизованы (в FORTRAN 77 ... не спрашивайте).Мне нужно, чтобы моя переменная условия цикла обновлялась в каждой итерации, но как мне переписать, чтобы обойти эту векторизацию?

В связанной публикации я ищу способ отключитьэта «особенность» оптимизации в FORTRAN конкретно, но здесь я ищу более алгоритмическое решение для общего случая.

1 Ответ

5 голосов
/ 13 декабря 2010

Это не то, что для меня значит векторизация цикла. Для меня эта фраза означает, что компилятор будет генерировать код, который может использовать любые аппаратные возможности векторного вычисления. На простом Intel Xeon это может означать создание инструкций SSE4 для одновременной манипулирования несколькими соседними элементами массива, на Cray их может быть гораздо больше в плане одновременного выполнения одной и той же операции над векторными регистрами.

Как вы думаете, что все выражения RHS «вычисляются в начале»? Я не уверен, что вы подразумеваете под этим. Не могли бы вы опубликовать код для объяснения? Если вы имеете в виду, что количество циклов в цикле вычисляется при входе в первую итерацию, то это правильно. Это очень полезная функция, когда речь идет об оптимизации кода, и ни одна из программ на Фортране не выиграет от этого.

Если вы пишете циклы DO в Фортране, обновление итерационной переменной запрещено стандартом и всегда было настолько, насколько я помню. Ваш компилятор может позволить вам сойти с рук, но я бы не стал доверять программе на Фортране, в которой это произошло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...