В принципе ускорение может быть в 4 раза с SSE (в 8 раз с AVX). Позволь мне объяснить.
Назовем вашу фиксированную матрицу 5x5 M. Определение компонентов 5D-вектора как (x, y, z, w, t). Теперь сформируйте матрицу 5x4 U из первых четырех векторов.
U =
xxxx
yyyy
zzzz
wwww
tttt
Затем сделайте матричное произведение MU = V. Матрица V содержит произведение M и первых четырех векторов. Единственная проблема заключается в том, что для SSE нам нужно читать в строках U, но в памяти U хранится как xyzwtxyzwtxyzwtxyzwt, поэтому мы должны транспонировать его на xxxxyyyyzzzzwwwwtttt. Это можно сделать с помощью перемешивания/смешивания в SSE. Когда у нас есть этот формат, матричный продукт становится очень эффективным.
Вместо того, чтобы выполнять операции O (5x5x4) со скалярным кодом, требуется только операции O (5x5), то есть ускорение в 4 раза. С AVX матрица U будет 5x8, поэтому вместо операций O(5x5x8) она облагает налогом только O(5x5), то есть ускорение в 8 раз.
Однако матрица V будет иметь формат xxxxyyyyzzzzwwwwtttt, поэтому в зависимости от приложения ее может потребоваться преобразовать в формат xyzwtxyzwtxyzwtxyzwt.
Повторите это для следующих четырех векторов (8 для AVX) и так далее, пока не закончите.
Если у вас есть контроль над векторами, например, если ваше приложение генерирует векторы на лету, вы можете генерировать их в формате xxxxyyyyzzzzwwwwtttt и избегать транспонирования массива. В этом случае вы должны получить 4-кратное ускорение с SSE и 8-кратное с AVX. Если вы объедините это с потоковой передачей, например. OpenMP, ваше ускорение должно быть близко к 16x (при условии четырех физических ядер) с SSE. Я думаю, что это лучшее, что вы можете сделать с SSE.
Редактировать: из-за параллелизма на уровне инструкций (ILP) вы можете получить еще один коэффициент ускорения 2, поэтому ускорение для SSE может быть 32-кратным с четырьмя ядрами (64x AVX) и снова еще одним коэффициентом 2 с Haswell из-за FMA3.
person
Community
schedule
17.03.2013
5*5*sizeof(double)
намного меньше размера даже кеша L1. Почему вы получаете промахи кеша? - person MSalters   schedule 08.07.2011