2017-01-09 4 views
2

Intelは、typical/arch:オプションでAVX2をサポートしないことにしました。 /arch:は、次の指示のみを認識します。IA32、SSE、SSE2、SSE3、AVX。したがって、AVX2用にコンパイルする場合は、基本的に/QxCORE-AVX2スイッチをアクティブにする必要があります。このオプションの問題は、チェックコードを注入することです。実行時のコードは、CPUが選択された命令と互換性があるかどうかをチェックします。 CPUが互換性がない場合、このメッセージがポップアップします。インテル®コンパイラー/ QxCORE-AVX2スイッチとAMD Excavator/RyZenとの互換性

オペレーティングシステムとプロセッサがともにIntel(R) MOVBE、F16C、FMA、BMI、LZCNT、およびAVX2命令をサポートしていることを確認してください。

は、今私は、同じメッセージがポップアップすることをAMDショベルとRyZen CPUによるGenuineIntelされていないに心配です。残念ながら、私は実際のCPUでそれを確認することはできませんので、任意のAMDのCPUにアクセスする必要はありません。あなたの人生を楽にするために、この単純なコードを活性化された/ QxCORE-AVX2オプションでコンパイルしました。

#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; 
} 

と、ここでのasmコード http://paste.ofcode.org/38GhhFEsrxsXvVgi8aQE9Hn または http://codepad.org/KL4Vq978

逆コンパイルされたアセンブラコードを理解する人々に私の質問は、あなたが最新のAMDのCPU上で、このコードの実行をブロックするかもしれないものは何も見ていますか?はいの場合はhttp://www.softpedia.com/get/Programming/Patchers/Intel-Compiler-Patcher.shtmlが役に立ちますか?

答えて

3

/arch:CORE-AVX2が認識され、コンパイルされた実行可能ファイルにFMA命令が含まれていることが判明しました。なぜこのオプションがVisual StudioやICL/helpに表示されないのかわかりません。 Visual Studioで

のDropboxメニュー(NO AVX2!)Ryzenは、これらの命令セットをサポートしていますが、それはかどうかを確認するためのコードは、AMDプロセッサ上で実行されません http://i.cubeupload.com/y2Cre6.png

1

http://i.cubeupload.com/c1xidV.png

ICL /ヘルププロセッサは「Genuine Intel」です。この問題について長い議論と法的闘争がありました。 http://www.agner.org/optimize/blog/read.php?i=49

+0

最新版のICCで実行されていますか? – Royi

+0

私は試してみませんでしたが、インテルのコンパイラは、インテルのマイクロプロセッサ用に予約されている最適化に関する奇妙な法的通知を受けています。 https://software.intel.com/en-us/articles/optimization-notice#opt-en –