GCC : 행진은 mtune과 어떻게 다른가요?
나는 이것을 위해 GCC man 페이지를 스크럽하려고했지만 여전히 이해하지 못한다.
-march
과 의 차이점은 무엇입니까 -mtune
?
하나는 언제 -march
둘 다 사용합니까? 그냥 가능 -mtune
할까요?
사용하는 -march
경우 GCC는 지정된 CPU에서 작동하지만 아키텍처 제품군의 (일반적으로) 이전 CPU에서는 작동하지 않는 명령을 자유롭게 생성 할 수 있습니다. 를 사용 -mtune
하면 컴파일러는 이들 중 하나에서 작동하는 코드를 생성하지만 지정한 특정 CPU에서 가장 빠르게 실행되는 명령어 시퀀스를 선호합니다.
이것이 내가 검색 한 것입니다.
이 -march=X
옵션은 CPU 이름을 취하고 X
GCC가의 모든 기능을 사용하는 코드를 생성 할 수 있도록 X
합니다. GCC 매뉴얼은 어떤 CPU 이름이 어떤 CPU 제품군과 기능을 의미하는지 정확히 설명합니다.
기능은 일반적으로 추가되지만 제거되지는 않기 때문에로 빌드 된 바이너리 -march=X
는 CPU X
에서 실행되고보다 새로운 CPU에서 실행될 수있는 좋은 기회를 X
갖지만,보다 오래된 버전에서는 실행되지 않을 것 X
입니다. 특정 명령 세트 (3DNow !, 내 생각 엔?)는 특정 CPU 공급 업체에 따라 다를 수 있으며,이를 사용하면 경쟁 CPU에서 실행되지 않는 바이너리를 얻을 수 있습니다.
이 -mtune=Y
옵션 Y
은 실행될 수있는 다른 CPU보다 빠르게 실행되도록 생성 된 코드를 조정합니다 . -march=X
을 의미합니다 -mtune=X
. -mtune=Y
대체하지 않습니다 -march=X
때문에, 예를 들어, 아마에 아무 의미, -march=core2
그리고 -mtune=i686
보다 오래된 아무것도 실행되지 않습니다 코드 - core2
때문에, 어쨌든 -march=core2
왜 지구에 당신이 코어 2 이상 (보다 풍부한 기능) 나이가 뭔가를 최적화하려는 것? -march=core2 -mtune=haswell
것 이상의 어떤 기능을 사용하지 않는 : 더 의미가 core2
제공합니다 (더 많은 것보다 아직이다 -march=i686
,하지만 훨씬 더 새로운 최적화 코드를 할 당신을 제공합니다!) haswell
하지 않는 CPU를, core2
.
또한 -mtune=generic
. generic
GCC는 현재 CPU에서 가장 잘 실행되는 코드를 생성합니다 ( generic
GCC의 한 버전에서 다른 버전으로 의 변경을 의미 함 ). 젠투 포럼에 소문이있다 -march=X -mtune=generic
빠르고에서 실행되는 코드를 생성 X
에 의해 생성 된 코드보다가 -march=X -mtune=X
(또는 않는 -march=X
등의 -mtune=X
암시가). 이것이 사실인지 아닌지는 모릅니다.
일반적으로 필요한 것이 무엇인지 정확히 알지 못하는 경우 가장 좋은 방법은 -march=<oldest CPU you want to run on>
및 -mtune=generic
( 가장 오래된 CPU에 대해 최적화하고 싶지 않기 때문에 -mtune=generic
암시 적에 대응하기 위해 여기에 있음 )를 지정하는 것 같습니다 -mtune=<oldest CPU you want to run on>
. 또는 -march=native
빌드하는 동일한 시스템에서만 실행하려는 경우.
참고 URL : https://stackoverflow.com/questions/10559275/gcc-how-is-march-different-from-mtune
'your programing' 카테고리의 다른 글
Git에서 부모없이 커밋을 생성하려면 어떻게해야합니까? (0) | 2020.10.14 |
---|---|
CSS 한 줄 또는 여러 줄 수직 정렬 (0) | 2020.10.14 |
Java 정규식 OR 연산자 (0) | 2020.10.14 |
Hibernate 오류 : 동일한 식별자 값을 가진 다른 개체가 이미 세션과 연결되었습니다. (0) | 2020.10.14 |
Namecheap을 사용하여 Firebase에서 맞춤 도메인을 확인할 수 없음 (0) | 2020.10.14 |