최대 기계 코드 최적화 소스

최대 기계 코드 최적화 소스

및 플래그를 libc사용하여 다시 컴파일하면 정적 라이브러리 대신 공유 라이브러리가 사용되는 프로그램에 가장 큰 이점을 제공한다는 내용을 어딘가에서 읽었습니다 . 이거 진짜야? 다른 프로그램을 다시 컴파일하면 추가적인 이점이 있습니까?-march=native-mtune=native

답변1

-march=native옵션은 생성 -mtune=native된 바이너리가 사용 가능한 프로세서 기능 세트 및 일정을 최대한 활용하도록 보장합니다. 성능 향상은 추가 프로세서 기능 세트를 사용하여 최적화할 수 있는 애플리케이션 코드의 양과 관련이 있습니다. (YMMV). 최적화된 라이브러리와 바이너리는 일반 바이너리보다 빠르게 실행되어야 하지만 테스트 없이 정확한 속도를 정량화하기는 어렵습니다. 따라서 짧게 대답하자면, CPU 최적화를 통해 애플리케이션을 다시 컴파일하면 성능이 향상될 수 있지만 최적화된 빌드를 유지하고 보안 업데이트 등을 따라가는 것은 악몽이 될 수 있습니다.

GCC 4.4.4 i386 및 amd64 아키텍처 옵션에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

답변2

짧고 쉬운 대답은 없습니다.

1.

코드 캐시/파이프라인 크기, 캐시 속도와 주 메모리 속도의 차이, "-Os" 대 "-O2", "-O3"의 코드 크기, 일부 공통 "march=X/mtune 사용"과 같은 많은 매개변수가 있습니다. " "codesize=y"는 "=native"로 설정됩니다.

더 많은 코드가 캐시에 저장될수록 이러한 성능 향상은 다른 최적화보다 클 수 있습니다. 일부 최적화로 인해 코드 크기가 증가했습니다.

캐시에 더 많은 코드가 들어가고, 여러 작업에 대해 병렬로 실행되는 더 많은 코드가 캐시에 들어갈 수 있다면 이는 바람직한 측면일 수도 있습니다.

철저한 답변을 제공하려면 많은 연구가 필요합니다.

2.

다른 컴파일러 플래그와 옵션을 사용하면 다른 버그와 오작동이 발생할 수 있습니다.

따라서 libc와 같은 핵심 부분이나 전체 배포판을 다시 컴파일하면 다른 사람이 버그 보고서를 사용할 수 없게 되어 문제를 쉽게 재현할 수 없게 됩니다. 귀하의 설정이 섬이 됩니다…

삼.

사회적 측면: 배포 부분을 최적화하지 않으면 관리자가 설치에 대한 버그 보고서를 재생할 수 있으며 버그 보고서를 보내면 배포 개선에 도움이 됩니다.

4.

아마도 속도 증가는 몇 주 동안 재컴파일(libc 최적화가 아니라면)하고 주류에서 벗어나는 데 소비할 가치가 없을 수도 있습니다.

...

속도 문제를 해결해야 하는 경우 더 빠른 시스템이 효과적인 솔루션이 될 수 있습니다.

답변3

성능상의 이점이 있지만 서로 벤치마크하지 않는 한 눈에 띄지 않을 만큼 작습니다. Yeti가 쓴 것처럼 속도에 영향을 미치는 변수는 더 많습니다. 일반적으로 말하면, 바이너리 배포판을 사용하는 경우 단일 라이브러리의 사용자 정의 버전을 구축하는 것은 가치가 없습니다. 해당 라이브러리를 최신 상태로 유지하는 책임은 귀하에게 있고 업데이트하는 것을 잊어버리기 쉽기 때문입니다.

일부 플랜은 다른 플랜보다 더 많은 혜택을 누릴 수 있습니다. 특히folding@home 또는 이와 유사한 프로그램, 암호화폐 채굴, 암호화, 미디어 인코딩과 같은 수학 중심 프로그램입니다. 미디어 디코딩에도 도움이 되지만 가장 중요한 콘텐츠(MMX, AVX 등)는 사용하는 형식에 관계없이 컴파일되므로 -march영화를 볼 때 차이를 느끼지 못할 것입니다. 반면에 JACK과 같은 실시간 오디오는 최소 대기 시간이 음질에 영향을 미치므로 이점을 얻을 수 있습니다. libc와 같은 기본 라이브러리와 비교할 때 이러한 라이브러리는 업그레이드할 때까지 사용할 수 없기 때문에 취약점이 감지되면 즉시 업그레이드하는 것이 덜 중요합니다.

관심이 있으시면 시도해 볼 수 있습니다.소스코드 기반 배포모든 것은 선택한 플래그로 컴파일됩니다. 코드는 최신 프로세서에서 매우 빠르게 컴파일되므로 예전만큼 고통스럽지 않습니다. 젠투는 그 중 가장 많이 사용됩니다.

이 외에도 -march소스 코드보다 성능에 더 많은 영향을 미칠 수 있는 /sys 파일 시스템을 통해 여러 매개변수를 사용할 수 있습니다. 예를 들어 /sys/block/sd?/queue/내부 스케줄러 설정은 전체 성능에 큰 영향을 미칠 수 있습니다. CFQ에서 Deadline으로 전환했는데 특정 워크로드에 대한 대화형 성능이 크게 향상되었습니다. CFQ에는 내가 원하는 대로 조정할 수 있는 수많은 설정이 있다고 말하고 싶습니다.

또 다른 "보물 창고"는 입니다 /proc/sys/. 예를 들어, /proc/sys/vm/swappiness오래된 콘텐츠를 스왑으로 이동하여 메모리 해제 속도를 변경하도록 조정합니다.Red Hat에는 매개변수에 대한 좋은 입문서가 있습니다.

편집: 귀하가 더 많은 혜택을 누릴 수 있는 프로그램의 몇 가지 예를 추가했습니다.-march

관련 정보