KR101731742B1 - 결합된 분기 타깃 및 프레디킷 예측 - Google Patents

결합된 분기 타깃 및 프레디킷 예측 Download PDF

Info

Publication number
KR101731742B1
KR101731742B1 KR1020157010585A KR20157010585A KR101731742B1 KR 101731742 B1 KR101731742 B1 KR 101731742B1 KR 1020157010585 A KR1020157010585 A KR 1020157010585A KR 20157010585 A KR20157010585 A KR 20157010585A KR 101731742 B1 KR101731742 B1 KR 101731742B1
Authority
KR
South Korea
Prior art keywords
predicate
instructions
prediction
predicted
branch target
Prior art date
Application number
KR1020157010585A
Other languages
English (en)
Other versions
KR20150052350A (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 KR20150052350A publication Critical patent/KR20150052350A/ko
Application granted granted Critical
Publication of KR101731742B1 publication Critical patent/KR101731742B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

실시예는 결합된 분기 타깃 및 프레디킷 예측을 이용하는 프로그램의 실행 중에 예측 프레디킷 및 분기 타깃과 연관된 방법, 시스템 및 컴퓨터 판독 가능 매체를 제공한다. 예측은 프로그램 내 블록 사이에서 명령어 블록 내 프레디킷 및 분기를 나타내는 하나 이상의 예측 제어 흐름 그래프를 이용하여 만들어질 수 있다. 예측 제어 흐름 그래프는 그래프 내 각각의 노드가 프레디킷 명령어와 연관되고 각각의 노드가 다른 블록으로 점프하는 분기 타깃과 연관되도록 트리로 구성될 수 있다. 블록의 실행 중에, 예측 생성기는 제어 포인트 히스토리를 가지고 예측을 생성할 수 있다. 트리를 통하여 예측에 의해 제안된 경로를 따르면, 프레디킷 값 및 분기 타깃 양자가 예측될 수 있다. 다른 실시예가 설명되고 청구될 수 있다.

Description

결합된 분기 타깃 및 프레디킷 예측{COMBINED BRANCH TARGET AND PREDICATE PREDICTION}
실행 중에 조건부 컴퓨터 명령어(conditional computer instruction)의 동적인 예측을 향상시키기 위해 다양한 기법이 이용 가능하다. 조건부 명령어의 예측은 보통 그 실행이 조건부 명령어의 결과에 의존하게 되는 이후의 명령어를 더 잘 선택하는 데 이용되거나 그 이후의 명령어의 실행을 가속화하는 데 이용된다. 예측 기법 중에서, 분기 예측(branch prediction) 및 프레디케이션(predication)이 종종 사용된다. 분기 예측은 보통 프로그램 내 조건부 명령어가 두 개의 가능한 분기 위치(또는 "타깃")로 이어지도록 컴파일(compile)되는 경우 이용된다. 분기 예측기(branch predictor)에서 이용되는 분기 타깃 예측은 또한 비조건부 점프 타깃(jump target)을 식별하는 데 사용될 수 있다. 이러한 기법에서, 현재 조건부 명령어의 실행 이전에 얻어지는 분기 선택에 관한 히스토리(history)가 검사되어, 어느 하나의 또는 다른 분기가 실행을 위해 스케줄링 되어야 하는 것을 예측할 수 있다.
프레디케이션에서는, 조건부 명령어와 연관된 명령어의 세트들이 불린 값(Boolean value)과 같은 프레디킷(predicate) 값과 연관되도록 컴파일되고 이러한 프레디킷은 보통 별도로 평가된다. 이러한 기법에서는, (조건부의 값에 기초한) 두 세트의 명령어가 별도로 평가되며, 그 관련된 프레디킷 값이 평가 이후의 결과가 아닌 명령들로부터의 결과들은 버려지거나 폐기될 수 있다. 프레디킷 값은 예컨대, 프레디킷 값의 히스토리를 입력으로 이용하여 예측 기법을 실행시킴으로써 예측될 수 있다.
그러나, 이러한 기법을 이용하는 현재의 시스템과 특히 명령어들을 명령어 블록들로 구성하는 시스템은 어려움을 겪고 있다. 분기 예측의 이용 만으로는, 분기 또는 점프 타깃의 결과 중 하나를 예측하는 양자 모두의 경우, 명령어의 블록 내에서 제어 명령어들의 동시 예측 기능을 제공할 수 없게 되며, 따라서 종종 프레디케이션의 형태를 취하게 된다. 프레디케이션은, 반대로, 블록 경계를 점프하는 것에 적합하지 않다. 프레디킷 예측을 직렬화할 수 있는 기존의 프레디케이션 기법은 추후의 프레디킷들을 갖는 명령어들이 이전에 발생한 프레디킷들을 기다리도록 강제됨에 따라 추가적인 오버헤드(overhead)를 겪게 된다. 이러한 기법들을 결합하고자 하는 시스템에서, 분기 예측 및 프레디킷 예측을 이용하고자 한다면 다중 데이터 구조가 요구되는 한편 상당한 실행 오버헤드가 발생하게 된다. 또한, 현재 시스템에서, 분기는 개재되는 프레디킷에 대한 정보 없이 블록 사이에서 예측되고, 이들 분기는 더 드문 명령어 히스토리로 예측되어 그 예측 정확도가 떨어질 수 있다.
일 실시예에서, 컴퓨터 명령어의 실행 시간 예측을 위한 컴퓨터 구현 방법은, 컴퓨팅 장치에서 제어 포인트 히스토리에 적어도 부분적으로 기초하여 결합된 프레디킷 및 분기 타깃 예측을 생성하는 단계; 컴퓨팅 장치에서 결합된 프레디킷 및 분기 타깃 예측에 적어도 부분적으로 기초하여 하나 이상의 예측된 프레디킷된 명령어(predicated instruction)를 실행하는 단계를 포함할 수 있다. 이 방법은 결합된 프레디킷 및 분기 타깃 예측에 적어도 부분적으로 기초하여 예측된 분기 타깃 위치에서 컴퓨팅 장치 상의 실행을 계속하는 단계를 더 포함할 수 있다.
다른 실시예에서, 컴퓨터 명령어의 예측 런타임(runtime) 실행을 위한 시스템은 하나 이상의 컴퓨터 프로세서와, 입력으로서 프레디킷 및/또는 분기의 히스토리를 수락하고 하나 이상의 프로세서에 의한 동작에 응답하여 수락된 히스토리에 기초한 결합된 프레디킷 및 분기 타깃 예측을 생성하도록 구성되는 결합된 예측 생성기를 포함할 수 있다. 시스템은 또한 하나 이상의 프로세서를 제어하도록 구성된 명령어 인출 및 실행 제어를 포함할 수 있는데, 이는 하나 이상의 프로세서에 의한 동작에 응답하여 결합된 프레디킷 및 분기 타깃 예측으로부터 획득된 예측된 프레디킷 값에 기초하여 하나 이상의 프레디킷된 명령어를 실행하도록 구성되는 한편, 예측된 분기 타깃 위치에서 인출(fetched)된 명령어의 실행을 계속하도록 구성될 수 있다. 예측된 분기 타깃 위치는 예측된 프레디킷 값에 적어도 부분적으로 기초할 수 있다.
다른 실시예에서, 제품은 유형의 컴퓨터 판독 가능 매체 및 유형의 컴퓨터 판독 가능 매체에 저장되는 복수의 컴퓨터 실행 가능 명령어를 포함할 수 있다. 컴퓨터 실행 가능 명령어는, 기기의 실행에 응답하여 기기로 하여금 프레디킷된 명령어 및 하나 이상의 분기 타깃을 가지는 코드의 제1 블록에 대하여 실행하기 위한 명령어를 스케줄링하기 위한 동작을 수행하도록 할 수 있다. 동작은 종전에 실행된 하나 이상의 명령어에 적어도 부분적으로 기초하여 결합된 프레디킷 및 분기 타깃 예측을 식별하는 것을 포함할 수 있다. 예측은 코드의 제1 블록에서 프레디킷된 명령어에 대한 하나 이상의 예측된 프레디킷 값을 포함할 수 있다. 동작은 또한, 컴퓨팅 장치에서, 예측된 프레디킷 값에 적어도 부분적으로 기초하여 블록에서 프레디킷된 명령어 중에서 하나 이상의 예측된 프레디킷된 명령어를 실행하는 것을 포함한다. 동작은 또한 예측된 프레디킷된 명령어에 기초하여 코드의 제2 블록을 가리키는 예측된 분기 타깃 위치를 예측하는 것 및 코드의 제2 블록의 실행을 계속하는 것을 포함할 수 있다.
전술한 요약은 예시적인 것일 뿐이고, 어떤 방식으로든 제한을 의도한 것은 아니다. 상술한 예시적인 태양, 실시예 및 특징들에 더하여, 추가의 태양, 실시예 및 특징들은 도면과 이하의 상세한 설명을 참조함으로써 분명하게 될 것이다.
도 1은 결합된 분기 타깃 및 프레디킷 예측 시스템의 선택된 컴포넌트에 관한 블록도를 도시하고,
도 2는 결합된 분기 타깃 및 프레디킷 예측에 기초한 명령어 예측의 블록도를 도시하고,
도 3은 프로그램 코드로부터 명령어의 블록의 생성에 관한 연속적인 레벨의 블록도를 도시하고,
도 4는 코드 블록에 대한 예측 제어 흐름 그래프의 블록도를 도시하고,
도 5는 결합된 분기 타깃 및 프레디킷 예측을 이용하는 프로그램을 생성하기 위한 프로세스를 도시하고,
도 6은 결합된 분기 타깃 및 프레디킷 예측을 이용하여 분기 타깃 및 프레디킷을 예측하기 위한 프로세스를 도시하고,
도 7은 결합된 분기 타깃 및 프레디킷 예측을 생성하기 위한 프로세스를 도시하고,
도 8은 결합된 분기 타깃 및 프레디킷 예측에 기초하여 명령어를 스케줄링 하기 위한 프로세스를 도시하고,
도 9는 앞서 설명된 방법의 다양한 태양을 실시하도록 구성되는 예시적인 컴퓨팅 장치를 도시하고,
도 10은 장치가 앞서 설명된 방법의 다양한 태양을 실시하는 것이 가능하도록 구성된 명령어를 가지는 예시적인 제품을 도시하며, 모두 본 개시의 다양한 실시예에 따라 배열된다.
이하의 상세한 설명에서, 여기의 일부를 구성하는 첨부 도면에 대한 참조가 이루어진다. 도면에서, 유사한 부호는, 문맥에서 다른 지시가 없다면, 일반적으로 유사한 구성요소를 식별한다. 상세한 설명, 도면, 및 청구항에서 기술된 실시예들은 제한하는 것으로 의미되지 않는다. 여기에 제시된 대상의 범위와 사상을 벗어나지 않고, 다른 실시예가 이용될 수 있고, 다른 변형이 이루어질 수 있다. 여기에서 일반적으로 기술되고 도면에서 도시된 바와 같은 본 개시의 태양들이 다양한 다른 구성으로 배열, 대체, 조합, 분리, 및 설계될 수 있음과, 이 모두가 여기에서 명확히 고려됨이 쉽게 이해될 것이다.
본 개시는, 그 중에서도, 결합된 분기 타깃 및 프레디킷 예측을 이용하는 프레디킷과 분기 타깃의 예측에 관한 방법, 기기, 시스템 및 컴퓨터 판독 가능 매체에 관련된다.
개시된 실시예는, 컴퓨팅 장치에 의한 프로그램의 실행을 촉진시키기 위하여 분기 타깃 및 프레디킷 예측 양자에 대한 결합된 구조를 이용하는 것과 연관될 수 있는 기법, 방법, 기기 및 제품을 포함한다. 다양한 실시예에서, 이러한 예측은 블록-극소 구조(block-atomic architecture) 또는 프로그램을 명령어의 프레디킷된 기본 블록으로 분할하는 기타 구조로 만들어질 수 있다. 기타 실시예에서, 여기에서 설명된 기법은 분기 및 프레디킷을 혼합하는 기타 구조에서 이용될 수 있다. 다양한 실시예에서, 예측은 명령어 블록 내 프레디킷 및 블록 간의 분기를 나타내는 하나 이상의 제어 흐름 그래프를 이용하여 만들어질 수 있다. 컴파일 중에, 프로그램은 블록들 및 각각의 블록과 연관되도록 생성되는 하나 이상의 예측 제어 흐름 그래프로 분할될 수 있다. 예측 제어 흐름 그래프는 그래프 내 각각의 노드(node)가 프레디킷과 연관되고, 각각의 에지(edge)는 프레디킷된 명령어와 연관되며, 각각의 리프는 다른 블록으로 점프하는 제어 명령어와 연관되도록 트리(tree)로서 구성될 수 있다. 이후, 블록의 실행 중에, 예측 생성기는 마지막 n 프레디킷들의 히스토리와 같은 제어 포인트 히스토리를 가지고, 예측을 생성할 수 있다. 다양한 실시예에서, 예측은 다양한 레벨의 제어 흐름 그래프에 대한 한 세트의 프레디킷 값으로서 생성될 수 있으며, 이와 같이 예측은 블록의 프레디킷 명령어에 대한 예측을 포함할 수 있다.
이러한 예측된 프레디킷 값을 이용함으로써, 명령어 인출 및 실행 제어는 트리의 횡단에 따른 프레디킷된 명령어를 실행을 위해 예측 및 스케줄링하여 어떠한 프레디킷에 위 예측을 적용할 것인지 결정할 수 있다. 설명된 실시예에서는 또한 제어 흐름 그래프를 이용할 수 있으며, 여기서는 예측된 프레디킷 값을 따라 그래프의 횡단이 리프로 이어지고 그 결과 분기 타깃으로 이어지도록 설명된다. 다양한 실시예에서, 분기 타깃은 타깃 명령어 주소를 생성하는 조건부 및/또는 무조건부 분기를 지칭할 수 있다. 이러한 횡단을 수행함으로써, 명령어 인출 및 실행 제어는 분기 타깃을 예측할 수 있고, 그 결과 실행될 다음의 코드 블록을 예측할 수 있다. 이와 같이, 여기에서 개시된 실시예는 단일의 융합된 예측의 생성의 이용을 통하여 프레디킷 및 분기 타깃의 예측을 조합할 수 있다. 이는 종래 기술 분야의 시스템 및 기법과 비교했을 때 더 낮은 전력 및/또는 더 높은 예측 정확도를 제공한다.
다양한 실시예에서, 예측 생성은 병렬 예측 생성 기법의 이용을 통하여 더 효율적으로 이루어질 수 있다. 병렬 예측 생성은 제어 포인트 히스토리에 기초하여 제1 프레디킷 레벨에 대한 프레디킷 값을 생성하는 한편, 또한 동시에 더 낮은 레벨에 대한 가능한 값을 생성함으로써 수행될 수 있다. 적절한 수의 레벨이 동작된 이후에, 더 높은 레벨로부터의 값은 더 낮은 레벨에 대한 가능한 값을 좁히는 데 이용될 수 있다.
예시로서, 예측 생성기는 10의 프레디킷 제어 포인트 히스토리 길이를 가지고 블록에 대해 3개의 레벨의 프레디킷을 예측하는 것으로 할당된다고 가정한다. 다양한 실시예에서, 예측 생성기는 첫번째 예측에 대하여 10비트 히스토리를 이용해 검색(look-up)을 할 수 있다. 동시에, 예측 생성기는 첫번째 검색의 결과에 대한 두 가지 가능성과 함께 가장 최근의 9비트 히스토리를 이용하여 두 개의 검색을 수행하여 두 번째 레벨의 프레디킷 값을 얻을 수 있다. 마찬가지로, 프레디킷 생성기는 세 번째 값을 구하기 위하여 4개의 검색을 수행할 수 있다. 이러한 동시 생성 이후에, 예측 생성기는 더 높은 수준의 결과에 기초하여 특정한 더 낮은 레벨의 결과를 선택하고 나머지를 버릴 수 있다. 이러한 기법이 순차화된 생성 시스템 보다 예측 값에 대한 더 많은 검색을 요구할 수 있는 반면, 개별 프레디킷 값의 생성이 긴 대기시간(latency)을 가지는 시나리오에서는, 이러한 병렬화된 기법이 속도 증가를 제공할 수 있다.
도 1은 다양한 실시예에 따른 결합된 분기 타깃 및 프레디킷 예측 시스템의 선택된 컴포넌트에 대한 블록도를 도시한다. 도 1의 예시에서, 컴파일러(110)는 하나 이상의 실행 가능한 프로그램으로의 컴파일을 위하여 하나 이상의 프로그램 파일(105) 수신 할 수 있다. 다양한 실시예에서, 컴파일러(110)는 실행 가능한 코드(이하, 단순히 "코드"라 또한 지칭함)의 하나 이상의 블록을 생산하도록 동작할 수 있는데, 이들 블록은 예측 제어 흐름 그래프(125)와 같은 프레디킷된 명령어를 나타내는 제어 흐름 그래프 및 분기(129)와 같이 그래프를 연결하는 분기와 연관될 수 있다. 다양한 실시예에서, 이러한 블록들은 극소 블록일 수 있다.
코드의 이러한 블록들은 이후, 이하에서 더 상세히 설명될 결합된 분기 타깃 및 프레디킷 예측을 이용하여 프레디킷 값 및 분기 타깃의 예측을 수행하도록 구성될 수 있는 런타임 환경(140)에서 실행될 수 있다. 도시된 바와 같이, 런타임 환경(140)의 부분으로서 실행될 예측 생성기(150)는 제어 포인트 히스토리(145)와 같은 제어 포인트 히스토리 상에 동작하여, 결합된 예측(155)과 같은 결합된 분기 타깃 및 프레디킷 예측을 생성하도록 구성될 수 있다. 다양한 실시예에서, 이러한 명령어 히스토리는 과거 프레디킷 값, 과거 분기 타깃 값 또는 양자의 조합을 포함할 수 있다. 다양한 실시예에서, 예측 생성기(150)는, 전체적으로 또는 부분적으로, 제어 포인트 히스토리에 기초하여 하나 이상의 예측 값을 검색하는 검색 테이블로서 구현될 수 있다. 추가적으로, 예측 생성기(150)는 예측 생성의 성능을 향상 시키도록 하나 이상의 병렬화된 검색(또는 기타 프레디킷 값 생성 기법)을 수행할 수 있다.
생성된 결합된 예측(155)은 명령어의 블록(157)에 관한 정보와 함께 명령어 인출 및 실행 제어(160)에 의해 이용되어, 실행을 위한 프레디킷된 명령어를 표시하고 분기 타깃을 예측하여 코드의 분기된 블록의 실행을 스케줄링하게 된다. 다양한 실시예에서, 명령어 인출 및 실행 제어(160)는 결합된 예측(155)에 기초하여 프레디킷된 명령어를 스케줄링하기 위한 명령어 스케줄러를 포함할 수 있다. 다양한 실시예에서, 명령어 인출 및 실행 제어(160)는 결합된 예측(155)에 기초하여 타깃을 예측하고 그 타깃에 기초하여 실행을 위한 명령어를 인출하도록 인출 제어 로직을 포함할 수 있다. 이러한 예측 생성 및 명령어 예측의 구체적인 예시는 이하에서 추가적으로 설명될 것이다. 다양한 실시예에서, 런타임 환경(140)은 그 자체가 컴파일러(110)에 의해 생성될 수 있는 런타임 관리자 또는 기타 적절한 소프트웨어에 의해 제공될 수 있다.
도 2는 다양한 실시예에 따라 결합된 분기 타깃 및 프레디킷 예측에 기초한 명령어 예측의 블록도를 도시한다. 도시된 바와 같이, 도시된 실시예에 있어서, 프로그램의 실행은 분기 타깃(210)과 같은 분기 타깃으로 이어지는 프레디킷된 명령(200)과 같은 하나 이상의 프레디킷된 명령어의 실행의 형태를 가질 수 있다. 이러한 분기 타깃은 이후, 연관된 프레디킷된 명령어와 함께 실행되어야 하는 명령어의 다음 블록을 나타낸다. 다양한 실시예에서, 여기에서 이용된 결합된 분기 타깃 및 프레디킷 예측은, 명령어의 블록에 대하여, 프리디킷 값의 전체 블록 가치 및 블록 중에서 분기 타깃에 대한 값을 예측할 수 있다. 예측의 이러한 세트는 점선(220)으로 경계진 영역 내에 예시적인 명령어 및 타깃에 의해 도시된다. 예시적인 명령어 및 타깃은 분기 타깃(음영 삼각형)으로 이어지는, 3개의 예측된 프레디킷 값(3개의 음영 원)을 포함한다. 이러한 예측을 수행하기 위한 특정 기법이 이하에서 설명된다.
도 3은 다양한 실시예에 따라 프로그램 코드로부터 명령어의 블록의 생성에 대한 연속적인 레벨의 블록도를 도시한다. 도 3의 부분 (a)은 예시적인 C 방식 코드 단락(snippet)을 도시한다. 단락은 두 개의 가능성, 즉 명령 1) "y++" 및 2) "y--"으로 이어지는 "if (x > 0)"와 같은 조건부를 포함한다. 코드는 또한 "goto B2"와 같은 명시적인 분기 명령어를 포함한다. 이러한 분기 명령어는 분기 명령어가 실행되면 분기가 이루어져야 함을 나타낸다.
도 3의 부분 (b)는 컴파일 이후에 코드의 중간 표현을 도시한다. 특히, 부분 3(b)는 블록 내 조건부 표현이 어떻게 프레디킷된 명령으로서 표현되었는지를 도시한다. 따라서, 도시된 예시에서, 위에서 논의된 조건부 "if (x > 0)"의 결과는 "Pgt p0, r0, 0" 행에서 프레디킷(p0)으로 표현되었다. 이러한 행에서, 레지스터(r0) 내 값은 값이 0보다 큰지 비교되고 그 비교의 참 또는 거짓 결과는 프레디킷(p0)의 값으로서 유지된다.
다음은 이러한 프레디킷에 의존하는 두 개의 가능한 명령어이다. 첫번째는 "add_t<p0> r1, 1" 명령어로서, 이는 p0의 값에 대하여 예측되고 p0가 "참"이면 실행되는 합산 연산이다. 마찬가지로, "sub_f<p0> r1, 1"는 프레디킷(p0)이 거짓의 값을 가지면 레지스터로(r1)부터 1을 감한다. 즉, 여기에서 설명된 기법 및 시스템은, 프레디킷의 실제 값이 알려지기 이전에 스케줄링 될 프레디킷된 명령어 중 하나를 허용하는, p0와 같은 프레디킷에 대하여 예측된 값을 제공하고, 이에 따라 블록의 실행을 잠재적으로 가속화한다.
도 3의 부분(c)는 부분(b)의 중간 표현으로부터, 컴파일러(110)와 같은 컴파일러에 의해 생성될 수 있는 명령어의 블록의 예시적인 세트를 도시한다. 도시된 바와 같이, 특히 블록 1에 의하여, 각각의 블록은 분기들로 이어지는 분기된 세트의 프레디킷된 명령어를 포함할 수 있는데, 위 분기들은 차례로 다른 블록으로 점프하기 위한 실행을 명령한다. 따라서, 블록 1이 실행되면, 하나 이상의 프레디킷된 명령어가 수행되며, 이후 다른 블록으로의 분기가 이루어진다. 분기(B3)가 이루어지면, 실행은 블록 3으로 점프한다. 다양한 실시예에서, 분기, 예컨대, 블록 1의 실행을 새로이 시작하는 분기(B1)은 블록이 다시 실행되도록 할 수 있다. 여기에서 설명된 바와 같이, 다양한 실시예에서, 명령어의 블록은 예측 제어 흐름 그래프와 연관되었다. 예측 제어 흐름 그래프는 명령어 인출 및 실행 제어가 어떠한 프레디킷된 명령어가 블록 내에서의 실행을 위하여 예측되고 스케줄링 되어야 하는지 및 어떠한 분기가 이루어지려고 하고 그 결과 실행이 현재 실행되는 블록을 빠져 나온 다음에 어떤 블록으로 진행되어야 하는지를 예측하도록 허용한다.
도 4는 다양한 실시예에 따른 코드 블록에 대한 예측 제어 흐름 그래프의 블록도를 도시한다. 논의된 바와 같이, 다양한 실시예에서, 컴파일러는, 블록에 대하여, 명령어의 특정 블록에 대한 분기 타깃 및 프레디킷된 명령어를 나타내는 예측 제어 흐름 그래프를 생성하도록 구성될 수 있다. 도시된 바와 같이, 예측 제어 흐름 그래프는 그래프(410)의 노드(p0, p1 및 p5)와 같은 노드에 의해 프레디킷을 나타내고 분기 타깃(b100, b101 및 b110)과 같은 리프로서의 분기 타깃을 나타내는 트리로 구현될 수 있다. 추가적으로, 트리에서의 에지는 예측된 명령어를 나타낼 수 있으며, 따라서 프레디킷(p0)의 값이 "참"이면, p0로부터 p4로의 에지로 나타난 명령어가 실행될 수 있다. 여기에서 논의된 바와 같이, 여기에서 설명된 기법은 이러한 예측 제어 흐름 그래프를 이용하여 한 세트의 예측 값을 식별하는 결합된 분기 타깃 및 프레디킷 예측을 생성함으로써 프레디킷 값 및 분기 타깃 양자를 예측한다. 그래프를 통하여 값을 따라감으로써, 런타임 환경(140)과 특히 명령어 인출 및 실행 제어(160)는 a)어떠한 프레디킷된 명령어가 실행할 필요가 있을지 b) 그 값이 무엇인지를 식별할 수 있다. 추가적으로, 경로를 따라감으로써, 명령어 인출 및 실행 제어(160)는 명령어의 다음 블록의 스케줄링을 위하여 분기 타깃을 식별할 수 있다. 주어진 제어 흐름 그래프는 블록의 내부 구조에 따라 상이한 길이의 경로를 포함할 수 있다. 따라서, 다양한 실시예에서, 명령어 인출 및 실행 제어(160)는 리프 노드에서 그 끝으로의 경로를 따라갈 수 있는 반면, 일부 실시예에서는 명령어 인출 및 실행 제어(160)는 경로의 종료되지 않는 이어짐 또는 그 실질적인 끝을 지나는 경로의 이어짐에 기초하여 분기 타깃을 예측할 수 있다.
다양한 실시예에서, 예측 제어 흐름 그래프는 모든 프레디킷에서 분기하는, 그래프(410)에서와 같은, 모든 프레디킷 값에 대하여 상이한 경로를 포함할 수 있다. 그러나, 일부 시나리오에서, 블록은 p0의 값과는 무관하게, 그래프에 의해 나타난 블록에 대한 제어가 다음의 p1의 값에 의존하게 되는 그래프(420)에서와 같이, 특정 프레디킷 상에서 분기하지 않을 수 있다. 그러나, 이는 트리에 상이한 에지(423 및 425)가 있는 바와 같이 동일한 명령어가 블록 내에서 실행될 것을 의미하지는 않는다. 상이한 에지(423 및 425)의 각각은 상이한 프레디킷된 명령어를 나타낼 수 있다. 추가적으로, p0의 값이 장래의 명령어에 대하여 완전히 확정적이지 않을 수 있는 한편, 다양한 실시예에서, 이 값은 여전히 특정 장래의 프레디킷 또는 분기 타깃 값과 관련이 있을 수 있다. 따라서, p0의 값은 예측 생성을 위한 제어 포인트 히스토리에서 여전히 유지될 수 있다. 이러한 예시는 도 3과 관련하여 위에서 논의된 코드에서 볼 수 있는데, 여기서 블록 1에서의 실행은 어떠한 값을 프레디킷(p0)이 가졌는지와 무관하게 프레디킷(p1)으로 진행되었다. 또한, 다양한 실시예에서, 예측 제어 흐름 그래프는 그래프 내 레벨의 수 또는 분기의 각과 같이, 그래프의 모양에 관한 정보와 연관되었을 수 있다. 이러한 모양 정보는 예측 생성 및 특히 병렬화된 예측 생성을 수행함에 있어서 유용할 수 있다.
도 5는 다양한 실시예에 따라 결합된 분기 타깃 및 프레디킷 예측을 이용하는 프로그램을 생성하기 위한 프로세스(500)를 도시한다. 도시된 바와 같이, 프로세스(500)는 동작(510)("프로그램 코드를 수신")에서 시작할 수 있다. 동작(510)에서, 컴파일 하기 위한 프로그램 코드가, 예컨대 컴파일러(110)에 의해 수신될 수 있다. 위에서 논의된 바와 같이, 다양한 실시예에서, 프로그램 코드는 하나 이상의 코드 파일을 포함할 수 있으며, 다양한 알려진 컴퓨팅 언어로 구현될 수 있다. 추가적으로, 다양한 실시예에서, 프로그램 코드는 여기에서 설명된 예측 기법을 이용하는 코드를 생성함에 있어 컴파일러를 지원하는 하나 이상의 명령어 또는 정보를 가질 수 있다. 설명의 편의를 위하여, 프로세스(500)의 동작들은 컴파일러(110)와 같은 단일 컴파일러에 기초하여 설명되지만, 다른 실시예에서는 하나 이상의 컴파일러 또는 기타 코드 분석 모듈이 이러한 동작들을 수행하는 데 이용될 수 있다.
동작(510)으로부터, 프로세스(500)는 동작(520)("프레디킷된 명령어를 생성")으로 진행할 수 있다. 동작(520)에서, 컴파일러는, 예컨대 도 3에 관하여 위에서 논의된 명령어와 같은 프레디킷된 명령어를 생성할 수 있다. 위에서 논의된 바와 같이, 이러한 프레디킷된 명령어는 조건부 표현을 식별하고 이러한 표현에 기초하여 프레디킷을 생성하는 컴파일러(110)를 적어도 부분적으로 통하여 생성될 수 있다. 동작(520)으로부터, 프로세스(500)는 동작(530)("분기 명령어를 생성")으로 진행할 수 있다. 동작(530)에서, 컴파일러(110)는 분기 명령, 예컨대, 도 3에 대하여 위에서 논의된 명령어를 생성할 수 있다. 동작(530)으로부터, 프로세스(500)는 동작(540)("블록 명령어를 생성")으로 진행할 수 있다. 동작(540)에서, 컴파일러(110)는 예측의 목적을 위하여, 명령어의 블록을 생성할 수 있다. 다양한 실시예에서, 컴파일러는 분기 명령어를 생성하고/거나 위에서 예시한 바와 같은 명백한 점프 호출에 기반하여 블록을 생성할 수 있다. 다른 실시예에서, 컴파일러는 원본 프로그램 코드에 나타난 블록을 식별하고, 원래는 점프가 코딩되지 않는 이러한 식별된 블록 사이에서라도 분기를 생성할 수 있다. 블록은 도 3에서 도시된 예시에서와 같이, 명백히 식별될 수 있거나, 유닛으로 실행되기 쉬운 명령어의 세트로서 컴파일러에 의해 인식될 수 있다.
동작(540)으로부터, 프로세스(500)는 동작(550)("블록 내 트리 정보를 인코딩")으로 진행될 수 있다. 동작(550)에서, 컴파일러는 예측 제어 흐름 그래프와 연관된 명령어의 블록의 각각의 헤더에서 이러한 예측 제어 흐름 그래프에 대한 트리 정보(또는 근사 트리 정보)를 인코딩할 수 있다. 예컨대, 전술한 바와 같이, 트리는 루트 및 리프로서의 다양한 무조건부 점프 간의 다양한 경로 상의 프레디킷의 수를 나타날 수 있다. 그러한 트리에서, 프레디킷은 노드로서의 블록, 에지로서의 프레디킷 결과/값 및 리프로서의 분기 타깃에 이용될 것이다. 다른 실시예에서, 컴파일러는 예측 생성 중에, 예측 생성기(150)가 적절한 길이의 예측을 더 쉽게 생성할 수 있도록, 트리의 깊이 또는 트리의 모양에 관련된 정보를 인코딩할 수 있다.
도 6은 다양한 실시예에 따라 결합된 분기 타깃 및 프레디킷 예측을 이용하여 분기 타깃 및 프레디킷을 예측하기 위한 프로세스(600)를 도시한다. 도시된 실시예에 있어서, 단일 블록 만에 대하여 예측을 도시되지만 프로세스(600)는 각각의 블록 단위로 수행될 수 있다. 대안적인 실시예에서, 예측은 실행 중에 요구되는 바와 같이 다수의 블록 상에서 수행될 수 있다.
따라서, 실시예에 대하여, 프로세스(600)는 동작(610)("제어 포인트 히스토리를 검색")으로 시작할 수 있다. 동작(610)에서, 런타임 환경(140), 특히 예측 생성기(150)가 제어 포인트 히스토리를 검색할 수 있다. 다양한 실시예에서, 제어 포인트 히스토리는 과거에 평가되어온 프레디킷 값의 히스토리를 포함할 수 있으며, 히스토리는 이진 스트링의 형태를 가지고/거나 미리 정의된 길이를 가질 수 있다. 예시는 도 1에서 도시된 제어 포인트 히스토리(145)일 수 있다. 다양한 실시예에서, 제어 포인트 히스토리는 또한 얻은 분기 타깃의 하나 이상의 기록을 포함할 수 있다.
동작(610)으로부터, 프로세스(600)는 동작(620)("예측을 생성")으로 진행할 수 있다. 동작(620)에서, 예측 생성기(150)는 명령어를 스케줄링 함에 있어 이용하기 위하여, 결합된 예측(155)과 같은 예측을 생성하도록 제어 포인트 히스토리(145)를 이용할 수 있다. 이러한 작용의 특정 실시예가 도 7에 대하여 이하에서 설명된다. 동작(620)으로부터, 프로세스(600)는 동작(630)으로 진행할 수 있다. 동작(630)에서, 명령어 인출 및 실행 제어(160)는, 결합된 예측(155) 및 블록 정보(157)를 이용하여, 실행을 위하여 명령어를 스케줄링한다. 이러한 작용의 특정 실시예는 도 8에 관하여 이하에서 설명된다.
도 7은 다양한 실시예에 따라 결합된 분기 타깃 및 프레디킷 예측을 생성하기 위한 프로세스(700)를 도시한다. 도 6에 관한 상기 논의와 유사하게, 프로세스(700)는 각각의 블록 단위로 수행될 수 있으며, 도시된 예시는 따라서 단일 블록에 대한 예측을 도시한다. 도시된 예시는 결합된 예측을 효율적으로 생성하기 위한 병렬화된 기법을 나타낸다. 그러나, 도시되지 않은 다양한 실시예에서, 예측 생성기(150)는 제어 포인트 히스토리를 프레디킷 값을 수신하는 검색 태이블에 입력함으로써 한번에 하나의 값 예측을 생성할 수 있다. 예측 생성기(150)는 이후, 다음 프레디킷 값을 검색하도록 갓 생성된 프레디킷 값과 함께 제어 포인트 히스토리 내 모든 가장 오래된 값을 이용하여 두 번째 검색을 진행할 수 있다. 검색은 블록에 대한 결합된 분기 타깃 및 프레디킷 예측이 생성되는 충분한 값이 찾아질 때까지 계속될 수 있다.
도시된 바와 같이, 프로세스(700)는 동작(710)("레벨 n에 대한 예측된 프레디킷된 값을 생성")에서 시작할 수 있다. 동작(710)에서, 예측 생성기(150)는 레벨 n에 대한 예측된 프레디킷 값을 생성할 수 있다. 위에서 논의된 바와 같이, 이는 검색 테이블을 포함하는 다양한 생성 방법을 이용하여 수행될 수 있다. 프로세스(700)는 동작(710)으로부터 동작(720)("레벨 n+1에 대하여 두 개의 예측된 프레디킷된 값을 생성")으로 진행할 수 있다. 동작(720)에서, 예측 생성기(150)는 제어 포인트 히스토리에서 레벨 n에 대하여 가능한 프레디킷 값들 양자를 이용하여, 레벨(n+1)에 대하여 두 개의 예측된 프레디킷 값을 생성할 수 있다. 도시된 바와 같이, 이러한 블록의 작용은, 동작(710)의 결과에 즉시 의존하지 않으면서, 동작(710)의 작용과 병렬로 수행될 수 있다. 프로세스(700)는 동작(720)으로부터 동작(730)("레벨 n+2에 대한 4개의 예측된 프레디킷된 값을 생성")으로 진행할 수 있다. 동작(720)에서, 유사한 작용이 수행되고, 예측 생성기는 레벨 n+2에 대하여 4개의 예측된 프레디킷 값을 생성할 수 있다. 레벨 n+2에 대한 4개의 예측된 프레디킷 값은 동작(710) 및 동작(720)의 결과에 대하여 가능한 값 중 전부를 이용하여 생성될 수 있다.
다음은 설명된 실시예에 따라 결합된 분기 타깃 및 프레디킷 예측을 생성하기 위한 예시이다. 예측 생성기가 11011의 현재 제어 포인트 히스토리로 길이 5의 명령어 히스토리 상에서 동작하고 있으면, 동작(710)에서, 예측 생성기(150)는 히스토리 11011을 이용하여 레벨 n에 대하여 예측된 값을 검색할 수 있다. 그러한 동작과 동시에(또는 적어도 같은 시기에), 예측 생성기(150)는 또한 명령어 히스토리(10110 및 10111)를 이용하여 레벨 n+1에 대한 검색을 수행할 수 있다. 명령어 히스토리는 히스토리 내에서 4개의 가장 최근의 히스토리 값을 나타낼 수 있다. 추가적으로, 명령어 히스토리는 동작(720)에서의 생성 동작으로부터의 두 개의 가능한 결과와 연관될 수 있다. 유사하게, 동작(730)에서, 검색이 히스토리(01100, 01101, 01110 및 01111)를 이용하여 수행될 수 있다.
동작(710, 720 또는 730)으로부터, 프로세스(700)는 동작(740)("프레디킷 값을 해결")으로 진행할 수 있다. 동작(740)에서, 동작(710, 720 및 730)의 결과가 알려진 이후에, 프레디킷 값이 해결될 수 있다. 따라서, 동작(710)으로부터의 값이 0이 되도록 결정되었으면, 입력으로서 10110이 이용된 동작(720)으로부터의 결과가 유지될 수 있다. 동작(720)으로부터의 기타 결과는 버려질 수 있다. 마찬가지로, 하나의 결과는 동작(730)으로부터 얻어질 수 있다. 도시된 예시가 3개 레벨의 병렬 프레디킷 예측을 이용하는 반면, 대안적인 실시예에서는 상이한 수의 레벨이 이용될 수 있다.
프로세스(700)는 동작(740)으로부터 동작(745)("예측된 프레디킷의 수가 블록의 수보다 크거나 같음")으로 진행할 수 있다. 동작(745)에서, 예측 생성기(150)는 예측이 명령어의 현재 블록에서 적어도 모든 프레디킷에 대하여 만들어졌는지 결정할 수 있다. 그 결과 아니라면, 프로세스(700)는 동작(710,720 및 730)으로 돌아가서 n=n+3으로 진행할 수 있다. 블록 내 모든 프레디킷에 대하여 예측이 이루어졌으면, 동작(750)("추가의 프레디킷 예측을 버림")으로 진행할 수 있다. 동작(750)에서, 추가적인 예측이 버려질 수 있다. 예컨대, 위에서 논의된 3개의 레벨의 병렬화된 예측을 이용하여, 블록 내 프레디킷의 5개 레벨이 있으면, 프로세스는 루프의 2개의 반복을 수행하고 6개의 예측된 프레디킷 값을 생성할 수 있다. 6번째 값은 이후 버려질 수 있다. 추가적으로, 일부 실시예에서, 블록이 불균형 트리(또는 기타 복잡한 트리 형태)를 그 예측 제어 흐름 그래프 내에 포함하면, 예측 생성기(150)는 주어진 트리에서 가장 긴 경로를 채우도록 충분한 예측된 프레디킷 값을 생성하도록 구성될 수 있다. 결과적으로, 예측 생성기(150)는 잠재적으로 복잡한 트리 디스크립터(descriptor)를 참조하는 연산 자원을 소비하는 것을 방지하거나 감소시킬 수 있다. 이는 또한 동작(750)에서 프레디킷 예측을 버리게 될 수 있다.
도 8은 다양한 실시예에 따라 결합된 분기 타깃 및 프레디킷 예측에 기초하여 명령어를 스케줄링하기 위한 프로세스(800)를 도시한다. 실시예에 대하여, 프로세스(800)는 동작(810)("결합된 예측에 기초하여 트리를 횡단")에서 시작할 수 있다. 동작(810)에서, 명령어 인출 및 실행 제어(160)는 결합된 예측(155)에 기초하여 예측 제어 흐름 그래프의 트리를 횡단할 수 있다. 동작(810)으로부터, 프로세스(800)는 동작(820)("트리 횡단에 기초하여 프레디킷을 예측")으로 진행할 수 있다. 동작(820)에서, 명령어 패치 및 실행 제어는 어떠한 프레디킷이 트리를 통한 경로에 기초하여 평가될 것인지 예측할 수 있다. 동작(820)으로부터, 프로세스(800)는 동작(830)("예측된 프레디킷에 기초하여 실행을 위한 프레디킷된 명령어를 스케줄링")으로 진행할 수 있다. 동작(830)으로부터, 명령어 인출 및 실행 제어(160)는 실행을 위한 이러한 예측에 기초하여 프레디킷된 명령어를 스케줄링할 수 있다. 동작(830)으로부터, 프로세스(800)는 동작(840)("횡단의 끝에서의 트리 리프에 기초하여 분기 타깃을 예측")으로 진행할 수 있다. 동작(840)으로부터, 명령어 인출 및 실행 제어는 트리 횡단에 기초하여 분기 타깃을 예측할 수 있다. 다양한 실시예에서, 명령어 인출 및 실행 제어는 횡단이 리프 노드로 이어지면, 트리 횡단의 끝에 배치된 트리 리프에 기초하여 분기 타깃을 예측할 수 있으며, 다른 실시예에서, 예측은 비중단 횡단에 기초할 수 있다. 동작(840)으로부터, 프로세스(800)는 동작(850)("실행을 위한 분기 타깃에 의해 지정된 코드 블록을 스케줄링")으로 진행할 수 있다. 동작(850)으로부터, 명령어 인출 및 실행 제어(160)는 현재 코드 블록 이후의 다음 실행을 위한 이러한 분기 타깃에 의하여 지정된 하나 이상의 명령어를 인출할 수 있다. 위에서 논의된 바와 같이, 프로세스(800)하에서, 결합된 예측(155)와 같은, 단일의 결합된 예측은 명령어의 블록에 대한 프레디킷된 명령어 및 분기 타깃 양자를 스케줄링하기 위한 충분한 정보를 제공할 수 있다. 인출된 명령어는 이후에 실행될 수 있다.
도 9는 본 개시의 적어도 일부 실시예에 따라 구성되는 예시적인 컴퓨팅 장치를 도시하는 블록도이다. 기초적인 구성(901)에서, 컴퓨팅 장치(900)는 보통 하나 이상의 프로세서(910) 및 시스템 메모리(920)를 포함할 수 있다. 메모리 버스(930)는 프로세서(910) 및 시스템 메모리(920) 사이에서 통신하기 위하여 이용될 수 있다.
요구되는 구성에 따라, 프로세서(910)는 마이크로 프로세서(μP), 마이크로 컨트롤러(μC), 디지털 신호 프로세서(DSP), 또는 그들의 임의의 조합을 포함하는 임의의 유형일 수 있으나, 이에 제한되지는 않는다. 프로세서(910)는 레벨 1 캐시(911), 레벨 2 캐시(912)와 같은 하나 이상의 레벨(level)의 캐시(cache), 프로세서 코어(913), 및 레지스터(914)를 포함할 수 있다. 예시적인 프로세서 코어(913)는 산술 논리 연산장치(arithmetic logic unit; ALU), 부동 소수점 장치(floating point unit; FPU), 디지털 신호 처리 코어(DSP Core), 또는 그들의 임의의 조합을 포함할 수 있다. 예시적인 메모리 컨트롤러(915)는 또한 프로세서(910)와 함께 사용될 수 있거나, 또는 일부 구현예에서 메모리 컨트롤러(915)는 프로세서(910)의 내적인 일부일 수 있다.
요구되는 구성에 따라, 시스템 메모리(920)는 (RAM과 같은) 휘발성 메모리, (ROM, 플래시 메모리 등과 같은) 비휘발성 메모리, 또는 그들의 임의의 조합을 포함하는 임의의 유형일 수 있으나, 이에 제한되지는 않는다. 시스템 메모리(920)는 운영 체제(921), 하나 이상의 어플리케이션(application)(922), 및 프로그램 데이터(924)를 포함할 수 있다. 어플리케이션(922)은 상기 결합된 분기 타깃 및 프레디킷 예측 생성과 명령어 예측을 구현하기 위한 로직을 제공하는 프로그래밍 명령어를 포함할 수 있다. 프로그램 데이터(924)는 결합된 분기 타깃, 프레디킷 예측, 제어 포인트 히스토리 및 코드 블록 정보와 같은 데이터(925)를 포함할 수 있다.
컴퓨팅 장치(900)는 기초적인 구성(901) 및 임의의 요구되는 장치 및 인터페이스(interface) 사이의 통신을 용이하게 하도록 추가적인 특징 또는 기능, 및 추가적인 인터페이스를 가질 수 있다. 예를 들어, 버스/인터페이스 컨트롤러(940)는 저장 인터페이스 버스(941)를 통한 기초적인 구성(901) 및 하나 이상의 데이터 저장 장치(950) 사이의 통신을 용이하게 하도록 사용될 수 있다. 데이터 저장 장치(950)는 이동식 저장 장치(951), 고정식 저장 장치(952), 또는 그 조합일 수 있다. 이동식 저장 장치 및 고정식 저장 장치의 예를 몇 가지 들자면, 플렉서블 디스크 드라이브(flexible disk drive) 및 하드 디스크 드라이브(HDD)와 같은 자기 디스크 장치, 컴팩트 디스크(CD) 드라이브 또는 디지털 다목적 디스크(DVD) 드라이브와 같은 광 디스크 드라이브, 고체 상태 드라이브(SSD), 및 테이프 드라이브 등을 포함한다. 예시적인 컴퓨터 저장 매체는 컴퓨터 판독 가능 명령, 데이터 구조, 프로그램 모듈(program module), 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술에서 구현되는 휘발성 및 비휘발성의 이동식 및 고정식 매체를 포함할 수 있다.
시스템 메모리(920), 이동식 저장 장치(951) 및 고정식 저장 장치(952)는 모두 컴퓨터 저장 매체의 예이다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, 디지털 다목적 디스크(DVD) 또는 기타 광 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 요구되는 정보를 저장하도록 사용될 수 있고, 컴퓨팅 장치(900)에 의해 액세스될 수 있는 임의의 기타 매체를 포함하나, 이에 제한되지는 않는다. 임의의 그러한 컴퓨터 저장 매체는 컴퓨팅 장치(900)의 일부일 수 있다.
컴퓨팅 장치(900)는 또한 버스/인터페이스 컨트롤러(942)를 통한 다양한 인터페이스 장치(예컨대, 출력 인터페이스, 주변 인터페이스, 및 통신 인터페이스)로부터 기초적인 구성(901)으로의 통신을 용이하게 하기 위한 인터페이스 버스(942)를 포함할 수 있다. 예시적인 출력 인터페이스(960)는 그래픽 처리 유닛(961) 및 오디오 처리 유닛(962)을 포함할 수 있으며, 이는 하나 이상의 A/V 포트(963)를 통하여 디스플레이 또는 스피커와 같은 다양한 외부 장치로 통신하도록 구성될 수 있다. 예시적인 주변 인터페이스(960)는 직렬 인터페이스 컨트롤러(971) 또는 병렬 인터페이스 컨트롤러(972)를 포함할 수 있으며, 이는 하나 이상의 I/O 포트(973)를 통하여 입력 장치(예컨대, 키보드, 마우스, 펜, 음성 입력 장치, 터치 입력 장치 등) 또는 기타 주변 장치(예컨대, 프린터, 스캐너 등)와 같은 외부 장치와 통신하도록 구성될 수 있다. 예시적인 통신 장치(980)는 네트워크 컨트롤러(981)를 포함하며, 이는 하나 이상의 통신 포트(982)를 통한 네트워크 통신 상에서의 하나 이상의 다른 컴퓨팅 장치(990)와의 통신을 용이하게 하도록 배열될 수 있다.
네트워크 통신 링크는 통신 매체의 일 예시일 수 있다. 통신 매체는 보통 컴퓨터 판독 가능 명령, 데이터 구조, 프로그램 모듈, 또는 반송파 또는 기타 전송 메커니즘과 같은 변조된 데이터 신호에서의 기타 데이터에 의해 구현될 수 있으며, 임의의 정보 전달 매체를 포함할 수 있다. "변조된 데이터 신호"는 신호에서 정보를 인코딩하는 것과 마찬가지의 방식으로 설정 또는 변환된 그 특징 중 하나 이상을 가지는 신호일 수 있다. 예시로서, 통신 매체는 유선 네트워크 또는 직접 유선 연결(direct-wired connection)과 같은 유선 매체 및 음향, 라디오 주파수(radio frequency(RF)), 마이크로파, 적외선(IR) 및 기타 무선 매체와 같은 무선 매체를 포함할 수 있다. 여기에서 사용된 바와 같은 컴퓨터 판독 가능 매체라는 용어는 유형의 저장 매체 및 통신 매체 양자를 포함할 수 있으나, 이에 제한되지 않는다.
컴퓨팅(900)는 상기 기능 중 임의의 것을 포함하는 이동 전화기, 개인 정보 단말기(personal data assistant(PDA)), 개인 미디어 플레이어 장치, 무선 웹워치 장치, 개인 해드셋 장치, 어플리케이션 전용 장치 또는 융합 장치와 같은 소형 폼팩터 휴대용(또는 모바일) 전자 장치의 부분으로서 구현될 수 있다. 컴퓨터(900)는 또한 랩탑 컴퓨터 및 랩탑이 아닌 컴퓨터 구성 양자를 포함하는 개인용 컴퓨터로서 구현될 수 있다.
여기에서 개시된 바와 같은 하나 이상의 방법을 수행하기 위한 제품 및/또는 시스템이 사용될 수 있다. 도 10은 본 개시의 다양한 실시예에 따라, 집적 회로의 컴포넌트의 이용을 계량(meter)하기 위한 컴퓨터 프로그램 제품(1000)을 가지는 예시적인 제품에 대한 블록도를 도시한다. 컴퓨터 프로그램 제품(1000)은 비휘발성 컴퓨터 판독 가능 저장 매체(1002) 및 컴퓨터 판독 가능 저장 매체(1002)에 저장된 복수의 프로그래밍 명령(1004)를 포함할 수 있다. 이러한 실시예중 다양한 것에서, 프로그래밍 명령(1004)는 장치가, 기기의 실행에 응답하여, 기기로 하여금
이전에 실행된 하나 이상의 명령어에 적어도 부분적으로 기초하여 결합된 프레디킷 및 분기 타깃 예측을 식별하는 것 - 예측은 코드의 제1 블록 내 프레디킷된 명령어에 대한 하나 이상의 예측된 프레디킷 값을 포함함-; 컴퓨팅 장치에서, 예측된 프레디킷 값에 적어도 부분적으로 기초하여 블록에서 프레디킷된 명령어 중에서 하나 이상의 예측된 프레디킷된 명령어를 실행하는 것; 예측된 프레디킷된 명령어에 기초하여, 코드의 제2 블록을 가리키는 예측된 분기 타깃을 예측하는 것; 및 코드의 제2 블록을 계속해서 실행시키는 것을 포함하는 명령어를 수행하는 것이 가능하도록 구성된다.
컴퓨터 판독가능 저장 매체(1002)는 예컨대, CDROM(comact disc read-only memory) 및 플래시 메모리와 같지만 이에 제한되지 않는 비휘발성 및 지속 메모리를 포함하지만 이에 제한되지 않는 다양한 형태를 가질 수 있다.
여기서 기술된 대상은 때때로 상이한 다른 컴포넌트 또는 요소 내에 포함되거나 접속된 상이한 컴포넌트 또는 요소를 도시한다. 도시된 그러한 아키텍처는 단순히 예시적인 것이고, 사실상 동일한 기능을 달성하는 다른 많은 아키텍처가 구현될 수 있다는 것이 이해되어야 한다. 개념적으로, 동일한 기능을 달성하기 위한 컴포넌트의 임의의 배치는 원하는 기능이 달성되도록 유효하게 "연관"된다. 이에 따라, 특정 기능을 달성하기 위해 여기서 결합된 임의의 두 개의 컴포넌트는, 아키텍처 또는 중간 컴포넌트와는 무관하게, 원하는 기능이 달성되도록 서로 "연관"된 것으로 볼 수 있다. 마찬가지로, 연관된 두 개의 컴포넌트는 또한 원하는 기능을 달성하기 위해 서로 "동작적으로 접속"되거나 또는 "동작적으로 연결"되는 것으로 간주될 수 있고, 그와 같이 연관될 수 있는 임의의 두 개의 컴포넌트는 또한 원하는 기능을 달성하기 위해 서로 "동작적으로 연결가능"한 것으로 볼 수 있다. 동작적으로 연결 가능하다는 것의 특정 예는 물리적으로 양립가능(mateable)하고 및/또는 물리적으로 상호작용하는 컴포넌트 및/또는 무선으로 상호작용이 가능하고 및/또는 무선으로 상호작용하는 컴포넌트 및/또는 논리적으로 상호작용하고 및/또는 논리적으로 상호작용이 가능한 컴포넌트를 포함하지만, 이에 한정되는 것은 아니다.
여기에서 설명된 대상의 다양한 실시예는 그 일의 본질을 다른 당업자에게 전달하도록 당업자에 의해 공통적으로 사용되는 용어를 이용하여 설명된다. 대안적인 구현예가 그러나 설명된 태양 중 일부만으로 실시될 수 있다는 것이 당업자에게 분명하여야 한다. 설명을 위하여, 특정 수, 재료 및 구성은 예시의 전반적인 이해를 제공하도록 제시된다. 그러나, 대안적인 실시예가 특정 세부 사항 없이 실시될 수 있다는 것이 당업자에게 명백하여야 한다. 기타 예시에서, 잘 알려진 특징은 예시적인 실시예를 모호하지 않도록 생략되거나 단순화된다.
여기에서 실질적으로 임의의 복수 및/또는 단수의 용어의 사용에 대하여, 당업자는 맥락 및/또는 응용에 적절하도록, 복수를 단수로 및/또는 단수를 복수로 해석할 수 있다. 다양한 단수/복수의 치환은 명확성을 위해 여기에서 명시적으로 기재될 수 있다.
당업자라면, 일반적으로 본 개시에 사용되며 특히 첨부된 청구범위(예를 들어, 첨부된 청구범위)에 사용된 용어들이 일반적으로 "개방적(open)" 용어(예를 들어, 용어 "포함하는"은 "포함하지만 이에 제한되지 않는"으로, 용어 "갖는"는 "적어도 갖는"으로, 용어 "포함하다"는 "포함하지만 이에 한정되지 않는" 등으로 해석되어야 함)로 의도되었음을 이해할 것이다. 또한, 당업자라면, 도입된 청구항의 기재사항의 특정 수가 의도된 경우, 그러한 의도가 청구항에 명시적으로 기재될 것이며, 그러한 기재사항이 없는 경우, 그러한 의도가 없음을 또한 이해할 것이다. 예를 들어, 이해를 돕기 위해, 이하의 첨부 청구범위는 "적어도 하나" 및 "하나 이상" 등의 도입 구절의 사용을 포함하여 청구항 기재사항을 도입할 수 있다. 그러나, 그러한 구절의 사용이, 부정관사 "하나"("a" 또는 "an")에 의한 청구항 기재사항의 도입이, 그러한 하나의 기재사항을 포함하는 실시예로, 그러한 도입된 청구항 기재사항을 포함하는 특정 청구항을 제한함을 암시하는 것으로 해석되어서는 안되며, 동일한 청구항이 도입 구절인 "하나 이상" 또는 "적어도 하나" 및 "하나"("a" 또는 "an")과 같은 부정관사(예를 들어, "하나"는 "적어도 하나" 또는 "하나 이상"을 의미하는 것으로 일반적으로 해석되어야 함)를 포함하는 경우에도 마찬가지로 해석되어야 한다. 이는 청구항 기재사항을 도입하기 위해 사용된 정관사의 경우에도 적용된다. 또한, 도입된 청구항 기재사항의 특정 수가 명시적으로 기재되는 경우에도, 당업자라면 그러한 기재가 일반적으로 적어도 기재된 수(예를 들어, 다른 수식어가 없는 "두개의 기재사항"을 단순히 기재한 것은, 일반적으로 적어도 두 개의 기재사항 또는 두 개 이상의 기재사항을 의미함)를 의미하도록 해석되어야 함을 이해할 것이다. 또한, "A, B 및 C,등 중의 적어도 하나"와 유사한 규칙이 사용된 경우에는, 일반적으로 그러한 해석은 당업자가 그 규칙을 이해할 것이라는 전제가 의도된 것이다(예를 들어, "A, B 및 C 중의 적어도 하나를 갖는 시스템"은, A만을 갖거나, B만을 갖거나, C만을 갖거나, A 및 B를 함께 갖거나, A 및 C를 함께 갖거나, B 및 C를 함께 갖거나, A, B, 및 C를 함께 갖는 시스템을 포함하지만 이에 제한되지 않음). "A, B 또는 C 중의 적어도 하나"와 유사한 규칙이 사용된 경우에는, 일반적으로 그러한 해석은 당업자가 그 규칙을 이해할 것이라는 전제가 의도된 것이다(예를 들어, "A, B 또는 C 중의 적어도 하나를 갖는 시스템"은, A만을 갖거나, B만을 갖거나, C만을 갖거나, A 및 B를 함께 갖거나, A 및 C를 함께 갖거나, B 및 C를 함께 갖거나, A, B, 및 C를 함께 갖는 시스템을 포함하지만 이에 제한되지 않음). 또한 당업자라면, 실질적으로 어떠한 이접 접속어(disjunctive word) 및/또는 두 개 이상의 대안적인 용어들을 나타내는 구절은, 그것이 상세한 설명, 청구범위 또는 도면에 있는지와 상관없이, 그 용어들 중의 하나, 그 용어들 중의 어느 하나, 또는 그 용어들 두 개 모두를 포함하는 가능성을 고려했음을 이해할 것이다. 예를 들어, "A 또는 B"라는 구절은 "A" 또는 "B" 또는 "A 및 B"의 가능성을 포함하는 것으로 이해될 것이다.
다양한 동작이 실시예를 이해함에 있어 도움이 될 수 있는 방식으로, 다수의 개별의 동작으로 설명될 수 있으나, 설명의 순서는 이러한 동작들이 순서 의존적이라는 것을 암시하는 것으로 이해되어서는 안된다. 또한, 실시예는 설명된 바 보다 더 적은 동작을 가질 수 있다. 다수의 개별 동작에 대한 설명은 모든 동작이 필요한 것을 암시하는 것으로 이해되어서는 안된다. 또한, 실시예는 설명된 바 보다 더 적은 동작을 가질 수 있다. 다수의 개별의 동작에 대한 설명은 모든 동작이 필요한 것을 암시하는 것으로 이해되어서는 안된다.
특정 실시예가 여기에서 바람직한 실시예에 대한 설명의 목적을 위해 예시되고 설명되었으나, 당업자에 의하여 폭넓은 대안 및/또는 동일한 목적을 달성하기 위해 계산된 균등한 실시예 또는 구현예가 본 개시의 범위를 벗어나지 않으면서 도시되고 설명된 실시예를 위하여 대체될 수 있다는 것이 인정될 것이다. 당업자는 본 개시의 실시예가 매우 폭넓은 방식으로 구현될 수 있다는 것을 쉽게 인정할 것이다. 본 개시는 여기에서 논의된 실시예의 임의의 적용 또는 변형을 포함하도록 의도된다. 따라서, 본 개시의 실시예는 청구항 및 그 균등물에 의해서만 제한된다는 것이 명백히 인정된다.

Claims (44)

  1. 삭제
  2. 삭제
  3. 삭제
  4. 삭제
  5. 삭제
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 컴퓨터 명령어들의 실행 시간 예측을 위한 방법에 있어서,
    컴퓨팅 장치에서, 제어 포인트 히스토리(control point history)에 기초하여, 결합된 예측 - 상기 결합된 예측은 분기 타깃 명령어들을 위한 하나 이상의 분기 타깃 예측 및 프레디킷된(predicate) 명령어들을 위한 하나 이상의 예측을 포함함 - 을 생성하는 단계와;
    예측 제어 흐름 그래프(prediction control flow graph) 및 상기 하나 이상의 분기 타깃 예측에 기초하여 예측된 분기 타깃 위치에서의 상기 컴퓨팅 장치 상에서의 실행을 제어하는 단계를 포함하고,
    상기 결합된 예측은 하나 이상의 명령어 블록에 관련되고, 상기 제어 포인트 히스토리는 제1 시간에 생성되고 상기 결합된 예측은 제2 시간에 생성되고, 상기 제어 포인트 히스토리는, 과거 프레디킷된 명령어들에 대해 평가된 하나 이상의 과거 프레디킷 값 및 과거 분기 타깃 명령어들에 대해 평가된 과거 분기 타깃 중 적어도 하나를 포함하고,
    상기 결합된 예측을 생성하는 단계는, 상기 제어 포인트 히스토리에 기초하여 하나 이상의 예측된 프레디킷 값을 생성하는 단계를 포함하고,
    상기 하나 이상의 명령어 블록의 블록 명령어들 - 상기 블록 명령어들은, 상기 프레디킷된 명령어들 중 하나 이상의 예측되고 프레디킷된 명령어들에 대응함 - 은 상기 하나 이상의 예측된 프레디킷 값에 기초하여 생성되는 것인, 컴퓨터 명령어들의 실행 시간 예측을 위한 방법.
  26. 삭제
  27. 제25항에 있어서,
    상기 실행을 제어하는 단계는, 상기 하나 이상의 예측된 프레디킷 값에 기초하여 상기 분기 타깃 위치를 예측하는 단계를 포함하는 것인, 컴퓨터 명령어들의 실행 시간 예측을 위한 방법.
  28. 제27항에 있어서,
    상기 하나 이상의 예측된 프레디킷 값에 기초하여 상기 분기 타깃 위치를 예측하는 단계는, 상기 하나 이상의 예측된 프레디킷 값에 기초하여 상기 예측 제어 흐름 그래프를 통해 경로를 따라가는 단계를 포함하는 것인, 컴퓨터 명령어들의 실행 시간 예측을 위한 방법.
  29. 제28항에 있어서,
    상기 예측된 분기 타깃 위치에서의 상기 컴퓨팅 장치 상에서의 실행을 제어하는 단계에 앞서, 상기 컴퓨팅 장치에 의해 상기 하나 이상의 명령어 블록 중 제1 블록에 대한 상기 예측 제어 흐름 그래프를 생성하는 단계를 더 포함하고,
    상기 컴퓨터 명령어들은 블록 극소 구조(block atomic architecture)이고,
    상기 제1 블록의 프레디킷들은 상기 예측 제어 흐름 그래프에서 노드(node)들로 나타내어지고, 분기 타깃들은 상기 예측 제어 흐름 그래프에서 리프(leaf)들로 나타내어지는 것인, 컴퓨터 명령어들의 실행 시간 예측을 위한 방법.
  30. 제28항에 있어서,
    상기 예측 제어 흐름 그래프를 통해 상기 경로를 따라가는 단계는 상기 하나 이상의 예측된 프레디킷 값에 기초하여 프레디킷들 사이의 에지(edge)들을 따라가는 단계를 포함하는 것인, 컴퓨터 명령어들의 실행 시간 예측을 위한 방법.
  31. 제25항에 있어서,
    상기 하나 이상의 예측된 프레디킷 값을 생성하는 단계는 상기 하나 이상의 예측된 프레디킷 값의 복수의 레벨을 병렬적으로 생성하는 단계를 포함하는 것인, 컴퓨터 명령어들의 실행 시간 예측을 위한 방법.
  32. 제25항에 있어서,
    상기 하나 이상의 예측된 프레디킷 값을 생성하는 단계는, 상기 제어 포인트 히스토리를 인덱스로서 사용하는 것에 기초하여 특정한 예측된 프레디킷 값의 검색(lookup)을 수행하는 단계를 포함하는 것인, 컴퓨터 명령어들의 실행 시간 예측을 위한 방법.
  33. 제25항에 있어서,
    상기 제어 포인트 히스토리는, 프로그램에 의해 진행중인 실행 동안 이전에 실행된 하나 이상의 과거 프레디킷된 명령어들을 더 포함하는 것인, 컴퓨터 명령어들의 실행 시간 예측을 위한 방법.
  34. 컴퓨터 명령어들의 예측 런타임 실행(predictive runtime execution)을 위한 시스템에 있어서,
    과거 프레디킷 값들의 히스토리 및 과거 분기 타깃 예측들 중 적어도 하나를 입력으로서 수용(accept)하고, 하나 이상의 프로세서에 의한 동작에 응답하여, 상기 수용된 히스토리에 기초하여 결합된 예측 - 상기 결합된 예측은 프레디킷 값들에 대한 하나 이상의 예측 및 분기 명령어들를 위한 하나 이상의 분기 타깃 예측을 포함하고, 하나 이상의 명령어 블록과 관련됨 - 을 생성하도록 구성되는 결합된 예측 생성기와;
    명령어 인출 및 실행(fetch and execution) 제어기를 포함하고,
    상기 명령어 인출 및 실행 제어기는, 하나 이상의 프로세서를 제어하여,
    상기 결합된 예측에 기초한 예측된 분기 타깃 위치에서 인출(fetch)된 명령어들의 실행을 진행(proceed)하게 하고;
    상기 하나 이상의 프로세서에 의한 동작에 응답하여, 상기 하나 이상의 예측된 프레디킷 값에 기초하여 상기 분기 타깃 위치를 예측하게 하도록
    구성된 것인, 컴퓨터 명령어들의 예측 런타임 실행을 위한 시스템.
  35. 삭제
  36. 제34항에 있어서,
    상기 하나 이상의 프로세서에 결합된 저장 매체를 더 포함하고,
    상기 저장 매체는 또한, 하나 이상의 예측 제어 흐름 그래프를 저장하도록 구성되고,
    각각의 예측 제어 흐름 그래프는, 각각의 코드(code) 블록에 대하여, 코드 블록의 프레디킷을 내부 노드로서 나타내고, 다른 코드 블록에 대한 분기를 리프(leaf)로서 나타내는 것인, 컴퓨터 명령어들의 예측 런타임 실행을 위한 시스템.
  37. 제36항에 있어서,
    상기 명령어 인출 및 실행 제어기는,
    상기 하나 이상의 예측된 프레디킷 값에 따라 상기 예측 제어 흐름 그래프를 통한 경로를 횡단하는 것(traversal)과;
    상기 경로의 횡단에 의해 리프에 도달한 후, 상기 예측된 분기 타깃 위치로서 상기 리프에서 분기된 코드 블록의 위치를 예측하는 것에 의해,
    상기 분기 타깃 위치를 예측하도록 구성되는 것인, 컴퓨터 명령어들의 예측 런타임 실행을 위한 시스템.
  38. 제34항에 있어서,
    상기 결합된 예측 생성기는, 상기 하나 이상의 프로세서에 의한 동작에 응답하여, 상기 하나 이상의 예측된 프레디킷 값을 식별하기 위해, 검색(lookup) 인덱스로서 과거 프레디킷 값들의 히스토리를 사용함으로써 상기 결합된 예측을 생성하도록 구성되는 것인, 컴퓨터 명령어들의 실행 시간 예측을 위한 시스템.
  39. 제38항에 있어서,
    상기 결합된 예측 생성기는, 상기 하나 이상의 프로세서에 의한 동작에 응답하여, 병렬적으로 복수의 검색을 수행함으로써 상기 결합된 예측을 생성하도록 구성되는 것인, 컴퓨터 명령어들의 실행 시간 예측을 위한 시스템.
  40. 복수의 컴퓨터 실행가능 명령어들이 저장된 컴퓨터 판독가능 저장 매체로서, 상기 복수의 컴퓨터 실행가능 명령어들은, 장치에 의한 실행에 응답하여, 상기 장치로 하여금 프레디킷된 명령어들 및 하나 이상의 분기 타깃을 포함하는 제1 코드 블록을 실행하도록 명령어들을 스케쥴하기 위한 동작들을 수행하게 하고, 상기 동작들은,
    하나 이상의 과거 프레디킷 값에 기초하여 결합된 예측 - 상기 결합된 예측은, 상기 제1 코드 블록 내 상기 프레디킷된 명령어들에 대한 프레디킷 값을 위한 하나 이상의 예측과 상기 제1 코드 블록에 대한 분기 타깃 예측을 포함하고, 상기 과거 프레디킷 값에 대응하는 과거 프레디킷된 명령어들은 제1 시간에 실행되고 상기 결합된 예측은 제2 시간에 식별됨 - 을 식별하는 동작과;
    상기 제1 코드 블록 내의 상기 프레디킷된 명령어들 중에서 하나 이상의 예측된 프레디킷된 명령어들을 실행하는 동작 - 상기 동작은, 상기 하나 이상의 예측된 프레디킷 값에 기초함 - 과;
    상기 분기 타깃 예측 또는 하나 이상의 분기 명령어들에 기초하여, 제2 코드 블록을 가리키는 분기 타깃 위치를 예측하는 동작과;
    상기 제2 코드 블록의 실행을 계속하는 동작을 포함하고,
    상기 분기 타깃 위치를 예측하는 동작은 상기 분기 타깃 위치를 식별하기 위하여 상기 제1 코드 블록에 대한 예측 제어 흐름 그래프를 통한 경로를 따라가는 동작을 포함하는 것인, 컴퓨터 판독가능 저장 매체.
  41. 삭제
  42. 제40항에 있어서,
    상기 동작들은, 컴퓨터 프로그램 내 각각의 코드 블록에 대해, 각각의 예측 제어 흐름 그래프를 생성하는 동작을 더 포함하는 것인, 컴퓨터 판독가능 저장 매체.
  43. 제40항에 있어서,
    상기 결합된 예측을 식별하는 동작은, 과거 프레디킷 값들의 히스토리에 기초하여 상기 하나 이상의 예측된 프레디킷 값의 검색(lookup)을 수행하는 동작을 포함하는 것인, 컴퓨터 판독가능 저장 매체.
  44. 제43항에 있어서,
    상기 하나 이상의 예측된 프레디킷 값의 상기 검색을 수행하는 동작은,
    잠재적인 프레디킷 값들의 복수의 검색을 병렬적으로 수행하는 동작과;
    레벨 n에서의 잠재적인 프레디킷 값들에 대하여, 레벨 n-1에서의 특정 프레디킷 값을 사용하여 상기 잠재적인 프레디킷 값들을 해결(resolve)하는 동작을 포함하는 것인, 컴퓨터 판독가능 저장 매체.
KR1020157010585A 2010-06-18 2010-06-18 결합된 분기 타깃 및 프레디킷 예측 KR101731742B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2010/039162 WO2011159309A1 (en) 2010-06-18 2010-06-18 Combined branch target and predicate prediction

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020137001476A Division KR101523020B1 (ko) 2010-06-18 2010-06-18 결합된 분기 타깃 및 프레디킷 예측

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020157032221A Division KR101731752B1 (ko) 2010-06-18 2010-06-18 결합된 분기 타깃 및 프레디킷 예측

Publications (2)

Publication Number Publication Date
KR20150052350A KR20150052350A (ko) 2015-05-13
KR101731742B1 true KR101731742B1 (ko) 2017-04-28

Family

ID=45348486

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1020157010585A KR101731742B1 (ko) 2010-06-18 2010-06-18 결합된 분기 타깃 및 프레디킷 예측
KR1020137001476A KR101523020B1 (ko) 2010-06-18 2010-06-18 결합된 분기 타깃 및 프레디킷 예측
KR1020157032221A KR101731752B1 (ko) 2010-06-18 2010-06-18 결합된 분기 타깃 및 프레디킷 예측

Family Applications After (2)

Application Number Title Priority Date Filing Date
KR1020137001476A KR101523020B1 (ko) 2010-06-18 2010-06-18 결합된 분기 타깃 및 프레디킷 예측
KR1020157032221A KR101731752B1 (ko) 2010-06-18 2010-06-18 결합된 분기 타깃 및 프레디킷 예측

Country Status (4)

Country Link
US (2) US9021241B2 (ko)
JP (1) JP5707011B2 (ko)
KR (3) KR101731742B1 (ko)
WO (1) WO2011159309A1 (ko)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
US9934035B2 (en) 2013-03-21 2018-04-03 Nxp Usa, Inc. Device and method for tracing updated predicate values
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
US9507594B2 (en) * 2013-07-02 2016-11-29 Intel Corporation Method and system of compiling program code into predicated instructions for execution on a processor without a program counter
US20160179538A1 (en) * 2014-12-19 2016-06-23 Intel Corporation Method and apparatus for implementing and maintaining a stack of predicate values with stack synchronization instructions in an out of order hardware software co-designed processor
US9720693B2 (en) 2015-06-26 2017-08-01 Microsoft Technology Licensing, Llc Bulk allocation of instruction blocks to a processor instruction window
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US9921814B2 (en) * 2015-08-24 2018-03-20 International Business Machines Corporation Control flow graph analysis
US10379858B2 (en) * 2015-09-14 2019-08-13 Spreadtrum Hong Kong Limited Method and apparatus for executing conditional instruction predicated on execution result of predicate instruction
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US10031756B2 (en) 2015-09-19 2018-07-24 Microsoft Technology Licensing, Llc Multi-nullification
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10936316B2 (en) 2015-09-19 2021-03-02 Microsoft Technology Licensing, Llc Dense read encoding for dataflow ISA
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US10776115B2 (en) 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
US20170083320A1 (en) * 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Predicated read instructions
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10061584B2 (en) 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US20170083327A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Implicit program order
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US20170315812A1 (en) 2016-04-28 2017-11-02 Microsoft Technology Licensing, Llc Parallel instruction scheduler for block isa processor
US11531552B2 (en) 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US10963379B2 (en) 2018-01-30 2021-03-30 Microsoft Technology Licensing, Llc Coupling wide memory interface to wide write back paths
US10824429B2 (en) 2018-09-19 2020-11-03 Microsoft Technology Licensing, Llc Commit logic and precise exceptions in explicit dataflow graph execution architectures
US20240086202A1 (en) * 2022-09-12 2024-03-14 Arm Limited Issuing a sequence of instructions including a condition-dependent instruction

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001175473A (ja) 1999-08-31 2001-06-29 Internatl Business Mach Corp <Ibm> コンピュータ処理システムにおいて実行述語を実現する方法及び装置
JP2002149401A (ja) 2000-09-28 2002-05-24 Internatl Business Mach Corp <Ibm> マイクロプロセッサ内の命令処理法方、マイクロプロセッサ及び情報処理システム
US6477637B1 (en) 1999-09-30 2002-11-05 International Business Machines Corporation Method and apparatus for transporting store requests between functional units within a processor
US7673124B2 (en) 2006-08-25 2010-03-02 Samsung Electronics Co., Ltd. Filtered branch-prediction predicate generation

Family Cites Families (81)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5317734A (en) 1989-08-29 1994-05-31 North American Philips Corporation Method of synchronizing parallel processors employing channels and compiling method minimizing cross-processor data dependencies
US5666506A (en) 1994-10-24 1997-09-09 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle
US5669001A (en) 1995-03-23 1997-09-16 International Business Machines Corporation Object code compatible representation of very long instruction word programs
US5729228A (en) 1995-07-06 1998-03-17 International Business Machines Corp. Parallel compression and decompression using a cooperative dictionary
US5790822A (en) 1996-03-21 1998-08-04 Intel Corporation Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor
US5920724A (en) 1996-03-28 1999-07-06 Intel Corporation Software pipelining a hyperblock loop
US5796997A (en) 1996-05-15 1998-08-18 Hewlett-Packard Company Fast nullify system and method for transforming a nullify function into a select function
US8583895B2 (en) 1996-05-15 2013-11-12 Nytell Software LLC Compressed instruction format for use in a VLIW processor
US5905893A (en) 1996-06-10 1999-05-18 Lsi Logic Corporation Microprocessor adapted for executing both a non-compressed fixed length instruction set and a compressed variable length instruction set
US5903750A (en) * 1996-11-20 1999-05-11 Institute For The Development Of Emerging Architectures, L.L.P. Dynamic branch prediction for branch instructions with multiple targets
US5845103A (en) 1997-06-13 1998-12-01 Wisconsin Alumni Research Foundation Computer with dynamic instruction reuse
US5943501A (en) 1997-06-27 1999-08-24 Wisconsin Alumni Research Foundation Multiple processor, distributed memory computer with out-of-order processing
US5930158A (en) 1997-07-02 1999-07-27 Creative Technology, Ltd Processor with instruction set for audio effects
US6182210B1 (en) 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
US6178498B1 (en) 1997-12-18 2001-01-23 Idea Corporation Storing predicted branch target address in different storage according to importance hint in branch prediction instruction
US6314493B1 (en) 1998-02-03 2001-11-06 International Business Machines Corporation Branch history cache
TW440793B (en) 1998-02-25 2001-06-16 Koninkl Philips Electronics Nv A method for structuring a multi-instruction computer program from basic blocks that compose from internal instructions and external jumps in an internal directed acyclic graph, and a processor loaded with such program
US6164841A (en) 1998-05-04 2000-12-26 Hewlett-Packard Company Method, apparatus, and product for dynamic software code translation system
US6988183B1 (en) 1998-06-26 2006-01-17 Derek Chi-Lan Wong Methods for increasing instruction-level parallelism in microprocessors and digital system
US6353883B1 (en) 1998-08-04 2002-03-05 Intel Corporation Method and apparatus for performing predicate prediction
US6240510B1 (en) * 1998-08-06 2001-05-29 Intel Corporation System for processing a cluster of instructions where the instructions are issued to the execution units having a priority order according to a template associated with the cluster of instructions
US6367004B1 (en) 1998-12-31 2002-04-02 Intel Corporation Method and apparatus for predicting a predicate based on historical information and the least significant bits of operands to be compared
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US6918032B1 (en) 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
JP3664473B2 (ja) 2000-10-04 2005-06-29 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ
US20030023959A1 (en) * 2001-02-07 2003-01-30 Park Joseph C.H. General and efficient method for transforming predicated execution to static speculation
US7032217B2 (en) 2001-03-26 2006-04-18 Intel Corporation Method and system for collaborative profiling for continuous detection of profile phase transitions
US7095343B2 (en) 2001-10-09 2006-08-22 Trustees Of Princeton University code compression algorithms and architectures for embedded systems
AU2002363142A1 (en) 2001-10-31 2003-05-12 Doug Burger A scalable processing architecture
US7114059B2 (en) * 2001-11-05 2006-09-26 Intel Corporation System and method to bypass execution of instructions involving unreliable data during speculative execution
US6892292B2 (en) 2002-01-09 2005-05-10 Nec Corporation Apparatus for one-cycle decompression of compressed data and methods of operation thereof
EP1495407A1 (en) 2002-04-08 2005-01-12 The University Of Texas System Non-uniform cache apparatus, systems, and methods
WO2004001584A2 (en) 2002-06-24 2003-12-31 Ante Vista Gmbh A method for executing structured symbolic machine code on a microprocessor
JP3804941B2 (ja) 2002-06-28 2006-08-02 富士通株式会社 命令フェッチ制御装置
JP4196614B2 (ja) 2002-08-22 2008-12-17 パナソニック株式会社 命令スケジューリング方法、命令スケジューリング装置、及びプログラム
US7299458B2 (en) 2002-10-31 2007-11-20 Src Computers, Inc. System and method for converting control flow graph representations to control-dataflow graph representations
US7308682B2 (en) 2003-04-25 2007-12-11 Intel Corporation Method and apparatus for recovering data values in dynamic runtime systems
US8607209B2 (en) 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
US8055885B2 (en) 2004-03-29 2011-11-08 Japan Science And Technology Agency Data processing device for implementing instruction reuse, and digital data storage medium for storing a data processing program for implementing instruction reuse
US7424482B2 (en) 2004-04-26 2008-09-09 Storwize Inc. Method and system for compression of data for block mode access storage
JP4296996B2 (ja) 2004-06-15 2009-07-15 富士通株式会社 マルチコアプロセサ制御方式
US7302543B2 (en) 2004-06-16 2007-11-27 Nec Laboratories America, Inc. Compressed memory architecture for embedded systems
US7571284B1 (en) 2004-06-30 2009-08-04 Sun Microsystems, Inc. Out-of-order memory transactions in a fine-grain multithreaded/multi-core processor
US7624386B2 (en) 2004-12-16 2009-11-24 Intel Corporation Fast tree-based generation of a dependence graph
US7552318B2 (en) 2004-12-17 2009-06-23 International Business Machines Corporation Branch lookahead prefetch for microprocessors
US7853777B2 (en) 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7380038B2 (en) 2005-02-04 2008-05-27 Microsoft Corporation Priority registers for biasing access to shared resources
US8312452B2 (en) 2005-06-30 2012-11-13 Intel Corporation Method and apparatus for a guest to access a privileged register
US8266413B2 (en) 2006-03-14 2012-09-11 The Board Of Trustees Of The University Of Illinois Processor architecture for multipass processing of instructions downstream of a stalled instruction
TW200739419A (en) * 2006-04-07 2007-10-16 Univ Feng Chia Prediction mechanism of a program backward jump instruction
US7487340B2 (en) 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
US20070288733A1 (en) 2006-06-08 2007-12-13 Luick David A Early Conditional Branch Resolution
US7809926B2 (en) 2006-11-03 2010-10-05 Cornell Research Foundation, Inc. Systems and methods for reconfiguring on-chip multiprocessors
CN101627365B (zh) 2006-11-14 2017-03-29 索夫特机械公司 多线程架构
US8250556B1 (en) 2007-02-07 2012-08-21 Tilera Corporation Distributing parallelism for parallel processing architectures
US8447911B2 (en) 2007-07-05 2013-05-21 Board Of Regents, University Of Texas System Unordered load/store queue
US8180997B2 (en) 2007-07-05 2012-05-15 Board Of Regents, University Of Texas System Dynamically composing processor cores to form logical processors
JP2009026106A (ja) 2007-07-20 2009-02-05 Oki Electric Ind Co Ltd 命令コード圧縮方法と命令フェッチ回路
US7516365B2 (en) 2007-07-27 2009-04-07 Sun Microsystems, Inc. System and method for split hardware transactions
JP5043560B2 (ja) * 2007-08-24 2012-10-10 パナソニック株式会社 プログラム実行制御装置
US9384003B2 (en) * 2007-10-23 2016-07-05 Texas Instruments Incorporated Determining whether a branch instruction is predicted based on a capture range of a second instruction
US7870371B2 (en) 2007-12-17 2011-01-11 Microsoft Corporation Target-frequency based indirect jump prediction for high-performance processors
US7818551B2 (en) 2007-12-31 2010-10-19 Microsoft Corporation Feedback mechanism for dynamic predication of indirect jumps
US8321850B2 (en) 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches
US8127119B2 (en) 2008-12-05 2012-02-28 The Board Of Regents Of The University Of Texas System Control-flow prediction using multiple independent predictors
US20100146209A1 (en) 2008-12-05 2010-06-10 Intellectual Ventures Management, Llc Method and apparatus for combining independent data caches
US20100191943A1 (en) * 2009-01-26 2010-07-29 Agere Systems Inc. Coordination between a branch-target-buffer circuit and an instruction cache
US20100325395A1 (en) 2009-06-19 2010-12-23 Doug Burger Dependence prediction in a memory system
US8433885B2 (en) * 2009-09-09 2013-04-30 Board Of Regents Of The University Of Texas System Method, system and computer-accessible medium for providing a distributed predicate prediction
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
US20110078424A1 (en) 2009-09-30 2011-03-31 International Business Machines Corporation Optimizing program code using branch elimination
US8464002B2 (en) 2009-10-14 2013-06-11 Board Of Regents Of The University Of Texas System Burst-based cache dead block prediction
WO2011067896A1 (en) 2009-12-02 2011-06-09 Mush-A Co., Ltd. Data processing apparatus, data processing system, packet, recording medium, storage device, and data processing method
JP5057256B2 (ja) 2009-12-02 2012-10-24 株式会社Mush−A データ処理装置、データ処理システムおよびデータ処理方法
EP2519876A1 (en) 2009-12-28 2012-11-07 Hyperion Core, Inc. Optimisation of loops and data flow sections
GB201001621D0 (en) 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
KR101603751B1 (ko) 2010-02-18 2016-03-16 삼성전자주식회사 명령어 병렬 처리 컴퓨터를 위한 명령어 압축 장치 및 방법
US8201024B2 (en) 2010-05-17 2012-06-12 Microsoft Corporation Managing memory faults
US20120158647A1 (en) 2010-12-20 2012-06-21 Vmware, Inc. Block Compression in File System
CN103635875B (zh) 2011-03-25 2018-02-16 英特尔公司 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段
US9304776B2 (en) 2012-01-31 2016-04-05 Oracle International Corporation System and method for mitigating the impact of branch misprediction when exiting spin loops

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001175473A (ja) 1999-08-31 2001-06-29 Internatl Business Mach Corp <Ibm> コンピュータ処理システムにおいて実行述語を実現する方法及び装置
US6477637B1 (en) 1999-09-30 2002-11-05 International Business Machines Corporation Method and apparatus for transporting store requests between functional units within a processor
JP2002149401A (ja) 2000-09-28 2002-05-24 Internatl Business Mach Corp <Ibm> マイクロプロセッサ内の命令処理法方、マイクロプロセッサ及び情報処理システム
US7673124B2 (en) 2006-08-25 2010-03-02 Samsung Electronics Co., Ltd. Filtered branch-prediction predicate generation

