KR101541001B1 - 아직 발행되지 않은 명령들에 대한 얼리 액세스를 가진 코프로세서를 구비한 프로세서 - Google Patents

아직 발행되지 않은 명령들에 대한 얼리 액세스를 가진 코프로세서를 구비한 프로세서 Download PDF

Info

Publication number
KR101541001B1
KR101541001B1 KR1020137023432A KR20137023432A KR101541001B1 KR 101541001 B1 KR101541001 B1 KR 101541001B1 KR 1020137023432 A KR1020137023432 A KR 1020137023432A KR 20137023432 A KR20137023432 A KR 20137023432A KR 101541001 B1 KR101541001 B1 KR 101541001B1
Authority
KR
South Korea
Prior art keywords
coprocessor
instruction
instructions
processor
queue
Prior art date
Application number
KR1020137023432A
Other languages
English (en)
Other versions
KR20130122675A (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 KR20130122675A publication Critical patent/KR20130122675A/ko
Application granted granted Critical
Publication of KR101541001B1 publication Critical patent/KR101541001B1/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 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/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

장치 및 방법들은 명령들의 얼리 액세스를 제공한다. 페치 큐는 명령 캐시에 커플링되며, 제 1 프로세서에 대한 프로세서 명령들 및 제 2 프로세서에 대한 코프로세서 명령들의 혼합을 저장하도록 구성된다. 코프로세서 명령 선택기는 페치 큐에 커플링되며, 페치 큐로부터의 코프로세서 명령들을 복사하도록 구성된다. 큐는 코프로세서 명령 선택기에 커플링되며, 이 큐로부터 코프로세서 명령들은 코프로세서 명령이 제 1 프로세서에 발행되기 전에 실행을 위해 액세스된다. 복사된 코프로세서 명령의 실행은 코프로세서 명령들이 프로세서에 발행되기 전에 코프로세서에서 시작된다. 복사된 코프로세서 명령의 실행은 코프로세서 명령이 프로세서에 발행된 이후에 프로세서로부터 수신되는 정보에 기초하여 완료된다.

Description

아직 발행되지 않은 명령들에 대한 얼리 액세스를 가진 코프로세서를 구비한 프로세서{PROCESSOR WITH A COPROCESSOR HAVING EARLY ACCESS TO NOT-YET ISSUED INSTRUCTIONS}
본 특허 출원은 "Processor with a Coprocessor having Early Access to Not-Yet Issued Instructions"라는 명칭으로 2011년 2월 4일에 출원된 가출원번호 제61/439,608호의 우선권을 주장하며, 이 가출원은 본 발명의 양수인에게 양도되고 이에 의하여 여기에 인용에 의해 명백하게 통합된다.
본 발명은 일반적으로 프로세싱 시스템에서 명령 큐를 편성하고 관리하기 위한 기술들에 관한 것이며, 더 구체적으로는 아직 발행되지 않은 명령들에 대한 얼리 액세스를 제공하기 위한 기술들에 관한 것이다.
셀 폰들, 랩탑 컴퓨터, 개인 휴대 단말(PDA), 데스크탑 컴퓨터들, 또는 그 밖의 것과 같은 많은 제품들은 통신 및 멀티미디어 애플리케이션들을 지원하는 프로그램들을 실행하는 하나 이상의 프로세서들을 통합한다. 프로세서들은 이러한 제품들에 대한 다수의 계산 집약적 기능(computationally intensive function)들을 지원하기 위하여 고성능 및 고효율로 동작할 필요가 있다.
프로세서들은 명령 캐시에 일반적으로 커플링되는 통합된 명령 페치 큐(unified instruction fetch queue)로부터 명령들을 페치(fetch)함으로써 동작한다. 효율적인 디스패칭(efficient dispatching)을 위한 명령들의 평가를 가능하게 하기 위하여 프로세서들을 지원하는 충분히 큰 순차(in-order) 통합된 명령 페치 큐를 가지는 것이 종종 필요하다. 예를들어, 통합된 명령 페치 큐를 공유하는 2개 이상의 프로세서들을 가진 시스템에서, 프로세서들 중 하나는 코프로세서일 수 있다. 이러한 시스템에서는 통합된 명령 페치 큐의 하단에서 코프로세서 명령 큐를 가질 필요성이 종종 존재한다. 이러한 하단 큐는 프로세서의 성능에 대한 코프로세서 명령들의 영향을 감소시키기 위하여 명령 페치 큐에서 프로세서 명령들에 대한 백프레셔(backpressure)를 감소시키기에 충분히 커야 한다. 또한, 코프로세서 명령들은 주 프로세서보다 실행할 프로세싱 스테이지들을 더 많이 필요로 할 수 있다. 만일 2개의 프로세서들 간에 동기화를 필요로 하는 명령들이 존재하면, 이러한 실행 시간 불일치는 성능 장애(performance bottleneck)들을 유발할 수 있다. 더욱이, 큰 명령 큐들은 코프로세서 명령들을 위하여 필요한 지원을 제공하기 위하여 타이밍 및 성능에 대한 영향, 구현 영역 및 전력 사용 측면에서 비용이 많이 들 수 있다.
본 발명의 여러 양상들 중에서, 본 발명은 다중 프로세서 시스템에서 명령 큐를 관리하기 위한 개선된 기술들에 대한 필요성을 인식한다. 이들을 위하여, 본 발명의 실시예는 명령들의 얼리 액세스를 위한 방법을 적용한다. 코프로세서 명령은 명령 페치 큐로부터 복사되며, 명령 페치 큐는 코프로세서 명령들 및 프로세서 명령들의 혼합(max)을 저장한다. 복사된 코프로세서 명령의 실행은 코프로세서 명령이 프로세서에 발행되기 전에 코프로세서에서 시작된다. 복사된 코프로세서 명령의 실행은 코프로세서 명령이 프로세서에 발행된 이후에 프로세서로부터 수신되는 정보에 기초하여 완료된다.
본 발명의 다른 실시예는 명령들의 얼리 액세스를 위한 장치를 다룬다. 페치 큐는 명령 캐시에 커플링되며, 제 1 프로세서에 대한 제 1 클래스의 명령들 및 제 2 프로세서에 대한 제 2 클래스의 명령들을 저장하도록 구성된다. 제 2 클래스 명령 선택기는 페치 큐에 커플링되며, 페치 큐로부터의 제 2 클래스 명령들을 복사하도록 구성된다. 큐는 제 2 클래스 명령 선택기에 커플링되며, 이 큐로부터 제 2 클래스 명령이 제 1 프로세서에 발행되기 전에 실행을 위해 제 2 클래스 명령들이 액세스된다.
본 발명의 또 다른 실시예는 아직 발행되지 않은 명령들의 실행을 시작하기 위한 방법을 다룬다. 다수의 코프로세서 명령들은 명령 페치 큐로부터 복사되며, 명령 페치 큐는 프로그램 순서로 코프로세서 명령들 및 프로세서 명령들의 혼합을 저장한다. 다수의 복사된 코프로세서 명령들의 실행은 다수의 코프로세서 명령들이 프로세서에 발행되기 전에 코프로세서에서 시작되며, 다수의 복사된 코프로세서 명령들의 실행은 프로세서에 발행된 다수의 코프로세서 명령들의 평가에 응답하여 프로세서에 의해 생성되는 정보에 기초하여 완료된다.
본 발명의 또 다른 실시예는 명령들의 얼리 액세스를 위한 장치를 다룬다. 본 장치는 명령 캐시에 커플링되는 페치 큐에 제 1 프로세서에 대한 제 1 클래스 명령들 및 제 2 프로세서에 대한 제 2 클래스 명령들을 저장하기 위한 수단을 포함한다. 본 장치는 페치 큐로부터 제 2 클래스 명령들을 복사하기 위한 수단을 포함한다. 본 장치는 제 2 클래스 명령이 제 1 프로세서에 발행되기 전에 실행을 위한 제 2 클래스 명령들에 액세스하기 위한 수단을 포함한다.
본 발명의 또 다른 실시예는 시스템을 동작시키기 위한 컴퓨터 판독가능 프로그램 데이터 및 코드로 인코딩되는 컴퓨터 판독가능 비-일시적 매체를 다룬다. 코프로세서 명령은 명령 페치 큐로부터 복사되며, 명령 페치 큐는 코프로세서 명령들 및 프로세서 명령들의 혼합을 저장한다. 복사된 코프로세서 명령의 실행은 코프로세서 명령이 프로세서에 발행되기 전에 코프로세서에서 시작된다. 복사된 코프로세서 명령의 실행은 코프로세서 명령이 프로세서에 발행된 이후에 프로세서로부터 수신되는 정보에 기초하여 완료된다.
본 발명의 더 완전한 이해 뿐만아니라 본 발명에 대한 추가적인 특징들 및 장점들은 이하의 상세한 설명 및 첨부 도면들로부터 명백하게 될 것이다.
도 1은 본 발명의 실시예가 유리하게 사용될 수 있는 예시적인 무선 통신 시스템의 블록도이다.
도 2a는 본 발명의 실시예가 유리하게 사용될 수 있는, 메모리 계층, 프로세서 및 코프로세서를 가진 프로세서 복합체를 예시한다.
도 2b은 본 발명의 실시예가 유리하게 사용될 수 있는, 프로세서와 코프로세서사이의 예시적인 커플링 수단을 예시한다.
도 3a는 본 발명의 실시예가 유리하게 사용될 수 있는, 아직 발행되지 않은 명령들에 대한 얼리 액세스를 제공하기 위한 프로세스를 예시한다.
도 3b는 본 발명의 실시예가 유리하게 사용될 수 있는, 프로세서와 코프로세서사이에서 정보를 통신하기 위한 프로세스를 예시한다.
도 3c는 본 발명의 실시예가 유리하게 사용될 수 있는, 프로세서에서 생성되는 정보에 기초하여 코프로세서 내의 코프로세서 명령들을 업데이트하기 위한 프로세스를 예시한다.
도 3d은 본 발명의 실시예가 유리하게 사용될 수 있는, 코프로세서 명령들을 발행하기 위한 프로세스를 예시한다.
도 3e는 본 발명의 실시예가 유리하게 사용될 수 있는, 순차 큐로부터 비순차 큐로 명령들을 이동시키기 위한 프로세스를 예시한다.
도 4는 본 발명의 실시예가 유리하게 사용될 수 있는, 코프로세서 및 프로세서 인터페이스의 예시적인 실시예를 예시한다.
본 발명은 본 발명의 여러 실시예들이 도시되는 첨부 도면들을 참조로 하여 더 완전하게 지금 설명될 것이다. 그러나, 본 발명은 다양한 형태들로 구현될 수 있으며, 여기에서 제시된 실시예들에 제한되는 것으로 해석되지 않아야 한다. 오히려, 이들 실시예들은 본 개시내용이 철저하고 완벽하게 되고 당업자에게 본 발명의 범위를 완전하게 전달하도록 제공된다.
본 발명의 교시들에 따라 동작시에 동작되거나 또는 이러한 동작들을 수행하기 위한 컴퓨터 프로그램 코드 또는 "프로그램 코드"는 초기에 C, C++, JAVA®, Smalltalk, JavaScript®, Visual Basic®, TSQL, Perl와 같은 고급 프로그래밍 언어 또는 다양한 다른 프로그래밍 언어들로 작성될 수 있다. 이들 언어들 중 하나로 작성된 프로그램은 고급 프로그램 코드를 원시 어셈블러 프로그램으로 변환함으로써 타겟 프로세서 아키텍처로 컴파일링된다. 타겟 프로세서 아키텍처에 대한 프로그램들은 또한 원시 어셈블러 언어로 직접 작성될 수 있다. 원시 어셈블러 프로그램은 32-비트 원시 명령 포맷과 같은 원시 명령 포맷으로 특정된 기계 레벨 이진 명령들의 명령 니모닉(mnemonic) 표현들을 사용한다. 여기에서 사용되는 프로그램 코드 또는 컴퓨터 판독가능 매체는 포맷이 프로세서에 의해 이해될 수 있는 목적 코드와 같은 기계 언어 코드를 지칭한다.
도 1은 본 발명의 실시예가 유리하게 사용될 수 있는 예시적인 무선 통신 시스템(100)을 예시한다. 예시를 위하여, 도 1은 3개의 원격 유닛들(120, 130, 150) 및 2개의 기지국들(140)을 도시한다. 공통 무선 통신 시스템들이 더 많은 수의 원격 유닛들 및 기지국들을 가질 수 있다는 것이 인식될 것이다. 컴포넌트들(125A, 125C, 125B, 125D)에 의해 각각 표현되는 바와같은 하드웨어 컴포넌트들, 소프트웨어 컴포넌트들 또는 이 둘다를 포함하는 원격 유닛들(120, 130, 150) 및 기지국들(140)은 이하에서 추가로 논의되는 바와같이 본 발명을 구현하는데 적합하게 되었다. 도 1은 기지국(140)으로부터 원격 유닛들(120, 130, 150)로의 순방향 링크 신호들(180) 및 원격 유닛들(120, 130, 150)로부터 기지국들(140)로의 역방향 링크 신호들(190)을 도시한다.
도 1에서, 원격 유닛(120)은 모바일 전화로서 도시되며, 원격 유닛(130)은 휴대용 컴퓨터로서 도시되며, 원격 유닛(150)은 무선 로컬 루프 시스템의 고정 위치 원격 유닛으로서 도시된다. 예로서, 원격 유닛들은 대안적으로 셀 폰들, 페이저들, 워키 토키들, 핸드헬드 개인 통신 시스템(PCS) 유닛들, 개인 휴대 단말들과 같은 휴대용 데이터 유닛들, 또는 미터 판독 장비(meter reading equipment)와 같은 고정 위치 데이터 유닛일 수 있다. 비록 도 1이 본 개시내용의 교시들에 따른 원격 유닛들을 예시할지라도, 본 개시내용은 이들 예시적으로 예시된 유닛들에 제한되지 않는다. 본 발명의 실시예들은 명령 큐를 공유하는 2개 이상의 프로세서들을 가진 임의의 프로세서 시스템에서 적절히 사용될 수 있다.
명령 페치 큐를 공유하는 2개 이상의 프로세서들을 가진 시스템에서, 프로세서들 중 하나는 벡터 프로세서, 단일 명령 다중 데이터(SIMD: single instruction multiple data) 프로세서 또는 그 밖의 것과 같은 코프로세서일 수 있다. 이러한 시스템에서는 프로세서 명령들에 대한 백프레셔를 최소화하여 프로세서의 성능에 대한 명령 페치 큐의 코프로세서 명령들의 영향을 감소시키기 위하여 추가 명령 큐가 활용될 수 있다. 코프로세서의 성능을 개선시키기 위하여, 코프로세서는 비순차 시퀀스(out-of-order sequence)에서 종속성들을 가지지 않은 코프로세서 명령들을 프로세싱하도록 구성된다. 큰 큐들은 큐에서 명령들의 프로그램 순서를 추적하기 위하여 필요한 지원을 제공하기 위하여 타이밍 및 성능에 대한 영향, 구현 영역 및 전력 사용 측면에서 비용이 많이 들 수 있다.
큐들은 순차(in-order) 큐들 또는 비순차(OoO: out-of-order) 큐들로서 구현될 수 있다. 순차 명령 큐들은 기본적으로 명령들의 엄격한 순서화를 강제하도록 구성되는 선입-선출(FIFO: first-in first-out) 큐들이다. FIFO 큐에 저장되는 제 1 명령들은 판독되는 제 1 명령들이며, 이에 따라 프로그램 순서로 명령들을 추적한다. 종속성들을 가지지 않는 많은 명령들이 비순차적으로 실행될 수 있기 때문에, 엄격한 FIFO 순서는 실행가능 비순차 명령들이 실행되는 것을 막는다. 여기에서 사용되는 비순차 명령 큐는 순차적으로 명령들을 기록하고 비순차적으로 명령들에 액세스하도록 구성된다. 이러한 OoO 명령 큐들은 그들이 프로그램 순서 및 명령들 간의 종속성들을 추적하기 위한 추가 수단을 필요로 하고 큐내의 명령들이 그들이 입력된 순서와 다른 순서로 액세스될 수 있기 때문에 더 복잡하다. 또한, OoO 명령 큐가 클수록, 추적 수단은 더 비싸게 된다.
본 발명의 프로세서 복합 명령 큐는 프로세서 명령 페치 큐 및 코프로세서 명령 큐의 조합으로 구성된다. 프로세서 명령 페치 큐는 FIFO 순차 명령 큐로서 구성되며, 명령들의 프로그램 순서화에 따라 다수의 프로세서 명령들 및 코프로세서 명령들을 저장한다. 코프로세서 명령 큐는 순차 FIFO 큐 및 비순차 큐를 포함하는 하이브리드 큐로서 구성된다. 코프로세서 명령 큐는 프로세서 명령 페치 큐에 커플링되며, 이로부터 코프로세서 명령들은 프로세서 명령들에 대하여 비순차적으로 액세스되며 코프로세서 명령들에 대하여 순차적으로 액세스된다.
도 2a는 메모리 계층(202), 프로세서(204) 및 코프로세서(206)를 가진 프로세서 복합체(200)를 예시한다. 메모리 계층(202)은 명령 페치 큐(208), 레벨 1 명령 캐시(L1 I-캐시)(210), 프리디코더(211), 레벨 1 데이터 캐시(L1 D-캐시)(212) 및 메모리 시스템(214)을 포함한다. 명령 페치 큐(208)가 메모리 계층(202)에 도시된 반면에, 명령 페치 큐(208)는 또한 프로세서(204) 또는 코프로세서(206)에 적절하게 배치될 수 있다. 명령들은 페치된 순차 프로그램 순서로 명령 페치 큐(208)에 기록된다. 프로세서 복합체에 접속될 수 있는 주변 디바이스들은 논의의 명확화를 위하여 도시되지 않는다. 프로세서 복합체(200)는 L1 D-캐시(212)에 저장되고 메모리 시스템(214)과 연관되는 데이터를 활용하여 L1 I-캐시(210)에 저장된 프로그램 코드를 실행하기 위하여 도 1의 하드웨어 컴포넌트들(125A-125D)에서 적절히 사용될 수 있으며, 이 메모리 시스템(214)은 상위 레벨들의 캐시 및 주 메모리를 포함할 수 있다. 프로세서(204)는 범용 프로세서, 멀티-스레드(multi-threaded) 프로세서, 디지털 신호 프로세서(DSP), 애플리케이션 특정 프로세서(ASP) 또는 그 밖의 것일 수 있다. 코프로세서(206)는 범용 프로세서, 디지털 신호 프로세서, 벡터 프로세서, 단일 명령 다중 데이터(SIMD) 프로세서, 애플리케이션 특정 코프로세서 또는 그 밖의 것일 수 있다. 프로세싱 복합체(200)의 다양한 컴포넌트들은 주문형 집적회로(ASIC) 기술, 필드 프로그램 가능 게이트 어레이(FPGA) 기술, 또는 다른 프로그램 가능 로직, 이산 게이트 또는 트랜지스터 로직 또는 의도된 애플리케이션에 적합한 임의의 다른 이용가능 기술을 사용하여 구현될 수 있다.
프로세서(204)는 예를들어 프로그램 카운터(PC)(217)를 가진 발행 및 제어 회로(216) 및 실행 파이프라인들(218)을 포함한다. 발행 및 제어 회로(216)는 실행 파이프라인들(218)에 의해 프로세싱하기 위한, 명령 페치 큐(208)로부터의 명령들의 프로그램 순서에 따라 L1 I-캐시(210)로부터의 예를들어 4개의 명령들의 패킷을 페치한다. 만일 명령 페치 동작이 L1 I-캐시(210)에서 미스(miss)하면, 명령은 주 메모리 및 레벨 2(L2) 캐시와 같은 다수의 레벨들의 캐시를 포함할 수 있는 메모리 시스템(214)으로부터 페치된다. 메모리 시스템(214)으로부터 페치되는 명령은 페치 명령이 코프로세서 명령인지의 여부를 결정하는 프리디코더(211)에서 디코딩된다. 예를들어, 코프로세서 명령으로서 식별되는 페치된 명령은 인코딩된 코프로세서 명령의 3개의 최상위 비트 위치들에서 모두 1들을 가지는 것과 같은 짧은 식별자로 인코딩된다. 그 다음에, 인코딩된 코프로세서 명령은 명령 캐시(210)에 로드되며, 페치된 명령을 명령 페치 큐(208)에 입력하기 위한 고속 페치 응답 시간동안 바이패스 경로(220)를 통해 멀티플렉서 기능(219)에 포워드된다. 짧은 식별자는 명령 페치 큐(208)에서 코프로세서 명령들의 식별을 위한 고속 디코딩을 허용한다. 명령 페치 큐(208)는 코프로세서(206)에 코프로세서 명령들을 포워드하고 프로세서(204)에 명령들을 발행하는 것을 제어 및 조정하기 위하여 포인터들을 활용한다. 명령 페치 큐(208)로부터 명령을 복사하고 코프로세서에 명령을 포워드하는 동작은 명령을 통과(transit)시키는 것으로 불린다. 예를들어, 제 1 포인터는 명령 페치 큐(208)의 명령이 코프로세서(206)로 아직 통과되지 않은 가장 오래된 명령이라는 것을 표시하기 위하여 사용될 수 있다. 제 2 포인터는 명령 페치 큐(208)의 명령이 프로세서(204)에 아직 발행되지 않은 가장 오래된 명령이라는 것을 표시하기 위하여 사용될 수 있다. 명령 페치 큐(208)의 제어 로직은 제 1 포인터, 유효 비트들, 및 명령 페치 큐(208)로부터 액세스되는 명령의 위치를 사용하여, 예를들어 다음 4개 까지의 코프로세서 명령들을 선택한다. 일반적으로, 명령 페치 큐(208)의 각각의 엔트리는 "유효 비트"를 가진다. 이들 유효 비트들은 엔트리가 추가 프로세싱을 위하여 선택될 수 있는 유효 명령을 가지는지의 여부를 결정하기 위하여 제어 로직에 의해 사용되는 속성값(attribute)들이다. 엔트리는 명령이 그 위치로부터 페치되지 않았기 때문에 초기에 무효로 되거나 또는 유효 엔트리는 그 엔트리와 연관된 명령이 명령 페치 큐(208) 외부로 플러시(flush)될 필요가 있는 경우에 무효하게 될 수 있다. 패킷의 4개의 명령들은 명령 페치 큐(208)에서 인코딩된 명령과 함께 저장된 짧은 식별자에 따라 프로세서(204) 또는 코프로세서(206)상에서 실행하기 위하여 액세스될 수 있다는 것이 인식된다. 프로세서 명령들의 패킷은 일반적으로 디코딩되어 실행 파이프라인들(218)에 병렬로 발행된다. 건축학적으로 패킷이 4개의 명령들에 제한되지 않기 때문에, 4개보다 적거나 또는 4개보다 많은 명령들이 페치되어 구현 및 애플리케이션 요건들에 따라 병렬로 발행 및 실행될 수 있다.
프로세서 복합체(200)는 컴퓨터 판독가능 저장 매체상에 저장된 프로그램의 제어하에서 명령들을 실행하도록 구성될 수 있다. 예를들어, 컴퓨터 판독가능 저장 매체는 또한 프로세서 복합체(200)와 국부적으로 직접 연관될 수 있으며, 예를들어 L1 D-캐시(212) 및 메모리 시스템(214)으로부터 획득되는 데이터에 대하여 동작하기 위하여 L1 I-캐시(210)로부터 이용가능할 수 있다. 명령들의 시퀀스를 포함하는 프로그램은 부트 판독 전용 메모리(ROM), 하드 드라이브, 광학 디스크와 같은 다른 소스들로부터 또는 네트워크와 같은 외부 인터페이스로부터 메모리 계층(202)으로 로드될 수 있다.
코프로세서(206)는 예를들어 통과용 코프로세서 명령 선택기(coprocessor instruction selector for transit)(224), 하이브리드 명령 큐(225) 및 코프로세서 실행 복합체(226)를 포함한다. 통과용 코프로세서 명령 선택기(224)는 다수의 멀티플렉서들을 포함할 수 있으며, 다수의 멀티플렉서들의 출력들은 프로세서(204)의 파이프라인 요건들에 따라 포스팅(posting) 레지스터들(209)의 세트에 커플링될 수 있다. 통과용 코프로세서 명령 선택기(224)를 제어하도록 동작하는 코프로세서 선택 회로(223)는 명령 페치 큐(208)로부터의 코프로세서 명령들에 액세스하기 위하여 선택 신호들을 생성한다. 다수의 멀티플렉서들은 명령 페치 큐(208)로부터 하나 이상의 코프로세서 명령들을 선택하여, 상호혼합된(intermixed) 프로세서 명령들에 대하여 스킵(skip)한다. 선택된 코프로세서 명령들의 수는 하이브리드 명령 큐(225)에서 명령들을 수신하기 위한 공간의 유용성(availability)에 부분적으로 의존한다. 명령 페치 큐(208)로부터 통과되는 코프로세서 명령들의 수는 코프로세서 포인터들의 동작을 통해 추적된다. 예를들어, 종료 포인터는 포스팅 레지스터가 파이프라인 동작들에 의해 요구되는 경우에 포스팅 레지스터들(209)과 같은 포스팅 레지스터를 고려하여 통과된 코프로세서 명령들의 수 만큼 증가된다. 시작 포인터는 명령 페치 큐(208)로부터 선택되는 코프로세서 명령들의 수 만큼 감소된다.
하이브리드 명령 큐(225)는 순차 FIFO 큐(228), 비순차 큐(229), 및 이들 큐 둘다를 관리하도록 구성된 큐 및 해저드 제어 회로(230)를 포함한다. 코프로세서 명령들은 프로세서 명령들에 대하여 비순차적으로 그리고 코프로세서 명령들에 대하여 순차적으로 명령 페치 큐(208)로부터 선택된다. 하이브리드 명령 큐(225)는 통과용 코프로세서 명령 선택기(224)에 의해 명령 페치 큐(208)에 커플링된다. 통과용 코프로세서 명령 선택기(224)는 명령 페치 큐(208)의 다수의 명령들에 액세스하며, 자신이 선택을 위하여 액세스하는 코프로세서 명령들을 다수의 명령들 내에서 식별할 수 있다. 통과용 코프로세서 명령 선택기(224)는 명령 페치 큐(208)로부터의 코프로세서 명령들을 복사하며 복사된 코프로세서 명령들을 하이브리드 명령 큐(225)에 제공한다.
하이브리드 명령 큐(225)에서, 명령 페치 큐(208)로부터 액세스되는 명령들이 도달할때, 수신된 명령들은 비순차 큐(229)에 룸(room)이 존재하는 경우에 비순차 큐(229)에 저장된다. 그렇지 않으면, 명령들은 FIFO 큐(228)에 배치되며, OoO 큐(229)에서 이용가능한 공간이 존재할때 비순차 큐(229)로 이동된다. 멀티플렉서(231)는, 큐 및 해저드 제어 회로(230)의 제어하에서, 통과용 코프로세서 명령 선택기(224)로부터 수신되는 명령들에 대한 바이패스 경로를 선택하거나 또는 FIFO 큐(228)로부터 수신되는 명령들을 선택하기 위하여 사용된다. 여기에서 사용되는 디스패칭(dispatching)은 명령 페치 큐(208)로부터 프로세서(204) 또는 코프로세서(206)로 명령을 이동시키는 것으로 정의된다. 여기에서 사용되는 발행(issuing)은 예를들어 표준 포맷, 디코딩된 포맷 또는 정교한 포맷(elaborated format)으로 명령을 프로세서(204) 또는 코프로세서(206) 내의 연관된 실행 파이프라인에 송신하는 것으로 정의된다.
코프로세서 명령들은 코프로세서 명령들이 수신되는 순서로 OoO 큐(229)에 기록된다. 코프로세서 실행 복합체(226)내에 도시된 것과 같이 코프로세서가 다수의 실행 파이프라인들을 가지는 경우에, 코프로세서 명령들은 그들의 타겟 실행 파이프라인들에 대하여 순차적으로 판독되나, 타겟 실행 파이프라인들에 걸쳐 비순차적으로 존재할 수 있다. 예를들어, CX 명령들은 다른 CX 명령들에 대하여 순차적으로 실행될 수 있으나, CL 및 CS 명령들에 대하여 비순차적으로 실행될 수 있다. 또 다른 실시예에서, 실행 파이프라인들은 개별적으로 비순차적이도록 구성될 수 있다. 예를들어, CX 명령은 다른 CX 명령들과 비순차적으로 실행될 수 있다. 그러나, 이러한 비순차 실행 능력을 제공하기 위하여 실행 파이프라인 레벨에서 추가 종속성 추적이 요구될 수 있다. 큐 및 해저드 제어 회로(230)는 명령들 간의 종속성들이 있는지를 검사하며 명령들 간의 종속성 충돌들과 같은 해저드들을 회피하기 위하여 명령 발행을 제어한다. 비순차 큐(229)는 OoO 큐가 보다 큰 경우에 명령이 다른 방식으로 디스패치될때 명령이 순차 큐에 있기 때문에 명령이 코프로세서 실행 복합체(226)에 계속해서 디스패칭되는 경우가 좀처럼 발생하지 않도록 하는 크기를 가진다. 예시적인 구현에서, 순차 FIFO 큐(228) 및 비순차 큐(229)는, 코프로세서가 CS 실행 파이프라인(237)에 커플링된 코프로세서 저장 (CS) 발행 파이프라인(236), CL 실행 파이프라인(239)에 커플링된 코프로세서 로드(CL) 발행 파이프라인(238), 및 CX 실행 파이프라인(241)에 커플링된 코프로세서 기능(CX) 발행 파이프라인(240)을 가지는 상황에서, 각각 16개의 엔트리들을 가진다. 또한, 코프로세서 레지스터 파일(CRF)(242)은 각각의 실행 파이프라인에 커플링될 수 있다.
코프로세서 명령들, 특히 플로팅-포인트(floating-point), SIMD 및 다른 산술 동작들을 위한 명령들은 종종 프로세서 명령들보다 실행할 파이프라인 스테이지들을 더 많이 필요로 한다. 이러한 불일치는 프로세서와 코프로세서 사이의 동기화를 필요로 하는 명령들이 존재할때 성능 장애들을 유발할 수 있다. 예를들어, 프로세서에서의 프로그램 흐름이 코프로세서의 결과에 종속될때, 그 결과는 프로세서 성능의 장애를 막기 위하여 최소 지연으로 제공되어야 한다. 이러한 종속성들이 없을때 조차, 코프로세서 명령이 명령 페치 큐에서 검출되자마자 코프로세서 실행을 시작할 수 있는 성능 장점이 존재하며, 이는 코프로세서에서의 잠재적 유휴 사이클들을 최소화시킬 것이다.
일반적인 구현에서, 발행 로직은 발행 큐의 명령들을 검사하고, 프로세서 및 코프로세서로부터의 백프레셔가 존재하지 않을때(이는 명령들이 실행을 위해 수락될 수 있다는 것을 표시함) 프로세서 및 코프로세서에 명령들을 발행한다. 백프레셔는 코프로세서가 다른 명령을 수락할 수 없도록 자신의 실행 파이프라인이 채워진 코프로세서에 의해 유발될 수 있다. 이러한 상황에서, 코프로세서로부터의 백프레셔는 프로세서가 다른 프로세서 명령을 수락할 수 있는 경우에 조차 발행 큐로부터 프로세서 명령의 발행을 막을 것이다. 백프레셔는 또한 프로세서에 의해 유발될 수 있어서 코프로세서가 코프로세서 명령을 수락할 수 있는 경우에 조차 코프로세서 명령이 발행되지 않도록 할 것이다. 이러한 상황에서, 프로세서로부터의 백프레셔는 코프로세서가 유휴상태가 되도록 할 것이며, 대신에 여기서는 코프로세서 명령을 실행할때 코프로세서가 진행할 수 있게 한다. 유휴 사이클들은 성능이 저하되고 에너지가 낭비되는 측면에서 희생이 크다. 따라서, 프로세서 또는 코프로세서로부터의 백프레셔를 최소화하는 것은 코드의 실행이 전체적으로 더 효율적으로 이루어지도록 한다.
본 발명은 주 프로세서로부터의 백프레셔와 관계 없이 코프로세서 명령들이 코프로세서에 송신되거나 또는 코프로세서로 통과되도록 한다. 이렇게 수행할때, 코프로세서는 코프로세서 명령이 명령 페치 큐(208)와 같은 프로세서 발행 큐로부터 발행되는 것으로 고려되기 전에 그 코프로세서 명령을 실행하는 것을 시작할 수 있다. 비록 코프로세서 명령들이 코프로세서(206)로 통과될지라도, 코프로세서 명령들은 명령 페치 큐(208)로부터 제거되지 않는다. 예를들어, 코프로세서 명령들은 프로그램 순서를 효율적으로 유지하고, 실행을 위한 코프로세서 명령들을 커밋(commit)하며, 프로세서 및 코프로세서 모두로부터의 동작들을 필요로 하는 명령 실행을 조절하며 그리고 플러시(flush)들을 조절하기 위한 목적들로 프로세서(204)가 이들 코프로세서 명령들을 추적하도록 하기 위하여 명령 페치 큐(208)에서 유지된다. 프로세서가 코프로세서 명령에 대한 커밋 표시를 제공할때, 프로세서는 코프로세서 명령이 플러시되지 않음을 그리고 코프로세서가 코프로세서 명령을 실행할 수 있음을 결정하였다. 코프로세서 명령은 잘못 예측된 브랜치의 경로에 있는 것, 데이터 중단, 인터럽트 또는 그 밖의 것을 포함하는 다양한 이유들 때문에 플러시될 수 있다. 조건부 명령은 그것이 플래그 세팅들에 의해 예를들어 실행되지 않는 것으로 결정되는 경우에 플러시되지 않는다. 이 경우에, 비-실행 조건부 코프로세서 명령은 비동작(NOP: no operation) 명령으로서 실행된다.
프로세서(204)는 일반적으로 코프로세서 명령들을 포함하는 명령들이 프로그램 순서대로 실행을 완료하도록 하는 역할을 담당한다. 코프로세서에서, 실행 파이프라인들(237, 239, 241)은 서로에 대하여 비순차적으로 동작들을 수행한다. 해저드 회로(230) 및 순차 퇴거(retirement) 회로(244)는 내부적으로 조직된 상태(internally architected state)가 프로그램 순서로 업데이트되도록 하기 위하여 사용된다. 프로세서(204)는 자신의 파이프라인들과 코프로세서 파이프라인들 간의 명령 실행을 조정하도록 구성된다. 코프로세서는 프로세서와의 조정된 동작들을 통해 메모리 또는 주변장치들에 액세스하도록 구성된다.
프로세서(204) 및 코프로세서(206)는 공동으로 실행되는 명령이 존재할때 본질적으로 싱크-업(sync-up) 한다. 예를들어, 로드 명령을 실행할때, 프로세서(204)는 페치될 데이터에 대한 메모리 어드레스를 계산하고, 메모리로부터 데이터를 페치하며, 도 4의 코프로세서의 로드 FIFO(416)에 데이터를 송신한다. 코프로세서(206)는 로드 데이터가 이용가능할때 로드 데이터를 수락하며, 이후 그 로드 데이터에 종속하는 명령들의 실행을 계속한다. 이러한 동작은, 코프로세서(206)가 도 4의 저장 FIFO(418)에 저장 데이터를 입력하고 프로세서(204)가 준비될때 저장 데이터를 수락하는 이러한 경우를 제외하고, 저장들에 대하여 유사하다. 프로세서(204)와 코프로세서(206)의 레지스터들 사이에서 데이터를 이동시키는 것은 유사한 방식으로 조절된다.
도 2b는 본 발명에 따라 프로세서(204)와 코프로세서(206)사이의 예시적인 커플링 로직(250)을 예시한다. CS 실행 파이프라인(237)은 실행 회로(252) 및 저장 FIFO(254)를 포함한다. 프로세서 실행 파이프라인들(218)은 발행된 코프로세서 명령이 실행을 위해 커밋(commit)되는지의 여부 그리고 발행된 코프로세서 명령이 어드레스, 조건 정보 또는 그 밖의 것과 같은 속성값들을 필요로 하는지의 여부를 결정하고 필요할때 발행된 코프로세서 명령에 대한 어드레스를 생성하기 위한 회로소자를 포함한다. 코프로세서 저장 명령의 예시적인 실행을 위하여, 커밋 정보(256) 및 속성값 정보(258)는 CS 실행 회로(252)에 송신된다. 정보는 개별 신호 라인들을 통해 또는 버스를 통해 송신될 수 있다. 또한, 코프로세서상에서, 커밋 정보 및 필요한 속성값들은 일단 수신되면 코프로세서 명령이 위치하는 곳이면 어디든지, 예를들어, 순차 큐에, 비순차 큐에 또는 CS 실행 파이프라인(237)에 저장될 수 있다. 특정 명령들은 프로세서(204) 및 코프로세서(206)상에서 개별 동작들의 조합으로서 실행된다. 예를들어, 코프로세서 저장 동작은 프로세서(204)와 코프로세서(206)의 CS 실행 파이프라인(237)사이의 협력동작(collaboration)이다. 프로세서(204)는 어드레스 생성, 허가 검사 및 캐시 액세싱을 수행하는 반면에, 코프로세서(206)는 데이터 해저드들을 분석하고, 데이터를 포착하며, 필수 데이터 프로세싱을 수행하며, 데이터 정렬을 수행하며, 데이터가 저장되어 이용가능하다는 것을 프로세서(204)에 시그널링한다. 예를들어, 코프로세서 저장 명령들에 대한 데이터 어드레스는 프로세서 실행 파이프라인들(218)에서 생성되며, L1 D-캐시(212)를 어드레싱하기 위하여 멀티플렉서(262)와 같은 멀티플렉서를 통해 선택된다. 코프로세서 저장 명령에 대한 데이터는 저장 FIFO(254)로부터 선택되며, 예를들어 신호 인터페이스(268)를 통해 L1 D-캐시(212)에 송신되도록 하기 위하여, 버스(264)를 통해 멀티플렉서(266)와 같은 멀티플렉서에 송신된다. 종종, 코프로세서 실행 단계들은 동일한 명령의 실행을 지원하는 프로세서 실행 단계들보다 더 긴 시간이 걸린다. 이러한 실시예는 프로세서 자체의 백프레셔로 인한 프로세서의 지연들 보다 늦은 코프로세서 대기시간의 하이딩(hiding)을 허용한다. 이러한 경우에, 프로세서는 프로세서가 프로세서 자체의 실행 파이프들에 백업되기 때문에 백프레셔를 유발한다. 본 발명의 실시예는 코프로세서가 유휴 상태로 되는 것, 사실상 코프로세서 명령 실행의 대기시간의 일부분 또는 전체를 하이딩하는 것보다 오히려 코프로세서 명령들을 실행하는 것을 시작하도록 한다.
코프로세서 저장 명령의 실행을 위해 도 2b에 예시된 예는 비록 프로세서(204)가 백업될지라도 저장 명령의 실행이 코프로세서 파이프라인에서 전진한다는 점에서 본 발명의 실시예들로부터 장점을 얻는다. 그러나, 장점은 일부 상황들에서 제한될 수 있는데, 왜냐하면 저장 명령의 실행은 저장 명령이 프로세서(204)에 발행된 이후에만 프로세서(204)가 공급할 수 있는 특정 속성값들(258)을 코프로세서 파이프라인이 수신하기 전에 코프로세서 파이프라인의 맨 끝으로 전진할 수 없기 때문이다.
코프로세서(206)가 프로세서로부터의 어느 속성값들도 필요로 하지 않고 코프로세서 파이프라인의 끝까지 완전하게 실행할 수 있는, 코프로세서(206)의 산술 계산들에 프로세서(204)의 프로그램 흐름이 의존하는 다른 경우들이 존재한다. 예는 하나 이상의 긴 대기시간 산술 명령들의 실행, 및 이 실행 이후에 코프로세서(206)의 종속성 비교 명령의 실행 및 비교의 결과에 종속하는 프로세서(204)의 브랜치 명령의 실행이다. 이러한 예에서, 비교 명령을 포함하는 전체 코프로세서 명령 시퀀스는 브랜치 명령이 오히려 발행될 필요가 있기 전에 완료로 실행될 수 있다. 브랜치가 결국 프로세서(204)에 발행될때, 브랜치가 종속하는 비교 결과는 이미 이용가능하게 될 것이며, 따라서 코프로세서 명령들과 연관된 대기시간의 전부를 효과적으로 하이딩시킨다.
도 3a는 본 발명에 따라 명령들을 큐잉(queuing)하기 위한 프로세스(300)를 예시한다. 프로세스(300)는 코프로세서(206)의 명령 동작들에 따른다. 이전 도면들에 대한 참조들은 명확한 구현 세부사항들을 강조하고 수행하기 위하여 실시되며 이들 특정 세부사항들에 프로세스를 제한하지 않도록 실시된다. 블록(302)에서, 코프로세서 명령들의 윈도우는 도 2a의 명령 페치 큐(208)와 같은 명령 큐에서 식별되며 코프로세서(206)에 통과된다. 윈도우는 구현에 따라 1개 내지 N개의 명령들일 수 있다. 선택 회로(223)의 윈도우 선택 기능은 적용가능한 클래스의 명령들, 이러한 경우에 코프로세서 명령들을 선택하며, 프로세서 명령들과 같은 다른 상호혼합된 명령들을 선택하지 않는다. 명령들의 윈도우를 통과시키기 위하여, 윈도우의 N개의 코프로세서 명령들은 명령 페치 큐(208)로부터 복사되어 코프로세서(206)에 포워드된다. 결정 블록(304)에서는 명령들의 윈도우가 페치 큐로부터 수신되었는지에 관한 결정이 이루어진다. 만일 적어도 하나의 명령이 수신되지 않았다면, 프로세스(300)는 명령이 수신될때까지 대기한다. 명령들의 윈도우가 수신될때, 프로세스(300)는 결정 블록(306)으로 진행한다. 결정 블록(306)에서는 비순차 큐(229)와 같은 큐가 코프로세서 명령들로 가득 차 있는지에 관한 결정이 이루어진다. 만일 비순차 큐(229)가 가득 차 있지 않으면, 프로세스(300)는 결정 블록(310)으로 진행한다. 블록(310)에서, 명령들의 수신된 윈도우는 비순차 큐(229)에 저장된다. 명령들의 윈도우가 N개의 명령들일 수 있고 비순차 큐(229)가 N보다 적은 명령들을 위한 룸을 가질 수 있기 때문에(여기서, N>1), 비순차 큐는 채워지며, 이후 프로세스(300)는 명령들의 윈도우로부터 임의의 나머지 명령들을 프로세싱하기 위하여 결정 블록(304)으로 리턴한다. 만일 비순차 큐(229)가 N개의 명령들의 윈도우를 위한 룸을 가지면, N개의 코프로세서 명령들은 블록(310)에 저장된다. 이후, 프로세스(300)는 코프로세서 명령들의 다음 윈도우가 수신될때까지 대기하기 위하여 N개의 명령들을 저장한 이후에 결정 블록(304)으로 리턴한다.
결정 블록(306)으로 리턴할때, 만일 비순차 큐(229)가 가득 차 있으면, 프로세스(300)는 결정 블록(314)으로 진행한다. 결정 블록(314)에서는 순차 큐(228)가 또한 가득차 있는지에 관한 결정이 이루어진다. 만일 순차 큐(228)가 가득차 있으면, 프로세스(300)는 공간이 비순차 큐(229) 또는 순차 큐(228) 또는 이 둘 모두의 큐에서 이용가능하게 될때까지 대기하기 위하여 코프로세서 명령들의 수신된 윈도우가 미결정인 채로 결정 블록(304)으로 리턴한다. 이하에서 설명된 바와같이, 발행 프로세스(320)는 비순차 큐(229)로부터 명령들을 발행하며, 이후 비순차 큐(229)는 수신될 새로운 명령들을 위하여 비순차 큐의 공간을 클리어(clear)한다. 결정 블록(314)으로 리턴할때, 만일 순차 큐가 가득차 있지 않으면, 프로세스(300)는 블록(316)으로 진행한다. 블록(316)에서, 수신된 명령은 순차 큐(229)에 저장되며, 프로세스(300)는 코프로세서 명령들의 다음 윈도우가 수신될때까지 대기하기 위하여 결정 블록(304)으로 리턴한다.
도 3b는 본 발명에 따라 코프로세서(206)와 프로세서(204) 사이에서 정보를 통신하기 위한 프로세스(320)를 예시한다. 블록(322)에서, 도 3a의 블록(302)에서 명령 페치 큐(208)로부터 통과되고 명령 페치 큐에 아직 남아 있는 코프로세서 명령들의 윈도우는 프로세서(204)에 지금 발행된다. 결정 블록(324)에서는 코프로세서 속성값들이 필요한지에 관한 결정이 이루어진다. 만일 코프로세서 속성값들이 필요하면, 프로세스(320)는 블록(326)으로 진행한다. 블록(326)에서, 필요한 속성값들은 프로세서(204)에서 생성된다. 프로세서(204)에 의해 코프로세서(206)로 제공되는 예시적인 속성값들은 조건부로 실행되는 명령들에 대한 조건 코드 평가 및 로드들 및 저장들을 위한 메모리 정렬 정보를 포함한다. 로드들을 위한 메모리 정렬 정보는 로드 데이터를 타겟 레지스터에 기록하기 전에 레지스터 정렬 형태로 메모리로부터 수신되는 로드 데이터를 배열하는데 필요하다. 저장들을 위한 메모리 정렬 정보는 메모리에 저장 데이터를 기록하기 전에 메모리 정렬 형태로 레지스터로부터 판독되는 저장 데이터를 배열하는데 필요하다. 조건부 명령들에 대한 조건 코드 평가는 코프로세서 명령이 프로세서(204)에서 수행되는 조건 코드 평가에 기초하여 실행되는지의 여부를 결정하는데 필요하다.
블록(328)에서, 생성된 속성값들은 코프로세서로 송신되며 프로세스(320)는 결정 블록(330)으로 진행한다. 결정 블록(324)으로 리턴할때, 만일 코프로세서 속성값들이 필요치 않으면, 프로세스(320)는 결정 블록(330)으로 진행한다. 결정 블록(330)에서는 코프로세서 명령들 각각이 실행을 위해 커밋될 수 있는지에 관한 결정이 이루어진다. 코프로세서 명령들이 프로세서로 발행되기 전에 조기에 액세스되기 때문에, 취해진 프로그램 흐름은 코프로세서 명령들이 실행되는 것을 필요치 않을 수 있다. 그러나, 얼리 액세스 코프로세서 명령들 대부분이 실행을 위해 커밋되는 것이 일반적으로 예상된다. 이러한 일반적인 경우에, 블록(332)에서, 커밋 정보는 코프로세서로 포워드된다.
명령들의 "윈도우"는 일반적으로 명령 페치 큐(208)와 관련되며, 여기서 윈도우 내의 명령들은 발행 또는 통과를 위하여 고려된다. 일단 명령들이 발행 또는 통과되었다면, 이러한 명령들이 동일한 윈도우내에서 발행되거나 또는 통과된 정보는 명령들의 실행과 관련되지 않는다.
프로세서(204)와 코프로세서(206) 사이의 실행/비-실행 인터로크(interlock)는 커밋 표시(commit indication) 및 플러시 표시(flush indication)에 기초한다. 프로세서(204)는 특정 명령이 실행을 완료할 수 있다고 프로세서가 결정할때 커밋 표시를 송신한다. 이는 코프로세서(206)가 커밋된 프로그램 순서로 다음 명령을 적절하게 마크(mark)할 수 있도록 프로그램 순서대로 수행된다. 이러한 명령은 코프로세서(206) 내의 임의의 위치에 있을 수 있다. 또한, 코프로세서(206)에서 커밋 및 비커밋 명령들의 혼합이 존재할 수 있으나, 이는 임의적 혼합이 아니다. 모든 비커밋 명령들은 임의의 커밋된 명령들 보다 프로그램 흐름에서 시간적으로 늦은 보다 어린(younger) 것으로 정의된다. 프로그램 흐름이 변화되었고 실행되지 않아야 하는, 코프로세서(206)로 이전에 송신되었던 명령들이 존재한다고 프로세서(204)가 결정할때, 프로세서(204)는 코프로세서(206)에 플러시 표시를 송신한다. 코프로세서(206)가 이러한 플러시 표시를 수신할때, 코프로세서(206)는 커밋을 아직 수신하지 않았던 모든 코프로세서 명령들을 항상 플러시한다. 플러시 표시는 또한 임의의 비커밋된 프로세서 명령들을 플러시하기 위하여 프로세서(204)에서 사용된다. 커밋을 수신하였던 코프로세서 명령들은 유지되어 실행된다.
도 3c는 본 발명에 따라 프로세서에서 생성되는 정보에 기초하여 코프로세서 내의 코프로세서 명령들을 업데이트하기 위한 프로세스(340)를 예시한다. 블록(342)에서, 코프로세서는 커밋 및 속성 정보를 모니터링한다. 결정 블록(343)에서는 N 코프로세서 명령 윈도우의 각각의 명령에 대하여 커밋 또는 속성 정보가 수신되었는지에 관한 결정이 이루어진다. 만일 N개의 코프로세서 명령들 각각에 대하여 커밋 또는 속성 정보가 수신되지 않았다면, 프로세스(340)는 블록(342)으로 리턴한다. 만일 N개의 코프로세서 명령들 중 적어도 하나에 대하여 커밋 또는 속성 정보 또는 이 둘다가 수신되었다면, 프로세스(340)는 블록(344)으로 진행한다. 블록(344)에서, 수신된 커밋 또는 속성 정보 또는 이들 둘다는 연관된 코프로세서 명령과 함께 예를들어 순차 큐(228), 비순차 큐(229) 또는 코프로세서 실행 복합체(226)내의 연관된 실행 파이프에 저장된다.
도 3d는 본 발명에 따라 명령들을 발행하기 위한 프로세스(350)를 예시한다. 블록(352)에서, 비순차 큐(229)와 같은 큐는 실행될 명령들을 위하여 모니터링된다. 결정 블록(354)에서는 비순차 큐가 임의의 명령 엔트리들을 가지는지에 관한 결정이 이루어진다. 만일 비순차 큐에서 실행될 명령들이 존재하지 않으면, 프로세스(350)는 비순차 큐를 모니터링하기 위하여 블록(352)으로 리턴한다. 만일 적어도 하나의 코프로세서 명령이 비순차 큐에서 식별되면, 프로세스(350)는 결정 블록(355)으로 진행한다. 결정 블록(355)에서는 실행을 위한 새로운 명령을 수락할 수 있는 실행 파이프라인이 이용가능한지의 여부에 관한 결정이 이루어진다. 만일 모든 실행 파이프라인들이 비지(busy)하면, 프로세스(350)는 실행 파이프라인이 프리-업(free-up)할때까지 대기한다. 실행 파이프라인이 실행을 위한 새로운 명령을 수락하기 위하여 이용가능하면, 프로세스(350)는 결정 블록(356)으로 진행한다. 결정 블록(356)에서는 식별된 코프로세서 명령이 요구된 대응하는 속성값들을 가지는지에 관한 결정이 이루어진다. 만일 요구된 대응하는 속성값들이 이용가능하지 않다고 결정되면, 프로세스(350)는 블록(357)으로 진행한다. 블록(357)에서, 식별된 코프로세서 명령은 요구된 대응하는 속성값/속성값들이 수신될때까지 비순차 큐에서 유지된다. 일반적으로, 속성값들은 실행 파이프들로 디스패치하기 위하여 커밋 표시 및 속성값들이 일반적으로 요구되기 전에 요구된다. 코프로세서 명령은 커밋 표시를 수신하지 않고 파이프라인의 끝까지 완전히(all the way) 전진할 수 있다. 그러나, 명령은 대응하는 커밋 표시가 수신될때까지 레지스터 파일을 다시 기록하는 것과 같이 임의의 조직된 자원들을 업데이트하도록 허용되지 않는다. 결정 블록(356)으로 리턴할때, 만일 필요한 대응하는 속성값이 이용가능하면, 프로세스(350)는 블록(358)으로 진행한다. 블록(358)에서, 비순차 큐에 저장되는 명령은 명령들 간의 종속성 충돌들과 같은 해저드들을 방지하면서 이용가능한 발행 파이프라인에 송신된다. 만일 2개 이상의 발행 파이프라인이 이용가능하면, 비순차 큐로부터의 종속성들 없는 다수의 명령들은 다수의 개별 파이프라인들에 걸쳐 프로그램 순서가 뒤바뀌어 디스패치될 수 있다. 만일 다수의 명령들이 동일한 실행 파이프라인으로 예정되면, 이들 명령들은 프로그램 순서로 유지될 수 있다. 프로세스(350)는 결정 블록(359)으로 진행한다. 결정 블록(359)에서는 하나 이상의 코프로세서 명령들이 요구된 대응하는 커밋 표시를 가지는지에 관한 결정이 이루어진다. 만일 특정 코프로세서 명령이 커밋 표시를 수신하지 않았다면, 프로세스(350)는 블록(360)으로 진행한다. 블록(360)에서, 비커밋된 명령과 연관된 파이프라인은 커밋이 수신될때까지 스톨(stall)된다. 결정 블록(359)으로 리턴할때, 만일 대응하는 커밋 표시들이 수신되었다면, 이들 연관 파이프라인들에 대하여, 프로세스(350)는 블록(361)으로 진행한다. 블록(361)에서, 커밋 및 실행된 코프로세서 명령들과 연관된 조직된 자원들은 업데이트된다. 그 다음, 프로세스(350)는 블록(352)으로 리턴한다.
일단 명령 또는 명령들이 비순차 큐로부터 디스패치되면, 공간은 비순차 큐에서 프리-업된다. 그 다음에, 순차 큐로부터의 명령들 또는 새로운 명령들은 앞서 설명된 큐잉 프로세스(300) 이후에 실행을 위한 준비로 비순차 큐에 저장될 수 있다. 프로세스(350)는 결정 블록(360)으로 진행한다.
도 3e는 순차 큐로부터 비순차 큐로 명령들을 이동시키기 위한 프로세스(370)를 예시한다. 비순차 큐에 공간이 존재하며 하나 이상의 명령들이 순차 큐에 존재할때마다, 이들 명령들은 비순차 큐로 이동된다. 블록(372)에서, 프로세스(370)는 순차 큐를 모니터링한다. 결정 블록(374)에서는 순차 큐(228)와 같은 순차 큐가 임의의 엔트리들을 가지는지에 관한 결정이 이루어진다. 만일 순차 큐가 임의의 명령들을 가지지 않는다면, 프로세스(370)는 블록(372)으로 진행한다. 만일 순차 큐가 하나 이상의 명령 엔트리들을 가지면, 프로세스(370)는 블록(376)으로 진행한다. 블록(376)에서, 순차 큐에 저장된 하나 이상의 명령들은 비순차 큐에서 이용가능한 공간으로 이동된다. 이후, 프로세스(370)는 순차 큐를 모니터링하기 위하여 블록(372)으로 리턴한다.
도 4는 본 발명에 따른, 코프로세서 및 프로세서 시스템(400)의 예시적인 실시예를 예시한다. n-엔트리 명령 큐(402)는 명령 페치 큐(208)에 대응한다. 도 4에 예시된 코프로세서는 순차 큐(228)에 대응하는 벡터 순차 큐(VIQ)(404) 및 비순차 큐(229)에 대응하는 벡터 비순차 큐(VOQ)(406)를 가진 벡터 프로세서이다. 벡터 저장 파이프라인(VS)(408), 벡터 로드 파이프라인(VL)(410) 및 벡터 기능 실행 파이프라인(VX)(412)은 6개의 기능 계산 스테이지들(Vx1-Vx6)을 가진다. VS, VL 및 VX 파이프라인들은 벡터 레지스터 파일(VRF)(414)에 커플링되며, 코프로세서 실행 복합체(226)에 총괄적으로 대응한다.
로드 FIFO(416)는 프로세서로부터 수신된 로드 데이터를 유지하기 위하여 사용되며, 프로세서(204)와 코프로세서(206) 사이의 버퍼 저장소로서 작동한다. 이는 코프로세서가 백업되고 로드 데이터를 소비하기 위하여 아직 준비되지 않은 경우에 유리하며, 따라서 로드 데이터는 프로세서(204)가 스톨하는 것을 방지하기 위하여 로드 FIFO에 기록된다. 저장 FIFO(418)는 코프로세서(206)로부터 프로세서(204)로 진행하는 저장 데이터에 대한 유사한 버퍼 저장소이며, FIFO에서 저장 데이터를 홀딩(holding)함으로써, 프로세서(204)가 백업되고 저장 데이터를 수신하기 위하여 아직 준비되지 않은 경우에 유리하다.
여기에서 개시된 실시예들과 관련하여 설명된 방법들은 하드웨어로 구현될 수 있으며, 프로세서에 의해 실행되는 비-일시적 신호들을 저장하는 메모리 모듈로부터의 소프트웨어에 의해 사용될 수 있다. 소프트웨어 모듈은 랜덤 액세스 메모리(RAM), 플래시 메모리, 판독 전용 메모리(ROM), 전기적 프로그램가능 판독 전용 메모리(EPROM), 하드 디스크, 제거가능 디스크, 테이프, 컴팩트 디스크 판독 전용 메모리(CD-ROM) 또는 당업계에 공지된 임의의 다른 형태의 저장 매체에 상주할 수 있다. 저장 매체는 프로세서에 커플링될 수 있으며, 따라서 프로세서는 저장 매체로부터 정보를 판독할 수 있고 일부의 경우들에서 저장 매체에 정보를 기록할 수 있다. 프로세서에 커플링한 저장 매체는 회로 구현에 필수적인 직접 커플링일 수 있거나 또는 하나 이상의 인터페이스들을 활용하여 다운 로딩 기술들을 사용하는 직접 액세스들 또는 데이터 스트리밍을 지원할 수 있다.
본 발명이 프로세서 시스템에서 사용하기 위한 예시된 실시예들과 관련하여 개시되는 반면에, 광범위한 다양한 구현들이 앞의 논의 및 이하의 청구항들과 일치하게 당업자에 의해 사용될 수 있다는 것이 인식될 것이다.

Claims (22)

  1. 명령들의 얼리 액세스를 위한 방법으로서,
    명령 페치 큐(fetch queue)로부터 코프로세서(coprocessor) 명령을 복사하는 단계 ― 상기 명령 페치 큐는 코프로세서 명령들 및 프로세서 명령들의 혼합(mix)을 저장하며, 상기 명령 페치 큐로부터 복사된 상기 코프로세서 명령은 하이브리드(hybrid) 명령 큐에 저장됨 ― ;
    상기 코프로세서 명령이 프로세서에 발행되기 전에 상기 코프로세서에서, 복사된 코프로세서 명령의 실행을 시작하는 단계; 및
    상기 코프로세서 명령이 상기 프로세서에 발행된 이후에 상기 프로세서로부터 수신되는 정보에 기초하여 상기 복사된 코프로세서 명령의 실행을 완료하는 단계를 포함하는, 명령들의 얼리 액세스를 위한 방법.
  2. 제 1항에 있어서, 상기 코프로세서 명령의 시작 실행은 프로세서 상태를 변경시키지 않은 명령 특정 동작들의 실행을 포함하는, 명령들의 얼리 액세스를 위한 방법.
  3. 제 1항에 있어서, 상기 프로세서로부터 수신되는 정보는 상기 명령의 실행 표시를 위한 커밋(commit)인, 명령들의 얼리 액세스를 위한 방법.
  4. 제 1항에 있어서, 상기 명령 페치 큐로부터 상기 프로세서로 상기 코프로세서 명령을 발행하는 단계; 및
    상기 코프로세서 명령들의 속성값들을 결정하기 위하여 상기 프로세서에서 상기 발행된 코프로세서 명령을 프로세싱하는 단계; 및
    상기 코프로세서에 상기 코프로세서 명령과 함께 상기 속성값들을 저장하는 단계를 더 포함하는, 명령들의 얼리 액세스를 위한 방법.
  5. 제 4항에 있어서, 상기 속성값들은 데이터 정렬 정보 또는 조건부 실행 표시를 포함하는, 명령들의 얼리 액세스를 위한 방법.
  6. 제 1항에 있어서, 상기 실행을 시작하는 단계는 상기 복사된 코프로세서 명령에 응답하여 저장을 위한 데이터를 포착하는 단계를 포함하며, 상기 복사된 코프로세서 명령은 저장 명령인, 명령들의 얼리 액세스를 위한 방법.
  7. 제 6항에 있어서, 상기 실행을 완료하는 단계는,
    상기 프로세서에 의해 메모리의 저장 어드레스를 생성하는 단계; 및
    상기 프로세서에 의해 상기 저장 어드레스에 상기 데이터를 저장하는 단계를 포함하는, 명령들의 얼리 액세스를 위한 방법.
  8. 제 1항에 있어서, 프로세서 명령들로부터 코프로세서 명령들을 구별하기 위하여 고유 식별자를 사용하여 메모리 계층(hierarchy)으로부터 페치되는 코프로세서 명령을 인코딩하는 단계; 및
    상기 명령 페치 큐에, 인코딩된 코프로세서 명령을 저장하는 단계를 더 포함하는, 명령들의 얼리 액세스를 위한 방법.
  9. 제 8항에 있어서, 상기 고유 식별자는 프리디코드(predecode) 동작으로 인코딩되는, 명령들의 얼리 액세스를 위한 방법.
  10. 명령들의 얼리 액세스를 위한 장치로서,
    명령 캐시에 커플링되며, 제 1 프로세서에 대한 제 1 클래스의 명령들 및 제 2 프로세서에 대한 제 2 클래스의 명령들을 저장하도록 구성되는 페치 큐;
    상기 페치 큐에 커플링되며, 상기 페치 큐로부터의 제 2 클래스 명령들을 복사하도록 구성되는 제 2 클래스 명령 선택기 ― 상기 페치 큐로부터 복사된 상기 제 2 클래스 명령들은 하이브리드 명령 큐에 저장됨 ― ; 및
    상기 제 2 클래스 명령 선택기에 커플링되며, 상기 제 2 클래스 명령이 상기 제 1 프로세서에 발행되기 전에 실행을 위해 상기 제 2 클래스 명령들이 액세스되는 큐를 포함하는, 명령들의 얼리 액세스를 위한 장치.
  11. 제 10항에 있어서, 상기 페치 큐는 제 2 클래스 명령이 실행을 위해 커밋되어야 하는지의 여부를 결정하는 상기 제 1 프로세서에 상기 제 2 클래스 명령들을 발행하도록 추가로 구성되는, 명령들의 얼리 액세스를 위한 장치.
  12. 제 10항에 있어서, 상기 페치 큐는 제 2 클래스 명령에 대한 어드레스 정보를 생성하며 상기 제 2 프로세서상에서 상기 제 2 클래스 명령을 실행하기 위한 지원으로 상기 제 2 프로세서에 상기 어드레스 정보를 송신하는 상기 제 1 프로세서에 상기 제 2 클래스 명령들을 발행하도록 추가로 구성되는, 명령들의 얼리 액세스를 위한 장치.
  13. 제 10항에 있어서, 페치된 프로세서 명령들로부터 페치된 코프로세서 명령을 구별하기 위하여 새로운 인코딩으로 페치된 코프로세서 명령을 인코딩하도록 구성되는 프리디코더를 더 포함하는, 명령들의 얼리 액세스를 위한 장치.
  14. 제 10항에 있어서, 상기 제 2 클래스 명령 선택기는 페치 큐로부터 하나 이상의 코프로세서 명령들을 선택하여 임의의 상호혼합된(intermixed) 프로세서 명령들에 대해 스킵(skip)하도록 구성되는 멀티플렉서들의 세트를 포함하는, 명령들의 얼리 액세스를 위한 장치.
  15. 아직 발행되지 않은 명령들의 실행을 시작하기 위한 방법으로서,
    명령 페치 큐로부터 복수의 코프로세서 명령들을 복사하는 단계 ― 상기 명령 페치 큐는 프로그램 순서로 코프로세서 명령들 및 프로세서 명령들의 혼합을 저장하며, 상기 명령 페치 큐로부터 복사된 상기 코프로세서 명령들은 하이브리드 명령 큐에 저장됨 ― ; 및
    상기 복수의 코프로세서 명령들이 프로세서에 발행되기 전에 상기 코프로세서에서 복수의 복사된 코프로세서 명령들의 실행을 시작하는 단계를 포함하며, 상기 복수의 복사된 코프로세서 명령들의 실행은 상기 프로세서에 발행된 상기 복수의 코프로세서 명령들의 평가에 응답하여 상기 프로세서에 의해 생성되는 정보에 기초하여 완료되는, 아직 발행되지 않은 명령들의 실행을 시작하기 위한 방법.
  16. 제 15항에 있어서, 상기 명령 페치 큐로부터 상기 복수의 코프로세서 명령들을 복사하여 임의의 상호혼합된 프로세서 명령들에 대해 스킵하는 단계를 더 포함하는, 아직 발행되지 않은 명령들의 실행을 시작하기 위한 방법.
  17. 제 15항에 있어서, 페치된 프로세서 명령들로부터 복수의 페치된 코프로세서 명령을 구별하기 위하여 새로운 인코딩으로 프리디코더에 의해 상기 복수의 페치된 코프로세서 명령을 인코딩하는 단계를 더 포함하는, 아직 발행되지 않은 명령들의 실행을 시작하기 위한 방법.
  18. 제 15항에 있어서, 상기 프로세서에 의해 생성되는 정보는,
    상기 복수의 코프로세서 명령들로부터 선택되는 로드 명령에 응답하여 상기 프로세서에 의해 생성되는 저장 어드레스에서 메모리로부터 데이터를 페치하는 단계; 및
    상기 프로세서로부터 상기 코프로세서의 로드 선입선출(FIFO: first-in first-out) 파일로 상기 데이터를 송신하는 단계를 포함하는, 아직 발행되지 않은 명령들의 실행을 시작하기 위한 방법.
  19. 제 18항에 있어서, 상기 실행을 완료하는 단계는 코프로세서 기능 명령에 따라 상기 FIFO로부터 액세스되는 데이터에 대하여 동작하는 단계를 포함하는, 아직 발행되지 않은 명령들의 실행을 시작하기 위한 방법.
  20. 제 15항에 있어서, 명령 페치 큐로부터 복사되는 상기 복수의 코프로세서 명령들은 상기 코프로세서의 비순차(out-of-order) 큐에 저장되는, 아직 발행되지 않은 명령들의 실행을 시작하기 위한 방법.
  21. 명령들의 얼리 액세스를 위한 장치로서,
    명령 캐시에 커플링되는 페치 큐에, 제 1 프로세서에 대한 제 1 클래스 명령들 및 제 2 프로세서에 대한 제 2 클래스 명령들을 저장하기 위한 수단;
    상기 페치 큐로부터 제 2 클래스 명령들을 복사하기 위한 수단 ― 상기 페치 큐로부터 복사된 제 2 클래스 명령들은 하이브리드 명령 큐에 저장됨 ― ; 및
    상기 제 2 클래스 명령이 상기 제 1 프로세서에 발행되기 전에 실행을 위한 제 2 클래스 명령들에 액세스하기 위한 수단을 포함하는, 명령들의 얼리 액세스를 위한 장치.
  22. 컴퓨터 판독가능 프로그램 데이터 및 코드로 인코딩되는 컴퓨터 판독가능 비-일시적 매체로서,
    상기 프로그램 데이터 및 코드는, 실행시에,
    명령 페치 큐로부터 코프로세서 명령을 복사하며 ― 상기 명령 페치 큐는 코프로세서 명령들 및 프로세서 명령들의 혼합을 저장하고, 상기 페치 큐로부터 복사된 상기 코프로세서 명령은 하이브리드 명령 큐에 저장됨 ―;
    상기 코프로세서 명령이 프로세서에 발행되기 전에 상기 코프로세서에서 복사된 코프로세서 명령의 실행을 시작하며; 그리고
    상기 코프로세서 명령이 상기 프로세서에 발행된 이후에 상기 프로세서로부터 수신되는 정보에 기초하여 복사된 코프로세서 명령의 실행을 완료하도록 동작가능한, 컴퓨터 판독가능 비-일시적 매체.
KR1020137023432A 2011-02-04 2012-02-06 아직 발행되지 않은 명령들에 대한 얼리 액세스를 가진 코프로세서를 구비한 프로세서 KR101541001B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201161439608P 2011-02-04 2011-02-04
US61/439,608 2011-02-04
US13/363,541 2012-02-01
US13/363,541 US9304774B2 (en) 2011-02-04 2012-02-01 Processor with a coprocessor having early access to not-yet issued instructions
PCT/US2012/023998 WO2012106719A1 (en) 2011-02-04 2012-02-06 Processor with a coprocessor having early access to not-yet issued instructions

Publications (2)

Publication Number Publication Date
KR20130122675A KR20130122675A (ko) 2013-11-07
KR101541001B1 true KR101541001B1 (ko) 2015-07-31

Family

ID=46601483

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137023432A KR101541001B1 (ko) 2011-02-04 2012-02-06 아직 발행되지 않은 명령들에 대한 얼리 액세스를 가진 코프로세서를 구비한 프로세서

Country Status (4)

Country Link
US (1) US9304774B2 (ko)
EP (1) EP2671150B1 (ko)
KR (1) KR101541001B1 (ko)
WO (1) WO2012106719A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9158696B2 (en) * 2011-12-29 2015-10-13 Intel Corporation Hiding instruction cache miss latency by running tag lookups ahead of the instruction accesses
US9535804B2 (en) 2012-05-21 2017-01-03 Cray Inc. Resiliency to memory failures in computer systems
US10255075B2 (en) * 2013-07-18 2019-04-09 Nvidia Corporation System, method, and computer program product for managing out-of-order execution of program instructions
US9880935B2 (en) * 2014-03-24 2018-01-30 Intel Corporation Efficient data transfer between a processor core and an accelerator
KR102254099B1 (ko) * 2014-05-19 2021-05-20 삼성전자주식회사 메모리 스와핑 처리 방법과 이를 적용하는 호스트 장치, 스토리지 장치 및 데이터 처리 시스템
US9678758B2 (en) 2014-09-26 2017-06-13 Qualcomm Incorporated Coprocessor for out-of-order loads
US11334355B2 (en) * 2017-05-04 2022-05-17 Futurewei Technologies, Inc. Main processor prefetching operands for coprocessor operations
US10824468B2 (en) * 2019-02-12 2020-11-03 Arm Limited Control of instruction execution in a data processor
EP4027236A4 (en) * 2020-11-10 2023-07-26 Beijing Vcore Technology Co.,Ltd. METHOD AND APPARATUS FOR SCHEDULING OUT-OF-ORDER QUEUES AND DETERMINING QUEUE ERASING ELEMENTS
US11755333B2 (en) * 2021-09-23 2023-09-12 Apple Inc. Coprocessor prefetcher
US11734075B2 (en) * 2021-11-24 2023-08-22 International Business Machines Corporation Reducing data format conversion of an accelerator

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050057199A (ko) * 2002-09-04 2005-06-16 에이알엠 리미티드 데이터 처리장치에서의 파이프라인들간의 동기화

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2326253A (en) * 1997-06-10 1998-12-16 Advanced Risc Mach Ltd Coprocessor data access control
US6134650A (en) * 1997-12-12 2000-10-17 Advanced Micro Devices, Inc. Apparatus and method for predicting a first scanned instruction as microcode instruction prior to scanning predecode data
GB2372848B (en) * 2001-02-20 2004-10-27 Advanced Risc Mach Ltd Data processing using a coprocessor
US6832305B2 (en) 2001-03-14 2004-12-14 Samsung Electronics Co., Ltd. Method and apparatus for executing coprocessor instructions
US6944746B2 (en) 2002-04-01 2005-09-13 Broadcom Corporation RISC processor supporting one or more uninterruptible co-processors
US7600096B2 (en) 2002-11-19 2009-10-06 Stmicroelectronics, Inc. Coprocessor extension architecture built using a novel split-instruction transaction model
US7237094B2 (en) * 2004-10-14 2007-06-26 International Business Machines Corporation Instruction group formation and mechanism for SMT dispatch
US8032734B2 (en) 2006-09-06 2011-10-04 Mips Technologies, Inc. Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor
US7647475B2 (en) * 2006-09-06 2010-01-12 Mips Technologies, Inc. System for synchronizing an in-order co-processor with an out-of-order processor using a co-processor interface store data queue
US7769955B2 (en) * 2007-04-27 2010-08-03 Arm Limited Multiple thread instruction fetch from different cache levels
US7930519B2 (en) 2008-12-17 2011-04-19 Advanced Micro Devices, Inc. Processor with coprocessor interfacing functional unit for forwarding result from coprocessor to retirement unit
US8082425B2 (en) 2009-04-29 2011-12-20 Advanced Micro Devices, Inc. Reliable execution using compare and transfer instruction on an SMT machine
US9201801B2 (en) * 2010-09-15 2015-12-01 International Business Machines Corporation Computing device with asynchronous auxiliary execution unit

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050057199A (ko) * 2002-09-04 2005-06-16 에이알엠 리미티드 데이터 처리장치에서의 파이프라인들간의 동기화

Also Published As

Publication number Publication date
US9304774B2 (en) 2016-04-05
US20120204005A1 (en) 2012-08-09
EP2671150B1 (en) 2014-12-31
KR20130122675A (ko) 2013-11-07
EP2671150A1 (en) 2013-12-11
WO2012106719A1 (en) 2012-08-09

Similar Documents

Publication Publication Date Title
KR101541001B1 (ko) 아직 발행되지 않은 명령들에 대한 얼리 액세스를 가진 코프로세서를 구비한 프로세서
US5958041A (en) Latency prediction in a pipelined microarchitecture
JP4105684B2 (ja) ロード操作の推測結果をレジスタ値にリンクするためのシステムおよび方法
KR100981168B1 (ko) 데이터-추론-실행을 지원하는 마이크로프로세서에서 사용을위한 스케쥴러
US8069336B2 (en) Transitioning from instruction cache to trace cache on label boundaries
JP3866261B2 (ja) ロード/ストア操作をバイパスするために投機的ソースオペランドを使用するシステムおよび方法
US7861066B2 (en) Mechanism for predicting and suppressing instruction replay in a processor
EP0751458B1 (en) Method and system for tracking resource allocation within a processor
KR100993018B1 (ko) 트레이스 캐시 기반 프로세서에서 예외 명령어들을 처리하는 시스템 및 방법
WO2012006046A1 (en) Methods and apparatus for changing a sequential flow of a program using advance notice techniques
WO2005111794A1 (en) System and method for validating a memory file that links speculative results of load operations to register values
WO2012106716A1 (en) Processor with a hybrid instruction queue with instruction elaboration between sections
US7165167B2 (en) Load store unit with replay mechanism
KR100986375B1 (ko) 피연산자의 빠른 조건부 선택
US8037366B2 (en) Issuing instructions in-order in an out-of-order processor using false dependencies
US7197630B1 (en) Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
US20150205725A1 (en) Cache for patterns of instructions
US7266673B2 (en) Speculation pointers to identify data-speculative operations in microprocessor

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
LAPS Lapse due to unpaid annual fee