Fragen? Antworten! Siehe auch: Alternativlos
Ich habe vorhin diese Webseite gefunden, die ein Stück Code hat, das Popcount von Hand macht, und damit schneller ist als die dedizierte Instruktion.
Das ist erstaunlicherweise nicht das erste Mal, dass CPU-Bauern sowas passiert. Aber gerade bei Popcount wundert es mich, weil da die Begründung für die dedizierte Instruktion Performance war.
Schon merkwürdig, dass sowas immer wieder mal vorkommt.
Ein anderes bekanntes Beispiel ist die Loop-Instruktion bei x86, die aus historischen Gründen langsamer ist als wenn man von Hand ein Register runterzählt und einen Conditional Jump macht. AMD hat die Instruktion zu K5-Zeiten mal ordentlich implementiert, und plötzlich platzten auf ihren CPUs alle möglichen Turbo-Pascal-Programme, weil deren Runtime eine Schleife mit der Loop-Instruktion benutzt hat, um ihre Millisekunden-Warten-Funktion zu kalibrieren. Und das ergab dann eine Division durch Null oder sowas, weil AMD zu schnell war.
Es gibt bei modernen CPUs immer wieder solche lustigen Geschichten an irgendwelchen staubigen Ecken :-)
Update: Ich sollte dazu sagen, dass das nicht nur für die NSA wichtig ist. Popcount kann man auch beim Videocoding brauchen, für die Hammingdistanz (relevant für Kodierungsverfahren), und sogar für Biometrie und Computerschach. Der Hauptgrund, wieso die neuen Verfahren flotter sind, ist weil die auf breiteren Vektoren arbeiten können.