Как включить Loop Tiling в GCC? - PullRequest
       52

Как включить Loop Tiling в GCC?

1 голос
/ 29 августа 2011

Как скомпилировать код, используя gcc, который выполняет разбиение по циклам (блокирование)? Оптимизация -O3 по умолчанию не делает разбиение на циклы. Мне нужно включить мозаику циклов в этом флаге, а также узнать фактор плитки. (Например, кубическая или прямоугольная плитка), то есть эвристика внутренней плитки.

Спасибо

1 Ответ

1 голос
/ 29 августа 2011

Вы не предоставили точную версию gcc, ни пример кода, ни код результата, ни недостаточно внимательно изучили интернет, но, возможно, это уже отвечает на ваш вопрос:

Strip mining - это оптимизация, которая была введена в gcc с объединением графитовой ветви в версии 4.4 . См. Также руководство :

-floop-стрип-шахтное Выполните преобразования в циклическом извлечении из циклов. Разрушение полосы разбивает петлю на две вложенные петли. Внешняя петля имеет шаги, равные размеру полосы, а внутренняя петля имеет шаги оригинальной петли внутри полосы. Длина полосы может быть изменена с помощью параметра loop-block-tile-size. Например, учитывая цикл как:

          DO I = 1, N
            A(I) = A(I) + C
          ENDDO

майнинг цикла петли преобразует цикл, как если бы пользователь написал:

          DO II = 1, N, 51
            DO I = II, min (II + 50, N)
              A(I) = A(I) + C
            ENDDO
          ENDDO

Эта оптимизация применяется ко всем языкам, поддерживаемым GCC, и не ограничивается только Fortran. Чтобы использовать это преобразование кода, GCC должен быть настроен с --with-ppl и --with-cloog, чтобы включить инфраструктуру преобразования цикла Графита.

Вы можете запустить man gcc | grep '\-floop\-strip\-mine', чтобы проверить, поддерживается ли эта опция. Для точной версии gcc введите gcc --version.

...