본문 바로가기

Domain/시스템 프로그래밍

8. Optimization

Optimization Practice

CPE(Cycle Per Element) : 요소당 필요한 cycle. 함수들의 성능을 비교하는 기준이 된다.

 

Basic Program

 

Combine1

 

Combine2

 code motion : 루프에 불필요한 코드를 삭제 혹은 이동시킨다.

for문의 length를 loop 밖으로 이동

 

Combine3

 루프 내의 함수 호출을 줄인다.

배열의 시작 지점을 포인터 변수로 지정하여 loop내의 반복적인 함수 호출 대신 인덱스로 접근하게 된다.

 

 

Combine4

 불필요한 메모리 참조 횟수를 줄인다.

loop내의 포인터 접근을 하던 방식 대신 변수를 하나 설정하여 값을 결정한 후 메모리는 마지막에 1회만 접근한다.

 

Combine5

 Loop unrolling : 루프의 반복 횟수를 줄인다.

 

 

 

Combine6

 Loop splitting : 변수를 여러개 두어 loop의 반복 횟수를 줄인다.

 

Loop unrolling과 loop splitting은 최적의 정도를 찾아 적절히 할 필요가 있다. 일정 수준 이상으로 프로그래밍할 경우 성능이 기대에 미치지 못한다. 대표적인 이유는 CPU의 레지스터 개수가 제한적이기 때문이다. 

 

Functional Unit Performance

latency와 Issue time이 다를 경우 파이프라인 설계가 가능함을 의미한다.

 

 

 

  예제

 

자원이 제한된 경우와 제한되지 않은 경우에서의 명령어 스케쥴링

자원 제한이 없는 경우
자원이 제한된 경우

 

 

Branch Misdirection Penalties

 효율적인 Branch prediction을 위해서는 순차적으로(예측가능함) 접근하는게 유리하다.

 

'Domain > 시스템 프로그래밍' 카테고리의 다른 글

4. Process Structure  (0) 2020.03.14
5. Task Programming  (0) 2020.03.14
6. IA Assembly Programming  (0) 2020.03.14
7. IA : History & Features  (0) 2020.03.14
9. Assembler  (0) 2020.03.14