KR20140006926A - 프로세서의 변환 룩 어사이드 버퍼를 이용하는 게스트 명령-네이티브 명령 레인지 기반 매핑 - Google Patents

프로세서의 변환 룩 어사이드 버퍼를 이용하는 게스트 명령-네이티브 명령 레인지 기반 매핑 Download PDF

Info

Publication number
KR20140006926A
KR20140006926A KR1020137022671A KR20137022671A KR20140006926A KR 20140006926 A KR20140006926 A KR 20140006926A KR 1020137022671 A KR1020137022671 A KR 1020137022671A KR 20137022671 A KR20137022671 A KR 20137022671A KR 20140006926 A KR20140006926 A KR 20140006926A
Authority
KR
South Korea
Prior art keywords
guest
native
translation
buffer
instruction
Prior art date
Application number
KR1020137022671A
Other languages
English (en)
Other versions
KR101612594B1 (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 KR20140006926A publication Critical patent/KR20140006926A/ko
Application granted granted Critical
Publication of KR101612594B1 publication Critical patent/KR101612594B1/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
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Abstract

프로세서를 위해 명령을 번역하는 방법이 개시된다. 이 방법은 다수의 게스트 브랜치 명령을 포함하는 복수의 게스트 명령을 액세스하는 단계 및 복수의 게스트 명령을 게스트 명령 블록으로 어셈블하는 단계를 포함한다. 게스트 명령 블록은 대응하는 네이티브 변환 블록으로 변환된다. 네이티브 변환 블록은 네이티브 캐시에 저장된다. 게스트 명령 블록과 대응하는 네이티브 변환 블록과의 매핑은 변환 룩 어사이드 버퍼에 저장된다. 게스트 명령에 대한 후속 요청이 있을 때, 변환 룩 어사이드 버퍼는 히트(hit)가 발생하였는지 여부를 결정하기 위하여 인덱싱(indexing)되고, 여기서 매핑은 게스트 명령이 네이티브 캐시 내에 대응하는 변환된 네이티브 명령을 갖고 있는지를 나타낸다. 변환된 네이티브 명령은 히트에 응답하여 실행을 위해 포워드된다.

Description

프로세서의 변환 룩 어사이드 버퍼를 이용하는 게스트 명령-네이티브 명령 레인지 기반 매핑{GUEST INSTRUCTION TO NATIVE INSTRUCTION RANGE BASED MAPPING USING A CONVERSION LOOK ASIDE BUFFER OF A PROCESSOR}
이 출원은 2011년 1월 27일자로 Mohammad A. Abdallah가 출원한 명칭이 "GUEST INSTRUCTION TO NATIVE INSTRUCTION RANGE BASED MAPPING USING A CONVERSION LOOK ASIDE BUFFER OF A PROCESSOR"인 함께 계류중이며 공동 양도된 미합중국 가특허 출원 시리얼 No.61/436962의 이익을 주장하며 이는 전체가 여기에 통합된다.
본 발명은 일반적으로 디지털 컴퓨터 시스템에 관한 것이고, 특히 명령 시퀀스를 포함하는 명령들을 번역(translation)하기 위한 시스템 및 방법에 관한 것이다.
많은 유형의 디지털 컴퓨터 시스템은 소프트웨어-기반 기능을 구현하기 위하여 코드 변환/번역 또는 에뮬레이션을 이용한다. 일반적으로, 번역 및 에뮬레이션 양자는, 소프트웨어 명령이 컴퓨터 시스템에 대해 "네이티브(native)"가 아니더라도, 소프트웨어 명령의 프로그램을 검사하는 일과, 소프트웨어 명령에 의해 지시받은 기능 및 액션(functions and actions)을 실행하는 일을 포함한다. 번역의 경우에, 비-네이티브 명령은 컴퓨터 시스템의 하드웨어 상에서 실행될 수 있게 설계되어 있는 네이티브 명령의 형태로 번역된다. 예로는 산업 표준 x86 애플리케이션으로 동작되는 것으로서 이 애플리케이션이 비-x86 또는 대안적인 컴퓨터 아키텍처 상에서도 실행될 수 있게 해주는 종래 기술의 번역 소프트웨어 및/또는 하드웨어 등이 있다. 일반적으로, 번역 프로세스는 많은 수의 프로세서 사이클을 이용하므로, 상당한 양의 오버헤드(overhead)를 부과한다. 이러한 오버헤드에 의해 부과되는 성능 페널티는 번역 프로세스가 제공하는 이익을 상당히 잠식할 수 있다.
이러한 문제를 해결하고자하는 한가지 시도는 저스트 인 타임 컴파일(just-in-time compilation)의 이용을 포함한다. 다이내믹 번역으로도 알려져 있는 저스트 인 타임(JIT) 컴파일은 컴퓨터 프로그램의 런타임 성능을 향상시키는 방법이다. 전통적으로, 컴퓨터 프로그램은 두 가지의 런타임 변환 모드, 즉 해석 모드(interpretation mode) 또는 JIT(just-in-time) 컴파일/번역 모드를 가지고 있다. 해석은 오버헤드가 JIT 컴파일보다 낮은 것으로서 코드를 게스트(guest)에서 네이티브(native)로 변환하라는 명령에 의해서 명령을 디코딩하는 일을 포함하는 디코딩 프로세스이지만, 이는 실행이 떨어지는 변환 코드(transformed code)를 생성한다. 게다가, 이러한 해석은 매 명령마다 호출된다. JIT 컴파일러 또는 번역기는 해석에 대한 대조적인 접근법이다. JIT 변환(conversion)의 경우, 이는 해석기(interpreter)보다 높은 오버헤드를 나타내지만 보다 최적화되어 있는 번역 코드(translated code) 및 실행 성능이 높은 번역 코드를 생성한다. 대부분의 에뮬레이션 구현에서는, 먼저 번역이 필요하고, 이는 오버헤드를 줄이기 위해 해석으로서 실행되고, 코드가 여러 번 나타난(실행된) 후에 JIT 번역이 호출되어 보다 최적화된 번역이 이루어진다.
그러나, 코드 변환 프로세스는 아직도 다수의 문제를 나타내고 있다. JIT 컴파일 프로세스는 그 자체가 프로세서에 상당한 양의 오버헤드를 부과한다. 이는 애플리케이션의 스타트 업(start up)시에 많은 양의 지연을 유발시킬 수 있다. 게다가, 시스템 메모리에 변환 코드를 저장 관리하는 일은 시스템 메모리에 다수 회 들락날락하게 만들며 메모리 매핑 및 할당 관리 오버헤드를 포함하고, 이는 상당한 레이턴시(latency) 페널티를 부과한다. 더욱이, 애플리케이션에서 실행 영역에 대한 변경은 시스템 메모리 및 코드 캐시에서 변환 코드를 재배치하는 일과 맨처음부터(from scratch) 이 프로세스를 개시하는 일을 포함한다. 해석 프로세스는 JIT 번역보다 낮은 오버헤드를 포함하지만 그의 오버헤드는 명령마다 반복되므로 아직도 비교적 크다. 생성된 코드는 최적화한다 해도 열악할 것이다.
본 발명의 실시 예들은 게스트 명령-네이티브 명령 변환 프로세스의 하드웨어 기반 가속을 가능케 해주는 알고리즘 및 장치를 구현한다.
한 실시 예에서, 본 발명은 프로세서를 위한 명령을 번역하는 방법으로서 구현된다. 이 방법은 다수의 게스트 브랜치 명령을 포함하는 복수의 게스트 명령을 액세스하는 단계 및 복수의 게스트 명령을 게스트 명령 블록으로 어셈블하는 단계를 포함한다. 게스트 명령 블록은 대응하는 네이티브 변환 블록으로 변환된다. 네이티브 변환 블록은 네이티브 캐시에 저장된다. 게스트 명령 블록과 대응하는 네이티브 변환 블록과의 매핑은 변환 룩 어사이드 버퍼(conversion look aside buffer)에 저장된다. 게스트 명령에 대한 후속 요청이 있을 때, 변환 룩 어사이드 버퍼는 히트(hit)가 발생하였는지 여부를 결정하기 위하여 인덱싱(indexing)되고, 여기서 매핑은 게스트 명령이 네이티브 캐시 내에 대응하는 변환된 네이티브 명령을 갖고 있는지를 나타낸다. 변환된 네이티브 명령은 히트에 응답하여 실행을 위해 포워드된다.
이전 설명은 요약이며 그러므로 필요에 의해 단순화, 일반화, 및 세부사항의 생략을 함축하고 있다: 따라서, 이 기술 분야에 숙련된 자들은 요약은 단지 예시일 뿐이며 어떠한 경우에도 한정을 의미하지 않는다는 것을 이해할 것이다. 청구항들에 의해서만 규정되는 바와 같은, 본 발명의 다른 양태, 신규 피처, 및 장점들은 이한 제시되는 비-제한 상세 설명으로부터 명백해질 것이다.
본 발명은 첨부 도면의 도면에서 제한적인 것이 아니라 예로서 도시되어 있고, 도면에서 동일 참조번호는 유사한 요소들을 가리킨다.
도 1은 본 발명의 한 실시 예에 의해 운영되는 명령의 예시적인 시퀀스를 도시하고 있다.
도 2는 본 발명의 한 실시 예에 따른, 게스트 명령 블록이 네이티브 변환 블록으로 변환되는 블록-기반 번역 프로세스를 보여주는 다이어그램을 도시하고 있다.
도 3은 본 발명의 한 실시 예에 따른, 게스트 명령 블록의 각 명령이 네이티브 변환 블록의 대응하는 네이티브 명령으로 변환되는 방식을 보여주는 다이어그램을 도시하고 있다.
도 4는 본 발명의 한 실시 예에 따라, 원거리 브랜치들(far branches)이 네이티브 변환 블록의 핸들링에 의해 처리되는 방식을 보여주는 다이어그램을 도시하고 있다.
도 5는 본 발명의 한 실시 예에 따른, 게스트 명령 블록들 및 그들의 대응하는 네이티브 변환 블록들이 캐시에 저장되는 방식을 보여주는 예시적인 하드웨어 가속 변환 시스템의 다이어그램을 도시하고 있다.
도 6은 본 발명의 한 실시 예에 따른 하드웨어 가속 변환 시스템의 상세한 예를 도시하고 있다.
도 7은 본 발명의 한 실시 예에 따른, 보조(secondary) 소프트웨어-기반 가속 변환 파이프라인을 갖고 있는 하드웨어 가속 변환 시스템의 예를 도시하고 있다.
도 8은 본 발명의 한 실시 예에 따른, CLB가 코드 캐시에 연관되어 기능을 하고 게스트 명령 대 네이티브 명령 매핑이 메모리에 저장되어 있는 방식을 보여주는 예시적인 흐름도를 도시하고 있다.
도 9는 본 발명의 한 실시 예에 따른, 물리적인 저장 스택 코드 캐시 구현 및 게스트 명령 대 네이티브 명령 매핑을 보여주는 예시적인 흐름도를 도시하고 있다.
도 10은 본 발명의 한 실시 예에 따른, 하드웨어 가속 변환 시스템의 예시적인 상세를 더 보여주는 다이어그램을 도시하고 있다.
도 11a는 본 발명의 실시 예에 의해 구현된 예시적인 패턴 매칭 프로세스의 다이어그램을 도시하고 있다.
도 11b는 본 발명의 한 실시 예에 따른 SIMD 레지스터-기반 패턴 매칭 프로세스의 다이어그램을 도시하고 있다.
도 12는 본 발명의 한 실시 예에 따른 통합 레지스터 파일의 다이어그램을 도시하고 있다.
도 13은 본 발명의 한 실시 예에 따른, 추측 아키텍처 상태(speculative architectural states) 및 트랜션트 아키텍처 상태(transient architectural states)를 지원하는 통합 섀도우 레지스터 파일 및 파이프라인 아키텍처(1300)의 다이어그램을 도시하고 있다.
도 14는 본 발명의 한 실시 예에 따른 듀얼 스코프 이용(dual scope usage)을 포함하는 제2 이용 모델의 다이어그램을 도시하고 있다.
도 15는 본 발명의 한 실시 예에 따른, 트랜션트 컨텍스트(transient context)로부터의 복귀시에 이전 컨텍스트를 세이브하고 복원할 필요없는 트랜션트 컨텍스트 스위칭을 포함하는 제3 이용 모델의 다이어그램을 도시하고 있다.
도 16은 본 발명의 한 실시 예에 따른, 후속 코드에 대한 번역이 필요하기 때문에 명령 시퀀스에 예외(exception)가 있는 경우를 보여주는 다이어그램을 도시하고 있다.
도 17은 본 발명의 한 실시 예에 따른, 트랜션트 컨텍스트로부터의 복귀시에 이전 컨텍스트를 세이브하고 복원할 필요없는 트랜션트 컨텍스트 스위칭을 포함하는 제4 이용 모델의 다이어그램을 도시하고 있다.
도 18은 본 발명의 한 실시 예에 따른 예시적인 마이크로프로세서 파이프라인의 다이어그램을 도시하고 있다.
본 발명이 한 실시 예에 연관해서 설명되었을지라도, 본 발명이 여기에 개시된 특정 형태에 한정되지 않는다. 반대로, 본 발명은 첨부 청구항들이 정의한 본 발명의 범위 내에 합리적으로 포함될 수 있는 변형, 수정 및 균등물을 포괄한다.
다음의 상세한 설명에 있어서, 특정 방법 순서, 구조, 요소 및 연결과 같은 수많은 특정 세부사항들이 설명된다. 그러나 본 발명의 실시 예를 실현하는데 이들 및 다른 특정 세부사항이 이용되지 않을 수 있음은 이해하여야 한다. 다른 상황에서, 충분히 공지되어 있는 구조, 요소 또는 연결은 생략되었거나 이 설명의 이해가 불필요하게 불명료해지지 않도록 하기 위해서 상세히 설명되지 않았다.
이 명세서에서 "한 실시 예" 또는 "실시 예"에 대한 참조는 이 실시 예에 연관되어 기술된 특정한 피처, 구조 또는 특성이 적어도 본 발명의 한 실시 예에 포함됨을 의미한다. 이 명세서에서 다양한 장소에 나타나는 구 "한 실시 예에서"는 반드시 모두 동일 실시 예를 지칭하는 것이 아니고 다른 실시 예들을 상호 배제한 별개 또는 대안적인 실시 예들도 아니다. 더욱이, 다양한 피처들이 설명되며 이들은 모든 실시 예가 아닌 몇몇 실시 예에서 나타날 수 있다. 유사하게, 다양한 필요조건이 설명되며, 이들도 모든 실시 예가 아닌 몇몇 실시 예에서의 필요조건일 수 있다.
뒤따르는 상세한 설명 중 어떤 부분들은 컴퓨터 메모리 내의 데이터 비트 상의 동작들의 절차, 단계, 논리 블록, 처리 및 다른 심볼릭 표현의 관점에서 제시되어 있다. 이들 설명 및 표현은 데이터 처리 분야에 숙련된 자들이 그들의 연구 실체를 이 기술 분야에 숙련된 다른 이들에게 가장 효과적으로 전달하는데 이용되는 수단이다. 절차, 컴퓨터 실행 단계, 논리적 블록, 프로세스 등이 이 명세서에 있으며 이들은 일반적으로 원하는 결과를 이끌어내는 단계들 또는 명령들의 자체-정렬 시퀀스인 것으로 생각할 수 있다. 단계들은 물리적인 양들의 물리적인 조작이 필요한 것들이다. 보통, 반드시는 아닐지라도, 이들 양은 컴퓨터 판독가능 저장 매체의 전기 또는 자기 신호의 형태를 취하며 컴퓨터 시스템에서 저장, 전송, 결합, 비교 및 조작될 수 있다. 이들 신호를 비트, 값, 요소, 심볼, 문자(character), 용어, 숫자 등으로 지칭하는 것이 주로 공통 이용이라는 이유로 때로 편리하다는 것이 증명되었다.
그러나, 이들 및 유사한 용어들 전부가 적절한 물리적인 양들에 연관되어 있고 단지 이들 량에 적용된 편리한 라벨임은 염두에 두고 있어야 한다. 다음의 논의에서 알 수 있듯이 다른 방식으로 구체적으로 언급하지 않는 한, 본 발명 전반에 걸쳐서, "처리" 또는 "액세스", 또는 "기록" 또는 "저장" 또는 "복제" 등과 같은 용어를 이용하는 논의는 컴퓨터 시스템의 레지스터 및 메모리 및 기타 컴퓨터 판독가능 매체 내에 물리적인 (전자) 양으로 표현된 데이터를 컴퓨터 시스템 메모리 또는 레지스터 또는 기타 그러한 정보 저장, 전송 또는 표시 장치 내의 물리적인 양으로 유사하게 표현된 다른 데이터로 조작 및 변환하는 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 장치의 액션 및 프로세스를 지칭한다는 것은 이해하여야 한다.
본 발명의 실시 예들은 주로 네이티브 프로세서 상에서 실행할 수 있게 게스트 명령 아키텍처로부터의 게스트 명령을 네이티브 명령 아키텍처의 네이티브 명령으로 번역하는 프로세스를 가속함으로써 기능을 한다. 본 발명의 실시 예들은 변환 프로세스를 위한 하드웨어 가속을 구현하기 위해 하드웨어-기반 유닛을 이용한다. 게스트 명령은 다수의 다양한 명령 아키텍처들로부터의 것일 수 있다. 예시적인 아키텍처로는 Java 또는 JavaScript, x86, MIPS, SPARC 등이 있다. 이들 게스트 명령은 네이티브 명령으로 고속으로 변환되어 고속 실행을 위해 네이티브 프로세서 하드웨어에 파이프라인(pipeline)된다. 이는 종래의 소프트웨어 제어 변환 프로세스에 비해서 훨씬 상위 레벨의 성능을 제공한다.
한 실시 예에서, 본 발명은 입력으로서 다수의 다양한 명령 아키텍처를 이용할 수 있는 플렉서블 변환 프로세스를 구현한다. 그러한 실시 예에서, 프로세서의 프론트 엔드(front end)는 훨씬 상위 레벨의 성능을 제공할 수 있게 하드웨어 가속 변환 처리의 장점을 취하면서 소프트웨어로 제어될 수 있게 구현된다. 그러한 구현은 다수의 프론트에서 이점을 낳는다. 다양한 게스트 아키텍처들은 각각이 훨씬 상위 레벨의 성능을 누리기 위해 하드웨어 가속의 장점을 취하면서 처리 및 변환될 수 있다. 소프트웨어 제어 프론트 엔드는 프로세서 상에서 실행되는 애플리케이션에 상당한 정도의 유연성을 제공할 수 있다. 하드웨어 가속은 게스트 애플리케이션의 게스트 명령의 실행을 위한 거의 네이티브 하드웨어 속도(speed)에 가까운 속도를 성취할 수 있다. 뒤따르는 설명에서, 도 1 내지 도 4는 본 발명의 실시 예들이 게스트 명령 시퀀스들을 다루고 이들 게스트 명령 시퀀스 내의 근거리 브랜치(near branch)들과 원거리 브랜치(far branch)들을 다루는 방식을 도시하고 있다. 도 5는 본 발명의 한 실시 예에 따른 예시적인 하드웨어 가속 변환 처리 시스템의 개요를 도시하고 있다.
도 1은 본 발명의 한 실시 예에 의해 동작되는 명령의 예시적인 시퀀스를 도시하고 있다. 도 1에 도시된 바와 같이, 명령 시퀀스(100)는 도 1의 상단에서 하단까지 진행되는 16개의 명령을 포함하고 있다. 도 1에서 알 수 있는 바와 같이, 시퀀스(100)는 4개의 브랜치 명령(101-104)을 포함하고 있다.
본 발명의 실시 예들의 한 목적은 전체 명령 그룹들을 하나의 원자 단위(atomic unit)로 처리하는 것이다. 이 원자 단위는 블록으로 지칭된다. 명령의 한 블록은 도 1에 도시된 16개의 명령을 훨씬 넘어서까지 확장될 수 있다. 한 실시 예에서, 한 블록은 고정된 크기(예를 들어, 64 바이트, 128 바이트, 256 바이트 등)를 채울 수 있을 정도로 충분한 명령을 포함하고 또는 탈출 조건(exit condition)이 조우(encounter)될 때까지 충분한 명령을 포함할 것이다. 한 실시 예에서, 한 블록의 명령을 종결짓기 위한 탈출 조건은 원거리 브랜치 명령의 조우이다. 실시 예들에 대한 설명에 이용된 바와 같이, 원거리 브랜치는 타겟 어드레스가 현재 명령 블록 바깥쪽에 상주하는 브랜치 명령을 지칭한다. 다른 말로, 주어진 게스트 명령 블록 내에서, 원거리 브랜치는 주어진 명령 블록 바깥쪽에 있는 어떤 다른 블록 또는 어떤 다른 명령의 시퀀스에 상주하는 타겟을 갖는다. 유사하게, 근거리 브랜치는 타겟 어드레스가 현재 명령 블록 안쪽에 상주하는 브랜치 명령을 지칭한다. 게다가, 네이티브 명령 블록이 다수의 게스트 원거리 브랜치들을 포함할 수 있음은 유의해야 한다. 이들 용어들은 이하 이어지는 논의에서 좀 더 설명된다.
도 2는 블록-기반 변환 프로세스를 보여주는 다이어그램이며, 여기서 게스트 명령 블록들은 본 발명의 한 실시 예에 따라서 네이티브 변환 블록들로 변환된다. 도 2에 도시된 바와 같이, 복수의 게스트 명령 블록(201)들은 대응하는 복수의 네이티브 변환 블록들(202)로 변환되고 있는 것으로 도시되어 있다.
본 발명의 실시 예들은 게스트 명령 블록의 명령들을 네이티브 변환 블록의 대응하는 명령들로 변환함으로써 기능을 한다. 블록(201) 각각은 게스트 명령으로 구성된다. 위에 설명한 바와 같이, 이들 게스트 명령은 다수의 다양한 게스트 명령 아키텍처들(예를 들어, Java 또는 JavaScript, x86, MIPS, SPARC 등)로부터 나올 수 있다. 다수의 게스트 명령 블록들은 1 이상의 대응하는 네이티브 변환 블록들로 변환될 수 있다. 이러한 변환은 명령당 기준(a per instruction basis)으로 나타난다.
도 2는 또한 게스트 명령 블록들이 브랜치 예측을 기반으로 시퀀스들로 어셈블되는 방식을 도시하고 있다. 이러한 속성(attribute)은 본 발명의 실시 예들이 원거리 브랜치들의 예측 결과를 기반으로 게스트 명령들의 시퀀스들을 어셈블할 수 있게 해준다. 원거리 브랜치 예측을 기반으로, 게스트 명령들의 시퀀스는 다수의 게스트 명령 블록들로 어셈블되고, 대응하는 네이티브 변환 블록으로 변환된다. 이러한 양태는 이하 도 3 및 도 4에서 더 설명된다.
도 3은 본 발명의 한 실시 예에 따라서 게스트 명령 블록의 각 명령이 네이티브 변환 블록의 대응하는 네이티브 명령으로 변환되는 방식을 보여주는 다이어그램을 도시한다. 도 3에 도시된 바와 같이, 게스트 명령 블록들은 게스트 명령 버퍼(301) 내에 상주한다. 유사하게, 네이티브 변환 블록(들)은 네이티브 명령 버퍼(302) 내에 상주한다.
도 3은 본 발명의 실시 예들의 속성을 도시하고 있으며, 여기서 게스트 브랜치 명령들의 타겟 어드레스들은 네이티브 브랜치 명령들의 타겟 어드레스들로 변환된다. 예를 들어, 게스트 명령 브랜치들 각각은 특정 브랜치의 타겟 어드레스를 식별하는 오프셋(offset)을 포함하고 있다. 이는 도 3에서 게스트 오프셋, 또는 G_offset으로 도시되어 있다. 게스트 명령들이 변환될 때, 이 오프셋은 대응하는 게스트 명령들의 기능을 생성하기 위해 네이티브 명령들에 의해 요구되는 다양한 길이 또는 시퀀스들 때문에 종종 다르다. 예를 들어, 게스트 명령들은 그들의 대응하는 네이티브 명령들에 비교해서 길이에 차이가 있을 수 있다. 그러므로, 변환 프로세스는 대응하는 네이티브 오프셋을 계산하여 이러한 차이를 보상한다. 이는 도 3에 네이티브 오프셋 또는 N_offset으로 도시되어 있다.
근거리 브랜치들로 지칭되는, 게스트 명령 블록 내의 타겟들을 갖고 있는 브랜치들은 예측되지 않으며, 그러므로 명령 시퀀스의 흐름을 변경하지 않는다는 점에 유의해야 한다.
도 4는 본 발명의 한 실시 예에 따른, 네이티브 변환 블록들을 핸들링함으로써 원거리 브랜치들이 처리되는 방식을 보여주는 다이어그램이다. 도 4에 도시된 바와 같이, 게스트 명령들은 메모리(401) 내에 게스트 명령 시퀀스로서 도시되어 있다. 유사하게, 네이티브 명령들은 메모리(402) 내에 네이티브 명령 시퀀스로서 도시되어 있다.
한 실시 예에서, 명령 블록마다, 게스트 명령 블록들과 네이티브 명령 블록들은 원거리 브랜치로 종결된다(예를 들어, 네이티브 블록들이 다수의 게스트 원거리 브랜치들을 포함할 수 있을지라도). 위에 설명한 바와 같이, 한 블록은 고정된 크기(예를 들어, 64 바이트, 128 바이트, 256 바이트 등)를 채우기에 충분한 명령을 포함하거나, 예를 들어, 마지막 게스트 원거리 브랜치 명령과 같은 탈출 조건이 조우할 때까지 충분한 명령을 포함할 것이다. 다수의 게스트 명령이 처리되어 게스트 명령 블록이 어셈블되고 원거리 브랜치가 조우되지 않았다면, 게스트 원거리 브랜치가 삽입되어 이 블록이 종결된다. 이 원거리 브랜치는 단지 다음 후속하는 블록으로의 점프일 뿐이다. 이는 명령 블록들이 메모리 내의 다른 네이티브 명령 블록 또는 다른 게스트 명령들의 시퀀스로 유도되는 브랜치로 종결되는 것을 보장해 준다. 게다가, 도 4에 도시된 바와 같이, 블록은 이 블록의 끝에 상주하지 않는 그의 명령 시퀀스 내에 게스트 원거리 브랜치를 포함할 수 있다. 이는 게스트 명령 원거리 브랜치(411)와 대응하는 네이티브 명령 게스트 원거리 브랜치(412)로 도시되어 있다.
도 4의 실시 예에서, 원거리 브랜치(411)는 예측되어 있다. 그러므로, 명령 시퀀스는 게스트 명령 F인 원거리 브랜치(411)의 타겟으로 점프한다. 유사하게, 대응하는 네이티브 명령에서, 원거리 브랜치(412)는 네이티브 명령 F로 이어진다. 근거리 브랜치들은 예측되지 않는다. 그러므로, 이들은 원거리 브랜치들과 같은 식으로 명령 시퀀스를 변경하지 않는다.
이러한 식으로, 본 발명의 실시 예들은 변환 블록들의 트레이스(trace)를 생성하고, 여기서 각 블록은 다수(예로, 3-4)의 원거리 브랜치들을 포함한다. 이 트레이스는 게스트 원거리 브랜치 예측에 기반을 두고 있다.
한 실시 예에서, 네이티브 변환 블록 내의 원거리 브랜치들은 대향 브랜치 경로에 대한 대향 어드레스인 게스트 어드레스를 포함한다. 위에서 설명한 바와 같이, 명령들의 시퀀스는 원거리 브랜치들에 대한 예측을 기반으로 생성된다. 예측의 참 결과(true outcome)는 대응하는 네이티브 변환 블록이 실행될 때까지는 알려지지 않는다. 그러므로, 거짓 예측(false prediction)이 검출되면, 대향 브랜치 경로에 대한 대향 게스트 어드레스를 얻기 위해 거짓 원거리 브랜치를 검사한다. 이후, 변환 프로세스는 지금은 참 브랜치 경로인 대향 게스트 어드레스로부터 계속된다. 이러한 식으로, 본 발명의 실시 예들은 원거리 브랜치의 예측 결과가 거짓인 경우로부터 회복하기 위해 대향 브랜치 경로에 대한 포함되어 있는 대향 게스트 어드레스를 이용한다. 그러므로, 원거리 브랜치 예측 결과가 거짓이라면, 이 프로세스는 어디로 가서 올바른 게스트 명령을 찾을 수 있는지를 알게된다. 유사하게, 원거리 브랜치 예측 결과가 참이라면, 대향 게스트 어드레스는 무시된다. 네이티브 명령 블록 내의 원거리 브랜치들이 바르게 예측된다면, 그들의 타겟 블록에 대한 CLB 내의 엔트리 포인트(entry point)가 필요하지 않음은 유의할 필요가 있다. 그러나, 누락 예측(miss prediction)이 발생하면, 타겟 블록에 대한 새로운 엔트리가 CLB 내에 삽입되어야 한다. 이러한 기능은 CLB 용량(capacity)을 보존할 목적으로 실행된다.
도 5는 본 발명의 한 실시 예에 따른 게스트 명령 블록들 및 그들의 대응하는 네이티브 변환 블록들이 캐시에 저장되는 방식을 보여주는 예시적인 하드웨어 가속 변환 시스템(500)의 다이어그램을 도시하고 있다. 도 5에 도시된 바와 같이, 변환 룩 어사이드 버퍼(506)는 게스트 블록들과 네이티브 블록들 간의 어드레스 매핑을 캐시하는데 이용된다; 그러므로, 가장 빈번하게 조우하는 네이티브 변환 블록들은 프로세서(508)에 대한 낮은 레이턴시 가용성(low latency availability)을 통해 액세스된다.
도 5는 빈번하게 조우하는 네이티브 변환 블록들이 고속 저 레이턴시 캐시, 변환 룩 어사이드 버퍼(506) 내에 유지되는 방식을 보여주는 다이어그램이다. 도 5에 도시된 컴포넌트들은 상당히 상위 레벨의 성능을 제공하기 위해 하드웨어 가속 변환 처리를 구현한다.
게스트 인출 로직 유닛(guest fetch logic unit)(502)은 시스템 메모리(501)로부터 게스트 명령들을 인출하는 하드웨어-기반 게스트 명령 인출 유닛으로서 기능을 한다. 소정의 애플리케이션의 게스트 명령들은 시스템 메모리(501) 내에 상주한다. 프로그램이 개시되면, 하드웨어-기반 게스트 인출 로직 유닛(502)은 게스트 명령들을 게스트 인출 버퍼(503) 내로 선 인출(prefetch)하기 시작한다. 게스트 인출 버퍼(507)는 게스트 명령들을 축적하고 이들을 게스트 명령 블록들로 어셈블한다. 이들 게스트 명령 블록들은 변환 테이블(504)을 이용함으로써 대응하는 네이티브 변환 블록들로 변환된다. 변환된 네이티브 명령들은 네이티브 변환 블록이 완료될 때까지 네이티브 변환 버퍼(505) 내에 축적된다. 이후 네이티브 변환 블록은 네이티브 캐시(507)에 전송되고 매핑들은 변환 룩 어사이드 버퍼(506)에 저장된다. 네이티브 캐시(507)는 이후 실행을 위해 네이티브 명령들을 프로세서(508)에 공급하는데 이용된다. 한 실시 예에서, 게스트 인출 로직 유닛(502)에 의해 구현된 기능은 게스트 인출 로직 상태 머신에 의해 생성된다.
이러한 프로세스가 계속됨에 따라, 변환 룩 어사이드 버퍼(506)는 게스트 블록 대 네이티브 블록의 어드레스 매핑으로 채워진다. 변환 룩 어사이드 버퍼(506)는 좀더 빈번하게 조우하는 블록 매핑들이 버퍼 내에 유지되는 한편 드물게 조우하는 블록 매핑들은 이 버퍼로부터 추방(evict)되는 것을 공고히 하기 위하여 1 이상의 알고리즘(예를 들어, 최소 최근 사용(least recently used), 등)을 이용한다. 이러한 식으로, 핫(hot) 네이티브 변환 블록 매핑들은 변환 룩 어사이드 버퍼(506) 내에 저장된다. 게다가, 네이티브 블록 내의 잘 예측된 원거리 게스트 브랜치들은 그들의 타겟 블록들이 단일 매핑된 네이티브 블록 내에 스티치(stitch)되어 있어 새로운 매핑을 CLB에 삽입할 필요가 없기 때문에, CLB 구조를 위한 작은 용량 효율성이 보존됨을 유의해야 한다. 더욱이, 한 실시 예에서, CLB는 최종 게스트 대 네이티브 어드레스 매핑(ending guest to native address mappings)만을 저장하도록 구성되어 있다. 이 양태는 또한 CLB의 작은 용량 효율성을 보존한다.
게스트 인출 로직(502)은 게스트 명령 블록으로부터의 어드레스들이 이미 네이티브 변환 블록으로 변환되었는지 여부를 결정하기 위해 변환 룩 어사이드 버퍼(506)를 주시한다. 위에서 설명한 바와 같이, 본 발명의 실시 예들은 변환 처리를 위한 하드웨어 가속을 제공한다. 그러므로, 게스트 인출 로직(502)은 새로운 변환을 위해 게스트 어드레스를 시스템 메모리(501)로부터 인출하기 전에 변환 룩 어사이드 버퍼(506)에서 이전부터 존재하는 네이티브 변환 블록 매핑을 찾을 것이다.
한 실시 예에서, 변환 룩 어사이드 버퍼는 게스트 어드레스 레인지(range)들 또는 개별 게스트 어드레스에 의해 인덱스된다. 게스트 어드레스 레인지들은 네이티브 변환 블록들로 변환된 게스트 명령 블록들의 어드레스들의 레인지들이다. 변환 룩 어사이드 버퍼에 의해 저장된 네이티브 변환 블록 매핑들은 그들의 대응하는 게스트 명령 블록의 대응하는 게스트 어드레스 레인지를 통해서 인덱스된다. 그러므로, 게스트 인출 로직은 게스트 어드레스를 변환된 블록들의 게스트 어드레스 레인지들 또는 개별 게스트 어드레스에 비교할 수 있고, 그의 매핑들은 변환 룩 어사이드 버퍼(506) 안에 유지되어, 이전부터 존재하는 네이티브 변환 블록이 네이티브 캐시(507) 또는 도 6의 코드 캐시 내에 저장된 것 안에 상주하는지 여부를 결정할 수 있다. 이전부터 존재하는 네이티브 변환 블록이 네이티브 캐시 또는 코드 캐시 내에 있다면, 대응하는 네이티브 변환 명령들은 이들 캐시로부터 직접 프로세서로 포워드된다.
이러한 식으로, 핫 게스트 명령 블록들(예를 들어, 빈번하게 실행되는 게스트 명령 블록들)은 고속 저 레이턴시 변환 룩 어사이드 버퍼(506) 내에 유지되는 그들의 대응하는 핫 네이티브 변환 블록 매칭들을 갖는다. 블록들이 터치될 때, 적절한 교체 정책(replacement policy)이 핫 블록 매핑들이 변환 룩 어사이드 버퍼 내에 유지되게 보장해준다. 그러므로, 게스트 인출 로직(502)은 요청된 게스트 어드레스들이 이미 변환되었는지 여부를 신속하게 식별할 수 있고 이미 변환된 네이티브 명령들을 프로세서(508)가 실행할 수 있게 네이티브 캐시(507)에 직접 포워드할 수 있다. 이들 양태는 시스템 메모리로의 트립(trip)이 40 내지 50 사이클 이상 이루어질 수 있기 때문에 많은 수의 사이클을 절감한다. 이들 속성(예를 들어, CLB, 게스트 브랜치 시퀀스 예측, 게스트 & 네이티브 브랜치 버퍼, 종래의 네이티브 캐싱)으로 인해, 본 발명의 실시 예들의 하드웨어 가속 기능성은 게스트 애플리케이션의 애플리케이션 성능을 비교가능한 네이티브 애플리케이션의 애플리케이션 성능의 80% 내지 100% 내까지 허용할 수 있다.
한 실시 예에서, 게스트 인출 로직(502)은 프로세서(508)로부터 게스트 명령 요청에 무관하게 변환을 위한 게스트 명령들을 연속해서 선 인출한다. 네이티브 변환 블록들은 덜 빈번하게 사용되는 블록용인 시스템 메모리(501) 내의 변환 버퍼 "코드 캐시" 내에 축적될 수 있다. 변환 룩 어사이드 버퍼(506)는 또한 가장 빈번하게 사용되는 매핑들을 유지한다. 그러므로, 요청된 게스트 어드레스가 변환 룩 어사이드 버퍼 내의 게스트 어드레스에 매핑되지 않으면, 게스트 인출 로직은 시스템 메모리(501)를 체크하여 게스트 어드레스가 내부에 저장되어 있는 네이티브 변환 블록에 대응하는지 여부를 결정할 수 있다.
한 실시 예에서, 변환 룩 어사이드 버퍼(506)는 캐시로서 구현되며 상위 레벨의 캐시 및 시스템 메모리(501)에 저장된 훨씬 큰 변환 버퍼와의 코히어런시를 유지하기 위해 캐시 코히어런시 프로토콜을 이용한다. 변환 룩 어사이드 버퍼(506)에 저장되어 있는 네이티브 명령 매핑들은 또한 상위 레벨의 캐시 및 시스템 메모리(501)에 재기록된다(written back). 시스템 메모리에 재기록되는 것은 코히어런시를 유지한다. 그러므로, 캐시 관리 프로토콜은 핫 네이티브 변환 블록 매핑들이 변환 룩 어사이드 버퍼(506) 내에 저장되고 콜드(cold) 네이티브 변환 매핑 블록들이 시스템 메모리(501) 내에 저장되는 것을 보장하기 위해 이용될 수 있다. 그러므로, 훨씬 큰 형태의 변환 버퍼(506)가 시스템 메모리(501)에 상주하게 된다.
유의해야 할 점은, 한 실시 예에서, 예시적인 하드웨어 가속 변환 시스템(500)이 다수의 다양한 가상 저장 스킴을 구현하는데 이용될 수 있다는 것이다. 예를 들어, 게스트 명령 블록들과 그들의 대응하는 네이티브 변환 블록들이 캐시 내에 저장되는 방식은 가상 저장 스킴을 지원하는데 이용될 수 있다. 유사하게, 게스트 블록들과 네이티브 블록들 간의 어드레스 매핑을 캐시하는데 이용되는 변환 룩 어사이드 버퍼(506)는 가상 저장 스킴(예를 들어, 가상 대 물리적 메모리 매핑들의 관리)을 지원하는데 이용될 수 있다.
한 실시 예에서, 도 5의 아키텍처는 입력으로서 다수의 다양한 명령 아키텍처를 수신할 수 있는 플렉서블 변환 프로세스를 이용하는 가상 명령 세트 프로세서/컴퓨터를 구현한다. 그러한 가상 명령 세트 프로세서에서, 프로세서의 프론트 엔드는 훨씬 상위 레벨의 성능을 제공할 수 있게 하드웨어 가속 변환 처리의 장점을 취하면서 소프트웨어로 제어될 수 있도록 구현된다. 그러한 구현을 이용하여, 다양한 게스트 아키텍처들은 그들 각각이 훨씬 상위 레벨의 성능을 누리기 위해 하드웨어 가속의 이점을 취하면서 처리되어 변환될 수 있다. 게스트 아키텍처의 예로는 Java 또는 JavaScript, x86, MIPS, SPARC 등이 있다. 한 실시 예에서, "게스트 아키텍처"는 네이티브 명령들일 수 있고(예를 들어, 네이티브 애플리케이션/매크로-오퍼레이션으로부터의 것), 변환 처리는 최적화된 네이티브 명령들(예를 들어, 최적화된 네이티브 명령/마이크로-오퍼레이션)을 생성한다. 소프트웨어 제어 프론트 엔드는 프로세서 상에서 실행되는 애플리케이션들에 큰 폭의 유연성을 제공할 수 있다. 위에서 설명한 바와 같이, 하드웨어 가속은 게스트 애플리케이션의 게스트 명령의 실행을 위해 네이티브 하드웨어 속도에 가까운 속도를 성취할 수 있다.
도 6은 본 발명의 한 실시 예에 따른 하드웨어 가속 변환 시스템(600)의 상세한 예를 도시하고 있다. 시스템(600)은 위에 설명한 시스템(500)과 거의 같은 식으로 실행한다. 그러나, 시스템(600)은 예시적인 하드웨어 가속 처리의 기능을 기술하는 세부사항을 더 도시하고 있다.
시스템 메모리(601)는 게스트 코드(602), 변환 룩 어사이드 버퍼(603), 최적화기 코드(604), 변환기 코드(605) 및 네이티브 코드 캐시(606)를 포함하는 데이터 구조를 구비하고 있다. 시스템(600)은 또한 게스트 명령과 네이티브 명령이 둘 다 인터리브(interleave)되고 공유될 수 있는 공유 하드웨어 캐시(607)를 도시하고 있다. 게스트 하드웨어 캐시(610)는 공유 하드웨어 캐시(607)로부터 가장 빈번하게 터치되는 게스트 명령들을 캐시한다.
게스트 인출 로직(620)은 게스트 코드(602)로부터 게스트 명령들을 선 인출한다. 게스트 인출 로직(620)은 TLB(609)와 인터페이스하고, 이 TLB는 가상 게스트 어드레스들을 대응하는 물리적인 게스트 어드레스로 번역하는 변환 룩 어사이드 버퍼로서의 기능을 한다. TLB(609)는 히트(hits)를 게스트 하드웨어 캐시(610)에 직접 포워드할 수 있다. 게스트 인출 로직(620)에 의해 인출되는 게스트 명령들은 게스트 인출 버퍼(611)에 저장된다.
변환 테이블(612 및 613)은 대체 필드와 제어 필드를 포함하며 게스트 인출 버퍼(611)로부터 수신된 게스트 명령들을 네이티브 명령들로 번역하기 위한 멀티레벨 변환 테이블로서의 기능을 한다.
멀티플렉서(614 및 615)는 변환된 네이티브 명령들을 네이티브 변환 버퍼(616)에 전송한다. 네이티브 변환 버퍼(616)는 네이티브 변환 블록들을 어셈블하기 위해 변환된 네이티브 명령들을 축적한다. 이들 네이티브 변환 블록들은 이후 네이티브 하드웨어 캐시(600)에 전송되고 매핑들은 변환 룩 어사이드 버퍼(630)에 유지된다.
변환 룩 어사이드 버퍼(630)는 변환된 블록 엔트리 포인트 어드레스(631), 네이티브 어드레스(632), 변환된 어드레스 레인지(633), 코드 캐시 및 변환 룩 어사이드 버퍼 관리 비트(634) 및 다이내믹 브랜치 바이어스 비트(635)에 대한 데이터 구조를 구비한다. 게스트 브랜치 어드레스(631)와 네이티브 어드레스(632)는 어느 대응하는 네이티브 변환 블록이 변환된 블록 레인지(633) 내에 상주하는지를 나타내는 게스트 어드레스 레인지를 포함한다. 캐시 관리 프로토콜 및 교체 정책(replacement policies)은 핫 네이티브 변환 블록 매핑들이 변환 룩 어사이드 버퍼(630) 내에 상주하고 콜드 네이티브 변환 블록 매핑들은 시스템 메모리(601) 내의 변환 룩 어사이드 버퍼 데이터 구조(603) 내에 상주하도록 보장한다.
시스템(500)에서와 같이, 시스템(600)은 핫 블록 매핑들이 고속 저 레이턴시 변환 룩 어사이드 버퍼(630)에 상주하게 보장한다. 그러므로, 인출 로직(640) 또는 게스트 인출 로직(620)이 게스트 어드레스를 인출하기 위해 주시할 때, 한 실시 예에서, 인출 로직(640)은 대응하는 네이티브 변환 블록이 코드 캐시(606) 내에 상주하는지 여부를 결정하기 위해 게스트 어드레스를 먼저 체크할 수 있다. 이는 요청된 게스트 어드레스가 코드 캐시(606) 내에 대응하는 네이티브 변환 블록을 갖고 있는지 여부를 결정할 수 있게 해준다. 요청된 게스트 어드레스가 버퍼(603 또는 608) 또는 버퍼(630) 내에 상주하지 않으면, 게스트 어드레스와 다수의 후속 게스트 명령들이 게스트 코드(602)로부터 인출되고 변환 프로세스는 변환 테이블(612 및 613)을 통해서 구현된다.
도 7은 본 발명의 한 실시 예에 따른 보조(secondary) 소프트웨어-기반 가속 변환 파이프라인을 갖는 하드웨어 가속 변환 시스템(700)의 예를 도시하고 있다.
컴포넌트(711-716)는 전문화된 고속 메모리(760) 내에 인스턴스화되어 있는(instantiate) 소프트웨어 구현 로드 저장 경로(software implemented load store path)를 포함한다. 도 7에 도시된 바와 같이, 게스트 인출 버퍼(711), 변환 테이블(712-713) 및 네이티브 변환 버퍼(716)는 전문화된 고속 메모리(760)의 할당된 부분들을 포함한다. 여러 측면에서, 전문화된 고속 메모리(760)는 매우 낮은-레벨 고속 캐시(예로, L0 캐시)로서 작용한다.
화살표(761)는 명령 인출 경로(예로, 인출된 디코드 로직으로부터의)와는 반대되는 로드 저장 경로를 통해서 변환들을 가속시키는 속성을 도시하고 있다.
도 7의 실시 예에서, 고속 메모리(760)는 비교를 하기 위한 특정 로직을 포함한다. 이 때문에, 변환 가속은 소프트웨어로 구현될 수 있다. 예를 들어, 다른 실시 예에서, 컴포넌트(711-716)를 저장하는 표준 메모리(760)는 프로세서 실행 파이프라인을 이용하는 소프트웨어에 의해 조정되며, 이 소프트웨어는 상기 컴포넌트(711-716)로부터의 값들을 1 이상의 SIMD 레지스터(들) 내로 로딩하고 SIMD 레지스터 내의 필드들 간의 비교를 실행하는 비교 명령을 구현하고, 필요에 따라서, 마스크 오퍼레이션(mask operation) 및 결과 스캔 오퍼레이션(result scan operation)을 실행한다. 로드 저장 경로는, 예를 들어, 하나를 다수에 비교하는 비교 명령을 이용하는 것과 같이 범용 마이크로프로세서 하드웨어를 이용하여 구현될 수 있다.
유의해야 할 점은 메모리(760)는 특정 속성 또는 어드레스 레인지를 갖고 있는 명령에 의해 액세스된다는 것이다. 예를 들어, 한 실시 예에서, 게스트 인출 버퍼는 각 게스트 명령 엔트리에 대한 ID를 갖고 있다. 이 ID는 게스트 명령마다 생성된다. 이 ID로 인해 게스트 버퍼로부터 네이티브 변환 버퍼로의 매핑이 쉬워진다. 이 ID는 대응하는 네이티브 명령들에 비해서 게스트 명령들의 다양한 길이에 관계없이, 네이티브 오프셋에 대한 게스트 오프셋의 계산을 용이하게 해준다. 이 양태는 도 3에 도시되어 있다.
한 실시 예에서, ID는 인출된 게스트 명령의 길이를 계산하는 길이 디코더를 이용하는 하드웨어에 의해 계산된다. 그러나, 이러한 기능이 하드웨어 또는 소프트웨어로 실행될 수 있음은 유의해야 한다.
ID들이 할당되면, 네이티브 명령 버퍼는 ID를 통해서 액세스된다. ID는 게스트 오프셋으로부터 네이티브 오프셋으로의 오프셋 변환을 가능하게 해준다.
도 8은 본 발명의 한 실시 예에 따른, CLB가 코드 캐시에 연관되어 기능을 하고 게스트 명령 대 네이티브 명령 매핑이 메모리에 저장되는 방식을 보여주는 예시적인 흐름도를 도시하고 있다.
위에 설명한 바와 같이, CLB는 코드 캐시 메모리 내에 저장된 대응하는 변환된 네이티브 어드레스를 갖고 있는 게스트 어드레스의 매핑들(예로, 게스트 대 네이티브 어드레스 매핑들)을 저장하는데 이용된다. 한 실시 예에서, CLB는 게스트 어드레스의 일부로 인덱스된다. 게스트 어드레스는 인덱스, 태그(tag) 및 오프셋(예로, 청크 크기)으로 나눠진다. 이 게스트 어드레스는 인덱스에 대응하는 CLB 엔트리 내의 매치(match)를 식별하는데 이용되는 태그를 포함한다. 이 태그에 히트(hit)가 있다면, 대응하는 엔트리는 코드 캐시 메모리(806) 내에서 대응하는 변환된 네이티브 명령 청크(예로, 변환된 네이티브 명령들의 대응하는 블록)가 발견될 수 있는 장소를 나타내는 포인터(pointer)를 저장한다.
여기에 사용된 용어 "청크"는 변환된 네이티브 명령 블록의 대응하는 메모리 크기를 지칭한다는 것은 유의해야 한다. 예를 들어, 청크들은 변환된 네이티브 명령 블록들의 다양한 크기에 따라서 크기가 다를 수 있다.
코드 캐시 메모리(806)에 관해서, 한 실시 예에서, 코드 캐시는 한 세트의 고정된 크기 청크들에 할당된다(예로, 각 청크 유형마다 크기가 다르다). 코드 캐시는 시스템 메모리 및 모든 낮은 레벨 HW 캐시들(예로, 네이티브 하드웨어 캐시(608), 공유 하드웨어 캐시(607))에서 세트들(sets)과 경로들(ways)로 논리적으로 나눠질 수 있다. CLB는 게스트 어드레스를 이용하여 코드 캐시 청크들에 대한 경로 태그들(way tags)을 인덱스하고 태그 비교(tag compare)할 수 있다.
도 8은 경로 x와 경로 y로 도시되어 있는 2개의 경로에 게스트 어드레스 태그들을 저장하는 CLB 하드웨어 캐시(804)를 도시하고 있다. 유의해야 할 점은, 한 실시 예에서, CLB 구조를 이용하여 네이티브 어드레스들에 대한 게스트 어드레스들의 매핑이 네이티브 코드 청크들(예로, 게스트 어드레스로부터 네이티브 어드레스로의 매핑들)에 대한 포인터들(pointers)을 구조화된 경로들에 저장함으로써 행해질 수 있다는 것이다. 각 경로는 태그에 연관되어 있다. CLB는 게스트 어드레스(802)(태그를 포함한다)로 인덱스되어 있다. CLB에 히트(hit)가 있으면, 태그에 대응하는 포인터가 복귀한다. 이 포인터는 코드 캐시 메모리를 인덱스하는데 이용된다. 이는 도 8에 코드 청크의 네이티브 어드레스가 포인터와 세그먼트 수의 함수라는 사실을 나타내는 라인 "코드 청크의 네이티브 어드레스=Seg#+F(pt)"로 도시되어 있다. 본 실시 예에서, 세그먼트는 포인터 스코프(scope)가 가상적으로 매핑되는 메모리 내의 포인터에 대한 베이스(base)를 지칭한다(예로, 이는 포인터 어레이가 물리적인 메모리 내의 임의 영역 내로 매핑될 수 있게 해준다).
대안으로, 한 실시 예에서, 코드 캐시 메모리는 도 8에 라인 "코드 청크의 네이티브 어드레스=seg#+Index*(청크의 크기)+way#*(청크 크기)"로 도시된 바와 같이 제2 방법으로 인덱스될 수 있다. 그러한 실시 예에서, 코드 캐시는 그의 경로-구조들이 CLB 경로 구조에 매칭되어 1:1 매핑이 CLB의 경로들과 코드 캐시 청크들의 경로들 간에 존재하도록 구성되어 있다. 특정 CLB 경로에 히트가 있을 때, 코드 캐시의 대응하는 경로 내의 대응하는 코드 청크는 네이티브 코드를 갖는다.
도 8을 다시 참조해 보면, CLB의 인덱스가 누락되면, 메모리의 높은 계층들이 히트에 대해 체크될 수 있다(예로, L1 캐시, L2 캐시, 등). 이들 높은 캐시 레벨들에 히트가 없다면, 시스템 메모리(801) 내의 어드레스들이 체크된다. 한 실시 예에서, 게스트 인덱스는, 예를 들어, 64 청크를 포함하는 엔트리를 가리킨다. 64 청크들 각각의 태그들은 읽혀져서 게스트 태그에 비교됨으로써, 히트가 있는지 여부가 결정된다. 이러한 프로세스는 도 8에 점선 박스(805)로 도시되어 있다. 시스템 메모리 내의 태그들과의 비교 후에 히트가 없다면, 메모리의 어떤 계층 레벨에도 변환이 존재하지 않으므로 게스트 명령은 변환되어야만 한다.
유의해야 할 점은 본 발명의 실시 예들이 게스트 대 네이티브 명령 매핑들을 캐시와 같은 방식으로 저장하는 메모리의 계층 레벨들 각각을 관리한다는 것이다. 이는 본래 캐시-기반 메모리(예로, CLB 하드웨어 캐시, 네이티브 캐시, L1 및 L2 캐시, 등)에서 유래한 것이다. 그러나, CLB는 또한 시스템 메모리(801) 내의 게스트 대 네이티브 명령 매핑들에 대한 최소 최근 사용(LRU:least recently used) 교체 관리 방식을 구현하는데 이용되는 "코드 캐시 + CLB 관리 비트"를 포함한다. 한 실시 예에서, CLB 관리 비트(예로, LRU 비트)는 소프트웨어로 관리된다. 이러한 식으로, 메모리의 모든 계층 레벨들은 가장 최근 사용, 가장 빈번하게 조우한 게스트 대 네이티브 명령 매핑들을 저장하는데 이용된다. 따라서, 이는 메모리의 모든 계층 레벨들이 유사하게 가장 빈번하게 조우한 변환된 네이티브 명령들을 저장하게 유도한다.
도 8은 또한 CLB 내에 저장된 다이내믹 브랜치 바이어스 비트 및/또는 브랜치 히스토리 비트를 도시하고 있다. 이들 다이내믹 브랜치 비트는 게스트 명령 시퀀스들을 어셈블하는데 이용된 브랜치 예측의 행동을 추적하는데 이용된다. 이들 비트는 어느 브랜치 예측이 가장 자주 바르게 예측된 것인지 어느 브랜치 예측이 가장 자주 바르지 않게 예측된 것인지를 추적하는데 이용된다. CLB는 또한 변환된 블록 레인지들에 대한 데이터를 저장한다. 이 데이터는 프로세스가 대응하는 게스트 명령들이 수정된 코드 캐시 메모리 내의 변환된 블록 레인지를 무효화할 수 있게 해준다(예로, 자체 수정 코드에서와 같이).
도 9는 본 발명의 한 실시 예에 따른, 물리적인 저장 스택 캐시 구현 및 게스트 어드레스 대 네이티브 어드레스 매핑을 보여주는 예시적인 흐름도를 도시하고 있다. 도 9에 도시된 바와 같이, 캐시는 물리적인 저장 스택(901)으로서 구현될 수 있다.
도 9의 실시 예는 코드 캐시가 가변 구조 캐시로서 구현될 수 있는 방식을 도시하고 있다. 다양한 실시 예들의 필요조건에 따라서, 가변 구조 캐시는 완전하게 하드웨어로 구현 및 제어될 수 있고, 완전하게 소프트웨어로 구현 및 제어될 수 있고, 또는 소프트웨어 인티미데이션(intimidation) 및 제어와 기본적인 하드웨어 인에이블먼트(enablement)의 어떤 혼합일 수 있다.
도 9는 실제의 물리적인 스토리지에서 게스트 대 네이티브 어드레스 매핑들 및 그들의 대응하는 번역들의 할당 및 교체를 관리하는 태스크를 위한 최적의 균형을 맞추는 것에 관한 것이다. 본 발명에서, 이는 포인터들을 가변 크기 청크들에 결합시키는 구조의 이용을 통해서 성취된다.
멀티-경로(multi-way) 태그 어레이는 물리적 스토리지의 다양한 크기 그룹들에 대한 포인터들을 저장하는데 이용한다. 특정 스토리지 크기가 할당될 필요가 있을 때마다(예로, 스토리지 크기가 어드레스에 대응하는 경우), 그에 따라 이 크기에 각각 대응하는 한 그룹의 스토리지 블록들이 할당된다. 이는 본 발명의 실시 예가 명령들의 가변 크기 트레이스들을 저장하기 위해 스토리지를 정밀하게 할당할 수 있게 해준다. 도 9는 어떻게 그룹들이 다양한 크기로 이루어질 수 있는지를 보여준다. 두 개의 예시적인 그룹 크기, 즉 "그룹 크기 4에 대한 교체 후보" 및 "그룹 크기 2에 대한 교체 후보"가 도시되어 있다. 포인터는 어드레스를 물리적인 스토리지 어드레스에 매핑하는 TAG 어레이(어드레스에 대응하는 태그에 더해서)에 저장되어 있다. 태그들은 2 이상의 서브-태그들을 포함할 수 있다. 예를 들어, 태그 구조(902) 내의 상부 3개의 태그는 도시된 바와 같이 서브 태그 A1 B1, A2 B2 C2 D2, 및 A3 B3를 각각 포함한다. 그러므로, 태그 A2 B2 C2 D2는 그룹 크기 4를 포함하고, 태그 A1 B1은 그룹 크기 2를 포함한다. 그룹 크기 마스크도 또한 그룹의 크기를 나타낸다.
물리적인 스토리지는 이후 스택 같이 관리될 수 있어서, 새로운 그룹이 할당될 때마다, 새로운 그룹이 물리적인 스토리지 스택의 상부에 배치될 수 있다. 엔트리들은 그들의 태그를 덮어쓰기 함으로써 무효화되고, 그 결과 할당된 스페이스가 회복된다.
도 9는 또한 확장된 경로 태그 구조(903)를 도시하고 있다. 어떤 상황에서, 태그 구조(902) 내의 엔트리는 확장된 경로 태그 구조(903) 내의 대응하는 엔트리를 가질 것이다. 이는 엔트리와 태그 구조가 확장된 경로 비트를 설정시키는지(예로, 1로 설정시키는지(set to one)) 여부에 의존한다. 예를 들어, 1로 설정된 확장된 경로 비트는 확장된 경로 태그 구조에 대응하는 엔트리들이 있음을 나타낸다. 확장된 경로 태그 구조는 프로세서가 표준 태그 구조로부터 다양한 경로로 레퍼런스(reference)의 집약성(locality)을 확장할 수 있게 해준다. 그러므로, 태그 구조(902)가 한 방식으로 인덱스될지라도(예로, 인덱스(j)), 확장된 경로 태그 구조는 다른 방식으로 인덱스된다(예로, 인덱스(k)).
전형적인 구현에서, 인덱스(J)는 인덱스(k) 내의 훨신 큰 수의 엔트리들일 수 있다. 이는, 대부분의 한정사항에 있어서, 주된 태그 구조(902)가 확장된 경로 태그 구조(903)보다 훨씬 크기 때문이며, 여기서, 예를 들어, (j)는 1024 엔트리(예로, 10비트)를 커버할 수 있고 (k)는 256 엔트리(예로, 8비트)를 커버할 수 있다.
이는 본 발명의 실시 예가 매우 핫한(예로, 매우 빈번하게 조우하는) 트레이스들을 매칭(matching)하기 위한 부가적인 경로들을 통합할 수 있게 해준다. 예를 들어, 핫 세트 내의 매치(match)가 태그 구조(902)에서 발견되지 않으면, 확장된 경로 비트를 설정함으로써, 핫 트레이스를 위한 부가적인 경로들을 저장하는데 확장된 경로 태그 구조를 이용할 수 있다. 유의해야 할 점은 이러한 가변 캐시 구조는 우리가 스택에 저장하는 캐시된 코드/데이터에 대해 필요가 있을 때만 스토리지를 이용하며, 예를 들어, 캐시 세트들(인덱스 비트가 가리키는 엔트리들) 중 임의의 것이 프로그램의 특정 페이즈(phase) 동안 전혀 액세스되지 않는다면 스택상의 이 세트에 대한 스토리지 할당은 없다는 것이다. 이는 세트들이 각 세트 및 모든 세트에 대한 고정된 물리적인 데이터 스토리지를 갖고 있는 통상적인 캐시에 비해서 효율적이고 효과적인 스토리지 용량 증대를 제공한다.
한 세트 또는 세트들의 그룹이 콜드(cold)임을 나타내는(예로, 이는 이들이 장기간 액세스되지 않았음을 의미한다) 비트들이 있을 수 있다. 이 경우에, 이들 세트에 대한 스택 스토리지는 할당된 스택 스토리지 내의 버블(bubbles)처럼 보인다. 이때, 그들의 할당 포인터들은 다른 핫 세트용으로 확보될 수 있다. 이러한 프로세스는 스토리지 회수 프로세스(storage reclamation process)이며, 청크가 스택 내에 할당된 후, 이 청크가 속하는 전체 세트는 나중에 콜드가 된다. 이러한 회수(reclamation)를 용이하게 할 수 있는 필요한 메커니즘과 구조(도시된 양태들을 어수선하게 하거나 불명료하게 하지 않기 위해서 도 9에 도시하지 않았다)는: 모든 세트(엔트리 인덱스)에 대한 콜드 세트 인디케이터, 및 이들 콜드 세트의 경로들에 대한 포인터들이 다른 핫 세트의 경로들에 재사용되는 회수 프로세스이다. 이는 이들 스택 스토리지 버블들(청크들)이 회수(reclaim)될 수 있게 해준다. 회수 모드에 있지 않으면, 새로운 청크가 스택의 상부에 할당되고, 스택이 콜드 세트들을 가지고 있을 때(예로, 설정된 경로들/청크들이 장기간 액세스되지 않았을 때), 회수 액션은 다른 세트에 할당되어야 하는 새로운 청크가 스택 내의 회수된 포인터와 그의 연관 청크 스토리지(콜드 세트에 속하는 것)를 재사용할 수 있게 해준다.
유의해야 할 점은 도 9의 실시 예는 전문화된 캐시 메모리와는 반대로 그의 구현에 있어 표준 메모리를 이용하는데 아주 적합하다는 것이다. 이러한 속성은 물리적인 스토리지 스택이 포인터를 판독하고, 인덱스를 판독하고 어드레스 레인지를 할당함으로써 관리된다는 사실에 기인한다. 전문화된 캐시-기반 회로 구조는 그런한 구현에 필요하지 않다.
유의해야 할 점은 한 실시 예에서, 도 9의 아키텍처는 변환 또는 코드 변환을 수반하지 않는 데이터 캐시 및 캐싱 스킴을 구현하는데 이용될 수 있다는 것이다. 따라서, 도 9의 아키텍처는 좀 더 표준화된 캐시(예로, L2 데이터 캐시, 등)을 구현하는데 이용될 수 있다. 그렇게 하면 종래의 고정된 구조 캐시 등에 비해 더 큰 효율적인 용량이 제공된다.
도 10은 본 발명의 한 실시 예에 따른 하드웨어 가속 변환 시스템(1000)의 예시적인 세부사항을 더 보여주는 다이어그램이다. 라인(1001)은 인입 게스트 명령들이 복수의 그룹 마스크들 및 태그들에 비교되는 방식을 도시하고 있다. 이 목적은 게스트 명령의 유형을 신속하게 식별하여 이를 대응하는 그룹에 할당하는 것이다. 그룹 마스크들과 태그들은 게스트 명령이 속하는 특정 그룹들을 식별하기 위하여 게스트 명령의 서브필드들을 매칭함으로써 기능을 한다. 마스크는 특히 관련 비트들을 볼 수 있게 하기 위해서 게스트 명령 패턴의 관련없는 비트들을 보기 어렵게 만든다. 예를 들어, 테이블(1002)과 같은 테이블들은 우선 순위 방식으로 마스크-태그 쌍들을 저장한다.
패턴은 우선 순위 방향으로 테이블 내로 판독함으로써 매칭되며, 이 경우에 우선 순위 방향은 탑다운(top down)으로 도시되어 있다. 이러한 식으로, 패턴은 마스크-태그 스토리지의 우선 순위 방향으로 판독함으로써 매칭된다. 다른 마스크들은 그들의 우선 순위의 순서로 검사되고, 따라서 패턴 매칭 기능도 대응하여 그들의 우선 순위의 순서로 적용된다. 히트가 발견될 때, 패턴의 대응하는 매핑은 매핑들을 저장하고 있는 대응하는 테이블(예로, 테이블 1003)로부터 판독된다. 제2 레벨 테이블(1004)은 다수의 변환 테이블들이 게스트 명령의 완전한 변환이 성취될 때까지 캐스케이딩 순차 방식으로 액세스될 수 있는 계층 방식을 도시하고 있다. 위에 설명한 바와 같이, 변환 테이블들은 대체 필드와 제어 필드를 포함하며 게스트 인출 버퍼로부터 수신된 게스트 명령들을 네이티브 명령들로 번역하기 위한 멀티레벨 변환 테이블로서 기능한다.
이러한 식으로, 버퍼 내의 각 바이트 스트림은 변환 테이블에 전송되고, 변환 테이블의 각 레벨은 순차적으로 비트 필드들을 검출한다. 관련 비트 필드가 검출될 때, 테이블은 필드의 네이티브 등가물(native equivalence)을 대체한다.
테이블은 또한 이 레벨은 물론이고 차기 레벨 테이블(예로, 제2 레벨 테이블(1004))에 대한 대체 프로세스에 도움을 주는 제어 필드를 생성한다. 차기 테이블은 이전의 테이블 제어 필드를 이용하여 네이티브 등가물로 대체될 차기 관련 비트 필드를 식별한다. 제2 레벨 테이블은 이후 제1 레벨 테이블 등에 도움을 주기 위해 제어 필드를 생성할 수 있다. 모든 게스트 비트 필드가 네이티브 비트 필드로 대체되면, 명령은 완전히 번역되어 네이티브 변환 버퍼에 전송된다. 이후 네이티브 변환 버퍼는 코드 캐시에 기록되고 그의 게스트 대 네이티브 어드레스 매핑들은 앞서 설명한 바와 같이 CLB에 로그된다.
도 11a는 본 발명의 실시 예들에 의해 구현된 예시적인 패턴 매칭 프로세스의 다이어그램을 도시하고 있다. 도 11a에 도시된 바와 같이, 목적지(destination)는 태그, 패턴 및 마스크에 의해서 결정된다. 패턴 디코딩의 기능은 비트 비교(예로, 비트단위(bitwise)의 XOR)를 실행하는 일, 비트 AND(예로, 비트단위의 AND)를 실행하는 일, 및 모든 0 비트(예로, 모든 비트의 NOR)를 후속적으로 체크하는 일을 포함한다.
도 11b는 본 발명의 한 실시 예에 따른 SIMD 레지스터 기반 패턴 매칭 프로세스의 다이어그램(1100)을 도시하고 있다. 다이어그램(1100)에 도시된 바와 같이, 4개의 SIMD 레지스터(1102-1105)가 도시되어 있다. 이들 레지스터는 도시된 바와 같이 패턴 디코딩 프로세스의 기능을 구현한다. 인입 패턴(1101)은 태그들 각각에 관해서 병렬 비트 비교(예로, 비트단위의 XOR)를 실행하는데 이용되고, 그 결과는 마스크와의 비트 AND(예로, 비트단위의 AND)를 실행한다. 매치 인디케이터 결과들은 도시된 바와 같이 그들의 각 SIMD 위치에 각각 저장된다. 이후 도시된 바와 같이 스캔(scan)이 실행되고, 이 스캔이 조우한 SIMD 요소들 중에서 제1 참(true)은, 모든 i 비트에 대한 등식 (Pi XOR Ti) AND Mi = 0이 참인 요소이고, 여기서, Pi는 각 패턴이고, Ti는 각 태그이며 Mi는 각 마스크이다.
도 12는 본 발명의 한 실시 예에 따른 통합 레지스터 파일(1201)의 다이어그램을 도시하고 있다. 도 12에 도시된 바와 같이, 통합 레지스터 파일(1201)은 2개의 부분(1202-1203) 및 엔트리 선택기(1205)를 포함하고 있다. 통합 레지스터 파일(1201)은 하드웨어 상태 갱신을 위한 아키텍처 추측(speculation) 지원을 구현한다.
통합 레지스터 파일(1201)은 최적화된 섀도우(shadow) 레지스터 및 커밋티드 레지스터(committed register) 상태 관리 프로세스의 구현을 가능하게 해준다. 이 프로세스는 하드웨어 상태 갱신을 위한 아키텍처 추측을 지원한다. 이러한 프로세스 하에, 본 발명의 실시 예들은 레지스터 메모리 간에 크로스 카피(cross copy)를 요구할 필요없이 섀도우 레지스터 기능 및 커밋티드 레지스터 기능을 지원할 수 있다. 예를 들어, 한 실시 예에서, 통합 레지스터 파일(1201)의 기능은 주로 엔트리 선택기(1205)에 의해 제공된다. 도 12의 실시 예에서, 각 레지스터 파일 엔트리는 각각 부분 1 및 부분 2로부터의 2개의 레지스터 쌍 R & R'로 구성된다. 임의 주어진 시간에, 각 엔트리로부터 판독되는 레지스터는 부분 1 또는 부분 2로부터의 R 또는 R'이다. 엔트리 선택기(105)에 의해서 각 엔트리마다 저장된 x & y 비트의 값을 기반으로 레지스터 파일의 각 엔트리에는 4 개의 서로 다른 조합이 있다.
x & y 비트에 대한 값들은 다음과 같다.
00: R 유효 아님; R' 커밋티드 (판독시 요청 R'가 판독됨)
01: R 추측; R' 커밋티드 (판독시 요청 R이 판독됨)
10: R 커밋티드 R' 추측 (판독시 요청 R'가 판독됨)
11: R 커밋티드 R' 유효 아님 (판독시 요청 R이 판독됨)
다음은 각 명령/이벤트의 영향(impact)이다. 명령 재기록시(Instruction Write back), 00은 01이 되고 11은 10이 된다. 명령 커밋(commit)시, 01은 11이 되고 10은 00이 된다. 롤백(rollback) 이벤트의 발생시, 01은 00이 되고 10은 11이 된다.
이들 변경은 주로 레지스터 파일 엔트리 선택기(1205)에 저장된 상태에 대한 변경이며 이벤트들이 발생할 때 이들 이벤트를 기반으로 이루어진다. 유의해야 할 점은 커밋 명령과 롤백 이벤트들은 엔트리 선택기(1205)에서 비트 트랜지션이 이루어지게 하기 위하여 커밋 스테이지에 도달해야 한다는 것이다.
이러한 식으로, 커밋티드 레지스터 상태를 파괴하지 않고도 실행이 섀도우 레지스터 상태 내에서 진행될 수 있다. 섀도우 레지스터 상태가 커밋을 위한 준비가 되어 있을 때, 위에서 설명한 방식으로 유효 결과들이 어느 부분으로부터 판독되게 레지스터 파일 엔트리 선택기가 갱신된다. 이러한 식으로, 필요할 때마다 레지스터 파일 엔트리 선택기를 간단히 갱신함으로써, 추측 실행(speculative execution) 결과가 예외(exception) 이벤트시에 가장 최근 커밋 포인트로 롤백(roll back)될 수 있다. 유사하게, 커밋 포인트는 순방향 전진될(advanced forward) 수 있고, 따라서, 레지스터 파일 엔트리 선택기들을 간단히 갱신함으로써 추측 실행 결과들이 커밋된다. 이러한 기능은 레지스터 메모리 간의 어떤 크로스 카피를 요구할 필요없이 제공된다.
이러한 식으로, 통합 레지스터 파일은 레지스터 파일 엔트리 선택기(1205)를 통해서 복수의 추측 스크래치 섀도우 레지스터(SSSR:speculative scratch shadow register) 및 복수의 커밋티드 레지스터(CR:committed register)를 구현할 수 있다. 예를 들어, 커밋시에, SSSR 레지스터들은 CR 레지스터들이 된다. 롤백시에, SSSR 상태는 CR 레지스터들로 다시 롤백된다.
도 13은 본 발명의 한 실시 예에 따른 추측 아키텍처 상태 및 트랜션트(transient) 아키텍처 상태를 지원하는 통합 섀도우 레지스터 파일 및 파이프라인 아키텍처(1300)의 다이어그램을 도시하고 있다.
도 13의 실시 예는 아키텍처 추측 상태를 포함하는 명령과 결과를 지원하고 트랜션트 상태를 포함하는 명령과 결과를 지원하는 아키텍처(1300)를 포함하는 컴포넌트들 도시하고 있다. 여기에 이용된 바와 같이, 커밋티드 아키텍처 상태는 프로세서 상에서 실행되는 프로그램에 의해서 액세스(예로, 판독 및 기록)될 수 있는 비저블(visible) 레지스터 및 비저블 메모리를 포함하고 있다. 대조적으로, 추측 아키텍처 상태는 커밋되지 않은 레지스터 및/또는 메모리를 포함하고 있고, 그러므로 전체적으로 보여 지지 않는다.
한 실시 예에서, 아키텍처(1300)에 의해 인에이블될 수 있는 4개의 이용 모델이 있다. 제1 이용 모델은 도 12의 논의에서 앞서 설명한 바와 같이 하드웨어 상태 갱신을 위한 아키텍처 추측을 포함한다.
제2 이용 모델은 듀얼 스코프 이용을 포함한다. 이 이용 모델은 2개의 스레드(thread)를 프로세서 내로 인출하는데 적용되고, 여기서 하나의 스레드는 추측 상태로 실행되고 다른 스레드는 비-추측 상태로 실행된다. 이러한 이용 모델에서, 양 스코프들은 동시에 머신 내로 인출되어 이 머신에 제공된다.
제3 이용 모델은 명령의 하나의 형식에서 다른 형식으로의 JIT(just-in-time) 번역 또는 컴파일을 포함한다. 이러한 이용 모델에서, 아키텍처 상태들의 재배열(reordering)은 소프트웨어, 예를 들어, JIT를 통해서 성취된다. 제3 이용 모델은, 예를 들어, 네이티브 명령으로의 게스트 명령 번역, 네이티브 명령으로의 가상 머신 번역, 또는 네이티브 마이크로 명령들을 좀더 최적화된 네이티브 마이크로 명령들로 재매핑/번역하는 일에 적용할 수 있다.
제4 이용 모델은 트랜션트 컨텍스트로부터 복귀시에 이전의 컨텍스트를 세이브하고 복원할 필요없는 트랜션트 컨텍스트 스위칭을 포함한다. 이 이용 모델은 다수의 이유로 발생할 수 있는 컨텍스트 스위치들에 적용된다. 그러한 하나의 이유는, 예를 들어, 예외 핸들링 컨텍스트를 통한 예외의 정밀한 핸들링일 수 있다. 제2, 제3 및 제4 이용 모델들은 도 14-17의 논의에서 이하 더 설명된다.
도 13을 다시 참조해 보면, 아키텍처(1300)는 위에 설명한 4개의 이용 모델을 구현하기 위한 다수의 컴포넌트를 포함하고 있다. 통합 섀도우 레지스터 파일(1301)은 제1 부분, 커밋티드 레지스터 파일(1302), 제2 부분, 섀도우 레지스터 파일(1303) 및 제3 부분, 최근 인디케이터 어레이(1304)를 포함한다. 추측 리타이어먼트(retirement) 메모리 버퍼(1342) 및 최근 인디케이터 어레이(1340)가 포함되어 있다. 아키텍처(1300)는 비-순차(out of order) 아키텍처를 포함하며, 그러므로, 아키텍처(1300)는 재배열 버퍼 및 리타이어먼트 윈도우(1332)를 더 포함한다. 재배열 및 리타이어먼트 윈도우(1332)는 머신 리타이어먼트 포인터(1331), 레디(ready) 비트 어레이(1334) 및 인디케이터(1333)와 같은 명령당 최근 인디케이터(per instruction latest indicator)를 더 포함한다.
하드웨어 상태 갱신을 위한 제1 이용 모델, 아키텍처 추측(architecture speculation)은 본 발명의 한 실시 예에 따라서 상세히 더 설명된다. 위에 설명한 바와 같이, 아키텍처(1300)는 비-순차 아키텍처를 포함한다. 아키텍처(1300)의 하드웨어는 비-순차 명령 결과(예로, 비-순차 로드 및 비-순차 저장 및 비-순차 레지스터 갱신)를 커밋할 수 있다. 아키텍처(1300)는 커밋티드 레지스터들과 섀도우 레지스터들 간의 추측 실행을 지원하기 위하여, 도 12의 논의에서 앞서 설명한 방식으로 통합 섀도우 레지스터 파일을 이용한다. 게다가, 아키텍처(1300)는 추측 실행을 지원하기 위하여 추측 로드 저장 버퍼(1320) 및 추측 리타이어먼트 메모리 버퍼(1342)를 이용한다.
아키텍처(1300)는 머신이 내부적으로 비-순차 방식으로 통합 섀도우 레지스터 파일 및 리타이어먼트 메모리 버퍼로 리타이어했을지라도 이들 컴포넌트들을 재배열 버퍼 및 리타이어먼트 윈도우(1332)에 연관시켜 이용함으로써 그의 상태를 커밋티드 레지스터 파일(1302) 및 비저블 메모리(1350)로 바르게 리타이어(retire) 시킬 수 있다. 예를 들어, 아키텍처는 예외의 발생 여부를 기반으로 롤백 및 커밋 이벤트들을 구현하기 위해 통합 섀도우 레지스터 파일(1301) 및 추측 메모리(1342)를 이용한다. 이러한 기능은 레지스터 상태가 비-순차로 통합 섀도우 레지스터 파일(1301)로 리타이어할 수 있게 해주며 추측 리타이어먼트 메모리 버퍼(1342)가 비-순차로 비저블 메모리(1350)로 리타이어할 수 있게 해준다. 추측 실행이 진행되고 비-순차 명령 실행이 진행될 때, 브랜치가 누락되었음이 예측되지 않고 예외가 발생하지 않으면, 머신 리타이어먼트 포인터(1331)는 커밋 이벤트가 트리거될 때까지 전진한다(advance). 커밋 이벤트는 머신 리타이어먼트 포인터(1331)에 따라서 그의 커밋 포인터를 전진시켜서 통합 섀도우 레지스터 파일이 그의 콘텐츠를 커밋하게 하고 추측 리타이어먼트 메모리 버퍼가 그의 콘텐츠를 메모리(1350)에 커밋하게 한다.
예를 들어, 재배열 버퍼 및 리타이어먼트 윈도우(1332) 내에 도시되어 있는 명령 1-7을 고려하여, 레디 비트 어레이(1334)는 실행 준비가 되어 있는 명령 옆에 "X", 실행 준비가 되어 있지 않은 명령 옆에 "/" 를 도시하고 있다. 따라서, 명령 1, 2, 4, 및 6은 비-순차로 진행할 수 있게 허용된다. 후속으로, 누락-예측되는 명령 6 브랜치와 같은 예외가 발생하면, 명령 6에 후속해서 발생하는 명령들은 롤백될 수 있다. 대안으로, 예외가 발생하지 않으면, 그에 따라서 머신 리타이어먼트 포인터(1331)를 이동시킴으로써 명령 1-7 모두가 커밋될 수 있다.
최근 인디케이터 어레이(1341), 최근 인디케이터 어레이(1304) 및 최근 인디케이터(1333)는 비-순차 실행을 허용해 주는데 이용된다. 예를 들어, 명령 2가 명령 5 이전에 레지스터 R4를 로딩할지라도, 명령 2로부터의 로드(load)는 명령 5가 발생할 준비가 되면 무시될 것이다. 최근 로드는 최근 인디케이터에 따라서 이전의 로드를 오버라이드(override)한다.
재배열 버퍼 및 리타이어먼트 윈도우(1332) 내에서 나타나는 브랜치 예측 또는 예외의 이벤트에서, 롤백 이벤트가 트리거된다. 위에서 설명한 바와 같이, 롤백 이벤트 시에, 통합 섀도우 레지스터 파일(1301)은 그의 마지막 커밋티드 포인트로 롤백하고 추측 리타이어먼트 메모리 버퍼(1342)는 플러시(flush)될 것이다.
도 14는 본 발명의 한 실시 예에 따른 듀얼 스코프 이용을 포함하는, 제2 이용 모델의 다이어그램(1400)을 도시하고 있다. 위에서 설명된 바와 같이, 이러한 이용 모델은 2개의 스레드를 프로세서 내로 인출하는데 적용되고, 여기서 하나의 스레드는 추측 상태(speculative state)로 실행되고, 다른 스레드는 비-추측 상태(non-speculative state)로 실행된다. 이러한 이용 모델에서, 양 스코프는 동시에 머신 내로 인출되어 이 머신에 제공된다.
다이어그램(1400)에 도시된 바와 같이, 2개의 스코프/트레이스들(1401 및 1402)이 머신 내로 인출되었다. 이 예에서, 스코프/트레이스(1401)는 현재 비-추측 스코프/트레이스이다. 스코프/트레이스(1402)는 새로운 추측 스코프/트레이스이다. 아키텍처(1300)는 추측 및 스크래치 상태를 인에이블하여 2개의 스레드가 실행을 위해 추측 및 스크래치 상태를 이용할 수 있게 된다. 하나의 스레드(예로, 1401)는 비-추측 스코프로 실행되고 다른 스레드(예로, 1402)는 추측 스코프를 이용한다. 양 스코프들은 동시에 머신 내로 인출되어 제공될 수 있으며, 여기서 각 스코프는 서로 다른 각각의 모드로 설정되어 있다. 제1 스코프는 비-추측이고 다른 스코프는 추측이다. 그래서, 제1 스코프는 CR/CM 모드로 실행되고 다른 스코프는 SR/SM 모드로 실행된다. CR/CM 모드에서, 커밋티드 레지스터는 판독되어 기록되고, 메모리 기록은 메모리로 간다. SR/SM 모드에서, 레지스터 기록은 SSSR로 가고, 레지스터 판독은 최근 기록으로부터 나오는 한편, 메모리는 리타이어먼트 메모리 버퍼(SMB)를 기록한다.
하나의 예는 정렬(ordered)되어 있는 현재 스코프(예로, 1401) 및 추측인 차기 스코프(예로, 1402)이다. 양자는 차기 스코프가 현재 스코프 이후에 인출되기 때문에 종속성이 존중될 때 머신에서 실행될 수 있다. 예를 들어, 스코프(1401)에 있어서, "SSSR을 CR에 커밋" 시에, 이 포인트까지 레지스터들과 메모리는 CR 모드에 있는 한편 코드는 CR/CM 모드로 실행된다. 스코프(1402)에서, 코드는 SR 및 SM 모드로 실행되고 예외가 생기면 롤백될 수 있다. 이러한 식으로, 양 스코프들은 머신에서 동시에 실행되지만 각각은 서로 다른 모드로 실행되며 이에 따라서 레지스터들을 판독하고 기록한다.
도 15는 본 발명의 한 실시 예에 따라, 트랜션트 컨텍스트로부터 복귀시에 이전의 컨텍스트를 세이브하고 복원할 필요가 없는, 트랜션트 컨텍스트 스위칭을 포함하는 제3 이용 모델의 다이어그램(1500)을 도시하고 있다. 위에서 설명한 바와 같이, 이러한 이용 모델은 다양한 이유로 나타날 수 있는 컨텍스트 스위치에 적용된다. 그러한 하나의 이유는, 예를 들어, 예외 핸들링 컨텍스트를 통한 예외들의 정밀 핸들링일 수 있다.
제3 이용 모델에서 머신은 번역된 코드를 실행 중이고 또한 컨텍스트 스위치(예로, 번역된 코드 내부의 예외 또는 후속 코드에 대한 번역이 필요한 경우)를 조우하는 경우가 발생한다. 현재 스코프(예로, 예외의 이전)에서, SSSR 및 SMB는 아직 그들의 추측 상태를 게스트 아키텍처 상태에 커밋하지 않았다. 현재 상태는 SR/SM 모드로 실행되고 있다. 예외가 나타날 때, 머신은 예외를 정밀하게 다루기 위해서 예외 핸들러(예로, 변환기)로 스위치한다. 롤백이 삽입되면 레지스터 상태가 CR로 롤백되고 SMB는 플러시된다. 변환기 코드는 SR/CM 모드로 실행된다. 변환기 코드의 실행 동안에, SMB는 커밋 이벤트를 기다리지 않고 그의 콘텐츠를 메모리에 리타이어한다. 레지스터들은 CR을 갱신하는 일 없이 SSSR에 기록된다. 후속해서, 변환기가 종료될 때 실행중인 변환된 코드로 다시 스위칭되기 전에, 변환기는 SSSR를 롤백한다(예로, SSSR은 CR로 롤백된다). 이러한 프로세스 동안, 마지막 커밋된 레지스터 상태는 CR에 있다.
이는 이전 스코프/트레이스(1501)가 SSSR로부터 CR로 커밋한 경우의 다이어그램(1500)에 도시되어 있다. 현재 스코프/트레이스(1502)는 추측이다. 레지스터와 메모리 및 이 스코프는 추측이고 실행은 SR/SM 모드 하에서 나타난다. 이 예에서, 예외는 스코프(1502)에서 나타나고, 코드는 번역되기 전에 본래의 순서로 재실행되어야 한다. 이때, SSSR은 롤백되고 SMB는 플러시된다. 이후 JIT 코드(1503)가 실행된다. JIT 코드는 SSSR을 스코프(1501)의 마지막으로 롤백하고 SMB를 플러시한다. JIT의 실행은 SC/CM 모드 하에 있다. JIT가 종료되면, SSSR은 CR로 롤백되고 이후 현재 스코프/트레이스(1504)가 CR/CM 모드에서 본래 번역 순서로 재실행된다. 이러한 식으로, 예외는 정확한 현재 순서로 정밀하게 처리된다.
도 16은 본 발명의 한 실시 예에 따른, 후속 코드에 대한 번역이 필요하기 때문에 명령 시퀀스에 예외가 있는 경우를 보여주는 다이어그램(1600)을 도시하고 있다. 다이어그램(1600)에 도시되어 있는 바와 같이, 이전 스코프/트레이스(1601)는 번역되지 않은 목적지로의 원거리 점프(far jump)로 종결된다. 원거리 점프 목적지로 점프하기 전에, SSSR은 CR에 커밋된다. 이후 JIT 코드(1602)는 원거리 점프 목적지에 있는 게스트 명령들을 번역하기 위해(예로, 네이티브 명령들의 새로운 트레이스를 구축하기 위해) 실행된다. JIT의 실행은 SR/CM 모드 하에 있다. JIT 실행의 종료시, 레지스터 상태는 SSSR로부터 CR로 롤백되고, JIT에 의해서 번역된 새로운 스코프/트레이스(1603)가 실행을 시작한다. 새로운 스코프/트레이스는 SR/SM 모드에서 이전 스코프/트레이스(1601)의 마지막 커밋된 포인트로부터 실행을 계속한다.
도 17은 본 발명의 한 실시 예에 따른, 트랜션트 컨텍스트(transient context)로부터의 복귀시에 이전 컨텍스트를 세이브하고 복원할 필요없는 트랜션트 컨텍스트 스위칭을 포함하는 제4 이용 모델의 다이어그램(1700)을 도시하고 있다. 위에서 설명한 바와 같이, 이 이용 모델은 다양한 이유로 나타날 수 있는 컨텍스트 스위치들에 적용된다. 그러한 하나의 이유는, 예를 들어, 예외 핸들링 컨텍스트를 통한 처리 입력 또는 출력일 수 있다.
다이어그램(1700)은 CR/CM 모드 하에서 실행되는 이전 스코프/트레이스(1701)가 함수(function) F1의 호출로 종료되는 경우를 도시하고 있다. 이 포인트까지의 레지스터 상태는 SSSR로부터 CR에 커밋된다. 함수 F1 스코프/트레이스(1702)는 이후 SR/CM 모드 하에서 추측식으로(speculatively) 실행을 시작한다. 이후 함수 F1은 메인 스코프/트레이스(1703)로 복귀하는 것으로 종료된다. 이때, 레지스터 상태는 SSSR로부터 CR로 롤백된다. 메인 스코프/트레이스(1703)는 CR/CM 모드로 실행을 재개한다.
도 18은 본 발명의 한 실시 예에 따른 예시적인 마이크로프로세서 파이프라인(1800)의 다이어그램을 도시하고 있다. 마이크로프로세서 파이프라인(1800)은, 위에 설명한 바와 같이, 하드웨어 가속 변환 프로세스의 기능을 구현하는 하드웨어 변환 가속기(1810)를 포함하고 있다. 도 18의 실시 예에서, 하드웨어 변환 가속기(1810)는 인출 모듈(1801)에 연결되어 있고 이 모듈은 뒤이어 디코드 모듈(1802), 할당 모듈(1803), 디스패치 모듈(1804), 실행 모듈(1805) 및 리타이어먼트 모듈(1806)에 연결되어 있다. 유의해야 할 점은 마이크로프로세서 파이프라인(1800)은 위에 설명한 본 발명의 실시 예들의 기능을 구현하는 파이프라인의 한 예에 불과하다는 것이다. 이 기술 분야에 숙련된 자는 위에 설명한 디코드 모듈의 기능을 포함하는 다른 마이크로프로세서 파이프라인들을 구현할 수 있다는 것을 이해할 것이다.
이전의 설명은 설명의 목적을 위해서 특정 실시 예를 참조하여 이루어졌다. 그러나, 위에 예시된 논의들은 배타적인 것도 아니고 본 발명을 공개된 정밀한 형태에 한정하고자 하는 것도 아니다. 위의 공개 내용을 고려하여 많은 수정 및 변형이 가능하다. 실시 예들은 본 발명의 원리 및 그의 실제 응용을 잘 설명하기 위해서 선택되어 설명되었으므로, 이 기술 분야에 숙련된 자들이면 고려하고 있는 특정 이용에 적합하게 본 발명과 다양한 수정을 갖는 다양한 실시 예를 잘 이용할 수 있을 것이다.

Claims (20)

  1. 프로세서를 위한 명령들을 번역하기 위한 방법으로서,
    다수의 게스트 브랜치 명령(guest branch instructions)을 포함하는 복수의 게스트 명령을 액세스하는 단계;
    상기 복수의 게스트 명령을 게스트 명령 블록으로 어셈블하는 단계;
    상기 게스트 명령 블록을 대응하는 네이티브 변환 블록(native conversion block)으로 번역하는 단계;
    상기 네이티브 변환 블록을 네이티브 캐시에 저장하는 단계;
    상기 게스트 명령 블록과 대응하는 네이티브 변환 블록과의 매핑을 변환 룩 어사이드 버퍼(conversion look aside buffer)에 저장하는 단계;
    게스트 명령에 대한 후속 요청이 있을 때, 히트(hit)가 발생하였는지 여부를 결정하기 위하여 상기 변환 룩 어사이드 버퍼를 인덱싱(indexing)하는 단계 - 상기 매핑은 상기 게스트 명령이 상기 네이티브 캐시 내에 대응하는 변환된 네이티브 명령을 갖고 있는지를 나타냄 - ; 및
    상기 히트에 응답하여 실행을 위해 상기 변환된 네이티브 명령을 포워드하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 프로세서에 무관하게 상기 복수의 게스트 명령을 하드웨어 인출 로직 컴포넌트(hardware fetch logic component)가 인출하는 방법.
  3. 제1항에 있어서,
    상기 변환 룩 어사이드 버퍼는 캐시를 포함하고, 상기 캐시는 내부에 저장되어 있는 게스트 명령 블록들과 대응하는 네이티브 변환 블록들과의 가장 빈번하게 조우하는 매핑들을 유지하기 위해 교체 정책(replacement policy)을 이용하는 방법.
  4. 제1항에 있어서,
    변환 버퍼가 시스템 메모리 내에 유지되고 상기 변환 룩 어사이드 버퍼와 상기 변환 버퍼 간에 캐시 코히어런시가 유지되는 방법.
  5. 제4항에 있어서,
    상기 변환 버퍼는 상기 변환 룩 어사이드 버퍼보다 크고, 상기 변환 버퍼와 상기 변환 룩 어사이드 버퍼 간의 코히어런시를 유지하기 위해 재기록 정책(write back policy)이 이용되는 방법.
  6. 제1항에 있어서,
    상기 변환 룩 어사이드 버퍼는 상기 프로세서의 파이프라인에 연결된 고속 저 레이턴시 캐시 메모리로서 구현되는 방법.
  7. 프로세서를 위한 명령들을 번역하기 위한 시스템으로서,
    다수의 게스트 브랜치 명령을 포함하는 복수의 게스트 명령을 액세스하기 위한 게스트 인출 로직 컴포넌트;
    상기 복수의 게스트 명령을 게스트 명령 블록으로 어셈블하기 위한 게스트 인출 버퍼;
    상기 게스트 명령 블록을 대응하는 네이티브 변환 블록으로 번역하기 위한 복수의 변환 테이블;
    상기 네이티브 변환 블록을 저장하기 위한 네이티브 캐시;
    상기 게스트 명령 블록과 대응하는 네이티브 변환 블록과의 매핑을 변환 룩 어사이드 버퍼에 저장하기 위한 변환 룩 어사이드 버퍼
    를 포함하고,
    게스트 명령에 대한 후속 요청이 있을 때, 히트가 발생하였는지 여부를 결정하기 위하여 상기 변환 룩 어사이드 버퍼를 인덱싱하고,
    상기 매핑은 상기 게스트 명령이 상기 네이티브 캐시 내에 대응하는 변환된 네이티브 명령을 갖고 있는지를 나타내고, 상기 변환된 네이티브 명령은 상기 히트에 응답하여 실행을 위해 포워드되는 시스템.
  8. 제7항에 있어서,
    상기 프로세서에 무관하게 상기 복수의 게스트 명령을 하드웨어 인출 로직 컴포넌트가 인출하는 시스템.
  9. 제7항에 있어서,
    상기 변환 룩 어사이드 버퍼는 캐시를 포함하고, 상기 캐시는 내부에 저장되어 있는 가장 빈번하게 조우하는 매칭들을 유지하기 위해 교체 정책을 이용하는 시스템.
  10. 제7항에 있어서,
    변환 버퍼가 시스템 메모리 내에 유지되고 상기 변환 룩 어사이드 버퍼와 상기 변환 버퍼 간에 캐시 코히어런시가 유지되는 시스템.
  11. 제10항에 있어서,
    상기 변환 버퍼는 상기 변환 룩 어사이드 버퍼보다 크고, 상기 변환 버퍼와 상기 변환 룩 어사이드 버퍼 간의 코히어런시를 유지하기 위해 재기록 정책이 이용되는 시스템.
  12. 제7항에 있어서,
    상기 변환 룩 어사이드 버퍼는 상기 프로세서의 파이프라인에 연결된 고속 저 레이턴시 캐시 메모리로서 구현되는 시스템.
  13. 명령을 번역하는 방법을 구현하는 마이크로프로세서로서,
    상기 마이크로프로세서는:
    마이크로프로세서 파이프라인;
    상기 마이크로프로세서 파이프라인에 연결된 하드웨어 가속기 모듈
    을 포함하고,
    상기 하드웨어 가속기 모듈은:
    다수의 게스트 브랜치 명령을 포함하는 복수의 게스트 명령을 액세스하기 위한 게스트 인출 로직 컴포넌트;
    상기 복수의 게스트 명령을 게스트 명령 블록으로 어셈블하기 위한 게스트 인출 버퍼;
    상기 게스트 명령 블록을 대응하는 네이티브 변환 블록으로 번역하기 위한 복수의 변환 테이블;
    상기 네이티브 변환 블록을 저장하기 위한 네이티브 캐시;
    상기 게스트 명령 블록과 대응하는 네이티브 변환 블록과의 매핑을 변환 룩 어사이드 버퍼에 저장하기 위한 변환 룩 어사이드 버퍼
    를 더 포함하고,
    게스트 명령에 대한 후속 요청이 있을 때, 히트가 발생하였는지 여부를 결정하기 위하여 상기 변환 룩 어사이드 버퍼를 인덱싱하고,
    상기 매핑은 상기 게스트 명령이 상기 네이티브 캐시 내에 대응하는 변환된 네이티브 명령을 갖고 있는지를 나타내고, 상기 변환된 네이티브 명령은 상기 히트에 응답하여 실행을 위해 포워드되는 마이크로프로세서.
  14. 제13항에 있어서,
    프로세서에 무관하게 상기 복수의 게스트 명령을 하드웨어 인출 로직 컴포넌트가 인출하는 마이크로프로세서.
  15. 제13항에 있어서,
    상기 변환 룩 어사이드 버퍼는 캐시를 포함하고, 상기 캐시는 내부에 저장되어 있는 가장 빈번하게 조우하는 네이티브 변환 블록들을 유지하기 위해 교체 정책을 이용하는 마이크로프로세서.
  16. 제13항에 있어서,
    변환 버퍼가 시스템 메모리 내에 유지되고 상기 변환 룩 어사이드 버퍼와 상기 변환 버퍼 간에 캐시 코히어런시가 유지되는 마이크로프로세서.
  17. 제16항에 있어서,
    상기 변환 버퍼는 상기 변환 룩 어사이드 버퍼보다 크고, 상기 변환 버퍼와 상기 변환 룩 어사이드 버퍼 간의 코히어런시를 유지하기 위해 재기록 정책이 이용되는 마이크로프로세서.
  18. 제13항에 있어서,
    상기 변환 룩 어사이드 버퍼는 상기 프로세서의 파이프라인에 연결된 고속 저 레이턴시 캐시 메모리로서 구현되는 마이크로프로세서.
  19. 제13항에 있어서,
    상기 복수의 게스트 명령은 Java, JavaScript, x86, MIPS 또는 SPARC를 포함하는 방법.
  20. 제19항에 있어서,
    상기 마이크로프로세서 가상 명령 세트 프로세서는 Java, JavaScript, x86, MIPS 또는 SPARC를 포함하는 상기 게스트 명령 중 하나로 기능할 수 있고 후속해서 Java, JavaScript, x86, MIPS 또는 SPARC를 포함하는 상기 게스트 명령 중 다른 하나로 기능할 수 있는 방법.
KR1020137022671A 2011-01-27 2012-01-25 프로세서의 변환 룩 어사이드 버퍼를 이용하는 게스트 명령-네이티브 명령 레인지 기반 매핑 KR101612594B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201161436962P 2011-01-27 2011-01-27
US61/436,962 2011-01-27
PCT/US2012/022538 WO2012103209A2 (en) 2011-01-27 2012-01-25 Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor

Publications (2)

Publication Number Publication Date
KR20140006926A true KR20140006926A (ko) 2014-01-16
KR101612594B1 KR101612594B1 (ko) 2016-04-14

Family

ID=46578369

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137022671A KR101612594B1 (ko) 2011-01-27 2012-01-25 프로세서의 변환 룩 어사이드 버퍼를 이용하는 게스트 명령-네이티브 명령 레인지 기반 매핑

Country Status (6)

Country Link
US (2) US9710387B2 (ko)
EP (1) EP2668565B1 (ko)
KR (1) KR101612594B1 (ko)
CN (2) CN103620547B (ko)
TW (1) TWI529616B (ko)
WO (1) WO2012103209A2 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170024110A (ko) * 2014-07-25 2017-03-06 소프트 머신즈, 인크. 변환 룩 어사이드 버퍼를 사용한 명령어 집합의 애그노스틱 런타임 아키텍처 구현
KR20170028407A (ko) * 2014-07-25 2017-03-13 인텔 코포레이션 런 어헤드 런 타임 게스트 명령어 변환/디코딩 프로세스 및 게스트 코드가 명령어 시퀀스에서 게스트 분기의 타겟으로부터 프리페치되는 프리페칭 프로세스를 구현하는 시스템 변환기
US11281481B2 (en) 2014-07-25 2022-03-22 Intel Corporation Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8949106B2 (en) * 2009-09-18 2015-02-03 International Business Machines Corporation Just in time compiler in spatially aware emulation of a guest computer instruction set
WO2012103373A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
WO2012103209A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
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
US9384001B2 (en) 2012-08-15 2016-07-05 Nvidia Corporation Custom chaining stubs for instruction code translation
US20140189310A1 (en) 2012-12-27 2014-07-03 Nvidia Corporation Fault detection in instruction translations
US10108424B2 (en) 2013-03-14 2018-10-23 Nvidia Corporation Profiling code portions to generate translations
EP2972798B1 (en) 2013-03-15 2020-06-17 Intel Corporation Method and apparatus for guest return address stack emulation supporting speculation
US9627038B2 (en) 2013-03-15 2017-04-18 Intel Corporation Multiport memory cell having improved density area
US9606935B2 (en) 2013-03-15 2017-03-28 Intel Corporation Method and apparatus for preventing non-temporal entries from polluting small structures using a transient buffer
US10467010B2 (en) 2013-03-15 2019-11-05 Intel Corporation Method and apparatus for nearest potential store tagging
US9436476B2 (en) 2013-03-15 2016-09-06 Soft Machines Inc. Method and apparatus for sorting elements in hardware structures
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US20140281116A1 (en) 2013-03-15 2014-09-18 Soft Machines, Inc. Method and Apparatus to Speed up the Load Access and Data Return Speed Path Using Early Lower Address Bits
US9582322B2 (en) 2013-03-15 2017-02-28 Soft Machines Inc. Method and apparatus to avoid deadlock during instruction scheduling using dynamic port remapping
US10152327B2 (en) 2013-03-15 2018-12-11 Intel Corporation Apparatus for gating a load operation based on entries of a prediction table
CN106796506B (zh) * 2014-05-12 2019-09-27 英特尔公司 用于向自修改代码提供硬件支持的方法和装置
EP2997478B1 (en) * 2014-07-21 2019-03-13 VIA Alliance Semiconductor Co., Ltd. Efficient address translation caching in processor that supports large number of different address spaces
US20160026484A1 (en) * 2014-07-25 2016-01-28 Soft Machines, Inc. System converter that executes a just in time optimizer for executing code from a guest image
US9733909B2 (en) 2014-07-25 2017-08-15 Intel Corporation System converter that implements a reordering process through JIT (just in time) optimization that ensures loads do not dispatch ahead of other loads that are to the same address
US20160026486A1 (en) * 2014-07-25 2016-01-28 Soft Machines, Inc. An allocation and issue stage for reordering a microinstruction sequence into an optimized microinstruction sequence to implement an instruction set agnostic runtime architecture
US10423423B2 (en) * 2015-09-29 2019-09-24 International Business Machines Corporation Efficiently managing speculative finish tracking and error handling for load instructions
WO2017077502A1 (en) 2015-11-04 2017-05-11 Green Cache AB Systems and methods for implementing coherent memory in a multiprocessor system
GB2544315B (en) * 2015-11-12 2018-02-14 Advanced Risc Mach Ltd An apparatus and method for controlling use of bounded pointers
US10191745B2 (en) * 2017-03-31 2019-01-29 Intel Corporation Optimized call-return and binary translation
JP2019095952A (ja) * 2017-11-21 2019-06-20 ソニーセミコンダクタソリューションズ株式会社 プロセッサ、情報処理装置および処理方法