Also Published As

Publication number Publication date
US9703565B2 (en) 2017-07-11
KR20150132884A (ko) 2015-11-26
US20150199199A1 (en) 2015-07-16
KR20150052350A (ko) 2015-05-13
JP2013534004A (ja) 2013-08-29
KR20130031896A (ko) 2013-03-29
US9021241B2 (en) 2015-04-28
JP5707011B2 (ja) 2015-04-22
KR101523020B1 (ko) 2015-05-26
KR101731752B1 (ko) 2017-04-28
WO2011159309A1 (en) 2011-12-22
US20130086370A1 (en) 2013-04-04

Similar Documents

Publication Publication Date Title
KR101731742B1 (ko) 결합된 분기 타깃 및 프레디킷 예측
US9798528B2 (en) Software solution for cooperative memory-side and processor-side data prefetching
KR101511837B1 (ko) 벡터 분할 루프들의 성능 향상
KR101417597B1 (ko) 제로 프레디케이트 브랜치 예측실패에 대한 브랜치 예측실패 거동 억제
EP3398113B1 (en) Loop code processor optimizations
US20130036473A1 (en) System and method for branch function based obfuscation
US10162635B2 (en) Confidence-driven selective predication of processor instructions
KR20110136749A (ko) 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체
Garza et al. Bit-level perceptron prediction for indirect branches
JP2015201119A (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
US10592252B2 (en) Efficient instruction processing for sparse data
US9158545B2 (en) Looking ahead bytecode stream to generate and update prediction information in branch target buffer for branching from the end of preceding bytecode handler to the beginning of current bytecode handler
Petrov et al. Low-power branch target buffer for application-specific embedded processors
US9361109B2 (en) System and method to evaluate a data value as an instruction
US8453135B2 (en) Computation reuse for loops with irregular accesses
WO2013090521A1 (en) Control flow-based approach in implementing exception handling on a graphics processing unit
US20160011889A1 (en) Simulation method and storage medium
US20170192896A1 (en) Zero cache memory system extension
JP6160232B2 (ja) コンパイルプログラムおよびコンパイル方法
KR102161055B1 (ko) 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치
US20170115973A1 (en) Operating method of semiconductor device and semiconductor system
US20120089823A1 (en) Processing apparatus, compiling apparatus, and dynamic conditional branch processing method
Farooq Improving prediction accuracy of hard-to-predict branches using data value correlation
Jantz et al. Analyzing and addressing false interactions during compiler optimization phase ordering
KR100829167B1 (ko) 소프트웨어 파이프라이닝의 데이터 의존도 완화 방법

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
A107 Divisional application of patent
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant