2014-09-13 4 views
2

구성 : Intel (R) Core (TM) i7-4702MQ CPU (Haswell 아키텍처 포함), Windows 8, Intel C++ Compiller XE 13.0. 내가 AVX2 최적화 내 프로그램을 실행하려면 넣어 컴파일 플래그 :어떻게 운영 체제가 avx2 명령어를 지원하는지 확인하십시오.

/QaxCORE-AVX2, /QxCORE-AVX2

하지만이 프로그램을 실행할 때 내가 얻을 오류 :

Fatal Error: This program was not built to run in your system. Please verify that both the operating system and the processor support Intel(R) AVX2, BMI, LZCNT, HLE, RTM, and FMA instructions.

내가 페이지에 기재되어 있습니다 AVX2 CPU 지원 테스트를 실행 : How to detect new instruction support in the 4th generation Intel Core processor family. 결과 :

This CPU supports ISA extensions introduced in Haswell.

어떻게 내 운영 시스템 지원 AVX2-확장 어떤 오류의 원인이 될 수 있음을 확인할 수 있습니까? avx2 확장을 사용하려면 /QaxCORE-AVX2/QxCORE-AVX2 플래그를 모두 설정해야합니까?

UPD : 내가 플래그

프로그램이 성공적으로 시작되었습니다
/QxAVX 

을 설정합니다. 이 레지스터의 특정 세트에 지원을 확인하려면

+0

아마도 XSAVE가 사용 중지되었습니다. 나는 그것을 가능하게하는 방법을 모르지만 아마도 부팅 구성 일 것이다. – Mysticial

+0

@Mysticial IsProcessorFeaturePresent (PF_XSAVE_ENABLED) 함수를 사용하여 간단한 win32 프로젝트를 만듭니다. 이 함수는 True를 반환합니다. –

+0

언제 확인합니까? 컴파일 시간에? 런타임시에? 어쨌든 이것은 시장 관련 문제와 더 비슷합니다. 예를 들어 2955U는 공식적으로 Haswell 아키텍처를 기반으로 한 Celeron이지만 AVX의 1 세대도 제공하지 않습니다. – user2485710

답변

4

당신은 기본적으로 2 가지 옵션이 있습니다 : 컴파일러가 제공하는 CPUID 확장

  • 내장 기능 (있는 경우)와

    • 어셈블리를

    어떤 레지스터 세트가 지원되는지를 나타내는 쓰기 어셈블리는 지루하고 길고 잠재적으로 오류가 발생하기 쉬운 작업입니다. 어셈블리가 다른 OS, 다른 SoC 및 다른 ABI를 통해 이식 가능함은 말할 것도없고, CPUid의 부담도 있습니다 모든 CPU에서 항상 동일한 패턴으로 구현되는 것은 아니지만 다른 공급 업체 또는 동일한 공급 업체의 다른 CPU 제품군을 통해 동일한 정보 비트에 도달하는 다양한 방법이 있습니다. 하지만 이것은 큰 장점이 있습니다. CPU/SoC, 어셈블리 + CPUid 관련 항목에 대해 알아야 할 필요가있는 경우 아무 것도 제한되지 않습니다.

    이제 내장 함수의 형태로 CPU 기능을 조사해야 할 때 gcc 및 다른 컴파일러가 기본 요구 사항을 구현합니다. 즉,이 특수 함수는 어셈블리에서 동등한 코드를 생성하고 사용자에게 필요. gcc를 사용

    는, AVX2에 대한 검사가

    ... 
    if(__builtin_cpu_supports("avx2")) 
    { 
        ... 
    } 
    ... 
    

    문서 작성만큼 간단합니다 : 비주얼 스튜디오에 대한 http://gcc.gnu.org/onlinedocs/gcc/X86-Built-in-Functions.html

    /당신이 검색하는 데 사용할 수있는 등 __cpuid__cpuidex 같은 내장 함수가있다 MSVC 동일한 정보는 여기에 완전하고 실제적인 예가 들어있는 링크입니다.

    docs : http://msdn.microsoft.com/en-us/library/hskdteyh.aspx