2010-08-26 4 views
1

Я хочу, чтобы векторный код для некоторых C-кода, чтобы ускорить его. Для этой цели (SPE на процессоре Cell или CBE) я хочу использовать SIMD-математику. Код первоначально использует некоторые физические векторные вычисления (скорость, ускорение и т. Д.), Поэтому в некоторых частях кода существует множество операций, таких как;Лучший способ векторизовать код C от руки

ax=a*vx+b*rx; 
ay=a*vy+b*ry; 
az=d*vz+b*rz; 

поэтому на данный момент я думал о преобразовании v-х и г, чтобы векторы (на 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, вы вряд ли получите много, если таковые имеются, ускорив вообще.

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

Смежные вопросы