KR101636521B1 - 코드 오버레이 생성 장치 및 방법 - Google Patents

코드 오버레이 생성 장치 및 방법 Download PDF

Info

Publication number
KR101636521B1
KR101636521B1 KR1020100027515A KR20100027515A KR101636521B1 KR 101636521 B1 KR101636521 B1 KR 101636521B1 KR 1020100027515 A KR1020100027515 A KR 1020100027515A KR 20100027515 A KR20100027515 A KR 20100027515A KR 101636521 B1 KR101636521 B1 KR 101636521B1
Authority
KR
South Korea
Prior art keywords
function
graph
area
collision
functions
Prior art date
Application number
KR1020100027515A
Other languages
English (en)
Other versions
KR20110108166A (ko
Inventor
장춘기
이재진
류수정
이강웅
조영철
Original Assignee
삼성전자주식회사
서울대학교산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사, 서울대학교산학협력단 filed Critical 삼성전자주식회사
Priority to KR1020100027515A priority Critical patent/KR101636521B1/ko
Priority to US13/045,576 priority patent/US8984475B2/en
Publication of KR20110108166A publication Critical patent/KR20110108166A/ko
Application granted granted Critical
Publication of KR101636521B1 publication Critical patent/KR101636521B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

메모리 복사 횟수를 최소화하는 코드 오버레이 생성 장치 및 방법이 제공된다. 본 발명의 일 양상에 따라, 프로그램 내의 함수들을 그래프의 노드에 대응시키고, 함수 간의 충돌 미스(conflict miss)가 발생할 수 있는 횟수 중 최대치로 정의되는 충돌 미스 값을 상기 그래프의 에지에 대응시켜서 정적 시간 관계 그래프를 생성한다. 그리고 정적 시간 관계 그래프에서 적어도 하나의 함수를 선택하고, 선택된 함수가 할당되었을 때의 메모리의 영역 별 할당 코스트를 계산하고, 선택된 함수를 가장 작은 할당 코스트를 갖는 영역에 할당한다.

Description

코드 오버레이 생성 장치 및 방법{Apparatus and Method for generating code overlay}
사용 가능한 메모리보다 큰 프로그램을 동작시키기 위한 코드 오버레이 기술과 관련된다.
대부분의 컴퓨팅 장치에는 프로그램이 저장되는 스토리지(storage)와 저장된 프로그램을 실행하기 위해 프로그램이 로딩되는 메모리(memory)가 구비된다. 예를 들어, 휴대폰과 같은 임베디드 시스템의 경우, NAND 플래시 메모리를 활용한 스토리지에 부트 스트랩 코드와 같은 펌 웨어가 저장되어 있고 시스템이 부팅되면 저장된 펌 웨어가 SRAM과 같은 메모리로 복사되어 구동된다.
그런데 다양한 기능 추가로 인해 프로그램의 크기는 점차 늘어나는 반면 메모리의 크기는 고정되어 있기 때문에 메모리의 크기보다 큰 프로그램을 구동시켜야 할 경우가 종종 발생한다.
메모리의 크기보다 큰 프로그램을 구동시키기 위해서는 메모리의 크기를 증가시키는 방법도 있으나 추가되는 메모리 없이도 프로그램을 구동시킬 수 있는 기술이 있는데 그것이 코드 오버레이 기술이다.
이러한 코드 오버레이 기술에 따르면, 프로그램 내의 상이한 코드 블록을 동일한 메모리 영역에 배치해서 사용하기 때문에 메모리의 크기보다 큰 프로그램을 구동하는 것이 가능하다.
그러나 서로 다른 코드 블록이 동일한 메모리 영역을 사용하기 때문에 프로그램 구동 중에 메모리 복사가 여러 번 이루어질 수 있다. 이러한 메모리 복사가 많아질수록 시스템의 성능은 감소하게 된다.
메모리 복사 횟수를 최소화하는 코드 오버레이 생성 장치 및 방법이 제공된다.
본 발명의 일 양상에 따른 코드 오버레이 생성 장치는 프로그램 내의 함수들을 그래프의 노드에 대응시키고, 함수 간의 충돌 미스(conflict miss)가 발생할 수 있는 횟수 중 최대치로 정의되는 충돌 미스 값을 그래프의 에지에 대응시켜 정적 시간 관계 그래프를 생성하는 그래프 생성부 및 정적 시간 관계 그래프에서 적어도 하나의 함수를 선택하고, 선택된 함수가 할당되었을 때의 메모리의 영역 별 할당 코스트를 계산하고, 선택된 함수를 가장 작은 할당 코스트를 갖는 영역에 할당하는 오버레이 생성부를 포함한다.
본 발명의 일 양상에 따른 코드 오버레이 생성 방법은 프로그램 내의 함수들을 그래프의 노드에 대응시키고, 함수 간의 충돌 미스(conflict miss)가 발생할 수 있는 횟수 중 최대치로 정의되는 충돌 미스 값을 상기 그래프의 에지에 대응시켜 정적 시간 관계 그래프를 생성하는 그래프 생성 단계 및 정적 시간 관계 그래프에서 적어도 하나의 함수를 선택하고, 선택된 함수가 할당되었을 때의 메모리의 영역 별 할당 코스트를 계산하고, 선택된 함수를 가장 작은 할당 코스트를 갖는 영역에 할당하는 오버레이 생성 단계를 포함한다.
개시된 내용에 따르면, 메모리 복사 횟수를 고려하여 정적 시간 관계 그래프(STRG) 및 할당 코스트를 얻고, 얻어진 정적 시간 관계 그래프(STRG) 및 할당 코스트에 기초하여 오버레이 구조를 생성하기 때문에 오버레이 구조에 따른 메모리 복사 횟수를 줄일 수 있고 상대적으로 메모리의 크기가 작더라도 더 높은 성능을 낼 수 있다.
도 1은 본 발명의 일 실시예에 따른 코드 오버레이 생성 장치를 도시한다.
도 2a 내지 도 2f는 본 발명의 일 실시예에 따른 정적 시간 관계 그래프(STRG) 생성 방법을 도시한다.
도 3a 내지 도 3f는 본 발명의 일 실시예에 따른 함수의 할당 위치 결정 방법을 도시한다.
도 4는 본 발명의 일 실시예에 따른 코드 오버레이 생성 방법을 도시한다.
이하, 첨부된 도면을 참조하여 본 발명의 실시를 위한 구체적인 예를 상세히 설명한다.
도 1은 본 발명의 일 실시예에 따른 코드 오버레이 생성 장치를 도시한다.
도 1에서, 코드 오버레이 생성 장치(100)는 그래프 생성부(101) 및 오버레이 생성부(102)를 포함한다. 코드 오버레이 생성 장치(100)는 하나 이상의 오브젝트 파일을 합쳐서 실행 가능한 바이너리 파일을 만드는 링커(linker)의 일부 구성이 될 수 있다.
도 1을 참조하면, 그래프 생성부(101)는 소정의 정적 시간 관계 그래프(static temporal relationship graph, STRG)를 생성한다. 정적 시간 관계 그래프(STRG)는 본 실시예에 따라 정의된 그래프로, 그래프의 노드(node)에는 프로그램 내의 함수(또는 코드 블록)가 대응되고, 노드 간 에지(edge)에는 충돌 미스 값(conflict miss value)이 대응된 그래프를 말한다. 충돌 미스란 서로 다른 함수가 메모리의 동일한 영역에 할당되고 이 중 어느 하나의 함수가 호출되는 시점에 다른 함수가 그 영역을 점유하고 있는 상태 또는 그러한 상태에 따라 발생되는 메모리 복사를 의미하며, 충돌 미스 값은 이러한 충돌 미스가 발생할 수 있는 횟수 중 최대치로 정의된다. 예컨대, 도 2f를 참조하면, 노드 A는 함수 A를 나타내고 노드 B는 함수 B를 나타낼 수 있다. 그리고 노드 A와 노드 B 사이의 에지 2c-1은 함수 A와 함수 B 간의 충돌 미스가 발생할 수 있는 예상 횟수 중 최대값인 충돌 미스 값을 나타낸다. 여기서 c는 상수로 주어진다. 그래프 생성부(101)가 어떻게 도 2f와 같은 정적 시간 관계 그래프(STRG)를 생성하는지에 대한 구체적인 내용은 후술한다.
오버레이 생성부(102)는 충돌 미스의 횟수가 감소되도록 하는 오버레이 구조(overlay structure)를 생성하기 위해 프로그램 내의 함수를 메모리의 적절한 위치에 할당한다. 예를 들어, 오버레이 생성부(102)는 정적 시간 관계 그래프(STRG)에서 적어도 하나의 함수를 선택하고, 선택된 함수가 할당되었을 때의 메모리의 영역 별 할당 코스트를 계산하고, 선택된 함수를 가장 작은 할당 코스트를 갖는 영역에 할당할 수 있다. 영역 별 할당 코스트는 본 실시예에 따라 정의된 코스트로, 어떤 함수가 메모리의 특정 영역에 할당되었을 때의 로딩 코스트(loading cost)와 체크 코스트(checking cost)의 가중치 합으로 정의될 수 있다. 로딩 코스트는 어떤 함수를 해당 영역으로 로드하는데 필요한 코스트를 말하고, 체크 코스트는 어떤 함수를 호출할 때 그 함수가 해당 영역에 존재하는지 여부를 파악하는데 필요한 코스트를 말한다. 오버레이 생성부(102)가 어떻게 영역 별 할당 코스트를 계산하고 함수의 할당 위치를 결정하는지에 대한 구체적인 내용은 후술한다.
또한 오버레이 생성부(102)는 특정 함수가 메모리에 할당되면 정적 시간 관계 그래프(STRG)를 갱신한다. 예컨대, 오버레이 생성부(102)는 정적 시간 관계 그래프(STRG)에서 할당 위치가 결정된 함수에 대응되는 노드를 다른 노드와 병합하고 충돌 미스 값을 수정하는 것이 가능하다.
도 2a 내지 도 2f는 본 발명의 일 실시예에 따른 정적 시간 관계 그래프(STRG)를 생성하는 방법을 도시한다. 이것은 그래프 생성부(101)가 본 실시예에 따른 정적 시간 관계 그래프(STRG)를 생성하는 방법에 관한 일 예가 될 수 있다.
먼저, 도 2a를 참조하여 정적 시간 관계 그래프의 노드를 결정하는 방법을 설명한다.
도 2a에서, 그래프 생성부(101)는 프로그램에 관한 오브젝트 파일을 분석해서 프로그램 내의 함수들의 호출 관계를 나타내는 호출 그래프(call graph, CG)(201)를 생성한다. 호출 그래프(CG)(201)의 각 노드는 함수 및 그 함수의 크기를 나타내고 각 노드 간 화살표는 함수 간 호출 관계를 나타낸다. 예컨대, 호출 그래프(CG)(201)에서 함수 M은 함수 A, 함수 B 및 함수 E를 호출하며 그 크기는 3과 같다.
호출 그래프(CG)(201)가 만들어지면, 그래프 생성부(101)는 호출 그래프(CG)(201)를 변환하여 방향성 비순환 그래프(directed acyclic graph, DAG)(202)를 생성한다. 예컨대, 그래프 생성부(101)는 호출 그래프(CG)(201)에서 함수 C 및 함수 D와 같은 SCC(strongly connected component) 및 SCC에 의해 호출되는 함수 F를 하나의 노드로 병합해서 방향성 비순환 그래프(DAG)(202)을 생성할 수 있다.
방향성 비순환 그래프(DAG)(202)가 만들어지면, 그래프 생성부(101)는 방향성 비순환 그래프(DAG)(202)의 각 노드들, 즉 함수 M, 함수 A, 함수 B, 함수 E 및 함수 CDF를 정적 시간 관계 그래프(STRG)(203)의 각 노드들로 결정한다.
다음으로, 도 2b 내지 도 2f를 참조하여 정적 시간 관계 그래프의 에지를 결정하는 방법을 설명한다.
도 2b에서, 그래프 생성부(101)는 정적 시간 관계 그래프(STRG)(203)의 각 노드로 정해진 함수들의 경로 표현식(path expression)(204)을 획득한다. 경로 표현식(204)이란 어떤 함수의 제어 흐름 그래프(control flow graph, CFG)(205) 상의 엔트리(entry)부터 엑시트(exit)까지 가는 모든 경로(path)를 정규 표현식(regular expression)으로 나타낸 것을 말한다. 이 때 어떤 함수 f의 경로 표현식은 Pf와 같이 나타낼 수 있다. 예를 들어, 함수 M의 경로 표현식 PM은 함수 M의 제어 흐름 그래프(CFG)(205)에 기초하여 (M·A·M·((M·B·M)|ε))*M·E·M과 같이 나타낼 수 있다. 이와 같이 그래프 생성부(102)는 정적 시간 관계 그래프(STRG)(203)의 각 노드로 정해진 함수들 각각을 제어 흐름 그래프(CFG)(205)로 나타내고, 각각의 제어 흐름 그래프(CFG)에 Tarjan 알고리즘을 적용해서 경로 표현식(204)을 획득하는 것이 가능하다.
그리고 도 2c에서, 그래프 생성부(102)는 각 함수의 경로 표현식을 이용하여 함수 간 경로 표현식을 획득한다. 어떤 함수 간 경로 표현식 Px,y는 전체 프로그램의 엔트리 함수에 대한 경로 표현식에서 함수 X와 함수 Y가 아닌 다른 함수에 대한 호출을 제거한 경로 표현식을 말한다. 예컨대, 함수 M이 엔트리 함수이고 함수 A와 함수 B 간의 함수 간 경로 표현식 PA,B를 구하는 경우, 그래프 생성부(102)는 엔트리 함수인 함수 M의 경로 표현식 PM에서 함수 A 및 함수 B를 none 함수인 ε으로 치환해서 (A·(B|ε))*와 같은 경로 표현식을 획득하는 것이 가능하다. 그래프 생성부(102)는 전체 프로그램을 대상으로, 즉 정적 시간 관계 그래프(STRG)(202)의 모든 노드 간 경로 표현식을 위와 같은 방식으로 구할 수 있다.
그리고 도 2d에서, 그래프 생성부(102)는 함수 간 경로 표현식에 미리 정의된 규칙을 적용해서 충돌 미스 값을 계산한다. 예를 들어, 함수 A와 함수 B 간의 함수 간 경로 표현식 PA,B에 대해 살펴본다. 그래프 생성부(102)는 경로 표현식 PA,B를 제 1 구문 트리(syntax tree)(206)로 표현하고, 제 1 구문 트리(206)에 정의된 규칙(207)를 적용해서 제 2 구문 트리(208)를 생성한다. 정의된 규칙(207)의 구체적인 예는 도 2e와 같다.
도 2e에서, nullable는 구문 트리의 하나의 노드 n에서 표현될 수 있는 모든 문자열 중에 공백이 포함되는지 여부를 나타내고, firstpos는 구문 트리의 하나의 노드 n에 의하여 표현될 수 있는 모든 문자열 중에서 가장 앞에 나올 수 있는 글자들의 집합을 의미하고, lastpos는 구문 트리의 하나의 노드 n에 의하여 표현될 수 있는 모든 문자열 중에서 가장 뒤에 나올 수 있는 글자들의 집합을 의미하고, wcnc는 충돌 미스 값을 나타내고, c는 발생되는 루프의 반복 회수와 관련된 상수를 나타낸다.
도 2d 및 도 2e를 참조하면, 제 2 구문 트리(208)의 말단 leaf의 wcnc는 규칙 1(208)에 의해 모두 0임을 알 수 있다. 따라서 B|ε의 wcnc는 규칙 2(209)에 의해 0이 된다. 그리고 A·(B|ε)의 wcnc는 규칙 3(210)에 의해 1이 되고, (A·(B|ε))*의 wcnc는 규칙 4(211)에 의해 2c-1이 됨을 알 수 있다.
이와 같은 방법으로 나머지 함수 간 경로 표현식에 대해 충돌 미스 값을 계산하고 계산된 충돌 미스 값을 정적 시간 관계 그래프(STRG)(202)의 각 에지에 대응시키면 도 2f와 같다. 예컨대, 도 2f에서, 함수 M과 함수 A가 동일한 메모리 영역에 할당됨으로 인해 발생할 수 있는 충돌 미스의 횟수의 최대 값, 즉 충돌 미스 값이 2c임을 알 수 있다.
도 3a 내지 도 3f는 본 발명의 일 실시예에 따른 함수의 할당 위치 결정 방법을 도시한다. 이것은 오버레이 생성부(102)가 충돌 미스를 줄이기 위해 오버레이 구조를 생성하는 방법에 관한 일 예가 될 수 있다.
도 3a에서, 오버레이 생성부(102)는 정적 시간 관계 그래프(STRG)(301)에서 가장 큰 2c3+1의 충돌 미스 값을 갖는 함수 B와 함수 E를 선택한다. 그리고 오버레이 생성부(102)는 함수 B와 함수 E를 메모리(310)의 특정 영역에 할당할 때의 영역 별 할당 코스트를 계산하고, 그 할당 코스트가 가장 적은 영역에 함수 B와 함수 E를 할당한다. 메모리(310)에 할당 여유 공간이 있는 경우 여유 공간 에서의 영역 별 할당 코스트는 모두 동일하다. 따라서 오버레이 생성부(102)는 선택된 함수 B 및 함수 E를 메모리(310)의 빈 공간에 차례대로 할당한다. 함수 B와 함수 E의 할당 위치가 결정되고 할당이 완료되면 오버레이 생성부(102)는 선택된 함수 B와 함수 E에 대응되는 노드를 병합하고 충돌 미스 값을 수정해서 처음의 정적 시간 관계 그래프(STRG)(301)를 갱신된 정적 시간 관계 그래프(STRG)(302)로 변환한다.
도 3a와 마찬가지로, 도 3b 및 도 3c에서, 오버레이 생성부(102)는 가장 큰 충돌 미스 값을 갖는 함수를 선택하고, 선택된 함수를 할당할 때의 영역 별 할당 코스트를 계산한 후, 그 할당 코스트가 가장 적은 영역에 선택된 함수를 할당하고 정적 시간 관계 그래프(STRG)를 갱신한다. 도 3b 및 도 3c의 경우, 메모리(310)에 할당 여유 공간이 있기 때문에 여유 공간에 대한 영역 별 할당 코스트가 동일하고 다른 함수가 할당된 공간에 대한 할당 코스트보다 작기 때문에 선택된 함수가 여유 공간에 순차적으로 채워진 것을 알 수 있다.
도 3d에서, 오버레이 생성부(102)는 할당될 함수로 함수 A를 선택한다. 그리고 함수 A가 메모리(310)에 할당될 때의 영역 별 할당 코스트를 계산한다. 예컨대, 함수 A의 크기가 "5"라면 "5"크기에 해당하는 메모리 영역의 제 1 위치(311), 제 2 위치(312), 제 3 위치(313) 및 제 n 위치(314) 별로 할당 코스트를 계산한다.
각 영역 별 할당 코스트는 도 3e와 같이 계산할 수 있다.
도 3e를 참조하면, 할당 코스트는 식 1과 같이 로딩 코스트(321)와 체크 코스트(322)의 가중치 합으로 정의될 수 있다.
로딩 코스트(321)는 어떤 함수 x를 로드하는데 발생하는 코스트로 식 2와 같다. 식 2에서, WCNC(x, y)는 함수 x와 함수 y 간의 충돌 미스 값을 나타내고, S는 두 함수 x와 y가 겹쳐진 만큼의 크기를 나타낸다. 그리고 F는 함수 x와 같은 메모리 영역을 공유하는 함수들의 집합을 의미한다.
체크 코스트(322)는 어떤 함수 x를 호출할 때 함수 x가 메모리 상에 존재하는지 여부를 파악하는데 발생하는 코스트로 식 3과 같다. 식 3에서, WCNI(x)는 함수 x가 프로그램 실행 도중 가장 많이 호출될 수 있는 횟수를 나타내고, G는 함수 x와 같은 메모리를 공휴하는 함수들의 집합을 의미한다.
식 3에서, WCNI 값은 전체 프로그램의 경로 표현식의 구문 트리에 도 2e와 유사한 규칙을 적용해서 구할 수 있으며, WCNI를 구하기 위해 적용되는 규칙은 도 3f와 같다.
즉, 도 3d 내지 도 3f를 참조하면, 오버레이 생성부(102)는 메모리(310) 공간 부족에 따라 함수 A를 오버레이 구조로 배치하게 되는데, 이 때 오버레이 생성부(102)는 메모리 영역의 제 1 위치(311), 제 2 위치(312), 제 3 위치(313) 및 제 n 위치(314) 별로 도 3e와 같은 할당 코스트를 계산하고, 가장 작은 할당 코스트를 갖는 위치에 함수 A를 할당할 수 있다. 그리고 할당 코스트를 계산하기 위해 필요한 함수의 최대 호출 수는 도 3f와 같은 규칙을 경로 표현식에 적용해서 구할 수가 있다.
도 4는 본 발명의 일 실시예에 따른 코드 오버레이 생성 방법을 도시한다.
도 1 및 도 4를 참조하면, 코드 오버레이 생성 장치(100)는 오브젝트 파일을 분석해서 정적 시간 관계 그래프(STRG)를 생성한다(401). 예를 들어, 그래프 생성부(101)가, 도 2a 내지 도 2f와 같이, 프로그램 내의 함수들의 호출 관계를 나타내는 호출 그래프(call graph)를 방향성 비순환 그래프(directed acyclic graph, DAG)로 변환하여 노드를 결정하고, 프로그램 내의 함수들의 제어 흐름을 나타내는 제어 흐름 그래프(control flow graph) 상의 실행 경로를 정규 표현식(regular expression)으로 나타낸 경로 표현식(path expression)에 따라 함수 간 충돌 미스 값을 계산해서 에지를 결정하는 것이 가능하다.
그리고 코드 오버레이 생성 장치(100)는 생성된 정적 시간 관계 그래프(STRG) 및 메모리의 영역 별 할당 코스트에 따라 함수를 메모리의 특정 위치에 할당한다(402). 예컨대, 오버레이 생성부(102)가, 도 3a 내지 도 3f와 같이, 충돌 미스 값에 따라 할당될 함수를 선택하고, 충돌 미스 값 및 최대 호출 값에 따라 그 함수가 할당될 때의 영역 별 할당 코스트를 계산한 후, 가장 작은 할당 코스트를 갖는 위치에 함수가 할당되도록 할당 위치를 결정하고, 정적 시간 관계 그래프(STRG)를 갱신하는 것이 가능하다.
이와 같이 코드 오버레이 생성 장치(100)는 충돌 미스의 횟수가 고려된 정적 시간 관계 그래프(STRG) 및 할당 코스트에 기초하여 오버레이 구조를 생성하기 때문에 충돌 미스의 발생 횟수를 줄일 수 있고 상대적으로 메모리의 크기가 작더라도 더 높은 성능을 낼 수 있다.
한편, 본 발명의 실시 예들은 컴퓨터로 읽을 수 있는 기록 매체에 컴퓨터가 읽을 수 있는 코드로 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록 매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다.
컴퓨터가 읽을 수 있는 기록 매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현하는 것을 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다. 그리고 본 발명을 구현하기 위한 기능적인(functional) 프로그램, 코드 및 코드 세그먼트들은 본 발명이 속하는 기술 분야의 프로그래머들에 의하여 용이하게 추론될 수 있다.
이상에서 본 발명의 실시를 위한 구체적인 예를 살펴보았다. 전술한 실시 예들은 본 발명을 예시적으로 설명하기 위한 것으로 본 발명의 권리범위가 특정 실시 예에 한정되지 아니할 것이다.

Claims (15)

  1. 프로그램 내의 함수들을 그래프의 노드에 대응시키고, 함수 간의 충돌 미스(conflict miss)가 발생할 수 있는 횟수 중 최대치로 정의되는 충돌 미스 값을 상기 그래프의 에지에 대응시켜 정적 시간 관계 그래프를 생성하는 그래프 생성부; 및
    상기 정적 시간 관계 그래프에서 적어도 하나의 함수를 선택하고, 선택된 함수가 할당되었을 때의 메모리의 영역 별 할당 코스트를 계산하고, 선택된 함수를 가장 작은 할당 코스트를 갖는 영역에 할당하고, 상기 선택된 함수에 대응되는 노드를 병합하고 충돌 미스 값을 수정하여 상기 정적 시간 관계 그래프를 갱신하는 오버레이 생성부; 를 포함하는 코드 오버레이 생성 장치.
  2. 제 1 항에 있어서, 상기 그래프 생성부는
    상기 프로그램 내의 함수들의 호출 관계를 나타내는 호출 그래프(call graph)를 생성하고, 생성된 호출 그래프를 방향성 비순환 그래프(directed acyclic graph, DAG)로 변환하는 코드 오버레이 생성 장치.
  3. 제 1 항에 있어서, 상기 그래프 생성부는
    상기 프로그램 내의 함수들의 제어 흐름을 나타내는 제어 흐름 그래프(control flow graph)를 생성하고, 생성된 제어 흐름 그래프 상의 실행 경로를 정규 표현식(regular expression)으로 나타낸 경로 표현식(path expression)을 생성하고, 생성된 경로 표현식에 정의된 규칙을 적용하여 상기 충돌 미스 값을 계산하는 코드 오버레이 생성 장치.
  4. 제 1 항에 있어서, 상기 오버레이 생성부는
    상기 정적 시간 관계 그래프에서 상기 충돌 미스 값이 상대적으로 큰 에지의 양 노드에 대응된 함수를 우선적으로 선택하는 코드 오버레이 생성 장치.
  5. 제 1 항에 있어서, 상기 오버레이 생성부는
    상기 충돌 미스 값 및 상기 함수의 호출 횟수의 예상 값 중 최대치 중 적어도 하나를 이용하여 상기 영역 별 할당 코스트를 계산하는 코드 오버레이 생성 장치.
  6. 제 5 항에 있어서, 상기 영역 별 할당 코스트는
    상기 함수를 해당 영역으로 로드하는데 필요한 로딩 코스트(loading cost) 및 상기 함수를 호출할 때 그 함수가 해당 영역에 존재하는지 여부를 파악하는데 필요한 체크 코스트(checking cost) 중 적어도 하나를 포함하는 코드 오버레이 생성 장치.
  7. 삭제
  8. 제 1 항에 있어서, 상기 충돌 미스는
    서로 다른 함수가 메모리의 실질적으로 동일한 영역에 할당되고 이 중 어느 하나의 함수가 호출되는 시점에 다른 함수가 그 영역을 점유하고 있는 경우에 발생되는 코드 오버레이 생성 장치.
  9. 프로그램 내의 함수들을 그래프의 노드에 대응시키고, 함수 간의 충돌 미스(conflict miss)가 발생할 수 있는 횟수 중 최대치로 정의되는 충돌 미스 값을 상기 그래프의 에지에 대응시켜 정적 시간 관계 그래프를 생성하는 그래프 생성 단계;
    상기 정적 시간 관계 그래프에서 적어도 하나의 함수를 선택하고, 선택된 함수가 할당되었을 때의 메모리의 영역 별 할당 코스트를 계산하고, 선택된 함수를 가장 작은 할당 코스트를 갖는 영역에 할당하는 오버레이 생성 단계; 및
    상기 선택된 함수에 대응되는 노드를 병합하고 충돌 미스 값을 수정하여 상기 정적 시간 관계 그래프를 갱신하는 단계; 를 포함하는 코드 오버레이 생성 방법.
  10. 제 9 항에 있어서, 상기 그래프 생성 단계는
    상기 프로그램 내의 함수들의 호출 관계를 나타내는 호출 그래프(call graph)를 생성하고, 생성된 호출 그래프를 방향성 비순환 그래프(directed acyclic graph, DAG)로 변환하는 과정을 포함하는 코드 오버레이 생성 방법.
  11. 제 9 항에 있어서, 상기 그래프 생성 단계는
    상기 프로그램 내의 함수들의 제어 흐름을 나타내는 제어 흐름 그래프(control flow graph)를 생성하고, 생성된 제어 흐름 그래프 상의 실행 경로를 정규 표현식(regular expression)으로 나타낸 경로 표현식(path expression)을 생성하고, 생성된 경로 표현식에 정의된 규칙을 적용하여 상기 충돌 미스 값을 계산하는 과정을 포함하는 코드 오버레이 생성 방법.
  12. 제 9 항에 있어서, 상기 오버레이 생성 단계는
    상기 정적 시간 관계 그래프에서 상기 충돌 미스 값이 상대적으로 큰 에지의 양 노드에 대응된 함수를 우선적으로 선택하는 과정을 포함하는 코드 오버레이 생성 방법.
  13. 제 9 항에 있어서, 상기 오버레이 생성 단계는
    상기 충돌 미스 값 및 상기 함수의 호출 횟수의 예상 값 중 최대치 중 적어도 하나를 이용하여 상기 영역 별 할당 코스트를 계산하는 과정을 포함하는 코드 오버레이 생성 방법.
  14. 제 13 항에 있어서, 상기 영역 별 할당 코스트는
    상기 함수를 해당 영역으로 로드하는데 필요한 로딩 코스트(loading cost) 및 상기 함수를 호출할 때 그 함수가 해당 영역에 존재하는지 여부를 파악하는데 필요한 체크 코스트(checking cost) 중 적어도 하나를 포함하는 코드 오버레이 생성 방법.
  15. 삭제
KR1020100027515A 2010-03-26 2010-03-26 코드 오버레이 생성 장치 및 방법 KR101636521B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020100027515A KR101636521B1 (ko) 2010-03-26 2010-03-26 코드 오버레이 생성 장치 및 방법
US13/045,576 US8984475B2 (en) 2010-03-26 2011-03-11 Apparatus and method for generating code overlay

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020100027515A KR101636521B1 (ko) 2010-03-26 2010-03-26 코드 오버레이 생성 장치 및 방법

Publications (2)

Publication Number Publication Date
KR20110108166A KR20110108166A (ko) 2011-10-05
KR101636521B1 true KR101636521B1 (ko) 2016-07-06

Family

ID=44657670

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100027515A KR101636521B1 (ko) 2010-03-26 2010-03-26 코드 오버레이 생성 장치 및 방법

Country Status (2)

Country Link
US (1) US8984475B2 (ko)
KR (1) KR101636521B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9250876B2 (en) * 2013-08-27 2016-02-02 International Business Machines Corporation Building reusable function summaries for frequently visited methods to optimize data-flow analysis
US11915056B2 (en) * 2020-10-15 2024-02-27 Nec Corporation Combination of multiple data processing and machine learning frameworks for a target hardware
US11288044B1 (en) * 2021-05-20 2022-03-29 WhiteSource Ltd. System and method for interprocedural analysis
US20230266950A1 (en) * 2022-02-18 2023-08-24 Huawei Technologies Co., Ltd. Methods and devices for compiler function fusion

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5175830A (en) 1989-06-16 1992-12-29 International Business Machines Corporation Method for executing overlays in an expanded memory data processing system
JP3417984B2 (ja) * 1993-09-10 2003-06-16 株式会社日立製作所 キャッシュ競合削減コンパイル方法
US6064819A (en) * 1993-12-08 2000-05-16 Imec Control flow and memory management optimization
US6578123B1 (en) 1995-04-14 2003-06-10 Texas Instruments Incorporated Relocatable overland peripheral paging
CA2166254C (en) * 1995-12-28 2000-02-01 Robert James Blainey Improving memory layout based on connectivity considerations
US5889999A (en) * 1996-05-15 1999-03-30 Motorola, Inc. Method and apparatus for sequencing computer instruction execution in a data processing system
US6070009A (en) * 1997-11-26 2000-05-30 Digital Equipment Corporation Method for estimating execution rates of program execution paths
US6438672B1 (en) 1999-06-03 2002-08-20 Agere Systems Guardian Corp. Memory aliasing method and apparatus
US7197600B2 (en) * 2001-02-16 2007-03-27 Broadcom Corporation Transferring data along with code for program overlays
US7028294B2 (en) 2001-06-08 2006-04-11 Texas Instruments Incorporated Linking of applications into devices having overlays and shadow memories
US7062761B2 (en) 2001-07-10 2006-06-13 Micron Technology, Inc. Dynamic arrays and overlays with bounds policies
JP3764405B2 (ja) 2002-05-27 2006-04-05 株式会社東芝 デバッグ装置及びデバッグ方法
US7222332B2 (en) 2002-10-24 2007-05-22 International Business Machines Corporation Method and apparatus for overlay management within an integrated executable for a heterogeneous architecture
US7389501B1 (en) * 2003-02-18 2008-06-17 Microsoft Corporation System and method for register allocation using SSA construction
US7590521B2 (en) * 2004-04-07 2009-09-15 Microsoft Corporation Method and system for probe optimization while instrumenting a program
US7765534B2 (en) * 2004-04-30 2010-07-27 International Business Machines Corporation Compiler with cache utilization optimizations
US7581213B2 (en) * 2004-06-25 2009-08-25 Intel Corporation Allocating automatic variables to different memory banks
US7478376B2 (en) * 2004-12-02 2009-01-13 International Business Machines Corporation Computer program code size partitioning method for multiple memory multi-processing systems
DE602005024399D1 (de) * 2005-08-30 2010-12-09 Sony Ericsson Mobile Comm Ab Verfahren und Software für die Optimierung der Positionierung von Software-Funktionen in einem Speicher
KR100745256B1 (ko) 2005-10-11 2007-08-01 엘지전자 주식회사 임베디드 시스템에서의 코드 오버레이 방법
CN100492301C (zh) * 2005-12-23 2009-05-27 国际商业机器公司 避免软件冲突的方法和系统
JP2007293383A (ja) * 2006-04-20 2007-11-08 Toshiba Corp プログラム開発支援装置及びプログラム開発支援装置の動作方法
US8429634B2 (en) * 2006-07-26 2013-04-23 Semiconductor Energy Laboratory Co., Ltd. Semiconductor device, memory circuit, and machine language program generation device, and method for operating semiconductor device and memory circuit
US8533663B2 (en) * 2008-05-12 2013-09-10 Oracle America, Inc. System and method for utilizing available best effort hardware mechanisms for supporting transactional memory
US8060857B2 (en) * 2009-01-31 2011-11-15 Ted J. Biggerstaff Automated partitioning of a computation for parallel or other high capability architecture
US8434074B2 (en) * 2010-02-24 2013-04-30 Intel Corporation Register allocation with SIMD architecture using write masks

Also Published As

Publication number Publication date
US20110238945A1 (en) 2011-09-29
US8984475B2 (en) 2015-03-17
KR20110108166A (ko) 2011-10-05

Similar Documents

Publication Publication Date Title
EP3204849B1 (en) Systems and methods to update source code files
US8495598B2 (en) Control flow graph operating system configuration
CN107111505B (zh) 用于在并行异构系统上执行算法的系统和方法
EP3455736B1 (en) Dynamically sized locals with precise garbage collection reporting
JP2017062767A5 (ko)
KR101636521B1 (ko) 코드 오버레이 생성 장치 및 방법
KR102052776B1 (ko) 병행가능하고 신뢰성 있는 설치를 위한 설치 엔진 및 패키지 포맷
US9348567B2 (en) Profile guided optimization in the presence of stale profile data
US8615743B2 (en) Adaptive compiled code
US20160299746A1 (en) Auto-vectorization in just-in-time compilers for dynamically typed programming languages
US9424004B2 (en) Execution guards in dynamic programming
CN108139929B (zh) 用于调度多个任务的任务调度装置和方法
US7165162B2 (en) Partitioning modules for cross-module optimization
US9311065B2 (en) Data splitting for multi-instantiated objects
Kim et al. Energy-efficient progressive remote update for flash-based firmware of networked embedded systems
US8584090B2 (en) Heuristic approach on checking service instance protection for availability management framework (AMF) configurations
KR101393152B1 (ko) 자바 가상 머신이 탑재된 장치 및 상기 자바 가상 머신이 탑재된 장치에서 바이트코드를 네이티브 코드로 선택적으로 컴파일하는 방법
US9063758B2 (en) Population of dynamic objects representing static namespace hierarchies
US20130007702A1 (en) Static metadata in dynamic programs
Li et al. An efficient code update scheme for DSP applications in mobile embedded systems
CN117076052A (zh) 模式跳转方法、装置、电子设备及存储介质
CN117651935A (zh) FaaS控制器及用于FaaS系统的方法
CN116931941A (zh) 神经网络计算图的编译方法及编译装置
CN112148364A (zh) 一种嵌入式微内核操作系统分区链接方法及系统
JP2014056439A (ja) バージョン管理システム及びバージョン管理方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190530

Year of fee payment: 4