SlideShare a Scribd company logo
제 11 장
코드 최적화
컴파일러 입문
목 차
 기본 블록
 지역 최적화
 루프 최적화
 전역 최적화
 기계 종속적 최적화
Code Optimization
 Definition
 Preserve programming meaning
 Speed up on average
 Be worth the effort
 분류
 최적화 범위
 지역 최적화(local optimization)
 전역 최적화(global optimization)
 최적화 코드
 기계 독립적 최적화(machine-independent optimzation)
 기계 종속적 최적화(machine-dependent optimization)
Getting Better Performance
source
code
Front
End
Code
Generator
intermediate
code
target
code
Programmer can :
Profile program
Change algorithm
Transform loops
Compiler can :
Improve loops
Procedure calls
Address calculations
Compiler can :
Use registers
Select instructions
Peephole transformations
Basic Block (1/5)
 지역 최적화의 기본 단위
 시작부터 끝까지 순서적으로만 수행되는 문장 범위
[정의] 기본 블록
블록의 시작과 끝을 제외하고 블록의 내부 또는 외부로의 분기가 발생
하지 않는 분해된 기본 코드들의 시퀀스
기본 블록
Basic Block (2/5)
 기본 블록 구성
 leader와 다음 leader 이전에 나타나는 모든 코드
[정의] leader
(1) 프로그램의 시작 문장
(2) 조건부 분기 또는 무조건 분기의 목적지에 있는 문장
(3) 조건부 분기 바로 다음에 위치하는 문장
Basic Block (3/5)
i := 1
GOTO L2
L1 : Statement1
i := i + 1;
L2 : IF i <= N GOTO L1
Statement2
FOR i := 1 TO N DO
Statement1;
Statement2;
Basic Block (4/5) - Flow Graph
 흐름 그래프(Flow Graph)
 기본 블록에 제어 흐름 정보를 추가핚 방향 그래프
 전역 최적화에 필수
initial
L1: Statement1
i := i + 1
i := 1
GOTO L2
L2 : IF i <= N GOTO L1
Statement2
B1
B3
B4
B2
I := 1
GOTO Itest
Iloop : J := 1
GOTO Jtest
Jloop: T1 := 4 * J
T2 := A[T1]
T3 := J + 1
T4 := 4 * T3
T5 := A[T4]
IFT2 <=T5 GOTO Jplus
T6 := 4 * J
Temp := A[T6]
A[T12] := Temp
Jplus : J := J + 1
Jtest : IF J <= I GOTO Jloop
Iplus : I := I + 1
Itest : IF I <= n – 1 GOTO Iloop
B1
B2
B3
B4
B5
B7
B6
B8
B2
B8
B1
B6
B3
B4
B5
B6
initial
지역 최적화
 기본 블록 내에서 최적화를 수행
 기법 :
 Common subexpression elimination
 Strength reduction
 Constant folding
 Constant propagation
 Algebraic simplification
Common Subexpression Elimination
 공통 부분식의 제거
 공통된 부분이 반복되어 나타나는 경우를 제거하는
방법
A := B + C + D;
E := B + C + F;
K := (B + C) * G;
T := B + C;
A := T + D;
E := T + F;
K := T * G;
Strength Reduction
 연산 강도 경감
 연산자의 비용이 적은 연산자로 바꾸는 방법
 거듭제곱 -> 승산 -> 가산
 제산, 승산 -> 비트이동(shift)
A = X ** 2;
Y = 3 * A;
X = A / 5;
X = A / 4;
A = X * X;
Y = A + A + A;
X = A * 0.2;
X = A rshr 2
Constant Folding
 상수 폴딩
 컴파일 시간에 상수식을 직접 계산하여 그 결과를 사용하
는 방법
X := A + 2 * 3 X := A + 6
Constant Propagation
 상수 전파
 고정된 값을 갖는 변수를 상수로 대치하는 방법
I := 2
. . .
T1 := 8
I := 2
. . .
T1 := 4 * I
I := 2
. . .
T1 := 4 * 2
Constant folding
컴파일 시간에 계산이 가
능한 연산을 계산함으로
써 실행 시간과 코드의
크기를 줄일 수 있다.
Algebraic Simplification
 대수학적 간소화
 수학적인 대수 법칙을 이용하여 식을 간소화하는 방
