Pregunta

Quiero vectorizar con la mano algo de código C, con el fin de que speedup. Para ese propósito (SPE en el procesador Cell, o CBE) Quiero usar SIMD matemáticas. El código utiliza originalmente algunos cálculos vector físicas (velocidad, aceleración, etc), por lo que en algunas partes del código hay una gran cantidad de operaciones como;

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

lo que en este punto pensé acerca de la conversión v de y r de a vectores (en la SPE, un vector puede contener 4 valores flotantes individuales), así que en pseudocódigo que debe ser algo como

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

por lo que usted piensa que este enfoque valores de las partes o se puede pensar en una mejor?

Gracias

¿Fue útil?

Solución

Si usted tiene que hacer y deshacer los componentes en cada cálculo SIMD, es poco probable que conseguir mucho, en su caso, aumento de velocidad en absoluto.

Usted realmente necesita para ver si se puede hacer cambios más profundos, por lo que los componentes se mantienen normalmente en forma vectorial y transferir como vectores tanto como sea posible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top