Пиша SSE код за 2D конволюция, но SSE документацията е много оскъдна. Изчислявам точков продукт с _mm_dp_ps и използвам _mm_extract_ps, за да получа резултата от точковия продукт, но _mm_extract_ps връща шестнадесетичен, който представлява число с плаваща величина, и не мога да разбера как да преобразувам това шестнадесетично число с плаваща величина в обикновено плаващо число. Бих могъл да използвам __builtin_ia32_vec_ext_v4sf, който връща float, но искам да запазя съвместимостта с други компилатори.
_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;
}
Каква точка пропускам?
Малко помощ ще бъде оценена, благодаря.
OpenSUSE 11.2
GCC 4.4.1
C++
Опции на компилатора
-fopenmp -Wall -O3 -msse4.1 -march=core2
Опции на линкера
- lgomp -Wall -O3 -msse4.1 -march=core2