프로젝트의 경우 특정 시스템의 성능을 최대화하기 위해 다양한 CPU를 사용하여 다양한 *NIX 운영 체제 및 관련 패키지를 컴파일할 계획입니다. 시간과 비용을 절약하기 위해 유사한 아키텍처를 사용하여 컴파일된 코드 간에 실제로 차이가 있는지 알고 싶습니다.
예를 들어: 컴파일하면데비안 GNU/리눅스+ Intel Core용 기본 저장소의 모든 패키지와 함께 제공됩니다.i7-8700Intel Core가 탑재된 시스템에서 운영 체제를 사용하는 경우i7-8650U, 실행 효과가 내가 사용하는 것과 일치합니까?i7-8650U아니면 성능이 약간 떨어지나요? (비율은 상관없어요 1%라도 알고싶습니다)
즉, 0보다 큰 값이 존재하는가(0) 같은 세대의 다른 CPU 모델에서 코드를 컴파일합니까? 그렇지 않은 경우에는 각 제조업체의 각 세대에서 하나의 CPU를 가져온 다음 다른 모든 모델에 대해 중단할 것이기 때문입니다.
답변1
실제로 최적화를 최대화하려는 경우 프로세서의 캐시 크기를 아는 데 의존하는 최적화를 포함하여 대상별 최적화를 사용하게 됩니다. 이는 -march
적절한 설정을 사용하여 사용 가능한 가장 빠른 프로세서의 다른 프로세서에 대해 컴파일 할 수 있지만 거의 확실히 프로세서당 한 번 컴파일하기를 원한다는 것을 의미합니다 -mtune
.
답변2
두 가지 다른 질문을 혼동하는 것 같습니다. 코드를 컴파일하는 데 사용되는 아키텍처는 반드시 컴파일러에서 생성된 코드에 대해 아무 의미도 없습니다. 예를 들어 다음을 고려하십시오.
$ gcc -o hello hello.c
특정 버전의 경우 gcc
기본 CPU에 관계없이 특정 하드웨어 아키텍처에 대해 동일한 코드를 생성할 수 있습니다.
그러나 몇 가지 예외가 있습니다. 예를 들어, 이 -march=native
플래그는 컴파일러가 로컬 컴퓨터 CPU의 성능을 활용할 수 있는 코드를 생성하도록 합니다. 그러나 그런 경우에도 march
컴퓨터의 CPU 아키텍처와 다른 값을 명시적으로 지정할 수 있으며 컴파일러는 컴퓨터에서 실행되지 않을 수 있는 코드를 생성합니다.