your programing

GCC : 행진은 mtune과 어떻게 다른가요?

lovepro 2020. 10. 14. 08:16
반응형

GCC : 행진은 mtune과 어떻게 다른가요?


나는 이것을 위해 GCC man 페이지를 스크럽하려고했지만 여전히 이해하지 못한다.

-march의 차이점은 무엇입니까 -mtune?

하나는 언제 -march둘 다 사용합니까? 그냥 가능 -mtune할까요?


사용하는 -march경우 GCC는 지정된 CPU에서 작동하지만 아키텍처 제품군의 (일반적으로) 이전 CPU에서는 작동하지 않는 명령을 자유롭게 생성 할 수 있습니다. 를 사용 -mtune하면 컴파일러는 이들 중 하나에서 작동하는 코드를 생성하지만 지정한 특정 CPU에서 가장 빠르게 실행되는 명령어 시퀀스를 선호합니다.


이것이 내가 검색 한 것입니다.

-march=X옵션은 CPU 이름을 취하고 XGCC가의 모든 기능을 사용하는 코드를 생성 할 수 있도록 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. genericGCC는 현재 CPU에서 가장 잘 실행되는 코드를 생성합니다 ( genericGCC의 한 버전에서 다른 버전으로 변경을 의미 함 ). 젠투 포럼에 소문이있다 -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

반응형