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が役に立ちますか?
最新版のICCで実行されていますか? – Royi
私は試してみませんでしたが、インテルのコンパイラは、インテルのマイクロプロセッサ用に予約されている最適化に関する奇妙な法的通知を受けています。 https://software.intel.com/en-us/articles/optimization-notice#opt-en –