KR102195103B1 - 프로그램 컴파일 방법 - Google Patents
프로그램 컴파일 방법 Download PDFInfo
- Publication number
- KR102195103B1 KR102195103B1 KR1020170080764A KR20170080764A KR102195103B1 KR 102195103 B1 KR102195103 B1 KR 102195103B1 KR 1020170080764 A KR1020170080764 A KR 1020170080764A KR 20170080764 A KR20170080764 A KR 20170080764A KR 102195103 B1 KR102195103 B1 KR 102195103B1
- Authority
- KR
- South Korea
- Prior art keywords
- function
- update
- optimization
- original
- functions
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/48—Incremental compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
- G06N20/10—Machine learning using kernel methods, e.g. support vector machines [SVM]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/01—Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Computational Linguistics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
복수의 원본 함수들을 가지는 원본 프로그램으로부터 업데이트된 복수의 업데이트 함수들을 가지는 업데이트 프로그램의 컴파일 방법에서, 업데이트 프로그램의 업데이트 함수들 각각에 대하여 원본 프로그램의 원본 함수들 중 업데이트 함수들 각각에 상응하는 원본 함수가 존재하는지 여부가 판단되고, 상응하는 원본 함수가 존재하는 경우, 업데이트 함수들 각각이 상응하는 원본 함수로부터 변경되었는지 여부가 판단되며, 업데이트 함수들 중 상응하는 원본 함수가 존재하지 않거나, 상응하는 원본 함수로부터 변경된 제1 업데이트 함수에 대하여 제1 최적화 조합이 탐색되고, 업데이트 함수들 중 상응하는 원본 함수가 존재하고, 상응하는 원본 함수로부터 변경되지 않은 제2 업데이트 함수에 대하여 원본 함수들에 대한 최적화 조합들을 저장하는 구성 데이터베이스로부터 상응하는 원본 함수에 적용된 제2 최적화 조합이 독출되며, 제1 업데이트 함수에 대하여 제1 최적화 조합을 이용하고 제2 업데이트 함수에 대하여 제2 최적화 조합을 이용하여 업데이트 프로그램이 컴파일된다.
Description
본 발명은 프로그램 컴파일 방법에 관한 것으로서, 더욱 상세하게는 업데이트된 프로그램을 효율적으로 컴파일하는 방법에 관한 것이다.
컴파일러는 원시 언어(source language)로 작성된 프로그램을 컴퓨터에 의해 실행될 수 있는 기계어와 같은 목적 언어(object language)로 변환하는 번역 프로그램이다. 이러한 컴파일러는 원시 언어를 목적 언어로 변환하면서 프로그램의 실행 시간을 감소시키거나 메모리 사용량을 감소시키기 위한 최적화를 수행할 수 있다. 종래의 컴파일러는 서로 다른 프로그램들에 대하여 일률적인 최적화를 수행하였고, 이에 따라 각각의 프로그램들의 특성들에 적합한 최적화가 수행되지 않았다. 이러한 문제를 해결하도록, 컴파일러에 포함된 최적화 패스(optimization pass)들의 서로 다른 조합들을 이용하여 프로그램을 반복하여 컴파일하는 반복 컴파일(iterative compilation) 기법이 개발되었다. 이러한 반복 컴파일 기법은 각 프로그램에 적합한 최적화를 수행할 수 있다.
본 발명의 일 목적은 컴파일 시간을 단축시키고 최적화 성능을 향상시킬 수 있는 프로그램 컴파일 방법을 제공하는 것이다.
상기 일 목적을 달성하기 위해, 본 발명의 실시예들에 따른 복수의 원본 함수들을 가지는 원본 프로그램으로부터 업데이트된 복수의 업데이트 함수들을 가지는 업데이트 프로그램의 컴파일 방법에서, 상기 업데이트 프로그램의 상기 업데이트 함수들 각각에 대하여 상기 원본 프로그램의 상기 원본 함수들 중 상기 업데이트 함수들 각각에 상응하는 원본 함수가 존재하는지 여부가 판단되고, 상기 상응하는 원본 함수가 존재하는 경우, 상기 업데이트 함수들 각각이 상기 상응하는 원본 함수로부터 변경되었는지 여부가 판단되며, 상기 업데이트 함수들 중 상기 상응하는 원본 함수가 존재하지 않거나, 상기 상응하는 원본 함수로부터 변경된 제1 업데이트 함수에 대하여 제1 최적화 조합이 탐색되고, 상기 업데이트 함수들 중 상기 상응하는 원본 함수가 존재하고, 상기 상응하는 원본 함수로부터 변경되지 않은 제2 업데이트 함수에 대하여 상기 원본 함수들에 대한 최적화 조합들을 저장하는 구성 데이터베이스로부터 상기 상응하는 원본 함수에 적용된 제2 최적화 조합이 독출되며, 상기 제1 업데이트 함수에 대하여 상기 제1 최적화 조합을 이용하고 상기 제2 업데이트 함수에 대하여 상기 제2 최적화 조합을 이용하여 상기 업데이트 프로그램이 컴파일된다.
상기 일 목적을 달성하기 위해, 본 발명의 실시예들에 따른 복수의 원본 함수들을 가지는 원본 프로그램으로부터 업데이트된 복수의 업데이트 함수들을 가지는 업데이트 프로그램의 컴파일 방법에서, 상기 원본 프로그램의 상기 원본 함수들의 함수 특성들에 따른 최적화 조합들에 대한 기계 학습이 수행되고, 상기 업데이트 프로그램의 상기 업데이트 함수들 각각에 대하여 상기 원본 프로그램의 상기 원본 함수들 중 상기 업데이트 함수들 각각에 상응하는 원본 함수가 존재하는지 여부가 판단되며, 상기 업데이트 함수들 중 상기 상응하는 원본 함수가 존재하지 않는 제1 업데이트 함수에 대하여 상기 기계 학습의 결과를 이용하여 상기 제1 업데이트 함수의 함수 특성에 따른 제1 최적화 조합이 획득되고, 상기 상응하는 원본 함수가 존재하는 경우, 상기 업데이트 함수들 각각이 상기 상응하는 원본 함수로부터 변경되었는지 여부가 판단되며, 상기 업데이트 함수들 중 상기 상응하는 원본 함수로부터 변경되지 않은 제2 업데이트 함수에 대하여 상기 원본 함수들에 대한 최적화 조합들을 저장하는 구성 데이터베이스로부터 상기 상응하는 원본 함수에 적용된 제2 최적화 조합이 독출되고, 상기 업데이트 함수들 중 상기 상응하는 원본 함수로부터 변경된 제3 업데이트 함수에 대하여 상기 상응하는 원본 함수에 적용된 상기 제3 최적화 조합 및 상기 기계 학습의 결과를 이용하여 획득된 제4 최적화 조합을 상기 상응하는 원본 함수의 함수 특성에 대한 상기 제3 업데이트 함수의 함수 특성의 변화율 값으로 반영하여 상기 제3 업데이트 함수에 대한 제5 최적화 조합이 생성되며, 상기 제1 업데이트 함수에 대하여 상기 제1 최적화 조합을 이용하고, 상기 제2 업데이트 함수에 대하여 상기 제2 최적화 조합을 이용하고, 상기 제3 업데이트 함수에 대하여 상기 제5 최적화 조합을 이용하여 상기 업데이트 프로그램이 컴파일된다.
상기 일 목적을 달성하기 위해, 본 발명의 실시예들에 따른 복수의 원본 함수들을 가지는 원본 프로그램으로부터 업데이트된 복수의 업데이트 함수들을 가지는 업데이트 프로그램의 컴파일 방법에서, 상기 원본 프로그램의 상기 원본 함수들 각각에 대하여 반복 컴파일(iterative compilation)을 수행하여 상기 원본 함수들의 최적화 조합들을 포함하는 최적화 구성이 획득되고, 구성 데이터베이스에 상기 최적화 구성이 저장되며, 상기 업데이트 프로그램의 상기 업데이트 함수들 각각에 대하여 상기 원본 프로그램의 상기 원본 함수들 중 상기 업데이트 함수들 각각에 상응하는 원본 함수가 존재하는지 여부, 및 상기 업데이트 함수들 각각이 상기 상응하는 원본 함수로부터 변경되었는지 여부가 판단되고, 상기 업데이트 함수들 중 상기 상응하는 원본 함수가 존재하고, 상기 상응하는 원본 함수로부터 변경되지 않은 업데이트 함수에 대하여 상기 구성 데이터베이스로부터 상기 최적화 구성에 포함된 상기 원본 함수들의 상기 최적화 조합들 중 상기 상응하는 원본 함수에 적용된 최적화 조합이 독출되며, 상기 상응하는 원본 함수가 존재하고, 상기 상응하는 원본 함수로부터 변경되지 않은 상기 업데이트 함수에 대하여 상기 상응하는 원본 함수에 적용된 상기 최적화 조합을 이용하여 상기 업데이트 프로그램이 컴파일된다.
상기와 같은 본 발명의 실시예들에 따른 복수의 원본 함수들을 가지는 원본 프로그램으로부터 업데이트된 복수의 업데이트 함수들을 가지는 업데이트 프로그램의 컴파일 방법에서, 상응하는 원본 함수가 존재하고, 상기 상응하는 원본 함수로부터 변경되지 않은 업데이트 함수에 대하여 추가적인 최적화 조합 탐색 없이 상기 상응하는 원본 함수에 적용된 최적화 조합을 이용하여 상기 업데이트 프로그램이 컴파일된다. 이에 따라, 상기 업데이트 프로그램의 컴파일 시간이 단축되고, 최적화 성능이 향상될 수 있다.
도 1은 본 발명의 실시예들에 따른 업데이트 프로그램의 컴파일 방법을 나타내는 순서도이다.
도 2a는 본 발명의 실시예들에 따른 컴파일 방법을 수행하는 반복 컴파일 시스템으로서 원본 프로그램을 컴파일할 때의 상기 반복 컴파일 시스템의 일 예를 나타내는 블록도이고, 도 2b는 본 발명의 실시예들에 따른 컴파일 방법을 수행하는 반복 컴파일 시스템으로서 업데이트 프로그램을 컴파일할 때의 상기 반복 컴파일 시스템의 일 예를 나타내는 블록도이다.
도 3은 도 2a 및 도 2b에 도시된 최적화 풀(optimization pool)에 포함된 복수의 최적화 패스(optimization pass)들의 일 예를 나타내는 표이다.
도 4는 본 발명의 일 실시예에 따른 업데이트 프로그램의 컴파일 방법을 나타내는 순서도이다.
도 5a는 원본 프로그램의 호출 그래프의 일 예를 나타내는 도면이고, 도 5b는 업데이트 프로그램의 호출 그래프의 일 예를 나타내는 도면이다.
도 6은 본 발명의 다른 실시예에 따른 업데이트 프로그램의 컴파일 방법을 나타내는 순서도이다.
도 7은 본 발명의 다른 실시예에 따른 도 6의 컴파일 방법을 수행하는 반복 컴파일 시스템의 일 예를 나타내는 블록도이다.
도 8a 및 도 8b는 본 발명의 또 다른 실시예에 따른 업데이트 프로그램의 컴파일 방법을 나타내는 순서도이다.
도 9는 본 발명의 실시예들에 따른 컴파일 방법을 나타내는 순서도이다.
도 2a는 본 발명의 실시예들에 따른 컴파일 방법을 수행하는 반복 컴파일 시스템으로서 원본 프로그램을 컴파일할 때의 상기 반복 컴파일 시스템의 일 예를 나타내는 블록도이고, 도 2b는 본 발명의 실시예들에 따른 컴파일 방법을 수행하는 반복 컴파일 시스템으로서 업데이트 프로그램을 컴파일할 때의 상기 반복 컴파일 시스템의 일 예를 나타내는 블록도이다.
도 3은 도 2a 및 도 2b에 도시된 최적화 풀(optimization pool)에 포함된 복수의 최적화 패스(optimization pass)들의 일 예를 나타내는 표이다.
도 4는 본 발명의 일 실시예에 따른 업데이트 프로그램의 컴파일 방법을 나타내는 순서도이다.
도 5a는 원본 프로그램의 호출 그래프의 일 예를 나타내는 도면이고, 도 5b는 업데이트 프로그램의 호출 그래프의 일 예를 나타내는 도면이다.
도 6은 본 발명의 다른 실시예에 따른 업데이트 프로그램의 컴파일 방법을 나타내는 순서도이다.
도 7은 본 발명의 다른 실시예에 따른 도 6의 컴파일 방법을 수행하는 반복 컴파일 시스템의 일 예를 나타내는 블록도이다.
도 8a 및 도 8b는 본 발명의 또 다른 실시예에 따른 업데이트 프로그램의 컴파일 방법을 나타내는 순서도이다.
도 9는 본 발명의 실시예들에 따른 컴파일 방법을 나타내는 순서도이다.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명하고자 한다. 도면상의 동일한 구성요소에 대해서는 동일한 참조부호를 사용하고 동일한 구성요소에 대해서 중복된 설명은 생략한다.
도 1은 본 발명의 실시예들에 따른 업데이트 프로그램의 컴파일 방법을 나타내는 순서도이다.
도 1을 참조하면, 복수의 원본 함수들을 가지는 원본 프로그램으로부터 업데이트된 복수의 업데이트 함수들을 가지는 업데이트 프로그램의 컴파일 방법에서, 상기 업데이트 프로그램의 상기 업데이트 함수들 각각에 대하여 상기 원본 프로그램의 상기 원본 함수들 중 상기 업데이트 함수들 각각에 상응하는 원본 함수가 존재하는지 여부가 판단될 수 있다(S110). 일 실시예에서, 각 업데이트 함수에 상응하는 원본 함수의 존재 여부는 함수 이름 및/또는 호출 관계를 이용하여 판단될 수 있다. 또한, 각 업데이트 함수에 상응하는 원본 함수가 존재하는 경우(S110: YES), 상기 업데이트 함수가 상기 상응하는 원본 함수로부터 변경되었는지 여부가 판단될 수 있다(S130). 일 실시예에서, 상기 업데이트 함수가 상기 상응하는 원본 함수로부터 변경되었는지 여부는 블룸 필터(bloom filter) 값을 이용하여 판단될 수 있다.
상기 업데이트 함수들 중 상기 상응하는 원본 함수가 존재하지 않거나(S110: NO), 상기 상응하는 원본 함수로부터 변경된(S130: YES), 제1 업데이트 함수에 대하여 제1 최적화 조합이 탐색될 수 있다(S150). 일 실시예에서, 상기 제1 업데이트 함수에 대한 상기 제1 최적화 조합은 반복 컴파일(iterative compilation)을 수행하여 획득될 수 있다. 다른 실시예에서, 상기 제1 업데이트 함수에 대한 상기 제1 최적화 조합은 기계 학습의 결과(예를 들어, 기계 학습 모델)를 이용하여 획득될 수 있다. 또 다른 실시예에서, 상기 제1 업데이트 함수에 대한 상기 제1 최적화 조합은 상기 제1 업데이트 함수에 상응하는 원본 함수에 적용된 최적화 조합 및 상기 기계 학습의 결과를 이용하여 획득된 최적화 조합을 상기 상응하는 원본 함수로부터 변경된 정도에 상응하는 비율로 반영하여 생성될 수 있다.
한편, 상기 업데이트 함수들 중 상기 상응하는 원본 함수가 존재하고(S110: YES), 상기 상응하는 원본 함수로부터 변경되지 않은(S130: NO), 제2 업데이트 함수에 대하여 상기 원본 함수들에 대한 최적화 조합들을 저장하는 구성 데이터베이스로부터 상기 상응하는 원본 함수에 적용된 제2 최적화 조합이 독출될 수 있다(S170). 즉, 상기 상응하는 원본 함수로부터 변경되지 않은 상기 제2 업데이트 함수에 대하여 별도의 반복 컴파일과 같은 추가적인 최적화 조합 탐색 없이 상기 상응하는 원본 함수에 기적용 및 기저장된 상기 제2 최적화 조합이 이용될 수 있다. 이에 따라, 상기 업데이트 프로그램의 컴파일 시간이 단축될 수 있다. 한편, 여기서, 상기 상응하는 원본 함수에 포함된 명령어들을 블룸 필터링하여 계산된 원본 블룸 필터 값과 상기 제2 업데이트 함수에 포함된 명령어들을 블룸 필터링하여 계산된 업데이트 블룸 필터 값이 동일한 경우, 상기 제2 업데이트 함수가 상기 상응하는 원본 함수로부터 변경되지 않은 것으로 판단될 수 있다. 또한, 여기서, 상기 최적화 조합(즉, 상기 제1 최적화 조합 및 상기 제2 최적화 조합 각각)은 컴파일 시 정해진 적용 순서로 적용될 최적화 패스들의 조합에 대한 최적화 조합 정보를 의미하거나, 상기 최적화 조합 정보가 지시하는 상기 정해진 적용 순서를 가지는 상기 최적화 패스들의 조합을 의미할 수 있다. 일 실시예에서, 상기 최적화 조합(또는 상기 최적화 조합 정보)은, 최적화 풀(optimization pool)에 포함된 복수의 최적화 패스(optimization pass)들 각각의 적용 여부, 상기 복수의 최적화 패스들 중 적용되는 최적화 패스들 각각의 파라미터들, 및 상기 적용되는 최적화 패스들의 적용 순서를 포함할 수 있다.
상기 상응하는 원본 함수가 존재하지 않거나, 상기 상응하는 원본 함수로부터 변경된 상기 제1 업데이트 함수에 대하여 새로 탐색된 상기 제1 최적화 조합을 이용하고, 상기 상응하는 원본 함수가 존재하고, 상기 상응하는 원본 함수로부터 변경되지 않은 상기 제2 업데이트 함수에 대하여 상기 구성 데이터베이스로부터 독출된 상기 제2 최적화 조합을 이용하여 상기 업데이트 프로그램이 컴파일될 수 있다(S190). 이에 따라, 상기 업데이트 프로그램의 최적화 성능이 향상되면서 컴파일 시간이 단축될 수 있다.
반복 컴파일 기법은 각 프로그램에 적합한 최적화 조합을 탐색 및 적용할 수 있다. 한편, 종래의 반복 컴파일 기법은 프로그램 단위로 최적화 조합이 탐색 및 적용되어 동일한 프로그램에 포함된 서로 다른 함수들 각각의 특징에 적합한 최적화를 수행하지 못하였다. 그러나, 본 발명의 실시예들에 따른 컴파일 방법에서는, 함수 단위로 반복 컴파일을 수행하여 각 함수의 특징에 적합한 최적화 조합을 탐색 및 적용함으로써 서로 다른 함수들 각각의 특징에 적합한 최적화가 수행될 수 있다. 또한, 본 발명의 실시예들에 따른 컴파일 방법에서는, 특히 상기 원본 프로그램으로부터 업데이트된 상기 업데이트 프로그램을 컴파일할 때, 상기 상응하는 원본 함수로부터 변경되지 않은 제2 업데이트 함수에 대하여 추가적인 최적화 조합 탐색 없이 상기 상응하는 원본 함수에 기적용 및 기저장된 상기 제2 최적화 조합을 이용할 수 있다. 이에 따라, 본 발명의 실시예들에 따른 컴파일 방법은 컴파일 시간을 단축시키고 최적화 성능을 향상시킬 수 있다.
도 2a는 본 발명의 실시예들에 따른 컴파일 방법을 수행하는 반복 컴파일 시스템으로서 원본 프로그램을 컴파일할 때의 상기 반복 컴파일 시스템의 일 예를 나타내는 블록도이고, 도 2b는 본 발명의 실시예들에 따른 컴파일 방법을 수행하는 반복 컴파일 시스템으로서 업데이트 프로그램을 컴파일할 때의 상기 반복 컴파일 시스템의 일 예를 나타내는 블록도이며, 도 3은 도 2a 및 도 2b에 도시된 최적화 풀에 포함된 복수의 최적화 패스들의 일 예를 나타내는 표이다.
도 2a 및 도 2b를 참조하면, 본 발명의 실시예들에 따른 컴파일 방법을 수행하는 반복 컴파일 시스템(또는 반복 컴파일 프레임워크)(200)는 컴파일러(210), 구성 데이터베이스(240) 및 성능 프로파일러(250)를 포함할 수 있다. 한편, 구성 데이터베이스(240)는 임의의 저장 장치로 구현될 수 있고, 컴파일러(210) 및 성능 프로파일러(250)는 소프트웨어, 하드웨어, 및/또는 이들의 조합으로 구현될 수 있다.
컴파일러(210)는 원시 언어(source language)로 작성된 원시 프로그램(260, 270)을 컴퓨터에 의해 실행될 수 있는 기계어와 같은 목적 언어(object language)를 가지는 목적 프로그램(265, 275)로 변환할 수 있다. 또한, 컴파일러(210)는 각 프로그램(예를 들어, 260)에 포함된 함수들(예를 들어, FUNC1, FUNC2, FUNC3) 각각에 적합한 최적화 조합을 탐색 및 적용하여 상기 프로그램을 컴파일할 수 있다. 이를 위하여, 컴파일러(210)는 복수의 최적화 패스들(225)을 가지는 최적화 풀(220), 및 각각의 함수들(예를 들어, FUNC1, FUNC2, FUNC3)에 대하여 최적화 풀(220)의 최적화 패스들(225)을 조합하여 설정하는 반복 컴파일 모듈(230)을 포함할 수 있다.
예를 들어, 도 3에 도시된 바와 같이, 최적화 풀(220)에 포함된 최적화 패스들(225)은 상수 전파(Constant Propagation), 데드 명령어 제거(Dead Inst Elimination), 데드 코드 제거(Dead Code Elimination), 데드 저장 제거(Dead Store Elimination), 적극적(Aggressive) DCE(Dead Code Elimination), 비트 트랙킹(Bit Tracking) DCE, SROA(Scalar Replacement Of Aggregate), 프로모트 메모리 투 레지스터(Promote Memory to Register), 재연관(Reassociate), CFG(Control Flow Graph) 평탄화(Flatten), CFG 구조화(Structurize), 테일 호출 제거(Tail Call Elimination), 스위치 낮춤(Lower Switch), 호출 낮춤(Lower Invoke), LCSSA(Loop Closed Static Single Assigment), 병합 로드 스토어 모션(Merged Load Store Motion), 메모리 카피 최적화(Memcpy Opt), 로어 아토믹(Lower Atomic), 로어 가드 인트린직(Lower Guard Intrinsic), 상관 값 전파(Correlated Value Propagation), 명령어 단순화기(Instruction Simplifier), 로어 엑스퍼트 인트린직(Lower Expect Intrinsic), 부분 인라인 라이브러리 호출(Partially Inline Lib Calls), 스칼라라이져(Scalarizer), GVN(Global Value Numbering), 직선 강도 감소(Straight Line Strength Reduce), 플로트 투 인티저(Float to Int), 유도 범위 검사 제거(Inductive Range Check Elimination), 유도 변수 단순화(IndVar(Induction Variable) Simplify), 명령어 조합(Instruction Combining), LICM(Loop Invariant Code Motion), 루프 버져닝(Loop Versioning), 루프 상호교환(Loop Interchange), 추측 실행(Speculative Execution), 루프 언스위치(Loop Unswitch), 루프 명령어 단순화(Loop Inst Simplify), 루프 언롤(Loop Unroll), 루프 리롤(Loop Reroll), 루프 로테이트(Loop Rotate), 루프 이디엄(Loop Idiom), 루프 단순화(Loop Simplify), 루프 삭제(Loop Deletion), 상수 호이스팅(Constant Hoisting), 싱킹(Sinking), 루프 분배(Loop Distribute), 루프 노드 제거(Loop Load Elimination), 루프 단순화(Loop Simplify) CFG, 루프 데이터 프리페치(Loop Data Prefetch), 기본 블록 벡터화(Basic Block Vectorize), 루프 벡터화(Loop Vectorize), SLP(Supper word Level Parallelism) 벡터화기(Vectorizer), 로드 조합(Load Combine), N진 재연관(Nary Reassociate) 등을 포함할 수 있으나, 이에 한정되지 않는다. 또한, 최적화 풀(220)에 포함된 최적화 패스들(225) 중 일부는 파라미터가 없을 수 있고(또는 "NONE"의 파라미터를 가질 수 있고), 다른 일부는 유효한 파라미터를 가질 수 있다. 예를 들어, CFG 구조화, 명령어 조합, 루프 언스위치 및 루프 로테이트 최적화 패스들은 "true" 또는 "false"의 불(Boolean) 타입의 파라미터를 가질 수 있고, 루프 언롤 최적화 패스는 언롤 깊이를 나타내는 정수(Integer) 타입의 파라미터를 가질 수 있으나, 이에 한정되지 않는다.
구성 데이터베이스(240)는 복수의 프로그램들(PROGRAM1, PROGRAM2) 각각에 대한 적어도 하나의 최적화 구성(COMFIGURATION1, COMFIGURATION2, COMFIGURATIONN)을 저장할 수 있다. 각 최적화 구성(COMFIGURATION1, COMFIGURATION2, COMFIGURATIONN)은 상응하는 프로그램에 포함된 복수의 프로그램들의 복수의 최적화 조합들을 저장할 수 있다. 또한, 성능 프로파일러(250)는 소정의 최적화 구성으로 최적화된 목적 프로그램(265, 275)을 입력으로 수신하고, 목적 프로그램(265, 275)의 실행 시간을 측정할 수 있다. 한편, 상기 측정된 실행 시간은 상기 소정의 최적화 구성과 함께 구성 데이터베이스(240)에 저장될 수 있다.
예를 들어, 도 2a에 도시된 바와 같이, 반복 컴파일 시스템(200)이 구성 데이터베이스(240)에 이전 버전의 프로그램의 최적화 구성이 저장되지 않은 원본 프로그램(260)을 컴파일하는 경우, 반복 컴파일 시스템(200)은 각 원본 함수(FUNC1, FUNC2, FUNC3) 단위로 반복 컴파일을 수행하여 각각의 원본 함수들(FUNC1, FUNC2, FUNC3)의 최적화 조합들을 탐색하고, 탐색된 최적화 조합들로 원본 프로그램(260)을 컴파일하여 목적 언어의 원본 프로그램(265)을 생성할 수 있다. 예를 들어, 반복 컴파일 모듈(230)은 각 원본 함수(FUNC1, FUNC2, FUNC3)에 대하여 최적화 풀(220)에 포함된 최적화 패스들(225)의 조합을 변경하여 설정하고, 컴파일러(210)는 반복 컴파일 모듈(230)에 의해 변경되면서 설정된 최적화 조합들을 이용하여 원본 프로그램(260)을 반복하여 컴파일할 수 있다. 도 2a의 예에서, 반복 컴파일 모듈(230)은 제1 원본 함수(FUNC1)에 대하여 제1 최적화 패스(OPT1) 및 제5 최적화 패스(OPT5)를 순차적으로 포함하는 최적화 조합을 설정하고, 제2 원본 함수(FUNC2)에 대하여 제6 최적화 패스(OPT6) 및 제4 최적화 패스(OPT4)를 순차적으로 포함하는 최적화 조합을 설정하며, 제3 원본 함수(FUNC3)에 대하여 제3 최적화 패스(OPT3) 및 제2 최적화 패스(OPT2)를 순차적으로 포함하는 최적화 조합을 설정할 수 있고, 컴파일러(210)는 반복 컴파일 모듈(230)에 의해 설정된 최적화 조합들로 원본 프로그램(260)을 컴파일할 수 있다. 또한, 반복 컴파일 모듈(230)은, 다음 번 컴파일 시, 제1 내지 제3 원본 함수들(FUNC1, FUNC2, FUNC3) 중 하나의 최적화 조합을 변경(예를 들어, 상기 최적화 조합에 포함된 최적화 패스의 추가/삭제, 또는 상기 최적화 조합에 포함된 최적화 패스들의 순서 변경 등)하여 설정할 수 있고, 컴파일러(210)는 상기 변경된 최적화 조합을 포함하는 최적화 조합들로 원본 프로그램(260)을 컴파일할 수 있다. 또한, 상기 변경되면서 설정된 최적화 조합들로 최적화된 목적 언어의 원본 프로그램(265)은 성능 프로파일러(250)에 제공되고, 성능 프로파일러(250)는 원본 프로그램(265)의 실행 시간을 측정할 수 있다. 반복 컴파일 모듈(230)에 의해 설정된 최적화 조합들을 포함하는 최적화 구성은 성능 프로파일러(250)에 의해 측정된 실행 시간과 함께 구성 데이터베이스(240)에 저장될 수 있다. 또한, 반복 컴파일 모듈(230)에 의한 함수 단위의 최적화 조합의 변경, 원본 프로그램(260)의 컴파일, 성능 프로파일러(250)에 의한 실행 시간 측정, 및 구성 데이터베이스(240)로의 최적화 구성 및 실행 시간의 저장은 반복적으로 수행될 수 있다. 이러한 동작에 의해 구성 데이터베이스(240)에 저장된 최적화 구성들(CONFIGURATION1, CONFIGURATION2, CONFIGURATIONN) 중 하나의 최적화 구성, 예를 들어 가장 짧은 실행 시간을 가지는 최적화 구성(예를 들어, CONFIGURATION1)이 최종적으로 선택되고, 상기 최종적으로 선택된 최적화 구성(예를 들어, CONFIGURATION1)은 원본 프로그램(260)으로부터 업데이트된 업데이트 프로그램(270)에 이용될 수 있다.
또한, 도 2b에 도시된 바와 같이, 반복 컴파일 시스템(200)이 구성 데이터베이스(240)에 최적화 구성(CONFIGURATION1)이 저장된 원본 프로그램(260)으로부터 업데이트된 업데이트 프로그램(270)을 컴파일하는 경우, 컴파일러(210)는 원본 프로그램(260)에 대한 최적화 구성(CONFIGURATION1)을 활용하여 업데이트 프로그램(270)의 최적화 및 컴파일을 수행할 수 있다. 예를 들어, 컴파일러(210)는 원본 프로그램(260)에 상응하는 원본 함수가 존재하지 않는 제1 업데이트 함수(FUNC4), 및 상응하는 원본 함수(FUNC2)로부터 변경된 제2 업데이트 함수(FUNC2')에 대하여 새로운 최적화 조합을 탐색하나, 상응하는 원본 함수(FUNC3)로부터 변경되지 않은(예를 들어, 동일한 블룸 필터 값을 가지는) 제3 업데이트 함수(FUNC3)에 대하여 반복 컴파일과 같은 최적화 조합 탐색을 수행하지 않고 상응하는 원본 함수(FUNC3)에 기적용되고 구성 데이터베이스(240)에 저장된 최적화 구성(CONFIGURATION1)에 포함된 최적화 조합이 이용될 수 있다. 이에 따라, 반복 컴파일 시스템(200)은 함수 단위 반복 컴파일을 수행함으로써 최적화 성능을 향상시킬 수 있고, 또한 업데이트 프로그램(270)의 컴파일 시 원본 프로그램(260)에 대한 최적화 구성(CONFIGURATION1)을 활용함으로써 업데이트 프로그램(270)의 컴파일 시간을 단축시킬 수 있다.
도 4는 본 발명의 일 실시예에 따른 업데이트 프로그램의 컴파일 방법을 나타내는 순서도이고, 도 5a는 원본 프로그램의 호출 그래프의 일 예를 나타내는 도면이며, 도 5b는 업데이트 프로그램의 호출 그래프의 일 예를 나타내는 도면이다.
도 4를 참조하면, 각 업데이트 함수에 상응하는 원본 함수의 존재 여부를 판단하도록(S110), 함수 이름(S115) 및/또는 호출 관계(S125)가 이용될 수 있다. 일 실시예에서, 각 업데이트 함수와 동일한 함수 이름을 가지는 원본 함수가 존재하는 경우(S115: YES), 상기 원본 함수가 상기 업데이트 함수에 상응하는 원본 함수로 판단될 수 있다. 한편, 각 업데이트 함수와 동일한 함수 이름을 가지는 원본 함수가 존재하지 않더라도(S115: NO), 원본 프로그램의 호출 그래프(call graph) 및 업데이트 프로그램의 호출 그래프가 분석되고(S120), 상기 분석의 결과로서 각 업데이트 함수와 동일한 호출 관계를 가지는 원본 함수가 존재하는 경우(S125: YES), 상기 원본 함수가 상기 업데이트 함수에 상응하는 원본 함수로 판단될 수 있다. 예를 들어, 도 5a 및 도 5b에 도시된 바와 같이, 제1 및 제2 원본 함수들(FUNC1, FUNC2)이 제3 원본 함수(FUNC3)를 호출하고, 제3 원본 함수(FUNC3)가 제4 및 제5 원본 함수들(FUNC4, FUNC5)을 호출하며, 제1 및 제2 업데이트 함수들(FUNC1, FUNC2)이 제3 업데이트 함수(FUNC6)를 호출하고, 제3 업데이트 함수(FUNC6)가 제4 및 제5 업데이트 함수들(FUNC4, FUNC5)을 호출하는 경우, 제3 원본 함수(FUNC3)와 제3 업데이트 함수(FUNC6)가 서로 다른 함수 이름들을 가지더라도, 제3 원본 함수(FUNC3)는 제3 업데이트 함수(FUNC6)에 상응하는 원본 함수로 판단될 수 있다.
또한, 각 업데이트 함수가 상응하는 원본 함수으로부터 변경되었는지 여부를 판단하도록(S130), 블룸 필터 값들이 비교될 수 있다. 일 실시예에서, 각 업데이트 함수에 포함된 명령어들에 블룸 필터링을 수행하여 업데이트 블룸 필터 값이 계산되고, 상기 상응하는 원본 함수에 포함된 명령어들에 블룸 필터링을 수행하여 원본 블룸 필터 값이 계산될 수 있다(S140). 상기 업데이트 블룸 필터 값이 상기 원본 블룸 필터 값과 동일하지 않은 경우(S145: NO), 상기 업데이트 함수가 상기 상응하는 원본 함수로부터 변경된 것으로 판단되고, 상기 업데이트 블룸 필터 값이 상기 원본 블룸 필터 값과 동일한 경우(S145: YES), 상기 업데이트 함수가 상기 상응하는 원본 함수로부터 변경되지 않은 것으로 판단될 수 있다.
또한, 일 실시예에서, 각 업데이트 함수와 동일한 함수 이름 및 동일한 호출 관계를 가지는 원본 함수가 존재하지 않거나(S115: NO, S125: NO), 상기 업데이트 블룸 필터 값이 상기 원본 블룸 필터 값과 동일하지 않은(S145: NO) 제1 업데이트 함수에 대하여 제1 최적화 조합을 탐색하도록, 상기 제1 업데이트 함수에 대한 반복 컴파일이 수행될 수 있다(S155). 한편, 상기 업데이트 블룸 필터 값이 상기 원본 블룸 필터 값과 동일한(S145: YES) 제2 업데이트 함수에 대하여 구성 데이터베이스로부터 상기 상응하는 원본 함수에 적용된 제2 최적화 조합이 독출될 수 있다(S170). 또한, 상기 제1 업데이트 함수에 대하여 상기 제1 최적화 조합을 이용하고 상기 제2 업데이트 함수에 대하여 상기 제2 최적화 조합을 이용하여 상기 업데이트 프로그램이 컴파일될 수 있다(S190).
도 6은 본 발명의 다른 실시예에 따른 업데이트 프로그램의 컴파일 방법을 나타내는 순서도이다.
도 6의 컴파일 방법은, 도 4에 도시된 제1 업데이트 함수에 대한 반복 컴파일(S155)를 대신하여 기계 학습의 결과를 이용하여 제1 최적화 조합이 탐색(S160, S165)되는 것을 제외하고, 도 4의 컴파일 방법의 단계들과 동일 또는 유사한 단계들을 포함할 수 있다. 또한, 도 6의 업데이트 프로그램의 컴파일 방법이 수행되기 전에, 하나 이상의 원본 프로그램들 각각에 포함된 원본 함수들의 함수 특성들에 따른 최적화 조합들에 대한 기계 학습이 수행될 수 있다. 일 실시예에서, 상기 함수 특성들에 따른 최적화 조합들에 대한 기계 학습은 서포트 벡터 머신(Support Vector Machine; SVM) 학습일 수 있다.
도 6을 참조하면, 상응하는 원본 함수가 존재하지 않거나, 상응하는 원본 함수로부터 변경된 제1 업데이트 함수의 함수 특성이 추출될 수 있다(S160). 일 실시예에서, 상기 함수 특성은 함수에 포함된 기본 블록에 대한 기본 특성, 상기 함수에 포함된 각각의 명령어들에 대한 명령어 레벨 특성, 및 상기 함수에 포함된 루프에 대한 루프 레벨 특성 중 적어도 하나를 포함할 수 있다. 예를 들어, 상기 기본 특성은 기본 블록(Basic Block)의 개수 및 명령어(Instruction)의 개수를 포함할 수 있으나, 이에 한정되지 않는다. 또한, 상기 명령어 레벨 특성은 연관 명령어(Associative Instruction)의 개수, 로드 명령어(Load Instruction)의 개수, 저장 명령어(Store Instruction)의 개수, 브랜치 명령어(Branch Instruction)의 개수, 호출 명령어(Call Instruction)의 개수, 인보크 명령어(Invoke Instruction)의 개수, 비교 명령어(Compare Instruction)의 개수, 할당 명령어(Alloca Instruction)의 개수, 스위치 명령어(Switch Instruction)의 개수, 겟 엘리먼트 포인터 명령어(Get Element Ptr Instruction)의 개수 및 PHI 노드(PHI Node)의 개수를 포함할 수 있으나, 이에 한정되지 않는다. 또한, 상기 루프 레벨 특성은 루프(Loop)의 개수, 내포 루프(Nested Loop)의 개수, 루프 최대 깊이(Loop Maximum Depth), LCSSA 형태(LCSSA Form)의 존재 유무, 재귀적 LCSSA 형태(Recursive LCSSA Form)의 존재 유무, 및 루프 단순화(Loop Simplify) 적용 가능 유무를 포함할 수 있으나, 이에 한정되지 않는다.
또한, 상기 제1 업데이트 함수에 대하여, 상기 기계 학습의 결과를 이용하여 상기 제1 업데이트 함수의 상기 추출된 함수 특성에 따른 제1 최적화 조합이 획득될 수 있다(S165). 따라서, 상기 제1 업데이트 함수에 대한 반복 컴파일을 수행하지 않더라도, 상기 기계 학습을 이용하여 상기 제1 업데이트 함수의 상기 함수 특성에 적합한 상기 제1 최적화 조합이 획득될 수 있다. 이에 따라, 업데이트 프로그램의 컴파일 시간이 더욱 단축될 수 있다.
도 7은 본 발명의 다른 실시예에 따른 도 6의 컴파일 방법을 수행하는 반복 컴파일 시스템의 일 예를 나타내는 블록도이다.
도 7을 참조하면, 반복 컴파일 시스템(또는 반복 컴파일 프레임워크)(400)은, 도 2a 및 도 2b의 반복 컴파일 시스템(200)과 비교하여, 기계 학습 모듈(410) 및 기계 학습 데이터베이스(430)를 더 포함할 수 있다.
기계 학습 모듈(410)은 하나 이상의 프로그램들 각각의 복수의 함수들의 함수 특성들에 따른 상기 복수의 함수들의 최적화 조합들에 대한 기계 학습을 수행하고, 상기 기계 학습의 결과로서 기계 학습 모델(435)을 기계 학습 데이터베이스(430)에 저장할 수 있다. 또한, 기계 학습 모듈(410)은 임의의 함수에 대하여 기계 학습 모델(435)을 이용하여 상기 함수의 함수 특성에 따른 최적화 조합을 제공할 수 있다. 예를 들어, 기계 학습 모듈(410)은 새로운 프로그램의 각각의 함수들에 대하여 상기 함수들의 함수 특성들에 따른 최적화 조합들을 제공하거나, 업데이트 함수에 포함된 원본 함수가 존재하지 않는 업데이트 함수 또는 상응하는 원본 함수로부터 변경된 업데이트 함수에 대하여 상기 업데이트 함수의 함수 특성에 따른 최적화 조합을 제공할 수 있다.
한편, 도 7의 반복 컴파일 시스템(400)은, 도 6의 컴파일 방법뿐만 아니라, 후술되는 도 8a 및 도 8b의 컴파일 방법 또한 수행할 수 있다.
도 8a 및 도 8b는 본 발명의 또 다른 실시예에 따른 업데이트 프로그램의 컴파일 방법을 나타내는 순서도이다.
도 8a 및 도 8b의 컴파일 방법은, 상응하는 원본 함수로부터 변경된 업데이트 함수, 즉 상기 상응하는 원본 함수의 블룸 필터 값과 다른 블룸 필터 값을 가지는(S145: NO) 업데이트 함수에 대하여 상기 상응하는 원본 함수에 적용된 최적화 조합과 기계 학습의 결과를 이용하여 획득된 최적화 조합을 소정의 비율로 반영하여 최적화 조합을 생성(S510, S520, S530, S540, S550)하는 것을 제외하고, 도 6의 컴파일 방법의 단계들과 동일 또는 유사한 단계들을 포함할 수 있다.
도 8a 및 도 8b를 참조하면, 상기 상응하는 원본 함수의 블룸 필터 값과 다른 블룸 필터 값을 가지는(S145: NO) 업데이트 함수에 대하여, 상기 업데이트 함수의 업데이트 함수 특성 및 상기 상응하는 원본 함수의 원본 함수 특성이 추출될 수 있다(S510). 일 실시예에서, 상기 업데이트 함수 및 사익 원본 함수 각각의 함수 특성은 각 함수에 포함된 기본 블록에 대한 기본 특성, 각 함수에 포함된 각각의 명령어들에 대한 명령어 레벨 특성, 및 각 함수에 포함된 루프에 대한 루프 레벨 특성 중 적어도 하나를 포함할 수 있다.
상기 원본 함수 특성에 대한 상기 업데이트 함수 특성의 변화율 값이 계산될 수 있다(S520). 예를 들어, 함수 특성의 각 항목(예를 들어, 기본 블록 개수, 명령어 개수, 연관 명령어 개수, 로드 명령어 개수, 저장 명령어 개수, 브랜치 명령어 개수, 호출 명령어 개수, 인보크 명령어 개수, 비교 명령어 개수, 할당 명령어 개수, 스위치 명령어 개수, 겟 엘리먼트 포인터 명령어 개수, PHI 노드 개수, 루프 개수, 내포 루프 개수, 루프 최대 깊이, LCSSA 형태 존재 유무, 재귀적 LCSSA 형태 존재 유무, 및 루프 단순화 적용 가능 유무 등)의 최대 변화량을 설정하고, 상기 최대 변화량에 대한 상기 원본 함수 특성으로부터의 상기 업데이트 함수 특성의 변화량의 비율(예를 들어, 상기 항목들에 대한 상기 비율들의 평균)을 상기 변화율 값으로 결정할 수 있다. 일 실시예에서, 상기 원본 함수 특성에 대한 상기 업데이트 함수 특성의 상기 변화율 값은 0과 1 사이의 값을 가질 수 있다.
구성 데이터베이스로부터 상기 상응하는 원본 함수에 적용된 최적화 조합이 독출되고(S530), 기계 학습의 결과를 이용하여 상기 업데이트 함수 특성에 따른 최적화 조합이 획득되며(S540), 상기 업데이트 함수에 대한 최적화 조합이, 상기 상응하는 원본 함수에 적용된 최적화 조합 및 상기 기계 학습의 결과를 이용하여 획득된 최적화 조합을 상기 원본 함수 특성에 대한 상기 업데이트 함수 특성의 상기 변화율 값으로 반영하여 생성될 수 있다(S550). 예를 들어, 상기 변화율 값은 0과 1 사이의 값을 가질 수 있고, 상기 변화율 값이 0에 가까운 값을 가지는 경우, 상기 업데이트 함수에 대한 최적화 조합에 상기 상응하는 원본 함수에 적용된 최적화 조합이 상대적으로 높은 비율로 반영되고, 상기 변화율 값이 1에 가까운 값을 가지는 경우, 상기 업데이트 함수에 대한 최적화 조합에 상기 기계 학습의 결과를 이용하여 획득된 제4 최적화 조합이 상대적으로 높은 비율로 반영될 수 있다.
일 실시예에서, 상기 업데이트 함수에 대한 최적화 조합을 생성하도록(S550), 최적화 풀에 포함된 복수의 최적화 패스들 각각에 대하여 (예를 들어, 0과 1 사이의 값을 가지는) 랜덤 값이 생성되고(S560), 상기 랜덤 값과 상기 변화율 값이 비교될 수 있다(S565). 상기 랜덤 값이 상기 변화율 값 초과인 경우(S565: YES), 상기 최적화 패스에 대하여 상기 상응하는 원본 함수에 적용된 최적화 조합이 반영될 수 있다(S570). 즉, 상기 상응하는 원본 함수에 적용된 최적화 조합에 상기 최적화 패스가 포함된 경우, 상기 업데이트 함수에 대한 최적화 조합에 상기 최적화 패스가 포함되고, 상기 상응하는 원본 함수에 적용된 최적화 조합에 상기 최적화 패스가 포함되지 않은 경우, 상기 업데이트 함수에 대한 최적화 조합에 상기 최적화 패스가 포함되지 않을 수 있다. 상기 최적화 패스의 파라미터 또한 상기 상응하는 원본 함수에 적용된 최적화 조합의 최적화 패스의 파라미터가 이용될 수 있다. 상기 랜덤 값이 상기 변화율 값 이하인 경우(S565: NO), 상기 최적화 패스에 대하여 상기 기계 학습의 결과를 이용하여 획득된 최적화 조합이 반영될 수 있다(S575). 즉, 상기 기계 학습의 결과를 이용하여 획득된 최적화 조합에 상기 최적화 패스가 포함된 경우, 상기 업데이트 함수에 대한 최적화 조합에 상기 최적화 패스가 포함되고, 상기 기계 학습의 결과를 이용하여 획득된 최적화 조합에 상기 최적화 패스가 포함되지 않은 경우, 상기 업데이트 함수에 대한 최적화 조합에 상기 최적화 패스가 포함되지 않을 수 있다. 상기 최적화 패스의 파라미터 또한 상기 기계 학습의 결과를 이용하여 획득된 최적화 조합의 최적화 패스의 파라미터가 이용될 수 있다. 랜덤 값 생성(S560), 랜덤 값과 변화율 값의 비교(S565), 및 상기 상응하는 원본 함수에 적용된 최적화 조합 또는 상기 기계 학습의 결과를 이용하여 획득된 최적화 조합의 반영(S570, S575)은 상기 최적화 풀에 포함된 모든 최적화 패스들에 대하여 수행될 때까지 반복될 수 있다(S580). 한편, 일 실시예에서, 상기 동작들이 모든 최적화 패스들에 대하여 수행된 후(S580: YES), 상기 업데이트 함수에 대한 최적화 조합에 포함된 최적화 패스들의 순서를 결정하기 위하여 반복 컴파일이 수행될 수 있다(S590). 이와 같이, 상기 상응하는 원본 함수로부터 변경된 상기 업데이트 함수에 대하여, 상기 업데이트 함수가 상기 상응하는 원본 함수로부터 변경된 정도, 즉 상기 원본 함수 특성에 대한 상기 업데이트 함수 특성의 상기 변화율 값으로 상기 상응하는 원본 함수에 적용된 최적화 조합 및 상기 기계 학습의 결과를 이용하여 획득된 최적화 조합을 반영하여 최적화 조합을 생성함으로써, 컴파일 시간이 단축되면서 최적화 성능이 향상될 수 있다.
도 9는 본 발명의 실시예들에 따른 컴파일 방법을 나타내는 순서도이다.
도 9를 참조하면, 복수의 원본 함수들을 가지는 원본 프로그램으로부터 업데이트된 복수의 업데이트 함수들을 가지는 업데이트 프로그램의 컴파일 방법에서, 상기 원본 프로그램의 상기 원본 함수들 각각에 대하여 반복 컴파일을 수행하여 상기 원본 함수들의 최적화 조합들을 포함하는 최적화 구성이 획득될 수 있다(S910). 또한, 성능 프로파일러를 이용하여 상기 획득된 최적화 구성으로 컴파일된 상기 원본 프로그램의 실행 시간이 측정될 수 있다(S920). 구성 데이터베이스에 상기 획득된 최적화 구성과 상기 실행 시간이 저장될 수 있다(S930).
상기 업데이트 프로그램의 상기 업데이트 함수들 각각에 대하여 상기 원본 프로그램의 상기 원본 함수들 중 상기 업데이트 함수들 각각에 상응하는 원본 함수가 존재하는지 여부, 및 상기 업데이트 함수들 각각이 상기 상응하는 원본 함수로부터 변경되었는지 여부가 판단될 수 있다(S940). 상기 업데이트 함수들 중 상기 상응하는 원본 함수가 존재하고, 상기 상응하는 원본 함수로부터 변경되지 않은 업데이트 함수에 대하여 상기 구성 데이터베이스로부터 상기 최적화 구성에 포함된 상기 원본 함수들의 상기 최적화 조합들 중 상기 상응하는 원본 함수에 적용된 최적화 조합이 독출될 수 있다(S950). 상기 상응하는 원본 함수가 존재하고, 상기 상응하는 원본 함수로부터 변경되지 않은 상기 업데이트 함수에 대하여 상기 상응하는 원본 함수에 적용된 상기 최적화 조합을 이용하여 상기 업데이트 프로그램이 컴파일될 수 있다(S960). 이에 따라, 상기 업데이트 프로그램의 컴파일 시간이 단축되고, 최적화 성능이 향상될 수 있다.
실시예에 따라서, 본 발명의 실시예들에 따른 컴파일 방법은, 컴퓨터로 판독 가능한 매체에 저장된 컴퓨터로 판독 가능한 프로그램 코드를 포함하는 제품 등의 형태로 구현될 수도 있다. 상기 컴퓨터로 판독 가능한 프로그램 코드는 다양한 컴퓨터 또는 다른 데이터 처리 장치의 프로세서로 제공될 수 있다. 상기 컴퓨터로 판독 가능한 매체는 컴퓨터로 판독 가능한 신호 매체 또는 컴퓨터로 판독 가능한 기록 매체일 수 있다. 상기 컴퓨터로 판독 가능한 기록 매체는 명령어 실행 시스템, 장비 또는 장치 내에 또는 이들과 접속되어 프로그램을 저장하거나 포함할 수 있는 임의의 유형적인 매체일 수 있다.
본 발명은 프로그램 또는 소스 코드를 번역 또는 컴파일하는 임의의 번역 또는 컴파일 프로그램, 장치 또는 시스템에 적용될 수 있다.
상기에서는 본 발명의 바람직한 실시예를 참조하여 설명하였지만, 해당 기술분야의 숙련된 당업자는 하기의 특허청구범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 것이다.
Claims (10)
- 복수의 원본 함수들을 가지는 원본 프로그램으로부터 업데이트된 복수의 업데이트 함수들을 가지는 업데이트 프로그램의 컴파일 방법에 있어서,
상기 업데이트 프로그램의 상기 업데이트 함수들 각각에 대하여 상기 원본 프로그램의 상기 원본 함수들 중 상기 업데이트 함수들 각각에 상응하는 원본 함수가 존재하는지 여부를 판단하는 단계;
상기 상응하는 원본 함수가 존재하는 경우, 상기 업데이트 함수들 각각이 상기 상응하는 원본 함수로부터 변경되었는지 여부를 판단하는 단계;
상기 업데이트 함수들 중 상기 상응하는 원본 함수가 존재하지 않거나, 상기 상응하는 원본 함수로부터 변경된 제1 업데이트 함수에 대하여 제1 최적화 조합을 탐색하는 단계;
상기 업데이트 함수들 중 상기 상응하는 원본 함수가 존재하고, 상기 상응하는 원본 함수로부터 변경되지 않은 제2 업데이트 함수에 대하여 상기 원본 함수들에 대한 최적화 조합들을 저장하는 구성 데이터베이스로부터 상기 상응하는 원본 함수에 적용된 제2 최적화 조합을 독출하는 단계; 및
상기 제1 업데이트 함수에 대하여 상기 제1 최적화 조합을 이용하고 상기 제2 업데이트 함수에 대하여 상기 제2 최적화 조합을 이용하여 상기 업데이트 프로그램을 컴파일하는 단계를 포함하는 컴파일 방법. - 제1 항에 있어서, 상기 제1 최적화 조합 및 상기 제2 최적화 조합 각각은 최적화 풀(optimization pool)에 포함된 복수의 최적화 패스(optimization pass)들 각각의 적용 여부, 상기 복수의 최적화 패스들 중 적용되는 최적화 패스들 각각의 파라미터들, 및 상기 적용되는 최적화 패스들의 적용 순서를 포함하는 컴파일 방법.
- 제1 항에 있어서, 상기 업데이트 함수들 각각이 상기 상응하는 원본 함수로부터 변경되었는지 여부를 판단하는 단계는,
상기 업데이트 함수들 각각에 포함된 명령어들에 블룸 필터링을 수행하여 업데이트 블룸 필터 값을 계산하는 단계;
상기 상응하는 원본 함수에 포함된 명령어들에 블룸 필터링을 수행하여 원본 블룸 필터 값을 계산하는 단계; 및
상기 업데이트 블룸 필터 값이 상기 원본 블룸 필터 값과 동일한지 여부에 따라 상기 업데이트 함수들 각각의 변경 여부를 판단하는 단계를 포함하는 컴파일 방법. - 제1 항에 있어서,
상기 원본 함수들의 함수 특성들에 따른 최적화 조합들에 대한 기계 학습을 수행하는 단계를 더 포함하고,
상기 제1 업데이트 함수에 대하여 상기 제1 최적화 조합을 탐색하는 단계는,
상기 상응하는 원본 함수가 존재하지 않는 상기 제1 업데이트 함수의 함수 특성을 추출하는 단계; 및
상기 기계 학습의 결과를 이용하여 상기 추출된 함수 특성에 따른 상기 제1 최적화 조합을 획득하는 단계를 포함하는 컴파일 방법. - 제4 항에 있어서, 상기 제1 업데이트 함수의 상기 함수 특성은 상기 제1 업데이트 함수에 포함된 기본 블록에 대한 기본 특성, 상기 제1 업데이트 함수에 포함된 각각의 명령어들에 대한 명령어 레벨 특성, 및 상기 제1 업데이트 함수에 포함된 루프에 대한 루프 레벨 특성 중 적어도 하나를 포함하는 컴파일 방법.
- 제1 항에 있어서,
상기 원본 함수들의 함수 특성들에 따른 최적화 조합들에 대한 기계 학습을 수행하는 단계를 더 포함하고,
상기 제1 업데이트 함수에 대하여 상기 제1 최적화 조합을 탐색하는 단계는,
상기 상응하는 원본 함수의 원본 함수 특성, 및 상기 상응하는 원본 함수로부터 변경된 상기 제1 업데이트 함수의 업데이트 함수 특성을 추출하는 단계;
상기 원본 함수 특성에 대한 상기 업데이트 함수 특성의 변화율 값을 계산하는 단계;
상기 구성 데이터베이스로부터 상기 상응하는 원본 함수에 적용된 제3 최적화 조합을 독출하는 단계;
상기 기계 학습의 결과를 이용하여 상기 업데이트 함수 특성에 따른 제4 최적화 조합을 획득하는 단계; 및
상기 상응하는 원본 함수에 적용된 상기 제3 최적화 조합 및 상기 기계 학습의 결과를 이용하여 획득된 상기 제4 최적화 조합을 상기 원본 함수 특성에 대한 상기 업데이트 함수 특성의 상기 변화율 값으로 반영하여 상기 제1 업데이트 함수에 대한 상기 제1 최적화 조합을 생성하는 단계를 포함하는 컴파일 방법. - 제6 항에 있어서, 상기 원본 함수 특성에 대한 상기 업데이트 함수 특성의 상기 변화율 값은 0과 1 사이의 값을 가지고,
상기 변화율 값이 0에 가까운 값을 가지는 경우, 상기 제1 최적화 조합에 상기 상응하는 원본 함수에 적용된 상기 제3 최적화 조합이 상대적으로 높은 비율로 반영되고,
상기 변화율 값이 1에 가까운 값을 가지는 경우, 상기 제1 최적화 조합에 상기 기계 학습의 결과를 이용하여 획득된 상기 제4 최적화 조합이 상대적으로 높은 비율로 반영되는 컴파일 방법. - 제6 항에 있어서, 상기 제3 최적화 조합 및 상기 제4 최적화 조합을 상기 변화율 값으로 반영하여 상기 제1 최적화 조합을 생성하는 단계는,
최적화 풀에 포함된 복수의 최적화 패스들 중 각 최적화 패스에 대하여 랜덤 값을 생성하여 상기 랜덤 값과 상기 변화율 값을 비교하는 단계;
상기 랜덤 값이 상기 변화율 값 초과인 경우, 상기 각 최적화 패스에 대하여 상기 상응하는 원본 함수에 적용된 상기 제3 최적화 조합을 반영하는 단계; 및
상기 랜덤 값이 상기 변화율 값 이하인 경우, 상기 각 최적화 패스에 대하여 상기 기계 학습의 결과를 이용하여 획득된 상기 제4 최적화 조합을 반영하는 단계를 포함하는 컴파일 방법. - 제8 항에 있어서, 상기 제3 최적화 조합 및 상기 제4 최적화 조합을 상기 변화율 값으로 반영하여 상기 제1 최적화 조합을 생성하는 단계는,
상기 제1 최적화 조합에 포함된 최적화 패스들에 대하여 반복 컴파일(iterative compilation)을 수행하여 상기 제1 최적화 조합에 포함된 상기 최적화 패스들의 적용 순서를 결정하는 단계를 더 포함하는 컴파일 방법. - 복수의 원본 함수들을 가지는 원본 프로그램으로부터 업데이트된 복수의 업데이트 함수들을 가지는 업데이트 프로그램의 컴파일 방법에 있어서,
상기 원본 프로그램의 상기 원본 함수들 각각에 대하여 반복 컴파일을 수행하여 상기 원본 함수들의 최적화 조합들을 포함하는 최적화 구성을 획득하는 단계;
구성 데이터베이스에 상기 최적화 구성을 저장하는 단계;
상기 업데이트 프로그램의 상기 업데이트 함수들 각각에 대하여 상기 원본 프로그램의 상기 원본 함수들 중 상기 업데이트 함수들 각각에 상응하는 원본 함수가 존재하는지 여부, 및 상기 업데이트 함수들 각각이 상기 상응하는 원본 함수로부터 변경되었는지 여부를 판단하는 단계;
상기 업데이트 함수들 중 상기 상응하는 원본 함수가 존재하고, 상기 상응하는 원본 함수로부터 변경되지 않은 업데이트 함수에 대하여 상기 구성 데이터베이스로부터 상기 최적화 구성에 포함된 상기 원본 함수들의 상기 최적화 조합들 중 상기 상응하는 원본 함수에 적용된 최적화 조합을 독출하는 단계; 및
상기 상응하는 원본 함수가 존재하고, 상기 상응하는 원본 함수로부터 변경되지 않은 상기 업데이트 함수에 대하여 상기 상응하는 원본 함수에 적용된 상기 최적화 조합을 이용하여 상기 업데이트 프로그램을 컴파일하는 단계를 포함하는 컴파일 방법.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170080764A KR102195103B1 (ko) | 2017-06-26 | 2017-06-26 | 프로그램 컴파일 방법 |
US15/867,168 US10372430B2 (en) | 2017-06-26 | 2018-01-10 | Method of compiling a program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170080764A KR102195103B1 (ko) | 2017-06-26 | 2017-06-26 | 프로그램 컴파일 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190001183A KR20190001183A (ko) | 2019-01-04 |
KR102195103B1 true KR102195103B1 (ko) | 2020-12-24 |
Family
ID=64693176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020170080764A KR102195103B1 (ko) | 2017-06-26 | 2017-06-26 | 프로그램 컴파일 방법 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10372430B2 (ko) |
KR (1) | KR102195103B1 (ko) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019000473A1 (zh) * | 2017-06-30 | 2019-01-03 | 广东欧珀移动通信有限公司 | 系数计算方法、组件调用方法、装置、介质、服务器及终端 |
US10922315B2 (en) | 2018-05-24 | 2021-02-16 | Sap Se | Unified optimization of iterative analytical query processing |
US11288046B2 (en) * | 2019-10-30 | 2022-03-29 | International Business Machines Corporation | Methods and systems for program optimization utilizing intelligent space exploration |
KR102490538B1 (ko) * | 2019-12-30 | 2023-01-19 | 주식회사 모레 | 강화 학습 기반의 프로그램 최적화 방법 |
WO2021137601A1 (ko) * | 2019-12-30 | 2021-07-08 | 매니코어소프트주식회사 | 강화 학습 기반의 프로그램 최적화 방법 |
US11593080B1 (en) * | 2021-12-17 | 2023-02-28 | International Business Machines Corporation | Eliminating dead stores |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002215428A (ja) | 2001-01-17 | 2002-08-02 | Nissin Electric Co Ltd | タスク監視装置、タスク監視方法及びこの方法を記録した記録媒体 |
JP2010123030A (ja) | 2008-11-21 | 2010-06-03 | Fujitsu Ltd | 更新関数検証プログラム,更新関数検証方法及び情報処理装置 |
JP5421757B2 (ja) | 2009-12-11 | 2014-02-19 | 株式会社Kddi研究所 | 画像符号化装置 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09198254A (ja) | 1996-01-17 | 1997-07-31 | Nec Ic Microcomput Syst Ltd | コンパイラの最適化装置及びその方法 |
US6535903B2 (en) * | 1996-01-29 | 2003-03-18 | Compaq Information Technologies Group, L.P. | Method and apparatus for maintaining translated routine stack in a binary translation environment |
JP3234552B2 (ja) * | 1997-09-30 | 2001-12-04 | 松下電器産業株式会社 | 最適化装置及びコンピュータ読取可能な記録媒体 |
US6978450B2 (en) * | 1999-01-15 | 2005-12-20 | Hewlett-Packard Development Company, L.P. | Method and system for optimizing compilation time of a program by selectively reusing object code |
US7000227B1 (en) | 2000-09-29 | 2006-02-14 | Intel Corporation | Iterative optimizing compiler |
US20020073406A1 (en) | 2000-12-12 | 2002-06-13 | Darryl Gove | Using performance counter profiling to drive compiler optimization |
US7519951B2 (en) | 2003-09-30 | 2009-04-14 | International Business Machines Corporation | Multi-attribute dynamic link library packaging |
US20060236310A1 (en) | 2005-04-19 | 2006-10-19 | Domeika Max J | Methods and apparatus to iteratively compile software to meet user-defined criteria |
US7954094B2 (en) * | 2006-03-27 | 2011-05-31 | International Business Machines Corporation | Method for improving performance of executable code |
US8370823B2 (en) * | 2007-08-27 | 2013-02-05 | International Business Machines Corporation | Device, system, and method of computer program optimization |
US20090193402A1 (en) | 2008-01-28 | 2009-07-30 | Guy Bashkansky | Iterative Compilation Supporting Entity Instance-Specific Compiler Option Variations |
EP2783280B1 (en) * | 2011-11-22 | 2019-09-11 | Intel Corporation | An accelerated code optimizer for a multiengine microprocessor |
JP2013235386A (ja) * | 2012-05-08 | 2013-11-21 | Internatl Business Mach Corp <Ibm> | 最適化装置、最適化方法、及び最適化プログラム |
US9256410B2 (en) * | 2012-08-09 | 2016-02-09 | Apple Inc. | Failure profiling for continued code optimization |
US9372678B2 (en) | 2013-06-14 | 2016-06-21 | Intel Corporation | Compiler optimization for complex exponential calculations |
US9720667B2 (en) | 2014-03-21 | 2017-08-01 | Intel Corporation | Automatic loop vectorization using hardware transactional memory |
US9348567B2 (en) * | 2014-07-03 | 2016-05-24 | Microsoft Technology Licensing, Llc. | Profile guided optimization in the presence of stale profile data |
US20160117154A1 (en) * | 2014-10-23 | 2016-04-28 | Telefonaktiebolaget L M Ericsson (Publ) | Automated software include graph and build environment analysis and optimization in compiled language |
US10191725B2 (en) * | 2015-12-15 | 2019-01-29 | Facebook, Inc. | Rearrangeable code optimization modules |
KR101832594B1 (ko) * | 2016-02-18 | 2018-02-26 | 라인 가부시키가이샤 | 중간 언어 파일의 로딩 속도 개선을 위한 방법 및 시스템 |
EP3208712B1 (en) * | 2016-02-22 | 2020-02-19 | Karlsruher Institut für Technologie | Computer system and method for parallel program code optimization and deployment |
AU2016228166A1 (en) * | 2016-09-13 | 2018-03-29 | Canon Kabushiki Kaisha | Visualisation for guided algorithm design to create hardware friendly algorithms |
US20180218276A1 (en) * | 2017-01-30 | 2018-08-02 | Bank Of America Corporation | Optimizing Application Performance Using Finite State Machine Model and Machine Learning |
-
2017
- 2017-06-26 KR KR1020170080764A patent/KR102195103B1/ko active IP Right Grant
-
2018
- 2018-01-10 US US15/867,168 patent/US10372430B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002215428A (ja) | 2001-01-17 | 2002-08-02 | Nissin Electric Co Ltd | タスク監視装置、タスク監視方法及びこの方法を記録した記録媒体 |
JP2010123030A (ja) | 2008-11-21 | 2010-06-03 | Fujitsu Ltd | 更新関数検証プログラム,更新関数検証方法及び情報処理装置 |
JP5421757B2 (ja) | 2009-12-11 | 2014-02-19 | 株式会社Kddi研究所 | 画像符号化装置 |
Also Published As
Publication number | Publication date |
---|---|
US20180373510A1 (en) | 2018-12-27 |
KR20190001183A (ko) | 2019-01-04 |
US10372430B2 (en) | 2019-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102195103B1 (ko) | 프로그램 컴파일 방법 | |
US11604796B2 (en) | Unified optimization of iterative analytical query processing | |
US10268454B2 (en) | Methods and apparatus to eliminate partial-redundant vector loads | |
US9779158B2 (en) | Method, apparatus, and computer-readable medium for optimized data subsetting | |
US9229697B2 (en) | Speculative object shapes | |
CN113641701B (zh) | 一种数据查询方法、系统、异构加速平台及存储介质 | |
US20140306964A1 (en) | Incremental compiling of a declarative program | |
US20190220387A1 (en) | Unexplored branch search in hybrid fuzz testing of software binaries | |
Gurfinkel et al. | A context-sensitive memory model for verification of C/C++ programs | |
US20110145799A1 (en) | Path-sensitive dataflow analysis including path refinement | |
US10268461B2 (en) | Global data flow optimization for machine learning programs | |
CN113468204A (zh) | 一种数据查询方法、装置、设备、介质 | |
JP6651974B2 (ja) | 情報処理装置、コンパイル方法及びコンパイラプログラム | |
CN111563363B (zh) | 一种超文本标记语言文档内容生成及解析方法 | |
US11568320B2 (en) | Handling system-characteristics drift in machine learning applications | |
US20170115973A1 (en) | Operating method of semiconductor device and semiconductor system | |
US9519567B2 (en) | Device, method of generating performance evaluation program, and recording medium | |
US9754047B2 (en) | Dynamically adapting objects | |
JP2019144873A (ja) | ブロック線図解析装置 | |
US20230176851A1 (en) | Computer-readable recording medium storing conversion program and conversion method | |
Baziotis et al. | Dias: Dynamic Rewriting of Pandas Code | |
Kaftan | Talpidae: Tuning Library Calls in the Dark | |
CN118409756A (zh) | 深度学习模型的编译方法、装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |