Sto scrivendo un codice SSE in convoluzione 2D ma la documentazione SSE è molto scarsa. Sto calcolando il prodotto punto con _mm_dp_ps e utilizzando _mm_extract_ps per ottenere il risultato del prodotto del punto, ma _mm_extract_ps restituisce un esadecimale che rappresenta un valore float e non riesco a capire come convertire questo float esadecimale in un float normale. Potrei usare __builtin_ia32_vec_ext_v4sf che restituisce un float ma voglio mantenere la compatibilità con altri compilatori.Come convertire un float esadecimale in un float in C/C++ usando _mm_extract_ps SSE GCC instrinc function
_mm_extract_ps (__m128 __X, const int __N)
{
union { int i; float f; } __tmp;
__tmp.f = __builtin_ia32_vec_ext_v4sf ((__v4sf)__X, __N);
return __tmp.i;
}
Che punto mi manca?
Un piccolo aiuto sarà apprezzato, grazie.
OpenSUSE 11.2
GCC 4.4.1
C++
opzioni del compilatore
-fopenmp -Wall -O3 -msse4.1 -march = Core2
opzioni del linker
-lgomp -Wall -O3 -msse4. 1 -march = core2
Ho pensato anch'io. –
Suppongo che dipenda dal modo in cui Intel descrive le istruzioni contenute nella loro documentazione, il che può essere o meno un errore: le intestazioni di gcc implementano semplicemente ciò che è presente nella documentazione. –