컴파일러 최적화. 향상된 성능.
소개
Performance ≠ time.
컴파일러 최적화는 원래 입력 코드와 동일한 결과를 달성하지만 향상된 성능을 얻기 위해 컴파일러가 코드를 변경하는 것입니다. 이는 코드 크기 감소, 실행 크기 감소 또는 실행 속도 향상을 의미할 수 있습니다. 종종 이러한 목표는 상충되며 하나(예: 속도)를 최적화하려면 다른 하나(예: 코드 크기)를 희생해야 합니다.
대부분의 고급 컴파일러는 일정 수준의 최적화를 수행하며, 컴파일을 위해 선택한 옵션은 메모리 사용량, 실행 속도, 실행 파일 크기, 전력 소비 및 디버깅 가능성에 영향을 미침으로써 컴파일러가 만든 트레이드오프에 상당한 영향을 미칠 수 있습니다.
한 영역의 성능을 다른 영역과 절충하는 것이 종종 가능합니다. 예를 들어 룩업 테이블을 사용하면 일부 알고리즘에서 CPU 사용률을 줄이고 배터리 수명을 늘릴 수 있지만 메모리 소비는 증가합니다.
GCC 최적화 옵션
GCC는 많은 최적화 옵션을 제공하며 대부분은 -O 플래그를 사용하여 조합하여 제어할 수 있습니다. 이 옵션은 0(최적화 없음)에서 3(가장 높은 최적화), s(크기에 최적화), fast(속도에만 최적화) 또는 g(디버깅 경험에 최적화 - 디버깅을 복잡하게 만드는 최적화 방지) 사이의 값을 허용합니다.
-O는 실제로 일련의 기능을 선택합니다. 이러한 기능은 -f 플래그와 기능 이름을 사용하여 개별적으로 선택할 수도 있습니다. 예를 들어, -funroll_loops는 루프의 언롤링을 활성화합니다(참고: 다른 기능도 루프 언롤링에 영향을 미침). 기능을 비활성화하려면 -f 플래그 다음에 no- 및 기능 이름을 사용하십시오. 예를 들어 -fno-unroll-loops는 루프 풀기를 끕니다.
특정 -O 플래그 또는 -O와 기능 플래그의 조합으로 활성화된 개별 기능을 보려면 최적화 기능 목록을 쿼리하는 -Q --help=optimizers 플래그를 사용하십시오. 예를 들어 -O2에서 활성화/비활성화된 모든 최적화를 보려면 다음 명령을 사용하십시오.
gcc -O2 -Q --help=optimizers
GCC 문서(맨 페이지와 온라인 설명서 모두)에는 GCC 컴파일러의 200개 이상의 최적화 기능에 대한 좋은 정보가 있습니다.
일반적인 최적화의 예
다음은 몇 가지 일반적인 C 최적화입니다. 각 최적화에 대해 입력 코드 스니펫이 해당 최적화를 보여주는 코드와 함께 표시됩니다.
메모:
Performance ≠ time.
GCC는 많은 최적화 옵션을 제공하며 대부분은 -O 플래그를 사용하여 조합하여 제어할 수 있습니다. 이 옵션은 0(최적화 없음)에서 3(가장 높은 최적화), s(크기에 최적화), fast(속도에만 최적화) 또는 g(디버깅 경험에 최적화 - 디버깅을 복잡하게 만드는 최적화 방지) 사이의 값을 허용합니다.
-O는 실제로 일련의 기능을 선택합니다. 이러한 기능은 -f 플래그와 기능 이름을 사용하여 개별적으로 선택할 수도 있습니다. 예를 들어, -funroll_loops는 루프의 언롤링을 활성화합니다(참고: 다른 기능도 루프 언롤링에 영향을 미침). 기능을 비활성화하려면 -f 플래그 다음에 no- 및 기능 이름을 사용하십시오. 예를 들어 -fno-unroll-loops는 루프 풀기를 끕니다.
특정 -O 플래그 또는 -O와 기능 플래그의 조합으로 활성화된 개별 기능을 보려면 최적화 기능 목록을 쿼리하는 -Q --help=optimizers 플래그를 사용하십시오. 예를 들어 -O2에서 활성화/비활성화된 모든 최적화를 보려면 다음 명령을 사용하십시오.
gcc -O2 -Q --help=optimizers
GCC 문서(맨 페이지와 온라인 설명서 모두)에는 GCC 컴파일러의 200개 이상의 최적화 기능에 대한 좋은 정보가 있습니다.
일반적인 최적화의 예
다음은 몇 가지 일반적인 C 최적화입니다. 각 최적화에 대해 입력 코드 스니펫이 해당 최적화를 보여주는 코드와 함께 표시됩니다.
메모:
코드 재작성 최적화
이러한 최적화에는 성능 또는 공간을 위한 코드 재작성이 포함됩니다. 이러한 예제는 재작성된 소스 코드를 사용하여 표시되지만 대부분의 경우 최적화는 원래 소스와 거의 유사하지 않은 프로그램의 중간 표현에 적용됩니다.
- Strength Reduction
- Hoisting
- Hoisting I - Loop-Invariant Variable
- Hoisting II - Loop-Invariant Expression
- Hoisting III - Loop-Invariant Expression in Loop Condition
- Pre-calculation of Constants
- Loop Unswitching
- Loop Unswitching I - Inner/Outer Swap
- Loop Unswitching II - Inner/Outer Swap with Code Repetition
- Loop Splitting
- Loop Interchange
- Loop Unrolling
- Loop Unrolling I - Guaranteed-Multiple Iterations
- Loop Unrolling II - Pairs-of-Iterations plus a Conditional Extra Iteration
- Loop Unrolling III - Large Number of Iterations
- Inlining
- Common Subexpression Elimination
- Jump Threading
이 목록은 훨씬 더 오래 계속될 수 있으며 이 글을 미친듯이 길게 읽은 블로그 게시물로 만들고 싶지 않습니다. 이 주제에 대해 더 자세히 알고 싶다면. 오픈 소스 학습을 위해 저희 웹 사이트를 방문하십시오 @ Seneca .
결론
⚠️ 향후 첫 번째 작업을 위한 레포:
⚠️ 이 블로그 참조: here
연결
🖇 팔로우GitHub
🖇 팔로우
p.s 이 게시물은 SPO 수업인 2월 블로그 게시물/lab4를 위해 작성되었습니다.
Reference
이 문제에 관하여(컴파일러 최적화. 향상된 성능.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/serputov/compiler-optimizations-improved-performance-1l9a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- Strength Reduction
- Hoisting
- Hoisting I - Loop-Invariant Variable
- Hoisting II - Loop-Invariant Expression
- Hoisting III - Loop-Invariant Expression in Loop Condition
- Pre-calculation of Constants
- Loop Unswitching
- Loop Unswitching I - Inner/Outer Swap
- Loop Unswitching II - Inner/Outer Swap with Code Repetition
- Loop Splitting
- Loop Interchange
- Loop Unrolling
- Loop Unrolling I - Guaranteed-Multiple Iterations
- Loop Unrolling II - Pairs-of-Iterations plus a Conditional Extra Iteration
- Loop Unrolling III - Large Number of Iterations
- Inlining
- Common Subexpression Elimination
- Jump Threading
⚠️ 향후 첫 번째 작업을 위한 레포:
⚠️ 이 블로그 참조: here
연결
🖇 팔로우GitHub
🖇 팔로우
p.s 이 게시물은 SPO 수업인 2월 블로그 게시물/lab4를 위해 작성되었습니다.
Reference
이 문제에 관하여(컴파일러 최적화. 향상된 성능.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/serputov/compiler-optimizations-improved-performance-1l9a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(컴파일러 최적화. 향상된 성능.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/serputov/compiler-optimizations-improved-performance-1l9a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)