は、私は次のように2要素ベクトルは(パックされたベクトルのGCCの構文を使用して)定義があるとしコンピューティングのx^yの
// packed vector of 2-elements
typedef double v2d __attribute__((vector_size(sizeof(double)*2)));
v2d x = ...;
double y = ...;
x[0] = pow(x[0], y)
x[1] = pow(x[1], y)
私が行うにはより高速な方法がありますかどうかを知りたいのですがベクトル演算を用いた2つのパワー計算。アーキテクチャはx86-64上のGCCであり、プラットフォーム固有のコードはOKです。
は困難です。ベクトル化によって価値のあるスピードアップを得るには、分岐が多すぎる可能性があります。しかし、私は思っているだけです。 – Mysticial
いいえ、SIMD命令セットにはpow()の高速化を可能にする操作はありません。 SSE2には、add、sub、mul、div、max、min、およびsqrtしかありません。それにはベクトル化されていない命令さえありません。 –
"y"がdoubleではなくunsigned intに制限されていれば、ある程度の希望があるかもしれません。実際、古典的な「シフト・アンド・マルチプライ」アルゴリズムでは、2つのベクトルの要素を並行して評価することができます。ちょうど私の推測。 –