Проект состоял в разработке векторизованных реализаций матричного умножения для регистров 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
.
литература по теме:
- Intel Intrinsic Guide: http://software.intel.com/sites/landingpage/IntrinsicsGuide
- Best Practice Guide – Intel Xeon Phi: http://www.prace-project.eu/Best-Practice-Guide-Intel-Xeon-Phi-HTML?lang=en
- Xinmin Tian, etc. Practical SIMD Vectorization Techniques for Intel® Xeon Phi Coprocessors, IPDPSW, 2013 IEEE 27th International , pp.1149,1158, 20-24 May 2013, doi: 10.1109/IPDPSW.2013.245