KR100305310B1 - 멀티스레드프로세서의명령어및연관된인출요청의백그라운드완료 - Google Patents

멀티스레드프로세서의명령어및연관된인출요청의백그라운드완료 Download PDF

Info

Publication number
KR100305310B1
KR100305310B1 KR1019970049015A KR19970049015A KR100305310B1 KR 100305310 B1 KR100305310 B1 KR 100305310B1 KR 1019970049015 A KR1019970049015 A KR 1019970049015A KR 19970049015 A KR19970049015 A KR 19970049015A KR 100305310 B1 KR100305310 B1 KR 100305310B1
Authority
KR
South Korea
Prior art keywords
data
instruction
cache
thread
control unit
Prior art date
Application number
KR1019970049015A
Other languages
English (en)
Other versions
KR19980063489A (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 KR19980063489A publication Critical patent/KR19980063489A/ko
Application granted granted Critical
Publication of KR100305310B1 publication Critical patent/KR100305310B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/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, look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Abstract

데이터 처리 시스템은 복수의 처리 파이프라인을 형성하는 복수의 실행 유니트를 포함한다. 복수의 처리 파이프라인은 명령어를 처리하고 저장 파이프라인을 포함한다. 데이터 처리 시스템은 또한 명령어 유니트와 저장 제어 유니트를 포함한다. 명령어 유니트는 명령어를 복수의 실행 유니트로 출력하고 복수의 실행 유니트에 의한 복수의 스레드의 실행을 제어한다. 저장 파이프라인에 있는 제1 스레드의 명령어가 캐쉬 미스(cache miss)를 겪게 되면 명령어 유니트는 스레드를 스위칭할 것을 결정하고 제2 스레드에 대한 처리를 시작한다. 명령어 유니트는 또한 미싱 데이터(missing data)를 얻기 위해 데이터 요청을 저장 제어 유니트로 발행한다. 항상 파이프라인이 완전히 채워지도록 명령어를 디스패치하는 것은 불가능하기 때문에, 제2 스레드가 처리되는 동안, 사용되지 않은 슬랏이 저장 파이프라인에 나타날 것이다. 요청된 데이터가 상위 레벨 메모리로부터 회답된 후에, 저장 제어 유니트는 캐쉬 미스가 발생했던 제1 스레드의 명령어를 저장 파이프라인의 사용되지 않은 슬랏으로 디스패치한다. 따라서, 제1 스레드의 이러한 명령어는 제2 스레드의 명령어와 함께 처리될 것이다.

Description

멀티스레드 프로세서의 명령어 및 연관된 인출 요청의 백그라운드 완료{BACKGROUND COMPLETION OF INSTRUCTION AND ASSOCIATED FETCH REQUEST IN A MULTITHREAD PROCESSOR}
본 발명은 제1 스레드에 대한 명령어 및 이에 연관되는 인출 요청의 처리를 제2 스레드의 명령어를 실행하는 동안에 완료함으로써 제1 스레드로 다시 스레드 스위칭시 처리의 효율을 증가시키기 위한 멀티스레드 데이터 처리 시스템 및 방법에 관한 것이다.
오늘날 고성능의 단일 칩 마이크로프로세서에 대해 가장 보편화된 구조는 축소형 명령어 집합 컴퓨터(RISC) 구조라 할 수 있다. 반도체 기술이 발달함에 따라, RISC 구조의 목적은 컴퓨터의 각 클럭 사이클마다 거의 하나의 명령어를 시작할 수 있도록 하는 프로세서를 설계하는 것으로 발전되었다. 이러한 기준, 즉 명령어 당 클럭 사이클(clock cycles per instruction, CPI)은 일반적으로 고성능 프로세서의 구조를 특징화하는데 사용된다. 명령어 파이프라이닝과 캐쉬 메모리의 구조적 특성은 CPI의 성능을 향상시켰다. 파이프라인 명령어 실행은 이전에 발행된(issued) 명령어의 실행이 완료되기 이전에 후속 명령어의 실행을 시작할 수 있도록 해준다. 캐쉬 메모리는, 대부분의 경우에 있어서, 주메모리의 전체 액세스 시간을 기다리지 않고 명령어의 실행이 계속될 수 있도록 한다.
명령어 파이프라이닝은 여러 스테이지(stage)의 명령어 처리에 관련된다.각 스테이지는 보통 하나의 클럭 사이클이 걸린다. 스테이지 갯수는 RISC 구조에 따라 다르지만, 전형적인 파이프라이닝은 명령어를 획득하는 명령어 인출 스테이지를 포함한다. 이하에서 상세히 설명될 슈퍼스칼라 구조는 또한 상기 스테이지에 후속되는 디스패치(diepatch)/범용 래지스터 액세스 스테이지를 포함하는데, 이 스테이지에서는 명령어가 디코드되어 적합한 파이프라인으로 디스패치(dispatch)된다. 본 발명이 개시되는 파이프라인 및 슈퍼스칼라 구조를 설명하는데 있어서, 이러한 2개의 예비 스테이지는 설명을 단순하게 하기 위해 생략하겠다. 그러나, 전술한 구조에서 이러한 2개 스테이지가 수행된다는 것은 이해될 것이다.
명령어 인출 및 디스패치/범용 레지스터 액세스의 예비 스테이지 이후에, 다음 스테이지는, 도 1의 스테이지 1에 예시된 바와 같이, 어드레스(address) 스테이지이다. 어드레스 스테이지 동안에, 프로세서는 수치 연산 및 논리 연산과 같은 레지스터 대 레지스터 스칼라 연산을 위한 오퍼런드를 인출하거나, 또는 로드 및 저장 명령어를 수행하기 위한 가상 어드레스를 생성한다. 데이터 스테이지, 즉 제2 스테이지(스테이지 2)에서는, 레지스터 대 레지스터 스칼라 연산이 완료되거나, 또는 로드 및 저장 명령어를 위해 생성된 가상 어드레스를 이용하여 데이터 캐쉬(D-캐쉬)가 액세스된다. 제3 스테이지(스테이지 3)는 스칼라 연산의 결과 또는 로드 명령어로부터 얻어진 데이터가 목적(destination) 레지스터에 저장되는 커미트(commit) 스테이지이다.
도 1은 3-스테이지 파이프라인에서의 명령어 "A"의 주기를 예시한다. 파이프라이닝으로부터 성능 향상을 얻기 위해서는 복수의 명령어가 파이프라인의 서로다른 스테이지에서 동시에 실행되어야 한다.
도 2는 도 1의 파이프라인에서 명령어 A, B, C의 실행을 도시한다. 파이프라이닝하지 않고 순차적으로 실행한다면, 명령어 A, B, C를 실행하기 위해 9개의 사이클이 걸릴 것이다. 그러나, 파이프라이닝을 통해, 그 명령어들을 실행하게 되면 단지 5개의 사이클이 걸릴 것이다.
종래 RISC 프로세서의 성능은 슈퍼스칼라 구조를 적용함으로써 더욱 향상되었다. 슈퍼스칼라 구조에서는, 복수의 파이프라인을 병행하여 실행하기 위해 복수의 기능(functional) 및 실행 유니트가 제공된다.
도 3은 파이프라인형 4-웨이(way) 슈퍼스칼라 구조를 위한 파이프라인을 도시한다. 로드 및 저장 연산, 수치 연산, 논리 연산, 및 분기 연산을 위해 특정 파이프라인이 제공된다. 분기 연산의 실행은 다른 파이프라인과 어느 정도 독립적으로 행해지지만, 분기 명령어는 다른 명령어와 마찬가지로 분기 파이프라인을 거침으로써 다른 명령어에 대한 분기의 명령어 순서를 유지하게 된다. 분기의 실행은 분기 목표(target) 어드레스 생성하기, 조건 분기인 경우 조건 코드 검사하기, 분기 목표 어드레스에서 명령어 인출하기, 수행될 분기보다 프로그램 순서상 그 다음에 오는 모든 실행 및 커미트먼트(commitment) 명령어를 파이프라인에서 취소하기, 수행될 분기로 프로그램 카운터 값을 바꾸기를 포함한다. 이러한 스테이지들은, 도 3에 도시된 바와 같이, 일반적으로 스테이지 1내지 3과 전술한 바와 같이, 명령어 인출 및 디스패치/범용 레지스터 액세스의 두개의 예비 스테이지에서 수행된다.
슈퍼스칼라 구조에서는, 한 번에 단지 한 개의 명령어만이 파이프라인으로디스패치되고, 명령어 간에 의존성이 존재하면 디스패치를 금지하거나 파이프라인을 정지시킨다(stall). 도 3에 도시된 예는 명령어 A 내지 I가 실행되는 것을 도시한다. 파이프라인도 아니고, 슈퍼스칼라도 아닌 프로세서에서 이러한 명령어를 실행한다면 최소한 27 사이클이 걸리며, 파이프라인 구조 이지만 슈퍼스칼라 구조는 아닌 프로세서에서는 최소한 11 사이클이 걸리게 된다. 그러나, 파이프라인형 4-웨이 슈퍼스칼라 프로세서에서는 명령어 A 내지 I를 실행하는데 단지 5개의 사이클만이 걸린다.
이러한 파이프라인형 슈퍼스칼라 구조에서는, 명령어들이 순차적(in-order) 그리고 비순차적(out-of-order) 완료될 수 있다. 순차적 완료라 함은 어떠한 명령어가 완료되기 이전에 그 명령어보다 먼저 디스패치된 모든 명령어가 완료됨을 의미한다. 비순차적 완료라 함은, 선정된 규칙 집합이 만족되는 한, 임의의 명령어가 그 명령어보다 먼저 디스패치된 모든 명령어가 완료되기 이전에도 완료될 수 있음을 의미한다. 파이프라인형 슈퍼스칼라 시스템에서의 순차적 및 비순차적 실행 모두에 있어서, 파이프라인을 정지하게 하는 조건이 있다. 먼저 디스패치되었지만 아직 완료되지 않은 명령어의 결과에 의존하는 명령어는 파이프라인을 정지시키는 원인이 될 수 있다.
예를 들어, 캐쉬 미스(cache miss)를 경험하는 인출 요청과 같은, 로드 및 저장 명령어에 의존하는 명령어는 캐쉬 미스가 해결될 때까지, 즉 캐시 적중(hit)이 이루어질 때까지는 실행되지 않는다. 높은 캐쉬 적중률을 유지하는 것은, 예를 들어 데이터 캐쉬에서는 사소한 것이 아니며, 큰 데이터 구조에 관련된 계산에서는더욱 그러하다. 캐쉬 미스는 파이프라인을 여러 사이클 동안 정지시킬 것이고, 캐쉬 미스율(miss ratio)이 높다면 메모리 래이턴시(latency)의 양은 엄청날 것이다.
주메모리로 사용되는 메모리 장치가 점점 빨라지고 있기는 하지만, 이러한 메모리 칩과 고성능 프로세서 사이의 속도 차이는 점점 커지고 있다. 이에 따라, 현재 고성능 프로세서 설계상에서 많은 양의 실행 시간이 캐쉬 미스로 인한 기다림 시간으로 손실되고 있으며, 메모리 래이턴시 허용(tolerance) 기술이 구현되지 않는다면 메모리 액세스 지연이 프로세서 실행 시간에서 점점 많은 부분을 차지할 것으로 예측된다.
메모리 래이턴시를 허용하는 하나의 공지된 기술은 하드웨어 멀티스레딩이다. 일반적으로, 하드웨어 멀티스레딩은 칩 상에(on-chip) 여러 개의 타스크 또는 스레드 상태를 유지한다. 이는 각각의 스레드를 위한 프로세서 레지스터를 복제해두는 것에 관련된다.
예를 들어, RISC 구조를 구현한 프로세서로서, 본 출원의 양수인에 의해 파워피시(PowerPCTM)이란 상표로 팔리고 있는 이 프로세서는 멀티스레딩을 수행하는데, N 스레드를 실행시키기 위해 N개의 상태를 유지하여야 한다. 따라서, 이하의 레지스터가 N번 복사되는데, 즉 범용 레지스터(GPR), 부동소숫점 레지스터(FPR), 조건 레지스터(CR), 부동 소숫점 상태 및 제어 레지스터(FPSCR), 카운트 레지스터, 링크 레지스터(LR), 예외 레지스터(XER), 저장 복구(save restore) 레지스터 0, 1(SRR0, SRR1) 및 특별 목적 레지스터(SPRs)의 일부가 이에 해당된다. 또한, 세그먼트 색인(segment look aside) 버퍼(SLB)도 복사되거나, 또는 선택적으로는 각각의 엔트리가 스레드 번호로 태그될 수 있다(tagged). 복사되거나 태그되지 않는다면, SLB는 스레드가 스위칭될 때마다 플러시(flush)되어야 한다. 또한, 분기 예측 매커니즘의 일부도 복사되어야 하는데, 예를 들면 상관(correlation) 레지스터와 복귀 스택(return stack)이 이에 해당된다. 다행스럽게도, 프로세서의 커다란 기능을 수행하는 몇몇은 복사하지 않아도 되는데, 예를 들면 레벨 1 명령어 캐쉬(L1 I-캐쉬), 레벨 1 데이터 캐쉬(L1 D-캐쉬), 명령어 버퍼, 저장 큐, 명령어 디스패치기, 기능 및 실행 유니트, 파이프라인, 변환 색인 버퍼(TLB), 및 분기 이력표가 있다. 하나의 스레드가 지연되면, 프로세서는 신속하게 다른 스레드로 스위칭한다. 이러한 스레드의 실행은 제1 스레드의 메모리 지연과 중첩된다.
2가지 유형의 멀티스레딩이 존재하는데, 하드웨어 멀티스레딩과 소프트웨어 멀티스레딩이다. 하드웨어 멀티스레딩에는 2가지의 기본 형식이 있다. 전형적인 형식은 프로세서에 N개의 스레드, 또는 상태를 유지하고 스레드를 사이클마다 인터리브(interleave)하는 것이다. 이 형식에서는 하나의 스레드의 명령어들이 분리되기 때문에 모든 파이프라인 의존성이 제거된다. 하드웨어 멀티스레딩의 다른 형식은 어느 정도 장기간 지연되는 이벤트(long-latency event)가 발생함에 따라 스레드를 스위칭하는 것이다. 본 발명의 바람직한 실시예에서는 하드웨어 멀티스레딩과 어느 정도 장기간 지연되는 이벤트에 따른 스레드의 스위칭 방식을 채택한다.
멀티스레딩은 현재 스레드에 대하여 파이프라인 정지 조건을 감지하는 경우 파이프라인이 개별적인 스레드를 위해 유용하게 이용될 수 있도록 한다. 도 4 및도 5를 참조하여 멀티스레딩을 설명하는데, 도 4에서는 멀티스레딩이 없는 경우의 상태를 도시하고 있다. 도 4는 파이프라인된 4-웨이 슈퍼스칼라 구조에서 저장 파이프라인의 명령어가 캐쉬 미스를 겪는 경우에 수행되는 처리를 도시하고 있다. 명령어 D0 다음에 디스패치되는 명령어는 명령어 A0에 대한 데이터 의존성을 갖는다고 가정한다. 명령어 A0는 캐쉬 미스를 겪는 저장 명령어인데, 이 캐쉬 미스가 해결되기 위해서는 5개의 사이클이 걸린다. 따라서, 멀티스레딩이 없다면, A0에 대한 캐쉬 미스가 해결될 때가지 파이프라인의 기능은 정지한다. 결과적으로, 명령어 A0에 대한 캐쉬 미스가 사이클 3에서 발생하면, 프로세서는 명령어 A0를 위한 데이터가 사이클 7에서 회답되고 사이클 8에서 커미트될 때가지 사이클 4 내지 7 동안 정지된다. 그 후에 사이클 9 및 10에 도시된 바와 같이 명령어의 처리는 계속된다.
이와는 대조적으로, 하드웨어 멀티스레딩은 제1 스레드에서 캐쉬 미스가 발생하더라도 프로세서가 활성 상태로 남아 있도록 한다. 도 5에 도시된 바와 같이, 사이클 3에서 명령어 A0에 대해 도 4에 도시된 것과 동일한 캐쉬 미스가 발생한다. 그러나, 도 5는 멀티스레딩을 나타내는데, 결과적으로 사이클 4에서 스레드 0의 명령어들을 제거하고(squashed away) 스레드 1의 명령어를 파이프라인으로 디스패치한다. 프로세서는 사이클 4, 5, 6, 7 동안에 스레드 1을 처리한다. 멀티스레딩하지 않는 구조에서는 이들 사이클 동안에 프로세서의 기능이 정지해버림을 인식한다. 스레드의 스위칭에 하나 이상의 사이클이 걸리 수 있지만, 설명을 단순하게 하기 위해, 본 발명의 도면에서는 이러한 스위칭 시간을 설명하지 않았다.
프로세서는 스레드 0으로 스레드의 재스위칭이 발생할 때까지 스레드 1을 처리한다. 설명을 위해, 명령어 M1가 캐쉬 미스를 겪게 되어 스레드 0으로의 스레드 재스위칭이 일어난다고 가정한다. 그러나, 본 기술 분야의 통상의 지식을 가진 자라면, 여러 개의 스레드 스위칭 기법이 존재함을 알 수 있을 것이다. 예를 들면, 어거럴(Agarawl) 등이 쓰고 1993년 6월에 IEEE 마이크로 볼륨 13 제 3권 페이지 48 내지 60에 실린, "스파클: 대용량 스케일 멀티프로세서를 위한 진보적 설계(Sparcle: An Evolutionary Design for Large-scale Multiprocessors)"에 하나의 가능한 스레드 스위칭 기법이 설명되어 있다.
명령어 M1에 대한 캐쉬 미스가 발생하였기 때문에, 스레드 1의 명령어를 파이프라인으로부터 제거하고 사이클 10에서 스레드 0을 위한 명령어 A0, B0, C0, 및 D0를 디스패치한다. 전술한 바와 같이, 명령어 D0에 후속되는 명령어는 명령어 A0의 완료 여부에 의존적이다. 그리고 나서, 사이클 11에 도시된 바와 같이 스레드 0을 위한 명령어의 처리는 계속된다. 후속되는 사이클에서, 명령어 A0에 대한 데이터가 데이터 캐쉬로 로드되었기 때문에 명령어 A0에 대해 캐쉬 적중이 일어난다. 이에 따라, 프로세서는 스레드 0의 명령어의 실행을 계속한다.
불행하게도, 종래 데이터 처리 시스템의 멀티스레드 구조에 의하면, 캐쉬 미스를 겪게 되는 제1 스레드의 명령어는 파이프라인을 통해 처리되기 이전에 제1 스레드가 활성 상태로 되거나 포어그라운드(forground) 스레드로 될 때까지 기다려야 한다. 예를 들면, 전술한 어거럴 등이 쓴 논문에서는 그러한 시스템을 개시하고 있다. 따라서, 이러한 구조에서는 캐쉬 미스를 겪는 명령어에 의존하는 명령어를처리하기 이전에 완료 사이클을 요청하게 된다.
따라서, 본 발명의 목적은 제2 스레드의 명령어를 실행하면서 제1 스레드의 명령어 및 이에 연관되는 인출 요청에 대한 처리를 완료함으로써 제1 스레드로 다시 스레드-스위칭하기 위한 처리의 효율성을 증가시키기 위한 데이터 처리 시스템 및 방법을 제공하는 것이다.
본 발명의 또 하나의 목적은 캐쉬 미스를 겪은 제1 스레드의 명령어를 제2 스레드가 처리되는 동안에 백그라운드로 완료할 수 있는 멀티스레드의 슈퍼스칼라 구조를 제공하는 것이다.
본 발명의 또 하나의 목적은 향상된 CPI를 갖는 멀티스레드 데이터 처리 시스템 및 방법을 제공하는 것이다.
도 1은 파이프라인에서 하나의 명령어를 처리하는 과정을 예시한 도면.
도 2는 파이프라인에서 여러 개의 명령어를 처리하는 과정을 예시한 도면.
도 3은 파이프라인형 4-웨이(4-way) 슈퍼스칼라 구조의 파이프라인에서 명령어를 처리하는 것을 예시한 도면.
도 4는 파이프라인형 4-웨이 슈퍼스칼라 구조의 파이프라인에서 캐쉬 미스(caahe miss)가 발생한 경우에 명령어를 처리하는 것을 예시한 도면.
도 5는 파이프라인형 멀티스레드의 4-웨이 슈퍼스칼라 구조의 파이프라인에서 명령어를 처리하는 것을 예시한 도면.
도 6a는 본 발명에 따른 데이터 처리 시스템의 상위 수준 블럭도.
도 6b는 도 6a의 저장 제어 유니트를 좀더 상세하게 도시한 도면.
도 7은 본 발명에 따른 프로세서에 대한 파이프라인 흐름도.
도 8은 본 발명에 따른 명령어 인출(fetch) 처리를 예시한 도면.
도 9는 본 발명에 따른 데이터 요청 처리를 예시한 도면.
도 10a 내지 10b는 본 발명에 따른 백그라운드 완료 처리를 예시한 도면.
도 11은 본 발명에 따른 파이프라인형 멀티스레드 슈퍼스칼라 구조의 파이프라인을 통해 명령어가 처리되는 것을 예시한 도면.
본 발명의 이러한 목적은 적어도 제1 스레드와 제2 스레드를 실행시키는 데이터 처리 시스템 밀 방법을 제공함으로써 이루어진다. 제2 스레드가 실행되는 동안에, 데이터 처리 시스템은 제1 스레드의 명령어와 연관된 데이터 인출 요청을 완료할 것이다. 데이터 인출의 요청을 완료한 후에, 데이터 처리 시스템은 제1 스레드의 명령어 및 이에 연관되는 데이터 인출 요청을 제2 스레드의 명령어와 함께 처리할 것이다. 결과적으로, 제1 스레드의 명령어는 제2 스레드의 명령어와 함께 완료되어 제1 스레드로 스레드를 재스위칭하는 처리가 불필요해지므로, 데이터 처리 시스템은 제1 스레드를 더욱 효율적으로 처리하게 되는 것이다.
좀더 구체적으로, 데이터 처리 시스템 및 방법은 복수의 처리 파이프라인을 형성하는 복수의 실행 유니트를 포함한다. 복수의 처리 파이프라인은 명령어를 처리하고 저장 파이프라인을 포함한다. 데이터 처리 시스템은 또한 명령어 유니트와 저장 제어 유니트를 포함한다. 명령어 유니트는 복수의 실행 유니트로 명령어를 내보내고 복수의 실행 유니트에 의한 복수의 스레드의 실행을 제어한다. 캐쉬 미스가 발생하면, 명령어 유니트는 저장 제어 유니트로 데이터 요청을 하여 캐쉬에 없는 데이터를 얻는다.
저장 파이프라인에 있는 제1 스레드의 명령어에 캐쉬 미스가 발생하여 명령어 유니트가 스레드의 스위칭을 결정하면, 명령어 유니트는 제2 스레드의 처리를 시작한다. 반면에, 명령어 유니트로부터 보내어진 데이터 인출 타스크에 따라, 저장 제어 유니트는 상위 수준 메모리로부터 캐쉬에 없는 데이터를 요청한다. 그러나, 항상 파이프라인이 완전히 채워지도록 명령어를 디스패치하는 것은 불가능하기 때문에, 제2 스레드가 처리되는 동안, 저장 파이프라인에는 사용되지 않은 슬랏(slot)이 나타나게 될 것이다. 요청된 데이터를 상위 수준 메모리로부터 얻은 후에, 저장 제어 유니트는 캐쉬 미스가 발생한 제1 스레드의 명령어를 저장 파이프라인의 사용되지 않은 슬랏으로 인도한다. 제1 스레드의 이러한 명령어는 제2 스레드의 명령어와 함께 처리될 것이다. 제2 스레드가 현재 파이프라인으로 디스패치된 스레드이기 때문에, 제2 스레드의 명령어는 포어그라운드 명령어로 여겨진다. 이러한 포어그라운드 명령어와 함께 처리되는 제1 스레드의 명령어는 백그라운드 명령어로 여겨진다. 이러한 방법으로, 캐쉬 미스가 발생한 제1 스레드의 명령어를백그라운드로 처리하므로 제1 스레드로 다시 스레드를 스위칭하는 시점에 상기 캐쉬 미스가 발생한 제1 스레드의 명령어를 파이프라인으로 디스패치할 필요없다. 그 대신에, 이 결과에 의존적인 명령어를 파이프라인으로 즉시 디스패치할 수 있다. 따라서, 종래 구조에 비해 완료 처리 사이클을 절약하게 되는 것이다.
본 발명의 다른 목적, 특성 및 특징에 해당하는, 방법, 동작, 관련 구성 요소들의 방법, 부분들의 조합, 및 경제적인 제조 등은 이하의 바람직한 실시예 및 수반되는 도면에 따른 상세한 설명으로부터 명백해지는데, 이 모든 것은 본 명세서의 일부를 구성하는 것이며, 유사한 참조 번호는 여러 도면에 있는 대응 부분을 지정하는 것이다.
지금부터 도면을 참조하며 설명하겠는데, 특히 도 6a를 참조하면, 본 발명의 방법 및 시스템을 구현하는데 활용되는 데이터 처리 시스템(10)에 대한 상위 수준 블럭도가 도시되어 있다. 바람직한 실시예에 의하면, 시스템(10)의 프로세서(12)는 단일 집적 회로이고, 파이프라인되어 있으며, 슈퍼스칼라 마이크로프로세서에 해당되는데, 인터내셔널 비지네스 머신즈 코포레이션에 의해 상표 파워피시TM로 판매되고 있는 RISC 계열의 임의의 컴퓨터 구조, 예를 들어 파워피시TM604 마이크로프로세서 칩을 활용하여 구현될 수 있다.
이하에서 상세히 설명하겠지만, 데이터처리 시스템(10)은 다양한 유니트, 레지스터, 버퍼, 메모리, 예를 들어 파워피시TMRISC 프로세서에서 제공하는 것과 같은 그밖의 섹션들을 포함하는데, 이러한 모든 것이 바람직하게는 집적 회로로 형성된다. 도 6a 및 이하에 설명되는 도 6b에서는, 설명을 단순하게 하기 위해, 여러 데이터 경로가 매우 단순한 형태로 제공되고 있음을 이해해야 할 것이다. 본 기술 분야의 당업자에게 이해되는 바와 같이, 다양한 구성 요소로 향하거나 그 구성 요소에서 나오는 별개의 많은 데이터 경로가 필요하다. 마찬가지로, 설명을 단순하게 하기 위해, 도 6a 및 6b에는 몇몇의 구성 요소, 많은 데이터 및 제어선이 전체적으로 생략되어 있다. 이 데이터 처리 시스템(10)은, 본 기술 분야의 당업자가 이해할 수 있는 바와 같이, RISC 기법 및 그밖의 공지된 컴퓨팅 기법에 따라 작동할 수 있다.
우선, 도 6a 및 6b에 도시되어 있는 다양한 유니트, 레지스터, 버퍼, 메모리 등 그리고 그들 간의 상호접속을 설명하겠다. 그런 후에, 도 6a 및 6b에 도시된 데이터 처리 시스템의 동작을 도 7 내지 도 11을 참조하며 설명하겠다.
본 발명의 구조
도 6a에 도시된 바와 같이, 데이터 처리 시스템(10)은 바람직하게는 주메모리(14), 레벨 2 캐쉬(L2 캐쉬, 20), 레벨 1 데이터 캐쉬(L1 D-캐쉬, 16), 및 레벨 1 명령어 캐쉬(L1 I-캐쉬, 18)을 포함하는데, 이들은 다양한 버스 접속과 저장 제어 유니트(SCU, 22)를 활용하여 상호 접속되어 있다. 도 6a에 도시된 바와 같이, SCU(22)는 L1 D-캐쉬(16)을 L2 캐쉬(20), 주메모리(14), 다음에 설명될 복수의 실행 유니트로 접속시키기 위한 버퍼(21)을 포함한다.
바람직하게, 버퍼(21)은 본 발명과 동시에 출원되며 본 발명의 일부로서 참조되는, 돈 프리어크슨(Don Freerksen), 파나즈 마운즈 투시(Farnaz Mounes-Toussi), 페더 제이, 펄슨(Peder J. Paulson), 존 디. 아이리쉬(John D. IRISH), 및 라일 이. 그로스바치(Lyle E. Grosbach)에 의한 미국 특허 출원 "복수-엔트리 완전 연관 변환 캐쉬(multi-entry fully associative transition cache)"에서 설명되는 변환 캐쉬이다.
L1 D-캐쉬(16)과 L1 I-캐쉬(18)은 프로세서(12)의 일부로서 칩 위에 제공되고, 주메모리(14)와 L2 캐쉬(20)은 칩 외부에 제공된다. L2 캐쉬(20)은 바람직하게는 주메모리(14)보다 속도가 빠른 메모리 시스템이며, 공지된 다양한 기술에 따라 L2 캐쉬(20) 내에 선택된 데이터를 저장함으로써, 주메모리(14)를 참조함으로 인해 발생하는 메모리 래이턴시를 줄일 수 있다. 도 6a에 도시된 바와 같이, L2 캐쉬(20)과 주메모리(14)는 SCU(22)를 통해 L1 I-캐쉬(18)과 명령어 유니트(34) 모두에 직접 접속된다. 이에 관해서는 도 6b를 참조하여 이하에서 상세하게 설명하겠다.
L1 I-캐쉬(18)로의 명령어는 바람직하게는 명령어 유니트(34)로 출력되는데, 이러한 명령어 유니트(34)는 데이터 처리 시스템(10)의 다양한 실행 유니트에 의해 실행되는 복수의 스레드를 제어한다. 데이터 처리 시스템(10)의 다양한 실행 유니트에는 적어도 분기 유니트(26), 고정 소숫점 유니트(28), SCU(22), 부동 소숫점 유니트(32)가 포함된다. 또한, 바람직한 실시예에서 명령어 유니트(34)는 소위 "스래싱(thrashing)"이라 불리우는, 연속적인 스레드 스위칭이 여러번 발생하는 상황을 줄이기 위해 임의의 공지된 기법을 채택하고 있다.
도 6a에 도시된 다양한 실행 유니트에 부가하여, 본 기술 분야의 당업자라면흔히 현대 슈퍼스칼라 마이크로프로세서 시스템은 이러한 실행 유니트 각각에 대한 복수 버전(version)을 포함한다는 것을 이해할 것이다. 또한, 본 발명의 정신 및 범위를 벗어나지 않고 다른 실행 유니트들이 추가될 수 있다. 대부분의 이러한 유니트는 범용 레지스터(GPRs, 36), 부동 소숫점 레지스터(FPRs, 40)과 같은 다양한 레지스터로부터 소스 오러펀드에 대한 정보를 입력을 받게 될 것이다. 또한, 복수의 특별 목적 레지스터(SPRs, 38)도 본 발명의 방법 및 시스템에 따라 활용되어, 스레드 스위칭에 대한 프로세서 상태 정보를 저장하게 된다. 도 6a에 도시된 바와 같이, SCU(22)와 캐쉬 라인 버퍼(21)은 GPR(36)과 FPR(40)에 직접 접속되고, GPR(36)은 SPR(38)로 접속된다.
도 6a에 도시된 바와 같이, SCU(22)와 명령어 유니트(34)를 접속시키기 위해버스를 제공한다. 예를 들어, 이러한 버스를 통해, 명령어 유니트(34)는 SCU(22)로 데이터 요청 등을 보내고, SCU(22)은, 예를 들어 L2 캐쉬(20) 내에 그 데이터가 없음을 명령어 유니트(34)에게 알릴 수 있다. 또한, 소위, 가상 어드레스와 실제 어드레스 간의 매핑 정보를 포함하는 변환 색인 버퍼(TLB, 24)가 제공된다. 본 발명에는 도시되어 있지 않지만, 부가적인 다양한 상위 수준 메모리 매핑 버퍼가 제공될 수 있는데, 예를 들면 변환 색인 버퍼(24)와 유사한 방식으로 운영되는 세그먼트 색인 버퍼 등이 제공될 수 있다.
도 6b는 SCU(22)를 상세하게 도시하고 있다. 도 6b에 도시된 바와 같이, SCU(22)는 데이터 멀티플렉서(102)로부터 데이터를 수신하는 캐쉬 라인 버퍼(21)을 포함한다. 캐쉬 라인 버퍼(21)은 미스 데이터 추적 시퀀서(miss data trackingsequencer, 100)로부터 제어 신호를 수신한다. 이하에서 보다 상세히 설명되겠지만, 본 발명의 바람직한 실시예에 의하면, 시퀀서(100)는 명령어 및 데이터 인출 요청을 처리하고 추적하기 위한 세개의 시퀀서를 포함하는데, 이들은 조합 로직으로서 구현된다.
도 6b에 도시된 바와 같이, 데이터 멀티플렉서(102)는 L1 D-캐쉬(16), 캐쉬 라인 버퍼(21), 실행 유니트, L2 캐쉬(20), 및 주메모리(14)로부터 데이터를 수신한다. 이러한 데이터 소스 중의 하나로부터의 데이터는 시퀀서(100)으로부터 수신되는 선택 신호에 따라 데이터 멀티플렉서(102)에 의해 출력된다. 시퀀서(100)은 데이터 멀티플렉서(102), 캐쉬 라인 버퍼(21), L2 캐쉬(20)로 제어 신호를 출력한다. 또한, 시퀀서(100)은 주메모리(14)와 제어 신호를 송수신한다. 데이터 멀티플렉서(102)의 출력은 L1 D-캐쉬(16), 실행 유니트, 캐쉬 라인 버퍼(21)로 공급된다. 단순한 표현을 위해, 캐쉬 라인(21), L2 캐쉬(20), 및 주메모리(14) 사이의 접속은 도시하지 않았다.
또한, 도 6b에 도시된 바와 같이, 시퀀서(100)은 L2 캐쉬(20)과 주메모리(14)로부터 데이터를 수신하는 명령어 멀티플렉서(104)로 선택 신호를 출력한다. 시퀀서(100)으로부터의 선택 신호에 따라, 명령어 멀티플렉서(104)는 이들 소스 중의 하나로부터의 데이터를 L1 I-캐쉬(18)과 명령어 유니트(34) 모두에 출력한다. 전술한 제어 신호 및 선택 신호를 만들어내는데 있어서, 시퀀서(100)은 L1 D-캐쉬(16)에 대한 L1 디렉토리(106)과 L2 캐쉬(20)에 대한 L2 디렉토리(108)를 액세스하여 갱신한다. L1 디렉토리(106)과 L2 디렉토리(108)를 액세스하여 갱신하는 것은 공지된 기술에 따라 수행된다. 도 6b에 도시된 SCU(22)의 동작은 이하에서 상세하게 설명될 것이다.
본 발명의 파이프라인 구조
다음에는, 프로세서(12)에 의해 구현되는 파이프라인 구조를 도 7을 참조하여 설명하겠다. 파이프라인 구조는 4개의 파이프라인을 포함하는데, 저장 파이프라인, 수치 연산 파이프라인, 논리 연산 파이프라인, 분기 파이프라인이 이에 해당한다. 이러한 파이프라인에는 도 3과 관련하여 "발명의 배경"에서 설명되었던 동일한 스테이지가 포함된다. 그러나, 본 발명은 단지 4개의 파이프라인 구조에만 한정되는 것이 아니라, 4개의 파이프라인 구조보다 더 많거나 적을 수 있음을 이해하여야 한다. 또한, 파이프라인의 종류 또한 본 발명의 범위 및 정신을 벗어나지 않고 중복될 수 있다.
파이프 라인 구조는 도 1 내지 도 3에 관련하여 설명된 세 개의 스테이지를 포함하고 있는 것으로 도시되어 있지만, 명령어 디코드 및 디스패치/범용 레지스터 액세스에 해당하는 예비 스테이지가 또한 수행된다는 것을 이해하여야 할 것이다. 또한, 통상의 지식을 가진 컴퓨터 설계자라면, 스테이지의 개수는 전술한 바와 같이 제한되는 것이 아니라 증가하거나 감소할 수 있음을 이해할 수 있다.
파이프라인 구조가 도 1 내지 3과 동일한 스테이지를 포함하고 있지만, 저장 파이프라인에 해당하는 스테이지 3의 구조는 도 1 내지 3과 매우 다르다. 전술한 바와 같이, 본 발명은 세 개의 시퀀서를 포함하는데, 설명의 목적상 각각 시퀀서 100a, 100b, 100c라고 칭하겠다. 그러나, 시퀀서(100)의 개수는 세 개에 한정되지않고 요청되는 성능 특성에 따라 컴퓨터 설계자에 의해 바람직하게 증가되거나 감소될 수 있다. 복수의 시퀀서(100a, 100b, 100c)는 멀티스레드 및 비-멀티스레드 환경 모두에 있어서의 처리를 향상시킨다. 구체적으로, 시퀀서는 L1 I-캐쉬 미스와 L1 D-캐쉬 미스에 대한 처리를 한다.
예를 들어, 명령어를 처리하는 동안에, 명령어 유니트(34)에 L1-캐쉬 미스가 발생한다면, 명령어 유니트는 SCU(22)로 그 명령어를 요청한다. SCU(22)는 그 요청을 처리하기 위해 시퀀서(100) 내의 시퀀서(100a, 100b, 100c) 중에서 어느 것이 이용 가능한지를 판단한다. 시퀀서(100) 중에서 이용 가능한 시퀀서가 있는 경우, 그 이용 가능한 시퀀서가 명령어 인출 타스크를 처리함으로써 명령어의 처리가 계속될 수 있다. 마찬가지로, L1 D-캐쉬 미스가 발생한다면, 데이터 요청은 SCU(22)로 보내지고, SCU(22)는 시퀀선(100) 내의 시퀀서(100a, 100b, 100c) 중에서 어느 것이 이용 가능한지를 판단한다. 시퀀서(100) 중에서 이용 가능한 시퀀서가 있는 경우, 그 이용 가능한 시퀀서가 L1 D-캐쉬 미스를 처리한다.
세 개의 시퀀서가 제공되기 때문에, 본 발명의 SCU(22)는 한번에 이러한 요청을 세 개씩 처리할 수 있다. 이와는 대조적으로, 도 3에 도시되어 있는 종래의 파이프라인 구조에서는 하나의 시퀀서만을 제공함으로써 이 시퀀서에 새로운 캐쉬 미스 처리 타스크를 할당하기 이전에 시스템은 하나의 시퀀서가 이용 가능해질 때까지 기다려야 한다.
복수의 시퀀서(100)를 이용하는 경우, 캐쉬 미스를 겪게 되는 명령어에 대한 데이터 의존성이 존재하지 않는 한, 단일 스레드 또는 복수 스레드에 대한 명령어를 계속 처리할 수 있다. 따라서, 시퀀서(100a)가 L1 D-캐쉬 미스를 처리 하는 동안, 요청 데이터(requested data)에 의존하지 않는 다음 명령어는 파이프라인에 의해 계속 처리될 수 있는데, 이는 두 개의 다른 시퀀서(100b, 100c)가 제2의 캐쉬 미스를 처리할 수 있기 때문이다.
본 발명의 동작
이제, 도 6a 내지 도 11을 참조하며 본 발명의 동작을 설명하겠다.
명령어 인출 요청의 처리
명령어 유니트(34)가 L1 I-캐쉬(18)로부터 명령어를 요청하는데 캐쉬 미스가 발생한 경우에, 명령어 유니트(34)는 SCU(22)로 명령어 라인 채우기 요청(instruction line fill request)을 발행한다. SCU(22)는 L2 캐쉬(20)에 명령어를 요청하고, 그 명령어가 L2 캐쉬(20)에 저장되어 있지 않은 경우, 주메모리(14)로부터 요청한다. 요청된 명령어가 회답됨을 SCU(22)가 감지하면, SCU(22)는 처리 및 저장을 위한 명령어 유니트(34) 및 L1 I-캐쉬(18) 각각으로 요청된 데이터를 직접 보낸다.
도 8은 명령어 인출 처리를 보다 상세하게 예시한다. 단계(S58)에서, 명령어 유니트(34)는 SCU(22)로 명령어 인출 요청을 발행한다. 그리고 나서, 단계(S60)에서, SCU(22)는 시퀀서(100) 중 명령어 인출 타스크를 실행하기 위해 어떠한 것이 이용 가능한지 판단한다. 시퀀서(100) 중 어느 하나가 이용 가능한 경우, 그 이용 가능한 시퀀서를 명령어 인출 타스크에 할당하고, 단계(262)에서 시퀀서는 L2 캐쉬(20)로 명령어 요청을 출력한다. 명령어 요청에 응답하여, L2캐쉬(20)은 요청 명령어를 포함하는 캐쉬 라인을 출력한다. 하나 이상의 실제 어드레스가 동일한 캐쉬 어드레스로 매핑되기 때문에, 특정한 캐쉬 어드레스에 저장된 데이터 또는 명령어가 요청 데이터 또는 명령어에 해당되지 않을 수 있다. L2 캐쉬 디렉토리(108)에 저장되어 있는 주소에 따라, 시퀀서(100)은 L2 캐쉬(20)로 부터 회답되는 데이터 또는 명령어가 요청 데이터 또는 명령어인지를 판단한 후에, 공지된 기법에 의해 그것을 유효화한다. L2 캐쉬(20)로부터 회답되는 데이터가 유효하다면, 단계(S66)에서,시퀀서(100)은 명령어 멀티플렉서(104)로 선택 신호를 출력하고, 단계(S66)에서 명령어 멀티플렉서(104)는 L2 캐쉬(20)로부터의 데이터를 직접 L1 I-캐쉬(18)과 명령어 유니트(34)로 출력한다.
그러나, 단계(S64)에서 시퀀서(100)이 L2 캐쉬(20)로부터 회답되는 데이터가 유효하지 않은 것으로 판단하면, 시퀀서(100)은 단계(S65)에서 주메모리(14)로 명령어 요청을 출력한다. 요청 데이터를 주메모리(14)가 출력하려고 할 때, 시퀀서(100)은 제어 라인을 통해 주메모리(14)로부터 통지를 수신하게 된다. 이에 따라, 단계(S66)에서 시퀀서(100)은 명령어 멀티플렉서(104)로 선택 신호를 출력하여 명령어 멀티플렉서(104)가 주메모리(14)로부터의 데이터를 L1 I-캐쉬(18) 및 명령어 유니트(34)로 출력하도록 한다. 이러한 방식에 의하면, 명령어 유니트(34)는 (1) 요청 명령어를 우선 L1 I-캐쉬(18)에 저장하고 (2) 요청 명령어를 L1 I-캐쉬(18)로부터 액세스할때까지 기다릴 필요 없이, 즉시 요청 명령어에 대한 처리를 시작할 수 있다.
데이터 인출 요청의 처리
실행 유니트로부터의 데이터 요청에 따라, SCU(22)는 요청 데이터를 L1 D-캐쉬(16)로부터 얻고 실행 유니트 또는 그 데이터를 요청한 유니트(이하에서는 "요청 실행 유니트(들)")로 그 데이터를 출력한다. SCU(22)가 L1 D-캐쉬 미스를 겪게 되면, SCU(22)는 시퀀서(100) 중 어떠한 것이 이용 가능한지 판단한다. 이용 가능한 시퀀서가 있는 경우, 그 이용 가능한 시퀀서(100)에 데이터 요청 타스크를 할당한다. L1 I-캐쉬 미스와 마찬가지로, 시퀀서(100)은 우선 L2 캐쉬(20)로부터 데이터를 얻으려고 시도하고, 거기에 데이터가 없는 경우, 시퀀서(100)은 주메모리(14)로부터 그 데이터를 요청한다. 요청 명령어와 마찬가지로, 요청 데이터는 캐쉬 라인의 한 부분으로서 L2 캐쉬(20) 또는 주메모리(14)로부터 출력된다.
요청 데이터가 L2 캐쉬(20) 또는 주메모리(14)로부터 회답되고 있음을 시퀀서(100)이 판단하게 되면, 시퀀서(100)은 그 데이터를 요청한 실행 유니트(들)이 그 데이터를 받을 수 있는지 판단한다. 요청 실행 유니트(들)이 요청 데이터를 받을 수 있다면, 요청 데이터를 L1 D-캐쉬(16)에 저장하기 이전에 요청 데이터를 요청 실행 유니트(들)로 출력한다. 요청 실행 유니트(들)이 요청 데이터를 받을 수 없다면, 우선 캐쉬 라인 버퍼(21)에 그 데이터를 저장한 후에 L1 D-캐쉬로 전송한다. 요청 데이터를 포함하는 캐쉬 라인이 L1 D-캐쉬(16)로 완전히 전송되기 이전에 요청 실행 유니트(들)이 이용 가능해진다면, 요청 데이터는 캐쉬 라인 버퍼(21)로부터 요청 실행 유니트(들)에 출력된다.
도 9는 데이터 인출 타스크가 할당된 시퀀서가 단계(S28)에서 캐쉬 라인 버퍼(21) 또는 주메모리(14)로부터 데이터를 요청할 때의 데이터 인출 타스크 처리를좀더 상세히 도시한다. 도 9데 도시된 바와 같이, 단계(S30)에서, 시퀀서(100)은 도 8을 참조하며 L1 I-캐쉬 미스에 관해 설명했던 것과 동일한 방식으로 요청 데이터를 포함하는 캐쉬 라인이 L2 캐쉬(20) 또는 주메모리(14)로부터 회답되고 있는지를 판단한다.
일단 요청 데이터가 회답되고 있다고 시퀀서(100)이 판단하면, 단계(S32)에서 시퀀서(100)은 실행 유니트(들)이 요청 데이터를 받아들일 수 있는지 판단한다. 구체적으로, 시퀀서(100)은 저장 파이프라인에 갭(gap)이 존재하여 요청 명령어를 요구한 명령어의 처리가 수행될 수 있는 지를 판단한다. 단계(S32)에서 시퀀서(100)은 요청 실행 유니트(들)이 요청 데이터를 받아들일 수 있다고 판단하면, 단계(S34)에서, 시퀀서(100)은 데이터 멀티플렉서(102)로 선택 신호를 출력하여 L2 캐쉬(20) 또는 주메모리(14)로부터 회답되는 요청 데이터가 직접 실행 유니트로 출력될 수 있도록 한다.
요청 데이터는 또한 캐쉬 라인 버퍼(21)에 저장된 후에 시퀀서(100)의 제어 하에 L1 D-캐쉬(16)로 출력될 것이다. 구체적으로는, 데이터 멀티플렉서(102)가 요청 데이터를 포함하는 캐쉬 라인을 실행 유니트로 출력할 때, 그 캐쉬 라인은 또한 캐쉬 라인 버퍼(21)에 공급되는 것이다. 시퀀서(100)은 그 캐쉬 라인을 저장할 것을 캐쉬 라인 버퍼(21)에 지시한다. 캐쉬 라인 버퍼(21)이 그 요청 데이처를 포함하는 캐쉬 라인을 저장하려고 시작할 때, 캐쉬 라인 버퍼(21)은 캐쉬 라인이 저장되는 캐쉬 라인 버퍼(21)의 메모리를 가리키는 저장 어드레스를 출력한다. 시퀀서(100)은 이러한 저장 어드레스를 저장하고, 캐쉬 라인에 있는 데이터의 각 구성요소, 예를 들면 캐쉬 라인 버퍼(21)에 저장되는 데이터의 구성 요소로서, 데이터 워드에 대응하는 플래그를 세트한다.
L1 D-캐쉬(16)에 캐쉬 라인을 저장하기 위해, 시퀀서(100)은 저장 어드레스를 사용하여 캐쉬 라인 버퍼(21)에 지시하여 데이터 요소 단위, 예를 들면 한 워드씩 캐쉬 라인을 출력하도록 한다. 시퀀서(100)은 또한 데이터 멀티플렉서(102)로 하여금 캐쉬 라인 버퍼(21)로 출력된 데이터를 출력하도록 하고, L1 D-캐쉬(16)에 이러한 데이터를 저장할 것을 지시한다.
단계(S32)에서, 시퀀서(100)이 요청 실행 유니트(들)이 데이터를 받을 수 없다고 판단하면, 단계(S36)에서 시퀀서(100)은 (1) 데이터 멀티플렉서(102)로 하여금 L2 캐쉬(20) 또는 주메모리(14)로부터 온 요청 데이터를 출력하고, (2) 캐쉬 라인 버퍼(21)를 제어하여 요청 데이터를 저장하도록 한다. 시퀀서(100)은 단계(S38)에서 실행 유니트를 계속 감시하여 요청 실행 유니트(들)이 그 요청 데이터를 받을 수 있게 되는 지를 판단한다.
실행 유니트(들)이 그 데이터를 받을 수 있다고 시퀀서(100)이 판단하면, 단계(S40)에서 시퀀서(100)은 요청 데이터를 포함하는 캐쉬 라인이 캐쉬 라인 버퍼(21)에서 L1 D-캐쉬(16)로 완전히 전송되었는지를 판단한다. 시퀀서(100)에 의한 이러한 판단은 L1 D-캐쉬(16)에 저장하기 위해 요청 데이터를 포함하는 캐쉬 라인을 형성하는 모든 데이터 구성 요소들을 출력할 것을 시퀀서(100)이 캐쉬 라인 버퍼(21)에 지시했는지의 여부를 판단함으로써 이루어진다. 캐쉬 라인이 완전히 전송되지 않은 경우에, 단계(S42)에서 시퀀서(100)은 (1) 캐쉬 라인 버퍼(21)을 제어하여 요청 데이터를 출력하도록 하고, (2) 데이터 멀티플렉서(102)로 선택 신호를 출력하여 데이터 멀티플렉서(102)가 캐쉬 라인 버퍼(21)로부터 요청 데이터를 출력할 수 있도록 한다. 그런 후에, 실행 유니트는 그 요청 데이터를 수신하여 처리를 수행한다. 그리고 나서, 마침내 요청 데이터를 포함하는 캐쉬 라인을 L1 D-캐쉬(16)에 저장하는 처리가 끝나는 것이다.
단계(S40)에서, 요청 데이터를 포함하는 캐쉬 라인이 L1 D-캐쉬(16)로 완전히 전송되었다고 시퀀서(100)이 판단하면, 단계(S44)에서 시퀀서(100)은 (1) L1 D-캐쉬(16)을 제어하여 요청 데이터를 출력하고, (2) 데이터 멀티플렉서(102)로 선택 신호를 출력하여 데이터 멀티플렉서(102)가 L1 D-캐쉬(16)로부터 요청 데이터를 출력하도록 한다. 그런 후에, 실행 유니트는 요청 데이터를 수신하고 처리한다.
요청 데이터가 L2 캐쉬(20) 또는 주메모리(14)로부터 회답된 후에 실행 유니트가 이용 가능해지자 마자 실행 유니트로 요청 데이터를 전송함으로써, 처리 효율이 증가한다. 많은 경우에, 실행 유니트는 데이터가 (1) 상위 수준 메모리에서 캐쉬 라인 버퍼로, (2) 캐쉬 라인 버퍼에서 L1 D-캐쉬로, 그리고 (3) L1 D-캐쉬에서 실행 유니트 중 적어도 어느 하나로 데이터가 전송되는 것을 기다릴 필요가 없게 된다.
전술한 방법에 의하면, 시퀀서(100)은 요청 데이터를 포함하는 캐쉬 라인이 캐쉬 라인 버퍼(21)로 전송되는 것을 시작한 후에 그 캐쉬 라인이 L1 D-캐쉬(16)로 완전히 전송될 때는 캐쉬 라인 버퍼(21)로부터 요청 데이터를 얻게 된다. 대안적인 실시예에 의하면, 요청 데이터를 포함하는 캐쉬 라인을 캐쉬 라인 버퍼(21)로전송하는 것을 시작한 이후에도, 요청 데이터를 캐쉬 라인의 일부로서 캐쉬 라인 버퍼(21)에 전송하기 이전에 실행 유니트가 이용 가능해진다면 시퀀서(100)은 요청 데이터가 L2 캐쉬(20) 또는 주메모리(14)로부터 실행 유니트로 직접 출력될 수 있도록 한다.
명령어의 백그라운드 완료
지금부터는, 멀티스레드 환경에서의 본 발명의 또다른 동작을 설명하겠다. 이 동작에 따라, 본 발명에 따른 데이터 처리 시스템은 제2 스레드의 명령어를 실행하는 동안에 제1 스레드에 대한 명령어의 처리 및 그에 연관되는 인출 요청을 완료함으로써 제1 스레드로 스레드-재스위칭에 대한 처리 효율을 향상시킨다.
저장 파이프라인에 있는 제1 스레드의 명령어가 L1 D-캐쉬 미스를 겪게 되어 명령어 유니트(34)가 스레드의 스위칭을 결정하는 경우, 명령어 유니트(34)는 제2 스레드에 대한 처리를 시작한다. 그 동안에, 명령어 유니트(34)는 찾으려는 데이터를 인출하기 위한 타스크를 SCU(22)에 할당하며, SCU(22)는 L2 캐쉬(20) 및 주메모리(14)중 어느 하나로부터 그 찾으려는 데이터를 요청한다.
제2 스레드가 처리되는 동안에, 저장 파이프라인에는 아직 사용되지 않은 슬랏이 나타나게 되는데, 이는 파이프라인을 완벽하게 채울 수 있도록 항상 명령어를 디스패치하는 것이 불가능하기 때문이다. L2 캐쉬(20) 또는 주메모리(14)로부터 요청 데이터를 받은 이후에, SCU(22)는 캐쉬 미스가 발생한 제1 스레드로부터의 명령어를 저장 파이프라인의 사용되지 않은 슬랏으로 인도한다. 이에 따라, 제1 스레드로부터의 이러한 명령어는 제2 스레드의 명령어와 함께 처리될 것이다. 제2스레드가 현재 파이프라인에 디스패치된 스레드이기 때문에, 제2 스레드의 명령어는 포어그라운드 명령어로 간주되고 제2 스레드는 포어그라운드 스레드로 간주된다. 따라서, 포어그라운드 명령어와 함께 처리되는 제1 스레드의 명령어는 백그라운드 명령어로 간주되고 제1 스레드는 백그라운드 스레드로 간주된다.
이러한 방식에 의하면, 캐쉬 미스를 겪는 제1 스레드의 명령어는 백그라운드로 처리되므로, 제1 스레드로 스레드의 스위칭이 발생할 때, 캐쉬 미스를 겪은 제1 스레드의 명령어를 파이프라인으로 디스패치할 필요가 없다. 대신에, 그 명령어에 의존적인 명령어를 파이프라인으로 즉시 디스패치할 수 있다. 따라서, 종래의 구조에 비해 완료 처리 사이클을 절약할 수 있게 된다. 도 10a 내지 도 11을 참조하며 백그라운드 완료 동작에 대해 상세히 설명하겠다.
도 10a 및 10b는 본 발명에 다른 백그라운드 완료 처리를 도시하고 있으며, 도 11은 이러한 동작 동안에 본 발명의 파이프라인 구조를 따라가는 명령어의 한 예를 도시한 것이다. 설명하기 위해, 제1 스레드(스레드 0)에 대한 명령어가 프로세서(12)에 의해 처리되는 중이라고 가정한다. 따라서, 도 11은 스레드 0에 대한 명령어가 파이프라인을 통해 처리되고 있는 상태를 도시한 것이다. 스레드 0으로부터의 명령어임을 표시하기 위해, 명령어 뒤에 0을 붙인다.
도 11에 도시된 바와 같이, 사이클 3에서, 명령어 A0은 L1 D-캐쉬 미스를 겪게 된다. 그러나, 종래 기술과는 달리, 명령어 A0에 의존하지 않는 명령어 B0, C0, D0는 사이클 3에서 커미트되므로, 이러한 명령어는 스레드 0으로 스레드 재스위칭이 발생할 때 다시 디스패치될 필요없게 된다. 도 10a에 도시된 바와 같이,단계(S68)에서, 백그라운드 완료 처리가 시작한다.
일단 포어그라운드 명령어가 L1 D-캐쉬 미스를 겪게 되면, SCU(22)는 이러한 L1 D-캐쉬 미스에 연관된 데이터 요청 타스크를 처리하기 위해 시퀀서(100)중에서 어느 시퀀서(100a, 100b, 100c)가 이용 가능한 지를 판단한다. 시퀀서(100) 중 하나가 이용 가능하다면, 그 이용 가능한 시퀀서(100)이 명령어 인출 타스크를 처리하도록 지정되고, 단계(S70)에서 지정된 시퀀서는 도 8을 참조하며 L1 I-캐쉬에 관해 전술한 바와 동일한 방식으로 L2 캐쉬(20) 또는 주메모리(14)로부터 데이터를 요청한다.
그 동안에, 도 11의 사이클 4에 도시된 바와 같이, 도 10a의 단계(S72)에서, 스레드의 스위칭이 발생한다. 설명하기 위해, 본 발명의 백그라운드 완료 처리에 대한 설명에서는 L1 D-캐쉬 미스가 발생한 시점에서 스레드를 스위칭하며, 본 발명과 연관하여 임의의 스레드 스위칭 방법이 사용될 수 있다. 예를 들어, 스레드 스위칭은 L1 D-캐쉬 미스 대신에 L2 캐쉬 미스 및 TLB 캐쉬 미스 등에 발생할 수 있다.
따라서, 도 11의 사이클 4에 도시된 바와 같이, 파이프라인은 새로운 스레드인 스레드 1의 명령어 처리를 시작한다. 스레드 1로부터의 명령어가 처리된다는 것을 표시하기 위해, 도 11에서는 그러한 명령어의 뒤에 1을 첨가한다.
도 10a의 단계(S74)에서, 지정된 시퀀서(100)은 L2 캐쉬(20) 또는 주메모리(14) 중 하나로부터 요청 데이터가 회답되는지를 판단한다. 일단 지정된 시퀀서(100)가 요청 데이터가 회답되고 있다고 판단하면, 단계(S76)에서 지정된 시퀀서(100)은 저장 파이프라인이 이용 가능한지 판단한다. 즉, 지정된 시퀀서(100)는 포어그라운드 명령어가 저장 파이프라인의 제1 스테이지로 디스패치되었는지를 판단한다. 포어그라운드 스레드의 명령어가 저장 파이프라인의 제1 스테이지에 디스패치되지 않은 경우, 저장 파이프라인은 이용 가능하게 된다. 따라서, 단계(S78)에서, 지정된 시퀀서(100)은 캐쉬 미스를 격은 백그라운드 명령어를 백그라운드 스레드인 스레드 0으로부터 저장 파이프라인으로 인도하고, L2 캐쉬(20) 또는 주메모리(14)중 어느 하나로부터 회답되는 요청 데이터를 실행 유니트로 직접 출력한다. 전술한 바와 같이, 이러한 후자의 동작은 도 6b의 데이터 멀티플렉서(102)로 선택 신호를 출력하여 데이터 멀티플렉서(102)가 L2 캐쉬(20) 또는 주메모리(14) 중의 하나로부터 요청 데이터를 출력하도록 함으로써 수행된다. 지정된 시퀀서(100)의 제어 하에서, 요청 데이터는 또한 캐쉬 라인 버퍼(21)에 저장되고 이어서 도 9의 단계(S34)에 관해 전술한 바와 동일한 방식으로 L1 D-캐쉬(16)에 저장된다.
단계(S76)에서, 저장 파이프라인을 이용할 수 없다고 지정된 시퀀서(100)이 판단하면, 처리는 도 10b의 단계(S80)으로 진행한다. 단계(S80)에서, 요청 데이터를 포함하는 캐쉬 라인을 캐쉬 라인 버퍼(21)로 전송하기 시작한다. 지정된 시퀀서(100)은 저장 파이프라인을 계속 감시하여 단계(S82)에서 그의 이용 가능성을 판단한다. 일단 저장 파이프라인이 이용 가능해지면, 지정된 시퀀서(100)은 단계(S84)에서 도 9의 단계(S40)에 대해 전술한 것과 동일한 방식으로 요청 데이터를 포함하는 캐쉬 라인이 캐쉬 라인 버퍼에서 L1 D-캐쉬(16)으로 완전히 전송되었는지를 판단한다.
요청 데이터를 포함하는 캐쉬 라인이 L1 D-캐쉬(16)으로 완전히 전송되었다면, 단계(S86)에서, 시퀀서(100)은 (1) 캐쉬 미스를 겪은 백그라운드 명령어를 저장 파이프라인으로 인도하고, (2) 캐쉬 라인 버퍼(21)을 제어하여 요청 데이터를 출력하도록 하며, (3) 데이터 멀티플렉서(102)로 선택 신호를 출력하여 캐쉬 라인 버퍼(21)로부터 출력된 요청 데이터가 데이터 멀티플렉서(102)에 의해 실행 유니트로 출력되도록 한다. 지정된 시퀀서(100)의 제어 하에서, 캐쉬 라인 버퍼(21)은 요청 데이터를 포함하는 캐쉬 라인을 L1 D-캐쉬(16)으로 전송하는 것을 완료한다.
단계(S84)에서, 요청 데이터를 포함하는 캐쉬 라인이 완전하게 L1 D-캐쉬(16)에 저장되었다고 지정된 시퀀서(100)가 판단한 경우, 지정된 시퀀서(100)은 (1) 캐쉬 미스를 겪은 백그라운드 명령어를 저장 파이프라인으로 인도하고, (2) L1 D-캐쉬로 하여금 요청 데이터를 출력하도록 하며, (3) 데이터 멀티플렉서(102)로 선택 신호를 출력하여 데이터 멀티플렉서(102)가 L1 D-캐쉬(16)으로부터 실행 유니트로 요청 데이터를 출력하도록 한다.
전술한 백그라운드 완료 처리에 대한 예가 도 11에 도시되어 있다. 도 11에 도시된 바와 같이, 사이클 6에서 명령어 A0에 발생한 캐쉬 미스에 따라 요청 데이터가 회답된다. 도 11의 예시에 의하면 이 사이클에서 포어그라운드 스레드인 스레드 1의 명령어는 저장 파이프라인으로 디스패치되지 않았다. 따라서, 명령어 A0는 사이클 6에서 저장 파이프라인으로 보내어져 저장 파이프라인의 스테이지 1에 나타난다. 물론, 본 기술 분야의 통상의 지식을 가진 자라면, 데이터가 올 때, 포어그라운드 스레드는 저장 파이프라인의 기능을 활용하여 저장 파이프라인의 기능이 백그라운드 완료를 위해 이용 가능해지기 전에 몇 개의 사이클이 지나가도록 할 수 있음을 이해할 수 있을 것이다. 스레드 0이 백그라운드 스레드로 남아 있는 동안에 명령어 A0는 디스패치되는데, 명령어 A0가 백그라운드 명령어라는 것을 나타내기 위해 그것을 "ao"로 표시하였다.
도 11의 사이클 6에 도시된 바와 같이, 백그라운드 명령어가 저장 파이프라인으로 인도되면, 그 명령어는 사이클 7 및 8에 도시된 바와 같이 처리된다. 이러한 백그라운드 명령어에 대응하는 백그라운드 스레드를 포어그라운드로 스위칭할 때, 백그라운드에서 완료된 명령어는 저장 파이프라인으로 디스패치될 필요 없다. 대신에, 백그라운드 명령어의 다음에 오는 명령어들이 파이프라인으로 디스패치될 수 있다.
예를 들어, 도 11에 도시된 바와 같이, 사이클 9에서 스레드 1의 명령어 M1은 캐쉬 미스를 겪게 된다. 이에 따라, 사이클 10에서 스레드의 스위칭이 발생한다. 저장 파이프라인의 개시부로 명령어 A0 내지 D0를 디스패치하는 대신에, 명령어 E0, F0, G0 및 H0를 파이프라인으로 디스패치한다. 그런 후에, 사이클 11에 도시된 바와 같이, 스레드 0에 대한 처리를 계속한다. 그러나, 명령어 A0가 백그라운드에서 완료될 수 없는 경우에는 스레드 0으로 스레드의 재스위칭이 발생할 때 명령어 A0 내지 D0이 다시 디스패치된다.
도 11과 도 5를 비교해 볼 때, 명령어 B0 내지 D0은 사이클 3에서 수용되고명령어 A0은 백그라운드에서 완료되었기 때문에, 본 발명에 따른 캐쉬 미스의 백그라운드 완료를 수행하는 방법은 하나의 전체 사이클만큼 처리 시간을 단축하는 효과가 있다.
현재 가장 실용적이고 바람직한 실시예와 관련하여 본 발명을 설명하였지만, 본 발명은 이러한 실시예에 한정되지 않고, 오히려 첨부된 청구항의 정신 및 범위에 포함되는 다양한 변형 및 균등한 구성을 포함하는 것으로 간주된다.

Claims (19)

  1. 데이터 처리 시스템에 있어서,
    복수의 처리 파이프라인 - 상기 복수의 처리 파이프라인은 명령어를 처리하고 저장 파이프라인을 포함함 - 을 형성하는 복수의 실행 유니트;
    상기 복수의 실행 유니트로 명령어를 출력하고 상기 복수의 실행 유니트에 의한 복수의 스레드의 실행을 제어하기 위한 명령어 유니트 - 상기 복수의 실행 유니트에 의해 현재 실행되는 스레드는 포어그라운드(foreground) 스레드로 참조되고, 상기 복수의 실행 유니트에 의해 현재 실행되고 있지 않은 스레드는 적어도 하나의 백그라운드 명령어를 갖는 백그라운드(background) 스레드로 참조됨-;
    데이터 캐쉬 미스 결과로 생기는 데이터 인출 요청 및 명령어 캐쉬 미스 결과로 생기는 명령어 인출 요청 - 상기 캐쉬 미스중 어느 하나 또는 양자 모두는 상기 백그라운드 스레드가 앞서 실행한 포어그라운드 스레드였던 경우 발생함 - 을 모두 수신할 수 있는 저장 제어 유니트
    를 포함하고,
    상기 저장 제어 유니트는 상기 저장 파이프라인을 모니터링하여, 상기 포어그라운드 스레드를 실행하는 동안 상기 명령어 유니트가 상기 포어그라운드 스레드로부터 상기 저장 파이프라인으로 명령어를 디스패치하지 않는 때, 따라서 상기 저장 파이프라인이 이용가능하지 않은 때를 판단하며,
    상기 데이터 인출 요청의 경우, 상기 저장 제어 유니트는 상기 저장 파이프라인이 이용 가능하다고 상기 저장 제어 유니트가 판단하면 상기 백그라운드 명령어를 상기 저장 파이프라인으로 인도하고(routing), 상기 백그라운드 명령어와 연관된 요청 데이터(requested data)를 상기 복수의 실행 유니트로 직접 출력하고;
    상기 명령어 인출 요청의 경우, 상기 저장 제어 유니트는 상기 요청 데이터를 상기 명령어 유니트로 직접 출력하는 데이터 처리 시스템.
  2. 제1항에 있어서, 상기 실행 유니트는 상기 저장 파이프라인 이외의 상기 복수의 파이프 라인 각각의 최종 스테이지에 존재하는 상기 백그라운드 스레드의 명령어에 대한 처리를, 상기 백그라운드 스레드가 상기 명령어 유니트에 의해 상기 포어그라운드에서 상기 백그라운드로 스위칭되기 이전에 완료하는 데이터 처리 시스템.
  3. 제2항에 있어서, 상기 명령어 유니트는, 상기 백그라운드 스레드를 상기 포어그라운드로 다시 스위칭할 때, 상기 실행 유니트가 처리를 완료한 명령어를 디스패치하지(dispatch) 않고, 상기 백그라운드 명령어를 상기 복수의 처리 파이프라인으로 디스패치하지 않는 데이터 처리 시스템.
  4. 제1항에 있어서, 상기 저장 제어 유니트는 복수의 시퀀서(sequencer)를 포함하며, 상기 저장 제어 유니트가 상기 데이터 인출 요청 또는 상기 명령어 인출 요청을 수신할 때, 상기 저장 제어 유니트는 하나 이상의 데이터 인출 요청 및/또는명령어 인출 요청이 한 번에 처리될 수 있도록 이용 가능한 상기 시퀀서중 하나에 상기 데이터 인출 요청 또는 상기 명령어 인출 요청을 할당하는 데이터 처리 시스템.
  5. 제1항에 있어서,
    레벨 1 데이터 캐쉬;
    레벨 1 명령어 캐쉬;
    데이터 및 명령어를 저장하기 위한 메모리를 더 포함하며,
    상기 저장 제어 유니트는 레벨 1 명령어 캐쉬 미스시 명령어 인출 요청을 수신할 수 있고 레벨 1 데이터 캐쉬 미스시 상기 복수의 실행 유니트로부터 데이터 인출 요청을 수신할 수 있으며;
    상기 저장 제어 유니트는 상기 요청된 데이터가 상기 레벨 1 데이터 캐쉬에 있지 않으면 상기 메모리로부터 데이터를 요청하고, 상기 요청된 데이터가 상기 메모리로부터 돌아올 때 상기 포어그라운드 스레드의 실행중 상기 저장 파이프라인이 이용 가능하다면 상기 메모리로부터 돌아오는 상기 요청된 데이터를 상기 복수의 실행 유니트로 직접 출력하며;
    상기 저장 제어 유니트는 상기 메모리로부터 상기 백그라운드 명령어를 요청하고, 상기 메모리로부터 돌아오는 상기 요청된 백그라운드 명령어를 상기 명령어 유니트로 직접 출력하는 데이터 처리 시스템.
  6. 제5항에 있어서, 상기 메모리는
    적어도 하나의 중간 캐쉬; 및
    주메모리를 더 포함하고, 상기 중간 캐쉬와 주 메모리는 데이터 및 명령어를 저장하는 데이터 처리 시스템.
  7. 제6항에 있어서, 상기 저장 제어 유니트는
    상기 메모리로부터 돌아온 상기 요청된 데이터를 상기 레벨 1 데이터 캐쉬로 출력하기 이전에 상기 데이터를 일시적으로 저장하는 버퍼를 포함하는 데이터 처리 시스템.
  8. 제7항에 있어서, 상기 저장 제어 유니트는
    상기 저장 파이프라인이 상기 포어그라운드 스레드의 실행중에 이용가능하다고 상기 저장 제어 유니트가 판단한 경우에, 상기 요청된 데이터를 상기 레벨 1 캐쉬에 저장하기 이전에 상기 요청된 데이터를 상기 버퍼로부터 상기 복수의 실행 유니트로 전송하는 데이터 처리 시스템.
  9. 제8항에 있어서, 상기 저장 제어 유니트는
    상기 요청된 백그라운드 명령어를 상기 레벨 1 명령어 캐쉬에 저장하기 이전에 상기 요청된 백그라운드 명령어를 상기 버퍼로부터 상기 명령어 유니트로 전송하는 데이터 처리 시스템.
  10. 데이터 처리 시스템에 있어서,
    저장 파이프라인을 포함하는 복수의 처리 파이프라인을 형성하는 복수의 실행 유니트 - 상기 복수의 처리 파이프라인은 명령어를 처리하고, 상기 복수의 실행 유니트에 의해 현재 실행되는 명령어의 시퀀스는 포어그라운드 스레드로 참조되고, 상기 복수의 실행 유니트에 의해 현재 실행되고 있지 않은 명령어의 시퀀스는 백그라운드 스레드로 참조되며; 상기 실행 유니트는 상기 저장 파이프라인 이외의 상기 복수의 파이프 라인 각각의 최종 스테이지에 존재하는 상기 백그라운드 스레드의 명령어에 대한 처리를, 상기 백그라운드 스레드가 상기 명령어 유니트에 의해 상기 포어그라운드 스레드에서 상기 백그라운드 스레드로 스위칭되기 이전에 완료함 - ;
    상기 복수의 실행 유니트로 명령어를 출력하며, 상기 복수의 실행 유니트에 의한 적어도 상기 포어그라운드 및 상기 백그라운드 스레드의 실행을 제어하여, 상기 백그라운드 스레드를 상기 포어그라운드로 다시 스위칭할 때, 상기 실행 유니트가 처리를 완료한 명령어를 디스패치하지 않고 상기 백그라운드 명령어를 상기 복수의 처리 파이프라인으로 디스패치하지 않는 명령어 유니트;
    레벨 1 데이터 캐쉬;
    레벨 1 명령어 캐쉬;
    데이터와 명령어를 저장하는 중간 캐쉬 및 주메모리;
    복수의 시퀀서를 갖고, 데이터 캐쉬 미스 결과로 생기는 데이터 인출 요청 및 명령어 캐쉬 미스 결과로 생기는 명령어 인출 요청 - 상기 캐쉬 미스중 어느 하나 또는 양자 모두는 상기 백그라운드 스레드가 앞서 실행한 포어그라운드 스레드였던 경우 발생함 - 을 수신하며, 하나 이상의 데이터 및/또는 명령어 인출 요청이 한 번에 처리될 수 있도록 이용 가능한 상기 시퀀서중 하나에 상기 데이터 인출 요청 또는 상기 명령어 인출 요청을 할당하는 저장 제어 유니트
    를 포함하고,
    상기 저장 제어 유니트는 상기 요청된 데이터가 상기 레벨 1 데이터 캐쉬에 있지 않으면 상기 중간 캐쉬 또는 상기 주메모리로부터 데이터를 요청하고, 상기 포어그라운드 스레드의 실행중 상기 명령어 유닛이 명령어를 포어그라운드 스레드로부터 상기 저장 파이프라인으로 디스패치하지 않은 경우 상기 데이터를 상기 레벨 1 데이터 캐쉬에 저장하기 이전에 상기 중간 캐쉬 또는 상기 주메모리로부터 돌아오는 상기 요청된 데이터를 상기 복수의 실행 유니트로 직접 출력하며;
    상기 저장 제어 유니트는 상기 중간 캐쉬 또는 상기 주메모리로부터 명령어를 요청하고, 상기 명령어를 상기 레벨 1 명령어 캐쉬에 저장하기 이전에 상기 중간 캐쉬 또는 상기 주메모리로부터 돌아오는 상기 요청된 명령어를 상기 명령어 유니트로 직접 출력하는 데이터 처리 시스템.
  11. 데이터 처리 시스템에서 데이터를 처리하는 방법에 있어서,
    명령어를 명령어 유니트로부터 복수의 처리 파이프라인 - 이들중 하나는 저장 파이프라인임 -을 형성하는 복수의 실행 유니트로 디스패치하는 단계;
    상기 복수의 실행 유니트에 의해 현재 실행되고 있는 포어그라운드 스레드를처리하는 단계;
    상기 복수의 실행 유니트에 의해 현재 실행되고 있지 않는 백그라운드 스레드의 처리를 중지하는 단계;
    상기 백그라운드 스레드가 앞서 실행한 포어그라운드 스레드였던 경우 백그라운드 명령어를 위해 저장 제어 유니트로 데이터 인출 요청을 발행하는 단계;
    상기 백그라운드 스레드가 앞서 실행한 포어그라운드 스레드였던 경우 백그라운드 스레드를 위해 저장 제어 유니트로 명령어 인출 요청을 발행하는 단계;
    상기 포어그라운드 스레드를 처리하는 동안 상기 명령어 유니트가 상기 포어그라운드 스레드의 명령어를 상기 저장 파이프라인으로 디스패치하지 않아 상기 저장 파이프라인이 이용가능해지는 때를 판단하기 위해 상기 저장 제어 유니트가 상기 저장 파이프라인을 모니터링하는 단계
    를 포함하고,
    상기 데이터 인출 요청의 경우, 상기 저장 제어 유니트는 상기 포어그라운드 스레드를 처리하는 동안 상기 저장 파이프라인이 이용 가능하다고 상기 모니터링 단계에서 판단하면 상기 데이터 인출 요청과 연관된 명령어를 상기 저장 파이프라인으로 인도하고, 상기 연관된 명령어와 연관된 요청 데이터를 상기 복수의 실행 유니트로 출력하며;
    상기 명령어 인출 요청의 경우, 상기 저장 제어 유니트는 요청된 명령어를 상기 요청된 명령어가 수신될 때 상기 명령어 유니트로 출력하는 데이터 처리 방법.
  12. 제11항에 있어서, 상기 백그라운드 스레드가 상기 명령어 유니트에 의해 상기 포어그라운드에서 상기 백그라운드로 스위칭되기 이전에, 상기 복수의 실행 유니트에서, 상기 저장 파이프라인 이외의 상기 복수의 파이프 라인 각각의 최종 스테이지에 존재하는 상기 백그라운드의 명령어에 대한 처리를 완료하는 단계를 더 포함하는 데이터 처리 방법.
  13. 제12항에 있어서, 상기 백그라운드 스레드를 상기 포어그라운드로 다시 스위칭할 때, 상기 완료 단계에서 완료된 명령어 및 상기 인도 단계에서 인도된 상기 백그라운드 명령어 이외의, 상기 백그라운드로부터의 명령어를 상기 복수의 처리 파이프라인으로 디스패치하는 단계를 더 포함하는 데이터 처리 방법.
  14. 제12항에 있어서, 하나 이상의 데이터 또는 명령어 인출 요청이 한번에 처리될 수 있도록 상기 저장 제어 유니트내의 복수의 이용 가능한 시퀀서중 하나로 상기 데이터 인출 요청 및/또는 상기 명령어 인출 요청을 할당하는 단계를 더 포함하는 데이터 처리 방법.
  15. 제11항에 있어서,
    상기 데이터 인출 요청을 발행하는 단계는 레벨 1 데이터 캐쉬, 중간 레벨 데이터 캐쉬 또는 주메모리로부터 데이터를 요청하는 단계를 더 포함하고;
    상기 명령어 인출 요청을 발행하는 단계는 중간 레벨 캐쉬 또는 주메모리로부터 명령어를 요청하는 단계를 더 포함하며;
    상기 요청된 데이터가 상기 중간 레벨 캐쉬 또는 주메모리로부터 돌아올 때 상기 포어그라운드 스레드의 실행중 상기 저장 파이프라인이 이용 가능하다고 상기 모니터링 단계에서 판단하면 상기 요청된 데이터를 상기 레벨 1 데이터 캐쉬에 저장하기 이전에 상기 요청된 데이터를 상기 복수의 실행 유니트로 직접 출력하며;
    상기 요청된 명령어를 상기 레벨 1 명령어 캐쉬에 저장하기 이전에 상기 요청된 명령어를 상기 명령어 유니트로 직접 출력하는 데이터 처리 방법.
  16. 제15항에 있어서, 상기 저장 제어 유니트는 상기 중간 레벨 캐쉬 또는 주메모리로부터 수신된 명령어를 상기 레벨 1 명령어 캐쉬로 출력하기 이전에 일시적으로 저장하는 버퍼를 포함하며,
    상기 출력 단계는 상기 요청된 명령어가 상기 레벨 1 명령어 캐쉬에 저장되기 이전에 상기 요청된 명령어 데이터를 상기 버퍼로부터 상기 명령어 유니트로 전송하는 데이터 처리 방법.
  17. 제15항에 있어서, 상기 저장 제어 유니트는 상기 중간 레벨 캐쉬 또는 주메모리로부터 수신된 데이터를 상기 레벨 1 데이터 캐쉬로 출력하기 이전에 일시적으로 저장하는 버퍼를 포함하며,
    상기 출력 단계는 상기 포어그라운드 스레드를 실행하는 동안 상기 요청된데이터를 포함하는 데이터가 상기 버퍼에 저장되기 시작한 이후에 상기 저장 파이프라인이 이용 가능하다고 상기 모니터링 단계에서 판단한 경우에 상기 요청된 데이터를 상기 버퍼 및 상기 레벨 1 데이터 캐쉬로부터 상기 복수의 실행 유니트로 전송하는 데이터 처리 방법.
  18. 제17항에 있어서, 상기 포어그라운드 스레드를 실행하는 동안 상기 저장 파이프라인이 이용 가능하다고 상기 모니터링 단계에서 판단한 경우에 상기 요청된 데이터가 상기 레벨 1 캐쉬로 완전히 전송되지 않았더라도, 상기 출력 단계는 상기 요청 데이터를 상기 버퍼로부터 상기 복수의 실행 유니트로 전송하는 데이터 처리 방법.
  19. 데이터 처리 시스템에서 데이터를 처리하는 방법에 있어서,
    명령어를 명령어 유니트로부터 저장 파이프라인을 포함한 복수의 처리 파이프라인을 형성하는 복수의 실행 유니트로 디스패치하는 단계;
    상기 복수의 실행 유니트에 의해 현재 실행되고 있는 포어그라운드 스레드의 상기 디스패치된 명령어를 처리하는 단계;
    명령어를 백그라운드 스레드로부터 명령어 유니트로 스위칭하여 백그라운드 스레드의 처리를 중지하기 이전에, 상기 저장 파이프라인 이외의 상기 복수의 파이프 라인 각각의 최종 스테이지에 존재하는 백그라운드 스레드의 명령어를 처리하는 단계;
    상기 복수의 실행 유니트가 레벨 1 데이터 캐쉬 미스를 경험할 때 상기 백그라운드 스레드가 앞서 실행한 포어그라운드 스레드였던 경우 상기 백그라운드 스레드의 백그라운드 명령어를 위해 저장 제어 유니트로 데이터 인출 요청을 발행하는 단계;
    상기 명령어 유니트가 레벨 1 명령어 캐쉬 미스를 경험할 때 상기 백그라운드 스레드가 앞서 실행한 포어그라운드 스레드였던 경우 상기 백그라운드 스레드를 위해 저장 제어 유니트로 명령어 인출 요청을 발행하는 단계;
    하나 이상의 상기 인출 요청이 한번에 처리될 수 있도록 상기 저장 제어 유니트내의 복수의 이용 가능한 시퀀서중 하나로 상기 인출 요청을 할당하는 단계;
    레벨 1 데이터 캐쉬, 중간 레벨 데이터 캐쉬 또는 주메모리로부터 데이터를 요청하여 상기 데이터 인출 요청을 처리하는 단계;
    상기 중간 레벨 캐쉬 또는 상기 주메모리로부터 명령어를 요청하여 상기 명령어 인출 요청을 처리하는 단계;
    상기 명령어 유니트가 명령어를 포어그라운드 스레드로부터 상기 저장 파이프라인으로 디스패치하지 않아 상기 저장 파이프라인이 이용가능해지는 때를 판단하기 위해 상기 저장 파이프라인을 모니터링하는 단계;
    상기 백그라운드 명령어 및 상기 데이터를 상기 저장 제어 유니트로 인도한 다음, 상기 저장 파이프라인이 이용 가능하다면 상기 요청된 데이터를 레벨 1 데이터 캐쉬에 저장하기 전에 상기 백그라운드 명령어를 상기 저장 파이프라인으로 출력하고 상기 백그라운드 명령어의 상기 데이터 인출 요청과 연관된 데이터를 상기복수의 실행 유니트로 출력하는 단계;
    돌아온 명령어를 상기 저장 제어 유니트로 인도한 다음, 상기 요청된 명령어를 상기 레벨 1 명령어 캐쉬에 저장하기 전에, 상기 백그라운드 스레드의 상기 명령어 인출 요청과 연관된 상기 돌아온 명령어를 상기 명령어 유니트로 출력하는 단계
    를 포함하는 데이터 처리 방법.
KR1019970049015A 1996-12-27 1997-09-26 멀티스레드프로세서의명령어및연관된인출요청의백그라운드완료 KR100305310B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/773,572 1996-12-27
US08/773,572 US6088788A (en) 1996-12-27 1996-12-27 Background completion of instruction and associated fetch request in a multithread processor
US8/773,572 1996-12-27

Publications (2)

Publication Number Publication Date
KR19980063489A KR19980063489A (ko) 1998-10-07
KR100305310B1 true KR100305310B1 (ko) 2001-09-28

Family

ID=25098690

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019970049015A KR100305310B1 (ko) 1996-12-27 1997-09-26 멀티스레드프로세서의명령어및연관된인출요청의백그라운드완료

Country Status (3)

Country Link
US (1) US6088788A (ko)
KR (1) KR100305310B1 (ko)
CN (1) CN1109967C (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101253549B1 (ko) 2004-04-07 2013-04-11 퀄컴 인코포레이티드 쓰레드 당 다중의 동시적 파이프라인을 갖는 멀티쓰레드프로세서

Families Citing this family (76)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6697935B1 (en) * 1997-10-23 2004-02-24 International Business Machines Corporation Method and apparatus for selecting thread switch events in a multithreaded processor
US6567839B1 (en) * 1997-10-23 2003-05-20 International Business Machines Corporation Thread switch control in a multithreaded processor system
US6272520B1 (en) * 1997-12-31 2001-08-07 Intel Corporation Method for detecting thread switch events
US6952827B1 (en) * 1998-11-13 2005-10-04 Cray Inc. User program and operating system interface in a multithreaded environment
US20010032307A1 (en) * 1998-12-30 2001-10-18 Joseph Rohlman Micro-instruction queue for a microprocessor instruction pipeline
US6535905B1 (en) 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6542921B1 (en) 1999-07-08 2003-04-01 Intel Corporation Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
AU7099000A (en) * 1999-09-01 2001-03-26 Intel Corporation Branch instruction for processor
US6357016B1 (en) * 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
US6496925B1 (en) 1999-12-09 2002-12-17 Intel Corporation Method and apparatus for processing an event occurrence within a multithreaded processor
US6889319B1 (en) 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US7051329B1 (en) 1999-12-28 2006-05-23 Intel Corporation Method and apparatus for managing resources in a multithreaded processor
US7856633B1 (en) 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US6549985B1 (en) * 2000-03-30 2003-04-15 I P - First, Llc Method and apparatus for resolving additional load misses and page table walks under orthogonal stalls in a single pipeline processor
US6931641B1 (en) 2000-04-04 2005-08-16 International Business Machines Corporation Controller for multiple instruction thread processors
US7320065B2 (en) 2001-04-26 2008-01-15 Eleven Engineering Incorporated Multithread embedded processor with input/output capability
CN100447737C (zh) * 2001-09-27 2008-12-31 中国科学院计算技术研究所 指令流水线中实现访存精确例外的处理方法
US7248585B2 (en) 2001-10-22 2007-07-24 Sun Microsystems, Inc. Method and apparatus for a packet classifier
US20050188177A1 (en) * 2002-05-31 2005-08-25 The University Of Delaware Method and apparatus for real-time multithreading
US7447877B2 (en) * 2002-06-13 2008-11-04 Intel Corporation Method and apparatus for converting memory instructions to prefetch operations during a thread switch window
US8024735B2 (en) * 2002-06-14 2011-09-20 Intel Corporation Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US20040111594A1 (en) * 2002-12-05 2004-06-10 International Business Machines Corporation Multithreading recycle and dispatch mechanism
US20040128476A1 (en) * 2002-12-26 2004-07-01 Robert Nuckolls Scheme to simplify instruction buffer logic supporting multiple strands
US20050210204A1 (en) * 2003-01-27 2005-09-22 Fujitsu Limited Memory control device, data cache control device, central processing device, storage device control method, data cache control method, and cache control method
EP1462934A1 (en) * 2003-03-29 2004-09-29 Deutsche Thomson-Brandt Gmbh Method and apparatus for forwarding of results
JP4837247B2 (ja) * 2003-09-24 2011-12-14 パナソニック株式会社 プロセッサ
US7430737B2 (en) * 2003-12-04 2008-09-30 Sun Microsystems, Inc. Processor and method for supporting compiler directed multithreading management
US8643659B1 (en) 2003-12-31 2014-02-04 3Dlabs Inc., Ltd. Shader with global and instruction caches
US7263599B2 (en) * 2004-02-06 2007-08-28 Infineon Technologies Thread ID in a multithreaded processor
EP1745367B1 (en) * 2004-04-27 2009-07-08 Nxp B.V. Pipelined asynchronous instruction processor circuit
US7178005B1 (en) 2004-06-30 2007-02-13 Sun Microsystems, Inc. Efficient implementation of timers in a multithreaded processor
US7343474B1 (en) 2004-06-30 2008-03-11 Sun Microsystems, Inc. Minimal address state in a fine grain multithreaded 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
US7702887B1 (en) 2004-06-30 2010-04-20 Sun Microsystems, Inc. Performance instrumentation in a fine grain multithreaded multicore processor
US7676655B2 (en) * 2004-06-30 2010-03-09 Sun Microsystems, Inc. Single bit control of threads in a multithreaded multicore processor
US7747771B1 (en) 2004-06-30 2010-06-29 Oracle America, Inc. Register access protocol in a multihreaded multi-core processor
US7373489B1 (en) 2004-06-30 2008-05-13 Sun Microsystems, Inc. Apparatus and method for floating-point exception prediction and recovery
US7383403B1 (en) 2004-06-30 2008-06-03 Sun Microsystems, Inc. Concurrent bypass to instruction buffers in a fine grain multithreaded processor
US8225034B1 (en) 2004-06-30 2012-07-17 Oracle America, Inc. Hybrid instruction buffer
US7426630B1 (en) 2004-06-30 2008-09-16 Sun Microsystems, Inc. Arbitration of window swap operations
US7370243B1 (en) 2004-06-30 2008-05-06 Sun Microsystems, Inc. Precise error handling in a fine grain multithreaded multicore processor
US7330988B2 (en) * 2004-06-30 2008-02-12 Sun Microsystems, Inc. Method and apparatus for power throttling in a multi-thread processor
US7434000B1 (en) 2004-06-30 2008-10-07 Sun Microsystems, Inc. Handling duplicate cache misses in a multithreaded/multi-core processor
US7523330B2 (en) * 2004-06-30 2009-04-21 Sun Microsystems, Inc. Thread-based clock enabling in a multi-threaded processor
US7890734B2 (en) 2004-06-30 2011-02-15 Open Computing Trust I & II Mechanism for selecting instructions for execution 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
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
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
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
US7185178B1 (en) * 2004-06-30 2007-02-27 Sun Microsystems, Inc. Fetch speculation in a multithreaded processor
US7861063B1 (en) 2004-06-30 2010-12-28 Oracle America, Inc. Delay slot handling in a 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
US7774393B1 (en) 2004-06-30 2010-08-10 Oracle America, Inc. Apparatus and method for integer to floating-point format conversion
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
US20060015855A1 (en) * 2004-07-13 2006-01-19 Kumamoto Danny N Systems and methods for replacing NOP instructions in a first program with instructions of a second program
US8037250B1 (en) 2004-12-09 2011-10-11 Oracle America, Inc. Arbitrating cache misses in a multithreaded/multi-core processor
US7603543B2 (en) * 2005-02-11 2009-10-13 International Business Machines Corporation Method, apparatus and program product for enhancing performance of an in-order processor with long stalls
US7752354B2 (en) * 2005-02-11 2010-07-06 International Business Machines Corporation Auxiliary mechanism to manage instruction restart and restart coming in a lookahead processor
US7380062B2 (en) * 2005-02-11 2008-05-27 International Business Machines Corporation Mechanism in a multi-threaded microprocessor to maintain best case demand instruction redispatch
EP1883045A4 (en) * 2005-05-20 2016-10-05 Sony Corp SIGNAL PROCESSOR
US7398371B2 (en) * 2005-06-23 2008-07-08 Qualcomm Incorporated Shared translation look-aside buffer and method
US20070240164A1 (en) * 2006-03-15 2007-10-11 Microsoft Corporation Command line pipelining
JP2008123045A (ja) * 2006-11-08 2008-05-29 Matsushita Electric Ind Co Ltd プロセッサ
US8347068B2 (en) * 2007-04-04 2013-01-01 International Business Machines Corporation Multi-mode register rename mechanism that augments logical registers by switching a physical register from the register rename buffer when switching between in-order and out-of-order instruction processing in a simultaneous multi-threaded microprocessor
US7814243B2 (en) * 2007-06-01 2010-10-12 Sonics, Inc. Shared storage for multi-threaded ordered queues in an interconnect
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
CN101782847B (zh) * 2009-01-20 2013-04-24 瑞昱半导体股份有限公司 数据储存方法及装置
CN102859514B (zh) * 2010-04-30 2016-04-06 惠普发展公司,有限责任合伙企业 处理器之间的管理数据传输
JP2012033001A (ja) 2010-07-30 2012-02-16 Toshiba Corp 情報処理装置および情報処理方法
US8972995B2 (en) 2010-08-06 2015-03-03 Sonics, Inc. Apparatus and methods to concurrently perform per-thread as well as per-tag memory access scheduling within a thread and across two or more threads
CN102750132B (zh) * 2012-06-13 2015-02-11 深圳中微电科技有限公司 多线程虚拟流水线处理器的线程控制和调用方法及其处理器
US10706101B2 (en) 2016-04-14 2020-07-07 Advanced Micro Devices, Inc. Bucketized hash tables with remap entries
CN113626348A (zh) * 2021-07-22 2021-11-09 支付宝(杭州)信息技术有限公司 业务执行方法、装置和电子设备

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01125638A (ja) * 1987-11-11 1989-05-18 Matsushita Electric Ind Co Ltd キャッシュメモリ装置
US5148536A (en) * 1988-07-25 1992-09-15 Digital Equipment Corporation Pipeline having an integral cache which processes cache misses and loads data in parallel
GB2234613B (en) * 1989-08-03 1993-07-07 Sun Microsystems Inc Method and apparatus for switching context of state elements in a microprocessor
US5471593A (en) * 1989-12-11 1995-11-28 Branigin; Michael H. Computer processor with an efficient means of executing many instructions simultaneously
US5197138A (en) * 1989-12-26 1993-03-23 Digital Equipment Corporation Reporting delayed coprocessor exceptions to code threads having caused the exceptions by saving and restoring exception state during code thread switching
JPH04283849A (ja) * 1991-03-13 1992-10-08 Toshiba Corp マルチプロセッサシステム
CA2050828A1 (en) * 1991-05-28 1992-11-29 Herbert H.J. Hum Register-cache architecture and super-actor machine
US5430850A (en) * 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
JP2904624B2 (ja) * 1991-10-14 1999-06-14 株式会社東芝 並列演算処理装置
JPH05151064A (ja) * 1991-11-29 1993-06-18 Yokogawa Electric Corp 密結合マルチプロセツサシステム
US5404469A (en) * 1992-02-25 1995-04-04 Industrial Technology Research Institute Multi-threaded microprocessor architecture utilizing static interleaving
US5287508A (en) * 1992-04-07 1994-02-15 Sun Microsystems, Inc. Method and apparatus for efficient scheduling in a multiprocessor system
US5553305A (en) * 1992-04-14 1996-09-03 International Business Machines Corporation System for synchronizing execution by a processing element of threads within a process using a state indicator
JPH05298097A (ja) * 1992-04-20 1993-11-12 Mitsubishi Electric Corp 情報処理装置
JP3309425B2 (ja) * 1992-05-22 2002-07-29 松下電器産業株式会社 キャッシュ制御装置
JPH0659978A (ja) * 1992-08-11 1994-03-04 Nec Corp 情報処理装置
WO1994027216A1 (en) * 1993-05-14 1994-11-24 Massachusetts Institute Of Technology Multiprocessor coupling system with integrated compile and run time scheduling for parallelism
JPH096633A (ja) * 1995-06-07 1997-01-10 Internatl Business Mach Corp <Ibm> データ処理システムに於ける高性能多重論理経路の動作用の方法とシステム

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101253549B1 (ko) 2004-04-07 2013-04-11 퀄컴 인코포레이티드 쓰레드 당 다중의 동시적 파이프라인을 갖는 멀티쓰레드프로세서
US8762688B2 (en) 2004-04-07 2014-06-24 Qualcomm Incorporated Multithreaded processor with multiple concurrent pipelines per thread
US8892849B2 (en) 2004-04-07 2014-11-18 Qualcomm Incorporated Multithreaded processor with multiple concurrent pipelines per thread
US8918627B2 (en) 2004-04-07 2014-12-23 Qualcomm Incorporated Multithreaded processor with multiple concurrent pipelines per thread
US8959315B2 (en) 2004-04-07 2015-02-17 Qualcomm Incorporated Multithreaded processor with multiple concurrent pipelines per thread

Also Published As

Publication number Publication date
KR19980063489A (ko) 1998-10-07
US6088788A (en) 2000-07-11
CN1188932A (zh) 1998-07-29
CN1109967C (zh) 2003-05-28

Similar Documents

Publication Publication Date Title
KR100305310B1 (ko) 멀티스레드프로세서의명령어및연관된인출요청의백그라운드완료
US5511175A (en) Method an apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US5613083A (en) Translation lookaside buffer that is non-blocking in response to a miss for use within a microprocessor capable of processing speculative instructions
US6061710A (en) Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
JP3096451B2 (ja) データを転送する方法およびプロセッサ
KR100431168B1 (ko) 단일 클럭 사이클 내에 불연속 명령을 페치하기 위한 방법 및 시스템
US5471598A (en) Data dependency detection and handling in a microprocessor with write buffer
US5584009A (en) System and method of retiring store data from a write buffer
US8516222B1 (en) Virtual architectures in a parallel processing environment
US6295600B1 (en) Thread switch on blocked load or store using instruction thread field
KR100407013B1 (ko) 1차 및 2차 송출큐를 갖는 마이크로프로세서
US6279105B1 (en) Pipelined two-cycle branch target address cache
US6189089B1 (en) Apparatus and method for retiring instructions in excess of the number of accessible write ports
US20020087849A1 (en) Full multiprocessor speculation mechanism in a symmetric multiprocessor (smp) System
Leibholz et al. The Alpha 21264: A 500 MHz out-of-order execution microprocessor
KR100407014B1 (ko) 명령어 히스토리 정보를 갖는 기본 블럭 캐쉬마이크로프로세서
JP3678443B2 (ja) スーパーパイプライン式スーパースカラーマイクロプロセッサ用の書き込みバッファ
JPH06103167A (ja) 多重プロセッサ・システムにおけるインヴァリデート及び戻りデータのための組合せキュー
JPH0675747A (ja) 浮動小数点装置を有する高性能多重プロセッサ
JPH0695964A (ja) 多重プロセッサ・システム用のエラー遷移モード
JPH0659887A (ja) 高性能プロセッサ用の分岐予測
JPH06119243A (ja) 内部プロセッサレジスターコマンドのi/o空間アドレスへの変換
WO2007027671A2 (en) Scheduling mechanism of a hierarchical processor including multiple parallel clusters
US5596735A (en) Circuit and method for addressing segment descriptor tables
KR20020097149A (ko) 종속성 체인을 발행 또는 재발행할 수 있는 스케줄러

Legal Events

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

Payment date: 20100621

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee