Heim >Backend-Entwicklung >C++ >Warum ist 64-Bit-Popcount auf Intel-CPUs aufgrund falscher Datenabhängigkeiten langsamer als 32-Bit?
Falsche Datenabhängigkeit beeinträchtigt die Popcount-Leistung auf Intel-CPUs
Problem:
Sie haben erhebliches beobachtet Leistungsabweichungen zwischen der Verwendung eines 32-Bit- und eines 64-Bit-Schleifenzählers für Popcount-Vorgänge auf Intel-CPUs. Bei Verwendung eines 64-Bit-Zählers sank die Leistung um 50 %, was ursprünglich auf einen Compilerfehler zurückzuführen war.
Erklärung: Falsche Datenabhängigkeit
Intel-CPUs weisen eine falsche Abhängigkeit auf auf dem Zielregister in popcnt-Anweisungen, was sich auf mehrere Iterationen einer engen Schleife auswirkt. Diese Abhängigkeit verzögert den Befehl, bis das Zielregister verfügbar ist. Die Anzahl der von dieser Abhängigkeit betroffenen Anweisungen hängt vom Ort der Schleife ab, was zu Leistungsschwankungen führt.
Folgen der Abhängigkeit:
Compilerverhalten:
Weder GCC noch Visual Studio sind sich dieser falschen Abhängigkeit bewusst, die zu einer unvorhersehbaren Leistung basierend auf der Registerzuordnung führt. Auch anderen Compilern wie Clang und ICC fehlt dieses Wissen.
AMD-Leistung:
AMD-Prozessoren scheinen diese falsche Abhängigkeit nicht zu haben, was zu ihrer höheren Leistung beiträgt Leistung in Popcount Vorgänge.
Abhilfemaßnahmen:
Das obige ist der detaillierte Inhalt vonWarum ist 64-Bit-Popcount auf Intel-CPUs aufgrund falscher Datenabhängigkeiten langsamer als 32-Bit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!