문제

저는 Intel Atom 프로세서에 대한 성능이 중요한 응용 프로그램을 개발 중입니다.

이 CPU에 가장 적합한 gcc 최적화 플래그는 무엇입니까?

도움이 되었습니까?

해결책

GCC 4.5에는 -march=atom 및 -mtune=atom 옵션이 포함됩니다.

원천: http://gcc.gnu.org/gcc-4.5/changes.html

다른 팁

라는 멋진 프레임워크가 있습니다. Acovea(진화 알고리즘을 통한 컴파일러 옵션 분석), GCC 해커 중 한 명인 Scott Rober Ladd가 작성했습니다.이는 자연 선택을 통해 특정 코드 부분에 대한 GCC 최적화 플래그를 최적화하려고 시도하는 유전적/진화적 알고리즘 프레임워크입니다.

다음과 같이 작동합니다.당신은 작은 벤치마크 코드를 작성합니다(그것은 정말 수천 번 다시 컴파일되고 실행되기 때문에) 이는 최적화하려는 더 큰 프로그램의 성능 특성을 나타냅니다.그런 다음 Acovea는 수십 개의 서로 다른 GCC 명령줄을 무작위로 구성하고 각 명령줄을 사용하여 벤치마크를 컴파일하고 실행합니다.이러한 명령줄 중 최고의 명령줄은 "부모"로부터 최고의 "유전자"를 물려받는 새로운 "자식"을 "교배"하고 "번식"할 수 있습니다.이 프로세스는 안정적인 명령줄 플래그 집합이 나타날 때까지 수십 "세대" 동안 반복됩니다.

CPU와 컴파일러 조합에 적합한 플래그를 자동으로 선택하는 스크립트가 있습니다.방금 Intel Atom을 지원하도록 업데이트했습니다.

http://www.pixelbeat.org/scripts/gcccpuopt

업데이트:나는 이전에 지정된 -march = prescott를 원자에 대해 지정했지만, 그것에 대해 자세히 살펴보면 Atom은 Merom Isa를 준수하므로 -march = core2가 더 적절하다는 것을 보여줍니다.그러나 Atom은 순서대로 코어이며 마지막 코어는 원래 펜티엄입니다.따라서 -mtune=pentium을 사용하는 것이 더 나을 수도 있습니다.불행히도 나는 테스트 할 원자가 없습니다.누구든지 다음 사이의 차이점을 벤치마킹할 수 있다면 정말 감사하겠습니다.

-march=core2 -mfpmath=sse -O3
-march=core2 -mtune=pentium -mfpmath=sse -O3

업데이트:다음은 Atom의 낮은 수준 최적화에 관한 몇 가지 유용한 기사입니다.

음, 젠투 위키에서는 프레스콧에 대해 다음과 같이 설명합니다:

http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel#Atom_N270

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"

CXXFLAGS="${CFLAGS}"

인텔에서, MID 시작하기

GCC를 사용하여 컴파일할 때 사용하는 데 권장되는 몇 가지 플래그가 있습니다.

  • -O2 또는 -O1:O2 플래그는 속도를 최적화하고 -O1 플래그는 크기를 최적화합니다.
  • -msse3
  • -행진=코어2
  • -mfpmath=sse

Pentium 4와 마찬가지로:

-march=prescott -O2 -pipe -fomit-frame-pointer

아직 GCC에 Atom 전용 최적화 플래그가 있는지는 모르겠지만 Atom 코어는 MMX/SSE/SSE2/SSE3/SSSE3 명령어 세트가 크게 추가되어 원래 Pentium과 매우 유사할 것으로 예상됩니다.물론 이는 코드가 부동 소수점이거나 DSP가 많은 경우에만 중요한 차이를 만듭니다.

아마도 다음을 시도해 볼 수 있습니다.

gcc -O2 -march=펜티엄 -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath=sse

여기에 블로그의 교차 수분이 있습니다 ...내가 정말로 바랐던 것은 아톰용 파이어폭스 컴파일 벤치마크였습니다...

주소 :http://ivoras.sharanet.org/blog/tree/2009-02-11.optimizing-for-atom.html

"결과적으로 gcc는 -mtune=native를 사용하여 매우 괜찮은 작업을 수행하는 것으로 보이며 mtune=generic은 허용 가능한 수준 이상입니다.수학이 많이 사용되는 이 벤치마크에서 가장 큰 이점은 수학에 SSE를 사용하는 것에서 비롯되지만 펜티엄4를 튜닝하면 그 이점도 파괴됩니다.

"가장 빠른 최적화와 가장 느린 최적화의 차이는 21%입니다.mtune 대신 March를 사용하면 미치는 영향은 미미합니다(도움이 되는지 안 되는지 구분하기에는 차이가 충분하지 않습니다).

"(참고용으로 k6를 포함시켰습니다. Atom에는 3dnow가 없다는 것을 알고 있습니다.)

"늦은 업데이트:k8(SSE 및 O3 사용)에 대한 튜닝은 182라는 약간 더 높은 최고 점수를 산출합니다."

i686이 가장 가깝습니다.core2로 가지 마세요.

gcc 4.1 -o3 -march = i686 gcc 4.3 -o3 -march = 네이티브

GCC 4.1 -O4 -FFAST -MATH GCC 4.3 -O4 -FFAST -MATH

http://macles.blogspot.com/2008/09/intel-cc-compiler-gcc-and-intel-atom.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top