KR20040045467A - 자바 하드웨어 가속기에 대한 추론적 실행 - Google Patents

자바 하드웨어 가속기에 대한 추론적 실행 Download PDF

Info

Publication number
KR20040045467A
KR20040045467A KR10-2004-7004874A KR20047004874A KR20040045467A KR 20040045467 A KR20040045467 A KR 20040045467A KR 20047004874 A KR20047004874 A KR 20047004874A KR 20040045467 A KR20040045467 A KR 20040045467A
Authority
KR
South Korea
Prior art keywords
virtual machine
value
control variable
processing
branch
Prior art date
Application number
KR10-2004-7004874A
Other languages
English (en)
Inventor
린드베르메노엠.
Original Assignee
코닌클리케 필립스 일렉트로닉스 엔.브이.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 코닌클리케 필립스 일렉트로닉스 엔.브이. filed Critical 코닌클리케 필립스 일렉트로닉스 엔.브이.
Publication of KR20040045467A publication Critical patent/KR20040045467A/ko

Links

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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • 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, look ahead
    • 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

Abstract

조건부 브랜치 바이트코드들은 조건 제어 변수를 리턴하도록 CPU를 대기하는동안 바이트코드들을 추론적으로 처리하는지의 여부를 결정하기 위하여 브랜치 조건방식을 이용하는 가상 기계 해석기(VMI) 하드웨어 가속기에 의하여 처리된다. 한 브랜치 예측방식에서, VMI는 조건부 브랜치 바이트코드가 역방향 점프를 요구하는 경우에 브랜치 조건이 이행되지 않는 것을 가정하고 조건부 브랜치 바이트코드가 순방향 점프를 요구하는 경우 브랜치 조건이 이행되지 않는다는 것을 가정한다. 다른 브랜치 예측방식에서, VMI는 조건부 브랜치 바이트코드가 역방향을 요구하는 경우에만 가정을 만든다. 또 다른 추론 실행방식에서, VMI는 그것이 조건부 브랜치 바이트코드를 처리할 때마다 브랜치 조건이 이행되는 것으로 가정한다. VMI는 용이하게 반전가능한 바이트코드들(예컨대 단일 스택 조작들을 나타내는 바이트코드들)만을 추론적으로 처리하며, 용이하게 반전가능하지 않은 바이트코드가 발생할 때 바이트코드들의 추론적 처리를 중지시킨다. VMI에 의하여 이루어진 가정은 조건 제어 변수의 수신시에 확인되거나 무효화된다. 만일 가정이 무효화되면, 임의의 추론적으로 처리된 바이트코드들이 반전된다.

Description

