LINUX.ORG.RU

icc error: operation only supported with simd operands that have a floating-point types

 ,


1

2

Захотелось попробовать мощь интеловского компилятора на рабочем проекте. Сам я на С не программирую, но одна утилита уж больно тормозная. Захотелось ускорить. Весь код собирается нормально с icc кроме одной функции:

util.c:(896): error: operation only supported with simd operands that have a floating-point types
 _m128i tmp0 = pn[i] | pn[i+1];
                     ^
util.c:(897): error: operation only supported with simd operands that have a floating-point types
 _m128i tmp1 = pn[i+2] | pn[i+3];
                       ^
util.c:(898): error: operation only supported with simd operands that have a floating-point types
 _m128i tmp2 = pn[i+4] | pn[i+5];
                       ^
<...>
 return tmp0 | tmp1 | tmp2 | tmp3;
Я так понял, что _m128i в gcc и icc ведут себя по разному? Есть идеи на что его заменить тут так чтобы по прежнему возвращать тип совместимый с _m128i ?


A pn это массив чего? Чего-то целочисленного?

Если попробовать вот так: _m128i tmp0 = (_m128i)(pn[i] | pn[i+1]); ? Но это я так, почти от балды посоветовал, лучше покажите полностью алгоритм

Deleted ()
Ответ на: комментарий от Deleted

A pn это массив чего? Чего-то целочисленного?

Таких же точно _m128i, так что приведение типов вряд ли поможет. Оно недовольно операцией «|».

ls90 ()
Ответ на: комментарий от ls90

А почему _mm, а не _sse ?

Такой встроенной функции (_sse) нет, по-моему. Вообще, я просто погуглил. Нормального описания этих функций я почему-то не нашел, но судя по прототипу должно работать.

Sorcerer ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.