Blog/2014-05
IPO(Inter-procedual Optimization)와 IPA(Inter-procedural Analysis)는 컴파일러 최적화 기술 중에서도 핵심 기술로 손꼽힌다. 왜냐하면 구현 자체가 쉽지 않고, 제대로만 동작하면 그만큼 값어치를 하기 때문이다.
IPO 과정의 예)
main.c
main.c
library.c
다음 몇 단계를 통과하면 최종적으로 최적화된 코드는 매우 단순할 것이다.
1) 모든 함수들의 호출 관계를 분석하면 몇 함수는 호출하는 곳이 없다는 것을 알고 해당 함수를 삭제한다.
2) 변수 데이터를 분석해 static 변수의 값을 변경하는 곳이 없으면 상수처럼 값을 고정 시킨다.
3) 고정된 변수의 값이 변하지 않기 때문에 if 비교문은 전혀 호출하지 않는다. 결국 calcValue()는 항상 96을 리턴하게 될 것이다. 따라서 최종적으로 최적화가 완료된 메인 함수는 딱 한 줄 뿐인 return 96; 과 동일한 코드가 된다.
2) 변수 데이터를 분석해 static 변수의 값을 변경하는 곳이 없으면 상수처럼 값을 고정 시킨다.
3) 고정된 변수의 값이 변하지 않기 때문에 if 비교문은 전혀 호출하지 않는다. 결국 calcValue()는 항상 96을 리턴하게 될 것이다. 따라서 최종적으로 최적화가 완료된 메인 함수는 딱 한 줄 뿐인 return 96; 과 동일한 코드가 된다.
* IPO/IPA 최적화 기능은 Objective-C 기반으로 만들어진 코코아 프레임워크와 맥/아이폰 앱에게 좀 더 의미가 특별하다. 다이나믹 바인딩을 기본으로 하는 Objective-C 언어와 런타임의 구조적인 특성 때문이다. Objective-C로 개발된 앱은 실행을 시켜서 객체에 메시지를 보내봐야만 메서드가 존재하는지 확인할 수 있다. 따라서 메시지를 보내지 않을 메서드들도 호출될지 모르기 때문에 모두 실행 파일이나 라이브러리에 포함되어야 한다. 하지만 IPO/IPA 기능을 통해 최적화된다면 불필요한 메서드나 변수들이 제거됨으로써 더 가벼운 코드가 만들어지고 더 빠르게 동작할 수 있다.