자바 하드웨어 가속기에 대한 추론적 실행{SPECULATIVE EXECUTION FOR JAVA HARDWARE ACCELERATOR}
컴퓨터 프로그래밍 언어들은 컴퓨터 실행 명령들을 나타내는 인간 판독가능 소스코드로 이루어진 애플리케이션들을 생성하기 위하여 사용된다. 그러나, 컴퓨터가 명령들을 이해하기 전에, 소스 코드는 컴퓨터 판독가능 2진 기계 코드로 번역되어야 한다.
C, C++, 또는 COBOL과 같은 프로그래밍 언어는 전형적으로 소스 코드로부터 어셈블리 언어를 생성하여 어셈블리 언어를 기계어로 변역하기 위하여 사용하며, 상기 기계어는 기계 코드로 변환된다. 따라서, 소스코드의 최종 번역은 실행시간전에 발생한다. 다른 컴퓨터들은 다른 기계어들을 필요로하며, 그 결과 예컨대 C++로 기록된 프로그램은 프로그램이 기록되는 특정 하드웨어 플랫폼상에서만 실행할 수 있다.
해석된 프로그래밍 언어들은 다중 하드웨어 플랫폼들상에서 실행하는 소스코드를 사용하여 애플리케이션들을 생성하도록 설계된다. 자바(즉, JavaTM)는 "바이트코드" 또는 "가상 기계어"로서 알려진 중간언어로 실행시간전에 변환되는 소스코드를 발생시킴으로서 플랫폼 독립을 수행하는 해석된 프로그래밍 언어이다. 실행시간에, 바이트코드는 해석기 소프트웨어를 통해 플랫폼 적합 기계 코드로 번역되며, 이는 미국특허 제4,443,865호에 개시되어 있다. 각각의 바이트코드를 해석하기 위하여, 해석기 소프트웨어는 일련의 동작들, 즉 "페치, 디코드, 디스패치"(FDD)를 실행한다. 각각의 바이트코드 명령에 대하여, 해석기 소프트웨어는 원시 중앙처리장치(CPU) 명령들로 표현된 대응하는 실행 프로그램을 포함한다. 해석기 소프트웨어는 CPU가 메모리로부터 가상 기계명령을 페치 또는 판독하고, 바이트코드 명령에 대한 실행 프로그램의 CPU 어드레스를 디코딩하며 CPU의 제어를 실행 프로그램에 전달함으로서 디스패치하도록 한다. 해석 프로세스는 시간이 많이 소비될 수 있다.
PCT 특허출원번호 WO9918484에 기술된 바와같이, 메모리 및 CPU사이에 프리프로세서(가상 기계 해석기(Virtual Machine Interpreter:VMI))를 부가하면 가상 기계 명령들의 처리가 개선된다. 본질적으로, 가상 기계는 물리적 구조가 아니며, 오히려 VM 또는 CPU내에 저장된 대응 원시 기계어 명령들을 선택함으로써 하드웨어 플랫폼의 바이트코드를 해석하는 자체 포함된 동작환경이다. 그 다음에, 원시 명령들은 하드웨어 플랫폼의 CPU에서 연속적으로 실행된다. 전형적인 가상 기계는 동작들의 FDD 시리즈들을 실행하기 위하여 (바이트코드의 품질 및 복잡성에 따라)바이트코드당 처리시간의 20-60 사이클을 필요로한다. 첫째, VMI는 메모리로부터 바이트코드를 판독(페치)한다. 다음에, VMI은 페치된 바이트코드의 다수의 특성들을 찾는다(디코드). VMI에 의하여 액세스된 특성들은 바이트코드가 CPU에서 실행하는 원시 명령들로 처리되는 방법을 결정한다. CPU가 명령을 실행하는 동안, VMI는 다음 바이트코드를 페치하여 CPU 명령들로 처리한다. VMI는 1-4 사이클에 단순한 바이트코드들을 처리할 수 있다.
바이트코드들의 시퀀스를 해석하는 동안, 가상 기계는 이후에 CBI로 언급된 조건형 브랜치 명령을 나타내는 바이트코드를 만날 수 있다. CBI가 충돌될때, VMI는 조건이 이행되는지의 여부를 CPU가 결정하도록 하는 원시 명령들의 시퀀스를 발생시킨다. 따라서, 브랜치를 실행하는 결정은 VMI 개념에서 CPU 레지스터들에 남아있는 결과치들로 CPU에서 실행되는 초기 계산들에 따른다. 예컨대, 자바 바이트코드 "ifeq n"은 스택의 상부가 0인 경우에만(즉, 이전계산이 스택상에 값 0을 남기는 경우에)바이트코드 카운터를 "n"만큼 오프셋시킨다. 브랜치 조건(여기서 스택의 상부)의 값은 검색되어 VMI(특히 브랜치 조건들에 대하여 지정됨)의 제어 레지스터에 기록되어야 한다. 만일 조건이 충족되었다면, CBI는 실행될 바이트코드들의 시퀀스를 변경하는 VMI 바이트코드 카운터(점프)로 업데이트되도록 한다. 전형적으로, 한 명령이 VMI에서 처리될때 처리될 다음 명령들은 이미 VMI 파이프라인에 존재하며, 그 결과 만일 명령이 브랜치에서 발생하면 VMI 파이프라인에 이미 존재하는 바이트코드들은 플러시되어야 한다. 부가적으로, 프로세서 하드웨어의 "파이프라인" 구조는 명령들 및/또는 데이터가 프로세서에 디스패치되는 순간 및 프로세서가 명령 및/또는 데이터를 효율적으로 실행하는 순간사이에 명령들 및 데이터를 전송하기 위한 고유 지연을 발생시킨다. 특히, 전형적인 CPU가 멀티스테이지(전형적으로, 3 내지 8 스테이지들) 파이프라인을 가지기 때문에 기록 동작은 명령이 송출된후에 즉시 실행되지 않을 것이다. CBI의 경우에, 조건이 이행되는지의 여부를 CPU가 결정하여 VMI에 상기 결정결과치를 전송하는 동안 추가 지연이 발생한다. 브랜치 조건이 이행되는 것을 브랜치 조건의 값(제어값)이 지시하면, 여러(CPU 파이프라인의 크기에 따라) 명령들이 미리 CPU 파이프라인에 입력되었다. CPU 및 명령 캐시 비지를 유지하기 위하여, 일련의 "비동작"(NOP) 명령들은 조건이 이행되는지의 여부를 지시하는 제어값을 대기하는 동안 발생될 수 있다. 제어값은 CPU가 마지막 NOP까지 다음을 실행하고 VMI가 마지막 NOP를 발생시키는 동안 수신된다. 결정을 수행한후에, VMI의 파이프라인은 VMI의 캐시로부터 다음 명령을 나타내는 바이트코드를 검색하기 위하여 VMI에 대한 여러 사이클들을 필요로한다.
다른 방법들은 명령이 다른 위치로의 브랜치에서 발생하는지의 여부를 지시함으로서 잠재적인 브랜치 명령들을 실행한다. 이러한 방법의 예는 RISC(Reduced Instruction Set Computing, 감소된 명령 세트 컴퓨팅) 마이크로프로세서들에 관한 것이며 추가 브랜치들이 예측하기에 용이한지를 결정하기 위하여 브랜치 명령 비트를 제공하며 이들 브랜치에 대하여 점프를 실행하는지의 여부를 결정하기 위하여 소프트웨어 브랜치 예측을 사용한다. 소프트웨어 브랜치 예측은 소프트웨어 제어 예측비트를 사용하여 브랜치들을 예측한다. 만일 브랜치가 "하드(hard)"로 예측되면, 브랜치는 하드웨어 브랜치 예측(브랜치 예측 어레이와 같은)을 사용하여 예측된다. 이러한 방법은 오프셋이 0보다 작은 경우(역방향 브랜치) 브랜치가 선택되는 것을 예측하고 오프셋이 0보다 큰 경우(순방향 브랜치) 브랜치가 선택되지 않는다는 것을 예측하는 브랜치 예측방식의 사용을 기술한다. 이러한 방법의 단점은 브랜치가 선택되는지를 결정할 때 선택된 브랜치의 히스토리 동작이 중요한지의 여부를 기초하는 예측결정의 용이성을 만들고 업데이트하는 프로세스의 자원을 소비하는 것이다.
다른 브랜치 예측 방법에서, 잠재적인 브랜치 명령의 어드레스로부터의 비트들은 국부 브랜치 히스토리 테이블 및 전역 히스토리 레지스터로부터 계산된 비트들에 비교된다. 비교의 결과는 브랜치 예측 테이블을 판독하기 위하여 사용된다. 이러한 방법의 단점은 연쇄 및 비교 동작들을 실행하고 브랜치 예측 테이블을 저장 및 액세스하는데 필요한 자원들을 소비하는 것이다. 게다가, 이 방법은 잘못된 예측들을 정정하는 수단을 개시하지 않는다. 유사한 방법은 미국특허 제5,136,696호에 개시되어 있으며, 상기 특허에서는 브랜치 예측이 잠재적인 브랜치 명령의 어드레스에 기초하여 브랜치 캐시에 의하여 만들어진다. 이에 따르면, 예측이 잘못이루어지는 곳에서는 대응 명령이 무효화되나 어차피 실행되며, 이에 따라 브랜치 캐시는 동일한 명령이 다시 충돌되는 경우에 정확한 예측으로 업데이트될 수 있다. CPU 파이프라인은 파이프라인의 제 1 의 7개의 스테이지들의 모든 명령들을 무효화하고 프로그램 카운터 레지스터의 내용들을 로딩함으로서 브랜치 캐시 업데이트와 동일한 사이클동안 플러시된다.
조건부 브랜치들이 자주 발생하고(대략 모든 가상 기계 명령들의 10%) 고정확도로 실행하나 프로세서의 자원들을 많이 소비하는 기존의 방법들에 따라 처리될때 처리 집약적이기 때문에, 처리속도를 증가시키면서 조건부 브랜치 명령 바이트코드들에 의하여 의도된 명령을 정확하고 효율적으로 실행하는 프로그래밍 언어들을 해석하기 위한 시스템에 대한 필요성이 제기되었다.
본 발명은 일반적으로 컴퓨터 프로그램 언어들, 특히 가상 기계어의 번역 및 실행에 관한 것이다.
도 1은 본 발명의 실시예의 기능적 구성요소들을 도시한 블록도.
도 2는 전형적인 CPU 파이프라인에서의 명령들의 처리를 도시한 챠트.
도 3은 전형적인 바이트코드 처리 시퀀스를 도시한 도면.
도 4는 본 발명의 전형적인 실시예에 따른 방법의 흐름도.
본 발명은 조건부 바이트코드(CBI)가 발생될때 VMI가 브랜치 예측을 실행하고 추론적 실행 프로세스를 개시하는지의 여부를 선택하도록 가상 기계 하드웨어 가속기(VMI와 같은)를 구성함으로서 앞서 기술된 필요성을 충족시킨다. 만일 선택되면, 추론적 실행은 추론적으로 실행된 바이트코드들이 용이하게 반전시킬 수 있는 동안 또는 예측이 확인될때까지 계속된다. 대부분의 경우에, 예측이 정확하면, VMI 및 CPU는 예측이 확인된후에 추론적으로 선택된 바이트코드들의 시퀀스를 따라 동작을 계속할 수 있다. 만일 예측이 부정확하면(이에 따라 무효화되면), VMI 및 CPU에서 실행되는 추론적 프로세스들은 브랜치 바로전의 상태로 리턴된다. 브랜치 예측 방식들을 가진 가상 기계 하드웨어 가속기술의 성능 이득들 및 잠재적인 추론실행을 결합함으로서 그리고 효과들이 용이하게 반전될 수 있는 동안에만 명령들을 추론적으로 실행함으로서 효율성이 향상된다. 임의의 잘못된 예측을 정정함으로서 정확성이 향상된다. 따라서, 평균적으로 조건부 브랜치 명령(CBI)은 비교적 작은 지연만을 유발할 것이다.
본 발명은 더 복잡한 브랜치 예측 방법들(즉, Fifth USENIX Conference on Object-Oriented Technologies and Systems(1999), pp.217-229의 회보에서 "자바에서 가상 방법 호출을 지원하는 브랜치 예측기들의 동조"에서 제안된 해싱 방식 및 경로 히스토리 방법들) 및 발생된 각각의 잠재적인 브랜치 명령의 타입에 기초하여 단순한(그러나 가능성 있는) 예측들을 만드는 방식들에 적합하다.
간단히 말해서, 본 발명은 본 발명의 전형적인 실시예에서 자바 프로그램 언어에 의하여 발생된 조건부 브랜치 가상 기계 명령들을 처리하기 위한 시스템 및 방법들을 포함한다. 프로그램 레벨에서, 자바 소스 코드는 바이트코드로 불리는 중간 언어로 컴파일된다. 바이트코드는 프로세서에 의하여 실행하는 가상 기계에 의하여 해석될 수 있는 가상 기계 명령들로 이루어진다. 본 발명의 전형적인 실시예에 따르면, 실행시간에, 가상 기계(전형적인 실시예에서, VMI)는 개시된다. 각각의 바이트코드의 임의의 특성들을 식별하도록 하는 파라미터들은 개시된다. 예컨대, 바이트코드들은 단순함 또는 복잡함으로 특징지워질 수 있으며 추가로 조건부 또는 순환으로서 특징지워질 수 있다. 조건부 바이트코드는, 브랜치 조건이 이행될 경우에만, 실행될 바이트코드들의 시퀀스를 변경하는 가상 기계명령이다.
VMI는 하나 이상의 원시 명령들로 일련의 바이트코드들의 각각을 처리하기 시작한다. VMI는 각각의 바이트코드가 명령 메모리로부터 검색된후에 증분되는 바이트코드 카운터를 유지한다. CBI가 발생될때, VMI는 CPU가 브랜치 조건 제어값을 검색함으로서 브랜치 조건이 이행되었는지의 여부를 결정하도록 하는 원시 명령들의 시퀀스를 발생시킨다. 본 발명의 전형적인 실시예의 시스템들 및 방법들에 따르면, 제어값 검색이 완료될때까지 처리를 중지하는 것보다 오히려, VMI는 브랜치 예측을 실행하며 추론적 실행을 수행하는지의 여부, 즉 브랜치 조건이 이행될지에관한 가정을 하는지의 여부를 결정한다. 가정을 할 때, 바이트코드 시퀀스는 가정이 확인되건 무효로될때까지 또는 용이하게 반전가능하지 않는 바이트코드가 발생될때까지 추론적으로 실행된다.
본 발명의 제 1 의 3가지 실시예들에서, CBI에 의하여 지정되는 브랜치의 타입에 기초하여 결정이 이루어진다. 제 1 실시예에 따르면, VMI는 CBI가 역방향 브랜치를 지정하는 경우 브랜치 조건이 참인 것으로 가정하여, 브랜치에 의하여 목표된 다음 바이트코드로 점프하기 위하여 바이트코드 카운터를 업데이트한다. 만일 CBI가 순방향 브랜치를 지정하면, VMI는 브랜치 조건이 이행되지 않을 것으로 가정하여, 브랜치를 실행하지 않는다. 대안적인 실시예는 CBI가 역방향 브랜치를 요구하는 경우 브랜치 조건이 이행되는 것으로 가정하나, CBI가 순방향 브랜치를 요구하는 경우에 대해서는 가정하지 않는다. 다른 대안 실시예에서, VMI는 브랜치 조건이 항상 이행되는 것으로 가정하며, 이에 따라 추론적인 브랜치를 따르는 바이트코드들이 용이하게 반전할 수 있는 동안 그리고 가정이 확인되거나 또는 무효화될때까지 추론적인 브랜치를 따라 바이트코드들을 처리한다.
또 다른 실시예에서, 공지된 브랜치 예측방식은 브랜치를 추론적으로 실행할지의 여부를 결정하기 위하여 사용되나, VMI는, 가정이 확인되거나 또는 무효화될때까지만, 용이하게 반전할 수 있는 바이트코드들만을 추론적으로 처리한다. 이러한 방법은 VMI의 구현과 관련하여 이하에서 상세히 기술되나 브랜치 예측 또는 추론적 실행방식들로 구현될 수 있다.
본 발명의 실시예에 따르면, 가정이 되었을 때, VMI는, 스택 조작들(즉, 스택 푸시들)을 포함하는 명령들과 같은 원시 명령들이 용이하게 반전할 수 있는 한, 추론적으로 실행되는 브랜치를 따라 또는 바이트코드들의 원시 시퀀스를 따라 연속적인 바이트코드들을 번역하는 CPU에 원시 명령들을 계속해서 디스패치한다. 용이하게 반전되지 않는 명령이 발생될때, 일련의 "비동작"(NOP) 명령들은 발생되어 제어값이 수신될때가지 CPU 비지(busy)를 유지하기 위하여 VMI에 의하여 디스패치된다. 만일 가정이 정확하다고 다음에 수신되는 제어값이 지시하면, VMI는 VMI 파이프라인에 존재하는 바이트코드들을 계속해서 동작시키고 CPU는 CPU 파이프라인에 존재하는 원시 명령들을 계속해서 동작시킨다. 만일 가정이 부정확하다고(즉, 잘못된 예측이 존재한다고) 다음에 수신되는 제어값이 지시하면, CPU는 브랜치 바로전의 상태로 리턴하며 이에 따라 추론적으로 실행되는 반전가능한 바이트코드들을 반전시킨다. 따라서, 부정확한 가정으로 인한 잘못된 예측의 반전은 브랜치 바로전의 각 상태들에 VMI 및 CPU를 리턴하는 것과 추론적으로 실행된 바이트코드들의 특징에 따라 용이하게 이루어진다. 예컨대, 본 발명의 실시예에서, "용이하게 반전가능한 바이트코드"는 단지 스택 조작만을 실행하거나 또는 VMI외부의 임의의 상태를 수정하지 못하며, 그 결과 상기 바이트코드들의 시퀀스에 대한 실행은 바이트코드 카운터 및 레지스터 스택 포인터를 VMI에 리세팅함으로서 반전될 수 있다. "용이하게 반전가능한" 다른 한정들은 본 발명에 따라 실행될 수 있으며, 이들 한정들의 일부는 VMI 및 CPU의 파이프라인들이 추론적으로 실행된 바이트코드들을 반전하기 위하여 플러시된다.
본 발명의 다른 특징은 자바와 같은 해석된 언어로부터 가상 기계 명령들을실행하기 위한 시스템이다. 이 시스템은 프로세서(CPU), 프리프로세서(VMI), 명령 메모리 및 번역기(JVM)를 포함한다. 프로세서는 이후 원시 명령들로서 언급된 하드웨어 특정 명령들을 실행하도록 구성된다. 프리프로세서는 명령 메모리로부터 바이트코드를 페치하고 바이트코드를 원시 CPU 명령들로 번역하도록 구성된 가상 기계, 예컨대 VMI이다. VMI는 제어 레지스터, 바이트코드 카운터(BCC), 가정 가변 레지스터, 및 추론 모드 스위치 히스토리를 포함한다. 본 발명의 전형적인 실시예에서, VMI는 각 바이트코드에 의하여 요구된 원시 명령들을 처리를 위한 CPU에 디스패치하도록 구성된다. 처리된 바이트코드가 CBI에 있는 위치에서, VMI에 의하여 디스패치된 원시 명령들은 브랜치가 실행되는지의 여부를 지시하는 제어값을 CPU가 전송되도록 한다. VMI는 브랜치 조건이 이행된다는 것을 VMI가 추론 또는 확인되었을때 CBI에 의하여 요구된 점프를 실행하기 위하여 BCC를 업데이트하도록 구성된다. 제어값을 대기하는 동안, VMI는 앞의 실시예들로서 리스트된 방법들에 따른 브랜치 예측 방식에 기초하여 브랜치를 추론적으로 처리하도록 구성된다. VMI는 가정된 제어값(ACV)을 저장함으로서, 가정을 하거나 또는 가정을 하는 것을 거절할 때 가정변수값을 업데이트하도록 구성된다. VMI는 시퀀스가 추론적으로 실행될때 또는 추론적인 실행이 중지될때 업데이트되고 제어값이 수신될때 제거되는 추론모드 스위치 히스토리를 유지하도록 구성된다. 브랜치가 추론적으로 실행되어야 하는 가정을 한 후에, VMI는 반전가능한 바이트코드들을 식별하고 처리하며, 제어값을 수신하며, 초기 가정이 부정확하다는 것을 지시하는 제어값을 VMI가 추론적으로 수신하는 경우에 추론적으로 실행된 바이트코드들을 반전시키도록 구성된다.
비록 종래의 브랜치 명령들의 다양한 타입들을 처리하기 위하여 본 발명의 방법들을 실행하는 것이 가능할지라도, 본 발명의 전형적인 실시예는 자바 조건부 브랜치 바이트코드들의 처리에 관한 것이다.
본 발명은 선마이크로시스템즈에 의하여 만들어진 JVM과 같은 가상 기계들을 사용하여 자바 바이트코드를 실행하는 시스템들에서 실행될 수 있다. 그러나, 본 발명은 마이크로소프트 가상 기계와 같은 다른 자바 가상 기계들을 사용하여 실행될 수 있으며 비주얼 베이직, dBASE, BASIC 및 .NET과 같은 다른 해석된 언어들을 실행하는 시스템에 적용가능하다.
본 발명의 추가 목적, 장점 및 신규 특징은 이하의 상세한 설명에 부분적으로 설명될 것이며 이하의 고찰시 당업자에게 명백하게 되며 또는 본 발명의 실시에 의하여 알 수 있다.
명세서의 일부를 형성하는 첨부 도면들은 상세한 설명과 함께 본 발명을 기술한다.
필요에 따라, 본 발명의 상세한 실시예들이 여기에 기술되나, 기술된 실시예들은 다양한 및 대안 형태들로 구현될 수 있는 본 발명의 전형적인 실시예인 것이 이해되어야 한다. 도면들은 축적으로 도시될 필요가 없으며, 일부 특징들은 특정 소자들의 상세하기 설명하기 위하여 가정되거나 또는 최소로될 수 없다. 따라서, 여기에 기술된 특정 구조 및 기능의 상세한 설명들은 제한적으로 해석되지 않고 청구범위에 대한 기본서로서 해석되며, 당업자는 본 발명을 다양하게 사용할 수 있다.
동일부호들이 동일 부재들을 나타내는 첨부도면들에 기술된 본 발명의 전형적인 실시예를 지금 참조하면, 도 1은 본 발명의 전형적인 실시예의 블록도이다. 본 발명의 실시예에서 기본 소자들은 프로세서(110), 프리프로세서(120), 및 명령 메모리(150)를 포함하는 하드웨어 플랫폼(100)이며, 상기 프로세서, 프리프로세서 및 명령 메모리는 시스템 버스(160)에 의하여 모두 접속된다. 프리프로세서(120)는 제어 레지스터(130) 및 번역기(140)를 포함한다. 하드웨어 플랫폼(100)은 전형적으로 중앙처리장치(CPU), 기본 주변장치들, 및 운영체제(OS)를 포함한다. 본 발명의 프로세서(110)는 MIPS, ARM, 인텔 x86, 파워PC 또는 SPARC형 마이크로프로세서들과 같은 CPU이며, 이후 원시 명령들로 언급된 하드웨어 특정 명령들을 실행하도록 구성된다. 본 발명의 전형적인 실시예에서, 번역기(140)는 선마이크로시스템즈에 의한 KVM와 같은 자바 가상 기계(JVM)이다. 명령 메모리(150)는 가상 기계 명령들, 예컨대 자바 바이트코드(170)를 포함한다. 전형적인 실시예에서, 프리프로세서(120)는 WO9918486에 개시된 가상 기계 해석기(VMI)이며, 명령 메모리(150)로부터 가상 기계 명령(예컨대, 바이트코드(170))을 페치하고 원시 CPU 명령들의시퀀스로 가상 기계 명령을 번역하도록 구성된다. VMI(120)는 버스(160)상의 주변장치이며 메모리 매핑 주변장치로서 동작할 수 있으며, 여기서 미리 결정된 범위의 CPU 어드레스들 VMI(120)에 할당된다. VMI(120)는 명령 메모리(50)에서 현재의(또는 다음) 가상 기계 명령을 지시하는 개별적인 가상 기계 명령 포인터(180)를 관리한다. VMI는 또한 추론모드 스위치 및 가정 변수(도시안됨)를 관리한다.
도 2를 참조로한 본 발명의 전형적인 실시예에 따르면, 프로세서(110)는 기계 명령들의 실행이 연속적인 클록 사이클들동안 병렬 및 록스텝 방식으로 발생하는 멀티-스테이지 파이프라인(200)을 포함한다. 다시 말해서, 제 1명령(I1)이 파이프라인의 스테이지 2에 입력될때, 다음과 같은 명령(I2)은 스테이지 1 등에 입력된다. 이상적으로, 명령들은 연속적인 사이클들동안 파이프라인에 계속해서 입력되며, 이에 따라 8개의 명령들을 동시에 처리할 수있다. 그러나, 전형적으로 평균 명령의 실행은 실제로 하나 이상의 클록 사이클을 필요로한다.
본 발명의 동작 실시예로서, VMI(120)는 바이트코드들(170)의 제 1시리즈(310) 각각을 하나 이상의 원시 명령들로 번역을 시작한다. 도 3을 참조하면, 바이트코드들(B0-B2)은 비조건부이며, 그 결과 VMI(120)는 명령 메모리(150)로부터 B0 내지 B2를 단순히 페치하고 각 바이트코드(170)에 대하여 한정된 원시 명령 또는 명령들을 선택하며 명령(들)을 실행을 위한 프로세서(110)에 공급한다. Bn는 조건부 브랜치 명령(CBI 330)이며, 이에 따라 만일 브랜치 조건이 이행되면 Bn은 VMI가 시퀀스(320)에서 제 1시퀀스(310)로부터 바이트코드(Br)로 점프하도록 한다. 브랜치 조건이 평가되는 동안(즉, VMI(120)가 CPU(110)로부터 리턴될 제어값을 대기하는 동안), 브랜치 조건이 이행되는지에 관한 예측이 브랜치 예측방식에 따라 수행되며 VMI(120)는 예측이 검증될 수 있을때까지 명령들을 추론적으로 실행하는지의 여부를 선택한다. 브랜치 예측방식은 브랜치 조건이 이행되는지의 여부에 관한 예측들을 제공하는 복잡성들과 예측의 정확도에 대한 가능한 통계적 평가를 변화시키는 발견적 프로세스들이다. 본 발명의 일 실시예에 따르면, VMI(120)은 CBI(330)(Bn)이 역방향 브랜치(즉, 바이트코드 카운터(BCC)로의 음의 오프셋)를 요구하는 경우에 브랜치 조건이 이행되고 VMI(120)가 바이트코드(Br)로의 점프를 실행한다는 것을 가정하는 브랜치 예측 방식을 실행한다. VMI(120)는 CPU(110)가 브랜치 조건이 이행되었는지의 여부를 지시하는 제어값을 검색하도록 하는 원시 명령들의 시퀀스를 동시에 디스패치한다. 다른 실시예의 브랜치 예측방식에 따르면, CBI(330)(Bn)이 순방향 브랜치(즉, BCC로의 양의 오프셋)를 요구하는 경우에 VMI(120)는 브랜치 조건이 이행되어 점프를 실행하지 않는다는 것을 가정한다. 또 다른 실시예의 브랜치 예측 방식에 따르면, 만일 CBI(330)가 브랜치를 요구한다면, VMI(120)는 브랜치 조건이 이행되어 점프를 실행한다는 것을 가정한다.
본 발명의 전형적인 실시예에 따르면, 만일 브랜치 예측 방식이 바이트코드들의 시퀀스(320)의 추론적 실행을 야기하면, 부정확한 예측의 영향은 반전가능한 바이트코드들(170)을 단지 용이하게 순차적으로 실행함으로서 최소화된다. 반전의 용이성은 바이트코드(170)가 VMI(120)에 의하여 디코딩될때(즉, 그것의 특성들이 액세스될때) 결정된다. CPU(110)는 각각의 디스패치된 명령을 추론적으로 실행한다. 예컨대, 많은 경우에, 브랜치전에 스택 포인터값(VMI(120)에서 유지되는)을그것의 상태로 리세트함으로서 용이하게 반전될 수 있는 스택 푸시 동작(즉, 상수 또는 변수가 스택상에 푸시됨) 다음에 브랜치가 수행된다. 이러한 원시 명령들(보통 "스택 푸시들"로서 언급됨)은 추론적 실행의 반전이 단순히 레지스터를 리세팅함으로서 수행되기 때문에 제어값이 수신될때까지 추론적으로 실행될 수 있으며, 이에 따라 잘못된 예측의 음의 오프셋들은 무시할 수있다.
따라서, 브랜치 조건이 이행될 것으로 VMI(120)가 가정할 때, 바이트코드들(Br 내지 Bz)(추론적 브랜치)의 처리는 만일 VMI(120)가 용이하게 반전될 수 없는 원시 명령들의 시퀀스를 나타내는 추론적 브랜치를 따라 바이트코드를 발생시키는 않으면 제 2시퀀스(320)에서 순차적으로 계속된다. 추론적 브랜치에 따른 바이트코드(170)가 용이하게 반전될 수 없을때, 추론적 실행은 중지된다. 만일 브랜치 조건이 이행되지 않았다는 것을 지시하는 제어값을 VMI(120)가 수신하면, VMI(120)는 점프를 반전시키기 위하여(필요한 경우에 CPU 파이프라인(200)을 퍼지(purge)하기 위하여 CPU(110)에 원시 명령을 송출하기 위하여) BCC 및 레지스터 스택 포인터를 리세팅한다. 만일 브랜치 조건이 이행되지 않을 것을 VMI(120)가 가정하면, BCC는 증가되고 브랜치는 추론적으로 처리되지 않는다. 비브랜치 바이트코드들을 추론적으로 처리하는 동안, VMI(120)는 수신된 제어값이 제어 레지스터(130)에 기록되었는지의 여부를 연속적으로 검사한다.
도 4의 블록(410)에 도시된 바와같이, VMI(120)는 명령 메모리(150)로부터 각각의 바이트코드(170)를 페치하기 위하여 블록(420)에서 계속하기전에 가상 기계 카운터(BCC)를 증가시킨다. 블록(430)에서, VMI(120)는 바이트코드(170)에 대한특성들을 액세스함으로서 각각의 바이트코드(170)를 디코딩한다. 시퀀스의 제 1바이트코드(170)가 디코딩되었을때 추론적 모드 스위치(speculation mode switch:SMS)가 오프되기 때문에, VMI(120)(블록 435에서)은 바이트코드(170)에 대응하는 원시 명령들의 시퀀스를 디스패치한다. 만일 블록(445)에서 바이트코드(170)가 CBI(330)가 아닌 것이 결정되면, 본 방법은 가상 기계 카운터(BCC)(180)가 증가하는 블록(410)으로 리턴하며, 페칭 프로세스가 다시 시작된다(블록 420). 그러나, 바이트코드(170)가 조건부인 블록(445)에서 결정되면, 블록(435)에서 디스패치된 원시 명령들은 블록(450)내에서 제어값 검색 프로세스를 나타낼 것이다. 제어값 검색 프로세스를 구성하는 원시 명령들은 CBI(330)에 의하여 요구된 브랜치가 실행되는지의 여부(즉, 현재 실행되는 바이트코드들의 시퀀스 외부에 있는 목표 바이트코드(170)를 점프하는지의 여부)를 지시하는 제어값을 CPU가 전송하고 또한 CPU가 제어값을 제어 레지스터(130)에 기록하도록 할 것이다. 제어값 검색 프로세스와 동시에, VMI(120)는 브랜치 조건이 이행되거나 또는 이행되지 않을 가정을 한 것인지의 여부를 선택한다(블록(470)에서). 선택은 사용하고 있는 특정 브랜치 예측 또는 추론적 실행방식에 기초한다.
만일 VMI(120)가 브랜치 조건의 이행에 관한 가정을 하는 것을 선택하면, 추론적 모드 스위치(SMS)는 턴온되며 가정된 제어값(ACV)(가정 변수 195)은 VMI 레지스터에 저장된다. 블록(475)에서, BCC는 브랜치가 추론적으로 선택되는 경우에 업데이트된다(CBI(330)에 의하여 요구된 점프를 반영하기 위하여). 브랜치가 순차적으로 선택되는지의 여부에 무관하게, 본 방법은 BCC가 증가되는 블록(410)으로 진행한다. 바이트코드의 추론적으로 선택된 시퀀스에 따르는 다음 바이트코드(170)는 그것이 반전가능한 경우에(예컨대, 다음 바이트코드(170)에 대응하는 원시 명령들은 단순한 스택 조작을 구성함) 처리된다. 반전 용이성에 대한 결정은 바이트코드(170)의 특성들에 기초한다. 용이하게 반전가능한 바이트코드들은 CBI(330) 번역 바로 후에 스택의 상부위의 스택 위치들에서 발생하고 시스템(특히, VMI(120) 외부)의 상태를 수정하지 않는 동작들을 나타낸다. 바이트코드(170)는 블록(420)에서 페치되고 블록(430)에서 디코딩된다. SMS는 VMI(120)가 가정(시퀀스가 추론적으로 실행됨)을 하기 위하여 선택되기 때문에 온되며, 그 결과 만일 제어값이 리턴되지 않고(블록 485) 페치된 바이트코드(170)가 용이하게 반전가능하다는 것을 디코딩된 특성들이 지시하면 페치된 바이트코드에 대응하는 원시 명령들은 블록(435)에서 디스패치된다. 그 다음에, 페치된 바이트코드(170)가 다른 CBI(330)가 아닌 동안(블록 445), BCC는 증가되며(블록 410) 추론적 시퀀스에 따르는 다음 바이트코드는 페치되어 디코딩된다(블록 420 및 430). 따라서, 추론적 시퀀스의 처리는 각각의 다음 바이트코드(170)가 용이하게 순환가능한 동안 그리고 브랜치 조건이 수신되지 않는 동안 블록들(410, 420, 430, 432, 485, 486, 460, 435)을 통해 순환한다.
만일 블록(460)에서 용이하게 반전가능하지 않은 바이트코드(170)가 추론적 시퀀스의 처리동안 발생되면, 추론은 VMI(120)가 블록(485)에서 제어값의 수신을 대기하도록 하는 SMS의 스위치 오프에 의하여 블록(461)에서 중지된다. 수신된 제어값(RCV)는 VMI(120)의 제어 레지스터(130)에 저장된다. 블록(487)에서 브랜치조건이 평가된다. 만일 브랜치 조건이 이행된다는 것을 RCV가 지시하고 현재의 시퀀스가 블록(494)에서 순차적으로 처리되는 것을 SMS 히스토리가 지시하면(상기 SMS 히스토리(190)는 SMS가 현재의 시퀀스동안 임의의 지점에 위치하는 것을 지시한다), 가정 변수(195)로서 저장된 가정된 제어값(ACV)은 VMI(120)에 의하여 만들어진 가정이 정확한지의 여부(즉, 추론 시퀀스가 처리되어야 하는지의 여부)를 결정하기 위하여 제어 레지스터(130)에 저장된 수신된 제어값(RCV)과 비교된다. 만일 가정이 정확하면(즉, ACV=RCV이면), 현재의 브랜치 시퀀스의 추론적 실행이 확인된다. 다시 말해서, VMI(120)는 브랜치가 선택되어야 하는 것을 정확하게 가정했다. BCC는 블록(410)에서 증가되며 페칭이 다시 시작된다. 만일 가정이 부정확하면, VMI(120)는 브랜치를 처리하지 않으며, VMI(120) 및 CPU(110)는 바이트코드들의 추론적으로 수신된 비브랜치 시퀀스를 수신하도록 플러시되며, 본 방법은 블록(498)에서 점프를 반영하기 위하여 BCC를 업데이트하며 BCC를 증가시키고 브랜치 시퀀스에 따른 다음 바이트코드를 처리하기 위하여 블록(410)에 리턴한다.
만일 브랜치 조건이 이행되지 않는다는 것을 RCV가 지시하고 현재의 시퀀스가 추론적으로 처리되지 않는다는 것을 SMS 히스토리(190)가 지시하면, 블록(494)에서 가정된 제어값(ACV)은 VMI(120)에 의하여 만들어진 가정이 정확한지의 여부를 결정하기 위하여 수신된 제어값(RCV)과 비교된다. 만일 가정이 정확하면, 현재의 비브랜치 시퀀스의 추론적 실행은 확인되었다. 다시말해서, VMI(120)는 브랜치가 선택되지 않아야 한다는 것을 정확하게 가정했다. BCC는 블록(410)에서 증가되며 페칭은 다시 시작한다. 만일 가정이 부정확하면, 브랜치는 블록(495)에서 BCC 및스택 레지스터 포인터를 리세트시킴으로서 반전된다. 필요한 경우에, VMI(120) 및 CPU(110)의 파이프라인들은 블록(495)에서 플러시된다.
SMS 히스토리(190)는 제어값이 브랜치 조건이 분석되지 않았기 때문에 제어값이 수신되는지의 여부가 리세트되며, 이에 따라 추론적 프로세스들을 확인 또는 퍼지할 수 있다.
만일 VMI(120)가 브랜치 조건의 이행에 관한 가정을 하지 않는다는 것을 블록(470)에서 선택하면, VMI(120)는 실제 제어값이 제어값 수신에 대한 블록(485)에서의 검사에 의하여 수신될때까지 대기한다. SMS가 오프를 유지하기 때문에, 블록(486)은 제어값이 수신될때까지 계속해서 검사하기 위하여 블록(485)으로 리턴한다. 제어값이 수신될때, 본 방법은 블록(487)으로 계속되며, 여기서 브랜치 조건이 평가된다. 브랜치 조건이 이행된다는 것을 제어값이 지시하는 경우에, 바이트코드 시퀀스의 실행동안 추론이 발생되지 않기 때문에, 본 방법은 블록(498)으로 진행하며, 여기서 BCC는 CBI(330)에 의하여 요구된 점프를 반영하기 위하여 업데이트되며 바이트코드 페칭은 블록(410)에서 다시 시작된다. 만일 브랜치 조건이 이행되지 않는다는 것을 제어값이 지시하면, 본 방법은 바이트코드 페칭을 다시 시작하기 위하여 블록(410)으로 리턴한다. 이러한 방식에서, 만일 VMI(120)가 가정을 하지 않는다는 것을 선택하면, VMI(120)는 CBI(330)을 정상적으로 처리한다(브랜치 조건이 이행되는 경우에만 브랜치를 선택한다).
전술한 바와같이, 브랜치 조건의 이행에 관한 가정을 하는지의 여부에 대한 결정은 이하에 기술된 바와같이 실행된 브랜치 예측방식이다.
브랜치 예측 방식들
역방향 브랜치 순방향 브랜치
제 1실시예 가정이 선택됨 가정이 선택안됨
제 2실시예 가정이 선택됨 비가정
제 3실시예 가정이 선택됨 가정이 선택됨
제 4실시예 예측방식에 따름
본 발명의 제 1실시예에서, VMI(120)는 역방향 브랜치들이 선택될 것이라는 것을 가정한 추론 실행방식을 이용하며, 순방향 브랜치들은 선택되지 않을 것이다. 제 2 및 대안 실시예에서, VMI(120)은 역방향 브랜치들만을 추론적으로 실행하며, 순방향 브랜치들에 관한 가정을 하지 않는다. 제 3 및 대안 실시예에서, VMI(120)는 모든 브랜치들이 선택될 것이라는 것을 가정한 보다 단순한 추론적 실행을 이용한다. 게다가, 제 4 및 대안 실시예에 따르면, VMI(120)는 브랜치가 선택되는지의 여부를 결정하기 위하여 브랜치 예측방식을 이용한다. 전술한 실시예들에 따르면, 추론적 실행은 용이하게 반전가능한 바이트코드들에 대해서만 진행한다.
본 발명의 제 1 실시예에 따르면, VMI(120)은 CBI(330)에 의하여 표현된 브랜치 조건의 결과에 관한 가정을 항상 하지만, CBI(330)에 의하여 요구된 브랜치 타입에 기초하여 추론한다. 만일 CBI(330)가 순방향 브랜치를 요구하면(BCC 오프셋 > 0 이면), VMI(120)는 브랜치 조건이 이행되지 않을 것이라는 것을 가정하며 브랜치 바이트코드가 용이하게 반전가능한 동안 브랜치 바이트코드 시퀀스를 추론적으로 처리한다. 만일 CBI(330)가 역방향 브랜치(BCC 오프셋 < 0)를 요구하면, VMI(120)은 브랜치 조건이 이행될 것을 가정하며 브랜치 바이트코드 시퀀스가 반전가능한 동안 브랜치 바이트코드 시퀀스를 처리한다.
본 발명의 제 2 실시예에 따르면, VMI(120)는 CBI(330)가 역방향 브랜치를요구하는 경우에만 CBI(330)에 의하여 표현된 브랜치 조건의 결과에 관한 가정을 한다. CBI(330)이 순방향 브랜치를 요구할 때, VMI(120)는 정상적으로 브랜치 조건을 처리하며, 즉 VMI(120)는 제어값의 수신을 대기하며 적절한 바이트코드들 시퀀스를 처리한다.
본 발명의 제 3 실시예에서, CBI가 발생될때 브랜치가 항상 선택된다는 것을 방식이 추론한다. RISC를 처리할 때, 상기 추론적 실행방식은 브랜치들이 보통 루프의 하부에서 발생하기 때문에 대략 시간의 70%를 가속시키며, 루프들은 전형적으로 반복적으로 실행된다. 브랜치 예측은 대략 35% 정도 VMI의 전체 RISC 코드 처리 성능을 개선시킨다. Amdahl의 법칙에 따르면, 자바코드를 처리할 때, 상기와 같은 단순한 예측은 7-20% 정도 바이트코드 처리속도를 증가시킬 것이다. 브랜치 예측 및 추론 동작을 사용하면, 브랜치들의 총비용은 본래 실행하는 CPU와 비교할 때 10 내지 20 사이클들로부터 대략 2 내지 4 사이클들로 감소될 수있다. 제 3실시예의 특징에 따르면, 브랜치 조건이 이행되었다는 것을 VMI(120)이 가정할 때, VMI(120)는 브랜치 오프셋을 반영하기 위하여 바이트코드 카운터(BCC)를 업데이트하며, 오프셋 어드레스로부터 페칭을 시작하며 그것의 파이프라인을 복원한다. 만일 가정이 정확하면, 브랜치를 처리하는데 필요한 시간은 약 5사이클들로 감소된다. 그러나, 모든 브랜치의 대략 10%가 캐시 손실을 유발하기 때문에 본 발명의 일 실시예에 따른 브랜치 예측이 대략 3개의 인자 만큼(14로부터 5 사이클로) 모든 브랜치에 대한 처리시간을 감소시킨다는 것이 결정되지 않을 수 있다.
제 4실시예에서, 임의의 공지된 브랜치 예측방식들은 각각의 CBI(330)를 처리하기 위하여 VMI(120)과 공동으로 이용된다.
비록 당업자가 다른 장점들이 존재한다는 것을 인식할지라도, 본 발명의 시스템들 및 방법들의 많은 장점들이 여기에 기술된다. 예컨대, 최적의 버스 사용을 위하여, CPU(110)는 버스트들(전형적으로 적어도 4 사이클을 구성함)로 원시 명령들을 판독한다. 따라서, CPU(110)는 그것이 제어값을 다시 VMI(120)에 전송하기 전에 전체 버스트를 판독해야 한다. VMI(120)는 VMI(120)가 추론 브랜치를 처리하는 동안 CPU(110)가 검색 명령을 처리하도록 제어값 검색 명령을 포함하는 버스트를 채우기 위하여 임의의 NOP들을 발생시켜야 한다. 본 발명의 장점은 CPU 버스트를 채우기 위하여 NOP들로 프로세서 시간을 점유하는 것보다 오히려, 각 명령의 오프셋들이 반전될 수 있는 동안 추론 시퀀스(320)로부터 다음 명령들을 추론적으로 디스패칭함으로서 VMI(120)이 의미있는 명령들로 채워진 CPU(110) 및 VMI(120) 파이프라인들을 유지한다는 것이다.
전술한 바와같이, 본 발명이 조건부 브랜치 가상 기계 명령들을 정확하고 효율적으로 처리하는 시스템 및 방법을 제공한다는 것이 인식될 것이다. 그럼에도 불구하고, 전술한 설명은 단순히 본 발명의 전형적인 실시예들에 관한 것이며 다양한 변형들이 이하의 청구범위에 의하여 한정된 본 발명의 사상 및 범위로부터 벗어나지 않고 이루어질 수 있다는 것을 이해해야 한다.

Claims (18)

  1. 가상 기계 명령들을 처리하는 방법에 있어서,
    그 처리가 조건 제어 변수의 값에 따라 조건적으로 좌우하는 가상 기계명령들의 서브세트를 식별하는 단계와,
    상기 가상 기계 명령들의 범위를 프로세서에 의하여 실행가능한 원시 명령들로 페치 및 처리하는 단계로서, 상기 가상 기계 명령의 카운터는 상기 범위의 가상 기계 명령을 실행하는 상기 프로세서에서 처리 및 디스패치한 후에 증가되고, 상기 가상 기계 명령들의 서브세트의 멤버(member)를 만날 때까지 계속되는, 상기 페치 및 처리 단계와,
    상기 멤버에 의하여 표현된 원시 명령들을 상기 실행을 위한 프로세서에 디스패치함으로써 상기 멤버를 만날 때 제어값 검색 프로세스를 개시하는 단계와,
    상기 조건 제어 변수의 실제 값의 가정된 값에 대한 가정이 이루어졌을 경우, 가상 기계 명령들의 추론 시퀀스(speculative sequence)를 처리하는 단계를 포함하고,
    상기 추론 시퀀스의 처리 단계는,
    추론 모드 스위치를 스위칭 온하는 단계,
    상기 가상 기계 명령들의 추론 시퀀스에 대한 각각의 가상 기계 명령을 원시 명령으로 처리하기 위하여 상기 가정된 값에 따라 상기 가상 기계 명령 카운터를 업데이트하고, 상기 가상 기계 명령 카운터를 증가시키고, 상기 각각의 가상 기계명령이 처리된 후 상기 조건 제어 변수의 실제 값이 수신될 때까지 상기 원시 명령들을 디스패치하는 단계,
    상기 실제 값을 상기 가정된 값과 비교하는 단계, 및
    만일 상기 실제 값이 상기 가정된 값과 동일하지 않으면, 상기 가상 기계 명령들의 상기 추론 시퀀스의 상기 처리를 반전시키고, 추론 모드 히스토리를 제거(purge)하고, 상기 가상 기계 카운터에 대한 상기 업데이트를 반전시키는 단계, 또는
    만일 상기 실제값이 상기 가정된 값과 동일하다면, 상기 추론 모드 스위치를 스위칭 오프하고, 상기 추론 모드 히스토리를 제거하는 단계에 의하여 수행되고,
    만일 상기 조건 제어 변수의 실제 값의 가정된 값에 대한 가정이 이루어지지 않는다면, 상기 조건 제어 변수의 실제 값이 수신될 때까지 상기 가상 기계 명령들의 상기 범위를 페치 및 처리하는 단계를 더 지연시킨 다음, 상기 실제 제어 값에 따라 다음 가상 기계 명령을 처리하는 단계를 포함하는, 가상 기계 명령 처리 방법.
  2. 제 1 항에 있어서,
    상기 가상 기계 명령들의 범위를 프로세서에 의하여 실행가능한 원시 명령들로 페치 및 처리하는 단계는, 가상 기계 해석기(Virtual Machine Interpreter:VMI) 가상 기계 하드웨어 가속기에 의하여 수행되는, 가상 기계 명령 처리 방법.
  3. 제 1 항에 있어서,
    상기 가상 기계 명령들의 추론 시퀀스를 처리하는 단계는,
    상기 가상 기계 명령이 용이하게 반전가능한 경우에만 상기 추론 시퀀스의 각 가상 기계 명령을 처리하는 단계와,
    만일 다음 가상 기계 명령이 스택 조작을 나타내지 않는다면, 상기 조건 제어 변수의 실제 값이 수신될 때까지 상기 가상 기계 명령들의 추론 시퀀스의 처리를 중지하는 단계를 더 포함하는, 가상 기계 명령 처리 방법.
  4. 제 3 항에 있어서,
    상기 추론 시퀀스의 처리를 중지하는 단계는, 상기 조건 제어 변수의 실제 값이 수신될 때까지 일련의 "비동작(no operation)" 명령들을 상기 프로세서에 디스패치하는 단계를 더 포함하는, 가상 기계 명령 처리 방법.
  5. 제 2 항에 있어서,
    상기 조건 제어 변수의 실제 값의 가정된 값에 대한 가정을 할지를 결정하는 단계는,
    상기 가상 기계 명령들의 상기 식별된 서브세트의 상기 멤버에 의하여 요구되는 상기 가상 기계 카운터의 변위를 결정하는 단계와,
    만일 상기 가상 기계 명령들의 식별된 서브세트의 상기 멤버가 상기 가상 기계 카운터의 음의 변위(오프셋 <0)를 요구하면, 상기 브랜치 조건이 이행되는 것을지시하기 위하여 상기 조건 제어 변수의 상기 가정된 값을 세팅하는 단계를 더 포함하는, 가상 기계 명령 처리 방법.
  6. 제 5 항에 있어서,
    만일 상기 가상 기계 명령들의 식별된 서브세트의 상기 멤버가 상기 가상 기계 카운터의 양의 변위(오프셋>0)를 요구한다면, 상기 브랜치 조건이 이행되지 않는다는 것을 지시하기 위하여 상기 조건 제어 변수의 상기 가정된 값을 세팅하는 단계를 더 포함하는, 가상 기계 명령 처리 방법.
  7. 제 5 항에 있어서,
    만일 상기 가상 기계 명령들의 식별된 서브세트의 상기 멤버가 상기 가상 기계 카운터의 양의 변위(오프셋>0)를 요구한다면, 상기 조건 제어 변수의 실제 값에 대한 가정을 하지 않는 단계를 더 포함하는, 가상 기계 명령 처리 방법.
  8. 제 2 항에 있어서,
    상기 조건 제어 변수의 실제 값의 가정된 값에 대한 가정을 할지를 결정하는 단계는, 상기 브랜치 조건이 이행되는 것을 지시하기 위하여 상기 조건 제어 변수의 가정된 값을 세팅하는 단계를 더 포함하는, 가상 기계 명령 처리 방법.
  9. 제 2 항에 있어서,
    상기 조건 제어 변수의 실제 값의 가정된 값에 대한 가정을 할지를 결정하는 단계는, 브랜치 예측 방식(branch prediction scheme)에 따라 상기 조건 제어 변수의 상기 가정된 값을 세팅하는 단계를 더 포함하는, 가상 기계 명령 처리 방법.
  10. 제 2 항에 있어서,
    상기 조건 제어 변수의 실제 값의 가정된 값에 대한 가정을 할지를 결정하는 단계는, 추론적 실행 방식(speculative execution scheme)에 따라 상기 조건 제어 변수의 상기 가정된 값을 세팅하는 단계를 더 포함하는, 가상 기계 명령 처리 방법.
  11. 가상 기계 명령들을 처리하기 위한 방법에 있어서,
    상기 가상 기계 명령들의 범위를 프로세서에 의하여 실행가능한 원시 명령들로 페치 및 처리하는 단계로서, 조건부 브랜치 명령을 만날 때까지 계속하는, 상기 페치 및 처리 단계와,
    상기 조건 브랜치 명령을 만날 때, 상기 조건부 브랜치 명령에 의하여 표현된 원시 명령을 상기 실행을 위한 프로세서에 디스패치함으로써 제어값 검색 프로세스를 개시하는 단계와,
    조건 제어 변수의 값에 대한 가정을 할지의 여부를 결정하는 단계와,
    상기 조건 제어 변수의 값에 대한 가정이 이루어질 경우 가상 기계 명령들의 추론 시퀀스를 처리하는 단계를 포함하고,
    상기 추론 시퀀스의 처리 단계는,
    상기 가상 기계 명령이 용이하게 반전가능한 경우에만, 상기 가상 기계 명령들의 추론 시퀀스의 가상 기계 명령을 예비적 원시 명령으로 처리하는 단계, 및
    만일 상기 가상 기계 명령이 스택 조작을 나타내지 않는다면, 상기 조건 제어 변수의 값이 수신될 때까지 상기 가상 기계 명령들의 추론 시퀀스의 처리를 중지하는 단계에 의하여 수행되고,
    만일 상기 조건 제어 변수의 값에 대한 가정이 이루어지지 않는다면, 상기 조건 제어 변수의 값이 수신될 때까지 상기 가상 기계 명령들의 범위를 페치 및 처리하는 단계를 더 지연시키고, 상기 수신된 값에 따라 다음 가상 기계 명령을 처리하는 단계를 포함하는, 가상 기계 명령 처리 방법.
  12. 제 11 항에 있어서,
    상기 가상 기계 명령들의 추론 시퀀스를 처리하는 단계는,
    상기 수신된 조건 제어 변수의 값과 가정된 값을 비교하는 단계와,
    상기 조건 제어 변수의 값이 가정된 값과 동일하지 않는다면, 상기 가상 기계 명령들의 추론 시퀀스의 상기 처리를 반전시키고, 추론 모드 히스토리를 제거하는 단계와,
    만일 상기 조건 제어 변수의 값이 상기 가정된 값과 동일하다면, 상기 추론 모드 스위치를 스위칭 오프하고, 상기 추론 모드 히스토리를 제거하는 단계를 더 포함하는, 가상 기계 명령 처리 방법.
  13. 가상 기계 명령들을 처리하기 위한 장치에 있어서,
    원시 명령 세트를 가지고 원시 명령들을 실행하도록 구성된 프로세서(110)와,
    상기 가상 기계 명령들을 저장하도록 구성된 명령 메모리(150)와,
    상기 명령 메모리로부터 가상 기계 명령들을 페치하고, 상기 페치된 가상 기계 명령들을 상기 프로세서(110)에 의하여 실행가능한 원시 명령들로 처리하도록 구성되어, 조건부 가상 기계 명령들을 식별하고, 상기 조건 제어 변수의 값이 상기 프로세서에 의하여 전송되는 동안 가상 기계 명령들을 추론적으로 처리할지의 여부를 결정하고, 상기 조건 제어 변수의 수신시에 상기 추론적으로 처리된 가상 기계 명령들을 확인 또는 반전시키는 프리프로세서(150)와,
    상기 프로세서로부터 수신된 상기 조건 제어 변수의 값을 저장하도록 구성된 제어 레지스터(180)와,
    처리될 다음 가상 기계 명령을 지시하도록 구성된 가상 기계 명령 카운터와,
    가정된 제어 변수의 값을 저장하도록 구성된 가정 변수 레지스터와,
    상기 프리프로세서가 상기 조건 제어 변수의 값에 관한 가정을 했는지의 여부를 지시하도록 구성된 추론 모드 비트와,
    상기 제어 변수의 값이 전송되는 동안 추론 모드 비트들을 저장하도록 구성된 추론 모드 히스토리를 포함하는, 가상 기계 명령 처리 장치.
  14. 제 13 항에 있어서,
    상기 프리프로세서(120)는 가상 기계 해석기(VMI) 가상 기계 하드웨어 가속기인, 가상 기계 명령 처리 장치.
  15. 제 13 항에 있어서,
    상기 프리프로세서(120)는 또한, 용이하게 반전가능한 가상 기계 명령들만을 추론적으로 처리하고, 용이하게 반전가능하지 않은 가상 기계 명령을 만났을 경우 상기 조건 제어 변수의 값이 수신될 때까지 가상 기계 명령들의 추론 처리를 중지시키도록 구성되는, 가상 기계 명령 처리 장치.
  16. 제 15 항에 있어서,
    상기 프리프로세서(120)는 또한, 추론적 처리가 중지되는 동안 및 상기 조건 제어 변수의 값이 수신될 때까지, 일련의 "비동작" 명령들을 디스패치하도록 구성되는, 가상 기계 명령 처리 장치.
  17. 제 15 항에 있어서,
    상기 프리프로세서(120)는 또한, 스택 조작들을 나타내는 가상 기계 명령들만을 추론적으로 처리하고, 스택 조작이 아닌 가상 기계 명령을 만났을 경우 상기 조건 제어 변수의 값이 수신될 때까지 가상 기계 명령들의 추론적 처리를 중지시키도록 구성되는, 가상 기계 명령 처리 장치.
  18. 제 17 항에 있어서,
    상기 프리프로세서(120)는 또한, 상기 추론적 처리가 중지되는 동안 및 상기 조건 제어 변수의 값이 수신될 때까지, 일련의 "비동작" 명령들을 디스패치하도록 구성된, 가상 기계 명령 처리 장치.
KR10-2004-7004874A 2001-10-02 2002-09-09 자바 하드웨어 가속기에 대한 추론적 실행 KR20040045467A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP01402545 2001-10-02
EP01402545.6 2001-10-02
PCT/IB2002/003646 WO2003029961A1 (en) 2001-10-02 2002-09-09 Speculative execution for java hardware accelerator

Publications (1)

Publication Number Publication Date
KR20040045467A true KR20040045467A (ko) 2004-06-01

Family

ID=8182907

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2004-7004874A KR20040045467A (ko) 2001-10-02 2002-09-09 자바 하드웨어 가속기에 대한 추론적 실행

Country Status (6)

Country Link
US (1) US7243350B2 (ko)
EP (1) EP1442363A1 (ko)
JP (1) JP2005504390A (ko)
KR (1) KR20040045467A (ko)
CN (1) CN1266591C (ko)
WO (1) WO2003029961A1 (ko)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7747989B1 (en) 2002-08-12 2010-06-29 Mips Technologies, Inc. Virtual machine coprocessor facilitating dynamic compilation
US7380242B2 (en) * 2003-05-14 2008-05-27 Mainsoft Israel Ltd. Compiler and software product for compiling intermediate language bytecodes into Java bytecodes
US8544020B1 (en) 2004-09-14 2013-09-24 Azul Systems, Inc. Cooperative preemption
JP2009069960A (ja) * 2007-09-11 2009-04-02 Nec Electronics Corp 分岐予測装置、分岐予測方法、及びマイクロプロセッサ
US9928071B1 (en) 2008-05-02 2018-03-27 Azul Systems, Inc. Enhanced managed runtime environments that support deterministic record and replay
US10698708B2 (en) * 2009-08-04 2020-06-30 International Business Machines Corporation Optimizing just-in-time compilation in a network of nodes
US9152437B2 (en) * 2010-10-28 2015-10-06 Hewlett-Packard Development Company, L.P. Dynamically installing image processing
US9342432B2 (en) 2011-04-04 2016-05-17 International Business Machines Corporation Hardware performance-monitoring facility usage after context swaps
US8868886B2 (en) 2011-04-04 2014-10-21 International Business Machines Corporation Task switch immunized performance monitoring
CN102902581B (zh) 2011-07-29 2016-05-11 国际商业机器公司 硬件加速器及方法、中央处理单元、计算设备
US20130055033A1 (en) 2011-08-22 2013-02-28 International Business Machines Corporation Hardware-assisted program trace collection with selectable call-signature capture
US9836316B2 (en) * 2012-09-28 2017-12-05 Intel Corporation Flexible acceleration of code execution
CN103294518B (zh) * 2012-12-31 2016-04-27 北京北大众志微系统科技有限责任公司 一种解释器中间接跳转预测方法及系统
US9934041B2 (en) 2015-07-01 2018-04-03 International Business Machines Corporation Pattern based branch prediction
US10866805B2 (en) * 2018-01-03 2020-12-15 Arm Limited Speculation barrier instruction

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4477872A (en) * 1982-01-15 1984-10-16 International Business Machines Corporation Decode history table for conditional branch instructions
WO1985000453A1 (en) * 1983-07-11 1985-01-31 Prime Computer, Inc. Data processing system
US4764861A (en) * 1984-02-08 1988-08-16 Nec Corporation Instruction fpefetching device with prediction of a branch destination for each branch count instruction
JPH0769818B2 (ja) * 1984-10-31 1995-07-31 株式会社日立製作所 デ−タ処理装置
JPH0789319B2 (ja) * 1985-04-22 1995-09-27 株式会社日立製作所 デ−タ処理装置における先行制御装置
DE3752100T2 (de) * 1986-01-07 1997-12-11 Nec Corp Befehlsvorabrufgerät mit einer Schaltung zum Prüfen der Vorhersage eines Verzweigungsbefehls vor seiner Ausführung
JP2603626B2 (ja) * 1987-01-16 1997-04-23 三菱電機株式会社 データ処理装置
US5228131A (en) * 1988-02-24 1993-07-13 Mitsubishi Denki Kabushiki Kaisha Data processor with selectively enabled and disabled branch prediction operation
US5136696A (en) * 1988-06-27 1992-08-04 Prime Computer, Inc. High-performance pipelined central processor for predicting the occurrence of executing single-cycle instructions and multicycle instructions
CA2045791A1 (en) * 1990-06-29 1991-12-30 Richard Lee Sites Branch performance in high speed processor
US5450560A (en) * 1992-12-21 1995-09-12 Motorola, Inc. Pointer for use with a buffer and method of operation
US5454117A (en) * 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
US6093213A (en) * 1995-10-06 2000-07-25 Advanced Micro Devices, Inc. Flexible implementation of a system management mode (SMM) in a processor
US6341348B1 (en) * 1998-12-03 2002-01-22 Sun Microsystems, Inc. Software branch prediction filtering for a microprocessor
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
JP3513038B2 (ja) * 1998-12-10 2004-03-31 富士通株式会社 命令フェッチ制御装置
US6338133B1 (en) * 1999-03-12 2002-01-08 International Business Machines Corporation Measured, allocation of speculative branch instructions to processor execution units
US6990658B1 (en) * 1999-10-13 2006-01-24 Transmeta Corporation Method for translating instructions in a speculative microprocessor featuring committing state
US6854048B1 (en) * 2001-08-08 2005-02-08 Sun Microsystems Speculative execution control with programmable indicator and deactivation of multiaccess recovery mechanism

Also Published As

Publication number Publication date
CN1266591C (zh) 2006-07-26
CN1561481A (zh) 2005-01-05
WO2003029961A1 (en) 2003-04-10
US20030084271A1 (en) 2003-05-01
JP2005504390A (ja) 2005-02-10
US7243350B2 (en) 2007-07-10
EP1442363A1 (en) 2004-08-04

Similar Documents

Publication Publication Date Title
US10268480B2 (en) Energy-focused compiler-assisted branch prediction
JP5917616B2 (ja) 事前通知技術を用いる、プログラムのシーケンシャルフローを変更するための方法および装置
US6453411B1 (en) System and method using a hardware embedded run-time optimizer
US5136697A (en) System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
EP0817996B1 (en) Software emulation system with dynamic translation of emulated instructions for increased processing speed
US6185676B1 (en) Method and apparatus for performing early branch prediction in a microprocessor
US5421020A (en) Counter register implementation for speculative execution of branch on count instructions
US6654875B1 (en) Dual microcode RAM address mode instruction execution using operation code RAM storing control words with alternate address indicator
US6263427B1 (en) Branch prediction mechanism
US5949995A (en) Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code
US5615386A (en) Computer architecture for reducing delays due to branch instructions
KR20040045467A (ko) 자바 하드웨어 가속기에 대한 추론적 실행
JPH1091455A (ja) キャッシュ・ヒット/ミスにおける分岐
KR100258650B1 (ko) 에뮬레이션 문맥 스위치 저장 및 복구를 수행하는 방법 및 프로세서
JP2006520964A (ja) 分岐ターゲットに基づいて分岐予測をするための方法および装置
JP2006520964A5 (ko)
US8250344B2 (en) Methods and apparatus for dynamic prediction by software
JP3486690B2 (ja) パイプライン方式プロセッサ
EP0550289A2 (en) A mechanism to detect stores into the instruction stream
US7356673B2 (en) System and method including distributed instruction buffers for storing frequently executed instructions in predecoded form
CN110704108B (zh) 解释执行字节码指令流的方法及装置
KR20040071446A (ko) 쓰레드 바이너리 컴파일러에 의하여 프로그램에서 여러개의 쓰레드를 다이내믹하게 추출하는 컴퓨터 시스템 및그 동시 다중 쓰레딩 방법
US20030093456A1 (en) Low overhead exception checking
González A survey of branch techniques in pipelined processors
JPH07262006A (ja) 分岐ターゲットアドレスキャッシュを備えたデータプロセッサ

Legal Events

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