Лучший способ векторизации кода C вручную
Я хочу вручную векторизовать некоторый C-код, чтобы ускорить его. Для этой цели (SPE на процессоре Cell или CBE) я хочу использовать SIMD math. Первоначально код использует некоторые физические векторные вычисления (скорость, ускорение и т. Д.), Поэтому в некоторых частях кода есть много операций, таких как;
ax=a*vx+b*rx;
ay=a*vy+b*ry;
az=d*vz+b*rz;
поэтому в этот момент я подумал о преобразовании v и r в векторы (в SPE один вектор может содержать 4 значения с плавающей запятой), поэтому в псевдокоде это должно быть что-то вроде
vector V,R,A;
V.x=vx;
R.x=r.x; (and same for the others "y,z")
A=spu_sum(spu_prod(a,V),spu_prod(b,R));
ax=A.x; (and same for the others "y,z")
так вы думаете, этот подход стоит или вы можете думать о лучшем?
Спасибо
1 ответ
Если вам нужно упаковать и распаковать компоненты при каждом расчете SIMD, вы вряд ли сильно увеличите скорость, если она вообще есть.
Вы действительно должны увидеть, можете ли вы сделать более глубокие изменения, чтобы компоненты обычно сохранялись в векторной форме и передавались как можно больше в виде векторов.