Постоянные числа с плавающей точкой с SIMD

Я пробовал оптимизировать некоторый код, который у меня есть, используя встроенные функции sse от Microsoft. Одна из самых больших проблем при оптимизации моего кода - это LHS, возникающая всякий раз, когда я хочу использовать константу. Кажется, есть некоторая информация о генерации определенных констант ( здесь и здесь - раздел 13.4 ), но вся его сборка (чего я бы предпочел избежать).

Проблема в том, когда Я пытаюсь реализовать то же самое с встроенными функциями, msvc жалуется на несовместимые типы и т. Д. Кто-нибудь знает какие-либо эквивалентные трюки с использованием встроенных функций?

Пример - Генерировать {1.0,1.0,1.0,1.0}

//pcmpeqw xmm0,xmm0 
__m128 t = _mm_cmpeq_epi16( t, t );

//pslld xmm0,25 
_mm_slli_epi32(t, 25);

//psrld xmm0,2
return _mm_srli_epi32(t, 2);

Это генерирует кучу ошибки о несовместимом типе (__m128 vs _m128i). Я новичок в этом, так что почти уверен, что упускаю что-то очевидное. Может ли кто-нибудь помочь?

tldr - Как мне сгенерировать __m128 vec, заполненный постоянными числами с плавающей запятой одинарной точности, с помощью встроенных функций ms?

Спасибо за чтение :)

7
задан JBeFat 3 July 2011 в 21:05
поделиться