KR101081090B1 - 명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화 - Google Patents

명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화 Download PDF

Info

Publication number
KR101081090B1
KR101081090B1 KR1020097006126A KR20097006126A KR101081090B1 KR 101081090 B1 KR101081090 B1 KR 101081090B1 KR 1020097006126 A KR1020097006126 A KR 1020097006126A KR 20097006126 A KR20097006126 A KR 20097006126A KR 101081090 B1 KR101081090 B1 KR 101081090B1
Authority
KR
South Korea
Prior art keywords
instruction
register
sequence
target instruction
target
Prior art date
Application number
KR1020097006126A
Other languages
English (en)
Other versions
KR20090064397A (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 KR20090064397A publication Critical patent/KR20090064397A/ko
Application granted granted Critical
Publication of KR101081090B1 publication Critical patent/KR101081090B1/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
    • G06F9/3017Runtime instruction translation, e.g. macros
    • 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
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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/30181Instruction operation extension or modification
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

타겟 명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화가 제공된다. 최적화는 빈번히 실행되는 타겟 명령어 시퀀스의 적어도 하나의 명령어에 대해, 적어도 하나의 레지스터가 상기 시퀀스에 대해 판독 전용 레지스터로서 표시되는지를 확인하는 단계; 상기 적어도 하나의 레지스터의 각각의 레지스터가 상기 실행되는 시퀀스의 다수의 이전 반복의 적어도 하나의 명령어에 대한 상수 값을 갖는 것으로 검출되었는지를 확인하는 단계; 및 이 확인단계에 응답하여, 상기 적어도 하나의 명령어를 상기 적어도 하나의 레지스터로부터 직접 인코딩된 적어도 하나의 상수 값을 갖는 적어도 하나의 즉각적 형태의 명령어로 대체함으로써 상기 적어도 하나의 명령어를 최적화하는 단계를 포함한다. 최적화는 최적화된 타겟 명령어 시퀀스를 가져오는데, 이 타겟 명령어 시퀀스는 호스트 명령어 시퀀스로 번역될 때, 호스트 컴퓨팅 환경에 의해 더욱 효율적으로 실행된다.

Description

명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화{REGISTER-BASED INSTRUCTION OPTIMIZATION FOR FACILITATING EFFICIENT EMULATION OF AN INSTRUCTION STREAM}
본 발명은 일반적으로 컴퓨터 시스템 및 방법에 관한 것이며, 더 자세하게는 한 컴퓨팅 환경을 위해 기록된 명령어 스트림을 다른 컴퓨팅 환경에 에뮬레이팅할 때 시스템 성능의 효율성 증가 및 가속화를 위한 방법 (및 시스템)에 관한 것이다.
에뮬레이션에 대한 주요 동기는 특정 아키텍처을 위해 기록된 명령어 스트림들이 최소한의 성능 손실로 다른 아키텍처 상에서 실행되는 것을 허용하기 위해서이다. 그러면 자명하게, 에뮬레이션 프로세스의 효율성 및 결과 "호스트" 명령어 시퀀스의 품질은 최고로 중요한 사항이다.
통상적으로, 컴퓨팅 시스템은 프로세서, 메모리, 및 입력/출력 장치들을 포함하는 몇몇 부분들을 포함한다. 한 컴퓨팅 시스템의 동작을 다른 컴퓨팅 시스템으로 에뮬레이팅하는 것이 종종 필요하다. 에뮬레이션의 주요 이유들 중 하나는, 한 시스템(예컨대, "타켓 컴퓨팅 시스템")을 위해 기록된 프로그램들이 다른 시스템(예컨대, "호스트 컴퓨팅 시스템") 상에서 동일한 결과들을 수행하게 하기 위해서이다.
한 컴퓨팅 시스템의 동작을 다른 컴퓨팅 시스템 상으로 에뮬레이팅하기 위한 필요성은 오랫동안 인식되어 왔다. 이를 위해 많은 방식들이 제안되어 왔다. 이러한 기술들의 개요는 Cmelik 등의 미국 특허 제6,031,992호에 나타나며, 미국 특허 제6,031,992호에는 한 프로세서의 명령어 세트의 다른 프로세서로의 에뮬레이션을 수행하기 위한 결합된 하드웨어/소프트웨어 방식이 개시되어 있다. 이러한 방식은 타겟 명령어 세트의 실행을 가능하게 하는 특징 요소들을 하드웨어 설계가 통합하는 것을 허용한다. 그러나, 같이 이유로 이러한 접근 방식은 모든 시스템을 동등하게 효율적으로 에뮬레이팅할 수 없다.
SimOS 및 SimICS는 특별한 하드웨어 특징 요소들 없이도 에뮬레이팅할 수 있는 에뮬레이터의 예들이다. 그러나, 이들의 성능은 미국 특허 제6,031,992호의 방법 및 구조의 성능만큼 효과적이지 않을 수 있다.
일반적으로, 시스템은 다양한 레벨의 번역(translation)을 이용한다. 예를 들어, Jim Turley의 1996년 3월 5일자 마이크로프로세서 보고서의 "Alpha Runs x86 Code with FX! 32"에는, 코드 실행의 범위에 따라 변역의 범위가 변하는 기술이 기술되어 있다.
종래의 에뮬레이션 방법 및 기술에서, 다양한 레벨의 번역을 이용하여 에뮬레이터에 의해 생성된 호스트 명령어들의 성능을 향상시킬 수 있다. 그러나, 이러한 기술의 존재에도 불구하고, 향상에 대한 필요성은 여전하다.
해석과 번역의 조합을 포함하는 에뮬레이션 접근 방법을 이용하여, 각각의 타겟 명령어가 해석되고, 단순한 휴리스틱(heuristic)을 이용하여 명령어 그룹의 실행의 빈도수를 기록할 수 있으며, 문턱값 조건이 만족될 때, 그 그룹을 번역 풀에 배치함으로써 그 그룹은 번역을 위해 스케줄링된다. 이러한 기술은 해석 프로세스가 번역 프로세스와 병행하여 진행되는 것을 허용하며, 따라서 번역기는 매우 공격적인 최적화 기술을 전개할 수 있다.
번역을 이용한 에뮬레이션은 최적화의 비용을 상환하며, 장시간 구동하는 빈번히 실행되는 명령어 시퀀스에 효과적이다. 다양한 최적화 기술들이 번역을 이용하는 에뮬레이션 분야에서 공지되어 있다. 그러나, 프로세스를 더 가능하게 하기 위하여 추가의 최적화가 바람직할 것으로 생각된다.
타겟 명령어 스트림의 에뮬레이션을 가능하게 하는 방법을 공급함으로써, 종래 기술의 단점들은 극복되고 추가의 이점들이 제공된다. 예를 들어, 이 방법은 빈번히 실행되는 타겟 명령어 시퀀스를 호스트 컴퓨팅 환경에 의해 직접 실행 가능한 호스트 명령어 시퀀스로 번역하기 이전에, 빈번히 실행되는 타겟 명령어 시퀀스의 적어도 하나의 명령어를 선택적으로 최적화하는 단계를 포함한다. 선택적 최적화는, 적어도 하나의 명령어에 대해, 호스트 컴퓨팅 환경의 적어도 하나의 레지스터가 빈번히 실행되는 타겟 명령어 시퀀스의 명령어들을 위한 판독 전용 레지스터로서 표시된다는 것을 확인하는 단계; 적어도 하나의 레지스터의 각각의 레지스터가 빈번히 실행되는 타겟 명령어 시퀀스의 다수의 이전 반복에서 적어도 하나의 명령어에 대해 상수값을 갖는 다는 것이 검출되었다는 것을 확인하는 단계; 및 이에 응답하여, 그 적어도 하나의 명령어를 직접적으로 인코딩된 적어도 하나의 레지스터로부터 획득된 적어도 하나의 상수값을 갖는 적어도 하나의 즉각적 형태(immediate-form)의 명령어로 대체함으로써 그 적어도 하나의 명령어를 최적화하는 단계를 포함하는데, 여기서 선택적 최적화는 빈번히 실행되는 타겟 명령어 시퀀스를 최적화된 타겟 명령어 시퀀스로 대체하는 단계로 귀결된다.
향상된 실시예에서, 적어도 하나의 레지스터는 적어도 하나의 어드레스 레지스터를 포함하고, 선택적 최적화는 적어도 하나의 명령어가 적어도 하나의 어드레스 레지스터를 통해 메모리의 드물게 기록되는(write-seldom) 페이지를 판독한다는 것을 확인하는 단계를 더 포함하고, 최적화는 이에 추가로 응답한다. 추가 향상으로서, 예컨대 이 방법은, 적어도 하나의 레지스터의 각각의 레지스터에 있는 각각의 상수 값의 존재를 증명하기 위한 적어도 하나의 추정 테스트를 발생시키는 단계 및 적어도 하나의 추정 테스트를 최적화된 타겟 명령어 시퀀스와 연관시키는 단계를 포함한다. 그 다음, 연관된 적어도 하나의 추정 테스트를 갖는 최적화된 타겟 명령어 시퀀스는 (타겟 명령어 스트림의 에뮬레이션을 수행하는) 호스트 컴퓨팅 환경에 의해 직접 실행 가능한 호스트 명령어 시퀀스로 번역된다. 번역된 호스트 명령어 시퀀스는 빈번히 실행되는 타겟 명령어 시퀀스의 후속하는 반복이 타겟 명령어 스트림 내에서 식별될 때마다 추가 실행을 위해 저장되며, 대응하는 최적화된 타겟 명령어 시퀀스에 대한 모든 연관된 추정 테스트가 만족된다.
또한, 방법은 예컨대, 타겟 명령어 시퀀스의 발생을 추적하고, 이 추적으로부터 빈번히 실행되는 타겟 명령어 시퀀스를 식별하는 단계, 및 빈번히 실행되는 타겟 명령어의 개개의 시퀀스와 연관된 레지스터 값들을 추적하는 단계, 및 드물게 기록되는 메인 메모리의 페이지들을 추적하는 단계를 포함한다. 빈번히 실행되는 타겟 명령어 시퀀스의 각각의 명령어에 대해, 방법은 명령어가 하나 이상의 레지스터들을 판독하는지 여부를 판단하고, 만약 판독한다면, 판독 레지스터의 리스트에 하나 이상의 레지스터들을 추가하는 단계 및 명령어를 하나 이상의 레지스터들에 기록하는지 여부를 판단하고, 만약 기록이 행해졌다면, 명령어가 기록된 레지스터의 리스트에 하나 이상의 레지스터들을 추가하는 단계를 더 포함할 수 있는데, 여기서 방법은 빈번히 실행되는 타겟 명령어 시퀀스가, 기록되는 모든 레지스터보다 작거나 또는 판독되는 적어도 하나의 레지스터보다 작은 경우에만 선택적 최적화를 수행하는 단계를 포함한다.
상기 요약된 방법들에 대응하는 시스템 및 컴퓨터 프로그램 제품 또한 본 명세서에서 기술되고 청구된다.
또한, 본 발명의 기술들을 통해 추가의 특징 요소들 및 이점들이 실현된다. 본 발명의 다른 실시예들 및 양태들은 본 명세서에서 상세히 기술되고, 청구된 발명의 일부로서 간주된다.
발명으로서 간주되는 주제는 특히 명세서의 결론에서 드러나며 청구항들에서 명백하게 청구된다. 본 발명의 상술한 목적 및 다른 목적, 특징 요소들 및 이점들은 첨부한 도면들과 함께 취해지는 후속하는 상세한 설명으로부터 명백하다:
도 1은 본 발명의 일 양태에 따라, 최적화를 이용하는 번역으로 에뮬레이션을 수행하기 위한 호스트 컴퓨팅 시스템에 대한 일 실시예를 도시한 도면이다.
도 2a 및 도 2b는 본 발명의 일 양태에 따라, 최적화를 이용하는 번역 접근 방법을 이용하는 에뮬레이션에 대한 일 실시예의 흐름도이다.
도 3은 본 발명의 일 양태에 따라, 하나 이상의 최적화를 이용하는 번역 접근 방법에 대한 일 실시예의 흐름도이다.
도 4는 본 발명의 일 양태에 따라, 최적화를 수행하기 이전에 문의되는 초기 질의의 흐름도이다.
도 5는 본 발명의 일 양태에 따라, 도 4의 초기 질의를 수행하기 위한 처리에 대한 일 실시예의 흐름도이다.
도 6은 본 발명의 일 양태에 따라, 명령어 번역 및 후속 실행을 가능하게 하기 위한 레지스터 기반의 명령어 최적화에 대한 일 실시예의 흐름도이다.
도 7은 본 발명의 하나 이상의 양태들을 통합하는 컴퓨터 프로그램 제품을 표시한 도면이다.
본 발명을 수행하기 위한 최적의 모드
하드웨어 아키텍처 에뮬레이터는 한 컴퓨팅 시스템 환경(즉, 타겟 컴퓨팅 시스템)을 위해 기록된 애플리케이션이 다른 컴퓨팅 시스템 환경(즉, 호스트 컴퓨팅 시스템) 상에서 구동하는 것을 가능하게 한다. 타겟 명령어 스트림으로부터 선택된 명령어 시퀀스를 컴파일링하고, 이 컴파일링된 명령어 시퀀스를 호스트 컴퓨팅 시스템(예컨대, 에뮬레이터가 구동하는 시스템) 상에서 직접 실행하기 위한 호스트 명령어 시퀀스로 번역하기 위하여, 컴파일러가 종종 이러한 에뮬레이터들에 구축된다. 본 명세서에는 호스트 컴퓨팅 시스템 상에서 직접 실행하기 위한 선택된 타겟 명령어 시퀀스의 이러한 컴파일링 및 번역을 가능하게 하기 위한 특정한 최적화가 제시된다. 이 최적화는 변역을 이용하는 에뮬레이터들이 실행을 위한 코드를 더 잘 발생시키는 것을 가능하게함으로써, 에뮬레이션 프로세스를 가능하게 한다.
본 발명의 하나 이상의 양태들에 따라, 타겟 명령어 시퀀스를 분석함으로써(명령어 트레이스), 번역기는 특정 명령어 트레이스로의 엔트리 상의 레지스터 값들에 대한 한 세트의 사전 조건들을 생성하고(즉, 테스트 추정), (예컨대) 더 적은 런타임 체크를 요구하고 호스트 컴퓨팅 시스템 상에서 더욱 효율적으로 구동하는 "즉각적 형태의 명령어(immediate form instruction)"로의 레지스터 기반의 저장, 계산 및 제어 흐름 명령어 시퀀스를 최적화한다. 여기서 사용되는 바와 같이, "즉각적 형태의 명령어"란, 하나 이상의 레지스터로부터 획득되고 직접 인코딩되어 있는 하나 이상의 상수 값들을 갖는 명령어 트레이스의 명령어를 말한다.
본 발명의 하나 이상의 양태들을 통합하고 이용하는 호스트 컴퓨팅 환경(100)의 일 실시예가 도 1에 도시되어 있다. 컴퓨팅 환경(100)은 예컨대, 뉴욕주 아몬크의 인터내셔널 비지네스 머신즈 코포레이션이 제공하는 z/Architecture에 기초한다. 이 z/Architecture는 2005년 9월에 출판된 IBM 간행물 번호 제SA22-7832-04호, 제목 "z/Architecture Principles of Operation"의 5판의 IBM® 간행물에 기술되어 있으며, 이는 본 명세서에 그 전체가 참조문헌으로서 포함된다(IBM®은 미국 뉴욕주 아몬크의 인터내셔널 비지네스 머신즈 코포레이션의 등록된 상표이다. 본 명세서에 사용되는 다른 이름들은 인터내셔널 비지네스 머신즈 코포레이션 또는 다른 회사들의 등록된 상표, 상표 또는 제품 이름일 수 있다). 일례에서, z/Architecture에 기초한 컴퓨팅 환경은 뉴욕주 아몬크의 인터내셔널 비지네스 머신즈 코포레이션이 제공하는 eServer zSeries를 포함한다.
일례로서, 호스트 컴퓨팅 환경(100)은 어드레스 레지스터가 아닌 다른 레지스터들 뿐만 아니라, 하나 이상의 어드레스 레지스터들을 포함하는 복수의 레지스터(107)들을 포함하는 중앙 처리 장치(CPU)(105)를 포함한다. 메모리(110)(예컨대, 메인 메모리)는, 예컨대 하나 이상의 버스(120)를 통해 CPU(105)에 결합된다. 이 예에서 메모리(110)는 복수의 페이지(112)들로 분할된다. 특정 예로서, eServer zSeries 컴퓨팅 환경에서, 각각의 페이지는 4 킬로바이트의 메모리를 포함할 수 있다. 하나 이상의 입력/출력(I/O) 장치(115)들 또한 하나 이상의 버스(120)들에 결합된다.
도 2a 및 도 2b는 본 발명의 일 양태에 따라, 명령어 최적화를 가능하게 하도록 조정된 2진 번역을 이용하는 에뮬레이션 프로세스의 일 실시예를 도시한 도면이다. 2진 번역 기능을 갖는 많은 에뮬레이터들이 본 분야에서 이용 가능하다. 예를 들어, 미국 캐릴포니아주 파올로 알토의 Hewlett-Packard Company가 출시한 동적 2진 번역을 이용하는 "Dynamo" 에뮬레이터; 원래는 Compaq (현재는 Hewlett-Packard Company)이 제공한 동적 2진 번역을 이용하는 "Digital FX!32" 에뮬레이터(http://research.compaq.com/wrl/DECarchives/DTJ/DTJP01PF.pdf); 및 VMWare, Inc.(EMC Company)가 제공한 2진 번역을 이용하는 다양한 에뮬레이터들을 참조할 수 있고, 예컨대 http://fabrice.bellard.free.fr/qemu/about.html에 기술된 동적 2진 번역을 이용하는 "QEmu" 개방-소스 에뮬레이터도 참조할 수 있다.
도 2a 및 도 2b의 2진 번역 순서를 이용하는 에뮬레이션을 참조하면, 타겟 명령어 스트림(200)은 다른 타겟 명령어(205)가 존재하는지 여부를 판단하고, 만약 존재한다면, 다음의 타겟 명령어가 인출(fetch)되는 단계(215)를 처리함으로써 에뮬레이션된다. 그렇지 않다면, 에뮬레이션 처리는 완료된다(210).
본 발명의 하나 이상의 양태들에 따라, 빈번히 실행되는 타겟 명령어 시퀀스에 대한 레지스터 값 및 드물게 기록되는 메인 메모리의 페이지뿐만 아니라, 빈번히 실행되는 타겟 명령어 시퀀스 또한 추적된다. 이러한 추적은 에뮬레이션 프로세스 내에서 배경으로 (일례에서) 구현된다. 특정 예로서, 드물게 기록되는 페이지들은, 메모리에 마지막 100,000개의 기록들 또는 미리 정의된 다른 수의 기록들로 기록되지 않은 메모리의 페이지들을 포함할 수 있다.
처리는 다음으로, 현재의 타겟 명령어가 빈번히 실행되는 타겟 명령어 시퀀스의 시작에 대응하는지 여부를 판단한다(225). 만약 "대응하지 않는다면", 처리는 현재의 타겟 명령어가 모니터링된 메모리 어드레스에 기록하는지 여부를 판단하며(226), 만약 기록한다면, 그 모니터링된 메모리 어드레스와 연관된 임의의 번역된 호스트 명령어 시퀀스를 폐기한다(227). 이후부터, 또는 현재 타겟 명렁어가 빈번히 실행되는 타겟 명령어 시퀀스의 시작과 대응하지 않는다면, 타겟 명령어는 에뮬레이팅되고(230), 처리는 에뮬레이팅될 추가의 타겟 명령어가 존재하는지 여부를 판단한다(205). 만약 현재의 타겟 명령어가 빈번히 실행되는 타겟 명령어 시퀀스의 시작에 대응한다면, 처리는 빈번히 실행되는 타겟 명령어 시퀀스(235)(도 2b)가 이 미 번역되었는지 여부를 판단한다(240). 만약 "번역되지 않았다면", 시퀀스는 도 3의 처리 흐름 실시예에 따라 최적화되고 번역된다. 일단 번역되면, 번역된 호스트 명령어 시퀀스(260)는 번역 캐시 또는 이미 번역된 명령어 시퀀스의 데이터베이스(250)에 저장된다. 시퀀스가 이미 번역되었다면, 처리는 번역 캐시(255)에서 대응하는 번역된 시퀀스를 검색한다. 어느 경우에든, 호스트 컴퓨팅 시스템 상에서 직접 실행되는 번역된 호스트 명령어 시퀀스(260)가 출력된다(265). 번역된 호스트 명령어 시퀀스를 실행한 후에, 처리는 에뮬레이팅될 타겟 명령어들이 더 있는지 여부를 판단한다(205).
인지되는 바와 같이, 도 3은 본 발명의 일 양태에 따라 이용되는 최적화 및 번역 처리의 일 실시예를 도시한 도면이다. 타겟 명령어 시퀀스(300)(예컨대, 도 2b의 빈번히 실행되는 명령어의 시퀀스(235))는 처음에, 시퀀스에 대해 최적화가 수행될 수 있는지 여부를 판단하기 위해 평가된다. 번역기를 위한 다양한 최적화가 본 분야에 알려져 있는데, 최적화는 통상적으로 특정 번역기에 맞춤 제작된다. 컴파일 및 에뮬레이션 분야의 당업자는 이러한 기존의 최적화들을 인식한다. 예로서, 후속하는 최적화들, 즉 전파상수(constant propagation); 대수학적 간소화(algebraic simplification); 루프 언롤링(loop unrolling); 및 공통 하위 표현 삭제는 컴파일러 분야에서 잘 알려져 있다. 이러한 최적화들 중 임의의 하나 이상은 상기 참조한 것들과 같은 에뮬레이터의 2진 번역 프로세스에 의해 이용될 수 있다. 수행할 추가 최적화가 없다면, 타겟 명령어 시퀀스는 종래의 번역 접근 방법을 이용하여 호스트 명령어 시퀀스(315)로 번역된다(310).
수행될 하나 이상의 추가 최적화가 있다면(305), 처리는 최적화를 수행하고(320), 하나 이상의 추가 최적화를 겪을 수 있는 최적화된 타겟 명령어 시퀀스를 출력한다(325). 인지되는 바와 같이, 본 명세서에는 호스트 컴퓨팅 시스템에 의해 직접 실행 가능한 호스트 명령어 시퀀스로의 빈번히 실행되는 타겟 명령어 시퀀스의 번역 이전에 실행될 수 있는, 빈번히 실행되는 타겟 명령어 시퀀스에 대한 특정한 최적화가 제시된다.
추가의 설명을 통해, (예컨대) 현대의 컴퓨팅 환경에서 실행되는 명령어 코드가 컴퓨팅 환경 아키텍처의 최신 릴리즈로 컴파일링되지 않을 수 있기 때문에, 하나 이상의 최적화가 바람직할 수 있다. 이는 몇몇 이유들 중 어느 하나로 인한 것일 수 있다. 예를 들어, 개발자는 사용자가 특정 애플리케이션을 실행하기 위해 최신의 컴퓨팅 환경 하드웨어를 이용하는 것을 요청하길 원하지 않을 수 있다. 다른 이유는, 새로운 버전의 애플리케이션이 최근 몇 년간 출시되지 않았으면, 애플리케이션은 구식 레벨의 컴퓨팅 시스템 아키텍쳐 상에 구축된다는 것이다. 또한, 상대적인 부하, 저장, 계산 및 브렌치 명령어들과 같은 새로운 또는 향상된 하드웨어 명령어들이 주어진 애플리케이션에서(즉, 타겟 명령어 스트림에서) 이용되지 않았을 수 있다. 이러한 주어진 상황에서, 실행할 수 있을 때에 명령어 트레이스를 최적화하는 것이 종종 바람직하다. 본 발명은 이와 같은 최적화를 개시한다.
아래에 더 설명되는 바와 같이, 주어진 명령어 트레이스(즉, 주어진 빈번히 실행되는 타겟 명령어 시퀀스)에 대해, 하기의 내용이 결정된다:
● 이전 반복에 대해 명령어 트레이스를 에뮬레이팅할 때 에뮬레이터가 관찰 하는 값에 기초한, 명령어 트레이스의 시작에서의 레지스터 값
● 어느 레지스터가 명령어 트레이스에서 기록되는가
● 어느 레지스터가 명령어 트레이스에서 판독되는가
● 메모리의 어느 페이지가 드물게 기록되는가
(직접적으로든 또는 간접적으로든) 오직 판독만되고 기록은 되지 않는 레지스터들에 대해, 번역기(즉, 컴파일러)가 생성하는 발생된 코드는, 호스트 컴퓨팅 환경 아키텍처에 대해 더욱 효율적으로 수행되고, (예컨대) 명령어 계산의 어드레스 발생 단계를 피하는 명령어인 즉각적 형태의 명령어로 레지스터 기반의 명령어가 맵핑되는 경우에 최적화될 수 있다. 다시, 본 명에서에서 사용되는 바와 같이, 문구 "즉각적 형태의 명령어(immediate-form instruction)"는 상수 값을 포함하는 레지스터를 참조하기 보다는, 명령어에 직접 인코딩된 상수 값을 갖는 명령어를 의미한다.
이를 달성하기 위하여, 제시되는 처리는, 판독 전용으로 표시된 하나 이상의 어드레스 레지스터들을 통해 판독 전용인 것으로 추정되는 메모리 위치에 상이한 CPU 상의 다른 명령어들이 저장될 수 없다는 것을 보증한다. 판독 전용으로서 간주되는 저장 위치가 (드문 경우를 제외하고는 통상적으로 판독 전용인) 코드 및 (판독 전용 데이터 영역인) 리터럴 풀(literal pool)로서 억제된다고 가정하면, 코드 및 리터럴 풀을 위한 메인 메모리 범위는 "드물게 기록되는(write-seldom)" 범위로서 정의될 수 있다. 이러한 매우 드물게 기록되는 페이지들은 에뮬레이터에 의해 행해진 메모리에 대한 기록을 모니터링하고, 많은 수의 기록 동작들에 대해 기록되 지 않은 페이지들을 검색함으로써 검출될 수 있다. 그 다음, 이러한 "드물게 기록되는" 영역은 에뮬레이터의 메모리 컴포넌트에 의해 모니터링되고, 이 영역들에 기록이 행해진다면, 특정 명령어 트레이스에 대해 번역된 코드는 폐기된다.
호스트 컴퓨팅 환경으로서 zSeries 아키텍처 뿐만 아니라, 타겟 컴퓨팅 환경으로서 IBM의 zSeries 아키텍처를 이용하여 최적화된 명령어 트레이스의 특정 예가 아래에 제시되어 있다:
트레이스 엔트리:
R3 is Ox10000000 (R3 points to the start of a code area - perhaps a function)
PC is 0x10000100 (the first instruction of the instruction trace)
R8 is 0x10000200 (R8 points to the literal pool - an area of read-only constants created by a compiler)
<0x100000100부터 to 0x100000400의 끝까지의 메모리 범위가 '매우 드물게 기록되는(write very seldom)' 것으로 표시되고, 메모리 컴포넌트에 의해 모니터링될 것이다>
L R4, 20 (, R9)
N R2, 40 (, R8) # this word of memory has the value 0x10 in it
AR R6, R2
ST R4, 30 (, R5)
BNZ 256 (, R3)
더욱 효율적인 시퀀스로 변환될 수도 있다:
# Assumption Tests:
# test that the entry register conditions match our assumptions
CL R3,=X'l0000000'
BNZ SLOW
CL R8,=X'l0000200'
BNZ SLOW
# Ensure that stores to memory done on this trace don't overwrite 40(,R8)
CL R5,=X'10000200'+7
BL FAST
CL R5,=X'10000200'+13
BLE SLOW
# Optimized Sequence:
FAST:
L R4,20(,R9)
NI R2,=X'1O' # AND immediate instruction replaces the AND instruction AR R6, R2
ST R4,30(,R5)
BNZ FAST # Branch Relative instruction replaces the BRANCH instruction
...
# Non-optimized Sequence:
SLOW:
L R4, 20(,R9)
N R2, 40(,R8)
AR R6, R2
ST R4,30(,R5)
BNZ 256(,R3)
도 4 내지 도 6은 본 발명의 일 양태에 따라, 번역 이전에 명령어 최적화 처리의 일 실시예를 도시한 도면이다. 도 4를 참조하면, 상기 설명한 바와 같은 빈번히 실행되는 타겟 명령어 시퀀스(즉, 명령어 트레이스)(400)가 획득된다. 명령어 트레이스에 대해, 처리는 모든 레지스터들에 기록이 행해졌는지 또는 레지스터가 판독되지 않는지 여부를 판단한다(405). "모든 레지스터들에 기록이 행해졌거나 또는 레지스터가 판독되지 않았다면", 본 발명의 하나 이상의 양태들에 따른 최적화 처리는 성공되지 못하며(415), 처리는 (예컨대) 도 3의 흐름으로 돌아간다. 그렇지 않다면, 처리는 어드레스 저장 레지스터로서 표시된 임의의 레지스터가 기록이 행해진 레지스터로서도 표시되는지 여부를 판단한다(410). 기록이 행해진 레지스터로 표시된다면, 본 발명의 하나 이상의 양태들에 따른 최적화 처리는 성공하지 못하며(415), 처리는 예컨대 도 3의 흐름으로 돌아간다. 그렇지 않다면, 처리는 (아래에 더 기술되는) 도 6의 흐름으로 이어진다.
도 5는 모든 레지스터들에 기록이 행해졌는지 또는 판독된 레지스터가 없는지 또는 임의의 레지스터가 어드레스 저장 레지스터인지 여부를 판단하기 위한 처리의 일 실시예를 도시한 도면이다. 처음에, 처리는 판독된 레지스터, 기록이 행해진 레지스터, 그리고 어드레스 저장 레지스터는 없다고 표시한다(500). 변수 Cur이 명령어 트레이스의 다음 명령어로 설정되고(500), 처리는 Cur 명령어가 메인 메모리에 저장하기 위해 하나 이상의 어드레스 레지스터들을 이용하는지 여부를 판단한다(510). "이용한다면", 어드레스 저장 레지스터의 리스트에 하나 이상의 레지스터들이 추가된다(515). 다음으로, 처리는 Cur 명령어가 하나 이상의 레지스터들을 판독하는지 여부를 판단한다(520). "판독한다면", 판독된 레지스터의 리스트에 하나 이상의 레지스터들이 추가된다(525). 다음으로, 처리는 Cur 명령어가 하나 이상의 레지스터들을 기록하는지 여부를 판단한다(530). "기록한다면", 기록이 행해진 레지스터의 리스트에 하나 이상의 레지스터들이 추가된다(535). 이후부터, 처리는 명령어 트레이스에 명령어들이 더 있는지 여부를 판단하는데(540), 처리는 명령어 트레이스의 각각의 명령어에 대해 반복된다. 일단 모든 명령어들이 고려되었다면, 처리는 이러한 명령어 트레이스에 대해 모든 레지스터들에 기록이 행해졌는지 또는 판독된 레지스터가 없는지 여부를 판단하기 위해, 그 리스트를 평가하는데(545), 이로써 질의가 완료된다(550).
기록이 행해진 레지스터들이 모두 판독되지 않거나 또는 적어도 하나의 레지스터가 판독된다고 가정한다면, 처리는 도 6에 도시된 대로 진행된다. 특히, 변수 Cur은 명령어 트레이스의 제1 명령어 또는 다음 명령어로 설정되며(600), 처리는 Cur 명령어가 어드레스 레지스터를 통해 드물게 기록되는 것으로 표시된 메인 메모리의 페이지를 판독하는지 여부를 판단한다(605). "판독하지 않는다면", 그리고 Cur 명령어가 하나 이상의 어드레스 레지스터들만을 이용한다면, 처리는 명령어 트레이스에 명령어들이 더 있는지 여부를 판단하고(610), "더 있다면", 처리는 명령어 트레이스의 다음 명령어로 루프백(loop back)한다.
Cur 명령어가 적어도 하나의 어드레스 레지스터를 통해 드물게 기록되는 것으로 표시된 메인 메모리의 페이지를 판독하거나 또는 하나 이상의 어드레스 레지스터가 아닌 다른 레지스터를 이용한다고 가정하면, 처리는 적어도 하나의 레지스터가 명령어 트레이스에 대해 도 5의 처리에 의해 판독 전용 레지스터로서 표시되는지 여부를 판단한다(625). 판독 전용 레지스터로서 "표시되지 않는다면", 처리는 명령어 트레이스에 처리될 다음 명령어가 있는지 여부를 판단한다(610). 그렇지 않다면, 처리는 그 적어도 하나의 레지스터가 명령어 트레이스의 다수의 이전 반복에서 이러한 Cur 명령어에 대한 상수값을 갖는 것으로 검출되는지 여부를 판단한다(620). "갖지 않는다면", 처리는 명령어 트레이스의 다음 명령어로 진행된다. "갖는 다면", 즉 현재의 명령어가 드물게 기록되는 것으로 표시된 메인 메모리의 페 이지를 판독하기 위하여 하나 이상의 레지스터들을 이용한다면, 참조된 하나 이상의 레지스터들은 판독 전용으로 표시되고, 하나 이상의 레지스터들은 명령어 트레이스의 이전 반복 전반에서 명령어 트레이스에 대해 상수 값을 갖는 것으로 검출되며, 처리는 레지스터 명령어를 즉각적 형태의 명령어로 대체하는데, 여기서 이용된 하나 이상의 레지스터들로부터 (또는 하나 이상의 레지스터들을 통해) 획득된 하나 이상의 상수 값들은 그 하나 이상의 레지스터에 직접 인코딩된다(635).
일단 명령어 트레이스의 명령어들 모두가 고려되었다면, 단계(635)의 즉각적 형태의 명령어들에서 이용된 각각의 레지스터에 대한 하나 이상의 추정 테스트가 발생된다. 추정 테스트는, 적어도 2개의 상이한 종류의 확인, 즉 레지스터가 현재의 명령어 트레이스의 번역시 검출되었던 것과 동일한 값을 포함하는 것을 보증하기 위한 확인, 및 현재의 트레이스에 의해 기록이 수행되지 않은 메모리로의 기록은 어느 것도 이 명령어 트레이스에 의해 드물게 기록되는 것으로 추정되는 메모리의 영역을 중첩하지 않는다는 것을 보증하기 위한 확인을 수행하도록 발생된다. 특정 예로서, 아래와 같은 추정 테스트가 발생될 수 있다:
# Assumption Tests:
# test that the entry register conditions match our assumptions
CL R3, = X'10000000'
BNZ SLOW
CL R8, = X'10000200'
BNZ SLOW
# Ensure that stores to memory done on this trace don't overwrite 40 (, R8)
CL R5, =X'10000200'+7
BL FAST
CL R5, =X'10000200'+13
BLE SLOW
하나 이상의 추정 테스트가 발생되면, 이 추정 테스트는 번역된 코드를 실행하는데 필요조건으로서 만족되어야 한다. 즉, 최적화된 명령어 트레이스로부터 획득된 "고속" 버전의 번역된 코드는 오직 트레이스에 대한 모든 추정 테스트가 만족되는 경우에만 실행된다. 그렇지 않다면, 트레이스는 실행될 수 있는 (최적화 없는) 느린 버전을 포함한다. 빈번히 실행되는 타겟 명령어의 시퀀스의 후속 반복에 대해 추정 테스트가 만족되지 않는다면, 고속 버전의 번역된 코드는 이용되지 않는다. 일 실시예에서, 호스트 컴퓨팅 시스템 상에서 직접 실행 가능한 호스트 명령어 시퀀스로 상기 시퀀스를 번역하기 이전에, 최적화된 명령어 트레이스에 하나 이상의 추정 테스트가 프리펜딩(prepending)된다. 추정 테스트는 빈번히 실행되는 명령어의 특정 시퀀스의 초기 번역시에 발생되며, 그 다음 번역될 빈번히 실행되는 타겟 명령어의 시퀀스의 각각의 후속 반복에 참조된다. 상술한 코드의 "고속" 부분은 상술한 예의 최적화를 이용하여 번역된 코드의 고속 버전이다. 명령어 트레이스에 하나 이상의 추정 테스트를 프리펜딩한 후에, 그리고 Cur 명령어가 하나 이상의 어드레스 레지스터들을 이용한다고 가정하면, 단계(635)에서 사용되는 임의의 상수 어드레스(들)은 모니터링된 메모리 어드레스의 리스트에 추가되고, 현재의 명령어 트레이스에 연관된다(620). 이는 도 4 내지 도 6의 최적화 처리를 완료한다(625). 예컨대, 도 3의 처리와 관련하여 상술한 것과 같은 하나 이상의 기존의 번역기들을 통한 번역을 위해 최적화된 명령어 트레이스가 반환된다.
본 발명의 하나 이상의 양태들은, 예컨대 컴퓨터 이용 가능한 매체를 갖는 제조 물품(예컨대, 하나 이상의 컴퓨터 프로그램 제품)에 포함될 수 있다. 예컨대, 매체에는 본 발명의 기능들을 제공하고 가능하게 하기 위한 로직의 컴퓨터 판독 가능한 코드 수단(예컨대, 명령어, 코드, 커맨드 등)이 포함되어 있다. 제조 물품은 컴퓨터 시스템의 일부로서 포함되거나 또는 별도로 판매될 수 있다.
본 발명의 하나 이상의 양태들을 통합하는 제조 물품 또는 컴퓨터 프로그램 제품의 일례가 도 7에 도시되어 있다. 컴퓨터 프로그램 제품(700)은 예컨대, 본 발명의 하나 이상의 양태들을 제공하고 가능하게 하기 위한 컴퓨터 판독 가능한 프로그램 코드 수단 또는 로직(710)을 저장하기 위한 하나 이상의 컴퓨터 이용 가능한 매체(705)를 포함한다. 매체는 전자, 자기, 광학, 전자기, 적외선, 또는 반도체 시스템 (또는 장비 또는 장치) 또는 전파 매질일 수 있다. 컴퓨터 판독 가능한 매체의 예는 반도체 또는 고체 상태 메모리, 자기 테이프, 탈착 가능한 컴퓨터 디스켓, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 리지드(rigid) 자기 디스크, 및 광 디스크를 포함한다. 광 디스크의 예는 콤팩트 디스크 판독 전용 메모리(CD-ROM), 콤팩트 디스크-판독/기록(CD-R/W), 및 DVD를 포함한다.
프로그램 명령어 시퀀스 또는 하나 이상의 컴퓨터 판독 가능한 프로그램 코드 수단 또는 로직에 의해 정의되는 하나 이상의 상호관련된 모듈의 논리 어셈블리는 본 발명의 하나 이상의 양태들의 수행을 안내한다.
또한, 컴퓨팅 환경은 에뮬레이터(예컨대, 소프트웨어 또는 다른 에뮬레이션 매커니즘)를 포함할 수 있는데, 이러한 경우 특정 아키텍처 또는 이것의 서브세트가 에뮬레이팅된다. 이와 같은 환경에서, 에뮬레이터를 실행하는 컴퓨터가 에뮬레이팅되는 기능들과 상이한 아키텍처를 가질 수 있을지라도, 에뮬레이터의 하나 이상의 에뮬레이션 기능들은 본 발명의 하나 이상의 양태들을 구현할 수 있다. 일례로서, 에뮬레이션 모드에서, 에뮬레이팅되는 특정한 명령어 또는 동작이 디코딩되고, 개개의 명령어 또는 동작을 구현하기에 적당한 에뮬레이션 기능이 구축된다.
에뮬레이션 환경에서, 호스트 컴퓨터는 예컨대 명령어 및 데이터를 저장하기 위한 메모리; 메모리로부터 명령어들을 인출하고, 선택적으로 인출한 명령어들에 로컬 버퍼링을 제공하기 위한 명령어 인출(fetch) 유닛; 명령어 인출 유닛으로부터 명령어를 수신하고, 인출한 명령어 종류를 판단하기 위한 명령어 디코딩 유닛; 및 명령어들을 실행하기 위한 명령어 실행 유닛을 포함한다. 실행은 메모리를 위한 레지스터에 데이터를 로딩하는 단계; 레지스터로부터의 데이터를 다시 메모리에 저장하는 단계; 또는 디코딩 유닛에 의해 결정된 바와 같은 몇몇 종류의 계산 또는 논리 동작을 수행하는 단계를 포함할 수 있다. 일례에서, 각각의 유닛은 소프트웨어로 구현된다. 예를 들어, 유닛들에 의해 수행되는 동작들은 에뮬레이터 소프트웨어 내의 하나 이상의 서브루틴으로서 구현된다.
또한, 프로그램 코드를 저장 및/또는 실행하는데 적합한 데이터 처리 시스템이 이용 가능하며, 이 데이터 처리 시스템은 시스템 버스를 통하여 직접적으로 또는 간접적으로 메모리 소자에 결합된 적어도 하나의 프로세서를 포함한다. 메모리 소자는, 예컨대 프로그램 코드의 실제 실행 동안에 이용되는 로컬 메모리, 벌크 저장장치, 및 실행 동안에 코드가 벌크 저장장치로부터 검색되어야 하는 횟수를 줄이기 위하여 적어도 일부의 프로그램 코드의 임시 저장을 제공하는 캐시 메모리를 포함한다.
(키보드, 디스플레이, 포인팅 장치 등을 포함하지만 이들로 한정되는 것은 아닌) 입력/출력 또는 I/O 장치는 직접 시스템에 결합되거나 또는 개재(intervening) I/O 제어기를 통해 시스템에 결합될 수 있다. 네트워크 어댑터들또한, 데이터 처리 시스템이 다른 데이터 처리 시스템에 결합되거나 또는 개재 개인 네트워크 또는 공용 네트워크를 통해 원격 프린터 또는 저장 장치에 결합될 수 있도록 시스템에 결합될 수 있다. 모뎀, 케이블 모뎀, 및 이더넷 카드는 단지 이용 가능한 네트워크 어댑터들의 일부 종류이다.
본 발명의 하나 이상의 양태들의 기능들은 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합으로 구현될 수 있다. 본 발명의 기능들을 수행하기 위하여 기계에 의해 실행 가능한 적어도 하나의 명령어 프로그램을 구현하는 기계에 의해 판독 가능한 적어도 하나의 프로그램 저장 장치가 제공될 수 있다.
본 명세서에 도시된 흐름도는 예로서 제공된다. 본 발명의 정신을 벗어나지 않고 본 명세서에 기술된 이러한 도면 또는 단계 (또는 동작)에 대한 많은 변경이 가능할 수 있다. 예를 들어, 특정 단계들은 상이한 순서로 수행될 수 있거나, 또는 단계들이 추가, 삭제 또는 조정될 수 있다. 이러한 모두 변경은 청구한 발명의 일부로서 간주된다.
바람직한 실시예들이 여기서 상세히 도시되고 기술되었지만, 당업자들에게는 다양한 조정, 추가, 대용 등이 본 발명의 정신을 벗어나지 않고 행해질 수 있으며, 따라서 다양한 조정, 추가, 대용 등은 후속하는 청구항들에서 정의된 바와 같은 본 발명의 범위 내에 있는 것으로 간주된다는 것이 명백할 것이다.

Claims (9)

  1. 타겟 명령어 스트림의 에뮬레이션(emulation)을 가능하게 하는 방법으로서, 빈번히 실행되는 타겟 명령어 시퀀스를 호스트 컴퓨팅 환경에 의해 직접 실행 가능한 호스트 명령어 시퀀스로 번역하기 이전에 상기 빈번히 실행되는 타겟 명령어 시퀀스의 적어도 하나의 명령어를 선택적으로 최적화하는 것을 포함하고, 상기 적어도 하나의 명령어에 대한 선택적 최적화는,
    (i) 상기 호스트 컴퓨팅 환경의 적어도 하나의 레지스터가 상기 빈번히 실행되는 타겟 명령어 시퀀스의 명령어를 위한 판독 전용 레지스터임을 확인하는 단계;
    (ii) 상기 적어도 하나의 레지스터의 각각의 레지스터가 상기 빈번히 실행되는 타겟 명령어 시퀀스의 복수의 이전 반복에서 상기 적어도 하나의 명령어에 대한 상수 값을 갖는 것으로 검출되었는지를 확인하는 단계;
    (iii) 상기 (i)의 확인 및 상기 (ii)의 확인에 응답하여, 상기 적어도 하나의 명령어를, 직접 인코딩된 적어도 하나의 레지스터로부터 획득된 적어도 하나의 상수 값을 갖는 적어도 하나의 즉각적 형태(immediate form)의 명령어로 대체함으로써 상기 적어도 하나의 명령어를 최적화하는 단계
    를 포함하고, 상기 선택적 최적화는 타겟 명령어의 최적화된 시퀀스를 생성하기 위한 것인, 타겟 명령어 스트림의 에뮬레이션을 가능하게 하는 방법.
  2. 제1항에 있어서,
    상기 적어도 하나의 레지스터는 적어도 하나의 어드레스 레지스터를 포함하고, 상기 선택적 최적화는, 상기 적어도 하나의 명령어가 상기 적어도 하나의 어드레스 레지스터를 통해 드물게 기록되는(write-seldom) 메모리의 페이지를 판독하는지를 확인하는 단계를 더 포함하고,
    상기 (iii)의 최적화하는 단계는 상기 적어도 하나의 명령어가 상기 적어도 하나의 어드레스 레지스터를 통해 드물게 기록되는 메모리의 페이지를 판독하는지를 확인하는 단계에 추가 응답하는 것인, 타겟 명령어 스트림의 에뮬레이션을 가능하게 하는 방법.
  3. 제1항에 있어서, 상기 적어도 하나의 레지스터의 각각의 레지스터의 개개의 상수 값의 존재를 증명하고, 적어도 하나의 추정 테스트를 최적화된 타겟 명령어 시퀀스와 연관시키기 위하여 적어도 하나의 추정 테스트를 발생시키는 단계를 더 포함하는 타겟 명령어 스트림의 에뮬레이션을 가능하게 하는 방법.
  4. 제3항에 있어서, 상기 연관된 적어도 하나의 추정 테스트를 이용하여 최적화된 타겟 명령어 시퀀스를 상기 호스트 컴퓨팅 환경에 의해 직접 실행 가능한 호스트 명령어 시퀀스로 번역하는 단계를 더 포함하고, 상기 호스트 컴퓨팅 환경은 상기 타겟 명령어 스트림의 에뮬레이션을 수행하는 것인, 타겟 명령어 스트림의 에뮬레이션을 가능하게 하는 방법.
  5. 제4항에 있어서, 상기 빈번히 실행되는 타겟 명령어 시퀀스의 후속 반복이 상기 타겟 명령어 스트림에서 식별되고, 상기 최적화된 타겟 명령어 시퀀스에 대해 연관된 모든 추정 테스트가 만족될 때, 실행을 위해 상기 번역된 호스트 명령어 시퀀스를 저장하는 단계를 더 포함하는 타겟 명령어 스트림의 에뮬레이션을 가능하게 하는 방법.
  6. 제1항에 있어서, 타겟 명령어 시퀀스의 발생을 추적하고, 그 추적으로부터 상기 빈번히 실행되는 타겟 명령어 시퀀스를 식별하며, 빈번히 실행되는 타겟 명령어의 각각의 시퀀스와 연관된 레지스터 값들을 추적하고, 드물게 기록되는 메인 메모리의 페이지들을 추적하는 단계를 더 포함하는 타겟 명령어 스트림의 에뮬레이션을 가능하게 하는 방법.
  7. 제1항에 있어서,
    상기 빈번히 실행되는 타겟 명령어 시퀀스의 각각의 명령어에 대해, 상기 명령어가 하나 이상의 레지스터들을 판독하는지 여부를 판단하고, 만약 판독한다면, 상기 하나 이상의 레지스터들을 판독 레지스터의 리스트에 추가하며, 상기 명령어를 하나 이상의 레지스터들에 기록하는지 여부를 판단하고, 만약 기록이 행해졌다면, 명령어가 기록된 레지스터의 리스트에 상기 하나 이상의 레지스터들을 추가하는 단계를 더 포함하고,
    상기 방법은, 상기 빈번히 실행되는 타겟 명령어 시퀀스가 기록되는 모든 레지스터 또는 판독되는 적어도 하나의 레지스터보다 작은 경우 선택적 최적화를 수행하는 단계를 더 포함하는 타겟 명령어 스트림의 에뮬레이션을 가능하게 하는 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 따른 방법의 모든 단계들을 수행하도록 구성된 수단을 포함하는 시스템.
  9. 상기 제1항 내지 제7항 중 어느 한 항에 따른 방법의 모든 단계들을 수행하는 명령어들을 포함하며 컴퓨터 시스템 상에서 실행되는 컴퓨터 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체.
KR1020097006126A 2006-10-16 2007-07-24 명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화 KR101081090B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/549,718 2006-10-16
US11/549,718 US7596781B2 (en) 2006-10-16 2006-10-16 Register-based instruction optimization for facilitating efficient emulation of an instruction stream

Publications (2)

Publication Number Publication Date
KR20090064397A KR20090064397A (ko) 2009-06-18
KR101081090B1 true KR101081090B1 (ko) 2011-11-07

Family

ID=38595969

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097006126A KR101081090B1 (ko) 2006-10-16 2007-07-24 명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화

Country Status (4)

Country Link
US (1) US7596781B2 (ko)
EP (1) EP2082318B1 (ko)
KR (1) KR101081090B1 (ko)
WO (1) WO2008046672A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200076915A (ko) * 2018-12-20 2020-06-30 한양대학교 에리카산학협력단 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100984815B1 (ko) * 2008-08-20 2010-10-01 주식회사 컴퍼니원헌드레드 스크립트 언어의 실행속도 향상 방법
US8397219B2 (en) * 2009-03-31 2013-03-12 Oracle America, Inc. Method and apparatus for tracking enregistered memory locations
US8479176B2 (en) * 2010-06-14 2013-07-02 Intel Corporation Register mapping techniques for efficient dynamic binary translation
US8898642B2 (en) * 2012-02-16 2014-11-25 Unisys Corporation Profiling and sequencing operators executable in an emulated computing system
US9256451B2 (en) * 2012-06-29 2016-02-09 Oracle International Corporation Emulation time correction
US9525586B2 (en) * 2013-03-15 2016-12-20 Intel Corporation QoS based binary translation and application streaming
US11163572B2 (en) * 2014-02-04 2021-11-02 Micron Technology, Inc. Memory systems and memory control methods
US9348595B1 (en) 2014-12-22 2016-05-24 Centipede Semi Ltd. Run-time code parallelization with continuous monitoring of repetitive instruction sequences
US9135015B1 (en) 2014-12-25 2015-09-15 Centipede Semi Ltd. Run-time code parallelization with monitoring of repetitive instruction sequences during branch mis-prediction
US10061590B2 (en) * 2015-01-07 2018-08-28 Micron Technology, Inc. Generating and executing a control flow
US9208066B1 (en) * 2015-03-04 2015-12-08 Centipede Semi Ltd. Run-time code parallelization with approximate monitoring of instruction sequences
US10296350B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences
US10296346B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences based on pre-monitoring
US9715390B2 (en) 2015-04-19 2017-07-25 Centipede Semi Ltd. Run-time parallelization of code execution based on an approximate register-access specification
US10884720B2 (en) 2018-10-04 2021-01-05 Microsoft Technology Licensing, Llc Memory ordering annotations for binary emulation
US10684835B1 (en) * 2018-12-11 2020-06-16 Microsoft Technology Licensing, Llc Improving emulation and tracing performance using compiler-generated emulation optimization metadata

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4514803A (en) * 1982-04-26 1985-04-30 International Business Machines Corporation Methods for partitioning mainframe instruction sets to implement microprocessor based emulation thereof
US6031992A (en) 1996-07-05 2000-02-29 Transmeta Corporation Combining hardware and software to provide an improved microprocessor
US6199152B1 (en) 1996-08-22 2001-03-06 Transmeta Corporation Translated memory protection apparatus for an advanced microprocessor
AU2001245661A1 (en) 2000-03-13 2001-09-24 Chicory Systems, Inc. Device and method for eliminating redundant stack operations
US8108843B2 (en) 2002-09-17 2012-01-31 International Business Machines Corporation Hybrid mechanism for more efficient emulation and method therefor
US9043194B2 (en) 2002-09-17 2015-05-26 International Business Machines Corporation Method and system for efficient emulation of multiprocessor memory consistency

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200076915A (ko) * 2018-12-20 2020-06-30 한양대학교 에리카산학협력단 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치
KR102225838B1 (ko) 2018-12-20 2021-03-09 한양대학교 에리카산학협력단 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치

Also Published As

Publication number Publication date
EP2082318A1 (en) 2009-07-29
KR20090064397A (ko) 2009-06-18
US20080091923A1 (en) 2008-04-17
EP2082318B1 (en) 2013-02-27
WO2008046672A1 (en) 2008-04-24
US7596781B2 (en) 2009-09-29

Similar Documents

Publication Publication Date Title
KR101081090B1 (ko) 명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화
US9696966B2 (en) Software development tool to automatically generate an optimized executable
US7568190B2 (en) Late binding of optimization information for just in time compilation
US7783867B2 (en) Controlling instruction execution in a processing environment
US9858057B2 (en) Methods and apparatus to validate translated guest code in a dynamic binary translator
US20110016460A1 (en) Multiple pass compiler instrumentation infrastructure
WO2013036703A2 (en) Profile guided jit code generation
US20060277371A1 (en) System and method to instrument references to shared memory
WO2014074759A1 (en) Optimization concerning address validation in a binary translation system
WO2017114472A1 (en) Method and apparatus for data mining from core traces
CN113196243A (zh) 使用编译器生成的仿真优化元数据改进仿真和跟踪性能
US9183018B2 (en) Dynamic on/off just-in-time compilation in a dynamic translator using instruction code translation
US11379195B2 (en) Memory ordering annotations for binary emulation
EP2115574B1 (en) Employing a buffer to facilitate instruction execution
US10802854B2 (en) Method and apparatus for interpreting bytecode instruction stream
WO2021036173A1 (zh) 解释执行字节码指令流的方法及装置
CN111279308A (zh) 代码转换期间的屏障减少
Kaufmann et al. Superblock compilation and other optimization techniques for a Java-based DBT machine emulator
US20100077145A1 (en) Method and system for parallel execution of memory instructions in an in-order processor
CN114217806A (zh) 基于cache写暗示机制的编译优化方法
WO2016096053A1 (en) Technique for processing assembly instructions comprised by a program

Legal Events

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

Payment date: 20141024

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20151027

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161026

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20171026

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20191029

Year of fee payment: 9