Можно ли векторизовать умножение в VC ++ без SSE4? - PullRequest
4 голосов
/ 28 марта 2011

Я хочу векторизовать операцию умножения.Я попытался использовать _mm_mul_epi32, но мой процессор поддерживает только инструкцию "MMX, SSE (1,2,3,3S), EM64T".

Может кто-нибудь сказать, могу ли я попробовать другую функцию?

1 Ответ

4 голосов
/ 28 марта 2011

Это зависит от диапазона ваших мультипликаторов - если они умещаются в 16 битах, то перед SSE4 доступно несколько инструкций SSE 16 х 16 бит (например, mm_madd_epi16, mm_mulhi_epi16, mm_mullo_epi16, mm_mulhrs_epi16 и т. Д.).

Если вам нужны 32-битные операнды, но они не подписаны, вы можете использовать mm_mul_epu32.

В качестве альтернативы вы можете преобразовать в число с плавающей точкой и использовать _mm_mul_ps (целочисленное <-> преобразование с плавающей точкой в ​​SSE достаточно эффективно, и стоимость может быть оправдана, если вы получите повышение пропускной способности SIMD в 4 раза).

...