Schnellste Methode zur Berechnung des Absolutwerts mit SSE

ch kenne 3 Methoden, aber soweit ich weiß, werden im Allgemeinen nur die ersten 2 verwende

Maskiere das Vorzeichen-Bit mitandps oderandnotps.

Pros: Eine schnelle Anweisung, wenn sich die Maske bereits in einem Register befindet, was sie perfekt macht, um dies viele Male in einer Schleife zu tun.Cons: Die Maske befindet sich möglicherweise nicht in einem Register oder in einem schlechteren Zustand, auch nicht in einem Cache, was zu einem sehr langen Speicherabruf führt.

Subtrahieren Sie den Wert von Null, um ihn zu negieren, und ermitteln Sie dann das Maximum des Originals und des Negierten.

Pros: Feste Kosten, da zum Abrufen nichts erforderlich ist, wie eine Maske.Cons: Ist bei idealen Bedingungen immer langsamer als die Maskenmethode, und wir müssen auf das @ wartsubps muss ausgefüllt werden, bevor das @ verwendet wimaxps Anweisung

Ähnlich wie bei Option 2, subtrahieren Sie den ursprünglichen Wert von Null, um ihn zu negieren, aber dann "bitweise und" das Ergebnis mit dem Original mithilfe vonandps. Ich habe einen Test durchgeführt, der dies mit Methode 2 vergleicht, und es scheint sich, abgesehen vom Umgang mit @, identisch mit Methode 2 zu verhalteNaNs, in diesem Fall ist das Ergebnis ein anderesNaN als das Ergebnis von Methode 2.

Pros: Sollte etwas schneller als Methode 2 sein, daandps ist normalerweise schneller alsmaxps.Cons: Kann dies zu unbeabsichtigtem Verhalten führen, wennNaNs sind beteiligt? Vielleicht nicht, weil einNaN ist immer noch einNaN, auch wenn es ein anderer Wert von @ iNaN, richtig

Gedanken und Meinungen sind willkommen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage