Ich bin ein Benchmarking einer Reihe von Anwendungen auf einem SandyBridge-Prozessor (i7-3820). Der Benchmark besteht aus zwei verschiedenen Versionen. Diese beiden Versionen enthalten den gleichen Code mit dem einzigen Unterschied, dass die erste Version sse/sse2 -Instrinsics und die zweite Version avx -Instrinsics verwendet.sse und avx Leistung auf Sandybridge und IvyBridge
Für die Erstellung der Benchmark I 2015
Kompilieren die Version mit sse instrinsics entweder auf x64 oder x86 dem Visual Studio verwende, ist die Ausführungszeit fast das gleiche. Aber, die Benchmark mit avx Instrinsics für x64 kompilierend, ist die Ausführungszeit am schlechtesten (fast doppelt so lang), verglichen den Benchmark mit Avx Instrinsisc und kompiliert für x86. Darüber hinaus ist die Ausführungszeit des mit x86 kompilierten Avx-Benchmarks nur eine kleine Beschleunigung (x8%), verglichen mit dem Benchmark der sse-Instrinsics.
Schließlich habe ich die oben genannten Konfigurationen auf einem Ivy-Bridge-Prozessor (i7-3770) getestet und die Ausführungszeiten zwischen x64 und x86 für avx intrincis war gleich. Aber die intrinsischen Avx-Eigenschaften zeigten keine Verbesserung gegenüber der SSE.
Gibt es eine Erklärung über die schlechte Leistung von Avx Instrinsics auf Sandy Bridge zum Kompilieren für x64?
Warum zeigen die zwei Architekturen keine Beschleunigung für den Befehl avx gegen die Befehle sse?
Außerdem habe ich versucht, verschiedene Kompilierung Wechsel von Arch: AVX zu/arch: SSE2 und umgekehrt, aber nichts wurde zu Ausführungszeiten geändert. Aber wenn ich recht habe, bewirkt die Eigenschaft Enable Enhanced instruction set in Visual Studio nur die Vektorisierung.
Vielen Dank im Voraus.
Konnten Sie den Code auch bekannt geben? – harold
Es hängt wirklich davon ab, welche AVX-Anweisungen Sie verwenden - einige bieten keinen Vorteil gegenüber ihren SSE-Äquivalenten. Aber ohne Ihren Code zu sehen, können wir nur raten, was nicht sehr konstruktiv ist. Bitte poste den entsprechenden Code, vorzugsweise als [mcve]. –
'/ arch: AVX' Effekte mehr als Vektorisierung, es ermöglicht vex codierte Anweisungen, d. H., Wenn Sie versuchen, AVX intrinsics ohne'/arch: AVX' zu verwenden, wird es nicht funktionieren. –