Question

Je veux vectoriser manuellement un code C, afin de lui SpeedUp. A cet effet (SPE sur le processeur Cell ou EBC) Je veux utiliser les mathématiques SIMD. Le code utilise initialement des calculs vectoriels physiques (vitesse, accélération, etc), de sorte que dans certaines parties du code il y a un grand nombre d'opérations similaires;

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

à ce stade je pensais à la conversion des vecteurs de v et r (sur la SPE, un vecteur peut contenir 4 valeurs flottantes simples), donc dans ce pseudo-code doit être quelque chose comme

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")

pensez-vous de cette approche worths ou pouvez-vous penser à une meilleure?

Merci

Était-ce utile?

La solution

Si vous devez emballer et déballer les composants à chaque calcul SIMD, vous avez peu de chances d'obtenir beaucoup, le cas échéant, du tout speedup.

Vous avez vraiment besoin de voir si vous pouvez faire des changements plus profonds, de sorte que les composants sont normalement maintenus sous forme vectorielle et passés en tant que vecteurs autant que possible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top