ich ein Stück Code bin Vektorisierung und irgendwann habe ich folgendes Setup:Multiply-subtrahieren
register m128 a = { 99,99,99,99,99,99,99,99 }
register m128 b = { 100,50,119,30,99,40,50,20 }
Ich bin zur Verpackung short
s in diesen Registern, weshalb ich 8 Werte pro registrieren. Ich möchte das i-te Element in b
mit dem entsprechenden Wert in a
subtrahieren, wenn der i-te Wert von b
größer oder gleich dem Wert in a
ist (In diesem Fall wird a
mit der Konstante gefüllt 99). Zu diesem Zweck verwende ich zunächst eine größer oder gleich zwischen b
und a
, die Ausbeuten für dieses Beispiel:
register m128 c = { 1,0,1,0,1,0,0,0 }
Um den Vorgang abzuschließen, Ich mag würde die Multiplikations- und subtrahieren verwenden , dh in b
die Operation b -= a*c
zu speichern. Das Ergebnis wäre dann:
b = { 1,50,20,30,0,40,50,20 }
Gibt es irgendeine Operation, die so etwas tut? Was ich gefunden habe, waren fusionierte Operationen für Haswell, aber ich arbeite gerade an Sandy-Bridge. Auch, wenn jemand eine bessere Idee, dies zu tun hat, lassen Sie es mich wissen (zB ich könnte eine logische subtrahieren tun. Wenn 1 in c
dann ziehe ich, nichts sonst
Nur um zu klären, sollte Ihr Betrieb 'b - = a * c ', die entsprechende Subtraktion durchzuführen? – Alejandro
Richtig, @Alejandro – a3mlord