Ich beschäftige mich mit der Bildverarbeitung. Ich muss den 16-Bit-Integer-SSE-Vektor durch 255 teilen.
Ich kann den Shift-Operator nicht wie _mm_srli_epi16 () verwenden, weil 255 kein Vielfaches von Potenz 2 ist.
Ich weiß natürlich, dass es möglich ist, Integer in Float zu konvertieren, Division durchzuführen und dann die Konvertierung in Integer zurückzusetzen.
Aber vielleicht weiß jemand eine andere Lösung ...
Wenn Sie ein exakt korrektes Ergebnis für alle Fälle wünschen, folgen Sie dem Rat von Marc Glisse Kommentar zu der Frage Anton verlinkt: SSE Integer Division?
Verwenden Sie die native Vektorsyntax von GNU C, um die Teilung eines Vektors nach dem angegebenen Skalar auszudrücken und zu sehen, was es tut :
%Vor%Auf die Gefahr der Blähung der Antwort, hier ist es wieder mit intrinsics:
%Vor% Beachten Sie in der Ausgabe von godbolt, dass gcc intelligent genug ist, die gleiche 16B-Konstante für die set1
im Speicher zu verwenden, und für die, die sie selbst generiert hat, für div255
. AFAIK, das funktioniert wie string-constant merging.
Tags und Links c++ image-processing sse simd sse2