Проект состоял в разработке векторизованных реализаций матричного умножения для регистров SSE, AVX и XEON PHI SIMD. Роль нашей компании заключалась в консультировании проекта и выборе стратегий оптимизации. В итоге была разработана библиотека для оптимизированного умножения мелких квадратных блоков различной размерности (2×2 – 16×16) на длинную последовательность векторов.
Оптимизации подлежали 2 операции:
- Блочная операция AXPY: Y += X×A, где A вместо скаляра в точечной версии представляет собой квадратную матрицу размера N×N, а прямоугольные матрицы X и Y имеют размерность M×N.
- Блочная операция DOT: C += XT×Y, где C вместо скаляра в точечной версии представляет собой квадратную матрицу размера N×N, а прямоугольные матрицы X и Y имеют размерность M×N.
В результате было получено ускорение по сравнению с версией с развёрнутыми циклами до 7 раз при типе данных float
и до 3,5 на типе double
.