컴파일러 입문 제 11 장 코드 최적화.

Slides:



Advertisements
Similar presentations
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Advertisements

Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
식품사업부 8 월 기도회 2006 년 8 월 9 일. 7 월 감사제목 1. 7 월에도 매장에서 안전사고와 고객클레임 없이 무사히 영업을 하게 해주셔서 감사 합니다. 2. 지난 번 폭우때 매장의 안전과 재산을 지켜주시고 직원들의 건강을 지켜주셔서 감사합니다. 3. 어려운.
9. 중간언어 9-1. 소개 9-2. Polish표기법 주소 코드 9-4. 트리 구조 코드
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
제2장 주파수 영역에서의 모델링.
1. 컴파일러 개론 1-1. Compiler 정의 1-2. Language Processing System
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
C 5장. 제어문 #include <stdio.h> int main(void) { int num;
UNIT 15 Timer & Watch Dog 로봇 SW 교육원 조용수.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
Pspice를 이용한 회로설계 기초이론 및 실습 4
컴퓨터 프로그래밍 기초 [Final] 기말고사
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
- 1변수 방정식의 solution 프로그램 (Bisection method, Newton-Raphson method)
어셈블리 문법 보강 4월 10일.
임베디드 시스템 개론 크로스 플랫폼 설치 2일차 강의 자료 Embedded System Lab.
9. 중간언어 9-1. Polish표기법 9-2. N-투플 표기법 9-3. 트리 구조 코드 9-4. 추상 기계 코드
제3장 스택과 큐.
제 11 장  코드 최적화.
고급 선택 제어문과 반복문 Chapter 9 C에서의 다중 선택 제어문 선 검사 반복 구조와 for 문
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
Part 07 제어 구조 ©우균, 창병모 © 우균, 창병모.
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
10장 컴퓨터 기반 데이터 획득 응용 프로그램 LabVIEW 사용법
C#.
Lecture 01: Compiler Overview
3. while문 반복문의 종류 while 문 while( 조건식 )        문장;.
Chapter 09 반복문.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express Slide 1 (of 27)
MATLAB
Method & library.
어서와 C언어는 처음이지 제14장.
파이프라이닝.
Seoul National University
메모리 관리 & 동적 할당.
SAS Statistical Analysis System 통계패키지 실습 (2011년 1학기)
7장. 다양한 형태의 반복문. 7장. 다양한 형태의 반복문 7-1 반복문이란? 반복문의 기능 세 가지 형태의 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 7-1 반복문이란? 반복문의 기능 특정 영역을 특정 조건이 만족하는 동안에 반복.
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
2차시: 달의 공전 지구과학
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
연산자 (Operator).
USN(Ubiquitous Sensor Network)
컴 파 일 러 Compilers.
제 9장 트랜스레이터.
Choi Seong Yun 컴퓨터 프로그래밍 기초 #06 : 반복문 Choi Seong Yun
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
제 5장 제어문 Hello!! C 언어 강성호 김학배 최우영.
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
메모리 타입 분석을 통한 안전하고 효율적인 메모리 재사용
Control Flow 요약.
4. 어휘 분석(Lexical analysis)
8장. 조건에 따른 흐름의 분기. 8장. 조건에 따른 흐름의 분기 8-1 흐름의 분기가 필요한 이유 상황에 따른 프로그램의 유연성 부여 그림 8-1.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
9. 중간언어 9-1. 소개 9-2. Polish표기법 주소 코드 9-4. 트리 구조 코드
제 5장 제어 시스템의 성능 피드백 제어 시스템 과도 성능 (Transient Performance)
7장. 다양한 형태의 반복문. 7장. 다양한 형태의 반복문 7-1 반복문이란? 반복문의 기능 세 가지 형태의 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 7-1 반복문이란? 반복문의 기능 특정 영역을 특정 조건이 만족하는 동안에 반복.
TVM ver 최종보고서
발표자 : 이지연 Programming Systems Lab.
3.2 분기 명령어.
03. 병행 프로세스(Parallel Process)
제 8장 일반화 선형모형 회귀분석, 분산분석, 다변량분산분석 및 부분 상관분석이 가능 GLM 절차
2D Game Programming 1차 발표 배강산.
제 4 장 Record.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
9장. spss statistics 20의 데이터 변수계산
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
ARM Development Suite v1.2
Presentation transcript:

