KR20010100879A - 멀티쓰레드 프로세서에서 공유 파이프라인 및 다른파이프라인 스테이지의 선택적인 플러쉬 - Google Patents

멀티쓰레드 프로세서에서 공유 파이프라인 및 다른파이프라인 스테이지의 선택적인 플러쉬 Download PDF

Info

Publication number
KR20010100879A
KR20010100879A KR1020010018489A KR20010018489A KR20010100879A KR 20010100879 A KR20010100879 A KR 20010100879A KR 1020010018489 A KR1020010018489 A KR 1020010018489A KR 20010018489 A KR20010018489 A KR 20010018489A KR 20010100879 A KR20010100879 A KR 20010100879A
Authority
KR
South Korea
Prior art keywords
stage
dispatch
pipeline
processor
flush
Prior art date
Application number
KR1020010018489A
Other languages
English (en)
Other versions
KR100436675B1 (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 KR20010100879A publication Critical patent/KR20010100879A/ko
Application granted granted Critical
Publication of KR100436675B1 publication Critical patent/KR100436675B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several 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
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

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

Abstract

동시 멀티쓰레드(multithread) 프로세서에서, 공유 파이프라인(pipeline) 스테이지의 플러쉬(flush) 메카니즘이 설명된다. 바람직한 실시예에서, 공유 파이프라인 스테이지는 인출(fetch) 스테이지, 복호화 스테이지, 및/또는 디스패치(dispatch) 스테이지 중 하나 또는 그 모두가 될 수 있고, 플러쉬 메카니즘은 디스패치 스테이지 및 그 이전 스테이지에서 지시를 플러쉬 처리한다. 디스패치 플러쉬 메카니즘은 파이프라인 프로세서의 디스패치 스테이지에서 특정한 쓰레드(thread)의 지시가 중단될 때를 검출한다. 그 쓰레드의 이어지는 지시는 디스패치 스테이지를 포함하여 거기까지의 프로세서의 모든 파이프라인 스테이지로부터 플러쉬 처리된다. 디스패치 스테이지는 지시를 전달 대기열(issue queue)에 성공적으로 디스패치하는데 필요한 모든 자원(resource)이 점검되는 스테이지인 것으로 구별된다. 그 지시에 의해서만 요구되는 자원이 이용가능하지 않으면, 디스패치 플러쉬가 실행된다. 플러쉬 우선화 로직(flush prioritization logic)은 그 특정한 쓰레드에 이전 디스패치 플러쉬를 포함하여 다른 플러쉬 조건이 존재하는가를 결정하는데 이용가능하다. 그러면, 플러쉬 우선화 로직은, 있는 경우, 어느 플러쉬가 진행되어야 하는가를 결정하게 된다. 성공적인 디스패치 및 실행 유닛으로의 지시 전달에 필요하지만 이용가능하지 않은 자원은 각 쓰레드에 대한 개별 또는 분리 레지스터이거나, 특수 목적 또는 다른 비개명(non-rename) 레지스터이거나, 또는 메모리로의 동기화된 억세스를 위한 지시가 될 수 있다. 이 디스패치 플러쉬메카니즘은 전달 대기열, 실행 유닛, 및 결과 레지스터를 포함하여 거기까지의 프로세서 파이프라인을 완전히 플러쉬 처리하여야 하는 기존의 플러쉬 메카니즘 보다 효율적이다.

Description

멀티쓰레드 프로세서에서 공유 파이프라인 및 다른 파이프라인 스테이지의 선택적인 플러쉬{SELECTIVE FLUSH OF SHARED AND OTHER PIPELINE STAGES IN A MULTITHREAD PROCESSOR}
본 발명은 일반적으로 개선된 데이터 처리 시스템에 관한 것으로, 특별히 멀티쓰레드 파이프라인 프로세서(multithread pipelined processor)의 디스패치(dispatch) 스테이지에서 쓰레드(thread)의 실행이 중단될 때 쓰레드 실행을 스위칭하고 초기 스테이지의 파이프라인으로부터 중단된 쓰레드를 플러쉬(flush)하기 위해 개선된 시스템 및 방법에 관한 것이다.
컴퓨터 하드웨어의 견지에서 볼 때, 대부분의 시스템은 기본적으로 똑같은 방식으로 동작된다. 컴퓨터 프로세서는 실제로 산술, 논리 비교, 및 한 위치에서 또 다른 위치로의 데이터 이동과 같이, 매우 단순한 동작을 신속하게 실행한다. 그러나, 컴퓨터 시스템의 새로운 또는 개선된 기능으로 사용자가 인지하는 것은 실제로 초고속으로 똑같은 단순 동작을 실행하는 기계일 수 있다. 컴퓨터 시스템에 대해 계속되는 개선은 이들 프로세서 시스템이 보다 빨라지는 것을 요구한다.
컴퓨터 시스템의 전체적인 속도에 대한 측정치, 즉 처리량은 단위 시간 당 실행되는 동작수로 측정된다. 개념적으로, 시스템 속도에 대해 가능한 모든 개선 중 가장 단순한 것은 다양한 구성소자의 클럭 속도, 특히 프로세서의 클럭 속도를 증가시키는 것이다. 다른 것은 정확하게 똑같은 방식으로 작업하면서 모든 것이 2배로 빨라지면, 시스템은 절반의 시간으로 주어진 작업을 실행하게 된다. 수년 전에 이산적인 구성소자으로 구성되었던 컴퓨터 프로세서는 크기를 줄이고 구성소자의 수를 감소시켜 상당히 더 빠르게 동작되었고; 결국은 전체적인 프로세서가 단일 칩상의 집적 회로로 패키지화되었다. 감소된 크기는 프로세서의 클럭 속도를 증가시키고, 그에 따라 시스템 속도를 증가시키는 것을 가능하게 하였다.
집적 회로로부터 구해진 속도에서의 많은 개선에도 불구하고, 더 빠른 컴퓨터 시스템이 계속 요구된다. 하드웨어 설계자들은 더 큰 집적도에 의해, 회로의 크기를 더 감소시킴으로서, 또한 다른 기술에 의해 속도를 더 개선시킬 수 있다. 그러나, 설계자들은 물리적인 크기의 감소가 무한하게 계속될 수 없고 프로세서 클럭 속도를 계속하여 증가시키는데도 한계가 있는 것으로 생각한다. 그러므로, 컴퓨터 시스템의 전체적인 처리량을 더 개선하기 위해 다른 접근법에 관심을 기울이고 있다.
클럭 속도를 변화시키지 않고, 다수의 프로세서를 사용함으로서 시스템 속도를 개선하는 것이 가능하다. 집적 회로 칩상에 패키지화된 각 프로세서의 적절한 비용이 이를 실제로 응용할 수 있게 만든다. 슬래이브 프로세서(slave processor)의 사용은 CPU(central processing unit)에서 슬래이브 프로세서로 작업을 오프로드(off-load)시킴으로서 시스템 속도를 상당히 개선한다. 예를 들어, 슬래이브 프로세서는 입력/출력 디바이스 통신 및 제어와 같이, 반복적인 단일 특수 목적의 프로그램을 정기적으로 실행한다. 또한, 다수의 CPU가 단일 컴퓨터 시스템에, 전형적으로 다수의 사용자에게 서비스를 동시에 제공하는 호스트(host) 근거의 시스템에 배치되는 것이 가능하다. 다른 CPU는 각각 다른 사용자 대신에 다른 작업을 분리하여 실행할 수 있으므로, 다수의 작업을 동시에 실행하여 시스템의 전체적인 속도를 증가시킨다.
다수의 CPU 사이에서 다양한 기능의 결과에 대한 실행 및 전달의 조화를 맞추는 것은 까다로운 일이다; 슬래이브 I/O 프로세서에 대해서는 그 기능이 미리 정의되고 제한되어 그렇지 않지만, 일반적인 목적의 응용 프로그램을 실행하는 다수의 CPU에 대해서는 기능의 조화를 맞추는 것이 훨씬 더 어렵다. 시스템 설계자는 때때로 프로그램의 상세한 내용을 미리 알지 못한다. 대부분의 응용 프로그램은 프로세서에 의해 실행되는 단일 경로 또는 단계의 흐름으로 이어진다. 이 단일 경로를 다수의 병렬 경로로 나누는 것이 가능하지만, 그렇게 하기 위해 일반적인 응용이 아직 연구중이다. 일반적으로, 긴 작업을 다수의 프로세서에 의한 병렬 처리를 위해 더 짧은 작업으로 나누는 것은 각 경우를 근거로 하여 소프트웨어 엔지니어 기록 코드에 의해 이루어진다. 이러한 임시 접근법은 반드시 반복적이거나 예측가능한 것이 아닌 상업적 업무를 실행할 때 특히 문제가 된다.
그래서, 다수의 프로세서가 전체적인 시스템 성능을 개선하면서, 응용 프로그램과 같은 단일 작업이 실행되는 속도를 개선하는 것은 훨씬 더 어렵다. CPU 클럭 속도가 주어지면, 클럭 싸이클 당 실행되는 평균적인 동작수를 증가시킴으로서, CPU의 속도, 즉 초당 실행되는 동작수를 더 증가시키는 것이 가능하다. 고성능 단일칩 마이크로프로세서에 대해 공통적인 설계는 신속한 실행을 위해 자주 사용되는 작은 세트의 지시가 간략화되어, 단순한 동작이 상기에 설명된 바와 같이 신속하게 실행되는 것을 특징으로 하는 RISC(reduced instruction set computer) 설계이다. 반도체 기술이 진보됨에 따라, RISC 설계의 목적은 기계의 각 클럭 싸이클에 하나이상의 지시를 실행할 수 있는 프로세서를 개발하는 것이다. 클럭 싸이클 당 실행되는 평균적인 동작수를 증가시키기 위한 또 다른 접근법은 CPU내의 하드웨어를 수정하는 것이다. 지시 당 클럭 싸이클의 처리량 측정은 일반적으로 고성능 프로세서의 설계를 특징지우는데 사용된다.
CDC-6600 및 Cray-1과 같은 1970년대의 메인프레임 컴퓨터와 고성능 벡터 프로세서에서 개척된 프로세서 설계 개념은 RISC 마이크로프로세서에서 나타난다. 초기의 RISC 기계는 매우 단순한 단일칩 프로세서였다. VLSI(Very Large Scale Integrated) 기술이 개선됨에 따라, 반도체 칩상에서는 추가 공간이 이용가능해졌다. 프로세서 설계의 복잡성을 증가시키기 보다는 대부분의 설계자가 단일 CPU의 실행을 개선하는 기술을 실시하는데 추가 공간을 사용하도록 결정하였다. 사용된 2가지의 기본 기술은 칩상의 캐시 처리(on-chip cache) 및 지시 파이프라인(instruction pipeline)이다. 캐시 메모리는 프로세서 가까이에 자주 사용되는 데이터를 저장하여, 지시의 실행이 대부분의 경우 메인 메모리의 전체 억세스 시간을 대기하지 않고 계속되도록 허용한다. 병렬로 실행되는 지시를 찾도록 추론적으로 미리 앞서가는 하드웨어를 갖춘 다수의 실행 유닛에 대한 개선도 또한 설명되었다. 파이프라인 지시 실행은 앞서 전해진 지시가 완료되기 이전에 연속적인 지시가 실행을 시작하도록 허용한다.
수퍼스칼라 프로세서(superscalar processor)는 파이프라인 프로세서의 한 예이다. 종래 RISC 프로세서의 성능은 수퍼스칼라 컴퓨터 및 VLIW(Very Long Instruction Word) 컴퓨터에서 더 증가될 수 있고, 이들은 모두 프로세서 싸이클당 하나 이상의 지시를 나란히 실행한다. 이러한 설계에서는 다수의 기능 또는 실행 유닛이 다수의 파이프라인을 운행하도록 병렬로 연결된다. 그 명칭은 이들 프로세서가 각 싸이클에서 하나 이상의 지시를 실행할 수 있는 스칼라 프로세서임을 의미한다. 수퍼스칼라 파이프라인 실행 소자는 캐시 메모리로부터 한번에 하나 이상의 지시를 인출하는 지시 인출 유닛, 지시가 독립적으로 동시에 실행될 수 있는가를 결정하는 지시 복호화 로직, 및 한번에 수개의 지시를 실행하기에 충분한 실행 유닛을 포함한다. 실행 유닛은 또한 파이프라인 연결될 수 있다. 예를 들면, 부동점 가산기나 곱셈기가 인출 및 복호화 스테이지에 대한 싸이클 시간과 정합되는 각 실행 스테이지에 대한 싸이클 시간을 가질 수 있다.
수퍼스칼라 설계에서, 지시는 순서대로 또한 순서에서 벗어나 완료될 수 있다. 순서대로 완료된다는 것은 미리 디스패치된 모든 지시가 완료되기 이전에 어떠한 지시도 완료될 수 없음을 의미한다. 순서에서 벗어나 완료된다는 것은 소정의 규칙이 만족되는 한, 앞선 모든 지시가 완료되기 이전에 지시가 완료되도록 허용됨을 의미한다. 파이프라인 수퍼스칼라 프로세서내에서는 지시가 먼저 인출되어 복호화되고, 이어서 버퍼 처리된다. 자원(resource) 및 오퍼랜드(operand)가 이용가능해질 때, 지시는 실행 유닛에 디스패치될 수 있다. 부가하여, 지시는 취해진 브랜치(branch)에 대한 예측을 근거로 하여 추론적으로 인출 및 디스패치될 수 있다. 결과는 다양한 스테이지의 실행에서 지시가 모여지는 것이고, 그들 중 어떠한 것도 최종 결과를 기록함으로서 완료되지 않는다. 자원이 이용가능해지고 브랜치가 해결될 때, 지시는 프로그램 순서에서 "벗어나(retired)" 있으므로, 프로그램순서대로 지시를 실행하는 기계의 형태를 간직하게 된다.
수퍼스칼라 프로세서는 전형적으로 완료 버퍼를 사용하여 추론적으로 실행되는 지시를 추적 또는 관리한다. 버퍼에서 실행된 각 지시는 일반적으로 개명된(renamed) 레지스터에 저장되는 결과 및 예외 플래그(flag)와 연관된다. 그러나, 순서에서 벗어나 지시가 실행될 때, 특히 지시 중 하나가 에러 조건과 마주칠 때 문제가 발생된다. 프로세서는 지시가 이어지는 지시 및 기계 상태에 영향을 줄 수 있기 때문에 에러를 갖는 지시에서 중단되어야 한다.
수퍼스칼라 시스템에서 순서대로 지시가 완료되는 것과 순서에서 벗어나 지시가 완료되는 것에 대해, 이들 파이프라인은 특정한 조건하에서 중단되어 멈춘다. 아직 완료되지 않은 앞서 디스패치된 지시의 결과에 의존하는 지시는 파이프라인을 멈추게 할 수 있다. 예를 들면, 필요한 데이터가 캐시 메모리에 있지 않는, 즉 캐시 처리가 실패된 로드/저장 지시에 의존하는 지시는 데이터가 캐시에서 이용가능해질 때까지 완료될 수 없다.
하드웨어 멀티쓰레딩(hardware mutlithreading)이라 칭하여지는 또 다른 기술은 단일 프로세서에서 쓰레드(thread) 또는 콘텍스트(context)라 칭하여지는 작은 지시 시퀀스를 독립적으로 실행하는 것이다. 여러 이유 중 하나로 CPU가 멈추어 이들 쓰레드 중 하나를 계속하여 처리 또는 실행할 수 없을 때, CPU는 스위치되어, 또 다른 쓰레드를 실행한다. 컴퓨터 설계 집단에서 정의되는 "멀티쓰레딩"이란 말은 한 작업이 다수의 관련된 쓰레드로 분할된다는 말의 소프트웨어 사용과 똑같지 않다. 소프트웨어 멀티쓰레딩은 실제로 레지스터로부터 메인 메모리에 데이터를 조작하여 저장하고, 쓰레드 스위치가 일어나기 이전에 관련된 지시 및 독립적인 지시의 프로그램 순서를 유지하는 운영 체계를 포함한다. 소프트웨어 멀티쓰레딩은 하드웨어 멀티쓰레딩 등과 관계될 것을 요구하지 않는다. 하드웨어 멀티쓰레딩은 프로세서 하드웨어에서 쓰레드라고 칭하여지는, 독립적으로 실행되는 하나 이상의 지시 세트의 상태를 유지하도록 하드웨어 설계된 레지스터 및 실행 유닛과 파이프라인 연결된 프로세서를 조작한다. 쓰레드는 예를 들면, 병행 시스템에서의 다른 작업, 소프트웨어 멀티쓰레딩 시스템에서 컴파일된 다른 쓰레드, 또는 다른 I/O 프로세서로부터 유도될 수 있다. 그러나, 하드웨어 멀티쓰레딩을 이들 모든 시스템과 달리 유일하게 만드는 것은 하나 이상의 쓰레드가 프로세서의 레지스터에 독립적으로 유지된다는 점이다.
하드웨어 멀티쓰레딩은 수만가지의 형태를 취한다. 멀티쓰레딩은 비파이프라인 설계나 파이프라인 설계를 갖는 프로세서가 프로세서의 레지스터에서 하나 이상의 쓰레드에 유용한 작업을 실행하도록 허용한다. 때로 거친 격자의 멀티쓰레딩(coarse-grained multithreading)이라 칭하여지는 한가지 형태의 멀티쓰레딩은 예를 들어, 프로세서 인터럽트나 메모리로부터 데이터 및/또는 지시를 회복하는 것과 같이, 실행 쓰레드가 오랜 잠재기의 이벤트(event)를 경험하게 될 때까지 한 쓰레드를 실행하는 것이다. 한편, 섬세한 격자의 멀티쓰레딩(fine-grained multithreading)은 경우별로 쓰레드를 스위치 또는 인터리브(interleave) 처리한다. 동시 하드웨어 멀티쓰레딩은 프로세서에서 N개의 쓰레드 또는 N개의 상태를 나란히 유지하고, N개의 쓰레드를 나란히 동시에 실행한다. N개의 쓰레드 각각에대해 프로세서 레지스터를 복제하면, 결과적으로 다음 레지스터 중 일부가 N회 복제된다: 일반 목적의 레지스터, 부동점 레지스터, 조건 레지스터, 부동점 상태 및 제어 레지스터, 카운트 레지스터, 링크 레지스터, 예외 레지스터, 저장/회복 레지스터, 특수 목적의 레지스터 등. 세그먼트 룩어사이드 버퍼(segment lookaside buffer)와 같이 특별한 버퍼는 복제될 수 있지만, 그렇지 않은 경우, 쓰레드가 스위치될 때마다 각 엔트리(entry)가 쓰레드 수로 태그(tag)되어 플러쉬 처리될 수 있다. 또한, 일부 브랜치 예측 메카니즘, 예를 들면 상관관계 레지스터 및 복귀 스택(stack)이 복제될 수 있다. 멀티쓰레딩은 또한 특정한 속성에 대해 특정한 특성을 선택하여 모든 형태 또는 그중 하나의 특성을 취할 수 있다. 예를 들면, 프로세서의 특징 중에서 모든 것이 각 쓰레드에 대해 복제될 필요는 없고, 일부 공유되고 일부 복제되는 레지스터가 있을 수 있고, 또한/또는 파이프라인에 분리된 병렬 스테이지가 있거나 파이프라인에 다른 공유 스테이지가 있을 수 있다. 다행히도, 레벨 1 지시 캐시, 레벨 1 데이터 캐시, 지시 버퍼, 저장 대기열(queue), 지시 디스패처(dispatcher), 기능 또는 실행 유닛, 파이프라인, TLB(translation lookaside buffer), 및 브랜치 내력 테이블과 같이, 프로세서의 더 많은 기능 중 일부를 복사할 필요가 없다. 그러나, 분리된 또는 개별적인 대기열이 있거나 다른 자원 및 프로세서가 일부 공유되는 파이프라인 스테이지를 가질 때 문제가 발생된다; 그래서, 지시가 공유 스테이지에서 멈출 때, 그 쓰레드가 그 공유 스테이지에서 멈출 뿐만 아니라, 그 공유 스테이지내의 또는 그 이후의 다른 쓰레드도 또한 멈추어 실행될 수 없다.
그래서, 산업적으로 멀티쓰레드 프로세서의 공유 파이프라인 스테이지 및 그 이전의 파이프라인 스테이지에서 중단된 쓰레드를 효과적으로 플러쉬함으로서 동시 멀티쓰레딩을 증진시킬 필요가 있다.
종래 기술에 숙련된 자에게 명백해질 이러한 필요성 및 다른 목적들은 멀티쓰레드(multithread) 컴퓨터 프로세서의 프로세서 파이프라인(pipeline)에서 다수의 쓰레드(thread) 중 하나를 플러쉬(flush)하는 방법에 의해 만족되고, 이는: (a) 적어도 하나의 공유 파이프라인 스테이지를 갖는 멀티쓰레드 컴퓨터 프로세서에서 동시 처리를 위해 다수의 쓰레드를 인출 (fetch)하는 단계; (b) 프로세서 파이프라인 중에서 중단된 지시가 프로세서 파이프라인에 주어진 쓰레드 중 하나에 속하는 프로세서 파이프라인에 주어진 적어도 2개의 쓰레드의 또 다른 처리를 방해하는 상기 공유 파이프라인 스테이지 내의 중단된 지시를 공유 파이프라인 스테이지에서 인식하는 단계; (c) 공유 파이프라인 스테이지 및 그 공유 파이프라인 스테이지 이전에 프로세서 파이프라인의 모든 스테이지로부터 중단된 지시를 갖는 한 쓰레드의 모든 지시를 플러쉬하는 단계; 및 (d) 프로세서 파이프라인에서 또 다른 쓰레드를 처리하는 단계를 포함한다. 중단된 지시는 중단된 쓰레드에 의해 요구되는 개별적인 자원이 저지되기 때문에 중단될 수 있다. 지시는 중단된 지시에 의해 필요로 되는 개명되지 않은 레지스터가 저지되기 때문에 중단될 수 있다. 중단된 지시는 동기화된 로드/저장 동작을 요구하는 지시일 수 있고, 그 동작은 지연된다. 중단된 지시는 마이크로코드(microcode)화된 지시의 그룹 중 첫번째 지시일 수 있다.
상기 방법은 또한 중단된 지시를 갖는 쓰레드와 연관된 다른 지시가 다른 연관된 플러쉬 조건을 갖는가를 결정하는 단계를 더 포함할 수 있다. 상기 방법은 또한 다수의 쓰레드 중 하나의 중단된 지시 또는 연관된 플러쉬 조건을 갖는 다른 지시가 먼저 플러쉬되어야 하는가를 결정하는 단계; 및 그 다른 지시가 더 오래되었기 때문에 연관된 플러쉬 조건에 따라 연관된 플러쉬 조건을 갖는 다른 지시를 먼저 플러쉬하는 단계를 더 포함할 수 있다.
상기 방법은 또한 공유 파이프라인 스테이지가 디스패치(dispatch) 스테이지인 것을 포함한다. 이러한 환경하에서는 상기 방법이 또한 복호화 파이프라인으로부터 중단된 지시와 연관된 쓰레드의 지시를 제거하는 단계를 포함할 수 있다. 상기 방법은 또한 지시 버퍼로부터 중단된 지시와 연관되는 쓰레드의 지시를 제거하는 단계를 포함할 수 있다. 상기 방법은 또한 디스패치 스테이지 및 그 디스패치 스테이지 이전에 프로세서 파이프라인의 모든 스테이지로부터 지시가 플러쉬되었던 쓰레드를 재시동하는 단계를 포함할 수 있다. 재시동하는 단계는 중지된 지시가 디스패치 스테이지에서 중단되게 한 상태가 해결될 때까지 지연될 수 있다. 플러쉬된 쓰레드를 재시동하는 단계는 또한 다수의 프로세서 싸이클이 경과될 때까지 지연될 수 있다.
본 발명은 또한 하나 이상의 쓰레드를 동시에 처리하는 하드웨어 멀티쓰레드 파이프라인 프로세서에서의 디스패치 플러쉬 메카니즘(dispatch flush mechanism)으로 생각될 수 있고, 그 디스패치 플러쉬 메카니즘은: 파이프라인 프로세서의 인출 스테이지; 인출 스테이지에 연결된 파이프라인 프로세서의 복호화 스테이지; 복호화 스테이지에 연결된 파이프라인 프로세서의 디스패치 스테이지; 파이프라인 프로세서의 인출 스테이지, 복호화 스테이지, 및 디스패치 스테이지에 연결된 플러쉬 우선화 로직; 디스패치 스테이지에 연결된 파이프라인 프로세서의 전달 대기열(issue queue); 전달 대기열에 연결되고 각 쓰레드에 전용되는 다수의 개별적 자원(resource); 및 파이프라인 프로세서내의 쓰레드 선택 로직을 포함하고, 여기서, 다수의 쓰레드 중 하나의 다수의 지시 중 하나는 다수의 개별적인 자원 중 하나가 이용가능하지 않기 때문에 전달 대기열에 디스패치되는 것이 방지되고, 쓰레드 선택 로직은 다수의 쓰레드 중 하나에 속하는 디스패치 스테이지, 복호화 스테이지, 및 인출 스테이지에서 모든 지시를 선택하고, 플러쉬 우선화 로직은 모든 지시를 제거하는 신호를 전한다.
본 발명은 또한 프로세서 효율성을 증진시키는 장치로 생각되고, 이는:다수의 쓰레드로부터 하드웨어 멀티쓰레드 파이프라인 프로세서에 지시를 인출하는 수단; 다수의 쓰레드 중 하나에 대해 지시를 구별하는 수단; 지시를 복호화하는 수단; 지시가 그 지시를 디스패치하기에 충분한 개별적 및 공유 자원을 갖는가를 결정하는 수단; 지시를 디스패치하는 수단; 및 다수의 쓰레드 중 하나의 지시 중 하나가 디스패치 수단이 지시를 디스패치하기에 충분한 개별적 자원을 갖지 못하는 것으로 결정 수단이 결정할 때 인출 수단, 복호화 수단, 및 디스패치 수단으로부터 다수의 쓰레드 중 하나의 모든 지시를 제거하는 수단을 포함한다.
본 발명은 또한 컴퓨터 처리 시스템으로, 이는: 중앙 처리 유닛; 중앙 처리 유닛에 부착된 반도체 메모리 유닛; 제거가능한 메모리를 가질 수 있는 적어도 하나의 메모리 드라이브(memory drive); 사용자가 컴퓨터 처리 시스템과 상호작용하기 위한 키보드 및/또는 지시 디바이스에 부착되도록 중앙 처리 유닛에 부착된 키보드/지시 디바이스 제어기; 다른 컴퓨터, 네트워크, 주변 디바이스, 및 디스플레이 디바이스와 통신할 목적으로 적어도 하나의 입력/출력 디바이스에 연결되도록 중앙 처리 유닛에 연결된 다수의 어댑터(adapter); 적어도 2개의 독립적인 쓰레드 실행을 처리하도록 중앙 처리 유닛내에 있고, 인출 스테이지, 복호화 스테이지, 및 디스패치 스테이지를 포함하는 하드웨어 멀티쓰레딩 파이프라인 프로세서; 쓰레드 중 하나의 지시에 의해 디스패치 스테이지에서 요구되는 자원이 이용가능하지 않아 지시가 디스패치 스테이지에서 중단되는 때를 검출하는 지시 중단 검출기; 중단된 지시를 갖는 쓰레드가 이전의 플러쉬 조건을 갖는가를 결정하는 플러쉬 복호화 로직; 및 프로세서가 프로세서 파이프라인으로 또 다른 독립적인 쓰레드 실행을 처리할 수 있도록 다른 이전 플러쉬 조건이 존재하지 않거나 이전 플러쉬 조건이 중단된 지시 보다 낮은 우선순위를 갖는 경우 인출 스테이지, 복호화 스테이지, 및 디스패치 스테이지로부터 중단된 지시를 갖는 쓰레드를 플러쉬하는 디스패치 플러쉬 메카니즘을 포함한다.
본 발명은 이어지는 본 발명의 상세한 설명 및 도면을 참고로 가장 잘 이해된다.
도 1은 본 발명의 한 실시예에 따라 사용될 수 있는 컴퓨터의 간략화된 블록도.
도 2a 및 도 2b는 본 발명의 바람직한 실시예에 대한 디스패치 플러쉬(dispatch flush) 특성의 이점을 가질 수 있는 동작 유닛, 레지스터, 및 다양한 파이프라인(pipeline)을 갖는 컴퓨터 처리 유닛의 간략화된 블록도.
도 3a 및 도 3b는 본 발명의 한 실시예에 따른 디스패치 플러쉬 특성의 간략화된 흐름도.
<도면의 주요 부분에 대한 부호의 설명>
112: 처리 유닛
126: CPU
170, 176, 185: 어댑터
187: 매체 통신 인터페이스
218: 복호화 파이프라인
240: 디스패치 제어기
이제는 똑같은 번호가 똑같은 또는 유사한 소자를 나타내는 도면을 참고로, 특별히 도 1을 참고로, 처리 유닛(112)의 기본 구성소자에 대한 블록도가 도시되고, 여기서 중앙 처리 유닛(central processing unit, CPU)(126)은 시스템 버스(134)를 통해 RAM(158), 디스켓 드라이브(122), 하드-디스크 드라이브(123), CD 드라이브(124), 키보드/지시 디바이스 제어기(184), 병렬-포트 어댑터(176), 네트워크 어댑터(185), 디스플레이 어댑터(170), 및 매체 통신 어뎁터(187)에 연결된다. 내부 통신 버스(134)는 다른 디바이스 사이에서 데이터, 명령, 및 다른 정보의 전달을 지지하고; 도면에서는 단일 버스로 간단하게 도시되지만, 전형적으로 다수의 버스로 구성되고; 계층 구조의 형태로 배열될 수 있다.
CPU(126)는 일반적인 목적의 프로그램가능 멀티쓰레드(multithread) 프로세서로, 메모리(158)에 저장된 지시를 실시한다. 도 1에서는 멀티쓰레드 기능을 갖는 하나의 CPU가 도시되지만, 서버에서는 일부 멀티쓰레드 기능을 갖지 않는 다수의 CPU를 갖는 컴퓨터 시스템이 일반적이고, 한 CPU가 멀티쓰레드 기능을 갖는 한, 본 발명의 원리에 따라 사용될 수 있는 것으로 이해되어야 한다. 비록 도 1의 다른 다양한 구성소자가 단일 엔터티(entity)로 도시되지만, 각각이 다수의 엔터티로 구성되고 다수의 레벨로 존재하는 것이 보다 일반적이다. 적절한 멀티쓰레드 프로세서가 CPU(126)로 사용될 수 있지만, 이는 멀티쓰레딩 기능을 갖는 IBM으로부터 이용가능한 PowerPCTM라인의 마이크로프로세서 중 하나가 바람직하다. CPU(126)는 휘발성 랜덤 억세스 메모리(RAM)(158)에서 데이터 및 지시를 억세스하고 데이터를 저장한다. CPU는 이후 도면의 흐름도에서 보다 상세히 설명될 바와 같이 바람직한 실시예를 실행하도록 적절하게 프로그램된다.
메모리(158)는 데이터 및 프로그램을 저장하기 위한 랜덤 억세스 반도체 메모리(RAM)이고; 메모리가 개념적으로 단일 모놀리식 엔터티(monolithic entity)로 도시되지만, 메모리는 때로 캐시 및 다른 메모리 디바이스의 계층 구조로 배열되는 것으로 이해된다. RAM(158)은 전형적으로 전력이 처리 유닛(112)에 공급되는 동안 운영 시스템 및 응용 소프트웨어의 세그먼트(segment)를 저장하는 개별적인 휘발성 메모리 모듈을 다수 포함한다. 소프트웨어 세그먼트는 각각이 균일한 수의 가상 메모리 어드레스를 포함하는 하나 이상의 가상 메모리 페이지로 분할될 수 있다. 소프트웨어의 실행이 RAM(158)내에 저장될 수 있는 것 보다 더 많은 페이지의 가상 메모리를 요구할 때, 현재 필요하지 않은 페이지는 요구되는 페이지로 교환되어 비휘발성 저장 디바이스(122, 123, 또는 124)내에 저장된다. 데이터 저장(123, 124)은 바람직하게 하나 이상의 회전 자기 또는 광학 하드 디스크 드라이브 유닛을 포함하지만, 다른 종류의 데이터 저장이 사용될 수 있다.
키보드/지시 디바이스 제어기(184)는 키보드 및 그래픽 지시 디바이스와 처리 유닛(112)을 인터페이스 연결한다. 다른 방법의 실시예에서는 키보드 및 그래픽 지시 디바이스에 분리된 제어기가 있을 수 있다. 디스플레이 디바이스 어댑터(170)는 CPU(126)로부터의 그래픽 데이터를 디스플레이 디바이스를 구동하는데 사용되는 비디오 신호로 변환한다. 디바이스 어댑터(170)는 하나 이상의 단자가 부착되는 것을 지지할 수 있고, 하나 이상의 전자 회로 카드 또는 다른 유닛으로 실시될 수 있다.
처리 유닛(112)은 네트워크 어댑터(185), 매체 통신 인터페이스(187), 및 병렬-포트 어댑터(176)를 포함하고, 이들은 모두 처리 유닛(112)과 주변 디바이스 또는 다른 데이터 처리 시스템 사이의 통신을 용이하게 한다. 병렬 포트 어댑터(176)는 병렬 포트를 통해 프린터에 프린터-제어 신호를 전송할 수 있다. 네트워크 어댑터(185)는 처리 유닛(112)을 LAN(local area network)에 연결시킬 수 있다. LAN은 처리 유닛(112)의 사용자에게 소프트웨어를 포함하는 정보를 원격 컴퓨터 또는 네트워크 논리 저장 디바이스와 전자적으로 통신하는 수단을 제공한다. 부가하여, LAN은 처리 유닛(112)이 LAN에 링크된 다른 데이터 처리 시스템과 작업을 공유할 수 있게 하는 배급 처리를 지지한다. 예를 들면, 처리 유닛(112)은 에테르넷(Ethernet), 토큰 링(Token Ring), 또는 다른 프로토콜을 사용하여 LAN을 통해 로컬 서버 컴퓨터 시스템에 연결될 수 있고, 그 서버는 차례로 인터넷(Internet)에 연결된다. 매체 통신 인터페이스(187)는 인터넷 억세스 제공자나 온라인(on-line) 서비스 제공자에 이르는 전화선에 연결된 모뎀을 포함할 수 있다. 그러나, 증가적으로, 다른 더 높은 대역폭의 인터페이스가 실시되므로, 매체 통신 인터페이스(187)는 또한 케이블 텔레비젼, 무선 통신, 또는 고대역폭 통신선이나 다른 종류의 연결과 인터페이스 연결될 수 있다. 온라인 서비스는 매체 통신 인터페이스(187)를 통해 처리 유닛(112)에 다운로드(download)될 수 있는 소프트웨어를 제공한다. 더욱이, 매체 통신 인터페이스(187)를 통해, 처리 유닛(112)은 서버, 전자 메일, 또는 전자 게시판과 같은 다른 소프트웨어 소스 및 인터넷이나 www(world wide web)을 억세스할 수 있다.
도 2에는 본 발명의 바람직한 실시에 따른 멀티쓰레드 컴퓨터 프로세서설계(210)가 도시된다. 1998년 6월 30일 출원된 미국 일련 No. 108,160인 "지시의 그룹을 디스패칭하기 위한 시스템 및 방법(System and Method for Dispatching Groups of Instructions)"; 1998년 12월 16일 출원된 미국 일련 No. 213,323인 "순서에서 벗어난 로드 지시의 실행을 허용하는 시스템 및 방법(System and Method for Permitting Out-of-Order Execution of Load Instructions)"; 1998년 12월 16일 출원된 미국 일련 No. 213,331인 "순서에서 벗어난 로드 및 저장 지시의 실행을 허용하는 시스템 및 방법(System and Method for Permitting Out-of-Order Execution of Load and Store Instructions)"; 1999년 7월 14일 출원된 미국 일련 No. 332,413인 "그룹내의 지시가 트래킹되는 데이터 처리 시스템내에서 프로세서 상태를 회복하는 방법 및 시스템(Method and System for Restoring a Processor State Within a Data Processing System in which Instructions are Tracked in Groups)"; 1999년 11월 5일 출원된 미국 일련 No. 434,095인 "다수의 실행가능한 지시를 갖는 지시 그룹의 실행을 관리하는 시스템 및 방법(System and Method for Managing the Execution of Instruction Groups Having Multiple Executable Instructions)" 에서 설명된 바와 같이 순서외 파이프라인 프로세서(out-of-order pipelined processor)가 설명되고, 이러한 특허 출원은 모두 공통적으로 본 양수인에 의해 소유되어 있고, 여기서 전체적으로 참고된다.
상기에 포함된 출원에서 설명된 바와 같은 프로세서는 이후 설명될 바와 같이 동시 하드웨어 멀티쓰레딩 동작을 가능하게 하도록 수정된다. 본 발명의 내용에서 멀티쓰레딩 동작은 지시의 시퀀스, 즉 쓰레드(thread)가 다른 쓰레드와 독립적으로 실행되고, 하드웨어 설계된 레지스터, 실행 유닛, 및 파이프라인 프로세서가 프로세서 하드웨어에서 독립적으로 실행되는 하나 이상의 지시 세트, 즉 쓰레드의 상태를 유지하는 하드웨어 멀티쓰레딩을 의미한다. 동시 멀티쓰레딩으로, 프로세서의 파이프라인에서는 2개 이상의 쓰레드가 동시에 활성화된다. 그래서, 프로세서의 파이프라인은 한 쓰레드에서 파이프라인 중단 상태가 검출될 때 다른 쓰레드에서 유용한 작업을 실행할 수 있다. 더욱이, 본 발명의 한 실시예는 한 번에 단 2개의 쓰레드가 프로세서의 파이프라인 및 레지스터에 있는 이중 멀티쓰레딩 동작의 내용에서 설명되지만, 본 발명의 디스패치(dispatch) 및 플러쉬(flush) 특성의 내용 및 원리는 다른 스테이지의 프로세서 파이프라인 및 설계 레지스터에서 2개 이상의 쓰레드를 갖는 것에도 관련된다. 또한, 종래 기술에 숙련된 자는 관련된 특허 출원에서 설명된 바와 같은 특정한 세트의 레지스터 및 대기열(queue) 또는 순서외 실행을 갖추지 않은 멀티쓰레드 파이프라인 프로세서도 또한 본 발명의 디스패치 플러쉬 특성의 이점을 취할 수 있는 것으로 생각하게 된다.
도 2의 멀티쓰레드 파이프라인 프로세서의 블록도는 매우 간략화된다; 다양한 소자 사이의 많은 연결 및 제어선은 본 발명의 원리에 따른 디스패치 플러쉬 특성을 이해하는데 용이하도록 생략되었다. 이제 도 2 및 도면의 상단 중심에 있는 지시 캐시(cache)(214)를 참고로, 파이프라인에서 쓰레드에 대한 지시는 L2 캐시 또는 메인 메모리(212)로부터 지시 캐시(214)에 인출된다. L2 캐시 및 메인 메모리(212)는 단일 유닛으로 간략화되었지만, 실제로는 시스템 버스에 의해 각각 분리되고, L2 캐시 및 메인 메모리 사이 및/또는 L2 캐시 및 지시 캐시(214) 사이에 중간 캐시가 있을 수 있다. 지시 캐시(214)에 대한 어드레스 트래킹(tracking) 및 제어는 쓰레드 당 적어도 하나, 가능하게 그 이상의 어드레스를 갖는 지시 인출 어드레스 레지스터(270)에 의해 제공된다. 쓰레드 선택(280a)은 특정한 어드레스에 관련된 특정한 쓰레드를 선택하도록 지시 인출 어드레스 레지스터(270) 및 지시 캐시(214) 사이에 삽입될 수 있다. 지시 캐시(214)로부터, 지시는 브랜치(branch) 예측 로직(276)과 연관되어 브랜치 조건의 평가가 발생되는 지시 버퍼(216)로 전해진다. 지시 버퍼(216)는 또한 본 발명의 디스패치 플러쉬 특성에 따라, 있다면, 어느 지시가 플러쉬 처리되는 쓰레드와 연관되는가를 결정하도록 플러쉬 우선화 로직(260)으로부터의 입력 제어 신호를 수신한다. 지시 버퍼(216)의 바람직한 실시예에서, 각 쓰레드의 지시는 다른 쓰레드의 지시와 구별될 수 있다. 제2 쓰레드 선택(280b)은 특정한 쓰레드가 복호화 유닛(218)에 출력되도록 하는 지시를 선택할 수 있다. 본 발명의 디스패치 플러쉬 특성에 따라, 지시는 지시 버퍼(216)로부터 플러쉬 처리되고, 플러쉬 처리된 지시와 연관된 지시 인출 어드레스 레지스터(270)내의 어드레스 및 브랜치 예측(276)에서의 조건도 또한 플러쉬 처리된다.
복호화 유닛(218)은 그 기능을 완료하는데 여러 싸이클을 요구하고, 그에 따라 다수의 파이프라인(218a, 218b 등)을 가질 수 있다. 바람직하게, 각 스테이지(218a) 및 스테이지(218b)는 구별되는 쓰레드를 갖는다. 복호화 유닛(218)에서, 복잡한 지시는 간략화되거나, 이어지는 프로세서 파이프라인 스테이지에 의해 더 쉽게 처리되도록 다른 형태로 나타내질 수 있다. 복호화 유닛(218)에서 일어날 수 있는 다른 이벤트는 지시 필드내 비트의 확장 또는 리셔플링(reshuffling), 다양한 필드로부터 예를 들어 브랜치 예측에 대한 정보의 추출, 및 그룹의 생성을 포함한다. 다중 로드(load multiple) 또는 다중 저장(store multiple) 지시와 같은 일부 지시는 매우 복잡하고, 이는 그 지시를 더 간단한 동작이나 지시, 즉 마이크로코드(microcode)의 시리즈로 분할함으로서 더 처리된다. 복호화하는 동안, 이와 같이 복잡한 지시는 마이크로코드로 복호화되고, 복잡한 지시를 포함하는 더 간단한 지시는 모두 한 그룹으로 트래킹된다. 복호화 유닛(218)은 또한 다른 스테이지의 파이프라인에서 똑같은 쓰레드에 대한 플러쉬 처리가 더 나타나는 경우 파이프라인을 플러쉬 처리하는 위치를 결정하도록 플러쉬 우선화 로직(260)으로부터 제어 신호를 수신한다. 본 발명의 디스패치 플러쉬 특성에 따라, 중단된 쓰레드와 연관된 지시는 이후 설명될 바와 같이 복호화 유닛(218)으로부터 플러쉬 처리된다.
복호화 유닛(218)으로부터, 지시는 디스패치 유닛(220)에 전해진다. 디스패치 유닛(220)은 기준 응용에 따라 디스패치 제어(240)로부터, 또한 플러쉬 우선화 로직(260)으로부터 제어 신호를 수신한다. 프로세서 파이프라인의 디스패치 유닛(220)에서, 모든 자원, 대기열, 및 개명 풀(renamed pool)은 이들이 디스패치 유닛(220)내의 지시에 이용가능한가를 결정하도록 점검된다. 다른 지시는 다른 요구조건을 가지므로, 모든 요구조건은 지시가 디스패치 유닛(220)의 범위를 넘어서 디스패치되기 이전에 만족되어야 한다. 디스패치 제어(240) 및 디스패치 유닛(220)은 상기에 설명된 바와 같이, 마이크로코드화된, 또는 다수의 더 간단한 지시로 복호화된 복잡한 다른 지시의 디스패치를 제어한다. 한 실시예에서, 프로세서 파이프라인은 전형적으로 마이크로코드화된 지시 그룹 중간에 디스패치되지 않는다; 마이크로코드 중 제1 지시는 성공적으로 디스패치되어야 하고, 이어지는 지시는 순서대로 디스패치된다. 본 발명의 멀티쓰레드 실시예는 소정의 프로세서 클럭 싸이클 동안 단 하나의 쓰레드로부터의 지시가 디스패치 유닛(220)으로부터 전달 대기열(issue queue)(222)에 디스패치된다고 가정할 수 있다. 본 발명의 디스패치 플러쉬 특성에 따라, 중단 쓰레드의 지시는 디스패치 유닛(220)으로부터 플러쉬 처리된다.
디스패치 유닛(220)으로부터, 지시는 전달 대기열(222)에 들어간다. 다수의 전달 대기열(222a, 222b)이 주어져 하나 이상의 쓰레드가 각 전달 대기열(222a, 222b)에 주어지거나, 설계의 선택에 따라 쓰레드 당 하나의 전달 대기열이 있을 수 있다. 전달 대기열(222)은 완료 제어 로직(236)으로부터, 디스패치 제어(240)로부터, 또한 이에 제한되지 않지만 비개명 레지스터 트래킹 메카니즘(242), LRQ(load reorder queue)(244), SRQ(store reorder queue)(246), GCT(global completion table)(248), 및 개명된 풀(renamed pool)(250)을 포함하는 다양한 대기열의 조합으로부터 제어 신호를 수신할 수 있다. LRQ(244), SRQ(246), 및/또는 GCT(248)는 쓰레드 사이에서 분할되거나, 쓰레드 사이에 공유되거나, 또는 이후 분리 또는 공유 자원의 내용에서 논의될 바와 같이 각 쓰레드에 대해 분리된 대기열이 존재할 수 있다. 트래킹에서, 지시는 지시 순서를 유지하도록 GCT(248)에서 그룹으로 또는 단일적으로 트래킹될 수 있다. LRQ(244) 및 SRQ(246)는 각각 로드 및 저장 지시의 순서를 유지할 뿐만 아니라 프로그램 순서에 대한 어드레스를 유지한다. 비개명 레지스터 트래킹 메카니즘(242)은 특수 목적의 레지스터 등과 같은 레지스터에서 지시를 트래킹한다. 지시는 하나 이상의 조건 레지스터 유닛(224), 브랜치 유닛(226), 고정점 유닛(228), 부동점 유닛(230), 또는 데이터 캐시(234)에 데이터를 로드 및 저장하는 로드/저장 유닛(232)이 될 수 있는 지정된 실행 유닛으로 또 다른 기계 싸이클에 디스패치된다.
지시 실행의 성공적인 완료, 또는 한편으로, 실행 유닛에서 발생될 수 있는 에러의 통보나 잘못 예측된 브랜치는 완료 제어 로직(236)에 전해지고, 이는 플러쉬/재인출 신호(238)를 발생하여 플러쉬 우선화 로직(260) 및 다수의 대기열 중 임의의 것에, 즉 비개명 레지스터 트래킹 메카니즘(242), LRQ(244), SRQ(246), GCT(248), 또는 개명 풀(250)에 전송한다.
지시가 디스패치 유닛(220)에서 중단될 수 있는 이유는 지시 트래킹 대기열이 예를 들어 가득 차거나 그렇지 않은 경우 지시에 이용될 수 없어 저지되는 것, 싱크(sync) 지시가 실행될 수 없는 것, 지시에 의해 요구되는 자원이 예를 들어 가득차거나 그렇지 않은 경우 이용될 수 없어 저지되는 것, 쓰레드 상태를 비개명 레지스터에서 이동시키는 것 등을 포함한다. 전용 LRQ(244)나 전용 SRQ(246), 또는 전용 GCT(248)가 저지되면, 파이프라인은 이들 대기열 뒤에서 중단된다. 이용가능한 개명 풀(250)이 불충분하면, 파이프라인은 중단된다. 일부 처리가 데이터에 나열되거나 개명되지 않은 다른 요구 자원, 예를 들어 Q1이 Q2 이전에 발생되어야 하면, 비개명 레지스터는 또한 프로세서 파이프라인을 중단시킨다. 일부 경우에서는 전달 대기열(222)이 가득차고, 또한/또는 오퍼랜드(operand)가 진행되도록 대기하여, 파이프라인이 중단된다. 다수 또는 복잡한 지시로부터 유도되는 한 그룹의 더 간단한 지시 중 하나가 디스패치 스테이지에서 중단될 수 있다. 싱크 지시 및/또는 순서외 프로세서 억세스에서 저장을 동기화하는 다른 지시는 추가 정보를 필요로 하기 때문에, 또는 LRQ(244) 또는 SRQ(246)를 클리어(clear)시키는 것과 같이 자체 쓰레드의 다운스트림(downstream) 활동으로 인하여 디스패치 스테이지에서 대기하여야 하기 때문에 파이프라인을 중단시킬 수 있다. 본 발명의 디스패치 플러쉬 특성은 중단을 일으키는 조건이 쓰레드에 특정될 때 디스패치에서 프로세서의 파이프라인이 중단되게 하는 조건에 적용된다.
쓰레드에 대해서는 개별 또는 분리 자원이나 공유 자원이 있다. 일부 개별 자원은 특정한 쓰레드에서 배타적으로 사용되는 전용 대기열 또는 레지스터이다. 쓰레드 당 하나의 대기열이 있거나, 각 대기열이 각 쓰레드에 대해 예정된 공간을 가지고 분리될 수 있다. 개별 자원의 예는 비개명 레지스터 트래킹 대기열(242), 전달 대기열(222), LRQ(244), SRQ(246), GCT(248), 및 레지스터 개명 풀(250)을 포함한다. 개별 자원은 다른 쓰레드로부터의 포인터가 다른 데이터 구조를 어드레스 지정하여 칩의 다른 부분에 대기열을 배치하는 이점을 허용한다는 점에서 관리를 간략화한다. 특수한 목적의 레지스터와 같이, 설계된 비개명 레지스터에 대한 지시의 정확한 순서 결정을 보장하는 한가지 방법은 디스패치 스테이지에서 지시를 중단하여, 이전 지시가 중단된 지시에 의해 이어서 요구될 비개명 레지스터에 데이터를 기록하도록 대기하는 것이다. 일부 실시에서는 다수의 비개명 레지스터를 단일 엔터티로 판독/기록하는 것을 트래킹하도록 선택될 수 있다. 이러한 예에서,비개명 레지스터(242)의 트래킹 메카니즘은 바람직하게 개별 자원으로 생각된다. 유사하게, 특정한 쓰레드의 싱크 지시는 파이프라인에서 자체 쓰레드의 다운스트림 활동을 대기하기 때문에 디스패치 유닛(220)에서 중단될 때 또한 개별 자원으로 생각될 수 있다.
한편, 분리 데이터 구조는 다양한 레지스터에 대한 필요성이 동적이더라도 구조 사이의 분할이 고정되기 때문에 공유 구조 만큼 효과적이지 못하다. 그래서, 본 발명은 데이터 구조 및 레지스터가 공유 자원과 같이 설계되는 것을 또한 고려한다. 공유 자원은 분리되어, 또는 동시에 쓰레드에 의해 공유될 수 있는 프로세서 레지스터 및 대기열이다. 일부 환경에서는 비개명 트래킹 레지스터(242), LRQ(244), SRQ(246), GCT(248), 레지스터 개명 풀(250), 및 전달 대기열(222)이 쓰레드 사이에서 공유될 수 있다. 일부 자원은 공유되고, 다른 것은 개별화될 수 있다. 예를 들어, GCT(326)는 공유되고, LRQ(244) 및 SRQ(246)는 개별화될 수 있다.
본 발명의 바람직한 실시예에 따라, 개별 자원 및 "디스패치 플러쉬(dispatch flush)"라 칭하여지는 새로운 메카니즘의 사용은 공유 대기열 경우 보다 칩 면적을 증가시키지 않고 공유 대기열 구조와 유사한 성능 이점을 산출한다. 개별 자원이 저지되어 파이프라인 아래로 더 이상 진행될 수 없음을 의미하는, 즉 지시가 그 자원을 억세스할 수 없음을 의미하는 지시 중단이 일어날 때마다, 본 발명에 따라 그 지시를 갖는 쓰레드의 디스패치 플러쉬가 일어난다. 디스패치 플러쉬는 디스패치 유닛(220)에서 중단된 지시를 갖는 그 쓰레드가 지시 인출로부터 플러쉬 처리되고, 파이프라인 일부 및 디스패치 유닛(220)을 포함하여 거기까지의 프로세서 파이프라인의 다른 모든 부분을 복호화하게 한다. 플러쉬 제어 신호(262)는 디스패치 플러쉬 및 정상적인 플러쉬/재인출(238) 모두가 앞선 파이프라인 스테이지 및 디스패치 유닛(220)으로부터 특정한 쓰레드의 지시를 플러쉬 처리하게 한다. 그러나, 플러쉬 처리는 다른 쓰레드가 진행되도록 허용하고, 정상 플러쉬/재인출과 다르게, 전달 대기열(222)에서 지시의 연속된 실행을 허용한다. 종래 기술에 숙련된 자는 본 발명의 플러쉬 특성이 측로(bypass) 대기열 또는 다른 측로 메카니즘을 제공하지 않는 파이프라인내의 쓰레드 사이에서 공유되는 멀티쓰레드 파이프라인 처리 중 임의의 스테이지에 적용되는 것으로 인식하게 된다. 바람직한 실시예에서 공유 스테이지가 디스패치 스테이지인 것은 단지 한 예로 취해진 것이고, 제한되는 것으로 생각되지 말아야 한다.
그러나, 레지스터 개명 풀이 가득 차거나 그렇지 않은 경우 저지되는 것과 같이, 공유 자원 때문에 쓰레드가 중단되면, 디스패치 플러쉬는 실행되지 않는다. 이러한 환경하에서는 모든 쓰레드가 저지되어, 정상 플러쉬가 일어나거나, 중단 조건이 해결될 때까지 프로세서가 대기하게 된다. 중단된 지시가 복호화된 다수의 또는 복잡한 지시로부터 발생된 지시의 그룹에 있지만, 중단된 지시가 그 그룹의 첫번때일 때는 디스패치 플러쉬가 실행되지 않는다.
도 3은 디스패치 제어 로직(240)에서 바람직하게 실현되는 디스패치 플러쉬 메카니즘 및 방법의 간략화된 흐름도이다. 단계(310)에서는 지시가 디스패치 스테이지(220)에 있고, 단계(312)에서는 디스패치에 대한 요구조건이 점검된다. 단계(314)에서는 요구되는 모든 개별 자원이 이용가능한가를 결정하는 요구조건 중하나가 더 서술된다. 도 2의 프로세서 설계에서, 이들 개별 자원은 전용 또는 분할 LRQ(244), 전송 또는 분할 SRQ(246), 전용 또는 분할 GCT(248), 또는 쓰레드에 유일하게 할당된 다른 레지스터 및 자원을 포함할 수 있다. 개별 자원이 이용가능하면, 로직은 단계(316)에서 싱크 지시가 저지되는가를 결정하도록 기계의 상태를 묻는다. 싱크 지시가 저지되지 않았으면, 디스패치 제어(240)는 단계(318)에서 특수한 목적의 레지스터나 자주 사용되지 않는 다른 레지스터와 같은 비개명 레지스터가 저지되는가를 보도록 점검한다.
그러나, 단계(314)에서 개별 또는 전용 자원이 이용가능하지 않거나, 단계(316)에서 싱크 지시가 저지되거나, 단계(318)에서 특수 목적 또는 다른 비개명 레지스터가 저지되면, 처리는 중단 조건이 존재하는 것으로 결정한다. 이어서, 처리는 단계(322)에서 중단된 지시가 마크로코드 중 하나인가를 묻는다. 그런 경우, 바람직하게, 지시는 단계(332)에서 다른 디스패치 플러쉬 조건이 디스패치 플러쉬 우선화 로직(26)에서 평가되기 이전에, 단계(324)에서 마이크로코드화 지시 또는 다수 지시의 그룹 중 제1 지시가 되어야 한다. 그러나, 단계(322, 324)에서 결정된 바에 따라, 지시가 마이크로코드 일부이지만 한 그룹 중 제1 지시가 아니면, 단계(326)에서 프로세서 파이프라인은 디스패치 스테이지에서 중단된다.
프로세서의 하드웨어 설계에 의해 요구되는 모든 개별 자원이 이용가능하고, 단계(320)에서 지시가 실행 준비된 것으로 공유 대기열이 결정하는 것과 같이, 다른 모든 조건이 양호하면, 지시는 단계(338)에서 전달 대기열로 디스패치된다. 그러나, 상기 조건 중 임의의 것이 만족되지 않으면, 즉 개별 자원이 이용가능하지않거나(단계 314), 싱크 지시가 저지되거나(단계 316), 비개명 레지스터가 저지되거나(단계 318), 또 다른 조건이 불만족스러우면(단계 320), 중단 조건이 존재하므로, 조건이 해결될 때까지 단계(326)에서 쓰레드의 더 이상의 실행이 저지된다.
디스패치 우선화 로직(260)은 단계(332)에서 예를 들면, 플러쉬/재인출 신호, 브랜치의 잘못된 예측, 또는 설계된 다른 플러쉬 메카니즘과 같은 다른 플러쉬 조건이 중단된 지시를 갖는 쓰레드에 대해 인에이블되는가를 결정한다. 다른 플러쉬 조건이 존재하면, 단계(334)에서 다른 플러쉬 조건이 똑같은 쓰레드의 더 오래된 지시에 대해 존재하는가를 결정하도록 플러쉬 우선화 로직(260)에 의한 우선화가 진행된다. 진행중인 그 쓰레드에 또 다른 플러쉬 조건이 있으면, 단계(336)에서는 똑같은 쓰레드의 지시가 플러쉬 조건에 대해 설정된 우선순위 구조에 따라 플러쉬 처리된다. 단계(334)에서 더 오래된 지시가 플러쉬 조건을 갖지 않거나, 똑같은 쓰레드의 또 다른 지시가 우선순위를 갖지 않는 것으로 다른 우선순위 구조가 결정하지 않으면, 또는 단계(332)에서 그 쓰레드와 연관된 다른 플러쉬 조건이 없으면, 단계(330)의 디스패치 플러쉬가 실행된다.
앞서 논의된 바와 같이, 디스패치 플러쉬는 디스패치 스테이지 및 초기 스테이지의 프로세서 파이프라인에서의 모든 레지스터와 프로세서 스테이지로부터 중단된 지시 및 똑같은 쓰레드의 이어지는 지시를 제거하거나 플러쉬 처리한다. 예를 들면, 중단된 쓰레드의 그 지시 및 이어지는 지시는 디스패치 유닛(220), 복호화 유닛(218), 지시 버퍼(216), 브랜치 예측(276)으로부터 제거되고, 어드레스는 지시 인출 어드레스 레지스터(270)로부터 클리어된다. 이어서, 쓰레드는 지시 인출 어드레스 레지스터, 브랜치 예측 레지스터에서 가장 오래전에 플러쉬 처리된 지시 및 어드레스로 재인출되어야 하고, 그 쓰레드에 대해 설계된 다른 관련 레지스터는 회복되어야 한다.
쓰레드가 패치 플러쉬 처리되고 회복된 이후에, 이는 정상 상태로 파이프라인에 재가입된다. 디스패치 블록이나 다른 블록을 다시 만나게 되면, 디스패치 플러쉬는 다시 일어날 수 있다. 싱크 지시, L2 캐시 손실, 또는 쓰레드에 대한 다른 오랜 잠재기 이벤트로 일어나는 디스패치 블록은 오래 지속될 수 있으므로, 중단 쓰레드의 재시동이 지연될 수 있고, 그에 의해 다른 쓰레드에 싸이클을 더 제공하게 된다. 임의의 이벤트에서는 예를 들어 중단된 조건이 해결될 때까지, 또는 소정의 수의 기계 싸이클이 지날 때까지 쓰레드 선택 위치(280a, 280b)에서 중단된 쓰레드를 다시 인출 또는 복호화하는 것을 삼가하는 것이 바람직할 수 있다.
아래의 도표는 디스패치 플러쉬 특성을 사용하는 것과 연관되어 분할 또는 개별 대기열을 갖는 동시 멀티쓰레드(simultaneous multithread, SMT) 프로세서에서 얻어지는 성능을 비교한다.
SMT 성능 이득 SMT 코어 면적 증가
공유 대기열 35% 10%
개별 대기열, 1x총 엔트리 27% 10%
개별 대기열, 2x총 엔트리 36% 25%
개별 대기열, 2x총 엔트리,디스패치 플러쉬 41% 25%
개별 대기열, 1x총 엔터리,디스패치 플러쉬 37% 10%
공유 대기열을 갖는 첫번째 경우에서는 단일 드레드 설계 보다 2개의 쓰레드로 35%의 성능 이득이 주어진다. 면적 비용은 L2 및 L3 캐시를 제외하고 프로세서 코어의 10%이다. 면적이 일정하게 유지되도록 대기열이 쓰레드 사이에 단순히 분할되면, 대기열의 비탄력적인 분할 때문에 성능이 급격히 떨어진다. 원래의 성능 이득은 더 큰 대기열로 이루어질 수 있지만, 면적이 증가된다. 더 많은 대기열 엔트리는 쓰레드를 식별하도록 데이터 구조에 일부 비트가 증가되지만, 이는 면적을 더 증가시키게 된다. 디스패치 플러쉬의 부가로, 성능은 적절하게 증가되지만, 중요하게 코어 면적은 상당히 감소된다.
부정확한 브랜치 예측으로부터 회복하는데 사용되는 것과 같은 기존의 플러쉬 메카니즘과 다르게, 디스패치 플러쉬는 중단된 쓰레드가 전달 대기열에 들어가는 것 조차 방지하므로, 자원이 덜 플러쉬 처리되고 회복이 더 빠르다. 디스패치 플러쉬와 대조적으로, 브랜치 지시가 주어지면, 브랜치는 타켓을 예측하고 복호화 파이프라인에서 다음 지시가 되는 타켓을 회복하게 된다. 그래서, 브랜치 및 예측 지시는 전달 대기열에 내내 파이프라인 연결된다. 그러나, 브랜치가 실행하고 잘못된 경로인 것으로 결정되었기 때문에, 전체 그룹에 대한 모든 지시가 플러쉬 처리되도록, 즉 전달 대기열, LRQ, SRQ, GCT, 또는 다른 지시 트래킹 및 완료 테이블, 재개명 풀, 지시 버퍼, 복호화 파이프라인, 및 그 쓰레드와 연관된 모든 지시의 디스패치 파이프라인이 플러쉬 처리되고 새로운 지시가 인출되도록 신호가 발생되어 CGT 및 다른 지시 트래킹 대기열에 전달된다. 디스패치 플러쉬와 정상적인플러쉬 사이의 차이점은 디스패치 스테이지의 지시가 GCT 엔트리를 갖지 않으므로 GCT가 플러쉬 처리될 필요가 없다는 점이다. 또한, 디스패치 플러쉬는 파이프라인 중에서 인출/복호화/디스패치 부분만이 플러쉬 처리되므로 가격이 더 저렴하다.
본 발명의 다양한 실시예가 상기에 설명되었지만, 이들은 제한적인 것이 아니라 예로 주어진 것이고 변화가 가능한 것으로 이해되어야 한다. 그래서, 본 발명의 폭과 범위는 상기에 설명된 모범적인 실시예에 의해 제한되지 않고, 다음의 청구항 및 그와 동일한 것에 따라서만 정의되어야 한다.

Claims (16)

  1. 멀티쓰레드(multithread) 컴퓨터 프로세서의 프로세서 파이프라인(pipeline)에서 다수의 쓰레드(thread) 중 하나를 플러쉬(flush) 처리하는 방법에 있어서:
    (a) 적어도 하나의 공유 파이프라인 스테이지를 갖는 상기 멀티쓰레드 컴퓨터 프로세서에서 동시 처리를 위해 상기 다수의 쓰레드를 인출(fetch)하는 단계;
    (b) 상기 공유 파이프라인 스테이지 이전에 상기 프로세서 파이프라인에 주어진 적어도 2개의 드레드의 또 다른 처리를 방해하는 상기 공유 파이프라인 스테이지 내의 중단된 지시를 인식하는 단계 - 상기 중단된 지시는 상기 적어도 2개의 쓰레드 중 하나에 속함 -;
    (c) 상기 공유 파이프라인 스테이지 및 상기 공유 파이프라인 스테이지 이전에 상기 프로세서 파이프라인의 모든 스테이지로부터 상기 적어도 2개의 쓰레드 중 상기 하나의 모든 지시를 플러쉬 처리하는 단계; 및
    (d) 상기 프로세서 파이프라인에서 상기 적어도 2개의 쓰레드 중 다른 하나를 처리하는 단계
    를 포함하는 것을 특징으로 하는 방법.
  2. 제1항에 있어서,
    상기 중단된 지시는 다수의 쓰레드 중 상기 하나에 의해 요구되는 개별 자원(resource)이 저지되기 때문에 중단되는 것을 특징으로 하는 방법.
  3. 제1항에 있어서,
    상기 중단된 지시는 상기 중단된 지시에 의해 필요로 되는 개명되지 않은(non-rename) 레지스터가 저지되기 때문에 중단되는 것을 특징으로 하는 방법.
  4. 제1항에 있어서,
    상기 중단된 지시는 동기화된 로드/저장 동작을 요구하는 지시이고, 상기 동작은 지연되는 것을 특징으로 하는 방법.
  5. 제1항에 있어서,
    (a) 상기 중단된 지시가 마이크로코드(microcode)화된 지시의 그룹 중 첫번째 지시인 것으로 결정하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  6. 제1항에 있어서,
    (a) 상기 적어도 2개의 쓰레드 중 상기 하나와 연관된 다른 지시가 다른 연관된 플러쉬 조건을 갖는가를 결정하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  7. 제6항에 있어서,
    (a) 상기 적어도 2개의 쓰레드 중 상기 하나의 상기 중단된 지시 또는 연관된 플러쉬 조건을 갖는 상기 다른 지시가 먼저 플러쉬 처리되어야 하는가를 결정하는 단계; 및
    (b) 상기 다른 지시가 더 오래되었기 때문에 상기 연관된 플러쉬 조건에 따라 상기 연관된 플러쉬 조건을 갖는 상기 다른 지시를 먼저 플러쉬 처리하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  8. 제1항에 있어서,
    상기 공유 파이프라인 스테이지는 디스패치(dispatch) 스테이지인 것을 특징으로 하는 방법.
  9. 제8항에 있어서,
    (a) 복호화 파이프라인으로부터 상기 중단된 지시와 연관된 상기 적어도 2개의 쓰레드 중 상기 하나의 상기 지시를 제거하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  10. 제8항에 있어서,
    (a) 지시 버퍼로부터 상기 중단된 지시와 연관된 상기 적어도 2개의 쓰레드 중 상기 하나의 상기 지시를 제거하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  11. 제8항에 있어서,
    (a) 상기 디스패치 스테이지 및 상기 디스패치 스테이지 이전에 상기 프로세서 파이프라인의 모든 스테이지로부터 지시가 플러쉬 처리되었던 상기 적어도 2개의 쓰레드 중 상기 하나를 재시동하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  12. 제11항에 있어서,
    (a) 상기 디스패치 스테이지 및 상기 디스패치 스테이지 이전에 상기 프로세서 파이프라인의 모든 스테이지로부터 지시가 플러쉬 처리되었던 상기 적어도 2개의 쓰레드 중 상기 하나를 재시동하는 상기 단계 이전에, 상기 중단된 지시가 상기 디스패치 스테이지에서 중단되게 한 조건이 해결될 때까지 대기하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  13. 제11항에 있어서,
    (a) 상기 디스패치 스테이지 및 상기 디스패치 스테이지 이전에 상기 프로세서 파이프라인의 모든 스테이지로부터 지시가 플러쉬 처리되었던 상기 적어도 2개의 쓰레드 중 상기 하나를 재시동하는 상기 단계 이전에, 다수의 상기 프로세서 싸이클을 대기하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  14. 하나 이상의 쓰레드를 동시에 처리하는 하드웨어 멀티쓰레드 파이프라인 프로세서에서의 디스패치 플러쉬 메카니즘(dispatch flush mechanism)에 있어서:
    (a) 상기 파이프라인 프로세서의 인출 스테이지;
    (b) 상기 인출 스테이지에 연결된 상기 파이프라인 프로세서의 복호화 스테이지;
    (c) 상기 복호화 스테이지에 연결된 상기 파이프라인 프로세서의 디스패치 스테이지;
    (d) 상기 파이프라인 프로세서의 상기 인출 스테이지, 상기 복호화 스테이지, 및 상기 디스패치 스테이지에 연결된 플러쉬 우선화 로직(flush prioritize logic);
    (e) 상기 디스패치 스테이지에 연결된 상기 파이프라인 프로세서의 전달 대기열(issue queue);
    (f) 상기 전달 대기열에 연결되고 상기 각 쓰레드에 전용되는 다수의 개별 자원; 및
    (g) 상기 파이프라인 프로세서 내의 쓰레드 선택 로직
    을 포함하고,
    상기 다수의 쓰레드 중 하나의 상기 다수의 지시 중 하나는 상기 다수의 개별 자원 중 하나가 이용가능하지 않기 때문에 상기 전달 대기열에 전해지는 것이 방지되고, 상기 쓰레드 선택 로직은 상기 다수의 쓰레드 중 상기 하나에 속하는 상기 디스패치 스테이지, 상기 복호화 스테이지, 및 상기 인출 스테이지에서 모든 지시를 선택하여 상기 플러쉬 우선화 로직이 상기 모든 지시를 제거하는 신호를 전달하는 것을 특징으로 하는 디스패치 플러쉬 메카니즘.
  15. 프로세서 효율성을 증진시키는 장치에 있어서:
    (a) 다수의 쓰레드로부터 하드웨어 멀티쓰레드 파이프라인 프로세서에 지시를 인출하는 수단;
    (b) 상기 지시를 다수의 쓰레드 중 하나로 구별하는 수단;
    (c) 상기 지시를 복호화하는 수단;
    (d) 상기 지시가 상기 지시를 디스패치하기에 충분한 개별 및 공유 자원을 갖는가를 결정하는 수단;
    (e) 상기 지시를 디스패치하는 수단; 및
    (f) 상기 다수의 쓰레드 중 상기 하나의 상기 지시 중 하나가 상기 디스패치 수단이 상기 지시를 디스패치하기에 충분한 개별 자원을 갖지 못하는 것으로 상기 결정 수단이 결정할 때, 상기 인출 수단, 상기 복호화 수단, 및 상기 디스패치 수단으로부터 상기 다수의 쓰레드 중 상기 하나의 상기 지시 모두를 제거하는 수단
    을 포함하는 것을 특징으로 하는 장치.
  16. 컴퓨터 처리 시스템에 있어서:
    (a) 중앙 처리 유닛;
    (b) 상기 중앙 처리 유닛에 부착된 반도체 메모리 유닛;
    (c) 제거가능한 메모리를 가질 수 있는 적어도 하나의 메모리 드라이브(memory drive);
    (d) 사용자가 상기 컴퓨터 처리 시스템과 상호작용하기 위한 키보드 및/또는 지시 디바이스에 부착되도록 상기 중앙 처리 유닛에 부착된 키보드/지시 디바이스 제어기;
    (e) 다른 컴퓨터, 네트워크, 주변 디바이스, 및 디스플레이 디바이스와 통신할 목적으로 적어도 하나의 입력/출력 디바이스에 연결되도록 상기 중앙 처리 유닛에 연결된 다수의 어댑터(adapter);
    (f) 적어도 2개의 독립적인 쓰레드 실행을 처리하도록 상기 중앙 처리 유닛 내에 있고, 인출 스테이지, 복호화 스테이지, 및 디스패치 스테이지를 포함하는 하드웨어 멀티쓰레딩 파이프라인 프로세서;
    (g) 상기 쓰레드 중 하나의 지시에 의해 상기 디스패치 스테이지에서 요구되는 자원이 이용가능하지 않아 상기 지시가 상기 디스패치 스테이지에서 중단되는 때를 검출하는 지시 중단 검출기;
    (h) 상기 중단된 지시를 갖는 상기 쓰레드가 이전 플러쉬 조건을 갖는가를 결정하는 플러쉬 복호화 로직; 및
    (i) 상기 프로세서가 상기 프로세서 파이프라인으로써 상기 독립적인 쓰레드 실행 중 또 다른 것을 처리할 수 있도록 다른 이전 플러쉬 조건이 존재하지 않거나 상기 이전 플러쉬 조건이 상기 중단된 지시 보다 낮은 우선순위(priority)를 갖는경우 상기 인출 스테이지, 상기 복호화 스테이지, 및 상기 디스패치 스테이지로부터 상기 중단된 지시를 갖는 상기 쓰레드를 플러쉬 처리하는 디스패치 플러쉬 메카니즘
    을 포함하는 것을 특징으로 하는 컴퓨터 처리 시스템.
KR10-2001-0018489A 2000-05-04 2001-04-07 멀티쓰레드 프로세서에서 공유 파이프라인 및 다른파이프라인 스테이지의 선택적인 플러쉬 KR100436675B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/564,930 2000-05-04
US09/564,930 US6694425B1 (en) 2000-05-04 2000-05-04 Selective flush of shared and other pipeline stages in a multithread processor

Publications (2)

Publication Number Publication Date
KR20010100879A true KR20010100879A (ko) 2001-11-14
KR100436675B1 KR100436675B1 (ko) 2004-06-22

Family

ID=24256480

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2001-0018489A KR100436675B1 (ko) 2000-05-04 2001-04-07 멀티쓰레드 프로세서에서 공유 파이프라인 및 다른파이프라인 스테이지의 선택적인 플러쉬

Country Status (5)

Country Link
US (1) US6694425B1 (ko)
JP (1) JP3548132B2 (ko)
KR (1) KR100436675B1 (ko)
IL (1) IL138177A0 (ko)
TW (1) TW508530B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9983932B2 (en) 2010-05-27 2018-05-29 Samsung Electronics Co., Ltd. Pipeline processor and an equal model compensator method and apparatus to store the processing result

Families Citing this family (93)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001046827A1 (en) * 1999-12-22 2001-06-28 Ubicom, Inc. System and method for instruction level multithreading in an embedded processor using zero-time context switching
US20030188141A1 (en) * 2002-03-29 2003-10-02 Shailender Chaudhry Time-multiplexed speculative multi-threading to support single-threaded applications
US8762581B2 (en) * 2000-12-22 2014-06-24 Avaya Inc. Multi-thread packet processor
US7401211B2 (en) * 2000-12-29 2008-07-15 Intel Corporation Method for converting pipeline stalls caused by instructions with long latency memory accesses to pipeline flushes in a multithreaded processor
US20030041175A2 (en) * 2001-05-03 2003-02-27 Singhal Sandeep K Method and System for Adapting Short-Range Wireless Access Points for Participation in a Coordinated Networked Environment
JP3632635B2 (ja) * 2001-07-18 2005-03-23 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US7366884B2 (en) * 2002-02-25 2008-04-29 Agere Systems Inc. Context switching system for a multi-thread execution pipeline loop and method of operation thereof
US7822950B1 (en) * 2003-01-22 2010-10-26 Ubicom, Inc. Thread cancellation and recirculation in a computer processor for avoiding pipeline stalls
US7194603B2 (en) * 2003-04-23 2007-03-20 International Business Machines Corporation SMT flush arbitration
US7213135B2 (en) * 2003-04-24 2007-05-01 International Business Machines Corporation Method using a dispatch flush in a simultaneous multithread processor to resolve exception conditions
US7469407B2 (en) * 2003-04-24 2008-12-23 International Business Machines Corporation Method for resource balancing using dispatch flush in a simultaneous multithread processor
US7134000B2 (en) * 2003-05-21 2006-11-07 Analog Devices, Inc. Methods and apparatus for instruction alignment including current instruction pointer logic responsive to instruction length information
US7198108B2 (en) * 2003-08-05 2007-04-03 Single Buoy Moorings, Inc. Changing the temperature of offshore produced water
US7472390B2 (en) 2003-10-01 2008-12-30 Intel Corporation Method and apparatus to enable execution of a thread in a multi-threaded computer system
US7430737B2 (en) * 2003-12-04 2008-09-30 Sun Microsystems, Inc. Processor and method for supporting compiler directed multithreading management
US8074051B2 (en) 2004-04-07 2011-12-06 Aspen Acquisition Corporation Multithreaded processor with multiple concurrent pipelines per thread
JP4327008B2 (ja) * 2004-04-21 2009-09-09 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US7523330B2 (en) * 2004-06-30 2009-04-21 Sun Microsystems, Inc. Thread-based clock enabling in a multi-threaded processor
US8225034B1 (en) 2004-06-30 2012-07-17 Oracle America, Inc. Hybrid instruction buffer
US7774393B1 (en) 2004-06-30 2010-08-10 Oracle America, Inc. Apparatus and method for integer to floating-point format conversion
US7434000B1 (en) 2004-06-30 2008-10-07 Sun Microsystems, Inc. Handling duplicate cache misses in a multithreaded/multi-core processor
US7747771B1 (en) 2004-06-30 2010-06-29 Oracle America, Inc. Register access protocol in a multihreaded multi-core processor
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
US7861063B1 (en) 2004-06-30 2010-12-28 Oracle America, Inc. Delay slot handling in a processor
US7941642B1 (en) 2004-06-30 2011-05-10 Oracle America, Inc. Method for selecting between divide instructions associated with respective threads in a multi-threaded processor
US7216216B1 (en) 2004-06-30 2007-05-08 Sun Microsystems, Inc. Register window management using first pipeline to change current window and second pipeline to read operand from old window and write operand to new window
US7178005B1 (en) 2004-06-30 2007-02-13 Sun Microsystems, Inc. Efficient implementation of timers in a multithreaded processor
US7779238B2 (en) * 2004-06-30 2010-08-17 Oracle America, Inc. Method and apparatus for precisely identifying effective addresses associated with hardware events
US7330988B2 (en) * 2004-06-30 2008-02-12 Sun Microsystems, Inc. Method and apparatus for power throttling in a multi-thread processor
US7185178B1 (en) 2004-06-30 2007-02-27 Sun Microsystems, Inc. Fetch speculation in a multithreaded processor
US7478225B1 (en) 2004-06-30 2009-01-13 Sun Microsystems, Inc. Apparatus and method to support pipelining of differing-latency instructions in a multithreaded processor
US7533248B1 (en) 2004-06-30 2009-05-12 Sun Microsystems, Inc. Multithreaded processor including a functional unit shared between multiple requestors and arbitration therefor
US7373489B1 (en) 2004-06-30 2008-05-13 Sun Microsystems, Inc. Apparatus and method for floating-point exception prediction and recovery
US7890734B2 (en) * 2004-06-30 2011-02-15 Open Computing Trust I & II Mechanism for selecting instructions for execution in a multithreaded processor
US7370243B1 (en) 2004-06-30 2008-05-06 Sun Microsystems, Inc. Precise error handling in a fine grain multithreaded multicore processor
US8095778B1 (en) 2004-06-30 2012-01-10 Open Computing Trust I & II Method and system for sharing functional units of a multithreaded processor
US8640114B2 (en) 2006-09-07 2014-01-28 Oracle America, Inc. Method and apparatus for specification and application of a user-specified filter in a data space profiler
US7383403B1 (en) 2004-06-30 2008-06-03 Sun Microsystems, Inc. Concurrent bypass to instruction buffers in a fine grain multithreaded processor
US7676655B2 (en) * 2004-06-30 2010-03-09 Sun Microsystems, Inc. Single bit control of threads in a multithreaded multicore processor
US7426630B1 (en) 2004-06-30 2008-09-16 Sun Microsystems, Inc. Arbitration of window swap operations
US7437538B1 (en) 2004-06-30 2008-10-14 Sun Microsystems, Inc. Apparatus and method for reducing execution latency of floating point operations having special case operands
US7343474B1 (en) 2004-06-30 2008-03-11 Sun Microsystems, Inc. Minimal address state in a fine grain multithreaded processor
US7702887B1 (en) 2004-06-30 2010-04-20 Sun Microsystems, Inc. Performance instrumentation in a fine grain multithreaded multicore processor
US7353364B1 (en) 2004-06-30 2008-04-01 Sun Microsystems, Inc. Apparatus and method for sharing a functional unit execution resource among a plurality of functional units
GB0415851D0 (en) * 2004-07-15 2004-08-18 Imagination Tech Ltd Microprocessor output ports and control of instructions provided therefrom
US8037250B1 (en) 2004-12-09 2011-10-11 Oracle America, Inc. Arbitrating cache misses in a multithreaded/multi-core processor
US7490230B2 (en) * 2005-02-04 2009-02-10 Mips Technologies, Inc. Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor
US7657883B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US7664936B2 (en) * 2005-02-04 2010-02-16 Mips Technologies, Inc. Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages
US7657891B2 (en) 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7681014B2 (en) * 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US7613904B2 (en) * 2005-02-04 2009-11-03 Mips Technologies, Inc. Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler
US7631130B2 (en) * 2005-02-04 2009-12-08 Mips Technologies, Inc Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
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
US7752627B2 (en) * 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a multithreading microprocessor
US7506140B2 (en) * 2005-02-04 2009-03-17 Mips Technologies, Inc. Return data selector employing barrel-incrementer-based round-robin apparatus
US7266674B2 (en) * 2005-02-24 2007-09-04 Microsoft Corporation Programmable delayed dispatch in a multi-threaded pipeline
US7313673B2 (en) * 2005-06-16 2007-12-25 International Business Machines Corporation Fine grained multi-thread dispatch block mechanism
US7490224B2 (en) * 2005-10-07 2009-02-10 International Business Machines Corporation Time-of-life counter design for handling instruction flushes from a queue
US8813055B2 (en) * 2006-11-08 2014-08-19 Oracle America, Inc. Method and apparatus for associating user-specified data with events in a data space profiler
JP2008191856A (ja) * 2007-02-02 2008-08-21 Nec Computertechno Ltd 情報処理システム
US8762951B1 (en) 2007-03-21 2014-06-24 Oracle America, Inc. Apparatus and method for profiling system events in a fine grain multi-threaded multi-core processor
GB2448118B (en) * 2007-04-03 2011-08-24 Advanced Risc Mach Ltd Error recovery following erroneous execution with an instruction processing pipeline
CN101689109A (zh) * 2007-06-20 2010-03-31 富士通株式会社 指令控制装置以及指令控制方法
JP5093237B2 (ja) * 2007-06-20 2012-12-12 富士通株式会社 命令処理装置
JP4759026B2 (ja) * 2008-07-15 2011-08-31 公立大学法人広島市立大学 プロセッサ
US8024719B2 (en) 2008-11-03 2011-09-20 Advanced Micro Devices, Inc. Bounded hash table sorting in a dynamic program profiling system
US20100115494A1 (en) * 2008-11-03 2010-05-06 Gorton Jr Richard C System for dynamic program profiling
US8478948B2 (en) * 2008-12-04 2013-07-02 Oracle America, Inc. Method and system for efficient tracing and profiling of memory accesses during program execution
KR101640848B1 (ko) * 2009-12-28 2016-07-29 삼성전자주식회사 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치
US9201654B2 (en) 2011-06-28 2015-12-01 International Business Machines Corporation Processor and data processing method incorporating an instruction pipeline with conditional branch direction prediction for fast access to branch target instructions
US9665375B2 (en) * 2012-04-26 2017-05-30 Oracle International Corporation Mitigation of thread hogs on a threaded processor and prevention of allocation of resources to one or more instructions following a load miss
US20130297910A1 (en) * 2012-05-03 2013-11-07 Jared C. Smolens Mitigation of thread hogs on a threaded processor using a general load/store timeout counter
US9558003B2 (en) 2012-11-29 2017-01-31 Samsung Electronics Co., Ltd. Reconfigurable processor for parallel processing and operation method of the reconfigurable processor
US9304848B2 (en) * 2013-01-15 2016-04-05 International Business Machines Corporation Dynamic accessing of execution elements through modification of issue rules
US9361204B2 (en) * 2013-02-19 2016-06-07 Arm Limited Generating trace data including a lockup identifier indicating occurrence of a lockup state
US20170139716A1 (en) * 2015-11-18 2017-05-18 Arm Limited Handling stalling event for multiple thread pipeline, and triggering action based on information access delay
US10706101B2 (en) 2016-04-14 2020-07-07 Advanced Micro Devices, Inc. Bucketized hash tables with remap entries
CN108255587B (zh) * 2016-12-29 2021-08-24 展讯通信(上海)有限公司 一种同步多线程处理器
US10275254B2 (en) * 2017-03-08 2019-04-30 International Business Machines Corporation Spin loop delay instruction
GB2563587B (en) 2017-06-16 2021-01-06 Imagination Tech Ltd Scheduling tasks
US10606591B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
WO2019069256A1 (en) * 2017-10-06 2019-04-11 International Business Machines Corporation LOADING-STORAGE UNIT WITH PARTITIONED RELEASING WAIT FILES WITH A SINGLE CAM PORT
US10394558B2 (en) 2017-10-06 2019-08-27 International Business Machines Corporation Executing load-store operations without address translation hardware per load-store unit port
US11175924B2 (en) * 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
JP2019101543A (ja) * 2017-11-29 2019-06-24 サンケン電気株式会社 プロセッサ及びパイプライン処理方法
US10552162B2 (en) * 2018-01-22 2020-02-04 International Business Machines Corporation Variable latency flush filtering
US10990403B1 (en) * 2020-01-27 2021-04-27 Arm Limited Predicting an outcome of an instruction following a flush
US11334361B2 (en) 2020-03-02 2022-05-17 Arm Limited Shared pointer for local history records used by prediction circuitry
US11520591B2 (en) 2020-03-27 2022-12-06 International Business Machines Corporation Flushing of instructions based upon a finish ratio and/or moving a flush point in a processor
US11157284B1 (en) 2020-06-03 2021-10-26 Arm Limited Predicting an outcome of an instruction following a flush
US11360773B2 (en) 2020-06-22 2022-06-14 Microsoft Technology Licensing, Llc Reusing fetched, flushed instructions after an instruction pipeline flush in response to a hazard in a processor to reduce instruction re-fetching
US11983533B2 (en) 2022-06-28 2024-05-14 Arm Limited Control flow prediction using pointers

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5649225A (en) * 1994-06-01 1997-07-15 Advanced Micro Devices, Inc. Resynchronization of a superscalar processor
US6058466A (en) * 1997-06-24 2000-05-02 Sun Microsystems, Inc. System for allocation of execution resources amongst multiple executing processes
US6292860B1 (en) * 1997-12-16 2001-09-18 Ncr Corporation Method for preventing deadlock by suspending operation of processors, bridges, and devices
US6272520B1 (en) * 1997-12-31 2001-08-07 Intel Corporation Method for detecting thread switch events
US6317821B1 (en) * 1998-05-18 2001-11-13 Lucent Technologies Inc. Virtual single-cycle execution in pipelined processors
US6230251B1 (en) * 1999-03-22 2001-05-08 Agere Systems Guardian Corp. File replication methods and apparatus for reducing port pressure in a clustered processor
US6542991B1 (en) * 1999-05-11 2003-04-01 Sun Microsystems, Inc. Multiple-thread processor with single-thread interface shared among threads
US6484254B1 (en) * 1999-12-30 2002-11-19 Intel Corporation Method, apparatus, and system for maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9983932B2 (en) 2010-05-27 2018-05-29 Samsung Electronics Co., Ltd. Pipeline processor and an equal model compensator method and apparatus to store the processing result

Also Published As

Publication number Publication date
JP3548132B2 (ja) 2004-07-28
US6694425B1 (en) 2004-02-17
IL138177A0 (en) 2001-10-31
JP2001356903A (ja) 2001-12-26
TW508530B (en) 2002-11-01
KR100436675B1 (ko) 2004-06-22

Similar Documents

Publication Publication Date Title
KR100436675B1 (ko) 멀티쓰레드 프로세서에서 공유 파이프라인 및 다른파이프라인 스테이지의 선택적인 플러쉬
US6988186B2 (en) Shared resource queue for simultaneous multithreading processing wherein entries allocated to different threads are capable of being interspersed among each other and a head pointer for one thread is capable of wrapping around its own tail in order to access a free entry
RU2233470C2 (ru) Способ и устройство для блокировки сигнала синхронизации в многопоточном процессоре
US7676808B2 (en) System and method for CPI load balancing in SMT processors
US6857064B2 (en) Method and apparatus for processing events in a multithreaded processor
EP1238341B1 (en) Method, apparatus, medium and program for entering and exiting multiple threads within a multithreaded processor
US6061710A (en) Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
US7698707B2 (en) Scheduling compatible threads in a simultaneous multi-threading processor using cycle per instruction value occurred during identified time interval
US7809933B2 (en) System and method for optimizing branch logic for handling hard to predict indirect branches
US6651163B1 (en) Exception handling with reduced overhead in a multithreaded multiprocessing system
US7603543B2 (en) Method, apparatus and program product for enhancing performance of an in-order processor with long stalls
KR100407014B1 (ko) 명령어 히스토리 정보를 갖는 기본 블럭 캐쉬마이크로프로세서
JP2002508564A (ja) 実行パイプラインの外部に複数のプログラム・カウンタとトレース・バッファを有するプロセッサ
JP2002508568A (ja) 不適正順序マルチスレッド実行を実行するロード命令およびストア命令を順序付けるシステム
JP2002508567A (ja) 誤推論後の命令再実施のためのアウトオブパイプライン・トレース・バッファ
JP2005115971A (ja) スーパースケーラマイクロプロセサに於て命令をリタイアさせるシステム及び方法
EP1226498A1 (en) Fast multithreading for closely coupled multiprocessors
WO1994016385A1 (en) System and method for assigning tags to instructions to control instruction execution
KR20010070435A (ko) 1차 및 2차 송출큐를 갖는 마이크로프로세서
US7203821B2 (en) Method and apparatus to handle window management instructions without post serialization in an out of order multi-issue processor supporting multiple strands
US10545765B2 (en) Multi-level history buffer for transaction memory in a microprocessor
JPH04503582A (ja) コンピュータの分散型パイプライン制御装置及び方法
JP2001249805A (ja) マイクロプロセッサ内の命令取出ユニット
US20220075624A1 (en) Alternate path for branch prediction redirect
US20040128488A1 (en) Strand switching algorithm to avoid strand starvation

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