Estoy buscando el método más eficaz de voltear el signo en los cuatro flotadores empaquetados en un registro SSE.Muestra de volteo en flotadores SSE empaquetados
No he encontrado una intrínseca para hacer esto en el manual de desarrollo del software Intel Architecture. A continuación están las cosas que ya he intentado.
Para cada caso hice un bucle sobre el código 10 mil millones de veces y obtuve el tiempo de pared indicado. Estoy tratando de al menos coincidir con 4 segundos. Se necesita mi enfoque que no sea SIMD, que solo utiliza el operador unario negativo.
[48 seg]
_mm_sub_ps(_mm_setzero_ps(), vec);
[32 seg]
_mm_mul_ps(_mm_set1_ps(-1.0f), vec);
[9 seg]
union NegativeMask { int intRep; float fltRep; } negMask; negMask.intRep = 0x80000000; _mm_xor_ps(_mm_set1_ps(negMask.fltRep), vec);
El compilador es gcc 4.2 con -O3 . La CPU es un Intel Core 2 Duo.
Sin embargo, Aviso - usando extensiones-gcc específica como esta esto hace que su código no portátil. –
¿miró el código que esto genera? – Aktau