컴파일러 입문 제 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 Front End Code Generator source code intermediate code target code Compiler can : Use registers Select instructions Peephole transformations User can : Profile program Change algorithm Transform loops Compiler can : Improve loops Procedure calls Address calculations

Basic Block (1/5) 지역 최적화의 기본 단위 시작부터 끝까지 순서적으로만 수행되는 문장 범위 [정의] 기본 블록 블록의 시작과 끝을 제외하고 블록의 내부 또는 외부로의 분기가 발생하지 않는 분해된 기본 코드들의 시퀀스 기본 블록

Basic Block (2/5) 기본 블록 구성 leader와 다음 leader 이전에 나타나는 모든 코드 프로그램의 시작 문장 조건부 분기 또는 무조건 분기의 목적지에 있는 문장 조건부 분기 바로 다음에 위치하는 문장

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 기본 블록에 제어 흐름 정보를 추가한 방향 그래프 전역 최적화에 필수 initial i := 1 GOTO L2 B1 B2 L2 : IF i <= N GOTO L1 L1: Statement1 i := i + 1 B3 Statement2 B4

B1 B3 B2 B4 B3 B5 B2 B6 initial B4 B5 B1 B6 B8 B7 B8 GOTO Itest Iloop : J := 1 GOTO Jtest Jloop: T1 := 4 * J T2 := A[T1] T3 := J + 1 T4 := 4 * T3 T5 := A[T4] IF T2 <= 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 B8 B1 B6 B3 B4 B5 initial B2 B3 B4 B5 B6 B7 B8

지역 최적화 기본 블록 내에서 최적화를 수행 기법 : Common subexpression elimination Strength reduction Constant folding Constant propagation Algebraic simplification

Common Subexpression Elimination 공통 부분식의 제거 공통된 부분이 반복되어 나타나는 경우를 제거하는 방법 T := B + C; A := T + D; E := T + F; K := T * G; A := B + C + D; E := B + C + F; K := (B + C) * G;

Strength Reduction 연산 강도 경감 연산자의 비용이 적은 연산자로 바꾸는 방법 거듭제곱 -> 승산 -> 가산 제산, 승산 -> 비트이동(shift) A = X * X; Y = A + A + A; X = A * 0.2; X = A rshr 2 A = X ** 2; Y = 3 * A; X = A / 5; X = A / 4;

Constant Folding 상수 폴딩 컴파일 시간에 상수식을 직접 계산하여 그 결과를 사용하는 방법 X := A + 2 * 3 X := A + 6

Constant Propagation 상수 전파 고정된 값을 갖는 변수를 상수로 대치하는 방법 I := 2 . . . Constant folding 컴파일 시간에 계산이 가능한 연산을 계산함으로써 실행 시간과 코드의 크기를 줄일 수 있다. I := 2 . . . T1 := 8

Algebraic Simplification 대수학적 간소화 수학적인 대수 법칙을 이용하여 식을 간소화하는 방법 X = A + 0; X = 1 * A; Constant * Symbol A := 2 * B / 2; X = A; Symbol * Constant A := B; T1 := 4 * J – 1 . . . T7 := T1 + 1 T1 := 4 * J – 1 . . . T7 := 4 * J

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) X := 1 Y : =2 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

기계 종속적 최적화 Postcode optimizer 기법 : 중복된 load 제거 효율적인 명령어 선택 레지스터 할당과 배정 연산 순서 재조정 목적 코드 Postcode optimizer 최적화된 목적 코드

중복된 load의 제거 LOAD R1, Y STORE R1, X LOAD R1, X X := Y ; ADD R1, =1 STORE R1, Z X := Y ; Z := X + 1 ;