Linux Kernel AVX2-Unterstützung

1188
719016

Ich würde gerne wissen, wann der Linux-Kernel so modifiziert wurde, dass er die volle Unterstützung für AVX2-Befehlssätze bietet.

Ich habe einige Software mit AVX2-Befehlssatz getestet, von der behauptet, dass ein anderer Benutzer auf einem Linux-Computer 20% schneller in der Hand ist, aber meine Tests wurden auf einem Server mit avx2-Unterstützung durchgeführt, /proc/cpuinfowobei ein Kernel verwendet wurde: 3.10.0-229.1.2. el7.x86_64

Ist Kernel 3.10.0 aktuell genug für die vollständige Unterstützung von AVX2?

PS: Umformulierung aus einem Kommentar: Was ist der Kernel, der AVX2 vollständig für eine mit der neuesten Version von GCC kompilierte Binärdatei unterstützt, die vermutlich die beste Unterstützung für AVX2 ist?

1
Bitte definieren Sie 'volle AVX2-Unterstützung'. Wenn kompilierte Software ausgeführt wird, ist dies normalerweise vom Compiler und nicht vom Linux-Kernel abhängig. OTOH, wenn Sie sich RAID6-Benchmarks ansehen, ist es wichtig, wann der Support zum Kernel hinzugefügt wurde. ChrisInEdmonton vor 8 Jahren 0

1 Antwort auf die Frage

1
orange_juice6000

Um Anwendungen mit avx2-Code auszuführen, muss der Kernel das Speichern / Wiederherstellen des Status der CPU beim Wechseln zwischen Aufgaben ordnungsgemäß ausführen. Dies wurde in 2.6.30 ( https://kernelnewbies.org/Linux_2_6_30 ) durchgeführt. Der sw muss außerdem avx2-Code enthalten (möglicherweise ist die Compile-Time-Entscheidung, ob er sie enthalten soll oder nicht) und kann ihn verwenden (oder er kann beides enthalten und die Laufzeit bestimmen, aber dazu muss er feststellen, dass Ihre CPU avx2 unterstützt). Wie viel Nutzen avx2 bringt, hängt auch von der CPU ab (einige CPUs unterstützen sie, profitieren aber aus verschiedenen Gründen nicht wirklich davon. Intel-CPUs profitieren im Allgemeinen mehr als AMD-CPUs und jede neuere Generation profitiert mehr davon).

Der Kernel selbst kann auch avx2-optimierten Code für Dinge wie Verschlüsselung, Hashing, Komprimierung und alles andere enthalten, was davon profitiert (nicht alles tut es, und einige Dinge, die theoretisch funktionieren, sind mit avx2 auf eine korrekte und korrekte Weise sehr schwer zu codieren schneller als Skalarcode, der dasselbe tut), abhängig von den Einstellungen, die zur Kompilierzeit verwendet wurden.

Sie können dies überprüfen, indem Sie Dinge wie dmesg | grep avx2 oder Lesen der config-Datei (die zum Kompilieren des aktuell laufenden Kernels verwendete config ist manchmal unter /proc/config.gz zu finden) und sucht nach avx2.