Лучший способ векторизации кода C вручную - PullRequest
1 голос
/ 26 августа 2010

Я хочу вручную векторизовать некоторый 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 Ответ

1 голос
/ 27 августа 2010

Если вам нужно упаковать и распаковать компоненты при каждом расчете SIMD, вы вряд ли сильно ускоритесь, если вообще будете иметь место.

Вам действительно нужно посмотреть, сможете ли вы сделать более глубокие изменения, чтобы компоненты, как правило, сохранялись в векторной форме и передавались в максимально возможном количестве векторов.

...