> 기술 주변기기 > IT산업 > Ampere 프로세서를위한 GCC 안내서

Ampere 프로세서를위한 GCC 안내서

尊渡假赌尊渡假赌尊渡假赌
풀어 주다: 2025-02-08 12:23:09
원래의
507명이 탐색했습니다.

Ampere 프로세서를위한 GCC 안내서 이 기사는 원래 Ampere Computing에 의해 출판되었습니다 이 논문은 Ampere 프로세서의 애플리케이션 성능을 최적화하기 위해 GCC (GNU Compiler Collection) 옵션을 효과적으로 사용하는 방법에 대해 설명합니다. 애플리케이션을 최적화하려고 할 때 잠재적 최적화가 성능을 향상시키는 지 측정해야합니다. 여기에는 컴파일러 옵션이 포함됩니다. 고급 컴파일러 옵션을 사용하면 컴파일 시간이 증가하고 디버깅 어려움이 많으며 이진 크기가 증가하는 비용으로 런타임 성능이 향상 될 수 있습니다. 컴파일러 옵션이 성능에 영향을 미치는 이유는이 백서의 범위를 벗어나지 만 짧은 대답은 코드 생성, 현대 프로세서 아키텍처 및 상호 작용 방법이 매우 복잡하다는 것입니다! 또 다른 중요한 요점은 다른 프로세서가 컴퓨터 아키텍처의 변형과 특정 마이크로 아키텍처로 인해 다른 컴파일러 옵션을 활용할 수 있다는 것입니다. 최적화에 대한 반복 실험은 성능 성공의 핵심입니다 제한 요인을 결정하기 위해 응용 프로그램의 성능을 측정하는 방법과 최적화 전략은 이미 이전에 발표 된 기사에서 다루었습니다. Ampere Altra 기반 인스턴스에서 실행 중에 답변해야 할 첫 10 가지 질문 인이 논문은 전체 시스템의 성능을 이해하기 위해 수집 할 성능 데이터를 설명합니다. Ampere Altra 패밀리 프로세서를 최적화하기위한 성능 분석 방법론은 데이터 중심 접근 방식을 사용하여 효과적이고 효율적으로 최적화하는 방법을 설명합니다. 이 논문은 먼저 이러한 옵션이 응용 프로그램에 어떤 영향을 미치는지에 대한 설명과 함께 가장 일반적인 GCC 옵션을 요약합니다. 그런 다음 논의는 GCC 옵션을 사용하여 현재 사례 연구로 전환하여 VP9 비디오 인코딩 소프트웨어의 성능 및 Ampere 프로세서 용 MySQL 데이터베이스의 성능을 향상시킵니다. Ampere 프로세서에서 실행되는 추가 소프트웨어를 최적화하기 위해 유사한 전략이 효과적으로 사용되었습니다. GCC 권장 사항 GCC 컴파일러는 애플리케이션 성능을 향상시킬 수있는 많은 옵션을 제공합니다. 자세한 내용은 GCC 웹 사이트를 참조하십시오. Ampere 프로세서에서 사용 가능한 모든 성능 기능을 활용하는 코드를 생성하려면 GCC -MCPU 옵션을 사용하십시오.

GCC -MCPU 옵션을 사용하려면 CPU 모델을 설정하거나 GCC가 GCC가 -mcpu = aviL에서 실행중인 시스템을 기반으로 CPU 모델을 사용하도록 지시하십시오. 레거시 x86 기반 시스템에 대해 GCC -MCPU는 -mtune에 대한 감가 상한 동의어이며 GCC -MCPU는 ARM 기반 시스템에서 완전히 지원됩니다. 자세한 내용은 아키텍처 전체의 컴파일러 플래그에 대한 ARM 안내서를 참조하십시오.

