2017-01-09 1 views
2

Aus irgendeinem Grund entschied sich Intel, AVX2 nicht über die Option/arch: zu unterstützen. /arch: erkennt nur folgende Anweisungen IA32, SSE, SSE2, SSE3, AVX. Also, wenn Sie für AVX2 kompilieren möchten, sind Sie grundsätzlich gezwungen, /QxCORE-AVX2 Schalter zu aktivieren. Das Problem mit dieser Option ist, dass es Prüfcode eingibt. Dieser Code überprüft zur Laufzeit, ob Ihre CPU mit ausgewählten Anweisungen kompatibel ist. Wenn die CPU nicht kompatibel ist, erscheint diese Meldung.Intel Compiler/QxCORE-AVX2 Switch und Kompatibilität mit AMD Excavator/RyZen

Bitte überprüfen Sie, dass sowohl das Betriebssystem als auch der Prozessor Intel® MOVBE-, F16C-, FMA-, BMI-, LZCNT- und AVX2-Anweisungen unterstützen.

Jetzt mache ich mir Sorgen, dass die gleiche Meldung auf AMD Excavator und RyZen CPU wegen nicht sein GenuineIntel Pop-up erscheint. Leider habe ich keinen Zugang zu irgendeiner AMD CPU, also kann ich das auf echter CPU nicht überprüfen. Um Ihnen das Leben zu erleichtern, habe ich diesen einfachen Code mit aktivierter Option/QxCORE-AVX2 kompiliert.

#include "stdafx.h" 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    double a, b, c; 
    a = 3.0; 
    b = 2.0; 
    c = 1.0; 

    a = a*b + c; 

    printf("a=%1.1f",a); 

    return 0; 
} 

und hier wird asm-Code http://paste.ofcode.org/38GhhFEsrxsXvVgi8aQE9Hn dekompilierten oder http://codepad.org/KL4Vq978

Meine Frage an Menschen, die asm-Code verstehen, tun Sie etwas sehen, was auf den neuesten AMD-Prozessoren die Ausführung dieses Codes sperren kann? Wenn ja, hilft das http://www.softpedia.com/get/Programming/Patchers/Intel-Compiler-Patcher.shtml?

Antwort

1

Die Ryzen diese Befehlssätze unterstützt, aber der Code wird auf AMD-Prozessoren nicht laufen, weil sie überprüft, ob die Prozessor ist "EchtesIntel". Es gab eine lange Diskussion und einen Rechtsstreit zu diesem Thema. Siehe http://www.agner.org/optimize/blog/read.php?i=49

+0

Sind Sie sicher, dass es mit der neuesten Version von ICC durchgeführt wird? – Royi

+0

Ich habe es nicht versucht, aber der Compiler von Intel hat immer noch die seltsame rechtliche Notiz über Optimierungen, die für Intel-Mikroprozessoren reserviert sind. https://software.intel.com/de-de/articles/optimization-notice#opt-en –