ja Wektoryzacja kawałek kodu i w pewnym momencie mam następującą konfigurację:Multiply-odejmować w SSE
register m128 a = { 99,99,99,99,99,99,99,99 }
register m128 b = { 100,50,119,30,99,40,50,20 }
Jestem obecnie pakowania short
S w tych rejestrach, dlatego mam 8 wartości na zarejestrować. Chciałbym odjąć pierwszy element w postaci b
z odpowiednią wartością w a
, jeśli wartość 1 to b
jest większa niż lub równa wartości w a
(w tym przypadku a
jest wypełniona stałą 99). W tym celu, najpierw wykorzystać większy niż lub równy pracy pomiędzy b
i a
, co daje, w tym przykładowo:
register m128 c = { 1,0,1,0,1,0,0,0 }
do zakończenia operacji, że nie mogło być użyciu wielowarstwowej-i-Odejmij , czyli do przechowywania w b
operacji b -= a*c
. Wynik byłby następujący:
b = { 1,50,20,30,0,40,50,20 }
Czy istnieje jakakolwiek operacja, która robi coś takiego? To, co znalazłem, było połączonymi operacjami dla Haswella, ale obecnie pracuję nad Sandy-Bridge. Ponadto, jeśli ktoś ma lepszy pomysł, aby to zrobić, proszę dać mi znać (np mogłem zrobić logiczną Odejmij. Jeśli 1 w c
potem odjąć, nic poza tym
Właśnie w celu wyjaśnienia, powinna być operacja 'b - = a * C', aby wykonać odpowiednie odejmowanie? – Alejandro
Prawidłowo, @Alejandro – a3mlord