【发布时间】:2016-11-06 00:44:19
【问题描述】:
假设我有一个包含 4 个浮点数的向量:
__m128 vector = |f0|f1|f2|f3| (pseudocode)
我的意图是将这个变量转换成这个:
|0.0|f0|f1|f2|
右移似乎是最简单的选择,但我无法找到这种可用于浮点数的内在函数。
最快的方法是什么?
【问题讨论】:
-
_mm_shuffle_ps+_mm_and_ps -
我已经做到了,并且原理有效。但是,我不确定应该输入哪些值作为参数以保留最后一个浮点数:vb = _mm_and_ps(vb, _mm_set_ps(?, ?, ?, 0))。
-
另一种方法是使用两个强制转换:
_mm_castsi128_ps和_mm_castps_si128,这样您仍然可以使用 '_mm_slli_si128' 。这些强制转换不会生成任何指令。唯一的惩罚是从浮点数域到整数域的延迟会略有增加,反之亦然。
标签: c++ c vectorization intel intrinsics