Sind bitweise Rotationen langsamer als bei der aktuellen Intel-CPU?

Ich war neugierig wennjava.lang.Integer.rotateLeft wird durch Verwendung einer Rotationsanweisung optimiert und hat einen Benchmark dafür geschrieben. Das Ergebnis war nicht schlüssig: Es war viel schneller als zwei Schichten, aber etwas langsamer als eine einzelne. Also habe ich es in C ++ umgeschrieben und ungefähr die gleichen Ergebnisse erzielt. Beim Kompilieren überg++ -S -Wall -O3 Ich kann die anleitung im sehenerzeugter Assembler. Meine CPU ist Intel Core i5.

DasBenchmark ist ziemlich lang und sicherlich nicht der schönste Code, aber ich glaube nicht, dass er kaputt ist. Oder ist es? Laut Dokumentation dauern die Drehungen genau wie die Schichten einen Zyklus. Kann jemand die Ergebnisse erklären?

rotations:  6860
shift:      5100

Die ersten beiden Antworten sind falsch. JIT von gcc und java kennen die Rotationsanweisungen und verwenden sie. Bezüglich gcc siehe den obigen Link, bezüglich java siehe myJava-Benchmark und seine Ergebnisse

benchmark   ns linear runtime
   Rotate 3.48 ====================
NonRotate 5.05 ==============================
    Shift 2.16 ============

Antworten auf die Frage(3)

Ihre Antwort auf die Frage