요약하면, 가능할 때마다 -mcpu 만 사용하고 ARM을 컴파일 할 때 -march 및 -mtune을 피하십시오. 아래는 VP9 비디오 인코딩 소프트웨어로 GCC -MCPU 옵션을 설정하여 성능 향상을 강조하는 사례 연구입니다. -MCPU 옵션 설정 :

  • -mcpu = ampere1 : Ampeereone 프로세서에서 실행되는 코드를 생성합니다. Ampereone은 Ampere의 차세대 클라우드 네이티브 프로세서로, 고성능 프로세서 제품군을 새로운 업계의 주요 핵심 수로 확대합니다. 이것은 Ampere Altra 및 Altra Max 프로세서에서 실행되지 않는 코드를 생성 할 수 있습니다. 이 옵션은 처음에 GCC 버전 12.1 이상으로 제공 된 다음 GCC 10.5 및 GCC 11.3으로 백 포트했습니다.

  • -mcpu = neovse-n1 : Ampere altra, Ampere altra Max 및 Ampere Ampereone에서 실행되는 코드를 생성합니다. Ampere Ampereone에서 실행되는 코드 에이 옵션을 사용하는 것이 지원되지만 사용 가능한 모든 새로운 성능 기능을 활용하지는 않습니다. Ampere Altra 및 Ampere Altra Max 프로세서에 대한 CPU 특정 튜닝을 활성화하려면 GCC 버전 9.1 이상이 필요합니다.
  • -mcpu = 네이티브 : 코드 생성 CPU GCC를 기반으로 CPU 모델을 설정합니다. Ampere Altra 및 Ampere Altra Max 프로세서에 대한 CPU 특정 튜닝을 활성화하려면 GCC 버전 9.1 이상이 필요합니다.

  • -mcpu = Native를 사용하면 사용하기가 더 쉽지만 실행 파일, 공유 라이브러리 또는 객체 파일이 다른 시스템에서 사용되는 경우 잠재적 인 문제가 있습니다. Ampere Ampereone 프로세서에서 빌드가 수행 된 경우, 생성 된 코드에는 AMPERE AMPEREONE 프로세서에서 지원되는 ARMV8.6 지침이 포함될 수 있기 때문에 코드는 암페어 Altra 또는 Altra Max 프로세서에서 실행되지 않을 수 있습니다. 빌드가 Ampere Altra 또는 Altra Max 프로세서에서 수행 된 경우 GCC는 Ampere Ampereone 프로세서에서 사용 가능한 최신 성능 개선 사항을 활용하지 않습니다. 이는 건축 코드가 모든 아키텍처의 성능 기능을 활용할 때 일반적인 문제입니다.

    다음 표에는 Ampere 프로세서 -MCPU 값을 지원하는 GCC 버전이 나와 있습니다.

프로세서

-mcpu 값

gcc 9

gcc 10

gcc 11

gcc 12 gcc 13 암페어 알트라 Neoverse-n1 ≥ 9.1 모두 모두 모두 모두 암페어 알트라 맥스 Neoverse-n1 ≥ 9.1 모두 모두 모두 모두 암페어 암페어 1 N/A ≥ 10.5 ≥ 11.3 ≥ 12.1 모두 우리의 권장 사항은 위에서 설명한 적절한 값과 함께 gcc -mcpu 옵션을 사용하는 것입니다 (-mcpu = ampere1, -mcpu = neovse -n1 또는 -mcpu = avati). 최적화 옵션 및 측정 다른 옵션이 기준선에 비해 성능을 향상시키는 경우. 일반 GCC 옵션 요약 : Ampere 프로세서를 구축 할 때 프로세서 특정 튜닝 및 최적화를 가능하게하는

-MCPU는 권장됩니다. (자세한 내용은“-mcpu 옵션 설정”섹션을 참조하십시오.)

  • -o2는 표준 GCC 최적화 옵션을 고려하고 다른 GCC 옵션과 비교하기 위해 기준으로 사용하기에 좋습니다.

  • -o3는 루프에 대한보다 효율적인 코드를 생성하기 위해 추가 최적화를 추가하여 응용 프로그램 성능이 루프에 소요되는 시간에 따라 시도하는 데 유용합니다.
  • 프로파일 가이드 최적화 (PGO) : -fprofile -generate & -fprofile -use. 컴파일러가 인라인, 루프 최적화 및 기본 분기와 같은 최적화에 대한 더 나은 결정을 내릴 수있는 프로파일 데이터를 생성합니다. 이는 빌드 시스템을 변경해야하므로 고급 최적화로 간주됩니다 (아래 참조).
  • 링크 시간 최적화 (LTO) : -flto. 컴파일러가 개별 소스 파일에서 최적화 할 수 있도록 링크 타임 최적화를 활성화합니다. 이를 통해 다른 컴파일러 최적화 중에서 소스 파일을 가로 질러 기능을 인쇄 할 수 있습니다. 이는 또한 고급 최적화로 간주되며 구축 시스템을 변경해야합니다. 이 옵션은 전체 빌드 시간을 증가시켜 대규모 응용 프로그램의 경우 극적 일 수 있습니다. 성능 임계 소스 파일에서만 LTO를 사용하여 빌드 시간을 줄일 수 있습니다.

  • GCC -MCPU

    를 사용한

    -mcpu = avatiel 로 libvpx 빌드를 최적화하는 방법
  • 가장 많은 시간이 걸렸던 함수의 CPU 사이클 수를 측정하기위한 Linux Perf를 사용한 조사에는 기능 vpx_convolve8_horiz_neon 및 vpx_convolve8_vert_neon이 포함됩니다. Libvpx git 저장소는 이러한 기능이 ARMV8.6-A USDOT (Mixed-Sign Dot-Product) 명령어를 사용하여 ARM에 의해 최적화되었음을 보여줍니다. vpx_convolve8_horiz_neon에 소비 된 CPU 사이클은 GCC -MCPU = 기본을 사용하여 6.07E 11에서 2.52E 11으로 감소하여 Ampere Altra 프로세서에서 DOT 제품 최적화를 가능하게하여 CPU 사이클을 2.4X의 계수로 줄였습니다.

    vpx_convolve8_vert_neon의 경우, CPU 사이클은 2.46E 11에서 2.07E 11으로 감소하여 16% 감소했습니다.

    전반적으로, -MCPU = NATIVE를 사용하여 DOT 제품 명령을 활성화하여 응용 프로그램 처리량을 향상시켜 Ampere Altra 프로세서에서 Fired_videos_Sports_SPORTS_SPORTS_SPORTS_SPORTS_SPORTS_1080P_SPORTS_1080P -0063.MKV 파일을 트랜스 코딩합니다. 다음 표는 CPU 사이클 및 지침을 측정하기 위해 Perf Record 및 Perf Report 유틸리티를 사용하여 수집 된 데이터를 보여줍니다.

    빌드 구성

    기호 사이클 (%)

    사이클 지침 (%) 지침

    기본 빌드 vpx_convolve8_horiz_neon 8.72 6.07E 11 7.52 1.13E 12 vpx_convolve8_vert_neon 3.53 2.46 E11 2.51 3.78E 11 전체 응용 프로그램 100 6.97e 10 100 1.48E 11 -mcpu = 네이티브 vpx_convolve8_horiz_neon 3.89 2.52E 11 3.87 5.71E 11 vpx_convolve8_vert_neon 3.19 2.07 E11 3.29 4.86E 11 전체 응용 프로그램 100 6.48E 10 100 1.48E 11 GCC 프로파일 가이드 최적화 이 섹션에서는 GCC의 프로필 가이드 최적화 (PGO)에 대한 개요와 PGO를 사용하여 MySQL을 최적화하는 사례 연구를 제공합니다. 프로파일 가이드 최적화를 통해 GCC는 분기 최적화, 코드 블록 재정 주문, 실린 기능 및 루프 Unrolling, 루프 필링 및 벡터화를 통한 최적화를 포함하여 더 나은 최적화 결정을 내릴 수 있습니다. PGO를 사용하면 빌드 환경을 수정하려면 3 부분으로 구성된 빌드를 수행해야합니다. 프로파일 가이드 최적화, GCC -Fprofile -Generate를 사용하여 응용 프로그램을 구축하십시오. 프로파일 데이터를 생성하기 위해 대표 워크로드에서 응용 프로그램을 실행합니다. 프로파일 데이터, gcc -fprofile -use를 사용하여 응용 프로그램을 재구성하십시오 PGO를 사용하는 과제는 위의 2 단계에서 매우 고성능 오버 헤드입니다. GCC -fprofile -Generate로 구축 된 응용 프로그램을 실행하는 성능이 느리기 때문에 생산 환경에서 작동하는 시스템에서 실행되는 것은 실용적이지 않을 수 있습니다. GCC Manual의 프로그램 계측 옵션 옵션 섹션을 참조하여 런타임 계측기를 사용하여 응용 프로그램을 구축하고 추가 세부 사항을 위해 생성 된 프로필 정보를 사용하여 재건을위한 최적화를 제어하는 ​​섹션 옵션을 작성하십시오. GCC 매뉴얼에 설명 된대로 -fprofile-update = Atomic은 다중 스레드 애플리케이션에 권장되며 개선 된 프로파일 데이터를 수집하여 성능을 향상시킬 수 있습니다.

    PGO를 언제 사용할 때? PGO를 사용하여 GCC는 취한 분기 측정과 복용되지 않고 루프 트립 카운트 측정과 같은 추가 정보를 제공하여 응용 프로그램을 더 잘 최적화 할 수 있습니다. PGO는 성능을 향상시키는 지 확인하는 데 유용한 최적화입니다. PGO에 상당한 비율의 분기 오해가있는 응용 프로그램을 포함하는 성능 서명은 PERP 유틸리티를 사용하여 CPU의 성능 모니터링 장치 (PMU) 카운터 BR_MIS_PRED_RETIED를 읽을 수 있습니다. 많은 수의 지점 오해는 프론트 엔드 스톨의 높은 비율로 이어지며, 이는 Stall_Frontend PMU 카운터로 측정 할 수 있습니다. L2 명령 캐시 미스 비율이 높은 응용 프로그램은 PGO의 혜택을받을 수 있으며, 아마도 잘못 예측 된 지점과 관련이있을 수 있습니다. 요약하면, 많은 비율의 지점 오용, CPU 프론트 엔드 스톨 및 L2 명령 캐시 미스는 PGO가 성능을 향상시킬 수있는 성능 서명입니다.

    MySQL 데이터베이스 GCC PGO 사례 연구 MySQL은 세계에서 가장 인기있는 오픈 소스 데이터베이스이며 거대한 MySQL 바이너리 크기로 인해 GCC PGO 최적화를 사용하기에 이상적인 후보입니다. PGO 정보가 없으면 GCC가 실행 된 많은 다른 코드 경로를 올바르게 예측하는 것은 불가능합니다. PGO를 사용하면 Ampere Altra Max 프로세서의 L2 명령 캐시 미스 속도 및 CPU 프론트 엔드 스톨. GCC PGO를 사용하여 MySQL이 최적화되는 방법을 요약합니다

    Sysbench는 MySQL 성능 를 평가하는 데 사용되었습니다

    GCC PGO는 MySQL MTR (MySQL-Test-Run) 테스트 스위트 를 사용하여 교육을 받았습니다. sysbench의 oltp_point_select 및 oltp_read_only 테스트를 사용하여 기본 빌드

    와 비교하여 PGO 빌드의 성능을 측정했습니다. 사용 된 스레드의 수는 1에서 1024로 다양하여 OLTP_Point_Select의 평균 속도가 29%, Ampere Altra Max M128-30 프로세서에서 OLTP_READ_ONLY 테스트의 경우 20%를 증가 시켰습니다. 64 개의 스레드를 사용하여 PGO는 MySQL의 처리량을 개선하여 성능을 32% 향상 시켰습니다.

    추가 세부 정보는 MySQL 튜닝 안내서의 Ampere Developer 웹 사이트에서 찾을 수 있습니다.

    요약 애플리케이션 최적화하려면 가장 잘 작동하는 것을 결정하기 위해 다양한 전략을 실험해야합니다. 이 논문은 Ampere 프로세서에서 실행되는 고성능 애플리케이션을 생성하기 위해 다양한 GCC 컴파일러 최적화에 대한 권장 사항을 제공합니다. Ampere Cloud Native 프로세서가 지원하는 모든 기능을 활용하는 코드를 생성하는 가장 쉬운 방법으로 -mcpu 옵션을 사용하여 강조 표시됩니다. MySQL 데이터베이스 및 VP9 비디오 인코더의 두 가지 사례 연구는 성능이 중요한 경우 이러한 응용 프로그램을 최적화하기 위해 GCC 옵션을 사용하는 것을 보여줍니다.지속 가능한 클라우드 컴퓨팅을 위해 구축 된 Ampere의 최초의 클라우드 네이티브 프로세서는 업계에서 전례없는 예측 가능한 고성능, 플랫폼 확장 성 및 전력 효율성을 제공합니다. 우리는 개발자 노력에 대해 더 많이 배우고 Developer.amperecomputing.com에서 모범 사례를 찾아 Community.amperecomputing.com에서 대화에 참여하도록 초대합니다.

    위 내용은 Ampere 프로세서를위한 GCC 안내서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