2009-06-03 2 views
31

제온 용으로 최적화 할 때 사용할 gcc 컴파일러 플래그를 입력하고 싶습니다.제온 용 gcc 최적화 플래그?

mtune 또는 march에 'xeon'이 없으므로 가장 가까운 일치 항목이 있습니까?

+3

어떤 Xeon이 타겟팅되는지 더 자세히 알고 싶을 수 있습니다. 제온 (Xeon) 브랜드는 꽤 오랜 기간 동안 사용되어 왔으며 매우 다양한 아키텍처에 이르기까지 다양합니다. –

답변

7

제온은 마케팅 용어로서 매우 다른 내부 구조의 프로세서 목록을 포함합니다.

새로운 Nehalem 프로세서 (Core i7)를 사용하신다면 this slide은 4.3.1 gcc에서 -march = generic을 사용해야 함을 나타냅니다. 그러나 자신의 응용 프로그램을 테스트 할 때 다른 설정이있을 수 있습니다. FP 수학의 측면을 최적화하려면 4.3 계열에 -msse4.2를 추가하십시오.

여기에 some discussion은 인텔 컴파일러의 튜닝과 일부 gcc 플래그의 비교입니다.

+4

토론은 끊어진 링크입니다. 사실, 두 링크가 모두 망가져 있습니다. :) –

20

최신 버전의 gcc는 -march = native이므로 컴파일러에서 최적의 -march 플래그를 자동으로 결정합니다.

+1

-mtune = native로 묶어서 작업을 완료했습니다. – ismail

+14

실제로, -mtune을 명시 적으로 지정하지 않으면, -march는 gcc 문서에 따라 전달 된 -march와 동일한 암시 적 -mtune을가집니다. – user83255

+0

-march = native로 빌드 된 코드는 컴파일 된 호스트가 아닌 다른 CPU에서 실행될 필요는 없습니다. – bleater

3

march = native는 자신의 컴퓨터에서는 정상이지만 바이너리 릴리스에서는 좋지 않습니다.

-march = 노코나는 원자 330 (P4/64 비트) -march = 코어 2 난 당신이 64 비트를거야 있으리라 믿고있어 코어 2

위한 권장된다.

2

인텔 CPU 및 x86_64에 대한 나의 경험은 gcc가 특정 CPU 유형을 최적화하도록 할 때마다 성능이 -march = generic보다 좋지 않은 것으로 나타났습니다. YMMV, 물론, 그러나 나는 여러 해 동안 이런 것들을 가지고 놀고 있었고, 항상 그렇게 해왔다.

OTOH, 그것은 감각, 적어도는 i686 대상으로하거나 만들 수도 i386에서 당신은 SSE 수학, 적어도 펜티엄 4

51

최근 GCC/제온에 대한 업데이트를 원하는 경우.

  • Sandy-Bridge-based 제온 (E3-12xx 시리즈 E5-14xx/24XX 시리즈는 E5-16xx/26xx/46XX 시리즈).

    -march=corei7-avx GCC < 4.9.0 또는 -march=sandybridge GCC> 4.9.0 인 경우.

    이렇게하면 Advanced Vector Extensions support과 Sandy Bridge에 대한 AES 및 PCLMUL 명령어 세트를 사용할 수 있습니다. 다음은 GCC의 i386/x86_64의 옵션 페이지에서 개요입니다 :

    64 비트 확장, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES와

    인텔 코어 i7 CPU와 PCLMUL 명령어 세트 지원.

  • Ivy-Bridge-based 제온 (E3-12xx V2 시리즈, E5-14xx V2/V2의 24XX 시리즈, E5-16xx V2/26xx에 V2/V2의 46XX 시리즈, E7-28xx에 V2/48xx에 V2/88xx v2 시리즈).

    -march=core-avx-i GCC < 4.9.0 또는 -march=ivybridge GCC> = 4.9.0 인 경우.

    새로운 Ivy 명령 세트 (FSGSBASE, RDRNDF16C)를 지원하기 위해 Sandy Bridge (corei7-avx) 옵션을 포함합니다. GCC 옵션 페이지에서 :

    64 비트 확장, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND 및 F16C6 명령과

    인텔 코어 CPU 지원을 설정하십시오.

  • Haswell-based 제온 (E3-1xxx V3 시리즈, E5-1xxx V3 시리즈, E5-2xxx V3 시리즈).

    -march=core-avx2 GCC 4.8.2/4.8.3 또는 -march=haswell for GCC> = 4.9.0. GCC 옵션 페이지에서

    :

    64 비트 확장, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2 인텔 하 스웰의 CPU, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 및 F16C 명령 세트 지원.

  • Broadwell-based 제온 (E3-12xx의 V4 시리즈 E5-16xx의 V4 시리즈)

    GCC 4.8.x에 대한 -march=core-avx2 또는 GCC> = 4.9.0 용 -march=broadwell. GCC 옵션 페이지에서

    :

    64 비트 확장, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2 인텔 브로드 웰의 CPU, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX 및 PREFETCHW 명령 세트 지원.

  • Skylake-based 제온 GCC 가입일 (E3-12xx의 V5 시리즈)

    GCC 4.8.x에 대한 -march=core-avx2 또는 GCC 4.9.x에 대한 -march=skylake 또는 GCC위한 -march=skylake-avx512> = 5.x를

    옵션 페이지 :

    64 비트 확장, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCN와

    인텔 스카이 레이크 서버 CPU T, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, AVX512F, AVX512VL, AVX512BW, AVX512DQ 및 AVX512CD 명령 세트 지원.

는 사용할 수있는 컴파일러는 -march=native 옵션과 함께 할 것을 확인하세요

gcc -march=native -Q --help=target 
3

다음은 프로세서가 지원하는 모든 플래그를 표시합니다 :

cat /proc/cpuinfo | grep flags | head -1 

proccesor에 대해 최적화가 어떤 것인지를 결정하는 가장 좋은 방법은 모델뿐만 아니라 gcc의 버전에 따라 다릅니다 컴파일 중입니다. 자신의 문서에 당신이 가진 GCC의 버전을 반드시 확인하고 상호 참조하십시오 :

https://gcc.gnu.org/onlinedocs

즉, 내가 GCC 4.8.2을 가지고 슬랙웨어 14.1 64를, 그래서 내가 여기에 갈 것 :

https://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options

관련 문제