1

高速化するために、いくつかの C コードを手動でベクトル化したいと考えています。その目的 (Cell プロセッサまたは CBE 上の SPE) のために、SIMD 演算を使用したいと考えています。コードは元々物理的なベクトル計算 (速度、加速度など) を使用しているため、コードの一部には次のような多くの操作があります。

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

この時点で、v と r をベクトルに変換することを考えました (SPE では、1 つのベクトルに 4 つの単一の float 値を含めることができます)。疑似コードでは、次のようになります。

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

このアプローチは価値があると思いますか、それともより良いアプローチを考えられますか?

ありがとう

4

1 に答える 1

1

SIMD 計算のたびにコンポーネントをパックおよびアンパックする必要がある場合は、速度が向上したとしても、大幅に高速化される可能性はほとんどありません。

コンポーネントが通常はベクトル形式で保持され、可能な限りベクトルとして渡されるように、より深い変更を加えることができるかどうかを実際に確認する必要があります。

于 2010-08-27T02:42:22.823 に答える