KR20110136749A - 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체 - Google Patents

효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체 Download PDF

Info

Publication number
KR20110136749A
KR20110136749A KR1020110057530A KR20110057530A KR20110136749A KR 20110136749 A KR20110136749 A KR 20110136749A KR 1020110057530 A KR1020110057530 A KR 1020110057530A KR 20110057530 A KR20110057530 A KR 20110057530A KR 20110136749 A KR20110136749 A KR 20110136749A
Authority
KR
South Korea
Prior art keywords
code block
binary code
source
target
register
Prior art date
Application number
KR1020110057530A
Other languages
English (en)
Other versions
KR101381274B1 (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 인텔 코포레이션
Publication of KR20110136749A publication Critical patent/KR20110136749A/ko
Application granted granted Critical
Publication of KR101381274B1 publication Critical patent/KR101381274B1/ko

Links

Images

Classifications

    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • 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
    • 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
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/24Loading of the microprogram
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/45525Optimisation or modification within the same instruction set architecture, e.g. HP Dynamo

Abstract

일반적으로, 본 발명은 더 많은 레지스터를 갖는 시스템으로부터 더 적은 레지스터를 갖는 시스템으로 레지스터를 매핑하기 위한 시스템 및 방법을 제공한다. 비교적 자주 레지스터 액세스를 갖는 하나 이상의 코드 블록을 포함하는 영역이 형성될 수 있다. 가장 자주 액세스된 소스 레지스터는 타겟 레지스터로 매핑될 수 있다. 영역 내의 각각의 블록은 프롤로그 및 적어도 하나의 에필로그에 의해 제한될 수 있다. 프롤로그는 레지스터 매핑을 수행하도록 구성될 수 있으며, 에필로그는 영역 내의 하나의 블록으로부터 영역 내의 또 다른 블록 또는 영역 내에 존재하지 않는 하나의 블록으로 프로그램 흐름을 관리하도록 구성될 수 있다.

Description

효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체{REGISTER MAPPING TECHNIQUES FOR EFFICIENT DYNAMIC BINARY TRANSLATION}
본 발명은 동적 이진 변환에 관한 것이며, 보다 구체적으로는 보다 많은 레지스터를 갖는 명령어 세트 아키텍처(instruction-set architecture; "ISA")로부터 보다 적은 레지스터를 갖는 명령어 세트 아키텍처로 동적 이진 변환을 수행하기 위한 효율적인 기법에 관한 것이다.
동적 이진 변환(Dynamic Binary Translation; DBT)은 하나의 명령어-세트 아키텍처(instruction-set architecture, ISA)를 위해 생성된 애플리케이션을 다른 ISA 상에서 실행하기 위한 수단으로서 널리 사용되고 있다. x86 ISA에 기초한 PC를 위해 개발된 레거시 애플리케이션(legacy application)의 양을 고려할 때, x86을 다른 ISA로 변환하는 데에 많은 관심이 있어 왔다. 보다 작은 울트라 모바일 PC 및 보다 강력한 내장형 모바일 인터넷 장치(예를 들어, 스마트폰)를 위한 산업계에서의 최근 경향은 이들 별개의 시장 사이의 경계를 흐리게 하고 있다. 결과적으로, 이러한 시장 수렴(market convergence)은 내장형 모바일 인터넷 장치 시장을 현재 지배하는 ISA(예를 들어, ARM(ARM 홀딩스), MIPS(MIPS 테크놀로지스) 및 PowerPC (애플-IBM-모토롤라 연합))로부터 x86(인텔 코포레이션)으로의 동적 이진 변환에 큰 관심을 야기하고 있다.
이진 변환(Binary Translation, "BT")은 하나의 소스("게스트") ISA를 위해 형성된 이진수(binaries)를 또 다른 타겟("호스트") ISA로 변환하는 일반적인 기법이다. 이진 변환을 이용해서, 하나의 프로세서 ISA를 위해 형성된 애플리케이션 이진수(application binaries)를 다른 아키텍처를 갖는 프로세서 상에서 고 레벨 소스 코드(high-level source code)를 재컴파일링하거나 어셈블리 코드(assembly code)를 재기록할 필요 없이 실행하는 것이 가능하다. 대부분의 레거시 컴퓨터 애플리케이션은 이진 포맷으로만 이용 가능하므로, 프로세서를 위해 형성되지 않고 이용 가능하지 않은 애플리케이션을 프로세서가 실행하게 하는 이진 변환은 그 잠재력으로 인해 매우 매력적이다. 디지털 이큅먼트 코포레이션(Digital Equipment Corporation("DEC"))의 FX!32, 인텔(Intel)의 IA-32EL, 트랜스메타(Transmeta)의 CMS("Code Morphing Software"), 고드슨(Godson)-3(MIPS 아키텍처), 및 IBM의 DAISY("Dynamically Architected Instruction Set from Yorktown")를 포함하는 몇몇 성공적인 이진 변환 프로젝트가 지난 수십 년에 걸쳐 최신 기술을 촉진시키고 있다. 이들 도구 대부분은 알파(Alpha)(DEC), 이타늄(Itanium)(인텔), 크루소(Crusoe)(트랜스메타), 및 MIPS(MIPS 아키텍처)와 같은 프로세서 상에서 레거시 x86 애플리케이션을 실행하는 것을 목표로 하고 있다.
전술된 도구 대부분은 애플리케이션이 실행됨에 따라 작동 중에(on-the-fly), 즉 실행 시간(run time)에 변환을 수행하는 것을 의미하는 동적 이진 변환(Dynamic BT, DBT)을 사용한다. 대안적으로, 이진 변환은 오프라인(off-line), 즉 정적 이진 변환(Static BT, SBT)으로 수행될 수 있다. 외래 이진수(non-native binaries)를 위한 동적 이진 변환을 자동적으로 발동하는 것이 보다 일반적이고(예를 들어, 자기 변형 코드(self-modifying code)를 취급할 수 있음) 단순한 운영체제 변화로 사용자에게 투명하게 동작하므로, 동적 사용 모델(dynamic usage model)이 대체로 바람직하다. 정적 이진 변환에 대비되는 동적 이진 변환의 주요 단점은 오버헤드(overhead)이다. 애플리케이션을 변환하고 최적화하는 데 소비되는 사이클은 그렇지 않았으면 애플리케이션 코드를 실제로 실행하는 데 사용될 수 있었던 사이클이다. 그러므로, 동적 이진 변환 도구는 변환/최적화에 소비된 시간과 그 결과로 얻게 되는 코드의 품질 사이의 트레이드-오프(trade-off)에 직면하게 되고, 이는 결국 변환된 코드의 실행 시간에 반영된다.
동적 이진 변환이 직면한 도전은 소스 및 타겟 ISA에 매우 의존적이라는 것이다. 최근에, x86 ISA의 사용을 울트라-모바일 내장형 시장 세그먼트(예를 들어, 인텔의 아톰(Atom) 프로세서)로 확장시키는 데에 큰 관심이 있다. 그것에 의해 레거시 PC 소프트웨어가 내장형 울트라 모바일 플랫폼 상에서 효율적으로 실행 가능하게 하므로, 사용자의 관점에서는 이러한 것이 매우 편리하다. 그러나, x86이 이들 새로운 도메인에 적응되기 위해, ARM(ARM 홀딩스), MIPS(MIPS 테크놀로지스) 및 PowerPC (애플-IBM-모토롤라 연합) ISA에 주로 기초하는, 이들 세그먼트에서 이용 가능한 거대한 소프트웨어 베이스를 x86가 실행 가능하게 하는 것도 또한 필요하다. 예를 들어, 미래의 x86 기반 스마트폰에서, 잠재적으로 실행하는 PC 애플리케이션 이외에, 예를 들어 애플의 아이폰 앱 스토어(iPhone App Store)로부터 ARM-기반 애플리케이션을 다운로드하고 끊임없이 실행할 수 있는 것이 유리할 것이다. 이러한 시나리오를 가능하게 하는 것에 대한 도전은 동적 이진 변환의 성능 및 에너지 오버헤드를 낮게 유지하는 것을 포함한다.
다양한 동적 이진 변환 시스템이 제안되었지만, 그들 대부분은 동일한 기본적인 실행 흐름을 따른다. 먼저, 소스(게스트) 아키텍처를 위해 생성된 이진 파일이 메모리로 로드(load)된다. 그런 다음, 이러한 소스 이진의 섹션이 타겟(호스트) 이진 코드로 변환된다. 이러한 변환은 전형적으로 "요구에 따라(on-demand)" 수행된다. 다시 말해서, 소스 코드 명령어는 제어 흐름이 그들에게 도착하는 대로 변환된다. 전형적으로, 단일 진입 및 잠재적인 복수의 퇴장을 갖는 명령어의 시퀀스인 기본 블록의 입상(granularity of basic blocks)에서 변환이 수행된다. 기본 블록이 변환되면, 변환은 미래의 재사용을 위해 메모리 내의 변환 캐시(또한 코드 캐시로도 지칭됨)로 유지된다. 가장 공격적인 동적 이진 변환 시스템은 다른 레벨의 최적화를 수행한다. 트랜스메타의 CMS 및 다른 동적 이진 변환 시스템을 따라서, 이들 최적화 레벨은 "기어(gears)"로 지칭된다. 먼저, 매우 신속한 변환(기어-1)이 사용된다. 이러한 기어는 변환된 코드의 열악한 품질을 대가로 매우 신속한 것을 목표로 한다. 이러한 트레이드-오프는 운영체제 부트 코드와 같이 드물게 실행되는 코드에 대해 이상적인 경향이 있다. 기어-1에서, 동적 이진 변환은 또한 "핫"(즉, 자주 실행된) 기본 블록을 검출하기 위해 탐침(계수기)을 실행한다. 블록이 핫이 되면, 그 블록 및 관련된 주위의 블록들이 영역으로 합병된다. 그런 다음, 이러한 영역은 더 높은 기어에 의해 재변환되고, 이는 코드에 대한 추가 최적화를 적용한다. 이러한 동일한 전략이 임의의 개수의 기어에 대해 반복될 수 있다. 예를 들어, 트랜스메타의 CMS는 4 개의 기어를 사용한다. 실제로, 기어 기반 시스템은 더 많은 코드 영역이 전체 실행 시간에 기여할수록 더 신속한 코드를 생성하도록 그것을 최적화하는 데 더 많은 시간이 소비된다는 것을 보증한다.
적용된 최적화의 세트, 개수 및 공격성은 하나의 동적 이진 변환로부터 또 다른 동적 이진 변환로 크게 변화한다. 전형적인 최적화는 명령어 스케줄링, 불필요한 코드(dead code) 제거, 및 중복(redundancy) 제거를 포함한다. 실제로, 정적 컴파일러 최적화와 유사하게, 가장 관련된 최적화의 세트는 타겟 아키텍처에 따라 달라진다. 그렇지만, 컴파일러 최적화와 달리, 동적 이진 변환에서 이들 최적화는 정확한 실행 시간 정보를 가지며, 이는 더 높은 품질의 코드를 얻기 위해 사용될 수 있다. 정적 컴파일러와 비교한 동적 이진 변환의 주요 단점은 훨씬 빠듯한 최적화-시간 예산이다.
동적 이진 변환(dynamic binary translation, "DBT")이 직면한 도전은 그것이 초래하는 오버헤드(overhead)이다. 이러한 오버헤드는 호스트(host)("타겟(target)")-ISA로 쉽게 매핑되지 않는 게스트(guest)("소스(source)")-ISA 내의 비교적 자주 사용된 특징으로부터 주로 발생한다. 예를 들어, 소스-ISA가 타겟-ISA보다 큰 레지스터 세트를 가질 때, 레지스터 에뮬레이션 오버헤드(register emulation overhead), 예를 들어 메모리 액세스를 줄이기 위해, 소스 레지스터로부터 타겟 레지스터로의 효율적인 레지스터 매핑을 사용하는 것이 중요하다. 이는 다른 ISA, 예를 들어 32개의 레지스터를 갖는 PowerPC, ARM 과 MIPS 및 128개의 레지스터를 갖는 이타늄(Itanium)에 비해 비교적 작은 개수의 범용인/정수 개의(general-purpose/integer) 레지스터(예를 들어, 8 및 16)를 갖는 x86과 x86-64와 같은 타겟-ISA에 특히 중요하다.
레지스터 매핑 문제는 최적 매핑(즉, 최소 오버헤드를 초래하는 매핑)이 소스 이진 코드 시퀀스에 크게 의존하며 따라서 최적 매핑이 코드의 일부로부터 또 다른 일부로 변화한다는 사실에 의해 악화된다. 이상적으로는, 각각의 코드 영역은 그것에 최적인 레지스터 매핑을 사용해야 한다.
본 발명은 영역 레벨 레지스터 매핑을 제공하도록 구성된 시스템과 방법을 제공한다. 본 방법은 영역 내의 각각의 이진 코드 블록에 대해 영역 내의 가장 자주 액세스된 소스 프로세서 레지스터 중 적어도 몇 개의 소스 프로세서 레지스터를 타겟 프로세서 레지스터로 매핑하는 것을 포함한다. 가장 자주 액세스된 소스 프로세서 레지스터는 소스 이진 코드의 블록에 상응하는 타겟 이진 코드의 블록을 이용하여 수행된 계수기를 포함하는 탐침으로부터 결정될 수 있다. 그 후, 최적화를 위해 선택된 영역 내의 소스 이진 코드의 각각의 블록에 대해 하나의 최적 타겟 이진 코드의 블록이 생성될 수 있다. 최적 타겟 이진 코드의 블록은 프롤로그, 변환된 소스 이진 코드를 포함하는 바디, 조건부 점프, 및 적어도 하나의 에필로그를 포함할 수 있다. 프롤로그는 영역에 대해 매핑된 또는 매핑된 리브-인 레지스터(live-in register)를 로드하도록 구성된다. 조건부 점프는 소스 이진 코드의 블록의 경계에서의 분기가 영역 내에 존재하는 다음 이진 블록에 존재하는지 또는 영역 내에 존재하지 않는 다음 이진 블록에 존재하는지에 기초하여 흐름을 제어하도록 구성된다. 에필로그는 다음 이진 블록이 영역 내에 존재하면 블록 바디로 점프하도록 구성되거나 또는 다음 이진 블록 영역 내에 존재하지 않으면 다음 이진 블록의 시작으로 점프하도록 구성된다. 시작은 또 다른 영역 내의 최적 타겟 이진 코드 블록의 프롤로그에 상응하거나 또는 비최적(unoptimized) 타겟 이진 코드 블록에 상응할 수 있다. 다음 이진 블록이 영역 내에 존재하지 않으면, 영역에 대한 리브-아웃 레지스터(live-out register)가 메모리에 저장될 수 있다. 유리하게는, 타겟 이진 코드의 최적 블록이 실행될 때마다 보다는 영역 경계를 가로지를 때 영역에 대해 매핑된 또는 매핑된 리브-인 레지스터를 로드함으로써 메모리 액세스가 감소될 수 있다.
본 발명에 따른 방법 및/또는 시스템은 영역 레벨 레지스터 매핑을 제공하도록 구성된다. 영역은 비교적 복잡할 수 있다. 예를 들어, 영역은 종래 기술의 당업자에게 이해되는 바와 같이 예를 들어 모 루프(parent loop) 내의 복수의 형제(multiple siblings)와 같은 임의의 루프 네스트(loop nest), 즉 루프의 임의의 조합을 포함할 수 있다. 또 다른 예에서, 영역은, 예를 들어 루프 내로의 복수의 가능한 진입과 같은 감소될 수 없는 흐름 그래프에 상응하는 타겟 이진 코드 블록을 포함할 수 있다. 연속적인 그리고/또는 비연속적인 타겟 이진 코드 블록의 영역이 형성될 수 있다.
본 발명에 따르면, 영역으로의 진입 시에 매핑된 또는 매핑된 리브-인 레지스터가 메모리로부터 로드되고, 영역으로부터의 퇴장 시에 매핑된 또는 매핑된 리브-아웃 레지스터가 메모리에 저장되어, 블록 레벨 레지스터에 비해 로드/저장하는 메모리 액세스를 감소시킨다.
청구된 주제의 특징과 장점은 첨부된 도면을 따르면서 첨부된 도면을 참조하여 고려되어야 하는 이하의 실시예에 대한 상세한 설명으로부터 명백할 것이다.
도 1은 본 발명에 따른 메모리 시스템을 도시한다.
도 2a는 본 발명에 따른 동적 이진 변환기에 대한 예시적인 동작의 흐름도를 도시한다.
도 2b는 본 발명에 따른 코드를 최적화하기 위한 예시적인 동작의 흐름도를 도시한다.
도 3은 자주 실행된 코드 블록의 영역을 포함하는 예시적인 제어 흐름 그래프를 도시한다.
도 4는 본 발명에 따른 프롤로그, 바디, 조건부 점프 및 적어도 하나의 에필로그를 포함하는 예시적인 최적 타겟 이진 코드 블록을 도시한다.
도 5는 본 발명에 따른 최적화를 포함하는 타겟 이진 코들 블록을 실행하기 위한 예시적인 동작들의 흐름도를 도시한다.
도 6은 도 3의 제어 흐름 그래프에 상응하는 예시적인 최적 제어 흐름 그래프를 도시한다.
도 7은 블록 레벨 레지스터 매핑과 본 발명에 따른 영역 레벨 레지스터 매핑을 포함하는 동적 이진 변환의 성능 벤치마크의 비교를 도시하는 그래프이다.
도 1은 본 발명에 따른 시스템(100)을 도시한다. 시스템(100)은 시스템 메모리(104)에 연결된 프로세서("CPU")(102)를 포함한다. 시스템(100)은 (시스템 메모리(104)와 함께 포함될 수 있는) 캐시 메모리(105) 및/또는 캐시 메모리와 유사하지만 소프트웨어에 의해 관리되는 스크래치-패드 메모리(107)를 포함할 수 있다. CPU(102)는 복수의 프로세서 레지스터(106-1, 106-2, ..., 106-m, 집합적으로 106)를 포함할 수 있다. CPU(102)는 복수의 코어 프로세싱 유닛(이하 "코어들" 또는 단수 형태로 "코어")을 포함할 수 있으며, 각각의 코어는 복수의 스레드(thread)을 실행하도록 구성될 수 있다. 시스템 메모리(104)는 소스 이진 애플리케이션(110), 동적 이진 변환 시스템(115) 및 호스트 운영 시스템("OS")(120)을 수용할 수 있다. 동적 이진 변환 시스템(115)은 타겟 이진 코드 블록(112), 레지스터 매핑 모듈(116)을 포함하는 동적 이진 변환기 코드(114) 및/또는 소스 레지스터 저장소(118)를 포함할 수 있다. 소스 이진 애플리케이션(110)은 소스 ISA에 상응하는 복수의 소스 이진 코드 블록을 포함할 수 있다. 타겟 이진 코드 블록은 타겟 ISA에 상응한다. 소스 이진 코드 블록은 분기 명령어를 포함하는, 예를 들어 분기 명령어를 이용하여 종결하는 하나 이상의 명령어의 시퀀스이다. 타겟 이진 코드 블록은 상응하는 소스 이진 코드 블록의 기능성(functionality)을 포함하도록 구성된다. 최적 타겟 이진 코드 블록은 최적 타겟 이진 코드 블록의 바디 내의 상응하는 소스 이진 코드 블록의 기능성을 포함할 수 있다. 최적 타겟 이진 코드 블록은 본 명세서에서 설명되는 바와 같이 추가 기능성을 포함할 수 있다.
타겟 이진 코드 블록(112)은 "코드 캐시"(111)로 지칭되는 시스템 메모리 구역에 저장될 수 있다. 코드 캐시(111)는 하나 이상의 상응하는 소스 이진 코드 블록으로부터 변환된 타겟 이진 코드 블록(112), 즉 하나 이상의 타겟 이진 코드 블록(112)에 대한 저장소로서 이해될 수 있다. 시스템 메모리(104)는 프로세서 레지스터(106)로부터/프로세서 레지스터(106)로 데이터를 로드/저장하도록 구성된 소스 레지스터 저장소(118)를 수용할 수 있다. 몇몇 실시예에서, 캐시 메모리(105) 및/또는 스크래치-패드 메모리(107)는 프로세서 레지스터(106)로부터/프로세서 레지스터(106)로 데이터를 로드/저장하도록 구성된다.
동적 이진 변환기 코드(114) 및 레지스터 매핑 모듈(116)은 소스 이진 애플리케이션(110)의 블록을 타겟 이진 코드 블록(112)으로 변환하도록 소스 이진 애플리케이션(110) 상에서 작동하는 하나 이상의 코어에 의해 실행될 수 있다. 소스 이진 코드 블록은 타겟 이진 코드 블록으로 동적으로 변환될 수 있다. 다시 말해서, 소스 이진 코드 블록은 정적으로 보다는 이진 블록을 실행하는 호출에 응답하여, 즉 실행 시간 이전에 타겟 이진 코드 블록으로 변환될 수 있다. 그런 다음, 타겟 이진 코드 블록은 시스템 메모리(104) 내에 코드 캐시(111) 내에 저장될 수 있고 실행을 위해 CPU(102)에 제공될 수 있다. 소스 이진 애플리케이션(110)의 블록을 타겟 이진 코드 블록(112)으로 변환하는 것은 영역에 대한 레지스터 액세스의 빈도에 적어도 부분적으로 기초하여 하나 이상의 소스 레지스터를 하나 이상의 타겟 레지스터로, 예를 들어 프로세서 레지스터(106)로 매핑하는 것을 포함할 수 있다. 예를 들어, 소스-ISA는 Ns 개의 소스 레지스터를 포함할 수 있고, 타겟-ISA는 Nt 개의 타겟 레지스터를, 예를 들어 레지스터(106)를 포함할 수 있으며, Nt는 Ns보다 작다.
도 2a는 동적 이진 변환기에 대한 흐름도(200)를 도시한다. 흐름도(200)의 동작은 동적 이진 변환기 코드(114)에 의해 수행될 수 있다. 프로그램 흐름은 이진 코드 블록(202)을 실행하는 호출의 수신과 함께 시작될 수 있다. 이진 코드 블록(202)을 실행하는 호출 이전에, 소스 이진 애플리케이션(110)이 시스템 메모리(104)로 로드되었다고 가정된다. 동작(204)에서, 하나 이상의 타겟 이진 코드 블록이 코드 캐시 내, 예를 들어 코드 캐시(111) 내에 존재하는지 여부가 판단될 수 있다. 각각의 타겟 이진 코드 블록은 소스 이진 애플리케이션(110)의 소스 이진 코드 블록에 상응한다. 타겟 이진 코드 블록이 코드 캐시 내에 존재하지 않으면, 동작(206)은 소스 이진 코드 블록을 타겟 이진 블록으로 변환하는 것, 탐침을 실행하는 것, 및 타겟 이진 블록 및 탐침을 코드 캐시에 저장하는 것을 포함할 수 있다. 이러한 변환은 비교적 신속하게 구성될 수 있다. 예를 들어, 탐침은 이진 블록이 실행된 횟수의 계수를 유지하도록 구성된 계수기를 포함할 수 있다. 소스 프로세서 레지스터는 시스템 메모리(104) 내의 레지스터 저장소, 예를 들어 소스 레지스터 저장소(118), 캐시 메모리(105) 및/또는 스크래치-패드 메모리(107)로 매핑될 수 있다. 그런 다음, 프로그램 흐름이 동작(211)으로 진행할 수 있다. 동작(211)에서, 변환된 코드 블록이 실행될 수 있다. 동작(204)에서 타겟 이진 코드 블록이 코드 캐시 내에 존재하면, 프로그램 흐름은 동작(208)으로 진행할 수 있다.
동작(208)에서, 문턱값이 도달되었는지 여부가 판단될 수 있다. 코드 블록을 실행하는 이전 호출에 응답하여, 동작(206)에서 실행된 탐침에 적어도 부분적으로 기초하여 문턱값이 도달되었는지 여부가 판단될 수 있다. 예를 들어, 이진 블록이 실행될 때마다 계수가 증가될 수 있다. 계수가 미리 결정된 문턱값에 도달하면, 탐침은 추가 프로세싱을 위해 프로그램 흐름(즉, 분기)을 동적 이진 변환기로 복귀하도록 구성될 수 있다. 미리 결정된 문턱값은 최적화로부터 이익을 얻을 수 있는 비교적 자주 실행된 이진 블록을 나타내도록 구성될 수 있다. 문턱값이 도달되지 않으면, 프로그램 흐름은 동작(211)으로 진행하여 변환된 코드 블록을 실행할 수 있다. 문턱값이 도달되면, 프로그램 흐름은 동작(210)으로 진행하여 코드를 최적화할 수 있다. 코드를 최적화하는 동작(210)은 본 명세서에서 설명되는 바와 같이 영역 형성 및 레지스터 매핑을 포함하도록 구성된다. 그런 다음, 프로그램 흐름은 동작(211)으로 진행하여 변환된 코드 블록을 실행할 수 있다.
도 2b는 본 발명에 따른 코드를 최적화하기 위한 흐름도(210)를 도시한다. 프로그램 흐름은 시작(212)에서 시작할 수 있다. 흐름도(210)의 동작은 레지스터 매핑 모듈(116)을 포함하는 동적 이진 변환기 코드(114)에 의해 수행될 수 있다. 동작(214)에서, 유사도 문턱값을 만족시키고/시키거나 초과하는 인접 이진 블록에 대한 조사가 수행될 수 있다. 인접 이진 블록은 코드 최적화를 트리거링(triggering)하는 이진 블록에 관련될 수 있다. 예를 들어, 인접 이진 블록은 코드 최적화를 트리거링하는 이진 블록 직전에 또는 직후에 실행되도록 구성될 수 있다. 인접 이진 블록은 트리거링 이진 블록에 접촉할 수 있고/있거나 분기 또는 점프에 의해 트리거링 이진 블록에 관련될 수 있다. 이진 블록 사이의 또는 이진 블록 내의 유사도는 이진 블록의 실행 가능성에서의 상관도로서 이해될 수 있다. 예를 들어, 상관도는 하나의 이진 블록으로부터 또 다른 이진 블록으로의 분기하는 것에 기인할 수 있다. 그런 다음, 동작(216)에서, 유사도 문턱값을 만족시키고/시키거나 초과하는 인접 이진 블록을 포함하는 영역이 형성될 수 있다.
동작(218)에서, 영역 내에 액세스된 각각의 소스 레지스터에 대해 액세스의 개수가 결정될 수 있다. 영역 내의 명령어는 소스 레지스터를 사용, 즉 소스 레지스터로부터 판독될 수 있고/있거나, 소스 레지스터를 정의, 즉 소스 레지스터로 기록될 수 있다. 레지스터 액세스, 즉 레지스터 사용은 레지스터를 사용하고/하거나 정의하는 것을 포함한다. 레지스터 매핑은 영역 내의 각각의 소스 레지스터의 액세스의 총 개수에 기초할 수 있다.
예를 들어, 동작(216)에서 형성된 영역은 하나 이상의 이진 코드 블록을 포함할 수 있다. 이진 블록의 실행의 개수의 계수를 포함하는 탐침은 각각의 이진 코드 블록에 연관될 수 있다. 각각의 이진 블록에 대해, 이진 블록의 실행의 개수, 이진 블록 내의 명령어의 개수 및 각각의 명령어에 의해 액세스된 레지스터의 개수의 계수에 기초하여 레지스터 액세스의 개수가 결정될 수 있다. 그런 다음, 영역 내의 각각의 이진 블록 내의 각각의 레지스터에 대한 액세스의 개수를 합산함으로써 영역 내에 액세스된 각각의 레지스터에 대한 액세스의 총 개수가 결정될 수 있다.
도 3은 코드의 예시적인 영역(305)을 포함하는 예시적인 제어 흐름 그래프(300)를 도시한다. 제어 흐름 그래프(300)는 5 개의 코드 블록, 즉 블록 A(310), 블록 B(320), 블록 C(330), 블록 D(340) 및 블록 E(350)를 포함한다. 각각의 블록은 예를 들어 동작(206)(도 2a)에서 수행된 탐침에 기초하여 결정된, 블록의 실행의 개수에 상응하는 연관 계수(312, 322, 332, 342, 352)를 갖는다. 예를 들어, 블록 A, 블록 C 및 블록 E는 각각 10이라는 연관 계수를 갖고, 블록 B는 1000이라는 연관 계수를 가지며, 블록 D는 990이라는 연관 계수를 갖는다. 이러한 예에서, 블록 B는 도 2a의 동작(208)에서 설명된 미리 결정된 문턱값을 만족시킬 수 있으며, 즉 블록 B는 자주 실행된 소스 이진 코드 블록이다. 블록 A, 블록 C 및 블록 D는 블록 B에 대한 인접 블록일 수 있다. 도 2b의 동작(214)에서, 유사도 문턱값을 만족/초과하는 인접 블록의 조사는 블록 D를 산출할 수 있다. 블록 D는 블록 B에 대해 유사도 문턱값을 만족시키거나 초과하는 인접 소스 이진 코드 블록이다.
유사도는 자주 실행된 소스 이진 코드 블록과 인접 소스 이진 코드 블록의 실행 가능성에서의 상관도에 상응한다. 다시 말해서, 블록 B는 비교적 높은 실행 가능성(계수=1000)을 갖는다. 블록 D도 또한 비교적 높은 실행 가능성(계수=990)을 갖는다. 계수 정보가 과거에 속하고 미래의 실행 빈도가 변할 수 있으므로 "실행 가능성(likelihood of execution)"이 사용된다. 예를 들어 블록 B와 블록 D 사이의 분기를 기초로, 블록 D의 실행 가능성은 블록 B의 실행 가능성에 관련된다. 다시 말해서, 블록 D의 실행 가능성은 블록 B의 실행 가능성과 상관된다.
이러한 예에서, 5 개의 코드 블록 중에서, 1000과 990인 비교적 높은 실행 빈도(즉, 계수)를 각각 가지며 유사도 문턱값을 만족시키거나 초과하는 블록 B와 블록 D는 영역(315)에 포함된다. 블록 B 내의 명령어는 레지스터(r1, r2, r3, r4 및 r5)를 액세스한다. 레지스터(r1 및 r4)가 정의(레지스터로 기록)되고, 레지스터(r1, r2, r3, r4 및 r5)가 사용(레지스터로부터 판독)된다. 다시 말해서, 블록 B의 각각의 실행에 대해, r1 및 r4는 두 번씩 액세스되고, 나머지 레지스터는 각각 한 번씩 액세스된다. 따라서, 실행 빈도 1000을 갖는 블록 B에 대해, r1 및 r4는 각각 2000 번 액세스되고, 나머지 레지스터는 각각 1000 번 액세스된다. 블록 D는 레지스터(r2)를 두 번 (한 번은 판독하고 한 번은 기록) 액세스하고 레지스터(r5)를 한 번 (한 번 판독) 액세스하는 하나의 명령어를 포함한다. 따라서, 실행 빈도 990을 갖는 블록 D에 대해, r2는 1980 번 액세스되고, r5는 990 번 액세스된다. 그러므로, 블록 B와 블록 D를 포함하는 영역(305)에 대해, r1은 총 2000 번 액세스되고, r2는 총 2980 번 액세스되며, r3는 총 1000 번 액세스되고, r4는 총 2000 번 액세스되며, r5는 총 1990 번 액세스된다. 가장 자주 액세스된 레지스터로부터 가장 적게 액세스된 레지스터로 레지스터 액세스의 개수에 의해 레지스터를 정렬하면 r2, r1와 r4, r5 및 r3가 산출된다.
도 2b를 다시 참조하면, 동작(220)에서, 소스 레지스터는 타겟 레지스터로 매핑될 수 있다. 영역에 대한 최대 액세스 개수에 상응하는 소스 레지스터는, 즉 가장 자주 액세스된 소스 레지스터가 타겟 레지스터로 매핑될 수 있다. 예를 들어, 타겟 ISA는 Nt 개의 타겟 프로세서 레지스터를 가질 수 있고, 소스 ISA는 Ns 개의 소스 프로세서 레지스터를 가질 수 있으며, Nt는 Ns보다 작다. Nt 개의 타겟 레지스터 중에서, N 개의 타겟 레지스터가 매핑에 이용 가능할 수 있으며, N은 Nt보다 작거나 같다. 도 3에 도시된 예로 계속할 때, N이 3이면, 레지스터(r1, r2 및 r4)가 영역에 대한 타겟 프로세서 레지스터로 매핑될 수 있다. 레지스터(r3 및 r5)는 타겟 프로세서 레지스터로 매핑되지 않을 수 있으며, 그러므로 필요에 따라 메모리로부터 검색될 수 있다.
몇몇 실시예에서, 매핑을 위해 이용 가능한 타겟 프로세서 레지스터의 개수 N은 타겟 ISA의 프로세서 레지스터의 개수 Nt보다 작을 수 있다. 다시 말해서, 하나 이상의 타겟 프로세서 레지스터가 예를 들어 매핑되지 않은 소스 레지스터를 사용하거나 정의하는 명령어를 위해 유보될 수 있다. 예를 들어, 이러한 명령어를 위해 한 개 또는 두 개의 타겟 프로세서 레지스터가 유보될 수 있다.
표 1은 영역 내의 각각의 소스 레지스터에 대한 레지스터 액세스의 총 개수를 결정하며 N 개의 소스 레지스터를 N 개의 타겟 레지스터로 매핑하기 위한 하나의 예에 상응하는 의사코드(pseudocode)를 포함한다.
Figure pat00001
따라서, 동작(220)의 종료에서, N 개의 소스 레지스터는 N 개의 타겟 레지스터로 매핑될 수 있다. 타겟 레지스터로 매핑되지 않은 소스 레지스터는 시스템 메모리(104) 내의 소스 레지스터 저장소(118), 캐시 메모리(105) 및/또는 스크래치-패드 메모리(107)로 매핑될 수 있다.
동작(222)에서, 영역 내의 각각의 이진 블록에 대해 리브-인(live-in) 및/또는 리브-아웃(live-out) 레지스터가 식별될 수 있다. 리브-인은 이진 블록 내에 먼저 정의(이진 블록 내로 먼저 기록)되지 않고 이진 블록 내에 사용(이진 블록으로부터 판독)되는 레지스터에 상응한다. 예를 들어, 도 3에 도시된 영역(305)에서, 레지스터(r2, r3 및 r5)는 블록 B 내에 먼저 정의되지 않고 사용되며, 레지스터(r2)는 블록 D 내에 정의되기 전에 사용된다. 따라서, 레지스터(r2, r3 및 r5)는 영역(305)에 대해 리브-인이다. 리브-아웃은 레지스터 값이 이진 블록 내의 명령어에 의해 변화될 수 있는 레지스터에 상응한다. 예를 들어, 영역(305)에서, 레지스터(r1 및 r4)의 값은 블록 B 내의 명령어에 의해 변화될 수 있으며, 레지스터(r2)의 값은 블록 D 내의 명령어에 의해 변화될 수 있다. 따라서, r1, r2 및 r4는 영역(305)에 대해 리브-아웃이다. 몇몇 실시예에서, 동작(222)을 나타내는 상자의 윤곽선을 나타내는 점선에 의해 표시된 동작(222)이 수행되지 않을 수 있다.
동작(224)에서, 예를 들어 영역(305)인 영역 내의 각각의 이진 블록에 대해, 최적 타겟 이진 코드 블록이 생성될 수 있다. 예를 들어, 각각의 최적 타겟 이진 코드 블록은 프롤로그, 상응하는 소스 이진 코드 블록의 변환된 소스 코드와 조건부 점프를 포함하는 바디, 및 적어도 하나의 에필로그를 포함할 수 있다. 도 4는 프롤로그(410), 블록 바디(420) 및 두 개의 에필로그(430, 440)를 포함하는 타겟 코드 블록(400)의 예를 도시한다. 조건부 점프는 블록 바디(420)에 포함된다.
프롤로그는 예를 들어 소스 레지스터 저장소(118)로부터 매핑된 또는 매핑된 리브-인 소스 레지스터에 상응하는 데이터로 타겟 레지스터를 로드하도록 구성된다. 매핑된 또는 매핑된 리브-인 소스 레지스터가 로드되는지 여부는 오버헤드에, 즉 영역 내로의 진입 시에 매핑된 소스 레지스터 모두를 로드하는 것에 연관된 오버헤드에 대한 영역 내의 각각의 소스 이진 코드 블록에 대해 리브-인 소스 레지스터를 식별하는 것에 연관된 오버헤드에 따라 달라질 수 있다. 예를 들어, 도 3에 도시된 영역(305)에 대해, 레지스터(r1, r2 및 r4)는 영역(305)에 대한 타겟 레지스터로 매핑된다. 따라서, 이러한 예에서, 블록 B 및 블록 D에 각각 연관된 각각의 프롤로그는 메모리로부터 타겟 레지스터로 소스 레지스터(r1, r2 및 r4)를 로드하도록 구성될 수 있다. 또 다른 예에서, 레지스터(r2)는 영역(305)에 대해 매핑되고 리브-인이다. 따라서, 블록 B 및 블록 D에 각각 연관된 각각의 프롤로그는 매핑된 소스 레지스터(즉, r1, r2 및 r4)를 모두 로드하는 것에 비해 보다 작은 메모리 액세스를 초래하는 레지스터(r2)를 로드하도록 구성된다.
적어도 하나의 에필로그는 제 1 에필로그 및 제 2 에필로그를 포함할 수 있다. 조건 점프는 소스 이진 코드 블록을 종결하는 분기가 영역 내의 타겟 이진 코드 블록에 존재하는지 또는 영역 내에 존재하지 않는 타겟 이진 코드 블록에 존재하는지 여부에 기초하여 흐름이 제 1 에필로그 또는 제 2 에필로그로 진행하는 지 여부를 제어하도록 구성된다. 영역 내의 타겟 이진 코드 블록은 본 명세서에서 설명되는 바와 같이 최적 타겟 이진 코드 블록이다. 영역 내에 존재하지 않는 타겟 이진 코드 블록은 비최적 타겟 이진 코드 블록이거나 또는 또 다른 영역에 연관된 최적 타겟 이진 코드 블록일 수 있다.
제 1 에필로그는 영역 내의 타겟 이진 코드 블록으로의 점프를 포함한다. 예를 들어, 도 3을 다시 참조하면, 블록 B로부터 블록 D로의 점프는 영역 내의 타겟 이진 코드 블록으로의 점프에 상응한다. 제 2 에필로그는 영역 외부에 존재하는, 예를 들어 영역(305)에 존재하지 않는 타겟 이진 코드 블록으로의 점프를 포함한다. 제 2 에필로그는 다음 타겟 이진 코드 블록으로 점프하기 이전에 리브-아웃 레지스터를 저장하도록 추가로 구성될 수 있다. 본 명세서에서 설명되는 바와 같이 리브-인 레지스터를 로드하는 것과 유사하게, 제 2 에필로그는 다음 타겟 이진 코드 블록으로 점프하기 이전에 매핑된 또는 매핑된 리브-아웃 레지스터를 저장하도록 구성될 수 있다.
도 3을 다시 참조하면, 블록 B로부터 블록 C로의 점프는 영역 외부에 존재하는 타겟 이진 코드 블록으로의 점프에 상응한다. 영역 내의 타겟 이진 코드 블록으로의 점프는 영역 내의 타겟 이진 코드 블록에 연관된 프롤로그를 우회함으로써 영역 내의 타겟 이진 코드 블록의 바디로 점프하도록 구성된다. 영역 외부의 타겟 이진 코드 블록으로의 점프는 영역 외부의 타겟 이진 코드 블록의 시작으로 점프하도록 구성된다. 영역 외부의 타겟 이진 코드 블록이 또 다른 영역에 연관된 최적 타겟 이진 코드 블록이면, 점프는 최적 타겟 이진 코드 블록의 프롤로그로 수행된다.
실행 시간 시스템(run time system), 즉 호스트 운영 시스템(120)은 타겟 코드에 의해 직접 처리되지 않을 수 있는 기능, 예를 들어 인터럽트 처리(interrupt handling)를 수행하도록 구성된다는 것이 이해될 수 있다. 이들 기능이 적절히 동작하기 위해, 게스트 상태는 일관된 지점, 즉 메모리 내의 적절한 데이터 구조에서 일관된 게스트 상태에 있다는 것이 중요하다. 게스트 상태는 블록의 실행 내에서 일관되지 않을 수 있지만 블록 경계에서 일관될 수 있다. 따라서, 공개-소스 QEMU와 같은 동적 이진 변환기는 인터럽트 처리를 코드 블록의 종료로 미루도록 구성될 수 있다. 블록의 종료에서 일관된 게스트 상태를 갖기 위해, 영역 내의 블록으로의 점프 이후에 실행 시간 시스템으로의 복귀 이전에 리브-아웃 레지스터가 (예를 들어 소스 레지스터 저장소(118)에) 저장될 수 있다. 영역 내에 존재하지 않는 블록으로의 점프에 대해, 영역 내에 존재하지 않는 블록으로의 점프 이전에 리브-아웃 레지스터가 저장될 수 있다. 영역 내에 존재하지 않는 블록으로의 점프 이후에, 제어는 실행 시간 시스템으로 복귀할 수 있다.
도 5는 적어도 하나의 최적 타겟 이진 코드 블록을 포함하는 적어도 하나의 최적 코드 영역을 포함하는 소스 이진 애플리케이션에 상응하는 타겟 이진 코드 블록을 실행하기 위한 예시적인 동작의 흐름도(500)를 도시한다. 프로그램 흐름은 시작(502)에서 시작할 수 있다. 시작(502)은 적어도 하나의 타겟 코드 블록을 포함하는 최적 타겟 이진 코드의 제 1 영역으로의 진입에 상응한다. 동작(504)에서, 제 1 영역 내의 제 1 최적 타겟 이진 코드 블록의 프롤로그가 실행될 수 있다. 프롤로그는 본 명세서에 설명되는 바와 같이 매핑된 또는 매핑된 리브-인 레지스터를 메모리로부터 로드하도록 구성된다.
그런 다음 동작(506)에서 제 1 최적 타겟 이진 코드 블록의 바디가 실행될 수 있다. 동작(508)에서, 제 1 최적 타겟 이진 코드 블록에 상응하는 소스 이진 코드 블록의 경계에서의 분기가 제 1 영역 내의 타겟 이진 코드 블록에 존재하는지 여부가 판단될 수 있다. 분기가 제 1 영역 내에 존재하지 않는 타겟 이진 코드 블록에 존재하면, 동작(510)에서, 매핑된 또는 매핑된 리브-아웃 레지스터가 메모리에, 예를 들어 소스 레지스터 저장소(118)에 저장될 수 있다. 동작(512)에서, 제 1 영역 내에 존재하지 않는 다음 타겟 이진 코드 블록의 시작으로의 점프가 실행될 수 있다. 다음 타겟 이진 코드 블록은 최적화될 수 있거나 최적화되지 않을 수 있다. 동작(514)에서, 다음 타겟 이진 코드 블록이 최적화되지 않으면, 다음 소스 이진 코드 블록에 상응하는 다음 타겟 이진 코드 블록이 실행될 수 있다. 예를 들어 제 2 영역에서 다음 타겟 이진 코드 블록이 최적화되면, 동작(504)에서 (제 2 영역 내의 다음 타겟 이진 코드 블록의) 프롤로그가 실행될 수 있으며, 그런 다음 동작(506)에서 다음 타겟 이진 코드 블록의 바디가 실행될 수 있다.
동작(508)에서, 분기가 제 1 영역 내의 타겟 이진 코드 블록에 존재한다고 결정되면, 동작(516)에서, 다음 타겟 이진 코드 블록의 바디로의 점프가 실행될 수 있다. 몇몇 실시예에서, 예를 들어 실행 시간 시스템에 의한 인터럽트 프로세싱을 용이하게 하기 위해, 레지스터가 메모리에 저장될 수 있다. 이들 실시예에서, 동작(517)에서, 실행 시간 시스템으로의 복귀가 필요한 지 여부가 판단될 수 있다. 실행 시간 시스템으로의 복귀가 필요하지 않으면, 프로그램 흐름은 동작(506)으로 진행할 수 있으며, 그런 다음 동작(506)에서 (다음 타겟 이진 코드 블록의) 바디가 실행될 수 있다. 실행 시간 시스템으로의 복귀가 필요하면, 동작(518)에서 레지스터가 메모리에 저장될 수 있으며, 동작(520)에서 프로그램 흐름은 실행 시간 시스템으로 진행할 수 있다. 실행 시간 시스템으로부터의 복귀 시에, 프로그램 흐름은 동작(504)으로 진행하여 프롤로그를 실행할 수 있으며, 레지스터가 메모리로부터 로드될 수 있다.
도 4 및 도 5를 참조하면, 분기가 영역 내에 존재하는 다음 타겟 이진 코드 블록에 존재하거나 또는 영역 내에 존재하지 않는 다음 타겟 이진 코드 블록에 존재하는지 여부를 판단하는 동작(508)은 최적 타겟 이진 코드 블록의 바디(420)의 조건부 점프(jump on condition(jCC T))에 상응한다. 동작(516)은 영역 바디 내에서의 점프인 제 1 에필로그(430)에 상응한다. 동작(510 및 512)은 제 2 에필로그(440)에 상응한다.
도 6은 도 3에 도시된 예시적인 제어 흐름 그래프(300)에 상응하는 최적 제어 흐름 그래프(600)를 도시한다. 최적 제어 흐름 그래프(600)에서, 타겟 블록 B(620)는 도 3의 제어 흐름 그래프(300)의 블록 B(320)에 상응하며, 타겟 블록 D(640)는 제어 흐름 그래프(300)의 블록 D(340)에 상응한다. 타겟 블록 B 및 타겟 블록 D는 도 4의 타겟 코드 블록(400)에 따라 구성된다. 최적 제어 흐름 그래프(600)에서 타겟 이진 코드 블록들 사이의 제어 흐름은 흐름이 영역 내에 존재하는 타겟 이진 코드 블록들 사이에 존재하는지 또는 영역 내에 존재하는 타겟 이진 코드 블록과 영역 내에 존재하지 않는 타겟 이진 코드 블록 사이에 존재하는지 여부에 따라 달라진다. 영역 내에 존재하지 않는 타겟 이진 코드 블록은 또 다른 영역에 연관된 최적 타겟 이진 코드 블록일 수 있거나 또는 비최적 타겟 이진 코드 블록일 수 있다. 예를 들어, 타겟 블록 B로부터 영역(605) 외부의 블록 C로의 제어 흐름은 타겟 블록 B의 에필로그 2(매핑된 또는 매핑된 리브-아웃을 저장함)로부터 블록 C로(즉 블록 C의 시작으로) 진행하고, 블록 C로부터 타겟 블록 D로의 제어 흐름은 블록 C로부터 타겟 블록 D의 프롤로그(매핑된 또는 매핑된 리브-인을 로드함)로 진행한다. 영역(605)에 모두 존재하는 타겟 블록 B와 타겟 블록 D 사이의 제어 흐름은 경로(624) 및 경로(642)에 의해 각각 도시된 블록 B 또는 블록 D의 에필로그 1로부터 블록 D 또는 블록 B의 바디로 진행한다.
따라서, 최적 제어 흐름 그래프(600)에 도시된 바와 같이, 프롤로그는 오직 영역 내로의 진입 시에만 실행될 수 있다. 영역 내의 타겟 이진 코드 블록들 사이의 점프는 매핑된 또는 매핑된 리브-인 레지스터를 로드하는 것에 연관된 프롤로그 및 메모리 액세스를 우회함으로써 타겟 이진 코드 블록의 바디로 점프하도록 구성된다. 유리하게는, 이것은 비교적 자주 실행된 코드의 영역에 대한 예를 들어 속도 증가와 같은 성능 개선을 초래할 수 있다.
소스 애플리케이션에 대해 최적 타겟 이진 코드 블록의 복수의 영역이 생성될 수 있다. 유리하게는, 다른 영역에 대해 최적화된 레지스터 매핑과 무관하게, 각각의 영역에 대해 레지스터 매핑이 최적화될 수 있다. 이러한 방식으로, 최적화는 영역 특이성이다. 몇몇 실시예에서, 매핑된 또는 매핑된 리브-아웃 레지스터를 저장하는 것이 영역을 퇴장할 때에만 실행되어서, 성능을 추가로 개선할 수 있다.
도 7은 블록 레벨 레지스터 매핑(710, 720, 730, 740, 750)과 본 발명에 따른 영역 레벨 레지스터 매핑(715, 725, 735, 745, 755)을 수행하는 동적 이진 변환에 대한 성능 벤치마크의 비교를 도시하는 그래프이다. 성능이 (레지스터를 메모리로 매핑하는) 개방-소스 QEMU 동적 이진 변환기에 대비되어 도시된다. 블록 레벨 레지스터 매핑에서, 각각의 타겟 코드 블록을 진입할 때, 매핑된 리브-인 레지스터가 로드되고, 각각의 타겟 코드 블록을 퇴장할 때, 매핑된 리브-아웃 레지스터가 저장된다. 본 발명에 따른 영역 레벨 레지스터 매핑의 도시된 실시예는 영역으로의 진입 시에 매핑된 리브-인 레지스터를 (메모리로부터) 로드하고 영역으로부터의 퇴장 시에 매핑된 리브-아웃 레지스터를 (메모리 내에) 저장하도록 구성된다. 모든 벤치마크에 대해, 본 발명에 따른 영역 레벨 레지스터 매핑이 기준선 QEMU 및 블록 레벨 레지스터 매핑보다 개선된 성능을 나타낸다. 평균적으로, 벤치마크에 대한 성능 개선은 블록 레벨 레지스터 매핑에 비해 대략 17%이었고, QEMU 기준선에 비해 대략 31%였다.
따라서, 본 발명에 따른 방법 및 시스템은 소스 프로세서 레지스터보다 작은 개수의 타겟 프로세서 레지스터가 존재할 때 소스 프로세서 레지스터를 타겟 프로세서 레지스터로 동적 이진 변환으로 매핑하는 것을 포함한다. "핫(hot)"이라고, 즉 비교적 자주 실행되었다고 결정된 코드의 영역에 대해, 각각의 소스 레지스터의 액세스 개수가 결정될 수 있다. 그런 다음, 가장 자주 액세스된 소스 레지스터가 이용 가능한 타겟 레지스터로 매핑될 수 있다. 영역 내의 소스 이진 코드의 각각의 블록에 대해, 프롤로그, 변환된 소스 코드와 조건부 점프를 포함하는 바디, 및 적어도 하나의 에필로그를 포함하는 최적 타겟 이진 코드의 상응하는 블록이 생성될 수 있다. 조건부 점프 및 적어도 하나의 에필로그는 제1 타겟 이진 코드 블록으로부터의 분기가 영역 내에 존재하는 다음 타겟 이진 코드 블록에 존재하거나 또는 영역 내에 존재하지 않는 다음 타겟 이진 코드 블록에 존재하는지 여부에 기초하여 흐름을 제어하도록 구성된다. 다음 타겟 이진 코드 블록이 영역 내에 존재하면, 프롤로그를 우회함으로써 다음 타겟 이진 코드 블록의 바디로의 점프가 지시된다. 다음 타겟 이진 코드 블록이 영역 내에 존재하지 않으면, 다음 타겟 이진 코드 블록의 시작으로의 점프가 지시된다. 프롤로그는 영역에 대한 매핑된 또는 매핑된 리브-인 레지스터를 메모리로부터 로드하도록 구성된다. 다음 타겟 이진 코드 블록이 영역 내에 존재하지 않으면, 에필로그는 다음 타겟 이진 코드 블록의 시작으로의 점프 이전에 매핑된 또는 매핑된 리브-아웃 레지스터를 저장하도록 구성된다. 이런 방식으로, 영역으로의 진입 시에 매핑된 또는 매핑된 리브-인 레지스터가 메모리로부터 로드되고, 영역으로부터의 퇴장 시에 매핑된 또는 매핑된 리브-아웃 레지스터가 메모리에 저장되어, 블록 레벨 레지스터에 비해 로드/저장하는 메모리 액세스를 감소시킨다.
본 명세서에서 설명되는 바와 같이, 최적화는 계수기를 포함하며 타겟 이진 코드 블록으로 삽입된 탐침에 따라 달라진다. 따라서, 계수기에 기초하여 결정된 실행 빈도는 유한 시간 주기를 나타낸다. 코드의 영역에 대한 실행 빈도가 시간에 따라 변화하면, 최적화에 의해 초기에 제공된 성능 개선이 열화, 즉 덜 최적화될 수 있다. 비록 최적화가 반복될 수 있을 지라도, 본 명세서에서 설명되는 바와 같이 과정을 반복할 지 여부는 이전의 최적 타겟 이진 코드 블록을 실행하는 시간에 대한 최적화를 수행하는 시간을 고려함에 따라 달라질 수 있다.
물론, 도 2a, 도 2b 및 도 5가 몇몇 실시예에 따른 예시적인 동작을 도시하지만, 다른 실시예에서 도 2a, 도 2b 및/또는 도 5에 도시된 모든 동작이 필요하지 않을 수 있다는 것이 이해되어야 한다. 실제로, 본 발명의 다른 실시예가 도 2a, 도 2b 및/또는 도 5에 도시된 동작 및/또는 추가 동작의 부분조합을 포함할 수 있다는 것이 본 명세서에서 충분히 고려된다. 그러므로, 하나의 도면에 정확하게 도시되지 않은 특성 및/또는 동작에 관한 특허청구범위는 본 발명의 범위 및 내용 내로 간주된다.
메모리(104), 캐시 메모리(105) 및/또는 스크래치-패드 메모리(107)는 이하의 메모리 유형, 즉 반도체 펌웨어 메모리, 프로그램 가능 메모리, 비휘발성 메모리, ROM(read only memory), 전기식 프로그램 가능 메모리, RAM(random access memory), 플래시 메모리, 자기 디스크 메모리, 및/또는 광학 디스크 메모리 중 하나 이상의 메모리를 포함할 수 있다. 추가적으로 또는 대안적으로, 메모리(104), 캐시 메모리(105) 및/또는 스크래치-패드 메모리(107)는 다른 그리고/또는 이후에 개발될 형태의 컴퓨터 판독 가능 메모리를 포함할 수 있다.
본 명세서에서 설명되는 방법의 실시예는 프로세서 및/또는 다른 프로그램 가능 소자를 사용하여 수행될 수 있다. 그 목적을 위해, 본 명세서에서 설명되는 방법은 하나 이상의 프로세서에 의해 실행될 때 방법을 수행하는 명령어를 저장하고 있는 유형의(tangible) 컴퓨터 판독 가능 매체 상에서 수행될 수 있다. 저장 매체는 임의의 형태의 유형의 매체, 예를 들어 플로피 디스크, 광학 디스크, CD-ROM(compact disk ROM), CD-RW(compact disk rewritable) 및 자기 광학 디스크를 포함하는 임의의 형태의 디스크, ROM을 포함하는 반도체 소자, 동적 RAM 및 정적 RAM과 같은 RAM, 소거형 프로그램 가능 ROM(erasable programmable ROM, EPROM), 전기적 소거형 프로그램 가능 ROM(electrically erasable programmable ROM, EEPROM), 플래시 메모리, 자기 또는 광학 카드, 또는 전자적 명령어를 저장하기에 적당한 임의의 형태의 유형의 매체를 포함할 수 있다.
달리 구체적으로 기술되지 않는 한, 선행하는 설명으로부터 명백한 바와 같이, 명세서를 통하여, "동작", "프로세싱", "컴퓨팅", "계산", "판단" 등과 같은 용어를 사용하는 논의는 컴퓨팅 시스템의 레지스터 및/또는 메모리 내의 전자적 수량과 같은 물리량으로서 나타낸 데이터를 컴퓨팅 시스템의 메모리, 레지스터 또는 다른 이러한 정보 저장, 전송 또는 디스플레이 소자 내의 물리량으로서 유사하게 나타낸 다른 데이터로 조작하고/하거나 변환하는 컴퓨터 또는 컴퓨팅 시스템 또는 유사한 전자 컴퓨팅 소자 또는 장치의 작용 및/또는 프로세스를 지칭하는 것으로 이해된다.
본 명세서의 임의의 실시예에서 사용된 바와 같은 "회로"는 예를 들어 프로그램 가능 회로에 의해 실행된 명령어를 저장하는 고정 배선식 회로(hardwired circuitry), 프로그램 가능 회로, 상태 기계 회로(state machine circuitry) 및/또는 펌웨어를 단독으로 또는 임의의 조합으로 포함할 수 있다.
하나의 양태에 따라 하나의 방법이 개시된다. 그 방법은 컴퓨터 시스템에 의한 실행을 위해 복수의 소스 이진 코드 블록을 포함하는 소스 이진 애플리케이션을 로드하는 것을 포함할 수 있다. 컴퓨터 시스템은 메모리와 Nt 개의 타겟 레지스터를 포함하는 프로세싱 유닛을 포함할 수 있으며, Nt는 상응하는 소스 명령어 세트 아키텍처에서의 소스 레지스터의 개수 Ns보다 작다. 그 방법은, 소스 이진 애플리케이션의 실행 시간 동안에, 소스 이진 애플리케이션 내에서 자주 실행된 소스 이진 코드 블록을 식별하는 것, 및 자주 실행된 소스 이진 코드 블록과 유사도 문턱값을 초과하는 적어도 하나의 인접 소스 이진 코드 블록을 포함하는 영역을 정의하는 것을 추가로 포함할 수 있으며, 자주 실행된 소스 이진 코드 블록과 적어도 하나의 인접 소스 이진 코드 블록은 적어도 하나의 소스 레지스터 액세스를 포함하고, 각각 분기 명령어에 의해 제한된다. 그 방법은 영역 내에 액세스된 각각의 소스 레지스터에 대한 액세스 빈도를 결정하는 것, 영역 내의 N 개의 가장 자주 액세스된 소스 레지스터 각각을 Nt 개의 타겟 레지스터 중 각각의 하나의 타겟 레지스터로 매핑하는 것, 및 레지스터 매핑에 적어도 부분적으로 기초하여 영역 내의 각각의 소스 이진 코드 블록에 상응하는 최적 타겟 이진 코드 블록을 생성하는 것을 추가로 포함할 수 있으며, N은 Nt보다 작거나 같다.
또 다른 양태에 따라 하나의 제품이 개시되며, 그 제품은 프로세서에 의해 실행될 때, 실행을 위한 복수의 소스 이진 코드 블록을 포함하는 소스 이진 애플리케이션을 로드하는 단계(프로세스는 Nt 개의 타겟 레지스터를 포함하고, Nt는 상응하는 소스 명령어 세트 아키텍처에서의 소스 레지스터의 개수 Ns보다 작음), 소스 이진 애플리케이션의 실행 시간 동안에, 소스 이진 애플리케이션 내에서 자주 실행된 소스 이진 코드 블록을 식별하는 단계, 자주 실행된 소스 이진 코드 블록과 유사도 문턱값을 초과하는 적어도 하나의 인접 소스 이진 코드 블록을 포함하는 영역을 정의하는 단계(자주 실행된 소스 이진 코드 블록과 적어도 하나의 인접 소스 이진 코드 블록은 적어도 하나의 소스 레지스터 액세스를 포함하고, 각각 분기 명령어에 의해 제한됨), 영역 내에 액세스된 각각의 소스 레지스터에 대한 액세스 빈도를 결정하는 단계, 영역 내의 N 개의 가장 자주 액세스된 소스 레지스터 각각을 Nt 개의 타겟 레지스터 중 각각의 하나의 타겟 레지스터로 매핑하는 단계(N은 Nt보다 작거나 같은), 및 레지스터 매핑에 적어도 부분적으로 기초하여 영역 내의 각각의 소스 이진 코드 블록에 상응하는 최적 타겟 이진 코드 블록을 생성하는 단계를 포함하는 동작을 초래할 수 있는 명령어를 저장하고 있는 유형의 저장 매체를 포함한다.
또 다른 양태에 따라 시스템이 개시된다. 그 시스템은 Nt 개의 타겟 레지스터를 포함하는 프로세서, 및 동적 이진 변환기, 레지스터 매핑 모듈 및 프로세서 상에서 실행되는 복수의 소스 이진 코드 블록을 포함하는 소스 이진 애플리케이션을 수용하도록 구성된 메모리를 포함하며, Nt는 상응하는 소스 명령어 세트 아키텍처 내의 소스 레지스터의 개수 Ns보다 작고, 동적 이진 변환기 및 레지스터 매핑 모듈이 프로세서 상에서 실행될 때, 동적 이진 변환기 및 레지스터 매핑 모듈 중 적어도 하나에 의해 프로세서가 소스 이진 애플리케이션의 실행 시간 동안에 소스 이진 애플리케이션 내에서 자주 실행된 소스 이진 코드 블록을 식별하고, 자주 실행된 소스 이진 코드 블록과 유사도 문턱값을 초과하는 적어도 하나의 인접 소스 이진 코드 블록을 포함하는 영역을 정의하며 (자주 실행된 소스 이진 코드 블록과 적어도 하나의 인접 소스 이진 코드 블록은 적어도 하나의 소스 레지스터 액세스를 포함하고, 각각 하나의 분기 명령어에 의해 제한됨), 영역 내에 액세스된 각각의 소스 레지스터에 대한 액세스 빈도를 결정하고, 영역 내의 N 개의 가장 자주 액세스된 소스 레지스터 각각을 Nt 개의 타겟 레지스터 중 각각의 하나의 타겟 레지스터로 매핑하며(N은 Nt보다 작거나 같음), 레지스터 매핑에 적어도 부분적으로 기초하여 영역 내의 각각의 소스 이진 코드 블록에 상응하는 최적 타겟 이진 코드 블록을 생성하게 된다.
본 명세서에서 이용되는 용어 및 표현은 설명의 관점으로 사용되고 제한적인 관점으로 사용되지 않으며, 이러한 용어 및 표현의 사용에 있어서 도시되고 설명된 특성의 임의의 등가물(또는 그 일부분)을 배제하려는 의도는 없고, 특허청구범위의 범위 내에서 다양한 변형이 가능하다는 것이 인정된다. 따라서, 특허청구범위는 이러한 모든 등가물을 포함하도록 의도된다.
102: CPU 104: 시스템 메모리
105: 캐시 메모리 106: 프로세서 레지스터
107: 스크래치-패드 메모리 110: 소스 이진 애플리케이션
111: 코드 캐시 112: 타겟 이진 코드 블록
114: 동적 이진 변환기 코드 115: 동적 이진 변환 시스템
116: 레지스터 매핑 모듈 118: 소스 레지스터 저장소
120: 호스트 운영 시스템

Claims (24)

  1. 컴퓨터 시스템에 의한 실행을 위한 복수의 소스 이진 코드 블록을 포함하는 소스 이진 애플리케이션을 로드하는 단계 -상기 컴퓨터 시스템은 메모리와 Nt 개의 타겟 레지스터를 포함하는 프로세싱 유닛을 포함하고, 소스 이진 애플리케이션은 Ns 개의 소스 레지스터를 갖는 환경에서 실행되도록 구성되며, Nt는 Ns보다 작음- ,
    상기 소스 이진 애플리케이션의 실행 시간 동안에 상기 소스 이진 애플리케이션 내에서 자주 실행된 소스 이진 코드 블록을 식별하는 단계,
    상기 자주 실행된 소스 이진 코드 블록 및 유사도 문턱값(affinity threshold)을 초과하는 적어도 하나의 인접 소스 이진 코드 블록을 포함하는 영역을 정의하는 단계 -상기 자주 실행된 소스 이진 코드 블록과 상기 적어도 하나의 인접 소스 이진 코드 블록은 모두 적어도 하나의 소스 레지스터를 액세스하는 명령어를 포함함- ,
    상기 영역 내에 액세스된 각각의 소스 레지스터에 대한 액세스 빈도를 결정하는 단계, 및
    상기 영역 내의 N 개의 가장 자주 액세스된 소스 레지스터 각각을 상기 Nt 개의 타겟 레지스터 중 각각의 하나의 타겟 레지스터로 매핑하는 단계 -N은 Nt보다 작거나 같음- 를 포함하는
    방법.
  2. 제 1 항에 있어서,
    상기 레지스터 매핑에 적어도 부분적으로 기초하여 상기 영역 내의 각각의 소스 이진 코드 블록에 상응하는 최적 타겟 이진 코드 블록을 생성하는 단계를 더 포함하되, 각각의 최적 타겟 이진 코드 블록은 각각의 매핑된 소스 레지스터에 연관된 데이터를 메모리로부터 상응하는 타겟 레지스터로 로드하도록 구성된 프롤로그, 상기 소스 이진 코드 블록에 상응하는 변환된 소스 이진 코드와 조건부 점프(jump on condition)를 포함하는 바디(body), 및 적어도 하나의 에필로그(epilogue)를 포함하며, 상기 조건부 점프 및 상기 적어도 하나의 에필로그는 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하는지에 적어도 부분적으로 기초하여 상기 영역 내의 제 1 최적 타겟 이진 코드 블록으로부터 상기 제 2 타겟 이진 코드 블록으로의 흐름을 제어하도록 구성되는
    방법.
  3. 제 2 항에 있어서,
    상기 복수의 에필로그는 제 1 에필로그와 제 2 에필로그를 포함하되, 상기 제 1 에필로그는 상기 제 2 타겟 이진 코드 블록이 상기 영역 내의 제 2 최적 타겟 이진 코드 블록이면 수행되도록 구성되고, 상기 제 2 최적 타겟 이진 코드 블록의 바디로 점프하는 제 1 명령어를 포함하며, 상기 제 2 에필로그는 상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하지 않으면 수행되도록 구성되고, 각각의 매핑된 소스 레지스터에 상응하는 각각의 타겟 레지스터를 메모리에 저장하는 제 2 명령어와 상기 제 2 타겟 이진 코드 블록의 시작(beginning)으로 점프하는 제 3 명령어를 포함하는
    방법.
  4. 제 1 항에 있어서,
    상기 영역 내의 각각의 소스 이진 코드 블록에 대한 리브-인(live-in) 레지스터 및 리브-아웃(live-out) 레지스터를 식별하는 것을 포함하는, 상기 영역에 대한 리브-인 레지스터 및 리브-아웃 레지스터를 식별하는 단계를 더 포함하는
    방법.
  5. 제 4 항에 있어서,
    상기 레지스터 매핑에 적어도 부분적으로 기초하여 상기 영역 내의 각각의 소스 이진 코드 블록에 상응하는 최적 타겟 이진 코드 블록을 생성하는 단계를 더 포함하되, 각각의 최적 타겟 이진 코드 블록은 각각의 매핑된 리브-인 소스 레지스터에 연관된 데이터를 메모리로부터 상응하는 타겟 레지스터로 로드하도록 구성된 프롤로그, 상기 소스 이진 코드 블록에 상응하는 변환된 소스 이진 코드와 조건부 점프를 포함하는 바디, 및 적어도 하나의 에필로그를 포함하며, 상기 조건부 점프 및 상기 적어도 하나의 에필로그는 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하는지에 적어도 부분적으로 기초하여 상기 영역 내의 제 1 최적 타겟 이진 코드 블록으로부터 상기 제 2 타겟 이진 코드 블록으로의 흐름을 제어하도록 구성되는
    방법.
  6. 제 2 항에 있어서,
    상기 영역 내의 제 1 최적 타겟 이진 코드 블록의 프롤로그(prologue)를 실행하는 단계 -상기 실행 단계는 N 개의 타겟 레지스터 각각을 상기 영역에 대한 상기 N 개의 매핑된 소스 레지스터 중 각각의 매핑된 소스 레지스터에 상응하는 데이터로 로드하는 단계를 포함함- ,
    상기 제 1 최적 타겟 이진 코드 블록의 바디를 실행하는 단계 -상기 제 1 최적 타겟 이진 코드 블록은 제 2 타겟 이진 코드 블록으로 점프하도록 구성된 제 1 분기 명령어를 포함함- ,
    상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하는지를 판단하는 단계, 및
    상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하면 상기 제 2 타겟 이진 코드 블록에 상응하는 제 2 최적 타겟 코드 블록의 바디로 점프하도록 제 1 에필로그를 실행하거나 또는 상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하지 않으면 상기 제 2 타겟 코드 블록의 시작으로 점프하도록 제 2 에필로그를 실행하는 단계를 더 포함하는
    방법.
  7. 제 5 항에 있어서,
    상기 영역 내의 제 1 최적 타겟 이진 코드 블록의 프롤로그를 실행하는 단계 -상기 실행 단계는 상기 영역 내의 각각의 매핑된 리브-인 소스 레지스터에 대해 하나의 타겟 레지스터를 상기 매핑된 리브-인 소스 레지스터에 상응하는 메모리로부터의 데이터로 로드하는 단계를 포함함- ,
    상기 제 1 최적 타겟 이진 코드 블록의 바디를 실행하는 단계 -상기 제 1 최적 타겟 이진 코드 블록은 제 2 타겟 이진 코드 블록으로 점프하도록 구성된 제 1 분기 명령어를 포함함- ,
    상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하는지를 판단하는 단계, 및
    상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하면 상기 제 2 타겟 코드 블록의 바디로 점프하도록 제 1 에필로그를 실행하거나 상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하지 않으면 상기 영역에 대한 상기 매핑된 리브-아웃 레지스터를 메모리에 저장하며 상기 제 2 타겟 코드 블록의 시작으로 점프하도록 제 2 에필로그를 실행하는 단계를 더 포함하는
    방법.
  8. 제 1 항에 있어서,
    유사도는 상기 자주 실행된 소스 이진 코드 블록과 상기 적어도 하나의 인접 소스 이진 코드 블록의 실행 가능성에서의 상관도에 상응하는
    방법.
  9. 제 1 항에 있어서,
    상기 자주 실행된 소스 이진 코드 블록과 상기 적어도 하나의 인접 소스 이진 코드 블록은 각각 분기 명령어에 의해 제한되는
    방법.
  10. 프로세서에 의해 실행될 때,
    실행을 위한 복수의 소스 이진 코드 블록을 포함하는 소스 이진 애플리케이션을 로드하는 동작 -상기 프로세서는 Nt 개의 타겟 레지스터를 포함하고, 상기 소스 이진 애플리케이션은 Ns 개의 소스 레지스터를 갖는 환경에서 실행되도록 구성되며, Nt는 Ns보다 작음- ,
    상기 소스 이진 애플리케이션의 실행 시간 동안에 상기 소스 이진 애플리케이션 내에서 자주 실행된 소스 이진 코드 블록을 식별하는 동작,
    상기 자주 실행된 소스 이진 코드 블록 및 유사도 문턱값을 초과하는 적어도 하나의 인접 소스 이진 코드 블록을 포함하는 영역을 정의하는 동작 -유사도는 상기 자주 실행된 소스 이진 코드 블록과 상기 적어도 하나의 인접 소스 이진 코드 블록의 실행 가능성에서의 상관도에 상응하고, 상기 자주 실행된 소스 이진 코드 블록과 상기 적어도 하나의 인접 소스 이진 코드 블록은 모두 적어도 하나의 소스 레지스터를 액세스하는 명령어를 포함하며, 각각 분기 명령어에 의해 제한됨- ,
    상기 영역 내에 액세스된 각각의 소스 레지스터에 대한 액세스 빈도를 결정하는 동작, 및
    상기 영역 내의 N 개의 가장 자주 액세스된 소스 레지스터 각각을 상기 Nt 개의 타겟 레지스터 중 각각의 하나의 타겟 레지스터로 매핑하는 동작 -N은 Nt보다 작거나 같음- 을 포함하는 동작들을 수행하게 하는 명령어를 저장하고 있는
    컴퓨터 판독가능 저장 매체.
  11. 제 10 항에 있어서,
    상기 명령어는 상기 프로세서에 의해 실행될 때 상기 레지스터 매핑에 적어도 부분적으로 기초하여 상기 영역 내의 각각의 소스 이진 코드 블록에 상응하는 최적 타겟 이진 코드 블록을 생성하는 동작을 더 수행하게 하되, 각각의 최적 타겟 이진 코드 블록은 각각의 매핑된 소스 레지스터에 연관된 데이터를 메모리로부터 상응하는 타겟 레지스터로 로드하도록 구성된 프롤로그, 상기 소스 이진 코드 블록에 상응하는 변환된 소스 이진 코드와 조건부 점프를 포함하는 바디, 및 적어도 하나의 에필로그를 포함하며, 상기 조건부 점프 및 상기 적어도 하나의 에필로그는 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하는지에 적어도 부분적으로 기초하여 상기 영역 내의 제 1 최적 타겟 이진 코드 블록으로부터 상기 제 2 타겟 이진 코드 블록으로의 흐름을 제어하도록 구성되는
    컴퓨터 판독가능 저장 매체.
  12. 제 11 항에 있어서,
    상기 복수의 에필로그는 제 1 에필로그와 제 2 에필로그를 포함하고, 상기 제 1 에필로그는 상기 제 2 타겟 이진 코드 블록이 상기 영역 내의 제 2 최적 타겟 이진 코드 블록이면 수행되도록 구성되고, 상기 제 2 에필로그는 상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하지 않으면 수행되도록 구성되고, 상기 제 1 에필로그는 상기 제 2 최적 타겟 이진 코드 블록의 바디로 점프하는 제 1 명령어를 포함하며, 상기 제 2 에필로그는 각각의 매핑된 소스 레지스터에 상응하는 각각의 타겟 레지스터를 메모리에 저장하는 제 2 명령어와 상기 제 2 타겟 이진 코드 블록의 시작으로 점프하는 제 3 명령어를 포함하는
    컴퓨터 판독가능 저장 매체.
  13. 제 10 항에 있어서,
    상기 명령어는 상기 프로세서에 의해 실행될 때 상기 영역 내의 각각의 소스 이진 코드 블록에 대한 리브-인 레지스터 및 리브-아웃 레지스터를 식별하는 것을 포함하는, 상기 영역에 대한 리브-인 레지스터 및 리브-아웃 레지스터를 식별하는 동작을 포함하는 동작을 더 수행하게 하는
    컴퓨터 판독가능 저장 매체.
  14. 제 13 항에 있어서,
    상기 명령어는 상기 프로세서에 의해 실행될 때 상기 레지스터 매핑에 적어도 부분적으로 기초하여 상기 영역 내의 각각의 소스 이진 코드 블록에 상응하는 최적 타겟 이진 코드 블록을 생성하는 동작을 더 수행하게 하되, 각각의 최적 타겟 이진 코드 블록은 각각의 매핑된 리브-인 소스 레지스터에 연관된 데이터를 메모리로부터 상응하는 타겟 레지스터로 로드하도록 구성된 프롤로그, 상기 소스 이진 코드 블록에 상응하는 변환된 소스 이진 코드와 조건부 점프를 포함하는 바디, 및 적어도 하나의 에필로그를 포함하며, 상기 조건부 점프 및 상기 적어도 하나의 에필로그는 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하는지에 적어도 부분적으로 기초하여 상기 영역 내의 제 1 최적 타겟 이진 코드 블록으로부터 상기 제 2 타겟 이진 코드 블록으로의 흐름을 제어하도록 구성되는
    컴퓨터 판독가능 저장 매체.
  15. 제 11 항에 있어서,
    상기 명령어는 상기 프로세서에 의해 실행될 때,
    상기 영역 내의 제 1 최적 타겟 이진 코드 블록의 프롤로그를 실행하되, 상기 실행은 N 개의 타겟 레지스터 각각을 상기 영역에 대한 상기 N 개의 매핑된 소스 레지스터 중 각각의 매핑된 소스 레지스터에 상응하는 데이터로 로드하는 것을 포함하는 동작,
    상기 제 1 최적 타겟 이진 코드 블록의 바디를 실행하되, 상기 제 1 최적 타겟 이진 코드 블록은 제 2 타겟 이진 코드 블록으로 점프하도록 구성된 제 1 분기 명령어를 포함하는 동작,
    상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하는지를 판단하는 동작, 및
    상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하면 상기 제 2 타겟 이진 코드 블록에 상응하는 제 2 최적 타겟 코드 블록의 바디로 점프하도록 제 1 에필로그를 실행하거나 또는 상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하지 않으면 상기 제 2 타겟 코드 블록의 시작으로 점프하도록 제 2 에필로그를 실행하는 동작을 포함하는 동작을 더 수행하게 하는
    컴퓨터 판독가능 저장 매체.
  16. 제 14 항에 있어서,
    상기 명령어는 상기 프로세서에 의해 실행될 때,
    상기 영역 내의 제 1 최적 타겟 이진 코드 블록의 프롤로그를 실행하며, 상기 영역 내의 각각의 매핑된 리브-인 소스 레지스터에 대해 하나의 타겟 레지스터를 상기 매핑된 리브-인 소스 레지스터에 상응하는 메모리로부터의 데이터로 로드하는 동작을 포함하는 동작,
    상기 제 1 최적 타겟 이진 코드 블록의 바디를 실행하되, 상기 제 1 최적 타겟 이진 코드 블록은 제 2 타겟 이진 코드 블록으로 점프하도록 구성된 제 1 분기 명령어를 포함하는 동작,
    상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하는지를 판단하는 동작, 및
    상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하면 상기 제 2 타겟 코드 블록의 바디로 점프하도록 제 1 에필로그를 실행하거나 또는 상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하지 않으면 상기 영역에 대한 상기 매핑된 리브-아웃 레지스터를 메모리에 저장하며 상기 제 2 타겟 코드 블록의 시작으로 점프하도록 제 2 에필로그를 실행하는 동작을 포함하는 동작을 더 수행하게 하는
    컴퓨터 판독가능 저장 매체.
  17. Nt 개의 타겟 레지스터를 포함하는 프로세서, 및
    동적 이진 변환기, 레지스터 매핑 모듈, 및 Ns 개의 소스 레지스터를 갖는 환경에서 실행되도록 구성된 소스 이진 애플리케이션을 저장하도록 구성된 메모리를 포함하되,
    Nt는 Ns보다 작고, 상기 소스 이진 애플리케이션은 상기 프로세서 상에서 실행되는 복수의 소스 이진 코드 블록을 포함하며, 상기 동적 이진 변환기 및 상기 레지스터 매핑 모듈이 상기 프로세서 상에서 실행될 때 상기 동적 이진 변환기 및 상기 레지스터 매핑 모듈 중 적어도 하나는 상기 프로세서로 하여금,
    상기 소스 이진 애플리케이션의 실행 시간 동안에 상기 소스 이진 애플리케이션 내에서 자주 실행된 소스 이진 코드 블록을 식별하도록 하고,
    상기 자주 실행된 소스 이진 코드 블록 및 유사도 문턱값을 초과하는 적어도 하나의 인접 소스 이진 코드 블록을 포함하는 영역을 정의하도록 하되, 상기 자주 실행된 소스 이진 코드 블록과 상기 적어도 하나의 인접 소스 이진 코드 블록은 모두 적어도 하나의 소스 레지스터를 액세스하는 명령어를 포함하고,
    상기 영역 내에 액세스된 각각의 소스 레지스터에 대한 액세스 빈도를 결정하도록 하며,
    상기 영역 내의 N 개의 가장 자주 액세스된 소스 레지스터 각각을 상기 Nt 개의 타겟 레지스터 중 각각의 하나의 타겟 레지스터로 매핑하도록 하되, N은 Nt보다 작거나 같은
    시스템.
  18. 제 17 항에 있어서,
    상기 레지스터 매핑 모듈은 추가적으로 상기 프로세서로 하여금 상기 레지스터 매핑에 적어도 부분적으로 기초하여 상기 영역 내의 각각의 소스 이진 코드 블록에 상응하는 최적 타겟 이진 코드 블록을 생성하도록 하되, 각각의 최적 타겟 이진 코드 블록은 각각의 매핑된 소스 레지스터에 연관된 데이터를 메모리로부터 상응하는 타겟 레지스터로 로드하도록 구성된 프롤로그, 상기 소스 이진 코드 블록에 상응하는 변환된 소스 이진 코드와 조건부 점프를 포함하는 바디, 및 적어도 하나의 에필로그를 포함하며, 상기 조건부 점프 및 상기 적어도 하나의 에필로그는 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하는지에 적어도 부분적으로 기초하여 상기 영역 내의 제 1 최적 타겟 이진 코드 블록으로부터 상기 제 2 타겟 이진 코드 블록으로의 흐름을 제어하도록 구성된
    시스템.
  19. 제 18 항에 있어서,
    상기 복수의 에필로그는 제 1 에필로그와 제 2 에필로그를 포함하고, 상기 제 1 에필로그는 상기 제 2 타겟 이진 코드 블록이 상기 영역 내의 제 2 최적 타겟 이진 코드 블록이면 수행되도록 구성되고, 상기 제 2 에필로그는 상기 제 2 타겟 이진 코드 블록이 상기 영역 내에 존재하지 않으면 수행되도록 구성되고, 상기 제 1 에필로그는 상기 제 2 최적 타겟 이진 코드 블록의 바디로 점프하는 제 1 명령어를 포함하며, 상기 제 2 에필로그는 각각의 매핑된 소스 레지스터에 상응하는 각각의 타겟 레지스터를 메모리에 저장하는 제 2 명령어와 상기 제 2 타겟 이진 코드 블록의 시작으로 점프하는 제 3 명령어를 포함하는
    시스템.
  20. 제 17 항에 있어서,
    상기 레지스터 매핑 모듈은 추가적으로 상기 프로세서로 하여금 상기 영역 내의 각각의 소스 이진 코드 블록에 대한 리브-인 레지스터 및 리브-아웃 레지스터를 식별하는 것을 포함하는, 상기 영역에 대한 리브-인 레지스터 및 리브-아웃 레지스터를 식별하도록 하는
    시스템.
  21. 제 10 항에 있어서,
    유사도는 상기 자주 실행된 소스 이진 코드 블록과 상기 적어도 하나의 인접 소스 이진 코드 블록의 실행 가능성에서의 상관도에 상응하는
    컴퓨터 판독가능 저장 매체.
  22. 제 10 항에 있어서,
    상기 자주 실행된 소스 이진 코드 블록과 상기 적어도 하나의 인접 소스 이진 코드 블록은 각각 분기 명령어에 의해 제한되는
    컴퓨터 판독가능 저장 매체.
  23. 제 17 항에 있어서,
    유사도는 상기 자주 실행된 소스 이진 코드 블록과 상기 적어도 하나의 인접 소스 이진 코드 블록의 실행 가능성에서의 상관도에 상응하는
    시스템.
  24. 제 17 항에 있어서,
    상기 자주 실행된 소스 이진 코드 블록과 상기 적어도 하나의 인접 소스 이진 코드 블록은 각각 분기 명령어에 의해 제한되는
    시스템.
KR1020110057530A 2010-06-14 2011-06-14 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체 KR101381274B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/815,023 US8479176B2 (en) 2010-06-14 2010-06-14 Register mapping techniques for efficient dynamic binary translation
US12/815,023 2010-06-14

Publications (2)

Publication Number Publication Date
KR20110136749A true KR20110136749A (ko) 2011-12-21
KR101381274B1 KR101381274B1 (ko) 2014-04-04

Family

ID=44785163

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020110057530A KR101381274B1 (ko) 2010-06-14 2011-06-14 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체
KR1020127032581A KR20130018925A (ko) 2010-06-14 2011-06-14 효율적인 동적 바이너리 변환을 위한 레지스터 맵핑 기술

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020127032581A KR20130018925A (ko) 2010-06-14 2011-06-14 효율적인 동적 바이너리 변환을 위한 레지스터 맵핑 기술

Country Status (9)

Country Link
US (1) US8479176B2 (ko)
EP (1) EP2400388A1 (ko)
JP (1) JP2012003761A (ko)
KR (2) KR101381274B1 (ko)
CN (2) CN102934082B (ko)
HK (1) HK1165039A1 (ko)
RU (1) RU2515217C2 (ko)
SG (1) SG176872A1 (ko)
WO (1) WO2011159739A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140064710A (ko) * 2012-09-21 2014-05-28 인텔 코오퍼레이션 이진 번역을 수행하기 위한 방법 및 시스템

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US8479176B2 (en) * 2010-06-14 2013-07-02 Intel Corporation Register mapping techniques for efficient dynamic binary translation
US9195486B2 (en) * 2010-07-30 2015-11-24 Apple Inc. Observation and analysis based code optimization
WO2012095901A1 (ja) * 2011-01-12 2012-07-19 パナソニック株式会社 プログラム実行装置およびコンパイラシステム
US9141389B2 (en) * 2011-04-07 2015-09-22 Via Technologies, Inc. Heterogeneous ISA microprocessor with shared hardware ISA registers
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US9336180B2 (en) 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US9146742B2 (en) * 2011-04-07 2015-09-29 Via Technologies, Inc. Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US9032189B2 (en) 2011-04-07 2015-05-12 Via Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US9043580B2 (en) 2011-04-07 2015-05-26 Via Technologies, Inc. Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9128701B2 (en) 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
US9417855B2 (en) * 2011-09-30 2016-08-16 Intel Corporation Instruction and logic to perform dynamic binary translation
US10146545B2 (en) 2012-03-13 2018-12-04 Nvidia Corporation Translation address cache for a microprocessor
US9880846B2 (en) 2012-04-11 2018-01-30 Nvidia Corporation Improving hit rate of code translation redirection table with replacement strategy based on usage history table of evicted entries
US10241810B2 (en) 2012-05-18 2019-03-26 Nvidia Corporation Instruction-optimizing processor with branch-count table in hardware
US9032381B2 (en) 2012-06-29 2015-05-12 Intel Corporation State recovery methods and apparatus for computing platforms
US10157063B2 (en) * 2012-09-28 2018-12-18 Intel Corporation Instruction and logic for optimization level aware branch prediction
US20140189310A1 (en) 2012-12-27 2014-07-03 Nvidia Corporation Fault detection in instruction translations
KR20140097927A (ko) * 2013-01-30 2014-08-07 삼성전자주식회사 소프트웨어의 보안을 높이는 방법
US10108424B2 (en) * 2013-03-14 2018-10-23 Nvidia Corporation Profiling code portions to generate translations
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
US20150277914A1 (en) * 2014-03-27 2015-10-01 John H. Kelm Lock elision with binary translation based processors
US10162617B2 (en) * 2015-04-10 2018-12-25 Google Llc Binary translation into native client
US10007497B2 (en) * 2015-04-10 2018-06-26 Google Llc Binary translation on shared object level
US10176001B2 (en) 2015-05-28 2019-01-08 Mitsubishi Electric Corporation Simulation device, simulation method, and computer readable medium
US9811324B2 (en) * 2015-05-29 2017-11-07 Google Inc. Code caching system
WO2017028909A1 (en) * 2015-08-18 2017-02-23 Huawei Technologies Co., Ltd. Shared physical registers and mapping table for architectural registers of multiple threads
US10235177B2 (en) * 2016-07-02 2019-03-19 Intel Corporation Register reclamation
US10282182B2 (en) * 2016-09-23 2019-05-07 Intel Corporation Technologies for translation cache management in binary translation systems
US10191745B2 (en) * 2017-03-31 2019-01-29 Intel Corporation Optimized call-return and binary translation
KR102006242B1 (ko) * 2017-09-29 2019-08-06 주식회사 인사이너리 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템
US10613877B2 (en) * 2018-03-23 2020-04-07 International Business Machines Corporation Container hyperlinking
US10691435B1 (en) * 2018-11-26 2020-06-23 Parallels International Gmbh Processor register assignment for binary translation
CN111459572B (zh) * 2020-03-31 2023-01-31 深圳市汇顶科技股份有限公司 程序加载方法、控制器、芯片以及电子设备
US11900136B2 (en) 2021-07-28 2024-02-13 Sony Interactive Entertainment LLC AoT compiler for a legacy game

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01217632A (ja) 1988-02-26 1989-08-31 Nec Corp データへのレジスタ割付け方式
US6091897A (en) * 1996-01-29 2000-07-18 Digital Equipment Corporation Fast translation and execution of a computer program on a non-native architecture by use of background translator
US5842017A (en) * 1996-01-29 1998-11-24 Digital Equipment Corporation Method and apparatus for forming a translation unit
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
US7275246B1 (en) * 1999-01-28 2007-09-25 Ati International Srl Executing programs for a first computer architecture on a computer of a second architecture
US6763452B1 (en) * 1999-01-28 2004-07-13 Ati International Srl Modifying program execution based on profiling
US8127121B2 (en) * 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US8065504B2 (en) * 1999-01-28 2011-11-22 Ati International Srl Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor
US6820255B2 (en) * 1999-02-17 2004-11-16 Elbrus International Method for fast execution of translated binary code utilizing database cache for low-level code correspondence
US6625807B1 (en) * 1999-08-10 2003-09-23 Hewlett-Packard Development Company, L.P. Apparatus and method for efficiently obtaining and utilizing register usage information during software binary translation
US6862730B1 (en) 2000-04-26 2005-03-01 Lucent Technologies Inc. Register allocation in code translation between processors
US7219336B2 (en) * 2002-01-03 2007-05-15 Intel Corporation Tracking format of registers having multiple content formats in binary translation
US20030154419A1 (en) * 2002-01-10 2003-08-14 Binyu Zang Register renaming in binary translation using rollback and recovery
US7076769B2 (en) * 2003-03-28 2006-07-11 Intel Corporation Apparatus and method for reproduction of a source ISA application state corresponding to a target ISA application state at an execution stop point
GB0309056D0 (en) * 2003-04-22 2003-05-28 Transitive Technologies Ltd Block translation optimizations for program code conversion
US7260705B2 (en) * 2003-06-26 2007-08-21 Intel Corporation Apparatus to implement mesocode
US7260815B1 (en) * 2003-06-30 2007-08-21 Vmware, Inc. Method and apparatus for managing registers in a binary translator
US7805710B2 (en) * 2003-07-15 2010-09-28 International Business Machines Corporation Shared code caching for program code conversion
GB0316532D0 (en) * 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for partitioning code in program code conversion
US8549166B2 (en) * 2004-03-01 2013-10-01 Qualcomm Incorporated Execution of unverified programs in a wireless, device operating environment
CN100498711C (zh) * 2004-07-20 2009-06-10 明星游戏株式会社 自动翻译程序和程序翻译服务器
US8255882B2 (en) * 2004-12-30 2012-08-28 Intel Corporation Selecting formats for multi-format instructions in binary translation of code from a hybrid source instruction set architecture to a unitary target instruction set architecture
US20070006178A1 (en) * 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
US7757221B2 (en) 2005-09-30 2010-07-13 Intel Corporation Apparatus and method for dynamic binary translator to support precise exceptions with minimal optimization constraints
US8479174B2 (en) * 2006-04-05 2013-07-02 Prevx Limited Method, computer program and computer for analyzing an executable computer file
US7596781B2 (en) * 2006-10-16 2009-09-29 International Business Machines Corporation Register-based instruction optimization for facilitating efficient emulation of an instruction stream
US7712092B2 (en) 2007-10-01 2010-05-04 The Board Of Trustees Of The Leland Stanford Junior University Binary translation using peephole translation rules
US8296749B2 (en) * 2007-12-28 2012-10-23 Intel Corporation Program translation and transactional memory formation
US20100115494A1 (en) * 2008-11-03 2010-05-06 Gorton Jr Richard C System for dynamic program profiling
US8479176B2 (en) * 2010-06-14 2013-07-02 Intel Corporation Register mapping techniques for efficient dynamic binary translation

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140064710A (ko) * 2012-09-21 2014-05-28 인텔 코오퍼레이션 이진 번역을 수행하기 위한 방법 및 시스템

Also Published As

Publication number Publication date
KR101381274B1 (ko) 2014-04-04
KR20130018925A (ko) 2013-02-25
US20110307876A1 (en) 2011-12-15
WO2011159739A2 (en) 2011-12-22
HK1165039A1 (en) 2012-09-28
RU2011153335A (ru) 2013-07-10
WO2011159739A3 (en) 2012-04-05
CN102298514A (zh) 2011-12-28
CN102934082A (zh) 2013-02-13
RU2515217C2 (ru) 2014-05-10
CN102298514B (zh) 2014-07-16
EP2400388A1 (en) 2011-12-28
JP2012003761A (ja) 2012-01-05
SG176872A1 (en) 2012-01-30
US8479176B2 (en) 2013-07-02
CN102934082B (zh) 2017-06-09

Similar Documents

Publication Publication Date Title
KR101381274B1 (ko) 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체
US10860300B2 (en) Direct function call substitution using preprocessor
US8726251B2 (en) Pipelined loop parallelization with pre-computations
US8990786B2 (en) Program optimizing apparatus, program optimizing method, and program optimizing article of manufacture
US9304749B2 (en) Method and system for instruction scheduling
US9323508B2 (en) Method and system for compiler optimization
US10268497B2 (en) Conjugate code generation for efficient dynamic optimizations
US20150269052A1 (en) Method and apparatus for supporting performance analysis
US20120284701A1 (en) Efficient conditional flow control compilation
Hong et al. Improving simd parallelism via dynamic binary translation
US20100095102A1 (en) Indirect branch processing program and indirect branch processing method
US9158545B2 (en) Looking ahead bytecode stream to generate and update prediction information in branch target buffer for branching from the end of preceding bytecode handler to the beginning of current bytecode handler
JP5536593B2 (ja) 最適化装置、最適化方法およびコンパイラ・プログラム
US11029929B2 (en) Using emulation to improve startup time for just-in-time compilation
US20160011889A1 (en) Simulation method and storage medium
US9395962B2 (en) Apparatus and method for executing external operations in prologue or epilogue of a software-pipelined loop
US20170115973A1 (en) Operating method of semiconductor device and semiconductor system
US9875101B1 (en) Induction variable identification
JP5987501B2 (ja) 分岐アドレス管理プログラム、方法、及び装置
JP2007323358A (ja) コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置
CN117950675A (zh) 二进制翻译方法、装置、电子设备及可读存储介质
CN114237612A (zh) 程序代码的编译方法、装置、电子设备及存储介质
Son et al. A Study on the Interpretation Optimization to Improve the Performance of the Stack based Virtual Machine on Smart Platforms

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
FPAY Annual fee payment

Payment date: 20170302

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180516

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee