0
Скажем, у меня есть вектор 4 поплавками:Есть ли эквивалент _mm_slli_si128 (__ m128i a, int num) для поплавков?
__m128 vector = |f0|f1|f2|f3| (pseudocode)
Мое намерение состоит в том, чтобы превратить эту переменную в этом:
|0.0|f0|f1|f2|
Doing сдвиг вправо, казалось бы, самый простой выбор, но я не смогли найти такое внутреннее пространство, доступное для поплавков.
Что было бы самым быстрым способом для этого?
'_mm_shuffle_ps' +' _mm_and_ps' –
Я сделал это и принцип работы. Однако я не уверен, какие значения я должен вводить в качестве параметров для хранения последних чисел с плавающей запятой: vb = _mm_and_ps (vb, _mm_set_ps (?,?,?, 0)). – ismarlowe
Альтернативой является использование двух приведений: '_mm_castsi128_ps' и' _mm_castps_si128', так что вы все равно можете использовать '_mm_slli_si128'. Эти приведения не генерируют никаких инструкций. Единственное наказание - это небольшое увеличение латентности от перехода от float к целочисленному домену и наоборот. – wim