Как оптимизировать строку кода «u[0]*v[0] + u[2]*v[2]» с помощью SSE или GLSL

] У меня есть следующая функция (из проекта с открытым исходным кодом "recast navigation"):

/// Derives the dot product of two vectors on the xz-plane. (@p u . @p v)
///  @param[in]     u       A vector [(x, y, z)]
///  @param[in]     v       A vector [(x, y, z)]
/// @return The dot product on the xz-plane.
///
/// The vectors are projected onto the xz-plane, so the y-values are ignored.
inline float dtVdot2D(const float* u, const float* v)
{
    return u[0]*v[0] + u[2]*v[2];
}

Я запустил это через тест производительности процессора VS2010, и он показал мне, что во всей переработанной кодовой базе кода в этой функции u[0]*v[0] + u[2]*v[2]самый горячий процессор.

Как я могу оптимизировать ЦП (через SSE или GLSL, например, GLM (если это проще или быстрее и подходит в таком случае)например) эту строку?

Редактировать: Контекст, в котором появляются вызовы:

bool dtClosestHeightPointTriangle(const float* p, const float* a, const float* b, const float* c, float& h) {
    float v0[3], v1[3], v2[3];
    dtVsub(v0, c,a);
    dtVsub(v1, b,a);
    dtVsub(v2, p,a);

    const float dot00 = dtVdot2D(v0, v0);
    const float dot01 = dtVdot2D(v0, v1);
    const float dot02 = dtVdot2D(v0, v2);
    const float dot11 = dtVdot2D(v1, v1);
    const float dot12 = dtVdot2D(v1, v2);

    // Compute barycentric coordinates
    const float invDenom = 1.0f / (dot00 * dot11 - dot01 * dot01);
    const float u = (dot11 * dot02 - dot01 * dot12) * invDenom;
    const float v = (dot00 * dot12 - dot01 * dot02) * invDenom;

10
задан genpfault 21 January 2018 в 18:39
поделиться