Family Cites Families (124)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5053952A (en) 1987-06-05 1991-10-01 Wisc Technologies, Inc. Stack-memory-based writable instruction set computer having a single data bus
US5438668A (en) 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
AU6701594A (en) * 1993-05-07 1994-12-12 Apple Computer, Inc. Method for decoding sequences of guest instructions for a host computer
JPH07271672A (ja) 1994-03-30 1995-10-20 Toshiba Corp マルチウェイセットアソシアティブキャッシュシステム
EP1278125A2 (en) 1994-10-14 2003-01-22 MIPS Technologies, Inc. Indexing and multiplexing of interleaved cache memory arrays
US5649136A (en) 1995-02-14 1997-07-15 Hal Computer Systems, Inc. Processor structure and method for maintaining and restoring precise state at any instruction boundary
US5742802A (en) 1996-02-16 1998-04-21 International Business Machines Corporation Method and system for efficiently mapping guest instruction in an emulation assist unit
US5784638A (en) 1996-02-22 1998-07-21 International Business Machines Corporation Computer system supporting control transfers between two architectures
US5892934A (en) 1996-04-02 1999-04-06 Advanced Micro Devices, Inc. Microprocessor configured to detect a branch to a DSP routine and to direct a DSP to execute said routine
US5893121A (en) 1997-04-23 1999-04-06 Sun Microsystems, Inc. System and method for swapping blocks of tagged stack entries between a tagged stack cache and an untagged main memory storage
US6142682A (en) 1997-06-13 2000-11-07 Telefonaktiebolaget Lm Ericsson Simulation of computer processor
US5953520A (en) 1997-09-22 1999-09-14 International Business Machines Corporation Address translation buffer for data processing system emulation mode
US5995743A (en) 1997-09-22 1999-11-30 International Business Machines Corporation Method and system for interrupt handling during emulation in a data processing system
US5870575A (en) 1997-09-22 1999-02-09 International Business Machines Corporation Indirect unconditional branches in data processing system emulation mode
US5956495A (en) 1997-09-22 1999-09-21 International Business Machines Corporation Method and system for processing branch instructions during emulation in a data processing system
US6202127B1 (en) 1997-11-26 2001-03-13 Compaq Computer Corporation Apparatus for spatial and temporal sampling in a computer memory system
US6138225A (en) 1997-12-24 2000-10-24 Intel Corporation Address translation system having first and second translation look aside buffers
JP3246438B2 (ja) 1998-04-01 2002-01-15 日本電気株式会社 可変ターゲットコンパイル処理方法、その処理装置、そのプログラムの記憶媒体および変換テーブルの記憶媒体
JPH11296381A (ja) 1998-04-08 1999-10-29 Matsushita Electric Ind Co Ltd 仮想マシン及びコンパイラ
US6205545B1 (en) 1998-04-30 2001-03-20 Hewlett-Packard Company Method and apparatus for using static branch predictions hints with dynamically translated code traces to improve performance
US20020147969A1 (en) 1998-10-21 2002-10-10 Richard A. Lethin Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
GB9825102D0 (en) 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6332215B1 (en) 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US6460114B1 (en) 1999-07-29 2002-10-01 Micron Technology, Inc. Storing a flushed cache line in a memory buffer of a controller
US6928641B1 (en) 1999-10-08 2005-08-09 Texas Instruments Incorporated Method and system for far branch and call instructions
US6609194B1 (en) * 1999-11-12 2003-08-19 Ip-First, Llc Apparatus for performing branch target address calculation based on branch type
US7418580B1 (en) 1999-12-02 2008-08-26 International Business Machines Corporation Dynamic object-level code transaction for improved performance of a computer
JP3556556B2 (ja) * 2000-02-08 2004-08-18 株式会社東芝 命令コード変換装置及び情報処理システム
US20020066081A1 (en) 2000-02-09 2002-05-30 Evelyn Duesterwald Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator
US20010037492A1 (en) 2000-03-16 2001-11-01 Holzmann Gerard J. Method and apparatus for automatically extracting verification models
JP2001273138A (ja) 2000-03-24 2001-10-05 Fujitsu Ltd プログラム変換装置および方法
US20020100022A1 (en) 2000-05-08 2002-07-25 Holzmann Gerard J. Method and apparatus for automatic verification of properties of a concurrent software system
US6615300B1 (en) 2000-06-19 2003-09-02 Transmeta Corporation Fast look-up of indirect branch destination in a dynamic translation system
US7107437B1 (en) 2000-06-30 2006-09-12 Intel Corporation Branch target buffer (BTB) including a speculative BTB (SBTB) and an architectural BTB (ABTB)
US6711672B1 (en) 2000-09-22 2004-03-23 Vmware, Inc. Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers
GB2367651B (en) 2000-10-05 2004-12-29 Advanced Risc Mach Ltd Hardware instruction translation within a processor pipeline
JP2002215387A (ja) 2001-01-22 2002-08-02 Mitsubishi Electric Corp 命令トランスレータを備えたデータ処理装置およびメモリインタフェース装置
US7487330B2 (en) 2001-05-02 2009-02-03 International Business Machines Corporations Method and apparatus for transferring control in a computer system with dynamic compilation capability
US7165169B2 (en) 2001-05-04 2007-01-16 Ip-First, Llc Speculative branch target address cache with selective override by secondary predictor based on branch instruction type
US6826681B2 (en) 2001-06-18 2004-11-30 Mips Technologies, Inc. Instruction specified register value saving in allocated caller stack or not yet allocated callee stack
US6898699B2 (en) 2001-12-21 2005-05-24 Intel Corporation Return address stack including speculative return address buffer with back pointers
US7577944B2 (en) 2002-03-18 2009-08-18 Hewlett-Packard Development Company, L.P. Unbundling, translation and rebundling of instruction bundles in an instruction stream
WO2004027600A1 (ja) 2002-08-30 2004-04-01 Renesas Technology Corp. データ処理装置及びicカード
US20040128658A1 (en) 2002-12-27 2004-07-01 Guei-Yuan Lueh Exception handling with stack trace cache
US7203932B1 (en) 2002-12-30 2007-04-10 Transmeta Corporation Method and system for using idiom recognition during a software translation process
US6810473B2 (en) * 2003-01-06 2004-10-26 Sun Microsystems, Inc. Replacement algorithm for a replicated fully associative translation look-aside buffer
US7191291B2 (en) 2003-01-16 2007-03-13 Ip-First, Llc Microprocessor with variable latency stack cache
JP3896087B2 (ja) 2003-01-28 2007-03-22 松下電器産業株式会社 コンパイラ装置およびコンパイル方法
US7069413B1 (en) 2003-01-29 2006-06-27 Vmware, Inc. Method and system for performing virtual to physical address translations in a virtual machine monitor
US7278030B1 (en) 2003-03-03 2007-10-02 Vmware, Inc. Virtualization system for computers having multiple protection mechanisms
US7111145B1 (en) 2003-03-25 2006-09-19 Vmware, Inc. TLB miss fault handler and method for accessing multiple page tables
GB0316531D0 (en) 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for performing native binding
US7290253B1 (en) 2003-09-30 2007-10-30 Vmware, Inc. Prediction mechanism for subroutine returns in binary translation sub-systems of computers
US7391933B2 (en) * 2003-10-30 2008-06-24 Samsung Electronics Co., Ltd. Method and apparatus for image interpolation based on adaptive polyphase filters
US7590982B1 (en) 2003-12-17 2009-09-15 Vmware, Inc. System and method for virtualizing processor and interrupt priorities
US7237067B2 (en) 2004-04-22 2007-06-26 Hewlett-Packard Development Company, L.P. Managing a multi-way associative cache
JP4520790B2 (ja) 2004-07-30 2010-08-11 富士通株式会社 情報処理装置およびソフトウェアプリフェッチ制御方法
US8443171B2 (en) 2004-07-30 2013-05-14 Hewlett-Packard Development Company, L.P. Run-time updating of prediction hint instructions
US7571090B2 (en) 2004-09-30 2009-08-04 Intel Corporation Emulating a host architecture in guest firmware
US7653132B2 (en) * 2004-12-21 2010-01-26 Stmicroelectronics, Inc. Method and system for fast implementation of subpixel interpolation
US7428626B2 (en) * 2005-03-08 2008-09-23 Microsoft Corporation Method and system for a second level address translation in a virtual machine environment
US8370819B2 (en) 2005-03-25 2013-02-05 Microsoft Corporation Mechanism to store information describing a virtual machine in a virtual disk image
US7383374B2 (en) 2005-03-31 2008-06-03 Intel Corporation Method and apparatus for managing virtual addresses
US7734895B1 (en) * 2005-04-28 2010-06-08 Massachusetts Institute Of Technology Configuring sets of processor cores for processing instructions
TWI306215B (en) 2005-04-29 2009-02-11 Ind Tech Res Inst Method and corresponding apparatus for compiling high-level languages into specific processor architectures
US20070006178A1 (en) 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
US7703088B2 (en) 2005-09-30 2010-04-20 Intel Corporation Compressing “warm” code in a dynamic binary translation environment
US9003421B2 (en) * 2005-11-28 2015-04-07 Intel Corporation Acceleration threads on idle OS-visible thread execution units
TWI287801B (en) 2006-01-13 2007-10-01 Optimum Care Int Tech Inc Memory module having address transforming function and method for controlling memory
WO2007115425A1 (en) 2006-03-30 2007-10-18 Intel Corporation Method and apparatus for supporting heterogeneous virtualization
JP5010164B2 (ja) 2006-03-31 2012-08-29 株式会社日立製作所 サーバ装置及び仮想計算機の制御プログラム
US7568189B2 (en) 2006-05-03 2009-07-28 Sony Computer Entertainment Inc. Code translation and pipeline optimization
US7752417B2 (en) * 2006-06-05 2010-07-06 Oracle America, Inc. Dynamic selection of memory virtualization techniques
US7478228B2 (en) 2006-08-31 2009-01-13 Qualcomm Incorporated Apparatus for generating return address predictions for implicit and explicit subroutine calls
US20080127142A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Compiling executable code into a less-trusted address space
US7617493B2 (en) 2007-01-23 2009-11-10 International Business Machines Corporation Defining memory indifferent trace handles
US8688920B2 (en) 2007-05-14 2014-04-01 International Business Machines Corporation Computing system with guest code support of transactional memory
JP2008299795A (ja) 2007-06-04 2008-12-11 Nec Electronics Corp 分岐予測制御装置及びその方法
US8205194B2 (en) 2007-06-29 2012-06-19 Microsoft Corporation Updating offline virtual machines or VM images
KR101498673B1 (ko) 2007-08-14 2015-03-09 삼성전자주식회사 반도체 드라이브, 그것의 데이터 저장 방법, 그리고 그것을포함한 컴퓨팅 시스템
JP2009087028A (ja) * 2007-09-28 2009-04-23 Toshiba Corp メモリシステム及びメモリの読出し方法並びにプログラム
US7844954B2 (en) 2007-11-06 2010-11-30 Vmware, Inc. Using branch instruction counts to facilitate replay of virtual machine instruction execution
JP5091655B2 (ja) * 2007-12-21 2012-12-05 株式会社日立製作所 計算機仮想化装置、そのプログラム、及びその方法
US8041922B2 (en) 2008-01-11 2011-10-18 International Business Machines Corporation Enhanced dynamic address translation with load real address function
US8151085B2 (en) 2008-01-17 2012-04-03 International Business Machines Corporation Method for address translation in virtual machines
US8307360B2 (en) 2008-01-22 2012-11-06 Advanced Micro Devices, Inc. Caching binary translations for virtual machine guest
US8819647B2 (en) 2008-01-25 2014-08-26 International Business Machines Corporation Performance improvements for nested virtual machines
US8832682B2 (en) 2008-03-28 2014-09-09 Vmware, Inc. Trace collection for a virtual machine
US8086822B2 (en) * 2008-05-30 2011-12-27 Vmware, Inc. In-place shadow tables for virtualization
US8275971B2 (en) 2008-08-27 2012-09-25 International Business Machines Corporation Method and apparatus for managing software controlled cache of translating the physical memory access of a virtual machine between different levels of translation entities
US8473930B2 (en) 2008-11-05 2013-06-25 Oracle America, Inc. Handling signals and exceptions in a dynamic translation environment
CN101751345B (zh) * 2008-12-10 2012-04-11 国际商业机器公司 在主机中运行客户机的程序的模拟器和模拟方法
US8959277B2 (en) 2008-12-12 2015-02-17 Oracle America, Inc. Facilitating gated stores without data bypass
US8078854B2 (en) 2008-12-12 2011-12-13 Oracle America, Inc. Using register rename maps to facilitate precise exception semantics
US8561040B2 (en) 2009-03-10 2013-10-15 Oracle America, Inc. One-pass compilation of virtual instructions
US8832354B2 (en) 2009-03-25 2014-09-09 Apple Inc. Use of host system resources by memory controller
US8140758B2 (en) 2009-04-24 2012-03-20 International Business Machines Corporation Data reorganization in non-uniform cache access caches
US8799879B2 (en) * 2009-06-30 2014-08-05 Oracle America, Inc. Method and apparatus for protecting translated code in a virtual machine
US8386745B2 (en) 2009-07-24 2013-02-26 Advanced Micro Devices, Inc. I/O memory management unit including multilevel address translation for I/O and computation offload
US8301434B2 (en) 2009-09-18 2012-10-30 International Buisness Machines Corporation Host cell spatially aware emulation of a guest wild branch
US8428930B2 (en) 2009-09-18 2013-04-23 International Business Machines Corporation Page mapped spatially aware emulation of a computer instruction set
US9158566B2 (en) 2009-09-18 2015-10-13 International Business Machines Corporation Page mapped spatially aware emulation of computer instruction set
US8612731B2 (en) 2009-11-06 2013-12-17 International Business Machines Corporation Branch target buffer for emulation environments
US8364461B2 (en) 2009-11-09 2013-01-29 International Business Machines Corporation Reusing invalidated traces in a system emulator
WO2011068699A1 (en) 2009-12-04 2011-06-09 Marvell World Trade Ltd. Virtualization of storage devices
KR101247259B1 (ko) 2009-12-17 2013-04-01 한국전자통신연구원 가상화 장치 및 그 처리 방법
US8438334B2 (en) 2009-12-22 2013-05-07 International Business Machines Corporation Hybrid storage subsystem with mixed placement of file contents
US8775153B2 (en) * 2009-12-23 2014-07-08 Intel Corporation Transitioning from source instruction set architecture (ISA) code to translated code in a partial emulation environment
JP2011198091A (ja) 2010-03-19 2011-10-06 Toshiba Corp 仮想アドレスキャッシュメモリ、プロセッサ及びマルチプロセッサシステム
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103209A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
WO2012103373A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
US9495183B2 (en) 2011-05-16 2016-11-15 Microsoft Technology Licensing, Llc Instruction set emulation for guest operating systems
US9354886B2 (en) 2011-11-28 2016-05-31 Apple Inc. Maintaining the integrity of an execution return address stack
US9280347B2 (en) 2012-03-15 2016-03-08 International Business Machines Corporation Transforming non-contiguous instruction specifiers to contiguous instruction specifiers
US10656945B2 (en) 2012-06-15 2020-05-19 International Business Machines Corporation Next instruction access intent instruction for indicating usage of a storage operand by one or more instructions subsequent to a next sequential instruction
US8819648B2 (en) 2012-07-20 2014-08-26 International Business Machines Corporation Control flow management for execution of dynamically translated non-native code in a virtual hosting environment
US20140258696A1 (en) 2013-03-05 2014-09-11 Qualcomm Incorporated Strided target address predictor (stap) for indirect branches
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
EP2972798B1 (en) 2013-03-15 2020-06-17 Intel Corporation Method and apparatus for guest return address stack emulation supporting speculation

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170024110A (ko) * 2014-07-25 2017-03-06 소프트 머신즈, 인크. 변환 룩 어사이드 버퍼를 사용한 명령어 집합의 애그노스틱 런타임 아키텍처 구현
KR20170028407A (ko) * 2014-07-25 2017-03-13 인텔 코포레이션 런 어헤드 런 타임 게스트 명령어 변환/디코딩 프로세스 및 게스트 코드가 명령어 시퀀스에서 게스트 분기의 타겟으로부터 프리페치되는 프리페칭 프로세스를 구현하는 시스템 변환기
US10353680B2 (en) 2014-07-25 2019-07-16 Intel Corporation System converter that implements a run ahead run time guest instruction conversion/decoding process and a prefetching process where guest code is pre-fetched from the target of guest branches in an instruction sequence
US11281481B2 (en) 2014-07-25 2022-03-22 Intel Corporation Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture

Also Published As

Publication number Publication date
US10042643B2 (en) 2018-08-07
US9710387B2 (en) 2017-07-18
US20170068541A1 (en) 2017-03-09
KR101612594B1 (ko) 2016-04-14
CN103620547B (zh) 2018-07-10
TWI529616B (zh) 2016-04-11
CN108874693A (zh) 2018-11-23
CN108874693B (zh) 2022-09-23
TW201250583A (en) 2012-12-16
CN103620547A (zh) 2014-03-05
WO2012103209A2 (en) 2012-08-02
WO2012103209A3 (en) 2012-09-20
US20120198157A1 (en) 2012-08-02
EP2668565B1 (en) 2019-11-06
EP2668565A4 (en) 2014-09-03
EP2668565A2 (en) 2013-12-04

Similar Documents

Publication Publication Date Title
US10042643B2 (en) Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
US11467839B2 (en) Unified register file for supporting speculative architectural states
US9921842B2 (en) Guest instruction block with near branching and far branching sequence construction to native instruction block
US10241795B2 (en) Guest to native block address mappings and management of native code storage
US10185567B2 (en) Multilevel conversion table cache for translating guest instructions to native instructions
US9753856B2 (en) Variable caching structure for managing physical storage
CN106716362B (zh) 用于将微指令序列重排序为优化的微指令序列以实现指令集不可知的运行时架构的分配和发出级
CN106796528B (zh) 用于选择包括指令序列的指令的系统和方法
CN107077368B (zh) 用于指令集不可知的运行时架构的系统
CN107077371B (zh) 用于不可知的运行时架构的系统、微处理器和计算机系统
CN107077370B (zh) 执行及时优化器用于执行来自访客镜像的代码的系统转换器

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: 20190328

Year of fee payment: 4