habrahabr.ru
Итак, фактическую разработку новых оптимизаций в GCC 5.0 можно считать законченной. Продукт GCC 5.0 находится сейчас в фазе stage3, то есть идет доработка уже внедренных оптимизаций. В данной и последующих статьях я расскажу об оптимизациях, реализованных в GCC 5.0 для х86 и об их влиянии на производительность программ для процессоров линейки Intel Atom и Intel Core. Сегодня речь пойдет о векторизации групповых обращений в память. В последующих статьях я расскажу об ускорениях в 32-битном PIC режиме и дополнительном усилении векторизации.
Как вы уже, наверное, догадались, в GCC 5.0 существенно улучшена векторизация групповых обращений в память. Под групповым обращением в память понимается итерируемая последовательность обращений. Например:
x = a[i], y = a[i + 1], z = a[i + 2]
итерируемое по i — это группа загрузок из памяти длиной 3. Длина группы обращений в память — это расстояние между самым младшим и старшим адресами в группе. Для примера выше — это (i + 2) – (i) + 1 = 3
Количество обращений в память в группе не превосходит ее длину. Например:
x = a[i], z = a[i + 2]
итерируемое по i — это группа длиной 3, несмотря на то, что обращений в память всего 2.
GCC 4.9 векторизует группы, где длина — это степень 2 (2, 4, 8 …).
GCC 5.0 векторизует группы, где длина равна 3 или степени 2 (2, 4, 8 …). Другие длины не векторизуются, так как встречаются в реальных приложениях очень редко.
Чаще всего векторизация группы обращений в память применяется при работе с массивами структур.
1. Конвертация изображений, скажем, в структуре RGB. Пример.
2. Работа с N-мерными координатами (скажем, чтобы нормализовать трехмерные точки). Пример.
3. Умножение векторов на константную матрицу:
a[i][0] = 7 * b[i][0] — 3 * b[i][1];
a[i][1] = 2 * b[i][0] + b[i][1];
В целом в GCC 5.0 (по сравнению с 4.9)
- Появилась векторизация группы обращений в память длиной 3
- Существенно улучшилась векторизации группы загрузок из памяти для любой длины
- Стали использоваться техники векторизации групп обращений в память оптимальные для конкретного x86 процессора.
…