법
X = A + 0;
X = 1 * A;
A := 2 * B / 2;
X = A;
X = A;
A := B;
T1 := 4 * J – 1
. . .
T7 := T1 – 4 * J
T1 := 4 * J – 1
. . .
T7 := 1
Loop Optimization
 전체 코드의 10%가 실행시간의 90%를 차지
 대부분의 실행 시간을 루프 내에서 소모
 기법 :
 루프 불변 코드 이동
 연산 강도 경감
 루프 언롤링
 루프 융합
 영으로의 카운트
Loop Invariant
FOR k := 1 TO 1000 DO
c[k] := 2 * (p – q) * (n – k + 1) / (sqr(n) + n) ;
fact := 2 * (p – q) ;
denom := sqr(n) + n ;
FOR k := 1 TO 1000 DO
c[k] := fact * (n – k + 1) / denom ;
Loop Unrolling
 루프의 반복 횟수를 감소시키는 방법
FOR k := 1 TO 1000 DO
c[k] := 0 ;
FOR k := 1 TO 1000 STEP 2 DO
BEGIN
c[k] := 0 ;
c[k + 1] := 0 ;
END
Count up to Zero
 루프의 종료 조건을 검사하는 경우 0인지 아닌지를
검사하는 경우가 효율적
FOR k := 0 TO N - 1 DO
BEGIN
… k
END
FOR k := N – 1 DOWNTO 0 DO
BEGIN
… N - k
END
전역 최적화
 기본 블록 간의 정보와 흐름 그래프를 이용하여 프로그램
의 전체적인 흐름 분석을 통핚 최적화
 기법 :
 공통 부분식의 제거
 전역 상수 폴딩과 전파
 도달될 수 없는 코드의 제거
 조건문의 재구성
 연속 GOTO 축약
전역 최적화
X := 1
Y : =2
T := X * Y
If (T = 2)
TRUE FALSE
X := 1
Y : =2
T := 2
If (2 = 2)
TRUE FALSE
X := 1
Y : =2
T := 2
If (2 = 2)
TRUE
전역 최적화
if (true) 문장1
else 문장2;
if (x > 1) ;
else 문장;
문장1;
if (x <= 1) 문장;
기계 종속적 최적화
 Postcode optimizer
 기법 :
 중복된 load 제거
 효율적인 명령어 선택
 레지스터 핛당과 배정
 연산 순서 재조정
목적 코드 Postcode optimizer 최적화된 목적 코드
중복된 load의 제거
X := Y ;
Z := X + 1 ;
LOAD R1, Y
STORE R1, X
LOAD R1, X
ADD R1, =1
STORE R1, Z
효율적인 명령어 선택
load r1, a ;
add r1, =1;
store r1, a ;
inc a ;

More Related Content

What's hot

6 swift 고급함수
6 swift 고급함수6 swift 고급함수
6 swift 고급함수
Changwon National University
 
Data Structure - 1st Study
Data Structure - 1st StudyData Structure - 1st Study
Data Structure - 1st Study
Chris Ohk
 
5 swift 기초함수
5 swift 기초함수5 swift 기초함수
5 swift 기초함수
Changwon National University
 
RNC C++ lecture_5 Array
RNC C++ lecture_5 ArrayRNC C++ lecture_5 Array
RNC C++ lecture_5 Array
itlockit
 
Design Pattern In Functional Language
Design Pattern In Functional LanguageDesign Pattern In Functional Language
Design Pattern In Functional LanguageSH Park
 
[C++ Korea] Effective Modern C++ MVA item 8 Prefer nullptr to 0 and null +윤석준
[C++ Korea] Effective Modern C++ MVA item 8 Prefer nullptr to 0 and null +윤석준[C++ Korea] Effective Modern C++ MVA item 8 Prefer nullptr to 0 and null +윤석준
[C++ Korea] Effective Modern C++ MVA item 8 Prefer nullptr to 0 and null +윤석준
Seok-joon Yun
 
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
Seok-joon Yun
 
2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자
Circulus
 
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
Seok-joon Yun
 
