KR102165928B1 - 전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법 - Google Patents

전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법 Download PDF

Info

Publication number
KR102165928B1
KR102165928B1 KR1020190159916A KR20190159916A KR102165928B1 KR 102165928 B1 KR102165928 B1 KR 102165928B1 KR 1020190159916 A KR1020190159916 A KR 1020190159916A KR 20190159916 A KR20190159916 A KR 20190159916A KR 102165928 B1 KR102165928 B1 KR 102165928B1
Authority
KR
South Korea
Prior art keywords
memory device
information
intermediate expression
objects
memory
Prior art date
Application number
KR1020190159916A
Other languages
English (en)
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 KR1020190159916A priority Critical patent/KR102165928B1/ko
Application granted granted Critical
Publication of KR102165928B1 publication Critical patent/KR102165928B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers

Landscapes

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

Abstract

전자 장치는 컴파일러, 런타임 모듈 및 메모리 서브 시스템을 포함한다. 상기 컴파일러는 어플리케이션의 실행과 관련된 소스 코드를 중간 표현으로 컴파일하고, 상기 중간 표현에 기초하여 타겟 코드를 생성하고, 상기 어플리케이션과 관련된 하나 이상의 객체들 각각의 컨텍스트 정보를 포함하는 프로파일링 정보에 기초하여 상기 하나 이상의 객체들 각각의 데이터 액세스 패턴과 관련된 힌트 정보를 생성하고, 상기 힌트 정보를 상기 중간 표현에 삽입하여 타겟 코드를 생성한다. 상기 런타임 모듈은 상기 타겟 코드에 기초하여 상기 어플리케이션을 실행시킨다. 상기 메모리 서브 시스템은 상기 컴파일러와 연결되고, 서로 다른 데이터 보유 특성을 가지는 제1 메모리 장치 및 제2 메모리 장치를 포함한다. 상기 컴파일러는 상기 하나 이상의 객체들 각각의 상기 힌트 정보에 기초하여 상기 하나 이상의 객체들 각각을 상기 제1 메모리 장치 및 상기 제2 메모리 장치 중 하나에할당하되, 상기 하나 이상의 객체들에 대한 상기 제1 메모리 장치 및 상기 제2 메모리 장치 사이에서의 적응적 스와핑을 수행한다.

Description

전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법{Electronic device, a method of compiling in an electronic device and a method of operating an electronic device}
본 발명은 컴퓨팅 분야에 관한 것으로 보다 상세하게는 전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법에 관한 것이다.
프로그래밍 언어의 컴파일을 위해 일반적으로 쓰이는 두 가지 방법은 AOTC(Ahead-of Time Compilation)과 JITC(Just-in-Time Compilation)이다.
자바스크립트와 같은 동적 프로그래밍 언어에서 주로 사용하는 JITC에서는 프로그램을 실행하면서 기계 코드(또는 기계어)로의 컴파일이 진행된다. 소스 코드(source code)를 특정 단위(주로, 함수 단위)로 나누고 해당 부분의 코드가 처음 호출되는 순간에 컴파일하고 실행한다. 컴파일된 해당 기계 코드는 저장(cache)되어 이후 같은 부분이 다시 호출되었을 때 재사용된다. 그리하여 프로그래머는 높은 수준(high-level)의 소스 코드를 제공하고 프로그램 사용자는 프로그램을 실행할 때마다 그때그때 JITC 방식으로 컴파일을 실행하게 된다.
JITC 방법에는 주요한 두 가지 장점이 있다. 첫 번째는 JITC는 런타임(runtime) 즉 프로그램의 실행 중에 컴파일이 진행되기 때문에 실행 시에만 얻을 수 있는 프로그램 분석 정보들을 사용할 수 있다. 예를 들어, 자바 스크립트 프로그램을 실행시 함수 argument의 정확한 유형(type)은 함수 호출시에만 얻을 수 있는 정보이다. 이러한 장점으로 JITC는 자바스크립트와 같은 동적 언어에 적합하다. 두 번째는 런타임 시 호출된 코드만을 컴파일하기 때문에 메모리 영역 중 코드 영역의 크기를 줄일 수 있다는 것이다. 즉, JITC는 소스 코드 내 실제로 실행되지 않는 부분에 대해서는 메모리에 로딩하지 않는다. 하지만, 실행시에 프로그램 분석과 컴파일이 수행되다 보니 추가로 드는 메모리 및 전력 소비가 커지는 경우도 있다.
 한편, C 언어와 같은 정적 프로그래밍 언어의 컴파일에 주로 사용되는 AOTC 방법은 프로그램의 소스 코드 전체를 (프로그램의) 실행 전에 미리 컴파일하여 기계 코드 형태로 프로그램 사용자에게 제공한다. AOTC의 가장 큰 장점은 런타임 중에 소스 코드를 컴파일하지 않기 때문에 수행 시간에 있어서 JITC와 비교해 높은 성능을 보여 준다는 점이다.
이에 따라, 본 발명의 성능을 높이면서 서로 다른 종류의 메모리 장치들 사이에서 적응적으로 스와핑을 수행하는 전자 장치에 관한 것이다.
본 발명의 일 목적은 성능을 높이면서 서로 다른 종류의 메모리 장치들 사이에서 적응적으로 스와핑을 수행하는 전자 장치의 컴파일링 방법에 관한 것이다.
본 발명의 일 목적은 성능을 높이면서 서로 다른 종류의 메모리 장치들 사이에서 적응적으로 스와핑을 수행하는 전자 장치의 동작 방법에 관한 것이다.
상기 일 목적을 달성하기 위한 본 발명의 실시예에 따른 전자 장치는 컴파일러, 런타임 모듈 및 메모리 서브 시스템을 포함한다. 상기 컴파일러는 어플리케이션의 실행과 관련된 소스 코드를 중간 표현으로 컴파일하고, 상기 중간 표현에 기초하여 타겟 코드를 생성하고, 상기 어플리케이션과 관련된 하나 이상의 객체들 각각의 컨텍스트 정보를 포함하는 프로파일링 정보에 기초하여 상기 하나 이상의 객체들 각각의 데이터 액세스 패턴과 관련된 힌트 정보를 생성하고, 상기 힌트 정보를 상기 중간 표현에 선택적으로 삽입하여 타겟 코드를 생성한다. 상기 런타임 모듈은 상기 타겟 코드에 기초하여 상기 어플리케이션을 실행시킨다. 상기 메모리 서브 시스템은 상기 컴파일러와 연결되고, 서로 다른 데이터 보유 특성을 가지는 제1 메모리 장치 및 제2 메모리 장치를 포함한다. 상기 컴파일러는 상기 힌트 정보에 기초하여 상기 하나 이상의 객체들을 선택적으로 상기 제1 메모리 장치에 위치시켜 상기 하나 이상의 객체들 각각을 상기 제1 메모리 장치 및 상기 제2 메모리 장치 중 하나에할당하되, 상기 하나 이상의 객체들에 대한 상기 제1 메모리 장치 및 상기 제2 메모리 장치 사이에서의 적응적 스와핑을 수행한다.
실시예에 있어서, 상기 컴파일러는 프런트엔드 모듈, 최적화 모듈, 백엔드 모듈 및 스와핑 인터페이스를 포함할 수 있다. 상기 프런트엔드 모듈은 상기 소스 코드를 초기 중간 표현으로 컴파일할 수 있다. 상기 최적화 모듈은 상기 초기 중간 표현을 수신하고 상기 초기 중간 표현을 최적화하여 최종 중간 표현으로 컴파일하고, 상기 프로파일링 정보에 기초하여 상기 힌트 정보를 선택적으로 삽입할 수 있다. 상기 백엔드 모듈은 상기 최종 중간 표현에 기초하여 상기 타겟 코드를 생성할 수 있다. 상기 스와핑 인터페이스는 상기 힌트 정보에 기초하여 상기 적응적 스와핑을 수행할 수 있다.
상기 프로파일링 정보는 상기 어플리케이션이 수행될 때 호출되는 함수의 호출 경로 및 루프에 관련된 정보를 포함하는 상기 컨텍스트 정보에 기초한 상기 하나 이상의 객체들 각각이 할당받는 메모리의 사이즈 정보 및 상기 하나 이상의 객체들 각각의 액세스 횟수 정보를 포함할 수 있다.
상기 최적화 모듈은 상기 상기 사이즈 정보 및 상기 액세스 횟수 정보에 기초하여 상기 하나 이상의 객체들 각각의 우선 순위를 산출하고, 상기 산출된 우선 순위에 기초하여 상기 힌트 정보를 생성할 수 있다.
상기 최적화 모듈은 상기 사이즈 정보 및 상기 액세스 횟수 정보에 기초하여 상기 하나 이상의 객체들 각각이 상기 제1 메모리에 위치되는 경우, 상기 어플리케이션의 성능에 기초하여 상기 힌트 정보를 생성할 수 있다.
상기 최적화 모듈은 데이터 액세스 패턴 프로파일러, 힌트 삽입기 및 병합 모듈을 포함할 수 있다. 상기 데이터 액세스 패턴 프로파일러는 상기 초기 중간 표현에 대하여 상기 객체들 각각이 액세스하는 데이터의 액세스 패턴을 분석하여 데이터 액세스 패턴 정보를 포함하는 제1 중간 표현을 출력할 수 있다. 상기 힌트 삽입기는 상기 제1 중간 표현을 수신하고, 상기 제1 중간 표현에 포함된 상기 데이터 액세스 패턴 정보에 기초하여 상기 액세스되는 데이터의 위치가 상기 제1 메모리 장치임을 나타내는 상기 힌트 정보를 상기 제1 중간 표현에 선택적으로 삽입하여 제2 중간 표현을 출력할 수 있다. 상기 병합 모듈은 상기 제2 중간 표현에 포함되는 컨텍스트들의 적어도 일부를 상기 컨텍스트들 각각의 특성에 기초하여 병합하여 상기 최종 중간 표현을 제공할 수 있다.
상기 데이터 액세스 패턴 프로파일러는 상기 제1 중간 표현 내의 루프 코드와 함수 호출 코드를 분석하여 상기 컨텍스트 정보를 포함하는 정적 초기 중간 표현을 출력하는 정적 프로파일러 및 상기 정적 초기 중간 표현을 수신하고, 상기 컨텍스트 정보에 기초하여 상기 객체들 각각의 데이터 액세스 패턴을 추출하여 상기 제1 중간 표현을 제공하는 동적 프로파일러를 포함할 수 있다.
상기 컨텍스트들 각각의 특성은 상기 컨텍스트들 각각의 수행 시간과 상기 컨텍스트들 각각의 데이터 액세스 패턴을 포함할 수 있다.
상기 상기 병합 모듈은 상기 컨텍스트들 각각의 수행 시간 및 상기 컨텍스트를 각각의 상기 데이터 액세스 패턴의 유사도에 기초하여 상기 컨텍스트들 중 적어도 일부를 병합할 수 있다.
실시예에 있어서, 상기 제1 메모리 장치는 휘발성 메모리 장치이고, 상기 제2 메모리 장치는 비휘발성 메모리 장치 기반의 SSD(solid state drive)일 수 있다.
상기 스와핑 인터페이스는 상기 하나의 이상의 객체들 중 상기 힌트 정보에 해당하는 객체를 상기 제1 메모리 장치에 위치시킬 수 있다.
상기 스와핑 인터페이스는 상기 제1 메모리 장치를 메인 메모리로 사용하고, 상기 제2 메모리 장치를 스왑 메모리로 사용할 수 있다..
상기 일 목적을 달성하기 위한 본 발명의 실시예들에 따른 어플리케이션을 실행하는 전자 장치의 컴파일링 방법에서는, 상기 어플리케이션의 실행과 관련된 컨텍스트 정보를 인지하고, 상기 어플리케이션의 실행과 관련된 소스 코드를 최초 중간 표현으로 컴파일링하고, 상기 컨텍스트 정보에 기초하여 상기 어플리케이션과 관련된 하나 이상의 객체들 각각의 데이터 액세스 패턴에 기초한 힌트 정보에 따라 상기 하나 이상의 객체들 각각을 서로 다른 데이터 보유 특성을 가지는 제1 메모리 장치 및 제2 메모리 장치 중 상기 제1 메모리 장치에 위치시키는 힌트 정보를 생성하고, 상기 힌트 정보를 상기 최초 중간 표현에 선택적으로 삽입하여 상기 최초 중간 표현을 최종 중간 표현으로 컴파일링하고, 상기 최종 중간 표현에 기초하여 상기 어플리케이션을 실행할 타겟 코드를 생성한다.
상기 일 목적을 달성하기 위한 본 발명의 실시예들에 따른 전자 장치의 동작 방법에서는 어플리케이션의 실행과 관련된 소스 코드를 중간 표현으로 컴파일하면서, 상기 어플리케이션과 관련된 하나 이상의 객체들 각각의 컨텍스트 정보를 포함하는 프로파일링 정보에 기초하여 상기 하나 이상의 객체들 각각의 데이터 액세스 패턴과 관련된 힌트 정보를 생성하고, 상기 힌트 정보에 기초하여 상기 하나 이상의 객체들 각각을 선택적으로 서로 다른 데이터 보유 특성을 가지는 제1 메모리 장치 및 제2 메모리 장치 중 상기 제1 메모리 장치에 위치시키고, 상기 중간 표현에 기초하여 생성된 타겟 코드에 따라 상기 어플리케이션을 실행시킨다.
본 발명의 예시적인 실시예들에 따르면, 어플리케이션의 컴파일링 과정에서 이용되는 또는 생성되는 하나 이상의 객체들 각각을 함수 호출 및 루프 중 적어도 하나에 관계되는 컨텍스트 정보를 포함하는 프로파일링 정보에 기초하여 하나 이상의 객체들 각각의 데이터 액세스 패턴을 파악하고, 상기 데이터 액세스 패턴에 기초하여 상기 객체들 중 일부를 제1 메모리 장치에 위치시키는 관련된 힌트 정보를 생성하고, 상기 힌트 정보게 기초하여 상기 하나 이상의 객체들을 선택적으로 제1 메모리 장치에 위치시킴으로써 서로 다른 종류의 메모리들을 사용하는 시스템에서 적응적 스와핑을 수행하여 성능을 높일 수 있다.
도 1은 본 발명의 실시예들에 따른 전자 장치를 나타내는 블록도이다.
도 2는 본 발명의 실시예들에 따른 도 1의 컴파일러에서 최적화 모듈의 구성을 나타내는 블록도이다.
도 3은 본 발명의 실시예들에 따른 도 2의 최적화 모듈에서 데이터 액세스 패턴 프로파일러를 나타내는 블록도이다.
도 4는 도 3의 프로파일링 정보에 포함될 수 있는 내용을 나타내는 표이다.
도 5는 본 발명의 실시예들에 따른 도 1의 컴파일러에서 스와핑 인터페이스를 나타내는 블록도이다.
도 6은 도 1의 소스 코드의 하나의 예를 나타낸다.
도 7은 본 발명의 실시예들에 따른 도 1의 전자 장치에서 런타임 모듈의 구성을 나타내는 블록도이다.
도 8은 도 1의 어플리케이션이 메모리 할당 함수 및 메모리 해제 함수를 호출하는 경우, 컴파일러의 동작을 나타내는 흐름도이다.
도 9는 도 1의 어플리케이션이 메모리 할당 함수를 호출하는 경우 컴파일러의 동작을 나타내는 흐름도이다.
도 10은 도 1의 어플리케이션이 메모리 해체 함수를 호출하는 경우 컴파일러의 동작을 나타내는 흐름도이다.
도 11은 본 발명의 실시예들에 따른 도 1의 메모리 서브 시스템에서 제1 메모리 장치를 나타내는 블록도이다.
도 12는 본 발명의 실시예들에 따른 도 1의 메모리 서브시스템에서 제2 메모리 장치를 나타내는 블록도이다.
도 13은 본 발명의 실시예들에 따른 전자 장치의 컴파일링 방법을 나타내는 흐름도이다.
도 14는 본 발명의 실시예들에 따른 전자 장치의 동작 방법을 나타내는 흐름도이다.
본문에 개시되어 있는 본 발명의 실시예들에 대해서, 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 실시예를 설명하기 위한 목적으로 예시된 것으로, 본 발명의 실시예들은 다양한 형태로 실시될 수 있으며 본문에 설명된 실시예들에 한정되는 것으로 해석되어서는 아니 된다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 구성요소에 대해 사용하였다.
제1, 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위로부터 이탈되지 않은 채 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 설시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명하고자 한다. 도면상의 동일한 구성요소에 대해서는 동일한 참조부호를 사용하고 동일한 구성요소에 대해서 중복된 설명은 생략한다.
도 1은 본 발명의 실시예들에 따른 전자 장치를 나타내는 블록도이다.
도 1을 참조하면, 전자 장치(또는 사용자 단말, 10)은 컴파일러(100), 런타임 모듈(300) 및 메모리 서브 시스템(350)을 포함할 수 있다.
컴파일러(100)는 어플이케이션(20)의 실행과 관련된 소스 코드(SCD)를 중간 표현으로 컴파일하고, 상기 중간 표현에 기초하여 타겟 코드(TCD)를 생성하여 타겟 코드(TCD)를 런타임 모듈(300)에 제공할 수 있다.
컴파일러(100)는 또한 어플이케이션(20)과 관련된 하나 이상의 객체들(31, 33, 35, 37) 각각의 컨텍스트 정보를 포함하는 프로파일링 정보(OUPI)에 기초하여 하나 이상의 객체들(31, 33, 35, 37) 각각의 데이터 액세스 패턴과 관련된 힌트 정보(HNT)를 생성하고, 상기 힌트 정보를 상기 중간 표현에 선택적으로 삽입하여 타겟 코드(TCD)를 생성하고, 상기 힌트 정보에 기초하여 하나 이상의 객체들(31, 33, 35, 37) 중 상기 힌트 정보(HNT) 에 대응되는 객체를 메모리 서브 시스템(350)의 제1 메모리 장치(400) 및 제2 메모리 장치(500) 중 상기 제1 메모리 장치(400)에 위치시켜상기 힌트 정보에 기초하여 제1 메모리 장치(400) 및 제2 메모리 장치(500) 사이에서 적응적 스와핑을 수행할 수 있다. 즉, 힌트 정보(HNT)에 해당하는 객체는 제1 메모리 장치(400)에 위치하고 제2 메모리 장치(500)로 스왑되지 않도록 할 수 있다.
런타임 모듈(300)은 타겟 코드(TCD)를 수신하고, 타겟 코드(TCD)에 기초하여 어플리케이션(20)을 실행시킬 수 있다.
메모리 서브 시스템(350)은 제1 메모리 장치(400) 및 제2 메모리 장치(500)를 포함할 수 있다.
제1 메모리 장치(400)는 휘발성 메모리 장치로서 DRAM일 수 있다. 제2 메모리 장치(500)는 비휘발성 메모리 장치 기반의 SSD(solid date drive) 일 수 있다. 상기 SSD는 복수의 비휘발성 메모리 장치일 수 있다. 제1 메모리 장치(400) 및 제2 메모리 장치(500) 각각의 구성과 동작에 대하여는 도 11 및 도 12를 참조하여 상세하게 설명된다.
컴파일러(100)는 프런트엔드 모듈(110), 최적화 모듈(200) 및 백엔드 모듈(170)을 포함할 수 있다. 컴파일러(100)는 또한 스와핑 인터페이스(190)를 더 포함할 수 있다.
프런트엔드 모듈(110)은 소스 코드(SCD)를 초기 중간 표현(IIR)로 컴파일한다. 최적화 모듈(200)은 초기 중간 표현(IIR)을 최종 중간 표현(OIR)으로 컴파일하고, 프로파일링 정보에 기초하여 하나 이상의 객체들(31, 33, 35, 37) 각각의 데이터 액세스 패턴을 분석하고, 상기 데이터 액세스 패턴과 관련된 힌트 정보를 생성하고, 상기 힌트 정보를 중간 표현에 선택적으로 삽입하여 타겟 코드(TCD)를 생성하고, 상기 힌트 정보에 기초하여 하나 이상의 객체들(31, 33, 35, 37) 중 일부를 제1 메모리 장치(400) 및 제2 메모리 장치(500) 중 제1 메모리 장치(400)에 위치시켜서 힌트 정보를 기초로 하나 이상의 객체들(31, 33, 35, 37)에 대한 제1 메모리 장치(400) 및 제2 메모리 장치(500) 사이의 적응적 스와핑을 수행할 수 있다. .
상기 프로파일링 정보는 어플리케이션(20)이 수행될 때 호출되는 함수의 호출 경로 및 루프에 관련된 정보를 포함하는 컨텍스트 정보에 기초한 상기 하나 이상의 객체들(31, 33, 35, 37) 각각이 할당받는 메모리의 사이즈 정보 및 상기 하나 이상의 객체들(31, 33, 35, 37) 각각의 액세스 횟수 정보를 포함할 수 있다.
최적화 모듈(200)은 상기 프로파일링 정보(OUPI)에 기초하여 상기 하나 이상의 객체들(31, 33, 35, 37)이 제1 메모리 장치(400)에 위치되는 경우어플리케이션(20)의 성능에 기초하여 상기 상기 하나 이상의 객체들(31, 33, 35, 37) 각각의 우선 순위를 산출할 수 있다. 즉 최적화 모듈(200)은 메모리 할당 시의 어플리케이션의 성능 저하에 비례하여 우선 순위를 낮게 산출할 수 있다.
백엔드 모듈(170)은 최종 중간 표현(OIR)에 기초하여 타겟 코드(TCD)를 생성하고, 생성된 타겟 코드(TCD)를 런타임 모듈(300)에 제공하면서 힌트 정보(HNT)를 스와핑 인터페이스(190)에 제공할 수 있다.
스와핑 인터페이스(190)는 최적화 모듈(200)과 연결되고, 제1 메모리 장치(400) 및 제2 메모리 장치(500)에 연결되어 하나 이상의 객체들(31, 33, 35, 37) 각각을 제1 메모리 장치(400) 및 제2 메모리 장치(500) 중 하나에 위치시킬 수 있다. 스와핑 인터페이스(190)는 힌트 정보에 대응되는 객체를 제1 메모리 장치(400)에 위치시킬 수 있다. 메모리 인터페이스(190)는 제1 경로(181)를 통하여 제1 메모리 장치(400)와 연결되고, 제2 경로(183)를 통하여 제2 메모리 장치(500)와 연결될 수 있다.
상기 컴파일러(100)는 LLVM(http://llvm.org/)과 같은 컴파일러 기반구조(infrastructure)를 가질 수 있다. 상기 컴파일러(100)는 C 또는 C++과 같은 언어로 작성된 어플리케이션 소스 코드(SCD)를 수신한다.
프런트엔드 모듈(110)은 소스 코드(SCD)를 컴파일러(100)가 이해할 수 있는 중간 코드(intermediate code)로 변경한다. 상기 중간 코드는 중간 표현(IR; intermediate representation)이라 호칭될 수 있다.
백엔드 모듈(170)은 힌트 정보가 삽입된 최종 중간 표현(OIR)을 컴파일하여 런타임 모듈(300)에서 실행가능한 바이너리의 타겟 코드(또는 실행 코드, TCD)를 생성한다.
도 2는 본 발명의 실시예들에 따른 도 1의 컴파일러에서 최적화 모듈의 구성을 나타내는 블록도이다.
도 2를 참조하면, 최적화 모듈(200)은 데이터 액세스 패턴 프로파일러(210), 힌트 삽입기(240) 및 병합 모듈(260)을 포함할 수 있다.
데이터 액세스 패턴 프로파일러(210)는 초기 중간 표현(IIR)에 대하여 적어도 하나 이상의 객체들 각각이 액세스하는 데이터의 액세스 패턴을 분석하여 데이터 액세스 패턴 정보를 포함하는 제1 중간 표현(IR1)을 출력한다.
힌트 삽입기(240)는 제1 중간 표현(IR1)을 수신하고, 제1 중간 표현(IR1)에 포함된 데이터 액세스 패턴 정보에 기초하여 상기 액세스되는 데이터의 위치가 제1 메모리 장치(400)임을 나타내는 상기 힌트 정보(HNT)를 상기 제1 중간 표현(IR1)에 삽입하여 컨텍스트 별로 삽입하여 제2 중간 표현(IR2)을 출력한다.
병합 모듈(260)는 제2 중간 표현(IR2)에 포함되는 컨텍스트들의 적어도 일부를 상기 컨텍스트들 각각의 특성에 기초하여 병합하여 최종 중간 표현(OIR)을 출력한다. 상기 컨텍스트들 각각의 특성은 상기 컨텍스트들 각각의 수행 시간과 상기 컨텍스트들 각각의 데이터 액세스 패턴을 포함할 수 있다. 병합 모듈(260)은 상기 컨텍스트들 각각의 수행 시간 및 상기 컨텍스트를 각각의 상기 데이터 액세스 패턴의 유사도에 기초하여 상기 컨텍스트들 중 적어도 일부를 병합할 수 있다.
도 3은 본 발명의 실시예들에 따른 도 2의 최적화 모듈에서 데이터 액세스 패턴 프로파일러 나타내는 블록도이다.
도 3을 참조하면, 데이터 액세스 패턴 프로파일러 (210)은 할당 히스토리 기록 모듈(215), 참조 히스토리 기록 모듈(220), 해제 히스토리 기록 모듈(225), 프로파일 정보 생성 모듈(230), 정적 프로파일러(233) 및 동적 프로파일러(237)을 포함할 수 있다.
할당 히스토리 기록 모듈(215)은 하나 이상의 객체들(31, 33, 35, 37) 각각에 대하여 메모리 할당 요청이 호출되는 경우, 상기 메모리 할당 요청의 시점과 관련된 제1 타임 스탬프(TP1), 상기 메모리 할당 요청과 관련된 객체의 식별자(OID1), 할당된 메모리의 어드레스(ADDR1) 및 할당된 메모리의 크기 정보(SZ11)를 기록/저장할 수 있다.
참조 히스토리 기록 모듈(220)은 상기 객체가 할당 받은 메모리 영역에 대하여 상기 어플리케이션(20)에서 액세스의 참조가 발생하는 경우, 상기 객체에 대하여 참조가 발생한 시점과 관련된 제2 타임 스탬프(TP2), 상기 객체의 식별자 정보(OID2), 상기 참조의 유형(RT) 및 상기 객체로의 참조가 발생한 횟수(RN)를 기록/저장할 수 있다.
해제 히스토리 기록 모듈(225)은 상기 객체의 사용이 완료된 경우, 상기 객체에 할당된 메모리 영역의 할당을 해제하고, 메모리 할당 해제 요청의 시점과 관련된 제3 타임 스탬프(TP3), 상기 할당을 해제한 상기 객체의 식별자 정보(OID3) 및 상기 할당이 해제된 메모리의 크기 정보(SZ31)를 기록/저장할 수 있다.
프로파일링 정보 생성 모듈(230)은 할당 히스토리 기록 모듈(215), 참조 히스토리 기록 모듈(220) 및 해제 히스토리 기록 모듈(225) 각각에 저장된 정보를 별도의 파일로 저장하고, 상기 저장된 정보를 프로파일링 정보(OUPI)로 제공할 수 있다.
정적 프로파일러(233)는 프로파일링 정보(OUPI)에 기초하여 초기 중간 표현(IIR) 내의 루프 코드와 함수 호출 코드를 분석하여 상기 컨텍스트 정보를 포함하는 정적 초기 중간 표현(STIR)을 출력할 수 있다. 동적 프로파일러(237)는 정적 초기 중간 표현(STIR)을 수신하고, 상기 컨텍스트 정보에 기초하여 상기 객체들 각각의 데이터 액세스 패턴을 추출하여 제1 중간 표현(IR1)을 제공할 수 있다.
도 4는 도 3의 프로파일링 정보에 포함될 수 있는 내용을 나타내는 표이다.
도 4를 참조하면, 하나 이상의 객체들(31, 33, 35, 37)은 각각 컨텍스트 정보에 따라 서로 다른 식별자 정보들(OID11, OID12, OID13, OID14)을 부여받을 수 있다.
객체(31)는 할당 받는 메모리 사이즈 정보(SZ1)와 액세스 횟수(ACC_F1)를 프로파일링 정보(OUPI)로 가질 수 있다. 객체(32)는 할당 받는 메모리 사이즈 정보(SZ2)와 액세스 횟수(ACC_F2)를 프로파일링 정보(OUPI)로 가질 수 있다. 객체(35)는 할당 받는 메모리 사이즈 정보(SZ3)와 액세스 횟수(ACC_F3)를 프로파일링 정보(OUPI)로 가질 수 있다. 객체(37)는 할당 받는 메모리 사이즈 정보(SZ4)와 액세스 횟수(ACC_F4)를 프로파일링 정보(OUPI)로 가질 수 있다.
따라서 도 2의 힌트 삽입기(240)는 다음의 수학식에 의하여 오브젝트별 우선 순위(중요도)를 산출할 수 있다.[수학식]
Priority(Object) = OB_ACC_FREQa/OB_MEM_SZb
상기 수학식에서 Priority(Object)는 객체의 우선 순위를 나타내고, OB_ACC_FREQ는 객체들 각각의 액세스 횟수를 나타내고, OB_MEM_SZ는 객체들 각각이 할당받는 메모리 사이즈를 나타내고, a와 b는 실수로서 전자 장치(100)로 구현되는 시스템에 따라 달라지는 상수이다.
힌트 삽입기(240)는 하나 이상의 객체들(31, 33, 35, 37) 각각의 컨텍스트 별로 우선순위를 계산하고, 우선 순위에 따라 객체들(31, 33, 35, 37)를 나열하고, 제1 메모리 장치(400)의 크기에 맞게 객체들(31, 33, 35, 37) 중 상위의 우선 순위를 갖는 객체가 제1 메모리 장치(400)에 위치되도록 힌트 정보(HNT)를 소스 코드(SCD)에 삽입한다. 백엔드 모듈(170)는 힌트 정보(HNT)가 삽입된 소스 코드를 컴파일하여 타겟 코드(TCD)를 런타임 모듈(300)에 제공한다.
도 5는 본 발명의 실시예들에 따른 도 1의 컴파일러에서 스와핑 인터페이스를 나타내는 블록도이다.
도 5를 참조하면, 스와핑 인터페이스(190)는 제1 라이브러리(191), 제2 라이브러리(193) 및 스와핑 로직(195)를 포함할 수 있다.
제1 라이브러리(191)는 제1 메모리 장치(400)에 대한 리퀘스트를 처리하는 glibc 라이브러리일 수 있고, 제1 메모리 장치(400)에 대한 할당을 처리하는 라이브러리 함수일 수 있다.
제2 라이브러리(193)는 제1 메모리 장치(500)에 대한 리퀘스트를 처리하는 pmem 라이브러리일 수 있고, 제2 메모리 장치(500)에 대한 할당을 처리하는 라이브러리 함수일 수 있다.
스와핑 로직(195)은 제1 라이브러리(191), 제2 라이브러리(193), 제1 메모리 장치(400) 및 제2 메모리 장치(500)에 연결되고, 하나 이상의 객체들(31, 33, 35, 37) 각각을 제1 메모리 장치(400) 및 제2 메모리 장치(500)에 위치시키되 힌트 정보(HNT)에 기초하여 제1 메모리 장치(400)와 제2 메모리 장치(500) 사이에서 적응적 스와핑을 수행할 수 있다. 스와핑 인터페이스(190)는 제1 메모리 장치(400)를 메인 메모리로 사용하고, 제2 메모리 장치(500)를 스와핑 메모리로 사용할 수 있다.
도 6은 도 1의 소스 코드의 하나의 예를 나타낸다.
도 6을 참조하면, 소스 코드(SCD)는 복수의 함수들(811, 812, 813, 814, 815)를 포함할 수 있다. 함수(814)와 함수(815)의 기능은 서로 동일하지만, 함수(814)는 함수들(811, 812, 813)의 루프를 거쳐 수행되고, 함수(815)는 함수(811)에서 바로 수행되므로 함수(814)와 함수(815)는 서로 다른 컨텍스트들을 가지게 된다. 이러한 컨텍스트 정보가 다르면 데이터 액세스 패턴이 달라질 수 있다.
도 7은 본 발명의 실시예들에 따른 도 1의 전자 장치에서 런타임 모듈의 구성을 나타내는 블록도이다.
도 7을 참조하면, 런타임 모듈(300)은 장치 모니터(310) 및 스케쥴러(320), 컴파일러 런타임 모듈(330)을 포함할 수 있다. 런타임 모듈(300)은 선택적으로 OS(operation system) 레벨의 추가적인 API 모듈(340) 또는 GPU 구동을 위한 OpenCL 드라이버 모듈(350)을 더 포함할 수도 있다.
스케쥴러(320)는 타겟 코드(TCD)읠 실행 전에 전자 장치(10)에 포함되는 연산 디바이스들의 상태를 확인하기 위하여 장치 모니터(310)를 시스템 소프트웨어의 서비스 형태로 이용하여 연산 디바이스들의 상태 정보를 컴파일러 런타임 모듈(330)과 통신할 수 있다.
스케쥴러(320)는 상기 상태 정보를 이용하여 연산 디바이스들에 할당될 효율적인 워크로드 값을 결정하고, 상기 결정된 워크로드에 따라서 타겟 코드(TCD)를 연산 디바이스들에 구동시킨다.
컴파일러 런타임 모듈(330)은 컴파일러 런타임 라이브러리를 제공한다. 상기 컴파일러 런타임 라이브러리는 컴파일러(100)와 밀접하게 연동하여 상기 스케줄러(320)가 상기 어플리케이션(20)의 타겟 코드(TCD)를 구동할 수 있게 한다.
도 8은 도 1의 어플리케이션이 메모리 할당 함수 및 메모리 해제 함수를 호출하는 경우, 컴파일러의 동작을 나타내는 흐름도이다.
도 1 내지 도 5 및 도 8을 참조하면, 도 1의 어플리케이션(20)이 메모리 할당 함수를 호출하는 경우, 도 2의 힌트 삽입기(240)은 프로파일링 정보(OUPI)에 기초하여 상기 하나 이상이 객체들(31, 33, 35, 37) 각각의 사이즈 정보 및 액세스 횟수 정보에 기초하여 우선 순위를 산출하고,(S110), 상기 우선 순위에 기초하여 힌트 정보를 생성하고 상기 힌트 정보에 기초하여 상기 어플리케이션(20) 전체에 할당된 그리고 할당이 요청된 객체들 모두에 대하여 위치시킬 메모리 종류를 결정하고(S120), 상기 결정된 메모리 종류에 따라 상기 하나 이상의 객체들 각각(31, 33, 35, 37)을 제1 메모리 장치(400) 및 상기 제2 메모리 장치(500) 중 제1 메모리 장치(400)에 선택적으로 위치시킨다(S130).
실시예에 따라서, 힌트 삽입기(210)는 상기 힌트 정보에 기초하여 미리 할당된 객체를 다른 타입의 메모리 장치에 위치시킬 수 있다.
도 9는 도 1의 어플리케이션이 메모리 할당 함수를 호출하는 경우 컴파일러의 동작을 나타내는 흐름도이다.
도 1 내지 도 5 및 도 9를 참조하면, 도 1의 어플리케이션(20)이 메모리 할당 함수를 호출하는 경우, 도 2의 힌트 삽입기(240)은 프로파일링 정보(OUPI)에 기초하여 상기 하나 이상이 객체들(31, 33, 35, 37) 각각의 사이즈 정보 및 액세스 횟수 정보에 기초하여 우선 순위를 산출하고(S210), 상기 우선 순위에 기초하여 힌트 정보를 생성하고 상기 힌트 정보에 기초하여 상기 어플리케이션(20) 전체에 할당된 그리고 할당이 요청된 객체들 모두에 대하여 할당할 메모리 종류를 결정하고(S220), 상기 결정된 메모리 종류에 따라 상기 하나 이상의 객체들 (31, 33, 35, 37) 중 일부를 상기 제1 메모리 장치(400) 및 상기 제2 메모리 장치(500) 및 제1 메모리 장치(400)에 위치시킨다(S240). 실시예에 따라서, 패스 모듈(210)은 상기 힌트 정보에 기초하여 미리 할당된 객체를 다른 타입의 메모리 장치로 재위치시킬 수 있다(S230).
도 10은 도 1의 어플리케이션이 메모리 해체 함수를 호출하는 경우 컴파일러의 동작을 나타내는 흐름도이다.
도 1 내지 도 5 및 도 10을 참조하면, 도 1의 어플리케이션(20)이 메모리 해제 함수를 호출하는 경우, 도 2의 힌트 삽입기(240)는은 메모리 해제가 요청된 객체의 메모리 할당을 해제하고(S310), 프로파일링 정보(OUPI)에 기초하여 현재 할당된 객체들의 우선 순위를 재추정(산출)하고(S320), 상기 재산출된 우선 순위에 기초하여 상기 현재 할당된 객체들의 배치를 판단할 수 있다(S330). 실시예에 따라서, 패스 모듈(210)은 상기 재산출된 우선 순위에 기초하여 상기 현재 할당된 객체들을 재배치하여 어플리케이션(20)의 성능을 향상시킬 수 있다(S340).
도 11은 본 발명의 실시예들에 따른 도 1의 메모리 서브 시스템에서 제1 메모리 장치를 나타내는 블록도이다.
도 11에서는 제1 메모리 장치(400)가 DRAM으로 구현되는 경우를 가정한다.
도 11을 참조하면, DRAM으로 구현되는 제1 메모리 장치(400)는 커맨드/어드레스 입력 버퍼(410), 제어 로직 회로(420), 뱅크 제어 로직(430A~430D), 메모리 셀 어레이(440A-440D), 기입 드라이버 및 데이터 입출력 센스 앰프부들(450A~450D), ECC 엔진들(460A~460D), 입출력 데이터 버퍼(470) 및 입출력 회로(480)를 포함한다.
메모리 셀 어레이(440A~440D)는 복수개의 메모리 셀들이 행들 및 열들로 배열되는 제1 내지 제4 뱅크 어레이들(440A~440D)을 포함할 수 있다. 제1 내지 제4 뱅크 어레이들(440A~440D) 각각에는 메모리 셀들과 연결되는 워드라인들과 비트라인들을 선택하는 로우 디코더와 칼럼 디코더가 연결될 수 있다.
커맨드/어드레스 입력 버퍼(410)는 외부로부터 수신되는 클럭 신호(CLK)과 커맨드(CMD) 및 어드레스(ADDR)를 수신할 수 있다. 커맨드(CMD)와 어드레스(ADDR)는 동일한 단자들, 이른바 CA 패드들을 통하여 입력될 수 있다. CA 패드들을 통하여 커맨드(CMD)와 어드레스(ADDR)가 순차적으로 입력될 수 있다.
제어 로직 회로(420)는 커맨드/어드레스 입력 버퍼(410)를 통해 수신되는 커맨드(CMD)와 어드레스(ADDR)를 수신하여, 내부 커맨드(ICMD) 및 어드레스 신호를 발생할 수 있다. 내부 커맨드(ICMD)는 내부 독출 커맨드와 내부 기입 커맨드를 포함할 수 있다. 어드레스 신호는 뱅크 어드레스(BA), 로우 어드레스(RA) 및 칼럼 어드레스(CA)를 포함할 수 있다. 내부 커맨드(ICMD)와 어드레스 신호(BA/RA/CA)는 뱅크 제어 로직들(430A~430D)로 제공될 수 있다. 즉, 제어 로직 회로(420)는 메모리 셀 어레이(440A~440D)에 대한 액세스를 제어할 수 있다.
제어 로직 회로(420)는 커맨드 디코더(421) 및 모드 레지스터(422)를 포함할 수 있다. 커맨드 디코더(421)는 커맨드(CMD)를 디코딩하여 내부 커맨드(ICMD)를 생성할 수 있고, 모드 레지스터(222)는 커맨드(CMD)와 어드레스(ADDR)에 기초하여 제1 메모리 장치(400)의 동작 모드를 설정할 수 있다.
뱅크 제어 로직들(430A~430D) 각각은 뱅크 어드레스(BA)에 상응하여 활성화될 수 있다. 활성화된 뱅크 제어 로직들(430A~430D)는 내부 커맨드(ICMD)와 로우 어드레스(RA) 및 칼럼 어드레스(CA)에 응답하여 뱅크 제어 신호들을 생성할 수 있다. 뱅크 제어 신호에 응답하여, 활성화된 뱅크 제어 로직들(430A~430D)와 연결되는 제1 내지 제4 뱅크 어레이들(440A~440D)의 로우 디코더와 칼럼 디코더가 활성화될 수 있다.
제1 내지 제4 뱅크 어레이들(440A~440D)의 로우 디코더는 로우 어드레스(RA)를 디코딩하여 로우 어드레스(RA)에 상응하는 워드라인을 인에이블시킬 수 있다. 제1 내지 제4 뱅크 어레이들(440A~440D)의 칼럼 어드레스(CA)는 칼럼 어드레스 래치에 일시적으로 저장될 수 있다. 칼럼 어드레스 래치는 버스트 모드에서 칼럼 어드레스(CA)를 점진적으로 증가시킬 수 있다. 일시적으로 저장된 또는 점진적으로 증가된 칼럼 어드레스(CA)는 칼럼 디코더로 제공될 수 있다. 칼럼 디코더는 칼럼 어드레스(CA)를 디코딩하여 칼럼 어드레스(CA)에 상응하는 칼럼 선택 신호(CSL)를 활성화시킬 수 있다.
뱅크 제어 로직들(430A~430D) 각각은 뱅크 제어 신호에 응답하여 제1 내지 제4 뱅크 어레이들(440A~440D)과 연결되는 ECC 엔진들(460A~460D)의 동작을 제어하는 ECC 인코딩 신호(ENC)와 ECC 디코딩 신호(DEC)를 발생할 수 있다.
기입 드라이버 및 데이터 입출력 센스 앰프부들(450A~450D)는 제1 내지 제4 뱅크 어레이들(440A~440D) 각각에서 출력되는 독출 데이터(DTA)를 감지 증폭하고, 제1 내지 제4 뱅크 어레이들(440A~440D) 각각에 저장될 기입 데이터(DTA)를 전달할 수 있다.
ECC 엔진들(460A~460D)은 기입 동작 시, 뱅크 제어 로직들(430A~430D)에서 출력되는 ECC 인코딩 신호(ENC)에 응답하여 제1 내지 제4 뱅크 어레이들(440A~440D) 각각에 저장될 기입 데이터(DTA)에 대해 ECC 인코딩 동작을 수행하여 패리티 비트들을 생성할 수 있다.
ECC 엔진들(460A~460D)은 독출 동작시, 뱅크 제어 로직들(430A~430D)에서 출력되는 ECC 디코딩 신호(DEC)에 응답하여 제1 내지 제4 뱅크 어레이들(440A~440D) 각각에서 독출되는 데이터(DTA)와 패리티 비트들을 이용하여 ECC 디코딩 동작을 수행하여 독출 데이터에 발생된 에러 비트를 검출/정정할 수 있다.
입출력 데이터 버퍼(470)는 제1 내지 제4 뱅크 어레이들(440A~440D)로/로부터 입출력되는 데이터(DTA)를 게이팅하는 회로들과 함께, 제1 내지 제4 뱅크 어레이들(440A~440D)로부터 출력된 데이터를 저장하기 위한 독출 데이터 래치들과 제1 내지 제4 뱅크 어레이들(440A~440D)에 데이터를 기입하기 위한 기입 데이터 래치들을 포함할 수있다.
입출력 데이터 버퍼(470)는 독출 데이터 래치들을 통하여 제1 내지 제4 뱅크 어레이들(440A~440D)로부터 출력되는 병렬 데이터 비트들을 직렬 데이터 비트들로 변환할 수 있다. 입출력 데이터 버퍼(470)는 기입 데이터 래치를 이용하여 직렬하게 수신되는 기입 데이터를 병렬 데이터 비트들로 변환할 수 있다.
입출력 회로(480)는 입출력 데이터 버퍼(470)에서 출력되는 직렬 데이터 비트들을 수신하고, 버스트 길이에 대응하는 데이터 비트들(DQs)로 순차 배열하여 데이터 입출력 패드들로 출력할 수 있다. 입출력 회로(480)는 직렬하게 수신된 버스트 길이의 기입 데이터를 입출력 데이터 버퍼(470)로 제공할 수 있다.
도 12은 본 발명의 실시예들에 따른 도 1의 메모리 서브시스템에서 제2 메모리 장치를 나타내는 블록도이다.
도 12에서는 제2 메모리 장치(500)가 SSD로 구현되는 경우를 가정한다.
도 12를 참조하면, SSD로 구현되는 제2 메모리 장치(500)는 복수의 비휘발성 메모리 장치들(700) 및 SSD 제어기(600)를 포함한다.
SSD 제어기(600)는 복수의 채널들(CH1, CH2, CH3, ..., CHi)을 통하여 비휘발성 메모리 장치들(700)에 연결될 수 있다. SSD 제어기(600)는 적어도 하나의 프로세서(610), 버퍼 메모리(620), 에러 정정 코드(error correction code, 이하 'ECC') 엔진(630), 호스트 인터페이스(650) 및 비휘발성 메모리 인터페이스(660)를 포함할 수 있다.
버퍼 메모리(620)는 SSD 제어기(600)의 구동에 필요한 데이터를 임시로 저장할 수 있다.
ECC 엔진(630)는 기입 동작에서 프로그램될 데이터의 에러 정정 코드 값을 계산하고, 독출 동작에서 읽혀진 데이터를 에러 정정 코드 값에 근거로 하여 에러 정정하고, 데이터 복구 동작에서 비휘발성 메모리 장치(700)로부터 복구된 데이터의 에러를 정정할 수 있다.
호스트 인터페이스(710)는 외부의 호스트 장치와 인터페이스 기능을 제공할 수 있다. 비휘발성 메모리 인터페이스(760)는 비휘발성 메모리 장치(700)와 인터페이스 기능을 제공할 수 있다. 호스트 인터페이스(710)는 USB (Universal Serial Bus), MMC (multimedia card), PCI (peripheral component interconnection), PCI-E (PCI-express), ATA (Advanced Technology Attachment), Serial-ATA, Parallel-ATA, SCSI (small computer small interface), ESDI (enhanced small disk interface), IDE (Integrated Drive Electronics), MIPI(Mobile Industry Processor Interface), NVMe(Nonvolatile Memory-express), UFS(Universal Flash Storage Interface) 등과 같은 다양한 인터페이스들 중 적어도 하나로 제공될 수 있다.
비휘발성 메모리 장치들(700)은 옵션적으로 외부 고전압(VPP)을 제공받을 수 있다.
도 12는 본 발명의 실시예들에 따른 전자 장치의 컴파일링 방법을 나타내는 흐름도이다.
도 1 내지 도 10 및 도 13을 참조하면, 본 발명의 실시예들에 따른 어플리케이션(20)을 실행하는 전자 장치(10)의 컴파일링 방법에서는 컴파일러(100)가 어플리케이션(20)의 실행과 관련된 컨텍스트 정보를 인지한다(S410). 컴파일러(100)의 프런트엔드 모듈(110)이 어플리케이션(20)의 실행과 관련된 어플리케이션(20)의 실행과 관련된 소스 코드(SCD)를 최조 중간 표현(IIR)으로 컴파일링한다(S420).
컴파일러(100)의 최적화 모듈(200)이 컨텍스트 정보에 기초하여 어플리케이션(20)과 관련된 하나 이상의 객체들(31, 33, 35, 37) 각각의 데이터 액세스 패턴에 기초하여 어느 메모리 장치에 위치시킬지 나타내는 힌트 정보를 생성하고, 상기 힌트 정보에 기초하여 하나 이상의 객체들(31, 33, 35, 37) 중 일부를 서로 다른 데이터 보유 특성을 가지는 제1 메모리 장치(400) 및 제2 메모리 장치(500) 중 제1 메모리 장치(400)에 위치시키면서, 최초 중간 표현(IIR)을 최종 중간 표현(OIR)으로 컴파일링한다(S430).
컴파일러(100)의 백엔드 모듈(170)이 최종 중간 표현(OIR)에 기초하여 어플케이션(20)을 실행할 타겟 코드(TCD)를 생성하고(S440) 생성된 타겟 코드(TCD)를 런타임 모듈(300)에 제공한다.
도 14는 본 발명의 실시예들에 따른 전자 장치의 동작 방법을 나타내는 흐름도이다.
도 도 1 내지 도 10 및 도 14을 참조하면, 본 발명의 실시예들에 따른 전자 장치(10)의 동작 방법에서는 컴파일러(100)가 어플리케이션(20)의 실행과 관련된 소스 코드(SCD)를 중간 표현으로 컴파일하면서, 어플리케이션(20)과 관련된 하나 이상의 객체들 하나 이상의 객체들(31, 33, 35, 37) 각각의 컨텍스트 정보를 포함하는 프로파일링 정보(OUPI)에 기초하여 상기 하나 이상의 객체들 하나 이상의 객체들(31, 33, 35, 37) 각각의 데이터 액세스 패턴에 기초하여 어느 메모리 장치에 위치시킬지를 나타내는 힌트 정보를 생성한다(S510).
컴파일러(100)가 상기 힌트 정보 정보에 기초하여 하나 이상의 객체들 (31, 33, 35, 37) 중 일부를 서로 다른 데이터 보유 특성을 가지는 제1 메모리 장치(400) 및 제2 메모리 장치(500) 중 제1 메모리 장치(400)에 위치시킨다(S520).
전자 장치(10)의 런타임 모듈(300)이 중간 표현에 기초하여 생성된 타겟 코드(TCD)에 따라 어플리케이션(20)을 실행시킨다(S530).
본 발명의 실시예들에 따르면, 어플리케이션의 컴파일링 과정에서 이용되는 또는 생성되는 하나 이상의 객체들 각각을 함수 호출 및 루프 중 적어도 하나에 관계되는 컨텍스트 정보를 포함하는 프로파일링 정보에 기초하여 하나 이상의 객체들 각각의 데이터 액세스 패턴을 분석하고, 상기 데이터 액세스 패턴에 기초하여 메모리 에 위치시킬 경우의 성능과 관련된 우선 순위를 산출하고 상기 우선 순위에 기초하여 제1 메모리에 위치시킴을 나타내는 힌트 정보를 소스 코드에 삽입하여 컴파일하여 타겟 코드를 생성함으로써 상기 하나 이상의 객체들 중 일부를 상기 힌트 정보에 따라 메인 메모리인 제1 메모리 장치 및 스왑 메모리인 제2 메모리 장치 중 제1 메모리 장치에 위시킴으로써 서로 다른 종류의 메모리들을 사용하는 시스템에서 메모리 할당을 수행하여 성능을 높일 수 있다.
본 발명은 클라우딩 컴퓨팅과 같은 서로 다른 메모리들을 사용하는 데이터 센터 시스템에 사용될 수 있다.
상기에서는 본 발명의 실시예들을 참조하여 설명하였지만, 해당 기술분야에서 통상의 지식을 가진 자는 하기의 특허청구범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 것이다.

Claims (16)

  1. 어플리케이션의 실행과 관련된 소스 코드를 중간 표현으로 컴파일하고, 상기 중간 표현에 기초하여 타겟 코드를 생성하고, 상기 어플리케이션과 관련된 하나 이상의 객체들 각각의 컨텍스트 정보를 포함하는 프로파일링 정보에 기초하여 상기 하나 이상의 객체들 각각의 데이터 액세스 패턴과 관련된 힌트 정보를 생성하고, 상기 힌트 정보를 상기 중간 표현에 선택적으로 삽입하여 상기 타겟 코드를 생성하는 컴파일러;
    상기 타겟 코드에 기초하여 상기 어플리케이션을 실행시키는 런타임 모듈; 및
    상기 컴파일러와 연결되고, 서로 다른 데이터 보유 특성을 가지는 제1 메모리 장치 및 제2 메모리 장치를 포함하는 메모리 서브 시스템을 포함하고,
    상기 컴파일러는 상기 힌트 정보에 기초하여 상기 하나 이상의 객체들을 선택적으로 상기 제1 메모리 장치에 위치시켜 상기 하나 이상의 객체들에 대한 상기 제1 메모리 장치 및 상기 제2 메모리 장치 사이에서의 적응적 스와핑을 수행하는 하는 전자 장치.
  2. 제1항에 있어서, 상기 컴파일러는,
    상기 소스 코드를 초기 중간 표현으로 컴파일하는 프런트엔드 모듈;
    상기 초기 중간 표현을 수신하고 상기 초기 중간 표현을 최적화하여 최종 중간 표현으로 컴파일하고, 상기 프로파일링 정보에 기초하여 상기 힌트 정보를 선택적으로 삽입하는 최적화 모듈;
    상기 최종 중간 표현에 기초하여 상기 타겟 코드를 생성하고, 상기 힌트 정보를 출력하는 백엔드 모듈; 및
    상기 힌트 정보에 기초하여 상기 적응적 스와핑을 수행하는 스와핑 인터페이스를 포함하는 전자 장치.
  3. 제2항에 있어서,
    상기 프로파일링 정보는 상기 어플리케이션이 수행될 때 호출되는 함수의 호출 경로 및 루프에 관련된 정보를 포함하는 상기 컨텍스트 정보에 기초한 상기 하나 이상의 객체들 각각이 할당받는 메모리의 사이즈 정보 및 상기 하나 이상의 객체들 각각의 액세스 횟수 정보를 포함하는 전자 장치.
  4. 제3항에 있어서,
    상기 최적화 모듈은 상기 사이즈 정보 및 상기 액세스 횟수 정보에 기초하여 상기 하나 이상의 객체들 각각의 우선 순위를 산출하고, 상기 산출된 우선 순위에 기초하여 상기 힌트 정보를 생성하는 전자 장치.
  5. 제4항에 있어서,
    상기 최적화 모듈은 상기 사이즈 정보 및 상기 액세스 횟수 정보에 기초하여 상기 하나 이상의 객체들 각각이 상기 제1 메모리에 위치되는 경우, 상기 어플리케이션의 성능에 기초하여 상기 힌트 정보를 생성하는 전자 장치.
  6. 제2항에 있어서, 상기 최적화 모듈은
    상기 초기 중간 표현에 대하여 상기 객체들 각각이 액세스하는 데이터의 액세스 패턴을 분석하여 데이터 액세스 패턴 정보를 포함하는 제1 중간 표현을 출력하는 데이터 액세스 패턴 프로파일러;
    상기 제1 중간 표현을 수신하고, 상기 제1 중간 표현에 포함된 상기 데이터 액세스 패턴 정보에 기초하여 상기 액세스되는 데이터의 위치가 상기 제1 메모리 장치임을 나타내는 상기 힌트 정보를 상기 제1 중간 표현에 선택적으로 삽입하여 제2 중간 표현을 출력하는 힌트 삽입기; 및
    상기 제2 중간 표현에 포함되는 컨텍스트들의 적어도 일부를 상기 컨텍스트들 각각의 특성에 기초하여 병합하여 상기 최종 중간 표현을 제공하는 병합 모듈을 포함하는 전자 장치.
  7. 제6항에 있어서, 상기 데이터 액세스 패턴 프로파일러는
    상기 제1 중간 표현 내의 루프 코드와 함수 호출 코드를 분석하여 상기 컨텍스트 정보를 포함하는 정적 초기 중간 표현을 출력하는 정적 프로파일러; 및
    상기 정적 초기 중간 표현을 수신하고, 상기 컨텍스트 정보에 기초하여 상기 객체들 각각의 데이터 액세스 패턴을 추출하여 상기 제1 중간 표현을 제공하는 동적 프로파일러를 포함하는 전자 장치.
  8. 제6항에 있어서,
    상기 컨텍스트들 각각의 특성은 상기 컨텍스트들 각각의 수행 시간과 상기 컨텍스트들 각각의 데이터 액세스 패턴을 포함하는 전자 장치.
  9. 제8항에 있어서,
    상기 병합 모듈은 상기 컨텍스트들 각각의 수행 시간 및 상기 컨텍스트를 각각의 상기 데이터 액세스 패턴의 유사도에 기초하여 상기 컨텍스트들 중 적어도 일부를 병합하는 전자 장치.
  10. 제2항에 있어서,
    상기 제1 메모리 장치는 휘발성 메모리 장치이고, 상기 제2 메모리 장치는 비휘발성 메모리 장치 기반의 SSD(solid state drive)인 전자 장치.
  11. 제10항에 있어서,
    상기 제1 메모리 장치는 DRAM이고 상기 제2 메모리 장치는 복수의 플래시 메모리 장치들을 포함하는 전자 장치.
  12. 제10항에 있어서,
    상기 스와핑 인터페이스는 상기 하나 이상의 객체들 중 상기 힌트 정보에 해당하는 객체를 상기 제1 메모리 장치에 위치시키는 전자 장치.
  13. 제10항에 있어서,
    상기 스와핑 인터페이스는 상기 제1 메모리 장치를 메인 메모리로 사용하고, 상기 제2 메모리 장치를 스왑 메모리로 사용하는 전자 장치.
  14. 어플리케이션을 실행하는 전자 장치의 컴파일링 방법으로서,
    상기 어플리케이션의 실행과 관련된 컨텍스트 정보를 인지하는 단계;
    상기 어플리케이션의 실행과 관련된 소스 코드를 최초 중간 표현으로 컴파일링하는 단계;
    상기 컨텍스트 정보에 기초하여 상기 어플리케이션과 관련된 하나 이상의 객체들 각각의 데이터 액세스 패턴에 기초하여 상기 하나 이상의 객체들 각각을 서로 다른 데이터 보유 특성을 가지는 제1 메모리 장치 및 제2 메모리 장치 중 상기 제1 메모리 장치에 위치시키는 힌트 정보를 생성하고, 상기 힌트 정보를 상기 최초 중간 표현에 삽입하여, 상기 최초 중간 표현을 최종 중간 표현으로 컴파일링하는 단계; 및
    상기 최종 중간 표현에 기초하여 상기 어플리케이션을 실행할 타겟 코드를 생성하는 단계를 포함하는 전자 장치의 컴파일링 방법.
  15. 전자 장치의 동작 방법으로서,
    어플리케이션의 실행과 관련된 소스 코드를 중간 표현으로 컴파일하면서, 상기 어플리케이션과 관련된 하나 이상의 객체들 각각의 컨텍스트 정보를 포함하는 프로파일링 정보에 기초하여 상기 하나 이상의 객체들 각각의 데이터 액세스 패턴과 관련된 힌트 정보를 생성하는 단계;
    상기 힌트 정보에 기초하여 상기 하나 이상의 객체들 을 선택적으로 서로 다른 데이터 보유 특성을 가지는 제1 메모리 장치 및 제2 메모리 장치 중 상기 제1 메모리 장치에 위치시키는 단계; 및
    상기 중간 표현에 기초하여 생성된 타겟 코드에 따라 상기 어플리케이션을 실행시키는 단계를 포함하는 전자 장치의 동작 방법.
  16. 제15항에 있어서,
    상기 제1 메모리 장치는 휘발성 메모리 장치이고, 상기 제2 메모리 장치는 비휘발성 메모리 장치 기반의 SSD이고,
    상기 제1 메모리 장치는 DRAM이고 상기 제2 메모리 장치는 복수의 플래시 메모리들을 포함하는 전자 장치의 동작 방법.
KR1020190159916A 2019-12-04 2019-12-04 전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법 KR102165928B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190159916A KR102165928B1 (ko) 2019-12-04 2019-12-04 전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190159916A KR102165928B1 (ko) 2019-12-04 2019-12-04 전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법

Publications (1)

Publication Number Publication Date
KR102165928B1 true KR102165928B1 (ko) 2020-10-14

Family

ID=72847407

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190159916A KR102165928B1 (ko) 2019-12-04 2019-12-04 전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법

Country Status (1)

Country Link
KR (1) KR102165928B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023013866A1 (ko) * 2021-08-02 2023-02-09 삼성전자주식회사 어플리케이션 최적화 방법 및 이를 지원하는 장치

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0762826B2 (ja) * 1991-02-27 1995-07-05 ディジタル イクイップメント コーポレイション 多言語最適化コンパイラ内のフォールディングメカニズムを構成する方法
KR100283412B1 (ko) * 1998-12-15 2001-03-02 김영환 프레임버퍼의 인터페이스 제어장치
JP2001134446A (ja) * 1999-11-04 2001-05-18 Nec Corp メモリ割り付け最適化システム、方法、及び記録媒体
KR20140063661A (ko) * 2011-09-02 2014-05-27 마이크로소프트 코포레이션 스크립트 코드를 가진 마크업 콘텐츠의 고속 프레젠테이션

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0762826B2 (ja) * 1991-02-27 1995-07-05 ディジタル イクイップメント コーポレイション 多言語最適化コンパイラ内のフォールディングメカニズムを構成する方法
KR100283412B1 (ko) * 1998-12-15 2001-03-02 김영환 프레임버퍼의 인터페이스 제어장치
JP2001134446A (ja) * 1999-11-04 2001-05-18 Nec Corp メモリ割り付け最適化システム、方法、及び記録媒体
KR20140063661A (ko) * 2011-09-02 2014-05-27 마이크로소프트 코포레이션 스크립트 코드를 가진 마크업 콘텐츠의 고속 프레젠테이션

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023013866A1 (ko) * 2021-08-02 2023-02-09 삼성전자주식회사 어플리케이션 최적화 방법 및 이를 지원하는 장치

Similar Documents

Publication Publication Date Title
US9323508B2 (en) Method and system for compiler optimization
US8386699B2 (en) Method for giving program commands to flash memory for writing data according to a sequence, and controller and storage system using the same
US20190258729A1 (en) Key-value storage device and operating method thereof
CN106802870B (zh) 一种高效的嵌入式系统芯片Nor-Flash控制器及控制方法
CN109739824B (zh) 日志获取方法及设备
JP2012099035A (ja) プロセッサの動作検証方法、プロセッサの動作検証装置、及びプロセッサの動作検証プログラム
KR102165928B1 (ko) 전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법
CN103106155B (zh) 存储器储存装置、存储器控制器与其数据传输方法
CN107977577B (zh) 访存指令访问检测方法及装置
US9086933B2 (en) System and method for launching callable functions
KR102150386B1 (ko) 전자 장치, 전자 장치의 컴파일링 방법 및 전자 장치의 동작 방법
US11960733B2 (en) Memory controller and method of operating the same
US8468327B2 (en) Processor test apparatus, processor test method, and processor test program
KR100831491B1 (ko) 어드레스 디코드
US7350109B2 (en) System and method for testing a memory using DMA
CN103871469A (zh) 非易失性存储装置、操作方法和具有其的数据处理系统
CN116324717A (zh) 具有早期释放的寄存器紧缩
CN114385070A (zh) 主机、数据存储装置、数据处理系统以及数据处理方法
US7539831B2 (en) Method and system for performing memory clear and pre-fetch for managed runtimes
US12001413B2 (en) Key-value storage device and operating method thereof
CN110968537B (zh) 一种基于pcie ssd的fpga搜索匹配方法
KR102514257B1 (ko) 제어 흐름 무결성 위반 탐지 장치 및 방법
KR102202211B1 (ko) 애플리케이션의 로딩 성능 개선을 위한 입출력 최적화 장치 및 방법
CN103294491A (zh) Bios刷新方法及系统
KR20100059666A (ko) 비휘발성 메모리 장치

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant