2010-08-26 4 views
1

Je veux vectoriser manuellement du code C, afin de l'accélérer. Pour ce faire (SPE sur le processeur de la cellule ou CBE), je veux utiliser les mathématiques SIMD. Le code utilise à l'origine des calculs vectoriels physiques (vitesse, accélération, etc.), donc dans certaines parties du code il y a beaucoup d'opérations comme;Meilleure façon de vectoriser le code C à la main

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

donc à ce stade je pensais à la conversion des vecteurs de v et r (sur la SPE, un vecteur peut contenir 4 valeurs flottantes simples), donc en pseudocode il devrait ê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") 

alors pensez-vous que cette approche vaut ou pouvez-vous penser à un meilleur?

Merci

Répondre

1

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

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

Questions connexes