[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...
[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...
[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...Seok-joon Yun
 
[C++ korea] effective modern c++ study item8~10 정은식
[C++ korea] effective modern c++ study item8~10 정은식[C++ korea] effective modern c++ study item8~10 정은식
[C++ korea] effective modern c++ study item8~10 정은식
은식 정
 
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
Seok-joon Yun
 
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
Seok-joon Yun
 
TestBCD2018-2(answer)
TestBCD2018-2(answer)TestBCD2018-2(answer)
TestBCD2018-2(answer)
Yong Heui Cho
 
Changes in c++0x
Changes in c++0xChanges in c++0x
Changes in c++0x
4002 JOF
 
C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수
SeungHyun Lee
 
6장 표현식 및 문장
6장 표현식 및 문장6장 표현식 및 문장
6장 표현식 및 문장재정 이
 
C++11
C++11C++11
C++11
선협 이
 
Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...
Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...
Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...
Seok-joon Yun
 

What's hot (20)

6 swift 고급함수
6 swift 고급함수6 swift 고급함수
6 swift 고급함수
 
Data Structure - 1st Study
Data Structure - 1st StudyData Structure - 1st Study
Data Structure - 1st Study
 
5 swift 기초함수
5 swift 기초함수5 swift 기초함수
5 swift 기초함수
 
RNC C++ lecture_5 Array
RNC C++ lecture_5 ArrayRNC C++ lecture_5 Array
RNC C++ lecture_5 Array
 
Design Pattern In Functional Language
Design Pattern In Functional LanguageDesign Pattern In Functional Language
Design Pattern In Functional Language
 
[C++ Korea] Effective Modern C++ MVA item 8 Prefer nullptr to 0 and null +윤석준
[C++ Korea] Effective Modern C++ MVA item 8 Prefer nullptr to 0 and null +윤석준[C++ Korea] Effective Modern C++ MVA item 8 Prefer nullptr to 0 and null +윤석준
[C++ Korea] Effective Modern C++ MVA item 8 Prefer nullptr to 0 and null +윤석준
 
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
 
2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자
 
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
[C++ Korea] Effective Modern C++ MVA item 9 Prefer alias declarations to type...
 
6주차 스터디
6주차 스터디6주차 스터디
6주차 스터디
 
[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...
[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...
[C++ Korea] Effective Modern C++ mva item 7 distinguish between and {} when c...
 
[C++ korea] effective modern c++ study item8~10 정은식
[C++ korea] effective modern c++ study item8~10 정은식[C++ korea] effective modern c++ study item8~10 정은식
[C++ korea] effective modern c++ study item8~10 정은식
 
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
[C++ korea] effective modern c++ study item 7 distinguish between () and {} w...
 
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
[C++ korea] Effective Modern C++ study item 19 use shared ptr for shared owne...
 
TestBCD2018-2(answer)
TestBCD2018-2(answer)TestBCD2018-2(answer)
TestBCD2018-2(answer)
 
Changes in c++0x
Changes in c++0xChanges in c++0x
Changes in c++0x
 
C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수
 
6장 표현식 및 문장
6장 표현식 및 문장6장 표현식 및 문장
6장 표현식 및 문장
 
C++11
C++11C++11
C++11
 
Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...
Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...
Effective Modern C++ MVA item 18 Use std::unique_ptr for exclusive-ownership ...
 

Viewers also liked

Ch09
Ch09Ch09
Ch09
Hankyo
 
Ch06
Ch06Ch06
Ch06
Hankyo
 
컴파일러 Ch01
컴파일러 Ch01컴파일러 Ch01
컴파일러 Ch01
Hankyo
 
Ch02
Ch02Ch02
Ch02
Hankyo
 
01.표준프레임워크개요
01.표준프레임워크개요01.표준프레임워크개요
01.표준프레임워크개요
Hankyo
 
03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법
Hankyo
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
Hankyo
 
public health private concern, publich health in the Netherlands European Jou...
public health private concern, publich health in the Netherlands European Jou...public health private concern, publich health in the Netherlands European Jou...
public health private concern, publich health in the Netherlands European Jou...
Marco Strik
 
Como aprende el cerebro humano
Como aprende el cerebro humanoComo aprende el cerebro humano
Como aprende el cerebro humano
Elianacunaaguilarmep
 
Religió, història de Jesús de natzaret
Religió, història de Jesús de natzaretReligió, història de Jesús de natzaret
Religió, història de Jesús de natzaret
Maria Valltondre Rodríguez
 
Internet of things telegesis 2014 notes
Internet of things   telegesis 2014 notesInternet of things   telegesis 2014 notes
Internet of things telegesis 2014 notes
santhosh kumar
 
Amir Arafa CV
Amir Arafa  CVAmir Arafa  CV
Amir Arafa CV
Amir Arafa
 
Ch03
Ch03Ch03
Ch03
Hankyo
 
Ch04
Ch04Ch04
Ch04
Hankyo
 
05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)
Hankyo
 

Viewers also liked (15)

Ch09
Ch09Ch09
Ch09
 
Ch06
Ch06Ch06
Ch06
 
컴파일러 Ch01
컴파일러 Ch01컴파일러 Ch01
컴파일러 Ch01
 
Ch02
Ch02Ch02
Ch02
 
01.표준프레임워크개요
01.표준프레임워크개요01.표준프레임워크개요
01.표준프레임워크개요
 
03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법03.[참고]표준프레임워크기반 개발방법
03.[참고]표준프레임워크기반 개발방법
 
01.모바일 프레임워크 이론
01.모바일 프레임워크 이론01.모바일 프레임워크 이론
01.모바일 프레임워크 이론
 
public health private concern, publich health in the Netherlands European Jou...
public health private concern, publich health in the Netherlands European Jou...public health private concern, publich health in the Netherlands European Jou...
public health private concern, publich health in the Netherlands European Jou...
 
Como aprende el cerebro humano
Como aprende el cerebro humanoComo aprende el cerebro humano
Como aprende el cerebro humano
 
Religió, història de Jesús de natzaret
Religió, història de Jesús de natzaretReligió, història de Jesús de natzaret
Religió, història de Jesús de natzaret
 
Internet of things telegesis 2014 notes
Internet of things   telegesis 2014 notesInternet of things   telegesis 2014 notes
Internet of things telegesis 2014 notes
 
Amir Arafa CV
Amir Arafa  CVAmir Arafa  CV
Amir Arafa CV
 
Ch03
Ch03Ch03
Ch03
 
Ch04
Ch04Ch04
Ch04
 
05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)05.실행환경 교육교재(업무처리,연계통합)
05.실행환경 교육교재(업무처리,연계통합)
 

Similar to Ch11

Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Ki-Hwan Kim
 
[170517 5주차]C언어 A반
[170517 5주차]C언어 A반[170517 5주차]C언어 A반
[170517 5주차]C언어 A반
arundine
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석
jaypi Ko
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
Chris Ohk
 
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
OpenStack Korea Community
 
모던 C++ 정리
모던 C++ 정리모던 C++ 정리
모던 C++ 정리
Hansol Kang
 
Deview 2019 눈발자국
Deview 2019 눈발자국Deview 2019 눈발자국
Deview 2019 눈발자국
hanbeom Park
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉
HyunJoon Park
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
명신 김
 
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
Suhyun Park
 
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
chcbaram
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
Chris Ohk
 
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)주영 송
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)fmbvbfhs
 
최소 편집 거리와 동적 프로그래밍
최소 편집 거리와 동적 프로그래밍최소 편집 거리와 동적 프로그래밍
최소 편집 거리와 동적 프로그래밍
EunGi Hong
 
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
tcaesvk
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 
RNC C++ lecture_2 Variable DataType
RNC C++ lecture_2 Variable DataTypeRNC C++ lecture_2 Variable DataType
RNC C++ lecture_2 Variable DataType
itlockit
 
DEVIEW-FULL-감독판.pptx
DEVIEW-FULL-감독판.pptxDEVIEW-FULL-감독판.pptx
DEVIEW-FULL-감독판.pptx
hanbeom Park
 

Similar to Ch11 (20)

Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
 
[170517 5주차]C언어 A반
[170517 5주차]C언어 A반[170517 5주차]C언어 A반
[170517 5주차]C언어 A반
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
 
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
[OpenInfra Days Korea 2018] Day 2 - E1: 딥다이브 - OpenStack 생존기
 
모던 C++ 정리
모던 C++ 정리모던 C++ 정리
모던 C++ 정리
 
Deview 2019 눈발자국
Deview 2019 눈발자국Deview 2019 눈발자국
Deview 2019 눈발자국
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
정수론적 알고리즘 - Sogang ICPC Team, 2020 Winter
 
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)
 
최소 편집 거리와 동적 프로그래밍
최소 편집 거리와 동적 프로그래밍최소 편집 거리와 동적 프로그래밍
최소 편집 거리와 동적 프로그래밍
 
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 
RNC C++ lecture_2 Variable DataType
RNC C++ lecture_2 Variable DataTypeRNC C++ lecture_2 Variable DataType
RNC C++ lecture_2 Variable DataType
 
DEVIEW-FULL-감독판.pptx
DEVIEW-FULL-감독판.pptxDEVIEW-FULL-감독판.pptx
DEVIEW-FULL-감독판.pptx
 

More from Hankyo

01.실행환경 실습교재(공통기반)
01.실행환경 실습교재(공통기반)01.실행환경 실습교재(공통기반)
01.실행환경 실습교재(공통기반)
Hankyo
 
01.공통컴포넌트 교육교재
01.공통컴포넌트 교육교재01.공통컴포넌트 교육교재
01.공통컴포넌트 교육교재
Hankyo
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
Hankyo
 
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
Hankyo
 
06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)
Hankyo
 
06.실행환경 실습교재(easy company,문제)
06.실행환경 실습교재(easy company,문제)06.실행환경 실습교재(easy company,문제)
06.실행환경 실습교재(easy company,문제)
Hankyo
 
04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)
Hankyo
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
Hankyo
 
04.모바일 device api_실습교재
04.모바일 device api_실습교재04.모바일 device api_실습교재
04.모바일 device api_실습교재
Hankyo
 
04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재
Hankyo
 
03.실행환경 실습교재(배치처리)
03.실행환경 실습교재(배치처리)03.실행환경 실습교재(배치처리)
03.실행환경 실습교재(배치처리)
Hankyo
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)
Hankyo
 
03.모바일 실습교재(모바일 공통컴포넌트 실습)
03.모바일 실습교재(모바일 공통컴포넌트 실습)03.모바일 실습교재(모바일 공통컴포넌트 실습)
03.모바일 실습교재(모바일 공통컴포넌트 실습)
Hankyo
 
03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재
Hankyo
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
Hankyo
 
02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)
Hankyo
 
02.모바일 실습교재(ux component)
02.모바일 실습교재(ux component)02.모바일 실습교재(ux component)
02.모바일 실습교재(ux component)
Hankyo
 
02.개발환경 실습교재
02.개발환경 실습교재02.개발환경 실습교재
02.개발환경 실습교재
Hankyo
 
02.[참고]오픈소스sw라이선스가이드라인
02.[참고]오픈소스sw라이선스가이드라인02.[참고]오픈소스sw라이선스가이드라인
02.[참고]오픈소스sw라이선스가이드라인
Hankyo
 
02.공통컴포넌트 실습교재
02.공통컴포넌트 실습교재02.공통컴포넌트 실습교재
02.공통컴포넌트 실습교재
Hankyo
 

More from Hankyo (20)

01.실행환경 실습교재(공통기반)
01.실행환경 실습교재(공통기반)01.실행환경 실습교재(공통기반)
01.실행환경 실습교재(공통기반)
 
01.공통컴포넌트 교육교재
01.공통컴포넌트 교육교재01.공통컴포넌트 교육교재
01.공통컴포넌트 교육교재
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
 
06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)
 
06.실행환경 실습교재(easy company,문제)
06.실행환경 실습교재(easy company,문제)06.실행환경 실습교재(easy company,문제)
06.실행환경 실습교재(easy company,문제)
 
04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)04.실행환경 실습교재(화면처리)
04.실행환경 실습교재(화면처리)
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
04.모바일 device api_실습교재
04.모바일 device api_실습교재04.모바일 device api_실습교재
04.모바일 device api_실습교재
 
04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재
 
03.실행환경 실습교재(배치처리)
03.실행환경 실습교재(배치처리)03.실행환경 실습교재(배치처리)
03.실행환경 실습교재(배치처리)
 
03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)03.실행환경 교육교재(배치처리)
03.실행환경 교육교재(배치처리)
 
03.모바일 실습교재(모바일 공통컴포넌트 실습)
03.모바일 실습교재(모바일 공통컴포넌트 실습)03.모바일 실습교재(모바일 공통컴포넌트 실습)
03.모바일 실습교재(모바일 공통컴포넌트 실습)
 
03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재03.[참고]개발환경 교육교재
03.[참고]개발환경 교육교재
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
 
02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)02.실행환경 교육교재(데이터처리)
02.실행환경 교육교재(데이터처리)
 
02.모바일 실습교재(ux component)
02.모바일 실습교재(ux component)02.모바일 실습교재(ux component)
02.모바일 실습교재(ux component)
 
02.개발환경 실습교재
02.개발환경 실습교재02.개발환경 실습교재
02.개발환경 실습교재
 
02.[참고]오픈소스sw라이선스가이드라인
02.[참고]오픈소스sw라이선스가이드라인02.[참고]오픈소스sw라이선스가이드라인
02.[참고]오픈소스sw라이선스가이드라인
 
02.공통컴포넌트 실습교재
02.공통컴포넌트 실습교재02.공통컴포넌트 실습교재
02.공통컴포넌트 실습교재
 

Ch11

  • 1. 제 11 장 코드 최적화 컴파일러 입문
  • 2. 목 차  기본 블록  지역 최적화  루프 최적화  전역 최적화  기계 종속적 최적화
  • 3. Code Optimization  Definition  Preserve programming meaning  Speed up on average  Be worth the effort  분류  최적화 범위  지역 최적화(local optimization)  전역 최적화(global optimization)  최적화 코드  기계 독립적 최적화(machine-independent optimzation)  기계 종속적 최적화(machine-dependent optimization)
  • 4. Getting Better Performance source code Front End Code Generator intermediate code target code Programmer can : Profile program Change algorithm Transform loops Compiler can : Improve loops Procedure calls Address calculations Compiler can : Use registers Select instructions Peephole transformations
  • 5. Basic Block (1/5)  지역 최적화의 기본 단위  시작부터 끝까지 순서적으로만 수행되는 문장 범위 [정의] 기본 블록 블록의 시작과 끝을 제외하고 블록의 내부 또는 외부로의 분기가 발생 하지 않는 분해된 기본 코드들의 시퀀스 기본 블록
  • 6. Basic Block (2/5)  기본 블록 구성  leader와 다음 leader 이전에 나타나는 모든 코드 [정의] leader (1) 프로그램의 시작 문장 (2) 조건부 분기 또는 무조건 분기의 목적지에 있는 문장 (3) 조건부 분기 바로 다음에 위치하는 문장
  • 7. Basic Block (3/5) i := 1 GOTO L2 L1 : Statement1 i := i + 1; L2 : IF i <= N GOTO L1 Statement2 FOR i := 1 TO N DO Statement1; Statement2;
  • 8. Basic Block (4/5) - Flow Graph  흐름 그래프(Flow Graph)  기본 블록에 제어 흐름 정보를 추가핚 방향 그래프  전역 최적화에 필수 initial L1: Statement1 i := i + 1 i := 1 GOTO L2 L2 : IF i <= N GOTO L1 Statement2 B1 B3 B4 B2
  • 9. I := 1 GOTO Itest Iloop : J := 1 GOTO Jtest Jloop: T1 := 4 * J T2 := A[T1] T3 := J + 1 T4 := 4 * T3 T5 := A[T4] IFT2 <=T5 GOTO Jplus T6 := 4 * J Temp := A[T6] A[T12] := Temp Jplus : J := J + 1 Jtest : IF J <= I GOTO Jloop Iplus : I := I + 1 Itest : IF I <= n – 1 GOTO Iloop B1 B2 B3 B4 B5 B7 B6 B8 B2 B8 B1 B6 B3 B4 B5 B6 initial
  • 10. 지역 최적화  기본 블록 내에서 최적화를 수행  기법 :  Common subexpression elimination  Strength reduction  Constant folding  Constant propagation  Algebraic simplification
  • 11. Common Subexpression Elimination  공통 부분식의 제거  공통된 부분이 반복되어 나타나는 경우를 제거하는 방법 A := B + C + D; E := B + C + F; K := (B + C) * G; T := B + C; A := T + D; E := T + F; K := T * G;
  • 12. Strength Reduction  연산 강도 경감  연산자의 비용이 적은 연산자로 바꾸는 방법  거듭제곱 -> 승산 -> 가산  제산, 승산 -> 비트이동(shift) A = X ** 2; Y = 3 * A; X = A / 5; X = A / 4; A = X * X; Y = A + A + A; X = A * 0.2; X = A rshr 2
  • 13. Constant Folding  상수 폴딩  컴파일 시간에 상수식을 직접 계산하여 그 결과를 사용하 는 방법 X := A + 2 * 3 X := A + 6
  • 14. Constant Propagation  상수 전파  고정된 값을 갖는 변수를 상수로 대치하는 방법 I := 2 . . . T1 := 8 I := 2 . . . T1 := 4 * I I := 2 . . . T1 := 4 * 2 Constant folding 컴파일 시간에 계산이 가 능한 연산을 계산함으로 써 실행 시간과 코드의 크기를 줄일 수 있다.
  • 15. Algebraic Simplification  대수학적 간소화  수학적인 대수 법칙을 이용하여 식을 간소화하는 방 법 X = A + 0; X = 1 * A; A := 2 * B / 2; X = A; X = A; A := B; T1 := 4 * J – 1 . . . T7 := T1 – 4 * J T1 := 4 * J – 1 . . . T7 := 1
  • 16. Loop Optimization  전체 코드의 10%가 실행시간의 90%를 차지  대부분의 실행 시간을 루프 내에서 소모  기법 :  루프 불변 코드 이동  연산 강도 경감  루프 언롤링  루프 융합  영으로의 카운트
  • 17. Loop Invariant FOR k := 1 TO 1000 DO c[k] := 2 * (p – q) * (n – k + 1) / (sqr(n) + n) ; fact := 2 * (p – q) ; denom := sqr(n) + n ; FOR k := 1 TO 1000 DO c[k] := fact * (n – k + 1) / denom ;
  • 18. Loop Unrolling  루프의 반복 횟수를 감소시키는 방법 FOR k := 1 TO 1000 DO c[k] := 0 ; FOR k := 1 TO 1000 STEP 2 DO BEGIN c[k] := 0 ; c[k + 1] := 0 ; END
  • 19. Count up to Zero  루프의 종료 조건을 검사하는 경우 0인지 아닌지를 검사하는 경우가 효율적 FOR k := 0 TO N - 1 DO BEGIN … k END FOR k := N – 1 DOWNTO 0 DO BEGIN … N - k END
  • 20. 전역 최적화  기본 블록 간의 정보와 흐름 그래프를 이용하여 프로그램 의 전체적인 흐름 분석을 통핚 최적화  기법 :  공통 부분식의 제거  전역 상수 폴딩과 전파  도달될 수 없는 코드의 제거  조건문의 재구성  연속 GOTO 축약
  • 21. 전역 최적화 X := 1 Y : =2 T := X * Y If (T = 2) TRUE FALSE X := 1 Y : =2 T := 2 If (2 = 2) TRUE FALSE X := 1 Y : =2 T := 2 If (2 = 2) TRUE
  • 22. 전역 최적화 if (true) 문장1 else 문장2; if (x > 1) ; else 문장; 문장1; if (x <= 1) 문장;
  • 23. 기계 종속적 최적화  Postcode optimizer  기법 :  중복된 load 제거  효율적인 명령어 선택  레지스터 핛당과 배정  연산 순서 재조정 목적 코드 Postcode optimizer 최적화된 목적 코드
  • 24. 중복된 load의 제거 X := Y ; Z := X + 1 ; LOAD R1, Y STORE R1, X LOAD R1, X ADD R1, =1 STORE R1, Z
  • 25. 효율적인 명령어 선택 load r1, a ; add r1, =1; store r1, a ; inc a ;