KR20120068855A - 분배형 프레디킷 예측을 제공하기 위한 방법, 시스템 및 컴퓨터 액세스가능한 매체 - Google Patents

분배형 프레디킷 예측을 제공하기 위한 방법, 시스템 및 컴퓨터 액세스가능한 매체 Download PDF

Info

Publication number
KR20120068855A
KR20120068855A KR1020127005879A KR20127005879A KR20120068855A KR 20120068855 A KR20120068855 A KR 20120068855A KR 1020127005879 A KR1020127005879 A KR 1020127005879A KR 20127005879 A KR20127005879 A KR 20127005879A KR 20120068855 A KR20120068855 A KR 20120068855A
Authority
KR
South Korea
Prior art keywords
predictor
predicate
kit
prediction
core
Prior art date
Application number
KR1020127005879A
Other languages
English (en)
Other versions
KR101364314B1 (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 KR20120068855A publication Critical patent/KR20120068855A/ko
Application granted granted Critical
Publication of KR101364314B1 publication Critical patent/KR101364314B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4451Avoiding pipeline stalls
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or 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 or 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Landscapes

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

Abstract

분배형 멀티-코어 아키텍처에 대한 프레디킷 예측을 생성하기 위한 시스템, 방법 및 컴퓨터 액세스가능한 매체의 예들이 제공된다. 이러한 시스템, 방법 및 컴퓨터 액세스가능한 매체를 이용하면, 분기 명령들 상의 근사 프레디킷 경로 정보를 현명하게 인코딩하는 것이 가능하다. 이 정적으로 생성된 정보를 이용하면, 분배형 프레디킷 예측기들은, 코어들 간의 통신을 최소화하면서 고 신뢰의 프레디킷들의 정확한 예측을 용이하게 하는 동적 프레디킷 히스토리들을 생성할 수 있다.

Description

분배형 프레디킷 예측을 제공하기 위한 방법, 시스템 및 컴퓨터 액세스가능한 매체{METHOD, SYSTEM AND COMPUTER-ACCESSIBLE MEDIUM FOR PROVIDING A DISTRIBUTED PREDICATE PREDICTION}
정부 출연 연구기관에 관한 언급
발명은 공군에 의해 수여된 F33615-03-C-4106 하의 정부 지원으로 이루어졌다. U.S. 정부는 발명에 관한 소정의 권리를 갖는다.
분배형 라지-윈도우 (large-window) 프로세서들에서, 술어화 (predication) 는 프로그램들의 제어 흐름에서의 빈번한 변화들을 야기하는 분기 (branch) 들을, 명령들을 가드할 수 있고 어느 명령들이 실행되고 어느 명령들이 실행되지 않았는지를 결정할 수도 있는 데이터 값들로 변환하는데 이용된 기술이다. 술어화는, 분기가 콜랩스 상태가 될 수도 있는 가능한 경로들 양자 모두 하에서 명령들이 제공되는 것을 용이하게 하고 프레디킷 (predicate) 에 따라 그들 중 일부 만을 실행하고 명령들 모두를 패치하는, 제어 흐름을 선형화할 수 있다. 이 모델은 많은 실행 유닛들을 통해 퍼지도록 (spread out) 많은 코드 블록들을 생성하는데 효과적일 수 있지만, 이것은 비-술어형 (non-predicated) 아키텍처에서의 분기들이었을 수도 있는 프레디킷이 (분기들과 달리, 그들이 패치된 직후에 예측되는) 실행 시간에서 평가될 수도 있다는 점에서 문제를 생성할 수 있다. 프레디킷들의 평가의 이 집행 연기 (deferral) 는 상당히 성능을 감소시킬 수도 있다.
현재 기술들은 2 개의 아마도 바람직하지 않은 옵션들 중 하나를 채택한다. 첫 번째는, 이러한 기술들은 분기로서 모든 제어 결정들을 남길 수 있는 술어화를 회피하는 것을 선호하고, 대형의 분배형 프로세서를 통해 명령들을 분배하는 것을 불가능하게 할 수도 있다. 두 번째 대안은 명령들을 서술 (predicate) 하는 것일 수 있지만, 대형의 분배형 멀티-코어 프로세서를 통해 분배를 다시 불가능하게 하는 낮은 패치 대역폭을 초래하는 단일 유닛으로 프레디킷 예측 및 패치를 집중화하는 것일 수 있다.
이러한 EDGE (Explicit Data Graph Execution) 아키텍처와 같은 하이브리드 데이터흐름 아키텍처에서, 제어 흐름은 분기들 및 프레디킷들의 혼합물일 수 있다. 어느 분기들이 서술하기 위해 만약 변환되는 것 (if-converted) 인지를 결정하는 것은 복잡한 문제일 수도 있다. 충분히 선형으로 제어된 흐름이 서술되는 것을 용이하게 하는 분기들, 및 예측하기 힘든 분기들이 서술되는 것이 바람직할 수 있다. 나머지 제어 포인트들은 분기들로서 남겨질 수 있다. 이러한 분할을 이용하여, 예측 방식은 예측하기 힘든 프레디킷들의 평가가 실행 시간에 선호되는 것을 연기하는, 가장 서술 가능한 프레디킷들 및 모든 분기들을 예측할 수 있다.
그러나, 분배형 데이터흐름 머신에서, 정확한 프레디킷 예측을 용이하게 하기 위해 완전한 제어 히스토리를 유지하는 것이 어려울 수 있다. 이 영역에서의 이전 노력들은 통상적으로 예측하기 힘든 분기들에 "만약-변환 (if-conversion)" 을 적용하는 컴파일러, 및 컴파일러가 런-타임 정보의 부족으로 인한 실수를 하는 경우를 복구하기 위한 특정 마이크로아키텍처 (microarchitecture) 메커니즘에 의존한다. 결과적으로, 데이터에 공지된 대부분의 데이터흐름 머신은 상업적 애플리케이션에 효과적일 수 있는 방식으로 프레디킷 예측을 이용하지 않는다.
분배형 멀티-코어 아키텍처에 대한 프레디킷 예측을 생성하기 위한 시스템, 방법 및 컴퓨터 액세스가능한 매체의 예들이 제공된다. 이러한 시스템, 방법 및 컴퓨터 액세스가능한 매체를 이용하면, 분기 명령들 상에서 근사 프레디킷 경로 정보를 현명하게 인코딩하는 것이 가능하다. 이 정적으로 생성된 정보를 이용하면, 분배형 프레디킷 예측기들은, 코어들 간의 통신을 최소화하면서 고 신뢰도의 프레디킷의 정확한 예측을 용이하게 할 수 있는 동적 프레디킷 히스토리를 생성할 수 있다.
일 예에서, 컴퓨팅 시스템이 제공된다. 컴퓨팅 시스템은 복수의 프로세서 코어들을 갖는 멀티-코어 프로세서를 포함할 수도 있다. 코어들 각각은 프레디킷 예측기를 포함할 수도 있다. 프레디킷 예측기는 프레디킷 예측을 생성하도록 구성될 수도 있다.
다른 예에서, 멀티-코어 프로세서에서 프레디킷 예측을 제공하는 방법이 제공된다. 방법은, 멀티-코어 프로세서에서 복수의 프로세서 코어들 각각에 프레디킷 예측기를 제공하는 단계 및 프레디킷 예측기들을 이용하여 복수의 분기 명령들로부터 프레디킷 예측을 생성하는 단계를 포함할 수도 있다.
또 다른 예에서, 멀티-코어 프로세서 컴퓨팅 시스템 내에서 프레디킷 예측을 제공하기 위한 컴퓨터 실행 가능 명령들이 저장된 컴퓨터 액세스가능한 매체가 제공된다. 프로세싱 어레인지먼트는, 프로세싱 어레인지먼트가 명령들을 실행하는 경우 프로세싱 절차를 수행하도록 구성될 수도 있다. 프로세싱 절차는 멀티-코어 프로세서에서 복수의 프로세서 코어들 각각에 대한 프레디킷 예측기를 제공하는 단계, 및 프레디킷 예측기를 이용하여 프레디킷 예측을 생성하는 단계를 포함할 수도 있고, 프로세서 코어들 각각은 적어도 하나의 프레디킷 예측기를 포함한다.
다수의 실시예들이 개시되어 있지만, 또 다른 실시예들이 다음 상세한 설명으로부터 당해 기술 분야의 당업자에게 명백해질 것이다. 명백할 바와 같이, 본원에 설명된 시스템, 장치 및 방법은 모두 본원의 개시 내용의 사상 및 범위로부터 벗어남이 없이 여러 다양한 양상으로 변경할 수 있다. 따라서, 상세한 설명은 사실상 제한이 아닌 예시로서 간주될 것이다.
본 개시물의 상술한 특징들 및 다른 특징들은 첨부한 도면과 결합한 다음 설명 및 첨부된 청구항들로부터 보다 철저하게 명백해질 것이다. 이들 도면은 본 개시물에 따른 수개의 실시예들만을 나타내며, 따라서 본 개시물의 범위를 제한하는 것으로 고려되지 않아야 한다는 이해 하에, 본 개시물은 첨부된 도면의 이용을 통하여 구체적이고 자세하게 설명될 것이다.
도 1 은 일 예에 따른 대표적인 컴퓨팅 시스템의 블록도이다.
도 2 는 일 예에 따른 프레디킷 예측 시스템의 블록도 및 흐름도이다.
도 3 은 다른 예에 따른 프레디킷 예측 시스템의 블록도 및 흐름도이다.
도 4 는 일 예에 따른 기하학적 히스토리 길이 예측기의 블록도 및 흐름도이다.
도 5 는 일 예에 따른 프레디킷 예측을 위한 적절한 방법의 블록도 및 흐름도이다.
도 6a 및 도 6b 는 몇몇 예들에 따른 글로벌 히스토리 레지스터 (global history register) 구성의 블록도 및 흐름도이다.
다음의 상세한 설명에서, 그 일부를 형성하는 첨부된 도면을 참조한다. 도면에서, 문맥이 달리 표현하지 않는 한, 유사한 기호들은 일반적으로 유사한 구성요소들을 식별한다. 상세한 설명, 도면 및 청구범위 내에 설명된 예시적인 실시예들은 제한을 두기 위한 것으로 의미되지 않는다. 본원에 제공된 청구물의 사상 및 범위로부터 벗어남이 없이, 다른 실시예들이 이용될 수 있으며, 다른 변경이 이루어질 수 있다. 본원에 일반적으로 설명되고 도면에 나타낸 바와 같이, 본 개시물의 양태들은 다양한 상이한 구성들로 배치, 대체, 결합, 분리, 및 설계될 수 있고 이들 모두가 묵시적으로 본원에서 고려되는 것임이 쉽게 이해될 것이다.
본 개시물은 분기 예측에 관한 방법, 장치, 컴퓨터 프로그램 및 시스템에 이용된다. 이러한 일 시스템의 바람직한 특정 실시형태들은 도면에 도시되고 아래 설명되어 있다. 그러나, 많은 다른 실시형태들도 또한 가능하며 이들 실시형태들의 철저한 리스트를 본원 내에 포함시키는 것은 시간 및 공간 제약상 어렵다. 따라서, 청구범위 내의 다른 실시형태들은 본 특허의 교시로부터 당해 기술 분야의 당업자에게 명백해질 것이다.
도면부호들은 도면 내에 도시된 예들의 예시적인 컴포넌트들을 지정하기 위한 넘버링을 포함하고, 다음을 포함한다: 컴퓨터 시스템 (100), 프로세서 (101), 시스템 버스 (102), 운영 시스템 (103), 애플리케이션 (104), 판독 전용 메모리 (105), 랜덤 액세스 메모리 (106), 디스크 어댑터 (107), 디스크 유닛 (108), 통신 어댑터 (109), 인터페이스 어댑터 (110), 디스플레이 어댑터 (111), 키보드 (112), 마우스 (113), 스피커 (114), 디스플레이 모니터 (115), 컴퓨팅 환경 (201), 애플리케이션 프로그램 (202), 명령 데이터 흐름 (203), 컴파일러 (204), 분기 명령들 (205), 근사 프레디킷 경로 정보 (206), 제 2 명령 데이터 흐름 (207), 프로세서 (210), 프로세서 코어들 (211-213), 프레디킷 예측기들 (214-216), 프레디킷 예측 (220), 블록 명령들 (301-303), 블록 시작 어드레스들 (304-306), 기하학적 히스토리 길이 예측기 (400), 코어-로컬 히스토리 레지스터 (401), 글로벌 히스토리 레지스터 (402), 합산 블록 (404), 예측 사인 (405), 글로벌 예측 테이블들 (406-409), 신뢰 예측 테이블 (410), 카운터 (411), 코어-로컬 예측 테이블 (412), 코어-로컬 프레디킷 히스토리 레지스터, 및 글로벌 히스토리 레지스터들 (601-603, 605).
도 1 은 일부 실시예들에 따라 배열된 컴퓨팅 시스템 (100) 의 블록도의 개략적인 예시이다. 컴퓨터 시스템 (100) 은 또한 본 개시물 예에 대한 하드웨어 환경을 나타낸다. 예를 들어, 컴퓨터 시스템 (100) 은 시스템 버스 (102) 에 의해 여러 다른 컴포넌트들에 커플링된 프로세서 (101) 를 가질 수 있다. 프로세서 (101) 는 본원의 실시예들에 따라 배열된 복수의 프레디킷 예측기들 (214-216) 을 갖는 여러 다른 종류의 멀티-코어 프로세서일 수도 있다. 프로세서 (101) 의 보다 자세한 설명은 도 2 에 도시된 예의 설명과 함께 아래 제공된다. 도 1 을 참조하면, 운영 시스템 (103) 은 프로세서 (101) 상에서 구동할 수 있고, 도 1 의 여러 컴포넌트들의 제어를 제공하고 이들 기능을 코디네이팅한다. 본 개시물의 예들의 원리들에 따른 애플리케이션 (104) 은 운영 시스템 (103) 과 결합하여 실행할 수도 있고, 운영 시스템 (103) 에 호 (call) 및/또는 명령을 제공하는데, 여기서 호/명령은 애플리케이션 (104) 에 의해 수행될 여러 기능들 또는 서비스들을 구현한다.
도 1 을 참조하면, 판독 전용 메모리 ("ROM"; 105) 가 시스템 버스 (102) 에 커플링될 수도 있고, 컴퓨터 디바이스 (100) 의 특정한 기본 기능들을 제어할 수 있는 기본 입/출력 시스템 ("BIOS") 을 포함할 수 있다. 랜덤 액세스 메모리 ("RAM"; 106) 및 디스크 어댑터 (107) 는 또한 시스템 버스 (102) 에 커플링될 수 있다. 운영 시스템 (103) 및 애플리케이션 (104) 을 포함한 소프트웨어 컴포넌트들은 실행을 위하여 컴퓨터 시스템 (100) 의 메인 메모리일 수도 있는 RAM (106) 내에 로딩될 수 있음을 주지해야 한다. "IDE" (integrated drive electronics) 또는 "PATA" (parallel advanced technology attachment) 어댑터, "SATA" (serial advanced technology attachment) 어댑터, "SCSI" (small computer system interface) 어댑터, "USB" (universal serial bus) 어댑터, IEEE 1394 어댑터, 또는 디스크 유닛 (108), 예를 들어 디스크 드라이브와 통신하는 임의의 다른 적절한 어댑터일 수 있는 디스크 어댑터 (107) 가 제공될 수 있다.
도 1 을 참조하면, 컴퓨터 시스템 (100) 은 버스 (102) 에 커플링된 통신 어댑터 (109) 를 더 포함할 수도 있다. 통신 어댑터 (109) 는 외부 네트워크 (미도시) 와 버스 (102) 를 상호접속시킬 수도 있고 이에 의해, 컴퓨터 시스템 (100) 이 다른 유사한 및/또는 상이한 디바이스들과의 통신을 용이하게 한다.
입력/출력 ("I/O") 디바이스들은 또한, 사용자 인터페이스 어댑터 (110) 및 디스플레이 어댑터 (111) 를 통하여 컴퓨터 시스템 (100) 에 접속될 수 있다. 예를 들어, 키보드 (112), 마우스 (113) 및 스피커 (114) 는 사용자 인터페이스 어댑터 (110) 를 통하여 버스 (102) 에 상호접속될 수 있다. 이들 예시적인 디바이스들 중 어느 것을 통하여 컴퓨터 시스템 (100) 에 데이터를 제공할 수 있다. 디스플레이 모니터 (115) 는 디스플레이 어댑터 (111) 에 의해 시스템 버스 (102) 에 접속될 수 있다. 이 예시적인 방식으로, 사용자는 키보드 (112) 및/또는 마우스 (113) 를 통하여 컴퓨터 시스템 (100) 에 데이터 또는 다른 정보를 제공할 수 있고, 컴퓨터 시스템 (100) 으로부터 디스플레이 (115) 및/또는 스피커 (114) 를 통해 출력을 획득할 수 있다.
본원에 설명된 본 개시물의 예들의 각종 양태들, 피처들, 실시형태들 또는 구현들이 단독으로 또는 각종 조합들로 이용될 수 있다. 본 개시물의 방법 예들은 소프트웨어, 하드웨어 또는 하드웨어와 소프트웨어의 조합 (예를 들어, 컴퓨터 액세스가능 매체 상에 저장된 소프트웨어) 으로 구현될 수 있다.
프로세서 (101) 상에서 구현될 수도 있고, 예를 들어 명시적 데이터 그래프 실행 (explicit data graph execution; EDGE) 마이크로아키텍처와 이용되도록 채택될 수 있는 분배형 멀티-코어 마이크로아키텍처에 대한 프레디킷 예측 방식의 예가 본원에서 설명된다. 분배형 방식의 예는 분기 명령들에서 적절한 프레디킷 경로 정보를 현명하게 인코딩하도록 컴파일러를 필요로 할 수도 있다. 이 정적으로 생성된 정보를 이용하면, 분배형 프레디킷 예측기들은 코어들 간의 통신을 감소시키면서 높은 신뢰 프레디킷의 정확한 예측을 용이하게 하는 동적 프레디킷 히스토리를 생성할 수도 있다. 정확하고 효율적인 분배형 프레디킷 예측 방식의 예는, 예를 들어 오버헤드 연산을 완화시키기 위해 컴파일러가 프레디킷 예측기에 의존하여 코드를 공격적으로 서술하는 것을 용이하게 한다.
따라서, 도 2 에 도시된 바와 같이, 컴퓨팅 환경 (201) 은 컴퓨터 시스템 (100) 에 제공될 수도 있고, 소프트웨어 애플리케이션 프로그램 (202) 및 컴파일러 (204) 를 포함할 수도 있다. 애플리케이션 프로그램 (202) 은 명령 데이터 흐름 (203) 을 생성할 수도 있고, 일부 또는 많은 이 명령 데이터 흐름은 분기 명령들일 수도 있다. 컴파일러 (204) 는 적절한 프레디킷 경로 정보 (206) 로 분기 명령들 (205) 을 인코딩할 수도 있다. 결과의 명령 데이터 (207) 는 실행을 위해 프로세서 (101, 210) 으로 흐를 수도 있다. 프로세서 (210) 는 복수의 프로세서 코어들 (간략화를 위해, 예를 들어 3 개의 프로세서 코어들이 코어들 (211-213) 로서 도시됨) 을 포함할 수도 있고, 코어들 각각은 프레디킷 예측기들 (214-216) 중 각각의 예측기를 포함할 수 있다. 이들 예측기들 (214-216) 은 그 후, 컴파일러-인코딩된 프레디킷 경로 정보 (206) 를 이용하여 고 신뢰도 프레디킷의 정확한 예측을 용이하게 할 수도 있다 [블록 220].
이하에서, EDGE 명령 세트 아키텍처 (ISA) 의 추가의 설명이 제공된다. 그러나, 발명의 예들은 다른 ISA 들과 유사하게 이용될 수도 있다는 것을 인식해야 한다. EDGE ISA 는 2 개의 예시의 특성들, 예를 들어 블록-어토믹 (block-atomic) 실행 (블록 컴플리트 및 커밋의 명령들 모두가 행하거나, 또는 명령들 어느 것도 행하지 않음), 및 다이렉트 명령 통신 (ISA 는 명령들에서의 인트라 블록 디펜던시를 인코딩할 수 있음) 을 갖는다. 이 예시의 모델을 이용하면, 명령 데이터 흐름의 블록, 예를 들어 명령 데이터 흐름 (203) 은 그것이 일관된 출력들의 세트를 생성하는 경우 그 동작을 완료할 수 있다. 예를 들어, 실행의 각 라운드에서, 블록은 동일한 수의 레이지터들에 데이터를 기입 또는 제공할 수 있고, 정확하게 하나의 분기 출력을 생성하는 것에 추가하여 블록 헤더에서 정적으로 인코딩되는 동일한 수의 저장된 데이터를 생성할 수 있다. 명령들은 레지스터들을 통한 블록들과 메모리 (105, 106) 사이에서 통신할 수도 있다.
명령들은, 명령들의 블록에서의 그 인덱스에 기초하여 하나의 프로세서 (101, 210) 로서 종합된 일부 또는 모든 코어들에 걸쳐 인터리빙될 수도 있다. 프로세서 코어 구성이 변하는 경우, 예를 들어 코어들이 별개의 프로세싱 유닛들로서 동작하는 경우, 따라서 인터리빙 절차가 변할 수도 있고, 이는 프로세서가 하나 이상의 코어들 상에서 블록을 실행하는 것을 용이하게 할 수 있다. 각각의 명령 블록은 EDGE ISA 를 완전히 예측할 수 있는 프레디킷 오퍼랜드 (operand) 를 가질 수도 있다. 데이터플로우 실행 모델 (예를 들어, 다이렉트 오퍼랜드 통신) 을 이용하면, 모든 그 오퍼랜드를 수신하고, 만약 서술된다면 대응하는 프레디킷을 수신하는 경우 명령 블록이 실행될 수 있다.
일 예에 따른 아키텍처에서, 명령들의 각 블록은 이러한 블록의 실행을 용이하게 하기 위해 접속 또는 참여하는 코어들을 코이네이팅하는 특정 코어 (예를 들어, 오너 코어) 를 가질 수도 있다. 예를 들어, 오너 코어는 종래의 아키텍처에서의 프로그램 카운터와 유사한 또는 동일한 블록 시작 어드레스에 의해 식별될 수도 있다. 도 3 으로 돌아가서, 명령들의 복수의 블록들 (예를 들어, 3 개의 블록들이 블록들 (301-303) 과 같이 간략화를 위해 도시됨) 이 제공되고, 각각의 블록은 블록 시작 어드레스들 (304-306) 중 각 어드레스를 포함한다. 이러한 어드레스들 (304-306) 은 적합한 오너 코어들 (211-213) 을 식별하는데 이용될 수 있다. 도 3 에 도시된 바와 같이, 블록 (301) 은 각 어드레스 (304) 를 통해 코어 (211) 와 연관될 수 있고 (예를 들어, 코어에 의해 소유될 수 있고), 블록 (302) 은 각 어드레스 (305) 를 통해 코어 (213) 와 연관될 수 있으며, 블록 (303) 은 각 어드레스 (306) 를 통해 코어 (212) 와 연관될 수 있다. 각각의 오너 코어들 (211-213) 은 패치 커맨드를 송신하고, 다음 블록 어드레스를 서술하고, 오너십 토큰 (ownership token) 을 다시 그것으로 패스하고, (예를 들어, 레지스터 기입, 저장, 출구/분기 어드레스 등) 완료 정보를 수집하고, 커밋 또는 플러시 커맨드(들) 을 송신하며, 결국 커밋 승인응답을 획득할 책임이 있을 수도 있다.
또한, 각각의 오너 코어들 (211-213) 중 하나 이상은 다음 블록 어드레스의 예측을 용이하게 할 수도 있다. 코어들 (211-213) 중 각각의 코어는 완전히 기능적 블록 예측기들 (214-216) 중 각 예측기를 포함할 수 있고, 예측기들은 코어들에 걸쳐 동일할 수고 있고 또는 서로 상이할 수도 있다. 블록 예측기들 (214-216) 중 다음 예측기는, 어느 분기가 블록으로부터 가져오게되는지를 예측할 수 있는 출구 예측기, 및 예측된 출구 타겟에 기초하여 블록들 (214-216) 중 다음 블록의 어드레스를 예측할 수 있는 예측기들 (214-216) 중 연관된 타겟 예측기를 포함할 수도 있다. 도 4 를 참조하면, 예측기들 (214-216) 의 출구 예측기는, 로컬 출구 히스토리 (401) 및 글로벌 출구 히스토리 (402) 를 이용할 수 있는, 2-레벨 로컬 예측기, 글로벌 예측기, 및/또는 선택 예측기를 포함할 수도 있다. 출구 히스토리들 (401, 402) 은 각각의 블록에서 각 분기 명령들에 정적으로 할당된 근사 프레디킷 경로 정보 (206) 를 이용하여 코어들 (211-213) 로부터 생성될 수도 있다. 근사 프레디킷 경로 정보 (206) 는 분기 명령들에서 인코딩될 수도 있고, 특정 블록의 특정 분기들을 식별할 수 있다. 컴파일러 (204) 는 원래, 각각의 블록에서 분기 명령들의 순차적인 순서에 기초하여 근사 프레디킷 경로 정보 (206) 를 할당할 수도 있다. 코어들 (211-213) 은 (종래의 아키텍처에서 이용될 수도 있는 바와 같은) 취해진/취해지지 않은 정보 대신에 연관된 예측기에서 로컬 및 글로벌 히스토리를 생성하도록 출구를 이용할 수도 있다.
코어들 (211-213) 각각은 그 코어 상에 맵핑된 프레디킷 명령들의 출력을 예측할 수도 있는 프레디킷 예측 어레인지먼트로 증가될 수도 있다. 베이스 예측기 (base predictor) 및 글로벌 히스토리 레지스터를 포함할 수도 있는 글로벌 히스토리 기반 예측기가 각 코어에서 이용될 수도 있다. 이러한 글로벌 히스토리 예측기는 코어들 (211-213) 각각에서 업데이트된 글로벌 히스토리 정보를 유지하면서, 코어들 (211-213) 간의 통신을 감소시키고자 할 수도 있다. 먼저, 도 4 를 참조하면, 일 예에서, 기하학적 히스토리 길이 (GEHL) 예측기 (400) 는 분배형 프레디킷 예측을 수행하기 위한 베이스 예측기로서 이용될 수도 있다. GEHL 예측기 (400) 는 글로벌 분기 히스토리 레지스터 (402) 및 분기 어드레스 (예를 들어, 코어-로컬 히스토리 레지스터 (401)) 의 독립적인 기능들에 의해 인덱싱된 여러 예측 테이블들 (406-409) 을 포함할 수도 있다. 예측은, 코어-로컬 히스토리 레지스터 (401) 와 연관된 코어-로컬 예측 테이블 (412) 로부터의 값 뿐만 아니라 테이블들 (406-409) 로부터 취출된 값들에 대한 합산 (404) 의 사인 (405) 에 기초할 수도 있다. 이 예에서, 스토리지의 대부분이 최근의 분기 히스토리들의 상관을 캡처하면서, 특정 오래된 분기와의 상관의 캡처를 여전히 용이하게 하는데 이용될 수도 있다.
이제 글로벌 프레디킷 히스토리 정보를 보면, 여러 적절한 예들이 제공될 수 있다. 특정 예들은 고도의 정확도를 달성할 수도 있으면서, 코어들 (211-213) 사이의 통신을 감소시킨다. 하나의 이러한 예로, 도 6a 을 참조하면, 코어-로컬 프레디킷 히스토리 레지스터 (CLPHR; 600) 가 이용될 수 있다. 따라서, 예를 들어 예측기는 다른 코어들과 임의의 정보를 통신하지 않고, 단지 코어에서 이용 가능한 정보 만을 이용하도록 제공될 수도 있다. 이 예에서, 코어들 (211-213) 각각은 그러한 코어로 맵핑된 프레디킷 명령들의 추적을 유지할 수 있는 그 자신의 전용 글로벌 히스토리 레지스터 (601-603) 를 가질 수 있다. 컴파일러 (204) 는 그 후, 그 코어로 의존적인 명령들을 맵핑하고자 할 수 있다. 결과적으로, 의존적인 프레디킷 명령들은 동일한 코어로 맵핑될 수도 있는데, 이 동일한 코어는 CLPHR (600) 가 이들 명령들 간의 상관을 이용하는 것을 용이하게할 수 있다.
다른 예들에서, 도 6b 를 참조하면, 글로벌 블록 히스토리 레지스터 (GBHR; 605) 가 제공될 수도 있다. 분배형 출구 예측기는 블록들의 출구 코드들을 예측하고, 이러한 출구 예측기는 또한 출구 예측 수 또는 코드를 연관시킬 수 있고, 따라서 GBHR (605) 을 생성한다. 이 예에서, 컴파일러 (204) 는 프로그램에서의 그 순차적인 순서에 따라 각 블록에서 분기 명령들에 3 비트 출구 코드들을 할당할 수도 있다. 따라서, GBHR (605) 은 글로벌 히스토리 정보로서 이용될 수 있다. 블록에서의 프레디킷들로부터 어떤 정보를 이용하지 않고, 출구 및 프레디킷 예측기들 양자 모두는 동일한 히스토리 정보를 공유할 수도 있고, 이 정보는 추가의 통신 메커니즘에 대한 필요를 감소 또는 완화시킬 수 있다.
CLPHR (600) 및 GBHR (605) 의 예들은 임의의 적합한 방식으로 조합될 수도 있다. 예를 들어, GBHR (605) 은 메인 글로벌 히스토리 레지스터보다는 CLPHR 에 의해 인덱싱될 수 있는 다른 테이블을 추가함으로써 증가될 수도 있다. 이 테이블로부터 취출된 예측은 GEHL 테이블로부터 취출된 예측들과 가산기 트리를 통해 조합될 수 있다.
몇몇 예들에서 다시 도 4 를 참조하면, 신뢰 예측 테이블 (410) 이 제공되어 프레디킷 예측의 정확도의 추정을 수행하도록 구성될 수도 있다. 신뢰 예측 테이블 (410) 은 따라서, 예측기가 예측하기 힘든 프레디킷들 (예를 들어, 낮은 신뢰도를 갖는 프레디킷들) 을 필터링 ("filter out") 하는 것을 용이하게 할 수도 있다. 신뢰 예측 테이블 (410) 엔트리들은 카운터들, 예를 들어 분기에서 정확한 연속적인 예측들의 수를 카운트할 수 있는 카운터 (411) 를 재설정하는 것일 수도 있다. 예를 들어, 오류예측 (misprediction) 이 발생하면, 카운터 (411) 는 0 으로 재설정될 수도 있다. 프레디킷은, 대응하는 카운터의 값이 소정 임계보다 높은 경우 예측되도록 선택될 수 있다. 몇몇 예들에서, 신뢰 테이블 (예를 들어, 카운터 (411)) 에서의 엔트리들은 적은 수의 코어들을 갖는 구성에 대해 높은 신뢰 임계를 지원할 수도 있는 3 비트 재설정 카운터일 수 있다.
발명의 방법의 예가 도 5 로서 도시된다. 컴퓨터 시스템 (100) 은 프로세서 (101) 를 포함할 수 있는데, 프로세서는 실행되는 경우 다음의 절차들을 수행하도록 구성될 수도 있다. 특히, 프로세서 (101) 는 컴파일러 (204) 로 하여금 근사 프레디킷 경로 정보로 분기 명령들을 인코딩하도록 할 수 있다 [절차 501]. 다음으로, 실행을 위해 결과의 명령 데이터가 프로세서 (101) 에 제공될 수도 있다 [절차 502]. 각각의 프로세서 코어와 연관된 이들 예측기들은 그 후, 고 신뢰도 프레디킷의 정확한 예측을 용이하게 하기 위해 컴파일러 인코딩된 경로 정보를 이용할 수도 있다 [절차 503].
몇몇 예들에서 복수의 프로세서 코어들을 포함하는 멀티-코어 프로세서를 포함하는 컴퓨팅 시스템이 개시되고, 코어들 각각은 적어도 하나의 프레디킷 예측기를 포함하고, 여기서 프레디킷 예측기를 프레디킷 예측을 생성한다. 몇몇 예들에서, 컴퓨팅 시스템은 그 안에 인코딩된 프레디킷 명령 정보를 갖는 하나 이상의 분기 명령들을 포함하는 애플리케이션 프로그램을 더 포함할 수도 있다. 다른 예들에서, 프레디킷 경로 정보의 인코딩은 컴파일러에 의해 달성된다. 각종 다른 예들에서, 하나 이상의 분기 명령들 각각 상의 블록 어드레스는 멀티-코어 프로세서에서의 어느 프로세서 코어가 각각의 분기 명령을 실행하기 위한 것인지를 결정한다. 추가의 예들에서, 멀티-코어 프로세서는 명시적 데이터 그래프 실행 마이크로아키텍처를 포함한다. 또 다른 예들에서, 하나 이상의 프레디킷 예측기들은 베이스 예측기 및 글로벌 히스토리 레지스터를 포함한다. 다른 예들에서, 베이스 예측기는 기하학적 히스토리 길이 예측기이다. 몇몇 예들에서, 글로벌 히스토리 레지스터는 코어-로컬 프레디킷 히스토리 레지스터이다. 다른 예들에서, 글로벌 히스토리 레지스터는 글로벌 블록 히스토리 레지스터이다. 또 다른 예들에서, 글로벌 히스토리 레지스터는 코어-로컬 프레디킷 히스토리 레지스터 및 글로벌 블록 히스토리 레지스터를 포함한다. 또 다른 예들에서, 컴퓨팅 시스템은 신뢰 예측 테이블을 더 포함한다.
다른 예들에서, 멀티-코어 프로세서에서 복수의 프로세서 코어들을 통해 하나 이상의 분기 명령들을 제공하는 단계, 및 프레디킷 예측기를 이용하여 프레디킷 예측을 생성하는 단계를 포함하는 멀티-코어 프로세서에서 프레디킷 예측을 제공하는 방법이 개시되고, 프로세서 코어들 각각은 적어도 하나의 프레디킷 예측기를 포함한다. 몇몇 예들에서, 방법은 하나 이상의 분기 명령들에서 근사 프레디킷 경로 정보를 인코딩하는 단계를 더 포함할 수도 있다. 다른 예들에서, 프레디킷 경로 정보의 인코딩은 컴파일러에 의해 수행된다. 추가의 예들에서, 방법은 하나 이상의 분기 명령들 각각에 대한 블록 어드레스를 이용하여 어느 프로세서 코어가 분기 명령들을 실행하기 위한 것인지를 결정하는 단계를 추가적으로 포함할 수도 있다. 다른 예들에서, 하나 이상의 프레디킷 예측기들은 베이스 예측기 및 글로벌 히스토리 레지스터를 포함한다. 또 다른 예들에서, 베이스 예측기는 기하학적 히스토리 길이 예측기이다. 또 다른 예들에서, 글로벌 히스토리 레지스터는 코어-로컬 프레디킷 히스토리 레지스터이다. 각종 다른 예들에서, 글로벌 히스토리 레지스터는 글로벌 블록 히스토리 레지스터이다.
또 다른 예들에서, 멀티-코어 프로세서 컴퓨팅 시스템 내에서 프레디킷 예측을 제공하기 위한 컴퓨터 실행 가능 명령들이 저장되는 컴퓨터 액세스가능한 매체가 개시되고, 여기서 프로세싱 어레인지먼트가 명령들을 실행하는 경우, 프로세싱 어레인지먼트는 하나 이상의 분기 명령들에서 근사 프레디킷 경로 정보를 인코딩하는 단계, 멀티-코어 프로세서에서 하나 이상의 프로세서 코어들 상에서 하나 이상의 분기 명령들을 실행하는 단계, 및 하나 이상의 프레디킷 예측기들을 이용하여 프레디킷 예측을 생성하는 단계를 포함하는 절차를 수행하도록 구성되고, 하나 이상의 프로세서 코어들 각각은 하나 이상의 프레디킷 예측기들을 포함한다.
본 개시물은, 각종 양태들의 예시로서 의도되는 본 출원에서 설명된 특정 예들의 관점에 제한되지 않는다. 많은 변형들 및 예들은 당업자에게 명백한 바와 같이 그 사상 및 범위를 벗어남 없이 이루어질 수 있다. 본 개시물의 범위 내의 기능적으로 등가의 방법 및 장치들이, 본원에 열거된 것들에 추가하여 전술된 상세설명으로부터 당업자에게 명백하다. 이러한 변형들 및 예들은 첨부된 청구범위의 범위 내에 있는 것으로 의도된다. 본 개시물은, 이러한 청구범위에 권리를 주는 등가물의 완전한 범위와 함께 첨부된 청구범위의 용어들에 의해서만 제한되는 것이다. 본 개시물은 특정 방법, 시약, 화학물 조성 또는 생물학 시스템에 제한되지 않고, 이들은 물론 변할 수 있는 것으로 이해되어야 한다. 또한, 본원에 이용된 용어들은 특정 예들만을 설명하기 위한 목적이며, 제한으로 의도되지 않는 것으로 이해되어야 한다.
본원에서의 실질적으로 임의의 복수 및/또는 단수 용어들의 이용에 대해서, 당업자는 문맥 및/또는 명세서에 적합하도록 복수로부터 단수로 및/또는 단수로부터 복수로 해석할 수도 있다. 다양한 단수/복수의 치환은 명료함을 위해 본원에서 명백히 설정될 수도 있다.
일반적으로, 본원에서 그리고 특히 첨부된 청구항들 (예를 들어, 첨부된 청구항들의 본문) 에서 이용되는 용어는 일반적으로 "개방적인" 용어들 (예를 들어, "포함하는" 이라는 용어는 "포함하지만 한정되지 않는" 으로 해석되어야 하고, "갖는" 이라는 용어는 "적어도 갖는" 으로 해석되어야 하고, "포함한다" 라는 용어는 "포함하지만 한정되지 않는다" 로 해석되어야 한다) 로서 의도된다는 것이 당업자에 의해 이해될 것이다. 또한, 도입된 청구항 기재의 구체적 수가 의도되는 경우, 이러한 의도는 청구항에 명시적으로 기재될 것이며, 이러한 기재의 부재 시에는 그러한 의도가 없다는 것이 당업자에 의해 이해될 것이다. 예를 들어, 이해를 돕기 위하여, 다음의 첨부된 청구항들은 청구항 기재를 도입하기 위해 "적어도 하나" 및 "하나 이상" 의 서두 어구의 이용을 포함할 수도 있다. 그러나, 이러한 어구의 이용은, 동일 청구항이 서두 어구 "하나 이상" 또는 "적어도 하나" 및 "a" 또는 "an" 과 같은 부정관사 (예를 들어, "a" 및/또는 "an" 은 "적어도 하나" 또는 "하나 이상" 을 의미하도록 해석되어야 한다) 를 포함할 때에도, 부정관사 "a" 또는 "an" 에 의한 청구항 기재의 도입이 이렇게 도입된 청구항 기재를 포함하는 임의의 특정 청구항을 하나의 이러한 기재만을 포함하는 실시형태들로 한정한다는 것을 내포하는 것으로 해석되어서는 안되며; 청구항 기재를 도입하는 데 이용되는 정관사의 이용에 대해서도 동일하게 유효하다. 또한, 도입되는 청구항 기재의 구체적 수가 명시적으로 기재되는 경우에도, 당업자는 이러한 기재가 적어도 기재된 수 (예를 들어, 다른 수식어 없이, "2 개의 기재" 에 대한 그대로의 기재는, 적어도 2 개의 기재들 또는 2 개 이상의 기재들을 의미한다) 를 의미하는 것으로 해석되어야 한다는 것을 인식할 것이다. 또한, "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 를 함께 갖는 시스템 등을 포함하지만 이에 한정되지 않을 것이다). 또한, 상세한 설명, 청구항들 또는 도면들에서, 2 개 이상의 택일적 용어를 제시하는 사실상 임의의 이접 단어 및/또는 어구는 용어들 중 하나, 용어들 중 어느 한쪽 또는 양 용어 모두를 포함할 가능성들을 고려하도록 이해되어야 한다는 것이 당업자에 의해 이해될 것이다. 예를 들어, 어구 "A 또는 B" 는 "A" 또는 "B" 또는 "A 및 B" 의 가능성을 포함하도록 이해될 것이다.
또한, 본원의 특징들 또는 양태들이 마커쉬 (Markush) 군들에 의해 기술되는 경우에, 당업자는 본 개시물이 또한 이에 따라 마커쉬 군의 임의의 개별 요소 또는 요소들의 하위군에 의해 기술됨을 인식할 것이다.
당업자에 의해 이해되는 바와 같이, 임의의 그리고 모든 목적을 위해, 특히 서면 기재를 제공하는 관점에서, 본원에 개시된 모든 범위는 또한 임의의 그리고 모든 가능한 하위범위 (subrange) 및 그 하위범위들의 조합을 포괄한다. 임의의 기재된 범위는 충분히 기술하고 동일 범위가 적어도 2 등분, 3 등분, 4 등분, 5 등분, 10 등분 등으로 분할되게 하는 것으로서 용이하게 인식될 수 있다. 비한정적 예로서, 본원에서 논의된 각각의 범위는 용이하게 하위 3 분의 1, 중위 3 분의 1 및 상위 3 분의 1 등으로 분할될 수도 있다. 또한, 당업자에 의해 이해되는 바와 같이, "까지", "적어도", "보다 큰", "미만" 등과 같은 모든 용어는 인용된 수를 포함하고 계속해서 상술한 바와 같은 하위범위들로 분할될 수도 있는 범위를 언급한다. 마지막으로, 당업자에 의해 이해되는 바와 같이, 범위는 각각의 개별 요소를 포함한다. 이로써, 예를 들어, 1 내지 3 개의 셀들 또는 코어들을 갖는 군은 1 개의 셀 또는 코어, 2 개의 셀 또는 코어, 또는 3 개의 셀 또는 코어를 갖는 군들을 지칭한다. 유사하게, 1 내지 5 개의 셀들 또는 코어들을 갖는 군은 1 개의 셀 또는 코어, 2 개의 셀 또는 코어, 3 개의 셀 또는 코어, 4 개의 셀 또는 코어 또는 5 개의 셀 또는 코어를 갖는 군들 등을 언급한다.
본원에서 다양한 양태들 및 실시예들이 개시되었으나, 당업자에게는 다른 양태들 및 실시예들이 명백할 것이다. 본원에 개시된 다양한 양태들 및 실시예들은 설명을 위한 것이고 제한으로서 의도되지 않으며, 진정한 범위 및 사상이 다음의 청구항들에 의해 나타난다.

Claims (20)

  1. 복수의 프로세서 코어들을 포함하는 멀티-코어 프로세서를 포함하고,
    상기 프로세서 코어들 각각은 프레디킷 (predicate) 예측기를 포함하고, 상기 프레디킷 예측기들은 프레디킷 예측을 생성하도록 구성되는, 컴퓨팅 시스템.
  2. 제 1 항에 있어서,
    상기 프로세서 코어들 중 적어도 하나는 인코딩된 프레디킷 경로 정보를 갖는 분기 명령을 포함하는 애플리케이션 프로그램을 실행하고,
    상기 프레디킷 예측기는 상기 프레디킷 경로 정보에 기초하여 상기 프레디킷 예측을 생성하도록 구성되는, 컴퓨팅 시스템.
  3. 제 2 항에 있어서,
    상기 프로세서 코어들 중 적어도 하나는 상기 분기 명령 상의 상기 프레디킷 경로 정보를 인코딩하도록 구성되는, 컴퓨팅 시스템.
  4. 제 2 항에 있어서,
    상기 분기 명령은, 상기 분기 명령들을 실행하기 위해 상기 멀티-코어 프로세서에서의 상기 프로세서 코어들 중 어느 것이 할당되는지를 결정하는 블록 어드레스를 갖는, 컴퓨팅 시스템.
  5. 제 1 항에 있어서,
    상기 멀티-코어 프로세서는 명시적 데이터 그래프 실행 (explicit data graph execution; EDGE) 마이크로아키텍처를 포함하는, 컴퓨팅 시스템.
  6. 제 1 항에 있어서,
    상기 프레디킷 예측기는 베이스 예측기 및 글로벌 히스토리 레지스터를 포함하는, 컴퓨팅 시스템.
  7. 제 6 항에 있어서,
    상기 베이스 예측기는 기하학적 히스토리 길이 예측기를 포함하는, 컴퓨팅 시스템.
  8. 제 6 항에 있어서,
    상기 글로벌 히스토리 레지스터는 코어-로컬 프레디킷 히스토리 레지스터를 포함하는, 컴퓨팅 시스템.
  9. 제 6 항에 있어서,
    상기 글로벌 히스토리 레지스터는 글로벌 블록 히스토리 레지스터를 포함하는, 컴퓨팅 시스템.
  10. 제 6 항에 있어서,
    상기 글로벌 히스토리 레지스터는 코어-로컬 프레디킷 히스토리 레지스터 및 글로벌 블록 히스토리 레지스터를 포함하는, 컴퓨팅 시스템.
  11. 제 1 항에 있어서,
    상기 프레디킷 예측기들은 복수의 프레디킷 예측들을 생성하도록 구성되고,
    상기 프로세서 코어들 중 적어도 하나는 상기 프레디킷 예측들의 정확도를 나타내는 신뢰 예측을 획득하고, 상기 신뢰 예측에 기초하여 어느 프레디킷들이 후속하여 예측되어야 하는지를 결정하도록 구성되는, 컴퓨팅 시스템.
  12. 멀티-코어 프로세서에서 프레디킷 (predicate) 예측을 제공하는 방법으로서,
    상기 멀티-코어 프로세서에서 복수의 프로세서 코어들 각각에 대해 프레디킷 예측기를 제공하는 단계; 및
    상기 프레디킷 예측기들을 이용하여 복수의 분기 명령들로부터 상기 프레디킷 예측을 생성하는 단계를 포함하는, 프레디킷 예측을 제공하는 방법.
  13. 제 12 항에 있어서,
    상기 프로세서 코어들 중 적어도 하나에 의해 애플리케이션 프로그램을 실행하는 단계를 더 포함하고,
    상기 애플리케이션 프로그램은 인코딩된 프레디킷 경로 정보를 갖는 상기 복수의 분기 명령 중 하나를 포함하는, 프레디킷 예측을 제공하는 방법.
  14. 제 13 항에 있어서,
    컴파일러를 이용하여 상기 분기 명령 상의 상기 프레디킷 경로 정보를 인코딩하는 단계를 더 포함하는, 프레디킷 예측을 제공하는 방법.
  15. 제 13 항에 있어서,
    상기 애플리케이션 프로그램은 복수의 분기 명령들을 포함하고,
    상기 프레디킷 예측을 제공하는 방법은, 어느 프로세서 코어가 상기 분기 명령들 각각에 대해 블록 어드레스를 이용하여 상기 분기 명령들을 실행할 것인지를 결정하는 단계를 더 포함하는, 프레디킷 예측을 제공하는 방법.
  16. 제 12 항에 있어서,
    상기 적어도 하나의 프레디킷 예측기는 베이스 예측기 및 글로벌 히스토리 레지스터를 포함하는, 프레디킷 예측을 제공하는 방법.
  17. 제 16 항에 있어서,
    상기 베이스 예측기는 기하학적 히스토리 길이 예측기인, 프레디킷 예측을 제공하는 방법.
  18. 제 16 항에 있어서,
    상기 글로벌 히스토리 레지스터는 코어-로컬 프레디킷 히스토리 레지스터인, 프레디킷 예측을 제공하는 방법.
  19. 제 16 항에 있어서,
    상기 글로벌 히스토리 레지스터는 글로벌 블록 히스토리 레지스터인, 프레디킷 예측을 제공하는 방법.
  20. 멀티-코어 프로세서 컴퓨팅 시스템 내에서 프레디킷 (predicate) 예측을 제공하기 위한 컴퓨터 실행가능 명령들이 저장된 컴퓨터 액세스가능한 매체로서,
    프로세싱 어레인지먼트 (arrangement) 는 상기 프로세싱 어레인지먼트가 상기 명령들을 실행하는 경우 프로세싱 절차들을 수행하도록 구성되고,
    상기 프로세싱 절차들은,
    상기 멀티-코어 프로세서의 복수의 프로세서 코어들 각각에 대해 프레디킷 예측기를 제공하는 단계로서, 상기 프로세서 코어들 각각은 적어도 하나의 프레디킷 예측기를 포함하는, 상기 멀티-코어 프로세서의 복수의 프로세서 코어들 각각에 대해 프레디킷 예측기를 제공하는 단계; 및
    상기 프레디킷 예측기들을 이용하여 상기 프레디킷 예측을 생성하는 단계를 포함하는, 컴퓨터 액세스가능한 매체.
KR1020127005879A 2009-09-09 2010-06-11 분배형 프레디킷 예측을 제공하기 위한 방법, 시스템 및 컴퓨터 액세스가능한 매체 KR101364314B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/556,440 US8433885B2 (en) 2009-09-09 2009-09-09 Method, system and computer-accessible medium for providing a distributed predicate prediction
US12/556,440 2009-09-09
PCT/US2010/038350 WO2011031361A1 (en) 2009-09-09 2010-06-11 Method, system and computer-accessible medium for providing a distributed predicate prediction

Publications (2)

Publication Number Publication Date
KR20120068855A true KR20120068855A (ko) 2012-06-27
KR101364314B1 KR101364314B1 (ko) 2014-02-18

Family

ID=43648555

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127005879A KR101364314B1 (ko) 2009-09-09 2010-06-11 분배형 프레디킷 예측을 제공하기 위한 방법, 시스템 및 컴퓨터 액세스가능한 매체

Country Status (6)

Country Link
US (1) US8433885B2 (ko)
JP (3) JP2013500539A (ko)
KR (1) KR101364314B1 (ko)
CN (2) CN102473086B (ko)
DE (1) DE112010003595B4 (ko)
WO (1) WO2011031361A1 (ko)

Families Citing this family (46)

* 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
JP5707011B2 (ja) * 2010-06-18 2015-04-22 ボード・オブ・リージエンツ,ザ・ユニバーシテイ・オブ・テキサス・システム 統合分岐先・述語予測
EP2645254A4 (en) * 2010-11-25 2014-01-15 Toyota Motor Co Ltd PROCESSOR, ELECTRONIC CONTROL DEVICE, CREATION PROGRAM
WO2012127589A1 (ja) * 2011-03-18 2012-09-27 富士通株式会社 マルチコアプロセッサシステム、および分岐予測方法
US9182991B2 (en) 2012-02-06 2015-11-10 International Business Machines Corporation Multi-threaded processor instruction balancing through instruction uncertainty
US9268569B2 (en) 2012-02-24 2016-02-23 Apple Inc. Branch misprediction behavior suppression on zero predicate branch mispredict
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
US20160232346A1 (en) * 2015-02-05 2016-08-11 Qualcomm Incorporated Mechanism for tracking tainted data
US9946549B2 (en) 2015-03-04 2018-04-17 Qualcomm Incorporated Register renaming in block-based instruction set architecture
US9916164B2 (en) * 2015-06-11 2018-03-13 Intel Corporation Methods and apparatus to optimize instructions for execution by 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
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US9720693B2 (en) 2015-06-26 2017-08-01 Microsoft Technology Licensing, Llc Bulk allocation of instruction blocks to a processor instruction window
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US20160378491A1 (en) * 2015-06-26 2016-12-29 Microsoft Technology Licensing, Llc Determination of target location for transfer of processor control
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
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
US10031756B2 (en) 2015-09-19 2018-07-24 Microsoft Technology Licensing, Llc Multi-nullification
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
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
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
US10061584B2 (en) 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US20170083319A1 (en) * 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Generation and use of block branch metadata
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
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
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US10936316B2 (en) 2015-09-19 2021-03-02 Microsoft Technology Licensing, Llc Dense read encoding for dataflow ISA
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US20170083341A1 (en) * 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Segmented instruction block
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US11106467B2 (en) 2016-04-28 2021-08-31 Microsoft Technology Licensing, Llc Incremental scheduler for out-of-order block ISA processors
US20180081690A1 (en) * 2016-09-21 2018-03-22 Qualcomm Incorporated Performing distributed branch prediction using fused processor cores in processor-based systems
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

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3499252B2 (ja) * 1993-03-19 2004-02-23 株式会社ルネサステクノロジ コンパイル装置及びデータ処理装置
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
US6353883B1 (en) * 1998-08-04 2002-03-05 Intel Corporation Method and apparatus for performing predicate prediction
US20010042195A1 (en) * 1998-08-04 2001-11-15 Ralph M. Kling Method and apparatus for performing predicate prediction
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
US6513109B1 (en) * 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6662294B1 (en) * 2000-09-28 2003-12-09 International Business Machines Corporation Converting short branches to predicated instructions
US20030023959A1 (en) * 2001-02-07 2003-01-30 Park Joseph C.H. General and efficient method for transforming predicated execution to static speculation
US7114059B2 (en) * 2001-11-05 2006-09-26 Intel Corporation System and method to bypass execution of instructions involving unreliable data during speculative execution
KR100528479B1 (ko) * 2003-09-24 2005-11-15 삼성전자주식회사 전력 소모를 감소시키기 위한 분기 예측기 및 구현방법
US8607209B2 (en) * 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
US20050216714A1 (en) * 2004-03-25 2005-09-29 Intel Corporation Method and apparatus for predicting confidence and value
JP4277042B2 (ja) * 2005-03-31 2009-06-10 パナソニック株式会社 演算処理装置
US8904155B2 (en) * 2006-03-17 2014-12-02 Qualcomm Incorporated Representing loop branches in a branch history register with multiple bits
US20070288733A1 (en) * 2006-06-08 2007-12-13 Luick David A Early Conditional Branch Resolution
US7487340B2 (en) * 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
US9946550B2 (en) * 2007-09-17 2018-04-17 International Business Machines Corporation Techniques for predicated execution in an out-of-order processor
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

Also Published As

Publication number Publication date
CN102473086B (zh) 2015-08-19
JP2013500539A (ja) 2013-01-07
JP5747104B2 (ja) 2015-07-08
US20110060889A1 (en) 2011-03-10
KR101364314B1 (ko) 2014-02-18
JP2015164068A (ja) 2015-09-10
DE112010003595T5 (de) 2012-11-22
CN105183449A (zh) 2015-12-23
WO2011031361A1 (en) 2011-03-17
US8433885B2 (en) 2013-04-30
JP2014142969A (ja) 2014-08-07
CN105183449B (zh) 2018-12-18
DE112010003595B4 (de) 2024-06-06
CN102473086A (zh) 2012-05-23

Similar Documents

Publication Publication Date Title
KR101364314B1 (ko) 분배형 프레디킷 예측을 제공하기 위한 방법, 시스템 및 컴퓨터 액세스가능한 매체
US8127119B2 (en) Control-flow prediction using multiple independent predictors
US7797521B2 (en) Method, system, and computer program product for path-correlated indirect address predictions
US9870225B2 (en) Processor with virtualized instruction set architecture and methods
KR102071272B1 (ko) 벡터처리중 데이터 요소들의 처리순서 제어
Calder et al. A comparative survey of load speculation architectures
JP2014142969A5 (ko)
JP2018518775A (ja) 分離されるプロセッサ命令ウィンドウとオペランドバッファ
HUE035210T2 (hu) Eljárás és berendezés adat-elõtöltési kérelmek törlésére egy ciklushoz
US9244688B2 (en) Branch target buffer preload table
JP6457200B2 (ja) プロセッシング装置
KR20160031503A (ko) 마이크로프로세서에서의 선택적 리네이밍을 위한 방법 및 장치
KR20140131472A (ko) 상수 저장 레지스터를 구비하는 재구성 가능 프로세서
KR20110106717A (ko) 재구성 가능 어레이 및 재구성 가능 어레이의 제어 방법
US20130339689A1 (en) Later stage read port reduction
Wang et al. Decoupled affine computation for SIMT GPUs
KR101740317B1 (ko) 메모리 관리 방법 및 장치
US20070143575A1 (en) Flow optimization and prediction for VSSE memory operations
KR20120036208A (ko) 재구성 기반 컴퓨팅 장치 및 이의 메모리 의존성 보정방법
US9342303B2 (en) Modified execution using context sensitive auxiliary code
US20130007424A1 (en) Cascading indirect branch instructions
Keckler et al. Method, system and computer-accessible medium for providing a distributed predicate prediction
KR101084728B1 (ko) 동적 암시 어드레싱 모드를 지원하는 파이프라인 방식의 프로세서
US8898426B2 (en) Target buffer address region tracking
JPWO2009044635A1 (ja) データ処理装置および方法

Legal Events

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

Payment date: 20170119

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180118

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190116

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20200115

Year of fee payment: 7