KR20170047957A - 반도체 장치의 동작 방법 및 반도체 시스템 - Google Patents

반도체 장치의 동작 방법 및 반도체 시스템 Download PDF

Info

Publication number
KR20170047957A
KR20170047957A KR1020150148715A KR20150148715A KR20170047957A KR 20170047957 A KR20170047957 A KR 20170047957A KR 1020150148715 A KR1020150148715 A KR 1020150148715A KR 20150148715 A KR20150148715 A KR 20150148715A KR 20170047957 A KR20170047957 A KR 20170047957A
Authority
KR
South Korea
Prior art keywords
code
interpreter
loop
intermediate representation
loop code
Prior art date
Application number
KR1020150148715A
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 KR1020150148715A priority Critical patent/KR20170047957A/ko
Priority to CN201610880639.2A priority patent/CN106610860A/zh
Priority to US15/292,608 priority patent/US20170115973A1/en
Publication of KR20170047957A publication Critical patent/KR20170047957A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/48Incremental compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

반도체 장치의 동작 방법 및 반도체 시스템이 제공된다. 반도체 장치의 동작 방법은 컴파일러(compiler)에 의해 생성된 중간 표현(Intermediate Representation, IR)에서 루프 코드(loop code)를 검색하고, 상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하고, 상기 컴파일러와 별도로 상기 루프 코드를 연산하기 위한 인터프리터 프레임워크를 생성하고, 상기 인터프리터 프레임워크(interpreter framework)는 상기 루프 코드를 연산하는 인터프리터(interpreter) 및 상기 연산의 중간 값을 저장하기 위한 인터프리터 프레임(interpreter frame)을 포함하고, 상기 인터프리터를 이용하여 상기 루프 코드를 연산하고, 상기 연산의 결과 값을 상기 인터프리터 프레임에 저장하고, 상기 중간 표현에서 상기 루프 코드를 상기 연산의 결과 값을 액세스하기 위한 액세스 코드로 치환하는 것을 포함한다.

Description

반도체 장치의 동작 방법 및 반도체 시스템{METHOD FOR OPERATING SEMICONDUCTOR DEVICE AND SEMICONDUCTOR SYSTEM}
본 발명은 반도체 장치의 동작 방법 및 반도체 시스템에 관한 것이다.
소스 코드를 컴파일 하여 생성한 타겟 코드의 수행 시간을 줄이기 위해 루프 또는 반복문을 최적화할 필요가 있다. 예를 들어, CR(chains of recurrences)에 기반한 루프 단순화(loop simplification) 기법은 루프를 단순화 하여 루프에 해당하는 타겟 코드의 수행 시간을 줄이는데 기여할 수 있다. 한편 CR(chains of recurrences)에 기반하지 않고도 루프를 최적화하기 위한 기술이 요구된다.
본 발명이 해결하고자 하는 기술적 과제는 루프의 반복 횟수가 루프 내의 유도 변수(induction variable) 이외의 다른 변수에 영향을 받을 때에도 루프의 최적화를 할 수 있는 반도체 장치의 동작 방법을 제공하는 것이다.
본 발명이 해결하고자 하는 다른 기술적 과제는 루프의 반복 횟수가 루프 내의 유도 변수(induction variable) 이외의 다른 변수에 영향을 받을 때에도 루프의 최적화를 할 수 있는 컴퓨터로 판독 가능한 기록 매체를 제공하는 것이다.
본 발명이 해결하고자 하는 다른 기술적 과제는 루프의 반복 횟수가 루프 내의 유도 변수(induction variable) 이외의 다른 변수에 영향을 받을 때에도 루프의 최적화를 할 수 있는 반도체 시스템을 제공하는 것이다.
본 발명이 해결하고자 하는 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 해당 기술 분야의 통상의 기술자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 달성하기 위한 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법은, 컴파일러(compiler)에 의해 생성된 중간 표현(Intermediate Representation, IR)에서 루프 코드(loop code)를 검색하고, 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하고, 컴파일러와 별도로 루프 코드를 연산하기 위한 인터프리터 프레임워크를 생성하고, 인터프리터 프레임워크(interpreter framework)는 루프 코드를 연산하는 인터프리터(interpreter) 및 연산의 중간 값을 저장하기 위한 인터프리터 프레임(interpreter frame)을 포함하고, 인터프리터를 이용하여 루프 코드를 연산하고, 연산의 결과 값을 인터프리터 프레임에 저장하고, 중간 표현에서 루프 코드를 연산의 결과 값을 액세스하기 위한 액세스 코드로 치환하는 것을 포함한다.
본 발명의 몇몇의 실시예에서, 상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것은, 상기 루프 코드가 가장 안쪽의 루프(innermost loop)에 해당하는지 여부, 상기 루프 코드가 하나의 기본 블록(basic block)으로 형성된 것인지 여부 및 상기 루프 코드가 단일의 프리헤더 블록(preheader block) 및 단일의 출구 블록(exit block)을 포함하는지 여부 중 적어도 하나를 판단하는 것을 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것은, 상기 루프 코드가 메모리 접근 코드 또는 함수 호출 코드를 미포함하는지 여부를 판단하는 것을 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 방법은, 상기 인터프리터 프레임워크를 생성하기 전에, 상기 루프 코드에 포함된 유도 변수(induction variable)의 초기 값을 결정하는 것을 더 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 유도 변수의 초기 값을 결정하는 것은, 상기 결정된 초기 값을 상기 인터프리터 프레임에 저장하는 것을 더 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 인터프리터는 상기 중간 표현에 포함된 코드의 연산자(operator)에 대응되는 확장 연산자(extended operator)를 이용하여 상기 루프 코드를 연산할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 인터프리터 프레임은 상기 컴파일러에 의해 사용되는 가상 레지스터와 별도로 메모리에 할당될 수 있다.
본 발명의 몇몇의 실시예에서, 상기 인터프리터 프레임워크는 매핑 테이블을 더 포함하고, 상기 매핑 테이블은 상기 인터프리터 프레임과 상기 가상 레지스터 사이의 매핑 관계를 저장할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 인터프리터 프레임은 4 바이트의 사이즈를 갖는 복수의 단위프레임을 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 인터프리터 프레임은 제1 인터프리터 프레임 및 상기 제1 인터프리터 프레임에 연속되어 배치된 제2 인터프리터 프레임을 포함하고, 상기 제1 인터프리터 프레임 및 상기 제2 인터프리터 프레임은 하나의 값 또는 가상 레지스터에 대응될 수 있다.
본 발명의 몇몇의 실시예에서, 상기 액세스 코드는 상기 인터프리터 프레임에 저장된 상기 연산의 결과 값을, 상기 인터프리터 프레임에 대응되는 상기 가상 레지스터에 저장하는 코드를 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 루프 코드는 하나 이상의 유도 변수 및 하나 이상의 비 유도 변수를 포함하고, 상기 루프 코드의 반복 횟수는 상기 하나 이상의 유도 변수 및 상기 하나 이상의 비 유도 변수 모두에 의해 결정될 수 있다.
본 발명의 몇몇의 실시예에서, 상기 루프 코드의 반복 조건문은 상기 하나 이상의 유도 변수 및 상기 하나 이상의 비 유도 변수를 모두 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 인터프리터는 컴파일 타임 중에 상기 루프 코드를 연산할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 방법은 상기 컴파일러에 의해 상기 치환된 중간 표현을 컴파일하여 타겟 코드를 생성하는 것을 더 포함할 수 있다.
상기 기술적 과제를 달성하기 위한 본 발명의 다른 실시예에 따른 반도체 장치의 동작 방법은, 컴파일러(compiler)를 이용하여 제1 컴파일을 수행하여 소스 코드로부터 중간 표현(Intermediate Representation, IR)을 생성하고, 중간 표현에서 루프 코드(loop code)를 검색하고, 루프 코드에 포함된 중간 표현 코드에 대응되고, 중간 표현 코드의 연산자에 대응하는 확장 연산자(extended operator)를 포함하는 확장 중간 표현(Extended Intermediate Representation, EIR) 코드를 생성하고, 확장 연산자를 실행시키고 컴파일러와 별도로 실행되는 인터프리터를 이용하여 확장 중간 표현 코드를 연산하고, 중간 표현에서 루프 코드를 연산의 결과 값을 액세스하기 위한 액세스 코드로 치환하고, 컴파일러를 이용하여 중간 표현을 제2 컴파일하는 것을 포함한다.
본 발명의 몇몇의 실시예에서, 상기 확장 중간 표현 코드는 상기 중간 표현 코드를 더 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 확장 중간 표현 코드는 상기 컴파일러에 의해 사용되는 가상 레지스터와 별도로 메모리에 할당된 인터프리터 프레임(interpreter frame) 정보를 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 인터프리터는 상기 인터프리터 프레임 정보를 이용하여 상기 확장 중간 표현 코드를 연산할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 액세스 코드는 상기 연산의 결과 값이 저장된 상기 인터프리터 프레임에 대응되는 가상 레지스터 정보를 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 방법은, 상기 확장 중간 표현 코드를 생성하기 전에, 상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것을 더 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것은, 상기 루프 코드가 가장 안쪽의 루프(innermost loop)에 해당하는지 여부, 상기 루프 코드가 하나의 기본 블록(basic block)으로 형성된 것인지 여부 및 상기 루프 코드가 단일의 프리헤더 블록(preheader block) 및 단일의 출구 블록(exit block)을 포함하는지 여부 중 적어도 하나를 판단하는 것을 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것은, 상기 루프 코드가 메모리 접근 코드 또는 함수 호출 코드를 미포함하는지 여부를 판단하는 것을 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 루프 코드는 하나 이상의 유도 변수 및 하나 이상의 비 유도 변수를 포함하고, 상기 루프 코드의 반복 횟수는 상기 하나 이상의 유도 변수 및 상기 하나 이상의 비 유도 변수 모두에 의해 결정될 수 있다.
상기 기술적 과제를 달성하기 위한 본 발명의 또 다른 실시예에 따른 반도체 장치의 동작 방법은, 컴파일러(compiler)를 이용하여 제1 컴파일을 수행하여 가상 레지스터 정보를 포함하는 중간 표현(Intermediate Representation, IR)을 생성하고, 중간 표현에서 루프 코드(loop code)를 검색하고, 루프 코드에 포함된 중간 표현 코드에 대응되고, 가상 레지스터와 별도로 메모리에 할당된 인터프리터 프레임(interpreter frame) 정보를 포함하는 확장 중간 표현(Extended Intermediate Representation, EIR) 코드를 생성하고, 인터프리터 프레임을 액세스하고 컴파일러와 별도로 실행되는 인터프리터를 이용하여 확장 중간 표현 코드를 연산하고, 연산의 결과 값을 인터프리터 프레임에 저장하고, 중간 표현에서 루프 코드를 연산의 결과 값을 액세스하기 위한 액세스 코드로 치환하고, 컴파일러를 이용하여 중간 표현을 제2 컴파일하는 것을 포함한다.
본 발명의 몇몇의 실시예에서, 상기 확장 중간 표현 코드는 상기 중간 표현 코드를 더 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 확장 중간 표현 코드는 상기 중간 표현 코드의 연산자에 대응하는 확장 연산자(extended operator)를 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 인터프리터는 확장 연산자를 이용하여 상기 확장 중간 표현 코드를 연산할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 액세스 코드는 상기 인터프리터 프레임에 저장된 상기 연산의 결과 값을, 상기 인터프리터 프레임에 대응되는 상기 가상 레지스터에 저장하는 코드를 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 방법은, 상기 확장 중간 표현 코드를 생성하기 전에, 상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것을 더 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것은, 상기 루프 코드가 가장 안쪽의 루프(innermost loop)에 해당하는지 여부, 상기 루프 코드가 하나의 기본 블록(basic block)으로 형성된 것인지 여부 및 상기 루프 코드가 단일의 프리헤더 블록(preheader block) 및 단일의 출구 블록(exit block)을 포함하는지 여부 중 적어도 하나를 판단하는 것을 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것은, 상기 루프 코드가 메모리 접근 코드 또는 함수 호출 코드를 미포함하는지 여부를 판단하는 것을 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 루프 코드는 하나 이상의 유도 변수 및 하나 이상의 비 유도 변수를 포함하고, 상기 루프 코드의 반복 횟수는 상기 하나 이상의 유도 변수 및 상기 하나 이상의 비 유도 변수 모두에 의해 결정될 수 있다.
상기 기술적 과제를 달성하기 위한 본 발명의 일 실시예에 따른 컴퓨터로 판독 가능한 기록 매체는, 프로세서로 하여금, 컴파일러(compiler)에 의해 생성된 중간 표현(Intermediate Representation, IR)에서 루프 코드(loop code)를 검색하고, 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하고, 컴파일러와 별도로 루프 코드를 연산하기 위한 인터프리터 프레임워크를 생성하고, 인터프리터 프레임워크(interpreter framework)는 루프 코드를 연산하는 인터프리터(interpreter) 및 연산의 중간 값을 저장하기 위한 인터프리터 프레임(interpreter frame)을 포함하고, 인터프리터를 이용하여 루프 코드를 연산하고, 연산의 결과 값을 인터프리터 프레임에 저장하고, 중간 표현에서 루프 코드를 연산의 결과 값을 액세스하기 위한 액세스 코드로 치환하는 것을 포함하는 동작을 수행하도록 하는 인스트럭션(insrtuction)을 포함한다.
상기 기술적 과제를 달성하기 위한 본 발명의 일 실시예에 따른 반도체 시스템은, 소스 코드로부터 중간 표현(Intermediate Representation, IR)을 생성하는 컴파일러; 및 중간 표현의 루프 코드(loop code)에 포함된 중간 표현 코드에 대응되고, 중간 표현 코드의 연산자에 대응하는 확장 연산자(extended operator)를 사용하는 확장 중간 표현(Extended Intermediate Representation, EIR) 코드를 입력받는 인터프리터(interpreter)를 포함하고, 인터프리터는 확장 중간 표현 코드를 실행하여 루프 코드를 연산하고, 중간 표현에서 루프 코드는 연산의 결과 값을 액세스하기 위한 액세스 코드로 치환된다.
본 발명의 몇몇의 실시예에서, 상기 반도체 시스템은 상기 컴파일러에 의해 사용되는 가상 레지스터와 별도로 메모리에 할당된 인터프리터 프레임(interpreter frame)을 더 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 반도체 시스템은 상기 인터프리터 프레임과 상기 가상 레지스터 사이의 매핑 관계를 저장하는 매핑 테이블을 더 포함
본 발명의 몇몇의 실시예에서, 상기 루프 코드에 해당하는 상기 확장 중간 표현 코드는 복수의 확장 중간 표현 코드를 포함하고, 상기 인터프리터는 상기 복수의 확장 중간 표현 코드를 순차적으로 실행하여 상기 루프 코드를 연산할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 인터프리터는 컴파일 타임 중에 상기 루프 코드를 연산할 수 있다.
본 발명의 몇몇의 실시예에서, 상기 컴파일러는 상기 치환된 중간 표현으로부터 타겟 코드를 생성할 수 있다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
도 1은 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 개략도이다.
도 2는 본 발명의 일 실시예에 따른 인터프리터 프레임워크를 설명하기 위한 개략도이다.
도 3은 본 발명의 일 실시예에 따른 확장 중간 표현 코드를 설명하기 위한 개략도이다.
도 4 내지 도 11은 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 도면들이다.
도 12는 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 순서도이다.
도 13은 본 발명의 다른 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 순서도이다.
도 14는 본 발명의 실시예에 따른 반도체 장치의 동작 방법 및 반도체 시스템이 적용될 수 있는 전자 시스템의 블록도이다.
도 15 내지 도 17은 본 발명의 몇몇 실시예들에 따른 반도체 장치의 동작 방법을 적용할 수 있는 예시적인 반도체 시스템들이다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 것이며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 도면에서 층 및 영역들의 상대적인 크기는 설명의 명료성을 위해 과장된 것일 수 있다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
하나의 소자(elements)가 다른 소자와 "접속된(connected to)" 또는 "커플링된(coupled to)" 이라고 지칭되는 것은, 다른 소자와 직접 연결 또는 커플링된 경우 또는 중간에 다른 소자를 개재한 경우를 모두 포함한다. 반면, 하나의 소자가 다른 소자와 "직접 접속된(directly connected to)" 또는 "직접 커플링된(directly coupled to)"으로 지칭되는 것은 중간에 다른 소자를 개재하지 않은 것을 나타낸다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다. "및/또는"은 언급된 아이템들의 각각 및 하나 이상의 모든 조합을 포함한다.
비록 제1, 제2 등이 다양한 소자, 구성요소 및/또는 섹션들을 서술하기 위해서 사용되나, 이들 소자, 구성요소 및/또는 섹션들은 이들 용어에 의해 제한되지 않음은 물론이다. 이들 용어들은 단지 하나의 소자, 구성요소 또는 섹션들을 다른 소자, 구성요소 또는 섹션들과 구별하기 위하여 사용하는 것이다. 따라서, 이하에서 언급되는 제1 소자, 제1 구성요소 또는 제1 섹션은 본 발명의 기술적 사상 내에서 제2 소자, 제2 구성요소 또는 제2 섹션일 수도 있음은 물론이다.
본 명세서에서 사용된 용어는 실시예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다. 명세서에서 사용되는 "포함한다(comprises)" 및/또는 "포함하는(comprising)"은 언급된 구성요소, 단계, 동작 및/또는 소자는 하나 이상의 다른 구성요소, 단계, 동작 및/또는 소자의 존재 또는 추가를 배제하지 않는다.
다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어(기술 및 과학적 용어를 포함)는 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 사용될 수 있을 것이다. 또 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다.
도 1은 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 개략도이다.
도 1을 참조하면, 본 발명의 일 실시예에 따른 반도체 시스템(1)은 소스 코드를 입력 받아 타겟 코드를 출력하고, 프론트 엔드(50), 인터프리터 프레임워크(100) 및 백 엔드(150)를 포함한다.
소스 코드는 프로그래밍 언어로 작성된 코드이다. 즉, 소스 코드는 예컨대 C 언어와 같은 컴파일 언어(compliled language)로 작성될 수 있다.
타겟 코드는 소스 코드를 컴퓨팅 시스템에서 실행시킬 수 있는 형태, 예컨대 바이너리(binary) 형태를 갖는 코드이다. 예를 들어, 타겟 코드는 오브젝트 코드(object code) 또는 머신 코드(machine code)일 수 있다. 타켓 코드는 타켓 플랫폼, 즉 코드가 실행되는 플랫폼에 따라 다양한 형태로 표현될 수 있다.
프론트 엔드(50)는 소스 코드를 분석하여 중간 표현(Intermediate Representation, IR)(20)을 생성한다. 중간 표현은 프로그램의 내부적인 표현(internal representation)을 말한다. 또한, 프론트 엔드(50)는 심볼 테이블(symbol table)과, 소스 코드 상의 여러 심볼을 로케이션(location), 타입(type), 스코프(scope) 등과 같은 정보와 매핑시키는 데이터 구조 등을 관리한다.
인터프리터 프레임워크(100)는 프론트 엔드(50)로부터 생성된 중간 표현(20)을 입력받는다. 인터프리터 프레임워크(100)는 중간 표현(20)에서 루프 코드(loop code)를 검색하고, 루프 코드의 결과 값을 연산한 후, 루프 코드를 연산한 결과 값을 액세스하는 액세스 코드로 치환한 중간 표현(22)을 출력한다.
인터프리터 프레임워크(100)는 루프 코드를 연산하기 위해 인터프리터(110)를 이용한다. 인터프리터(110)는 중간 표현(20)에 대응되는 확장 중간 표현(Extended Intermediate Representation, EIR)(10)을 실행하여 연산을 하게 되는데, 확장 중간 표현(10)은 프론트 엔드(50) 및 백 엔드(150)와 같은 컴파일러 영역과 구분되는 인터프리터 영역에서의 처리를 위한 표현을 말한다. 이에 관해서는 도 2 및 도 3과 관련하여 상세하게 후술하도록 한다.
백 엔드(150)는 프론트 엔드(50)로부터 생성된 중간 표현(20)이나, 특히 본 발명의 다양한 실시예에 따른 인터프리터 프레임워크(100)로부터 생성된 중간 표현(22)으로부터 프로그램 정보를 수집하고, 중간 표현(20, 22)에 대해 최적화 작업을 수행한다. 예를 들어, 최적화 작업은 인라인 확장(inline expansion), 데드 코드 제거(dead code elimination), 루프 변환(loop transformation), 레지스터 할당(register alloction) 등의 작업을 포함할 수 있다. 또한, 백 엔드(150)는 이와 같이 최적화 작업이 완료된 중간 표현(20, 22)으로부터 타겟 코드, 즉, 머신 코드를 생성하여 출력한다.
도 2는 본 발명의 일 실시예에 따른 인터프리터 프레임워크를 설명하기 위한 개략도이다.
도 2를 참조하면, 본 발명의 일 실시예에 따른 인터프리터 프레임워크(100)는 인터프리터(110), 확장 중간 표현 코드 리스트(120), 인터프리터 프레임(130) 및 매핑 테이블(140)을 포함한다.
인터프리터(110)는 루프 코드를 연산한다. 앞서 설명한 바와 같이, 루프 코드는 프론트 엔드(50)에서 생성된 중간 표현(20)에 포함되어 있다. 특히, 본 발명의 다양한 실시예에서, 인터프리터(110)는 중간 표현(20)을 직접 해독하지 않고, 중간 표현(20)에 대응되는 확장 중간 표현(10)을 해독할 수 있다. 이를 위해 인터프리터(110)는 확장 중간 표현(10)에 포함된 코드들을 해독하기 위한 확장 연산자 세트(114)를 포함할 수 있다. 확장 연산자란 중간 표현(20)에 포함된 코드, 즉, 중간 표현 코드의 연산자에 대응되는 확장 중간 표현(10)에 포함된 코드, 즉, 확장 중간 표현 코드의 연산자를 의미한다. 이와 같은 확장 연산자들을 포함하는 확장 연산자 세트(114)에 대해서는 도 8과 관련하여 후술하도록 한다.
인터프리터(110)는 확장 중간 표현(10), 구체적으로는 확장 중간 표현 코드들을 포함하는 확장 중간 표현 코드 리스트(120)를 입력받을 수 있다. 즉, 인터프리터(110)는 복수의 확장 중간 표현 코드들을 입력받을 수 있고, 인터프리터(110)는 이들 복수의 확장 중간 표현 코드들을 순차적으로 실행하여 최종적으로 루프 코드를 연산할 수 있다. 확장 중간 표현(10)에 대한 상세한 구조는 도 3과 관련하여 후술하도록 한다.
인터프리터(110)는 루프 코드를 연산한 결과 값(30)을 생성한다. 결과 값(30)은 후술할 인터프리터 프레임(130)에 저장되었다가, 중간 표현(20)의 루프 코드를 치환할 액세스 코드를 생성하기 위해 사용된다. 액세스 코드는, 예를 들어, 결과 값(30)이 저장된 인터프리터 프레임(130)에 대응되는 가상 레지스터에, 결과 값(30)을 저장하는 코드로 생성될 수 있다. 액세스 코드에 대해서는 도 10과 관련하여 후술하도록 한다.
본 발명의 몇몇의 실시예에서, 인터프리터(110)는 컴파일러와 별도로 실행될 수 있다. 구체적으로, 인터프리터(110)를 포함하는 인터프리터 프레임워크(110)는, 중간 표현(20)에서 값으로 치환 가능한 루프 코드가 발견된 경우에 실행될 수 있다. 반대로 말하면 중간 표현(20)에서 값으로 치환 가능한 루프 코드가 발견되지 않는 경우에는 인터프리터(110)를 비롯한 인터프리터 프레임워크(100)는 컴파일 타임 동안 실행되지 않을 수도 있다.
값으로 치환 가능한 루프 코드는 미리 정해진 조건에 부합하는 루프 코드를 의미한다. 본 발명의 몇몇의 실시예에서, 중간 표현(20)에 발견된 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것은, 루프 코드가 가장 안쪽의 루프(innermost loop)에 해당하는지 여부, 루프 코드가 하나의 기본 블록(basic block)으로 형성된 것인지 여부(즉, 분기(branch) 코드를 미포함하는지 여부) 및 루프 코드가 단일의 프리헤더 블록(preheader block) 및 단일의 출구 블록(exit block)을 포함하는지 여부 중 적어도 하나를 판단하는 것을 포함할 수 있다. 한편, 본 발명의 몇몇의 실시예에서, 중간 표현(20)에 발견된 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것은, 루프 코드가 메모리 접근 코드 또는 함수 호출 코드를 미포함하는지 여부를 판단하는 것을 포함할 수 있다.
본 발명의 몇몇의 실시예에서, 인터프리터(110)는 컴파일 타임 중에 루프 코드를 연산할 수 있다. 즉, 인터프리터(110)는 컴파일러의 프론트 엔드(50)와 백 엔드(150) 사이에 개재될 수 있다. 구체적으로 인터프리터(110)는 프론트 엔드(50)에서 생성된 중간 표현(20)을 입력 받아 루프 코드에 해당하는 중간 표현 코드를 액세스 코드로 치환한 후, 치환된 중간 표현(22)을 출력할 수 있는데, 치환된 중간 표현(22)은 백 엔드(150)에서 컴파일러에 의해 처리될 수 있다. 그 최종 결과로서 타겟 코드가 생성될 수 있다.
이제 도 2를 계속 참조하여, 인터프리터 프레임(130) 및 매핑 테이블(140)에 대해 설명하도록 한다.
인터프리터 프레임(130)은 인터프리터(110)가 루프 코드를 연산하기 위해 사용하는 저장 공간이다. 즉, 인터프리터(110)는 확장 중간 표현 코드를 연산하기 위해 필요한 변수의 초기 값, 연산 중에 사용하는 중간 값, 연산이 완료된 후 생성되는 최종 값 등을 인터프리터 프레임(130)에 라이트(write)하거나 인터프리터 프레임(130)으로부터 리드(read)할 수 있다.
인터프리터 프레임(130)은 컴파일러에 의해 사용되는 가상 레지스터(230)와 구분된다. 본 발명의 몇몇의 실시예에서, 인터프리터 프레임(130)은 가상 레지스터(230)와는 별도로 메모리에 할당될 수 있다. 중간 표현 코드가 가상 레지스터 정보를 포함한다면, 중간 표현 코드에 대응하는 확장 중간 표현 코드는, 중간 표현 코드에서 사용된 가상 레지스터에 대응되도록 할당된 인터프리터 프레임 정보를 포함한다.
인터프리터 프레임(130)은 복수의 단위 프레임들을 포함하고, 각각의 단위 프레임들은 일정 크기의 사이즈를 가질 수 있다. 본 발명의 몇몇의 실시예에서, 각각의 단위 프레임들은 4 바이트의 사이즈를 가질 수 있으나, 본 발명의 범위가 이에 한정되는 것은 아니다.
단위 프레임들의 사이즈가 4 바이트라고 가정한다면, 만일 인터프리터(110)가 처리하는 피연산자의 사이즈가 8 바이트 또는 16 바이트인 경우 연속되어 배치된 복수의 단위 프레임들을 하나의 값 또는 가상 레지스터에 대응시킬 수 있다. 예를 들어, 인터프리터 프레임(110)이 제1 단위 프레임 및 제1 단위 프레임에 연속되어 배치된 제2 단위 프레임을 포함하는 경우, 제1 단위 프레임 및 제2 단위 프레임은 하나의 값 또는 가상 레지스터에 대응될 수 있다.
매핑 테이블(140)은 인터프리터 프레임(130)과 가상 레지스터(230) 사이의 매핑 관계를 저장한다. 매핑 테이블(140)의 상세한 구조에 대해서는 도 7과 관련하여 후술하도록 한다. 본 발명의 몇몇의 실시예에서, 매핑 테이블(140)은 인터프리터(110)가 액세스할 수 있는 임의의 메모리 공간 또는 스토리지 공간에 저장될 수 있다.
도 3은 본 발명의 일 실시예에 따른 확장 중간 표현 코드를 설명하기 위한 개략도이다.
도 3을 참조하면, 중간 표현(20)과 확장 중간 표현(10)이 함께 도시되어 있다.
중간 표현(20)은 컴파일러에 의해 프론트 엔드(15)에서 생성된 것으로, 연산자(24) 및 가상 레지스터 정보(또는 가상 레지스터 넘버)(26)를 포함하는 중간 표현 코드를 포함한다. 컴파일러는 중간 표현(20)을 연산하기 위해 필요한 변수의 초기 값, 연산 중에 사용하는 중간 값, 연산이 완료된 후 생성되는 최종 값 등을 처리하기 위해 가상 레지스터(230)를 이용한다.
확장 중간 표현(10)은 중간 표현(20)에 대응되어 생성된 것으로, 확장 연산자(14) 및 인터프리터 프레임 정보(또는 인터프리터 프레임 넘버)(16)를 포함하는 확장 중간 표현 코드를 포함한다. 인터프리터는 확장 중간 표현(10)을 연산하기 위해 필요한 변수의 초기 값, 연산 중에 사용하는 중간 값, 연산이 완료된 후 생성되는 최종 값 등을 처리하기 위해 인터프리터 프레임(130)을 이용한다.
본 발명의 몇몇의 실시예에서, 확장 중간 표현(10)은 원래의 중간 표현(20)을 포함할 수 있다. 즉, 확장 중간 표현(10)은 중간 표현(12)를 포함하고 있을 수 있다.
도 2와 관련하여 설명된 바와 같이, 가상 레지스터(230)와 인터프리터 프레임(130) 사이의 매핑 관계는 매핑 테이블(140)에 의해 관리될 수 있다.
도 4 내지 도 11은 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 도면들이다.
도 4를 참조하면, 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법에 의해 처리되는 소스 코드를 C 언어를 이용하여 나타낸 것이다.
소스 코드는 정수형 변수 m 및 n을 선언하고, 루프 코드로서 "while" 문을 포함하고, 마지막으로 변수 n 값을 리턴하는 코드를 포함한다. 여기서 변수 m은 유도 변수(induction variable)에 해당되며, n은 단순 로컬 변수(local variable)에 해당된다.
주목할 점은, 소스 코드에서 "while"의 반복 조건문은 "m < n"을 포함하고, 변수 m은 "while" 루프 내에서 값이 증가하는 유도 변수이고, 변수 n은 "while" 루프 내에서 변수 m의 영향을 받아 그 값이 변한다는 점이다. 즉, 도 4의 소스 코드는 유도 변수 m 및 비 유도 변수 n을 포함하고, 루프 "while"의 반복 횟수는 유도 변수 m 뿐만 아니라 비 유도 변수 n에 의해서도 영향을 받는다. 다시 말해서 루프 "while"의 반복 횟수는 유도 변수 m 및 비 유도 변수 n 모두에 의해 결정된다.
CR(chains of recurrences)에 기반한 루프 단순화(loop simplification) 기법은 루프 코드의 반복 횟수가 루프 내의 유도 변수 이외의 다른 변수에 영향을 받을 때에는 적용할 수 없다. 그렇지만 본 발명의 다양한 실시예에 따른 반도체 장치의 동작 방법 및 반도체 시스템에 따르면, 이와 같이 루프 코드의 반복 횟수가 루프 내의 유도 변수 이외의 다른 변수에 영향을 받는 경우에도 루프 코드를 결과 값으로 치환하는 것이 가능하기 때문에, 루프에 해당하는 타겟 코드의 수행 시간을 효과적으로 단축시킬 수 있는 유리한 효과가 발생한다.
도 5를 참조하면, 도 5에 도시된 코드는 도 4의 소스 코드를 컴파일하여 생성한 중간 표현(20), 즉, 중간 표현 코드들이다.
"v100", "v101", "v102", "v103"은 아직 실제 메모리 할당이 이루어지지 않은 가상 레지스터 번호들이고, "Mul", "Sub", "Add", "BLT"는 중간 표현(20)에서 사용되는 연산자들이다.
통상의 경우에는 프론트 엔드(50)로부터 도 5의 중간 표현(20) 코드가 생성된 후, 백 엔드(150)에서 가상 레지스터들을 실제 메모리 공간에 매핑하고 최종 타겟 코드를 생성하지만, 본 발명의 다양한 실시예에서는 먼저 도 5의 코드에서 값으로 치환 가능한 루프 코드가 있는지 검색한다. 즉, 값으로 치환 가능한 루프 코드가 있다면, 해당 루프 코드를 제거하고 루프 코드의 연산 결과 값을 액세스하는 액세스 코드를 삽입한 중간 표현(22)을 백 엔드(150)에 전달한다.
도 5의 라벨 "L1:"으로 시작하는 루프는 가장 안쪽의 루프(innermost loop)에 해당하고, 하나의 기본 블록(basic block)으로 형성된 것이고, 단일의 프리헤더 블록(preheader block) 및 단일의 출구 블록(exit block)을 포함한다. 또한 루프 내에 메모리 접근 코드 또는 함수 호출 코드를 포함하고 있지 않으므로 본 발명의 다양한 실시예에 따른 인터프리터 프레임워크(100)에 의해 값으로 치환될 수 있는 루프에 해당된다.
따라서 중간 표현(20)을 인터프리터(110)가 처리할 수 있는 확장 중간 표현(10)으로 변환한다. 이와 같은 변환 작업은 크게 "v100", "v101", "v102", "v103"과 같은 가상 레지스터에 대응되는 인터프리터 프레임(130)을 할당하고, "Mul", "Sub", "Add", "BLT"와 같은 연산자에 대응되는 확장 연산자를 선택하는 것을 포함한다.
도 6을 참조하면, "F[i]"는 인터프리터 프레임(130)을 나타낸다. 설명의 편의를 위해 인터프리터 프레임(130)은 인덱스 i가 0부터 순차적으로 증가하는 것으로 도시하였으나, 인터프리터 프레임(130)의 구현 목적에 따라 세부적인 구조는 달라질 수 있다.
도 5의 중간 표현(20)의 가상 레지스터 넘버를 인터프리터 프레임 넘버로 변환하기 위해, 인터프리터 프레임(F[0], F[1], F[2], F[3])은 각각 가상 레지스터(v100, v101, v102, v103)에 대응되도록 할당될 수 있다. 또한 도 5의 중간 표현(20)에서는 가상 레지스터(v104, v105)를 사용하지 않으므로, 가상 레지스터(v104, v105)에 대응하는 인터프리터 프레임은 할당되지 않았다.
이어서 도 7을 참조하면, 매핑 테이블(140)은 가상 레지스터 넘버(VRN) 칼럼 및 인터프리터 프레임 넘버(IFN) 칼럼을 포함하며, 앞서 형성한 가상 레지스터(230)와 인터프리터 프레임(130) 사이의 매핑 관계를 저장한다. 도 7에서는 테이블 형태의 데이터 구조를 이용하여 가상 레지스터(230)와 인터프리터 프레임(130) 사이의 매핑 관계를 저장하는 매핑 테이블(140)을 도시하였으나, 매핑 테이블(140)이 구현되는 구체적인 데이터 구조의 형태는 구현 목적에 따라 얼마든지 변형될 수 있다.
도 8을 참조하면, 본 발명의 일 시예에 따른 인터프리터(110)는 코어(112) 및 확장 연산자 세트(114)를 포함할 수 있다.
코어(112)는 확장 중간 표현(20)을 해독하고, 확장 중간 표현 코드에 포함된 연산자와 피연산자를 이용하여 루프 코드를 연산한다.
확장 연산자 세트(114)는 중간 표현(20)에 포함된 연산자에 대응하고, 인터프리터(110)가 연산할 수 있는 확장 연산자들을 포함한다. 예를 들어, 중간 표현(20)의 "Mul", "Div", "Add", "Sub", "Mov", "Const", "BLT" 등의 연산자들은 확장 연산자 세트의 "IMul", "IDiv", "IAdd", "ISub", "IMov", "IConst", "IBLT" 등의 확장 연산자들에 각각 대응될 수 있다.
본 실시예에서는 중간 표현(20)의 연산자와 확장 중간 표현(10)의 확장 연산자를 구분하기 위해 서로 다른 명칭(예컨대 'I'를 추가한 명칭)을 사용하였으나, 이와 같은 표현은 설명을 위해 예시적인 것에 불과하며, 확장 연산자들의 명칭은 다른 방식으로 구현될 수 있다. 예컨대 확장 연산자들의 명칭은 중간 표현(20)의 연산자들의 명칭과 동일하도록 구현될 수도 있다.
도 9를 참조하면, 도 9에 도시된 코드는 도 5의 중간 표현(20)에 대응되는 확장 중간 표현(10), 즉, 확장 중간 표현들이다.
도 5의 중간 표현(20)과 비교하면, "v100", "v101", "v102", "v103"의 가상 레지스터 넘버들은 "F[0]", "F[1]", F[2]", "F[3]"의 인터프리터 프레임 넘버로 변환되었고, "Mul", "Sub", "Add", "BLT"의 연산자들은 "IMul", "ISub", "IAdd", "IBLT"의 확장 연산자들로 변환되었다.
인터프리터(110)는 이와 같은 확장 중간 표현(20)을 연산하여 루프 코드의 최종 결과 값(30)을 생성한다.
도 10을 참조하면, 본 발명의 일 실시예에 따른 액세스 코드가 도시되어 있다.
액세스 코드는 중간 표현(20)에서 루프 코드를 치환하기 위한 코드로서, 인터프리터(110)에 의해 연산된 결과 값(30)을 액세스하기 위한 코드를 포함한다. 구체적으로 도 9의 확장 중간 표현(10)을 이용하여 인터프리터(110)가 루프 코드를 연산한 결과, 그 결과 값(30)이 "10000"으로 생성되었다고 가정하자. 값 "10000"은 인터프리터(110)에 의해 가상 레지스터(v103)에 대응하는 인터프리터 프레임(F[3])에 저장된다.
이후, 중간 표현(20)에서 루프 코드는 제거되고, 예컨대 액세스 코드(330)와 같은 구문이 삽입된다. 본 실시예에서, 액세스 코드(330)는 "10000"이라는 상수 값을 가상 레지스터(v103)에 저장하도록 하는 코드인 "v103 MovConst 10000"로 구현되었다. 그렇지만 본 발명의 범위는 이에 제한되지 않고, 액세스 코드의 구체적인 형태는 구현 목적에 따라 달라질 수 있다.
도 11을 함께 참조하면, 왼쪽의 중간 표현(20)에서 루프 코드가 제거되고, 오른쪽의 중간 표현(22)에서 결과 값(w2)을 메모리에 저장하는 코드 "str w2, [x20, #60]"가 삽입된 것을 알 수 있다.
이와 같이, 루프 코드를 결과 값으로 치환하는 방식으로 루프에 해당하는 타겟 코드의 수행 시간을 효과적으로 단축시킬 수 있다. 또한, 앞서 설명한 바와 같이, 본 발명의 다양한 실시예에 따른 반도체 장치의 동작 방법 및 반도체 시스템에 따르면, 이와 같이 루프 코드의 반복 횟수가 루프 내의 유도 변수 이외의 다른 변수에 영향을 받는 경우에도 루프 코드를 결과 값으로 치환하는 것이 가능하다.
도 12는 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 순서도이다.
도 12를 참조하면, 본 발명의 일 실시예에 따른 반도체 장치의 동작 방법은, 먼저 루프 코드가 값으로 치환 가능한 것인지 여부를 판단(S1201)한다. 상기 판단하는 것은 루프 코드가 가장 안쪽의 루프(innermost loop)에 해당하는지 여부, 루프 코드가 하나의 기본 블록(basic block)으로 형성된 것인지 여부(즉, 분기(branch) 코드를 미포함하는지 여부) 및 루프 코드가 단일의 프리헤더 블록(preheader block) 및 단일의 출구 블록(exit block)을 포함하는지 여부 중 적어도 하나를 판단하는 것을 포함할 수 있다.
다음으로, 루프 코드가 그 내부에 메모리 접근 코드 또는 함수 호출 코드를 미포함하는지 여부를 판단(S1203)한다.
이후, 루프 코드에 포함된 유도 변수(induction variable)의 초기 값을 결정(S1205)한다. 본 발명의 몇몇의 실시예에서, 유도 변수의 초기 값을 결정하는 것은, 결정된 초기 값을 인터프리터 프레임(130)에 저장하는 것을 더 포함할 수 있다.
다음으로, 인터프리터 프레임워크(100)를 초기화(S1207)한다. 본 발명의 몇몇의 실시예에서, 상기 초기화하는 것은 가상 레지스터(230)와 인터프리터 프레임(130) 사이의 매핑을 수행하고, 인터프리터 프레임(130)을 임의의 상수 값으로 초기화하는 것을 포함할 수 있다.
이후, 인터프리터 프레임워크(100)의 인터프리터(110)를 이용하여 루프 코드를 연산(S1209)하고, 연산의 결과 값(30)을 인터프리터 프레임(130)에 저장한 후, 중간 표현(20)에서 루프 코드를 제거(S1211)한다. 상기 제거하는 것은 중간 표현(20)에서 루프 코드를 연산의 결과 값(30)을 액세스하기 위한 액세스 코드로 치환하는 것을 포함할 수 있다.
도 13은 본 발명의 다른 실시예에 따른 반도체 장치의 동작 방법을 설명하기 위한 순서도이다.
도 13을 참조하면, 본 발명의 다른 실시예에 따른 반도체 장치의 동작 방법은, 인터프리터 프레임워크(100)에 확장 중간 표현(10)의 중간 표현 코드를 추가(S1301)하고, 확장 중간 표현 코드들이 인터프리터 프레임워크(100)에서 지원되는 코드들인지 여부를 판단한다. 만일 확장 중간 표현 코드들이 인터프리터 프레임워크(100)에서 지원되지 않는 경우에는 에러 메시지를 출력하고 인터프리터 프레임워크(100)의 동작을 중단(S1303)한다.
확장 중간 표현 코드들이 인터프리터 프레임워크(100)에서 지원되는지 검사하면서 루프 코드의 모든 중간 표현 코드들을 인터프리터 프레임워크(100)에 추가(S1305)한다.
이후 인터프리터 프레임을 초기화(S1307)하고, 확장 중간 표현 코드들이 연산 가능한지 여부를 판단(S1309)한다. 만일 확장 중간 표현 코드들이 초기화 실패 등을 이유로 연산 불가능한 경우에는 에러 메시지를 출력하고 인터프리터 프레임워크(100)의 동작을 중단(S1311)한다.
다음으로, 인터프리터(110)를 이용하여 루프 코드 내의 각각의 확장 중간 표현 코드들을 처리(S1311)한다. 이 때 루프 코드의 출구 조건(exit condition)을 만족하는지 여부를 검사(S1313)하면서 처리한다.
루프 코드의 출구 조건(exit condition)을 만족하는 경우, 즉, 루프의 반복이 완료된 경우, 루프 코드 연산의 결과 값(30)을 획득(S1315)한다.
본 발명의 다양한 실시예에 따른 반도체 장치의 동작 방법 및 반도체 시스템에 의해, 루프 코드를 결과 값으로 치환하는 방식으로 루프에 해당하는 타겟 코드의 수행 시간을 효과적으로 단축시킬 수 있다. 또한, 앞서 설명한 바와 같이, 본 발명의 다양한 실시예에 따른 반도체 장치의 동작 방법 및 반도체 시스템에 따르면, 이와 같이 루프 코드의 반복 횟수가 루프 내의 유도 변수 이외의 다른 변수에 영향을 받는 경우에도 루프 코드를 결과 값으로 치환하는 것이 가능하다.
도 14는 본 발명의 실시예에 따른 반도체 장치의 동작 방법 및 반도체 시스템이 적용될 수 있는 전자 시스템의 블록도이다.
도 14를 참조하면, 본 발명의 실시예에 따른 반도체 시스템(1100)은 컨트롤러(1110), 입출력 장치(1120, I/O), 기억 장치(1130, memory device), 인터페이스(1140) 및 버스(1150, bus)를 포함할 수 있다. 컨트롤러(1110), 입출력 장치(1120), 기억 장치(1130) 및/또는 인터페이스(1140)는 버스(1150)를 통하여 서로 결합될 수 있다. 버스(1150)는 데이터들이 이동되는 통로(path)에 해당한다.
컨트롤러(1110)는 마이크로프로세서, 디지털 신호 프로세스, 마이크로컨트롤러, 및 이들과 유사한 기능을 수행할 수 있는 논리 소자들 중에서 적어도 하나를 포함할 수 있다. 입출력 장치(1120)는 키패드(keypad), 키보드 및 디스플레이 장치등을 포함할 수 있다. 기억 장치(1130)는 데이터 및/또는 명령어등을 저장할 수 있다. 인터페이스(1140)는 통신 네트워크로 데이터를 전송하거나 통신 네트워크로부터 데이터를 수신하는 기능을 수행할 수 있다. 인터페이스(1140)는 유선 또는 무선 형태일 수 있다. 예컨대, 인터페이스(1140)는 안테나 또는 유무선 트랜시버등을 포함할 수 있다.
도시하지 않았지만, 반도체 시스템(1100)은 컨트롤러(1110)의 동작을 향상시키기 위한 동작 메모리로서, 고속의 디램 및/또는 에스램 등을 더 포함할 수도 있다.
또한, 앞서 설명한 본 발명의 실시예에 따른 프로세서는, 기억 장치(1130) 내에 제공되거나, 컨트롤러(1110), 입출력 장치(1120, I/O) 등의 일부로 제공될 수 있다.
반도체 시스템(1100)은 개인 휴대용 정보 단말기(PDA, personal digital assistant) 포터블 컴퓨터(portable computer), 웹 타블렛(web tablet), 무선 전화기(wireless phone), 모바일 폰(mobile phone), 디지털 뮤직 플레이어(digital music player), 메모리 카드(memory card), 또는 정보를 무선환경에서 송신 및/또는 수신할 수 있는 모든 전자 제품에 적용될 수 있다.
도 15 내지 도 17은 본 발명의 몇몇 실시예들에 따른 반도체 장치의 동작 방법을 적용할 수 있는 예시적인 반도체 시스템들이다.
도 15는 태블릿 PC(1200)을 도시한 도면이고, 도 16는 노트북(1300)을 도시한 도면이며, 도 17은 스마트폰(1400)을 도시한 것이다. 본 발명의 실시예에 따른 프로세서 중 적어도 하나는 이러한 태블릿 PC(1200), 노트북(1300), 스마트폰(1400) 등에 사용될 수 있다.
또한, 본 발명의 몇몇 실시예들에 따라 제조된 반도체 장치는, 예시하지 않는 다른 집적 회로 장치에도 적용될 수 있음은 해당 기술 분야의 통상의 기술자에게 자명하다.
즉, 이상에서는 본 실시예에 따른 반도체 시스템의 예로, 태블릿 PC(1200), 노트북(1300), 및 스마트폰(1400)만을 들었으나, 본 실시예에 따른 반도체 시스템의 예가 이에 제한되는 것은 아니다.
본 발명의 몇몇 실시예에서, 반도체 시스템은, 컴퓨터, UMPC (Ultra Mobile PC), 워크스테이션, 넷북(net-book), PDA (Personal Digital Assistants), 포터블(portable) 컴퓨터, 무선 전화기(wireless phone), 모바일 폰(mobile phone), e-북(e-book), PMP(portable multimedia player), 휴대용 게임기, 네비게이션(navigation) 장치, 블랙박스(black box), 디지털 카메라(digital camera), 3차원 수상기(3-dimensional television), 디지털 음성 녹음기(digital audio recorder), 디지털 음성 재생기(digital audio player), 디지털 영상 녹화기(digital picture recorder), 디지털 영상 재생기(digital picture player), 디지털 동영상 녹화기(digital video recorder), 디지털 동영상 재생기(digital video player) 등으로 구현될 수도 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였으나, 본 발명은 상기 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 제조될 수 있으며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
1: 반도체 시스템 10: 확장 중간 표현
12: 중간 표현 코드 14: 확장 연산자
16: 인터프리터 프레임 번호 20, 22: 중간 표현
24: 연산자 26: 가상 레지스터 번호
30: 결과 값 50: 프론트 엔드
100: 인터프리터 프레임워크 110: 인터프리터
112: 코어 114: 확장 연산자 세트
120: 확장 중간 표현 코드 리스트 130: 인터프리터 프레임
140: 매핑 테이블 150: 백 엔드
230: 가상 레지스터 300: 소스 코드
310: 중간 표현 320: 확장 중간 표현
330: 액세스 코드

Claims (20)

  1. 컴파일러(compiler)에 의해 생성된 중간 표현(Intermediate Representation, IR)에서 루프 코드(loop code)를 검색하고,
    상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하고,
    상기 컴파일러와 별도로 상기 루프 코드를 연산하기 위한 인터프리터 프레임워크를 생성하고, 상기 인터프리터 프레임워크(interpreter framework)는 상기 루프 코드를 연산하는 인터프리터(interpreter) 및 상기 연산의 중간 값을 저장하기 위한 인터프리터 프레임(interpreter frame)을 포함하고,
    상기 인터프리터를 이용하여 상기 루프 코드를 연산하고,
    상기 연산의 결과 값을 상기 인터프리터 프레임에 저장하고,
    상기 중간 표현에서 상기 루프 코드를 상기 연산의 결과 값을 액세스하기 위한 액세스 코드로 치환하는 것을 포함하는 반도체 장치의 동작 방법.
  2. 제1항에 있어서,
    상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것은,
    상기 루프 코드가 가장 안쪽의 루프(innermost loop)에 해당하는지 여부, 상기 루프 코드가 하나의 기본 블록(basic block)으로 형성된 것인지 여부 및 상기 루프 코드가 단일의 프리헤더 블록(preheader block) 및 단일의 출구 블록(exit block)을 포함하는지 여부 중 적어도 하나를 판단하는 것을 포함하는 반도체 장치의 동작 방법.
  3. 제1항에 있어서,
    상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하는 것은,
    상기 루프 코드가 메모리 접근 코드 또는 함수 호출 코드를 미포함하는지 여부를 판단하는 것을 포함하는 반도체 장치의 동작 방법.
  4. 제1항에 있어서,
    상기 인터프리터 프레임워크를 생성하기 전에, 상기 루프 코드에 포함된 유도 변수(induction variable)의 초기 값을 결정하는 것을 더 포함하는 반도체 장치의 동작 방법.
  5. 제4항에 있어서,
    상기 유도 변수의 초기 값을 결정하는 것은, 상기 결정된 초기 값을 상기 인터프리터 프레임에 저장하는 것을 더 포함하는 반도체 장치의 동작 방법.
  6. 제1항에 있어서,
    상기 인터프리터는 상기 중간 표현에 포함된 코드의 연산자(operator)에 대응되는 확장 연산자(extended operator)를 이용하여 상기 루프 코드를 연산하는 반도체 장치의 동작 방법.
  7. 제1항에 있어서,
    상기 인터프리터 프레임은 상기 컴파일러에 의해 사용되는 가상 레지스터와 별도로 메모리에 할당되는 반도체 장치의 동작 방법.
  8. 제7항에 있어서,
    상기 인터프리터 프레임워크는 매핑 테이블을 더 포함하고,
    상기 매핑 테이블은 상기 인터프리터 프레임과 상기 가상 레지스터 사이의 매핑 관계를 저장하는 반도체 장치의 동작 방법.
  9. 제7항에 있어서,
    상기 액세스 코드는 상기 인터프리터 프레임에 저장된 상기 연산의 결과 값을, 상기 인터프리터 프레임에 대응되는 상기 가상 레지스터에 저장하는 코드를 포함하는 반도체 장치의 동작 방법.
  10. 제1항에 있어서,
    상기 루프 코드는 하나 이상의 유도 변수 및 하나 이상의 비 유도 변수를 포함하고,
    상기 루프 코드의 반복 횟수는 상기 하나 이상의 유도 변수 및 상기 하나 이상의 비 유도 변수 모두에 의해 결정되는 반도체 장치의 동작 방법.
  11. 제10항에 있어서,
    상기 루프 코드의 반복 조건문은 상기 하나 이상의 유도 변수 및 상기 하나 이상의 비 유도 변수를 모두 포함하는 반도체 장치의 동작 방법.
  12. 제1항에 있어서,
    상기 인터프리터는 컴파일 타임 중에 상기 루프 코드를 연산하는 반도체 장치의 동작 방법.
  13. 제1항에 있어서,
    상기 컴파일러에 의해 상기 치환된 중간 표현을 컴파일하여 타겟 코드를 생성하는 것을 더 포함하는 반도체 장치의 동작 방법.
  14. 컴파일러(compiler)를 이용하여 제1 컴파일을 수행하여 소스 코드로부터 중간 표현(Intermediate Representation, IR)을 생성하고,
    상기 중간 표현에서 루프 코드(loop code)를 검색하고,
    상기 루프 코드에 포함된 중간 표현 코드에 대응되고, 상기 중간 표현 코드의 연산자에 대응하는 확장 연산자(extended operator)를 포함하는 확장 중간 표현(Extended Intermediate Representation, EIR) 코드를 생성하고,
    상기 확장 연산자를 실행시키고 상기 컴파일러와 별도로 실행되는 인터프리터를 이용하여 상기 확장 중간 표현 코드를 연산하고,
    상기 중간 표현에서 상기 루프 코드를 상기 연산의 결과 값을 액세스하기 위한 액세스 코드로 치환하고,
    상기 컴파일러를 이용하여 상기 중간 표현을 제2 컴파일하는 것을 포함하는 반도체 장치의 동작 방법.
  15. 컴파일러(compiler)를 이용하여 제1 컴파일을 수행하여 가상 레지스터 정보를 포함하는 중간 표현(Intermediate Representation, IR)을 생성하고,
    상기 중간 표현에서 루프 코드(loop code)를 검색하고,
    상기 루프 코드에 포함된 중간 표현 코드에 대응되고, 상기 가상 레지스터와 별도로 메모리에 할당된 인터프리터 프레임(interpreter frame) 정보를 포함하는 확장 중간 표현(Extended Intermediate Representation, EIR) 코드를 생성하고,
    상기 인터프리터 프레임을 액세스하고 상기 컴파일러와 별도로 실행되는 인터프리터를 이용하여 상기 확장 중간 표현 코드를 연산하고,
    상기 연산의 결과 값을 상기 인터프리터 프레임에 저장하고,
    상기 중간 표현에서 상기 루프 코드를 상기 연산의 결과 값을 액세스하기 위한 액세스 코드로 치환하고,
    상기 컴파일러를 이용하여 상기 중간 표현을 제2 컴파일하는 것을 포함하는 반도체 장치의 동작 방법..
  16. 프로세서로 하여금,
    컴파일러(compiler)에 의해 생성된 중간 표현(Intermediate Representation, IR)에서 루프 코드(loop code)를 검색하고,
    상기 루프 코드가 미리 정해진 조건에 부합하는지 여부를 판단하고,
    상기 컴파일러와 별도로 상기 루프 코드를 연산하기 위한 인터프리터 프레임워크를 생성하고, 상기 인터프리터 프레임워크(interpreter framework)는 상기 루프 코드를 연산하는 인터프리터(interpreter) 및 상기 연산의 중간 값을 저장하기 위한 인터프리터 프레임(interpreter frame)을 포함하고,
    상기 인터프리터를 이용하여 상기 루프 코드를 연산하고,
    상기 연산의 결과 값을 상기 인터프리터 프레임에 저장하고,
    상기 중간 표현에서 상기 루프 코드를 상기 연산의 결과 값을 액세스하기 위한 액세스 코드로 치환하는 것을 포함하는 동작을 수행하도록 하는 인스트럭션(insrtuction)을 포함하는 컴퓨터로 판독 가능한 기록 매체.
  17. 소스 코드로부터 중간 표현(Intermediate Representation, IR)을 생성하는 컴파일러; 및
    상기 중간 표현의 루프 코드(loop code)에 포함된 중간 표현 코드에 대응되고, 상기 중간 표현 코드의 연산자에 대응하는 확장 연산자(extended operator)를 사용하는 확장 중간 표현(Extended Intermediate Representation, EIR) 코드를 입력받는 인터프리터(interpreter)를 포함하고,
    상기 인터프리터는 상기 확장 중간 표현 코드를 실행하여 상기 루프 코드를 연산하고,
    상기 중간 표현에서 상기 루프 코드는 상기 연산의 결과 값을 액세스하기 위한 액세스 코드로 치환되는 반도체 시스템.
  18. 제17항에 있어서,
    상기 컴파일러에 의해 사용되는 가상 레지스터와 별도로 메모리에 할당된 인터프리터 프레임(interpreter frame)을 더 포함하는 반도체 시스템.
  19. 제18항에 있어서,
    상기 인터프리터 프레임과 상기 가상 레지스터 사이의 매핑 관계를 저장하는 매핑 테이블을 더 포함하는 반도체 시스템.
  20. 제17항에 있어서,
    상기 루프 코드에 해당하는 상기 확장 중간 표현은 복수의 확장 중간 표현을 포함하고,
    상기 인터프리터는 상기 복수의 확장 중간 표현을 순차적으로 실행하려 상기 루프 코드를 연산하는 반도체 시스템.
KR1020150148715A 2015-10-26 2015-10-26 반도체 장치의 동작 방법 및 반도체 시스템 KR20170047957A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020150148715A KR20170047957A (ko) 2015-10-26 2015-10-26 반도체 장치의 동작 방법 및 반도체 시스템
CN201610880639.2A CN106610860A (zh) 2015-10-26 2016-10-09 半导体装置的操作方法和半导体系统
US15/292,608 US20170115973A1 (en) 2015-10-26 2016-10-13 Operating method of semiconductor device and semiconductor system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150148715A KR20170047957A (ko) 2015-10-26 2015-10-26 반도체 장치의 동작 방법 및 반도체 시스템

Publications (1)

Publication Number Publication Date
KR20170047957A true KR20170047957A (ko) 2017-05-08

Family

ID=58558820

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150148715A KR20170047957A (ko) 2015-10-26 2015-10-26 반도체 장치의 동작 방법 및 반도체 시스템

Country Status (3)

Country Link
US (1) US20170115973A1 (ko)
KR (1) KR20170047957A (ko)
CN (1) CN106610860A (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101832594B1 (ko) * 2016-02-18 2018-02-26 라인 가부시키가이샤 중간 언어 파일의 로딩 속도 개선을 위한 방법 및 시스템
CN116841622B (zh) * 2023-09-01 2023-11-24 上海燧原智能科技有限公司 一种地址自增访存指令的生成方法、装置、设备及介质

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4782444A (en) * 1985-12-17 1988-11-01 International Business Machine Corporation Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering
US5933635A (en) * 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
US8677337B2 (en) * 2008-05-01 2014-03-18 Oracle America, Inc. Static profitability control for speculative automatic parallelization
US8739141B2 (en) * 2008-05-19 2014-05-27 Oracle America, Inc. Parallelizing non-countable loops with hardware transactional memory
CN102165428B (zh) * 2008-08-13 2015-05-20 高通股份有限公司 软件应用性能增强
US8793675B2 (en) * 2010-12-24 2014-07-29 Intel Corporation Loop parallelization based on loop splitting or index array
US20130113809A1 (en) * 2011-11-07 2013-05-09 Nvidia Corporation Technique for inter-procedural memory address space optimization in gpu computing compiler
US20130205282A1 (en) * 2012-02-07 2013-08-08 Microsoft Corporation Transferring program execution from compiled code to interpreted code
US10268497B2 (en) * 2013-10-24 2019-04-23 Intel Corporation Conjugate code generation for efficient dynamic optimizations
CN103942158B (zh) * 2014-02-17 2017-08-25 上海新储集成电路有限公司 一种具有智能优化循环指令模块功能的自学习系统
CN103970580B (zh) * 2014-05-05 2017-09-15 华中科技大学 一种面向多核集群的数据流编译优化方法
US9639382B2 (en) * 2014-05-15 2017-05-02 Microsoft Technology Licensing, Llc. Interactive viewer of intermediate representations of client side code
US9619214B2 (en) * 2014-08-13 2017-04-11 International Business Machines Corporation Compiler optimizations for vector instructions
US9569190B1 (en) * 2015-08-04 2017-02-14 International Business Machines Corporation Compiling source code to reduce run-time execution of vector element reverse operations

Also Published As

Publication number Publication date
CN106610860A (zh) 2017-05-03
US20170115973A1 (en) 2017-04-27

Similar Documents

Publication Publication Date Title
KR101642556B1 (ko) 이진 번역을 수행하기 위한 방법 및 시스템
KR100576794B1 (ko) 술어 실행을 정적 예측실행으로 변환하기 위한 범용 및효율적 방법 및 장치
KR101722645B1 (ko) 축소된 다중 네스트된 루프들의 벡터화
US8370823B2 (en) Device, system, and method of computer program optimization
US8479176B2 (en) Register mapping techniques for efficient dynamic binary translation
CN111160548A (zh) 计算装置以及计算方法
US20160321039A1 (en) Technology mapping onto code fragments
KR101081090B1 (ko) 명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화
KR101817459B1 (ko) 1들을 최하위 비트들이 되도록 풀링하면서 비트들을 좌측으로 시프팅하기 위한 명령어
US20120158397A1 (en) Instruction-set architecture simulation techniques using just in time compilation
US20150277876A1 (en) Compiling device, compiling method, and storage medium storing compiler program
US20130152048A1 (en) Test method, processing device, test program generation method and test program generator
US20120284701A1 (en) Efficient conditional flow control compilation
US8095775B1 (en) Instruction pointers in very long instruction words
US11010631B2 (en) Efficient SIMD implementation of 3x3 non maxima suppression of sparse 2D image feature points
KR20170047957A (ko) 반도체 장치의 동작 방법 및 반도체 시스템
US7373638B1 (en) Automatic generation of structure and control path using hardware description language
Hong et al. Exploiting longer SIMD lanes in dynamic binary translation
US8595473B2 (en) Method and apparatus for performing control of flow in a graphics processor architecture
US20140249796A1 (en) Simulator generation method and apparatus
US20070011440A1 (en) Processor and processing method
CN114385180A (zh) 一种数据处理方法、装置、设备及计算机存储介质
US7308548B2 (en) Processor organizing apparatus and method for organize a pipeline processor
US9606779B2 (en) Data processing system and data simulation method in the system
US9836401B2 (en) Multi-core simulation system and method based on shared translation block cache

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application