Eigen 라이브러리를 사용하는 프로그램에서 2D 벡터를 사용해야합니다. 의 x()
및 y()
계산이 동일한 경로를 따라 양쪽으로 vectorisation에 대한 주요 후보처럼 보인다 지저분한 있지만,Eigen을 사용하여 표현식을 벡터화하기
static inline double eval(double x, double y, double xi, double yi)
{
const double invlen2 = 1/(x*x + y*y);
const double invlen4 = invlen2*invlen2;
const double invlen6 = invlen4*invlen2;
const double x2 = x*x, y2 = y*y;
const double x3 = x2*x, y3 = y2*y;
const double xi2 = xi*xi, yi2 = yi*yi;
return x*invlen2 + invlen4*(x2*xi + 2*x*y*yi - xi*y2)
+ invlen6*(x3*xi2 + 3*x*y2*yi2 + 6*x2*y*xi*yi - 3*x*xi2*y2 - 2*y3*xi*yi - x3*yi2);
}
void f(Vector2d& out, const Vector2d& R, const Vector2d& r)
{
out.x() = eval(R.x(), R.y(), r.x(), r.y());
out.y() = eval(R.y(), R.x(), r.y(), r.x());
}
이 표현 : 내 내부 루프에서 나는 다음과 같은 기능을 가지고있다. 내 질문은 수동으로 어셈블리를 드롭 다운하지 않고 Eigen 함께 할 방법입니다.