KR100734529B1 - 밀접하게 결합된 다중 프로세서를 위한 고속의 다중 스레딩 - Google Patents

밀접하게 결합된 다중 프로세서를 위한 고속의 다중 스레딩 Download PDF

Info

Publication number
KR100734529B1
KR100734529B1 KR1020027005631A KR20027005631A KR100734529B1 KR 100734529 B1 KR100734529 B1 KR 100734529B1 KR 1020027005631 A KR1020027005631 A KR 1020027005631A KR 20027005631 A KR20027005631 A KR 20027005631A KR 100734529 B1 KR100734529 B1 KR 100734529B1
Authority
KR
South Korea
Prior art keywords
processor
instruction
thread
command
response
Prior art date
Application number
KR1020027005631A
Other languages
English (en)
Other versions
KR20020087928A (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 KR20020087928A publication Critical patent/KR20020087928A/ko
Application granted granted Critical
Publication of KR100734529B1 publication Critical patent/KR100734529B1/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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • 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
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • G06F15/17368Indirect interconnection networks non hierarchical topologies
    • G06F15/17381Two dimensional, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

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

Abstract

대칭적인 다중 처리 시스템의 형태로 밀접하게 결합된 복수의 프로세서를 포함하는 프로세서 아키텍쳐가 제공된다. 특별한 결합 메커니즘에 의해, 복수의 스레드를 병행하여 매우 효율적으로 추론적으로 실행할 수 있다. 일반적으로, 운영 체제는 다중 프로세서 시스템에서 이용가능한 프로세서 간의 다양한 실행 스레드의 스케쥴링을 담당한다. 병행 다중 스레딩의 하나의 문제는, 운영 체제에 의한 실행을 위한 스레드의 스케줄링에 수반되는 오버헤드로 인해, 코드의 보다 짧은 세그먼트가 병행의 다중 스레딩을 효율적으로 이용할 수 없다는 것이다. 그 결과, 병행의 다중 스레딩으로부터 가능한 성능 이득을 달성할 수 없다. 운영 체제의 고유의 오버헤드 및 개입없이 복수의 프로세서 상에서의 복수의 스레드의 스케줄링 및 추론적인 실행을 가능하게 하는 대칭 다중 처리 시스템 형태의 부가 회로가 포함된다. 유리하게는, 병행 다중 스레드 실행이 보다 효율적으로 되고, 성능이 개선된다.

Description

밀접하게 결합된 다중 프로세서를 위한 고속의 다중 스레딩{FAST MULTITHREADING FOR CLOSELY COUPLED MULTIPROCESSORS}
본 발명은 마이크로프로세서 분야에 관한 것으로서, 특히 다중 프로세서에 있어서의 다중 스레딩(multithreading)에 관한 것이다.
복수의 처리 유닛을 이용하는 컴퓨터 시스템은, 현재의 단일 프로세서 기반 시스템을 능가하는 우수한 성능에 대해 경제적으로 적응할 수 있는 전망을 갖는다. 다중 처리 환경에서는, 단일 프로세서에 애플리케이션에 대한 모든 처리를 집중시키는 대신, 개별적인 프로세서에 의해 취급될 수 있는 그룹 또는 "스레드"로 태스크가 분할된다. 이에 의해, 전체 처리 부하가 몇 개의 프로세서에 분배되며, 분배된 태스크는 병행하여 동시에 실행될 수 있다. 운영 체제 소프트웨어는 프로그램 코드의 다양한 부분을 개별적으로 실행가능한 스레드로 분할하고, 전형적으로는 각 스레드에 우선 순위 레벨(priority level)을 할당한다.
슈퍼스칼라 마이크로프로세서는, 클럭 사이클당 복수의 명령을 실행하고, 설계에 부합되는 가능한 가장 짧은 클럭 사이클을 선택함으로써, 고성능을 달성한다. 본원에서 이용되는 "클럭 사이클"이라는 용어는, 마이크로프로세서 내의 명령 처리 파이프라인의 다양한 스테이지에 일치하는 시간 간격을 말한다. 저장 디바이스(예를 들어, 레지스터 및 어레이)는 클럭 사이클에 따라 자신의 값을 포착한다. 예를 들어, 저장 디바이스는 클럭 사이클을 정의하는 클럭 신호의 상승 에지 또는 하강 에지에 따라 값을 포착할 수 있다. 이후, 저장 디바이스는 그 값을, 각각 클럭 신호의 이후의 상승 에지 또는 하강 에지까지 저장한다. 본원에서 이용되는 "명령 처리 파이프라인"이라는 용어는, 파이프라인 처리 방식으로 명령을 처리하는 데에 이용되는 논리 회로를 말한다. 파이프라인은 명령 처리의 일부가 행해지는 어떠한 수의 스테이지로 분할될 수 있기는 하지만, 명령 처리는 일반적으로 명령을 페치하는 단계, 명령을 디코드하는 단계, 명령을 실행하는 단계 및 명령에 의해 식별되는 목적지에 실행 결과를 저장하는 단계를 포함한다.
마이크로프로세서들의 중요한 특징은, 이들이 병행성(parallelism)을 이용할 수 있는 정도이다. 병행성은 직렬이 아닌 병렬식으로의 명령의 실행이다. 슈퍼스칼라 프로세서는 특정 명령을 병렬로 실행함으로써 세립(fine grained) 명령 레벨 병행성을 식별 및 이용할 수 있다. 하지만, 이러한 타입의 병행성은 명령들 간의 데이터 의존성에 의해 제한된다. 또한, 상기 설명한 바와 같이, 1개 이상의 프로세서를 포함하는 컴퓨터 시스템은 컴퓨터 프로세스에 의해 주어지는 작업 부하를 분할함으로써 성능을 개선할 수 있다. 보다 높은 레벨의 병행성을 식별함으로써, 다중 프로세서 컴퓨터 시스템은 코드의 보다 큰 세그먼트 또는 스레드를 별개의 프로세서 상에서 병행하여 실행할 수 있다. 마이크로프로세서 및 운영 체제는 병행의 다중 스레드 실행을 따르는 코드의 세그먼트를 식별할 수 없기 때문에, 이들은 애플리케이션 코드 자체에 의해 식별된다. 일반적으로, 운영 체제는 다중 프로세서 시스템에 있어서의 이용가능한 프로세서들 간의 다양한 실행 스레드를 스케쥴링하는 것을 담당한다.
병행 다중 스레딩의 한 문제는, 운영 체제에 의한 실행을 위한 스레드의 스케쥴링에 수반되는 오버헤드로 인해, 코드의 보다 짧은 세그먼트가 병행의 다중 스레딩을 효율적으로 이용할 수 없는 것이다. 결과적으로, 병행의 다중 스레딩으로부터 가능한 성능 이득을 달성할 수 없다.
상기 설명한 문제는 본원에서 설명되는 마이크로프로세서 및 방법에 따라 대부분 해결된다. 운영 체제의 고유의 오버헤드 및 개입없이 복수의 프로세서 상에서의 복수의 스레드의 스케줄링 및 추론적(speculative)인 실행을 가능하게 하는 대칭 다중 처리 시스템 형태의 부가 회로가 포함된다. 유리하게는, 병행 다중 스레드 실행이 보다 효율적으로 되고, 성능이 개선된다.
대체로, 다중 프로세서 컴퓨터는 복수의 프로세서를 포함하는 것으로 여겨지는바, 상기 프로세서는 레지스터 파일, 재배열 버퍼 및 추론적인 다중 스레드 실행을 지원하는 회로를 포함한다. 또한, 다중 프로세서 컴퓨터는 1개 또는 그 이상의 재배열 버퍼 태그 변환 버퍼 및 스레드 제어 디바이스를 포함한다. 스레드 제어 디바이스는 프로세서 간에서 명령을 저장하고 전송하도록 구성된다. 스레드 제어 디바이스 및 명령은 병행의 추론적인 다중 스레드 실행을 지원한다.
또한, 제 2 프로세서 상에서의 제 2 스레드의 실행을 위해 스레드 셋업을 행하는 단계를 포함하는 방법이 개시되는바, 상기 셋업은 제 1 프로세서가 셋업 명령을 제 2 프로세서에 전달하는 것을 포함하고, 여기에서 상기 셋업 명령은 제 2 프로세서 상에 추론적으로 실행된다. 제 1 프로세서로부터 제 2 프로세서에 개시 명령(startup instruction)이 전달되어, 제 2 프로세서 상에서의 제 2 스레드의 추론적인 실행을 시작한다. 제 2 프로세서는, 개시 명령의 수신에 응답하여, 제 1 프로세서 상에서의 스레드의 실행과 병행하여 제 2 스레드의 추론적인 실행을 개시한다. 제 2 프로세서에서의 종료 명령의 퇴거에 응답하여, 제 2 스레드의 실행이 종료된다. 마지막으로, 제 2 프로세서가 검색 결과 명령을 수신하는 것에 응답하여, 제 2 스레드의 실행 결과가 제 1 프로세서에 전달되는바, 여기서 검색 결과 명령은 제 2 프로세서에 의해 추론적으로 실행된다.
본 발명의 다른 목적 및 장점은 첨부 도면을 참조하여 설명되는 하기의 상세한 설명을 읽음으로써 명확해질 것이다.
도 1은 마이크로프로세서의 일 실시예의 블록도이다.
도 2는 다중 프로세서 컴퓨터의 일 실시예의 블록도이다.
도 3A는 2개의 마이크로프로세서 및 1개의 스레드 제어 디바이스를 나타내는 도면이다.
도 3B는 스레드의 셋업, 실행 및 완료를 예시하는 흐름도이다.
도 4는 2개의 마이크로프로세서 및 1개의 스레드 제어 디바이스를 나타내는 도면이다.
도 5는 2개 명령 스레드 및 동기 명령의 이용을 나타내는 도면이다.
도 6은 동기 논리의 동기적 구현을 도시한다.
도 7은 동기 논리의 비동기적 구현을 도시한다.
도 8은 동기 논리의 비동기적 구현을 나타내는 명령 시퀀스를 나타내는 도면이다.
도 9는 프로세서간 통신 유닛(interprocessor communication unit) 및 스레드 제어 디바이스의 일 실시예를 나타내는 도면이다.
도 10은 도 2에 나타낸 다중 프로세서 컴퓨터를 포함하는 컴퓨터 시스템의 일 실시예를 나타내는 블록도이다.
본 발명은 많은 변형 및 대안적인 형태를 가질 수 있지만, 도면에는 특정한 실시예가 도시되어 있으며, 본원에서는 이에 대해 상세히 설명한다. 하지만, 이해될 사항으로서, 이러한 도면 및 상세한 설명은 본 발명을 개시된 특정 형태로 한정하지 않으며, 본 발명은 첨부된 청구항에 의해 규정되는 본 발명의 정신 및 범위 내의 모든 변형, 등가 및 대안을 망라한다.
프로세서 개관
도 1은 프로세서(10)의 일 실시예의 블록도를 나타낸다. 그 외의 실시예도 가능하며 예기된다. 도 1에 나타낸 바와 같이, 프로세서(10)는 프리페치/프리디코드 유닛(12), 분기 예측 유닛(14), 명령 캐시(16), 명령 정렬 유닛(18), 복수의 디코드 유닛(20A-20C), 복수의 예약 스테이션(reservation station)(22A-22C), 복수의 기능 유닛(24A-24C), 적재/저장 유닛(load/store unit)(26), 데이터 캐시(28), 레지스터 파일(30), 재배열 버퍼(32), MROM 유닛(34), 프로세서간 통신 유닛(300) 및 버스 인터페이스 유닛(37)을 포함한다. 여기에서, 글자가 뒤에 오는 특정한 참조 부호를 이용하여 참조되는 요소들은 그 참조 부호 만을 이용하여 집합적으로 참조된다. 예를 들어, 디코드 유닛(20A-20C)은 디코드 유닛(20)으로서 집합적으로 참조된다.
프리페치/프리디코드 유닛(12)은 버스 인터페이스 유닛(37)으로부터 명령을 수신하도록 결합되고, 또한 명령 캐시(16) 및 분기 예측 유닛(14)에 결합된다. 유사하게, 분기 예측 유닛(14)은 명령 캐시(16)에 결합된다. 또한, 분기 예측 유닛(14)은 디코드 유닛(20) 및 기능 유닛(24)에 결합된다. 명령 캐시(16)는 또한 MROM 유닛(34) 및 명령 정렬 유닛(18)에 결합된다. 명령 정렬 유닛(18)은 또한 디코드 유닛(20)에 결합된다. 각 디코드 유닛(20A-20C)은 적재/저장 유닛(26) 및 각각의 예약 스테이션(22A-22C)에 결합된다. 예약 스테이션(22A-22C)은 또한 각각의 기능 유닛(24A-24C)에 결합된다. 또한, 디코드 유닛(20) 및 예약 스테이션(22)은 레지스터 파일(30) 및 재배열 버퍼(32)에 결합된다. 기능 유닛(24)은 또한 적재/저장 유닛(26), 레지스터 파일(30) 및 재배열 버퍼(32)에도 결합된다. 데이터 캐시(28)는 적재/저장 유닛(26) 및 버스 인터페이스 유닛(37)에 결합된다. 버스 인터페이스 유닛(37)은 또한 L2 캐시에 대한 L2 인터페이스 및 버스에 결합된다. 프로세서간 통신 유닛(300)은 재배열 버퍼(32) 및 결과 버스(38)에 결합된다. 마지막으로, MROM 유닛(34)은 디코드 유닛(20)에 결합된다.
명령 캐시(16)는 명령을 저장하기 위해 제공되는 고속의 캐시 메모리이다. 명령은 명령 캐시(16)으로부터 페치되어 디코드 유닛(20)에 디스패치된다. 일 실시예에서, 명령 캐시(16)는 64 바이트 라인(1 바이트는 8개의 이진 비트를 포함한다)을 갖는 2 방향의 세트 어소시에이티브(2 way set associative) 구조로 최대 64 킬로바이트의 명령을 저장하도록 구성된다. 대안적으로는, 다른 어떠한 원하는 구성 및 크기가 이용될 수 있다. 예를 들어, 주목할 사항으로서, 명령 캐시(16)는 풀리 어소시에이티브(fully associative), 세트 어소시에이티브, 또는 직접 맵핑된 구성으로서 구현될 수 있다.
명령은 프리페치/프리디코드 유닛(12)에 의해 명령 캐시(16)에 저장된다. 명령은, 프리페치 방식에 따라 명령 캐시(16)로부터 그 요구 이전에 프리페치될 수 있다. 다양한 프리페치 방식이 프리페치/프리디코드 유닛(12)에 의해 이용될 수 있다. 프리페치/프리디코드 유닛(12)이 명령을 명령 캐시(16)에 전달할 때, 이 프리페치/프리디코드 유닛(12)은 명령의 각 바이트에 대한 3개의 프리디코드 비트, 즉 개시 비트, 종료 비트 및 기능 비트를 발생시킨다. 프리디코드 비트는 각 명령의 경계를 나타내는 태그를 형성한다. 프리디코드 태그는 또한, 하기에서 상세히 설명되는 바와 같이, 소정의 명령이 디코드 유닛(20)에 의해 직접 디코드될 수 있는 지의 여부, 또는 그 명령이 MROM 유닛(34)에 의해 제어되는 마이크로코드 절차를 호출하여 실행되는 지의 여부 등의 부가 정보를 전달할 수 있다. 또한, 프리페치/프리디코드 유닛(12)은 분기 명령을 검출하여, 그 분기 명령에 대응하는 분기 예측 정보를 분기 예측 유닛(14)에 저장하도록 구성될 수 있다. 다른 실시예들은 적절한 모든 프리디코드 방식을 이용할 수 있다.
다음으로, 가변 바이트 길이의 명령 세트를 이용하는 프로세서(10)의 일 실시예에 대한 프리디코드 태그의 하나의 엔코딩에 대해 설명한다. 가변 바이트 길이의 명령 세트는, 서로 다른 명령이 서로 다른 수의 바이트를 점유하는 명령 세트이다. 프로세서(10)의 일 실시예에 의해 이용되는 예시적인 가변 바이트 길이의 명령 세트는 x86 명령 세트이다.
예시적인 엔코딩에 있어서, 소정의 바이트가 명령의 제 1 바이트인 경우, 그 바이트에 대한 개시 비트가 세트된다. 바이트가 명령의 마지막 바이트인 경우에는, 그 바이트에 대한 종료 비트가 세트된다. 디코드 유닛(20)에 의해 직접 디코드될 수 있는 명령은 "고속 경로" 명령이라 불린다. 일 실시예에 따르면, 나머지의 x86 명령은 MROM 명령이라 불린다. 고속 경로 명령에 있어서, 기능 비트는 명령에 포함되는 각 접두 바이트(prefix byte)에 대해서는 세트되고, 다른 바이트에 대해서는 클리어된다. 대안적으로, MROM 명령에 대해, 기능 비트는 각 접두 바이트에 대해서는 클리어되고, 다른 바이트에 대해서는 세트된다. 명령의 타입은 종료 바이트에 대응하는 기능 비트를 검사함으로써 결정될 수 있다. 그 기능 비트가 클리어되는 경우, 그 명령은 고속 경로 명령이다. 반대로, 그 기능 비트가 세트되는 경우, 그 명령은 MROM 명령이다. 이에 이해, 명령의 조작 코드(opcode)가, 명령 내의 제 1 클리어 기능 비트에 관련된 바이트로서 디코드 유닛(20)에 의해 직접 디코드될 수 있는 명령 내에 위치될 수 있다. 예를 들어, 2개의 접두 바이트, 즉 Mod R/M 바이트 및 즉시 바이트를 포함하는 고속 경로 명령은 다음과 같은 개시 비트, 종료 비트 및 기능 비트를 갖는다.
개시 비트 10000
종료 비트 00001
기능 비트 11000
MROM 명령은 디코드 유닛(20)에 의한 디코드에 대해서는 너무 복잡한 것으로 결정되는 명령이다. MROM 명령은 MROM 유닛(34)을 호출함으로써 실행된다. 보다 구체적으로, MROM 명령을 만나면, MROM 유닛(34)은 그 명령을 정의된 고속 경로 명령의 부분 집합으로 분석 및 발행(parse and issue)하여, 원하는 동작을 달성한다. MROM 유닛(34)은 고속 경로 명령의 부분 집합을 디코드 유닛(20)에 디스패치한다.
프로세서(10)는 분기 예측을 이용하여 조건 분기 명령에 이후의 명령을 추론적으로 페치한다. 분기 예측 유닛(14)은 분기 예측 동작을 행하기 위해 포함된다. 일 실시예에서, 분기 예측 유닛(14)은, 명령 캐시(16)에 있어서의 캐시 라인의 16 바이트 부분당 최대 2개의 분기 목표 어드레스 및 대응하는 테이큰/낫테이큰(taken/not taken) 예측을 캐시하는 분기 목표 버퍼를 이용한다. 예를 들어, 분기 목표 버퍼는 2048개의 엔트리 또는 다른 어떠한 적절한 수의 엔트리를 포함할 수 있다. 프리페치/프리디코드 유닛(12)은, 특정의 라인이 프리디코드 될 때 최초의 분기 목표를 결정한다. 이후, 캐시 라인 내의 명령의 실행에 의해, 캐시 라인에 대응하는 분기 목표에 대한 갱신이 일어날 수 있다. 명령 캐시(16)는 명령 어드레스가 페치되고 있다는 표시를 제공하며, 이에 따라 분기 예측 유닛(14)은 분기 예측을 형성하기 위해 어떤 분기 목표 어드레스를 선택할 것인 지를 결정할 수 있게 된다. 디코드 유닛(20) 및 기능 유닛(24)은 분기 예측 유닛(14)에 갱신 정보를 제공한다. 디코드 유닛(20)은 분기 예측 유닛(14)에 예측되지 않았던 분기 명령을 검출한다. 기능 유닛(24)은 분기 명령을 실행하여, 예측된 분기 방향이 부정확한 지의 여부를 결정한다. 분기 방향은, 이후의 명령들이 분기 명령의 목표 어드레스로부터 페치되는 "테이큰"이 될 수 있다. 반대로, 분기 방향은, 이후의 명령들이 분기 명령에 연속하는 메모리 위치로부터 페치되는 "낫테이큰"이 될 수 있다. 오예측된 분기 명령이 검출되면, 그 오예측된 분기 명령 이후의 명령은 프로세서(10)의 다양한 유닛으로부터 폐기된다. 대안적인 구성에서, 분기 예측 유닛(14)은 디코드 유닛(20) 및 기능 유닛(24) 대신 재배열 버퍼(32)에 결합되어, 이 재배열 버퍼(32)로부터 분기 오예측 정보를 수신할 수 있다. 적합한 많은 분기 알고리즘이 분기 예측 유닛(14)에 의해 이용될 수 있다.
명령 캐시(16)로부터 페치된 명령은 명령 정렬 유닛(18)에 전달된다. 명령이 명령 캐시(16)로부터 페치될 때에는, 대응하는 프리디코드 데이타가 주사(scan)되어, 페치되는 명령에 관해 명령 정렬 유닛(18)(및 MROM 유닛(34))에 정보를 제공한다. 명령 정렬 유닛(18)은 주사 데이터를 이용하여 각각의 디코드 유닛(20)에 대해 명령을 정렬한다. 일 실시예에서, 명령 정렬 유닛(18)은 8개의 명령 바이트의 3개의 세트로부터의 명령을 디코드 유닛(20)에 대해 정렬한다. 디코드 유닛(20A)은, (프로그램 순서에 있어서) 디코드 유닛(20B 및 20C)에 의해 동시에 수신되는 명령들 이전의 명령을 수신한다. 유사하게, 디코드 유닛(20B)은, 프로그램 순서에 있어서 디코드 유닛(20C)에 의해 동시에 수신되는 명령 이전의 명령을 수신한다.
디코드 유닛(20)은 명령 정렬 유닛(18)으로부터 수신되는 명령을 디코드하도록 구성된다. 레지스터 오퍼랜드 정보가 검출되어, 레지스터 파일(30) 및 재배열 버퍼(32)에 전송된다. 또한, 명령이 1개 또는 그 이상의 메모리 동작이 행해질 것을 요구하는 경우, 디코드 유닛(20)은 메모리 동작을 적재/저장 유닛(26)에 디스패치한다. 각 명령은 기능 유닛(24)에 대한 제어값의 세트로 디코드되고, 이러한 제어값은 오퍼랜드 어드레스 정보 및 그 명령에 포함될 수 있는 변위 또는 즉시 데이터와 함께 예약 스테이션(22)에 디스패치된다. 일 특정 실시예에서, 각 명령은 기능 유닛(24A-24C)에 의해 개별적으로 실행될 수 있는 최대 2개의 동작으로 디코드된다.
프로세서(10)는 고장 실행을 지원하며, 이에 따라 재배열 버퍼(32)를 이용하여 레지스터 판독 및 쓰기 동작에 대한 최초의 프로그램 시퀀스의 트랙을 유지하고, 레지스터 재명명(register renaming)을 실현하고, 추론적 명령 실행 및 분기 오예측 복구를 가능하게 하고, 정밀한(precise) 예외를 촉진시킨다. 재배열 버퍼(32) 내의 임시 저장 위치는, 레지스터의 갱신을 포함하여 추론적인 레지스터 상태를 저장하는 명령의 디코드 시에 예약된다. 분기 예측이 부정확한 경우, 오예측된 경로에 따른 추론적으로 실행된 명령의 결과는 레지스터 파일(30)에 기록되기 전에 무효화될 수 있다. 유사하게, 특정 명령이 예외를 야기시키는 경우, 그 특정 명령 이후의 명령은 폐기될 수 있다. 이러한 방식으로, 예외는 "정밀"하다(즉, 예외를 일으키는 특정 명령 이후의 명령들은 그 예외 이전에 완료되지 않는다). 주목할 사항으로서, 어느 특정 명령이 프로그램 순서에 있어서 이 특정 명령을 앞서는 명령 이전에 실행되는 경우, 이 특정 명령은 추론적으로 실행된다. 앞선 명령은 분기 명령 또는 예외 야기 명령인바, 이러한 경우 추론적 결과는 재배열 버퍼(32)에 의해 폐기될 수 있다.
디코드 유닛(20)의 출력에 제공되는 명령 제어값 및 즉시 또는 변위 데이터는 각각의 예약 스테이션(22)에 직접 전송된다. 일 실시예에서, 각 예약 스테이션(22)은, 대응하는 기능 유닛으로의 발행을 기다리는 최대 5개의 계류(pending) 명령에 관한 명령 정보(즉, 명령 제어값, 오퍼랜드값, 오퍼랜드 태그 그리고/또는 즉시 데이터)를 홀딩할 수 있다. 주목할 사항으로서, 도 1의 실시예에 있어서, 각 예약 스테이션(22)은 전용의 기능 유닛(24)에 관련된다. 따라서, 예약 스테이션(22) 및 기능 유닛(24)에 의해 3개의 전용 "발행 위치"가 형성된다. 다시 말해, 발행 위치 0은 예약 스테이션(22A) 및 기능 유닛(24A)에 의해 형성된다. 정렬되어 예약 스테이션(22A)에 디스패치되는 명령은 기능 유닛(24A)에 의해 실행된다. 유사하게, 발행 위치 1은 예약 스테이션(22B) 및 기능 유닛(24B)에 의해 형성되고, 발행 위치 2는 예약 스테이션(22C) 및 기능 유닛(24C)에 의해 형성된다.
특정 명령의 디코드 시, 요구되는 오퍼랜드가 레지스터 위치인 경우, 레지스터 어드레스 정보는 재배열 버퍼(32) 및 레지스터 파일(30)에 동시에 전송된다. 일 실시예에서, 재배열 버퍼(32)는 디코드 유닛으로부터 오퍼랜드 요구를 수신하는 미정 파일(future file)을 포함한다. 당업자라면 x86 레지스터 파일이 8개의 32 비트 리얼 레지스터(real register)(즉, 전형적으로 EAX, EBX, ECX, EDX, EBP, ESI, EDI 및 ESP로 불린다)를 포함함을 인식할 것이다. x86 프로세서 아키텍쳐를 이용하는 프로세서(10)의 실시예에서, 레지스터 파일(30)은 32 비트 리얼 레지스터 각각에 대해 저장 위치를 포함한다. MROM 유닛(34)에 의해 이용되는 부가적인 저장 위치가 레지스터 파일(30) 내에 포함될 수 있다. 재배열 버퍼(32)는, 이러한 레지스터의 콘텐츠(content)를 변경하여 고장 실행을 가능하게 하는 결과에 대한 임시 저장 위치를 포함한다. 재배열 버퍼(32)의 임시 저장 위치는, 디코드 시에 리얼 레지스터중 하나의 콘텐츠를 변경하는 것으로 결정되는 각 명령에 대해 예약된다. 따라서, 특정 프로그램을 실행하는 동안의 다양한 시점에서, 재배열 버퍼(32)는 소정의 레지스터의 추론적으로 실행되는 콘텐츠를 포함하는 1개 또는 그 이상의 위치를 가질 수 있다. 소정의 명령의 디코드에 이어서, 재배열 버퍼(32)가 소정의 명령에 있어서의 오퍼랜드로서 이용되는 레지스터에 할당되는 이전 위치 또는 위치들을 갖는 것으로 결정되는 경우, 재배열 버퍼(32)는 대응하는 예약 스테이션에, 1) 가장 최근에 할당된 위치의 값, 또는 2) 이전 명령을 궁극적으로 실행하는 기능 유닛에 의해 상기 값이 아직 생성되지 않았다면, 가장 최근에 할당된 위치에 대한 태그를 전송한다. 재배열 버퍼(32)가 소정의 레지스터에 대해 예약된 위치를 갖는 경우, 오퍼랜드값(또는 재배열 버퍼 태그)은, 레지스터 파일(30)로부터가 아니라, 재배열 버퍼(32)로부터 제공된다. 재배열 버퍼(32)에 요구되는 레지스터에 대해 예약된 어떠한 위치도 없는 경우, 그 값은 레지스터 파일(30)로부터 직접 취해진다. 오퍼랜드가 메모리 위치에 대응하는 경우, 오퍼랜드값은 적재/저장 유닛(26)을 통해 예약 스테이션에 제공된다.
일 특정 실시예에서, 재배열 버퍼(32)는 동시에 디코드되는 명령을 하나의 유닛으로서 저장 및 조작하도록 구성된다. 본원에서는 이러한 구성을 "라인 지향(line-oriented)"이라 한다. 몇개의 명령을 함께 조작함으로써, 재배열 버퍼(32) 내에서 이용되는 하드웨어가 단순해질 수 있다. 예를 들어, 본 실시예에 포함되는 라인 지향 재배열 버퍼는, 디코드 유닛(20)에 의해 1개 또는 그 이상의 명령이 발행될 때 마다 3개(각 디코드 유닛(20)으로부터 1개)의 명령에 관련된 명령 정보에 대해 충분한 저장소(storage)를 할당한다. 종래의 재배열 버퍼에서는, 실제로 디스패치되는 명령의 수에 따라 가변량의 저장소가 할당된다. 가변량의 저장소를 할당하기 위해서는, 비교적 많은 수의 논리 게이트가 필요하다. 동시에 디코드된 각 명령이 실행되면, 그 명령의 결과는 레지스터 파일(30)에 동시에 저장된다. 이후, 그 저장소는 동시에 디코드되는 명령의 다른 세트에 대한 할당을 위해 비워진다. 또한, 제어 논리는 몇 개의 동시에 디코드되는 명령에 대해 절감(amortize)되기 때문에, 명령 마다 이용되는 제어 논리의 수는 감소한다. 특정 명령을 식별하는 재배열 버퍼 태그는 2개의 필드, 즉 라인 태그 및 오프셋 태그로 분할될 수 있다. 라인 태그는 그 특정 명령을 포함하는 동시에 디코드된 명령의 세트를 식별하고, 오프셋 태그는 그 세트 내의 어느 명령이 그 특정 명령에 대응하는 지를 식별한다. 주목할 사항으로서, 레지스터 파일(30)에 명령의 결과를 저장하고, 대응하는 저장소를 비우는 것을 명령을 "퇴거한다"라고 한다. 또한, 주목할 사항으로서, 프로세서(10)의 다양한 실시예에서는, 레지스터 파일(30)의 추론적 상태를 저장하기 위해 미정 파일을 이용하는 것을 포함하여, 어떠한 재배열 버퍼 구성이라도 이용될 수 있다.
상기 설명한 바와 같이, 예약 스테이션(22)은 명령이 대응하는 기능 유닛(24)에 의해 실행될 때까지 그 명령을 저장한다. (i) 명령의 오퍼랜드가 제공되는 경우, 및 (ii) 동일한 예약 스테이션(22A-22C) 내의, 프로그램 순서에 있어서 그 명령 이전에 있는 명령에 대해 오퍼랜드가 아직 제공되지 않았을 때, 그 명령이 실행을 위해 선택된다. 주목할 사항으로서, 명령이 기능 유닛(24)중 하나에 의해 실행되면, 명령의 결과는 그 결과를 기다리고 있는 어떠한 예약 스테이션(22)에 직접 전송됨과 동시에, 그 결과는 재배열 버퍼(32)를 갱신하기 위해 전송된다(이 기술은 일반적으로 "결과 전송"이라 한다). 명령은 실행을 위해 선택되어, 관련 결과가 전송되는 클럭 사이클 동안 기능 유닛(24A-24C)에 보내질 수 있다. 이 경우, 예약 스테이션(22)은 전송된 결과를 기능 유닛(24)에 전송한다. 명령을 기능 유닛(24)에 의해 실행되는 복수의 동작으로 디코드하는 실시예에서, 그 동작은 서로 분리되어 스케쥴링될 수 있다.
일 실시예에서, 각 기능 유닛(24)은 덧셈 및 뺄셈의 정수 연산 동작, 시프트, 회전, 논리 연산 및 분기 연산을 행하도록 구성된다. 이러한 연산들은 디코드 유닛(20)에 의해 특정 명령에 대해 디코드되는 제어값에 응답하여 행해진다. 주목할 사항으로서, 부동 소수점 연산에 대처하기 위해, 부동 소수점 유닛(미도시)이 이용될 수 있다. 부동 소수점 유닛은 코프로세서(coprocessor)로서 동작하여, MROM 유닛(34) 또는 재배열 버퍼(32)로부터 명령을 받은 다음, 재배열 버퍼(32)와 통신함으로써 명령을 완료한다. 또한, 기능 유닛(24)은 적재/저장 유닛(26)에 의해 행해지는 적재 및 저장 메모리 동작에 대한 어드레스 생성을 행하도록 구성될 수 있다. 일 특정 실시예에서, 각 기능 유닛(24)은 어드레스를 생성하기 위한 어드레스 생성 유닛 및 나머지 기능을 행하기 위한 실행 유닛을 포함할 수 있다. 이 2개의 유닛은 클럭 사이클 동안 서로 다른 명령 또는 동작에 대해 독립적으로 동작할 수 있다.
각 기능 유닛(24)은 또한, 분기 예측 유닛(14)에 조건 분기 명령의 실행에 관한 정보를 제공한다. 분기 예측이 잘못된 경우, 분기 예측 유닛(14)은 명령 처리 파이프라인에 들어간 오예측된 분기 이후의 명령을 플러쉬(flush)하고, 명령 캐시(16) 또는 주 메모리로부터 필요한 명령을 페치하게 한다. 주목할 사항으로서, 이러한 상황에서, 추론적으로 실행되어 적재/저장 유닛(26) 및 재배열 버퍼(32)에 임시적으로 저장되는 것을 포함하여, 오예측된 분기 명령 이후에 일어나는 최초 프로그램 시퀀스 내의 명령의 결과는 폐기된다. 또한, 주목할 사항으로서, 분기 실행 결과는 기능 유닛(24)에 의해 재배열 버퍼(32)에 제공될 수 있는바, 이는 기능 유닛(24)에게 분기 오예측을 나타낼 수 있다.
기능 유닛(24)에 의해 생성된 결과는, 레지스터값이 갱신될 때에는 재배열 버퍼(32)에 전송되고, 메모리 위치의 콘텐츠가 변경될 때에는 적재/저장 유닛(26)에 전송된다. 결과가 레지스터에 저장되는 경우, 재배열 버퍼(32)는, 명령이 디코드되었을 때 레지스터값에 대해 예약된 위치에 그 결과를 저장한다. 기능 유닛(24) 및 적재/저장 유닛(26)으로부터의 결과의 전송을 위해 복수의 결과 버스(38)가 포함된다. 결과 버스(38)는 생성된 결과 뿐 아니라, 실행되는 명령을 식별하는 재배열 버퍼 태그를 전달한다.
적재/저장 유닛(26)은 기능 유닛(24)과 데이터 캐시(28) 간에 인터페이스를 제공한다. 일 실시예에서, 적재/저장 유닛(26)은, 데이터 캐시(28)를 액세스하지 않은 미결의 적재 또는 저장에 관한 데이터 및 어드레스 정보에 대한 저장 위치를 갖는 제 1 적재/저장 버퍼 및 데이터 캐시(28)를 액세스한 적재 및 저장에 관한 데이터 및 어드레스 정보에 대한 저장 위치를 갖는 제 2 적재/저장 버퍼를 가지며 구성된다. 예를 들어, 제 1 버퍼는 12개의 위치를 포함할 수 있고, 제 2 버퍼는 32개의 위치를 포함할 수 있다. 디코드 유닛(20)은 적재/저장 유닛(26)에 대한 액세스를 중재한다. 제 1 버퍼가 가득차면, 디코드 유닛은 적재/저장 유닛(26)이 미결의 적재 또는 저장 요구 정보에 대한 공간을 가질 때까지 기다려야 한다. 적재/저장 유닛(26)은 또한, 데이터 코히런시가 유지됨을 보장하기 위해, 미결 저장 메모리 동작에 대한 적재 메모리 동작의 종속성 체크를 행한다. 메모리 동작은 프로세서(10)와 주 메모리 서브 시스템 간의 데이터의 전송이다. 메모리 동작은, 메모리에 저장되는 오퍼랜드를 이용하는 명령의 결과가 될 수도 있고, 또는 데이터 전송을 야기시키기는 하지만 그 외의 어떠한 동작도 일으키지 않는 적재/저장 명령의 결과가 될 수도 있다. 또한, 적재/저장 유닛(26)은 세그먼트 레지스터, 및 x86 프로세서 아키텍쳐에 의해 정의되는 어드레스 변환 메커니즘에 관련된 그 외의 레지스터 등의 특별한 레지스터를 위한 특별한 레지스터 저장소를 포함할 수 있다.
데이터 캐시(28)는 적재/저장 유닛(26)과 주 메모리 서브 시스템 간에 전송되는 데이터를 임시로 저장하기 위해 제공되는 고속의 캐시 메모리이다. 일 실시예에서, 데이터 캐시(28)는 2 방향의 세트 어소시에이티브 구조로 최대 64 킬로바이트의 데이터를 저장할 수 있는 용량을 갖는다. 이해될 사항으로서, 데이터 캐시(28)는, 세트 어소시에이티브 구성, 풀리 어소시에이티브 구성, 직접 맵핑된 구성 및 적절한 어떠한 크기의 다른 어떠한 구성을 포함하는 다양한 특정 메모리 구성으로 구현될 수 있다.
프로세서간 통신 유닛(320)은 다중 스레드 다중 프로세서 구성에 있어서 다른 프로세서와 통신하기 위한 인터페이스를 제공한다. 일 실시예에서, 프로세서간 통신 유닛(320)은 실행될 명령을 일시로 저장하기 위한 예약 스테이션을 포함할 수도 있다. 또한, 일 실시예에서, 프로세서간 통신 유닛(320)은 프로세서 간의 다중 스레드 관련 통신을 촉진하는 스레드 제어 디바이스에 인터페이스된다.
x86 프로세서 아키텍쳐를 이용하는 프로세서(10)의 일 특정 실시예에서, 명령 캐시(16) 및 데이터 캐시(28)는 선형으로 어드레스되고 물리적으로 태그된다. 선형 어드레스는 명령에 의해 특정되는 오프셋 및 x86 어드레스 변환 메커니즘의 세그먼트 부분에 의해 특정되는 베이스 어드레스로부터 형성된다. 선택적으로, 선형 어드레스는 주 메모리를 액세스하기 위한 물리적 어드레스로 변환될 수 있다. 선형 어드레스로부터 물리적 어드레스로의 변환은 x86 어드레스 변환 메커니즘의 페이징 부분에 의해 특정된다. 물리적 어드레스를 물리적 태그와 비교하여, 히트/미스 상태를 결정한다.
버스 인터페이스 유닛(37)은 버스를 통해 프로세서(10)와 컴퓨터 시스템의 다른 구성 요소와 통신하도록 구성된다. 예를 들어, 버스는 디지털 이큅먼트사(Digital Equipment Corporation)에 의해 개발된 EV-6 버스와 호환성일 수 있다. 대안적으로는, 패킷 기반, 단방향 또는 쌍방향 링크 등을 포함한 적절한 모든 상호 접속 구조가 이용될 수 있다. 또한, 레벨 2 캐시에 대한 인터페이스를 위해 임의의 L2 캐시 인터페이스가 이용될 수 있다.
대칭적 다중 처리
도 2는, 복수의 처리 유닛(12A-12B), 스레드 제어 디바이스(300), 버스 브리지(30) 및 메모리(20)를 포함하는 다중 프로세서 컴퓨터(100)의 일 실시예를 나타내는 블록도이다. 각 처리 유닛(12A-12B)은 처리 코어(14A-14B), L1 캐시 메모리(16A-16B) 및 버스 인터페이스(18A-18B)를 각각 포함한다. 처리 유닛(12A-12B)은 시스템 버스(22)를 통해 주 메모리(20)에 결합된다.
도 2의 다중 프로세서 컴퓨터(100)는, 모든 처리 유닛(12A-12B)이 동일한 메모리 공간(즉, 주 메모리(20))을 공유하고 동일한 어드레스 맵핑을 이용하여 메모리 공간에 액세스한다는 의미에서 대칭적이다. 다중 처리 시스템(100)은 또한, 모든 처리 유닛(12A-12B)이 동일한 I/O 서브 시스템에 대해 동등한 액세스를 공유한다는 의미에서 대칭적이다.
일반적으로, 운영 체제 소프트웨어의 단일 카피 및 각 사용자 애플리케이션 파일의 단일 카피가 주 메모리(20) 내에 저장된다. 각 처리 유닛(12A-12B)은 운영 체제 및 사용자 애플리케이션 파일의 이러한 단일 카피로부터 실행한다. 주목할 사항으로서, 처리 코어(14A-14B)는 코드를 동시에 실행할 수도 있지만, 처리 유닛(12A-12B)중 단지 1개만이 어떠한 소정의 시간에 시스템 버스(22)의 지배력(mastership)을 가질 수 있다. 따라서, 2개 또는 그 이상의 처리 유닛의 동시의 버스 요구를 중재하고, 미리 결정된 중재 알고리즘에 기초하여 처리 유닛 중 하나에 지배력을 허가하기 위해, 버스 중재 메커니즘, 버스 브리지(30)가 제공된다. 다양한 버스 중재 기술이 알려져 있다.
각 처리 유닛(12A-12B)의 고속의 캐시 메모리(16A-16B)는 각각, 각각의 처리 유닛에 의해 가장 최근에 액세스된 데이터를, 관련 데이터가 대응하는 주 메모리 어드레스를 나타내는 어드레스 태그와 함께 저장한다. 프로그램은 코드의 동일한 섹션을 실행하고, 동일한 데이터 구조를 반복적으로 액세스하는 경향이 있기 때문에, 캐시가 충분히 큰 경우에는, 액세스 되는 대부분의 위치는 캐시에 이미 저장된다.
캐시 메커니즘은 2개의 중요한 이득을 제공한다. 첫 번째로, 캐시는 고속 메모리로 구현되고, 버스 중재 및 버퍼 지연없이 액세스될 수 있기 때문에, 각 캐시에 저장되는 위치에 대한 액세스는 주 메모리 액세스 보다 훨씬 빠르다. 두 번째로, 각 캐시에 저장되는 위치에 대한 액세스는 시스템 버스에 대한 액세스를 필요로 하지 않기 때문에, 각 프로세서의 버스 이용이 크게 감소된다. 따라서, 시스템 버스는 요구되는 다른 트랜잭션을 제공하는 데에 이용될 수 있다. 전형적으로, "히트 레이트(hit rate)"가 높을 수록, 전체 시스템 성능이 좋아진다. 히트 레이트는, 캐시에 이미 저장되는 위치에 대한 특정의 처리 코어에 의한 액세스의 퍼센티지이다. 적당히 큰 캐시를 갖는 잘 설계된 시스템은 90% 이상의 히트 레이트를 달성할 수 있다.
캐시 메모리를 이용하는 다중 처리 시스템에 관한 중요한 고려 사항은 데이터 코히런시이다. 주 메모리(20)에 의해 저장되는 데이터 (및 명령)의 복수의 카피들이 캐시 메모리(16A-16B)의 1개 또는 그 이상에 동시에 존재할 수 있기 때문에, 메모리 서브 시스템중 1개가 갱신(즉, 새로운 데이터로 기록)되는 경우, 데이터의 완전성을 유지하기 위해서는 특수화된 메커니즘을 이용해야 한다. 예를 들어, 처리 코어(14A)에 의해 캐시 메모리(16A) 내에서 데이터의 특정의 섹션이 갱신되지만, 주 메모리(20)의 대응하는 섹션 내에서는 갱신되지 않는 상황을 고려해 보자. 처리 코어(14B)가 이후 코드의 동일 섹션을 액세스하는 경우, 처리 코어(14B)가 적절한 데이터를 확실하게 액세스하기 위해서는, 어느 섹션이 최신이고 어느 섹션이 더 이상 유효하지 않은 지를 추적하는 어떠한 신뢰성있는 메커니즘이 필요하다. 따라서, 캐시 코히런시를 효율적으로 유지하기 위해, 이른바 라이트 쓰루(write through) 및 라이트 백(write back) 기술에 근거하는 것을 포함한 다양한 기술이 개발되었다. 다양한 캐시 코히런시 기술은 공지된 선행 기술의 다수의 출판물에 기재되어 있기 때문에, 본원에서는 더 이상 설명하지 않는다.
일반적인 동작
도 3A 및 도 3B는 다중 스레드 다중 처리의 일반적인 동작을 예시한다. 도 3A에서는, 2개의 프로세서(12A-2B)와 스레드 제어 디바이스(300) 간의 상호 접속이 나타난다. 도 3B는 도 3A에 나타낸 다중 프로세서 컴퓨터의 일반적인 동작을 예시하는 흐름도이다. 각 프로세서(12A-12B)는 처리 코어(14A-14B), L1 캐시(16A-16B) 및 프로세서간 통신 유닛(이하 ICU)(320A-320B)을 포함한다. 또한, 선입선출(이하, FIFO) 버퍼(310A-310B) 및 동기 논리(314)를 포함하는 스레드 제어 디바이스(300)가 나타나 있다.
각 프로세서(12)의 ICU(320)는, 프로세서들(12A 및 12B) 간의 통신을 용이하게 하는 스레드 제어 디바이스(300)에 결합된다. 일반적으로, 하나의 프로세서(12A)는 마스터의 역할을 하고, 다른 프로세서(12B)는 슬레이브의 역할을 한다. 마스터 프로세서(12A)는 모든 단일 스레드 코드를 실행하고, 슬레이브 프로세서(12B) 상에서의 스레드 실행을 셋업 및 개시하며, 스레드 실행 이후 실행 결과를 통합한다. 일반적으로, 처리 코어(14A)는 다중 스레드 셋업 명령을 만날 때까지 단일 스레드 코드를 실행한다(블록 330). 처리 코어(12A)가 다중 스레드 셋업 명령을 만나면(블록 332), 처리 코어(12A)는 스레드 셋업 명령을 ICU(320A)에 전달하고, ICU(320A)는 그 명령을 FIFO 1(310A)에 전달한다. ICU(320B)는 FIFO 1(310A)로부터 명령을 검색한 다음, 그 명령을 처리 코어(14B)에 전송한다. 이후, 마스터 프로세서(12A)는 ICU(320A)에 스레드 2 개시 명령을 전달하고(블록 334), ICU(320A)는 그 명령을 FIFO 1(310A)에 둔다. ICU(320B)는 FIFO 1(310A)로부터 스레드 개시 명령을 검색한 다음, 이를 처리 코어(14B)에 전달한다. 이후, 처리 코어(14B)는 스레드 2 코드의 페치 및 실행을 시작한다(블록 338). 양쪽 모두의 프로세서(12)에 의한 JOIN 명령의 실행 및 퇴거시(블록 340 및 342), 슬레이브 프로세서(12B)는 스레드 2의 실행을 종료하고, 마스터 프로세서(12A)에 의해 단일 스레드 실행이 재개된다. 이후, 마스터 프로세서(12A)는 다른 명령을 프로세서(12B)에 전달하여, 슬레이브 프로세서(12B)로 하여금 FIFO(310B)를 통해 마스터 프로세서(12A)에 스레드 2 실행의 결과를 전달하게 한다.
이후, 마스터 프로세서(12A)는 개별적인 스레드로부터의 실행 결과를 통합하고(블록 344), 통상적인 실행을 계속한다(블록 346). 정리하면, 마스터 프로세서(12A)는 슬레이브 프로세서(12B) 상에서 실행하기 위한 제 2 스레드를 셋업한다. 마스터 프로세서(12A) 및 슬레이브 프로세서(12B) 모두는 스레드를 병행적으로 실행한다. 이후, 마스터 프로세서(12A)는 슬레이브 프로세서로부터 제 2 스레드 실행 결과를 얻는다.
동작의 상세한 설명
도 4는 다중 스레드 다중 프로세서의 일 실시예를 나타낸다. 도 4는 프로세서(12A 및 12B), 스레드 제어 디바이스(300) 및 버스(22)의 일부분을 포함한다. 프로세서(12)는 ICU(320), 레지스터 파일(30), 재배열 버퍼(32), 시스템 버스(38) 및 버스 인터페이스 유닛(37)을 포함한다. 또한, ICU(320)는 예약 스테이션(402) 및 재배열 버퍼 태그 변환 버퍼(이하, RTB)(400)를 포함한다. 스레드 제어 디바이스(300)는 2개의 FIFO(310) 및 동기 논리(314)를 포함한다. ICU(320)는 재배열 버퍼(32) 및 시스템 버스(38)에 결합된다. 레지스터 파일(30) 및 버스 인터페이스 유닛(37)은 버스(22)에 결합된다. 버스 인터페이스 유닛(37) 또한 버스(22)에 결합된다. 스레드 제어 디바이스(300)는 ICU(320)에 결합된다.
도 4에 나타나는 다중 스레드 다중 프로세서의 일 실시예에서, 스레드의 제어를 위해 다음의 5개의 명령, 즉 Wr2Proc, RdFrProc, Fork, Join, Sync를 이용한다. 하기의 표 1은 각 명령의 목적을 간단하게 설명한다.
명령 신택스 목적
Wr2Proc Wr2Proc PNo, destreg, srcreg 현재 프로세서의 레지스터 파일로부터의 데이터를 다른 프로세서의 레지스터 파일로 이동하기 위한 것. PNo = 목적지 프로세서의 수 destreg = 목적지 프로세서 상의 레지스터 식별자 srcreg = 현재 프로세서(소스) 상의 레지스터 식별자
RdFrProc Rd2Proc PNo, destreg, srcreg 다른 프로세서의 레지스터 파일로부터의 데이터를 현재 프로세서의 레지스터 파일로 이동하기 위한 것. PNo = 목적지 프로세서의 수 destreg = 현재 프로세서(목적지) 상의 레지스터 식별자 srcreg = 소스 프로세서 상의 레지스터 식별자
Fork PNo, ThrdAddr 다른 프로세서 상에서 스레드의 추론적인 실행을 시작. PNo = 스레드를 시작하는 프로세서의 수 ThrdAddr = 스레드 코드의 어드레스
Join Join 스레드 코드의 실행을 종료
Sync Sync 모든 프로세서가 동기 포인트에 도달할 때 까지 실행을 직렬화함
표 1 - 스레드 제어 명령
간단하게 말하면, 마스터 프로세서(12A)는 슬레이브 프로세서(12B)에 Wr2Proc 명령을 전달함으로써, 실행을 위해 제 2 스레드를 셋업한다. Wr2Proc 명령은 마스터 프로세서의 레지스터 파일로부터의 데이터를 슬레이브 프로세서에 이동시킨다. 제 2 스레드의 실행을 개시하기 위해, Fork 명령이 이용된다. 마스터 프로세서(12A)가 슬레이브 프로세서(12B)에 Fork 명령을 전달하면, 슬레이브 프로세서(12B)는 자신의 재배열 버퍼(32B)에 그 Fork 명령을 배치하고, 그 Fork 명령과 함께 전달되는 스레드 어드레스로부터 제 2 스레드에 대한 명령의 페치를 개시한다. Join 명령의 실행시, 제 2 스레드의 실행은 종료된다. 하기에서 설명되는 바와 같이, 스레드 명령을 추론적으로 실행하는 능력은 중요하다. 다음으로, 추론적 실행에 대한 지원을 설명한 다음, 스레드 셋업 및 실행의 전체 메커니즘을 보다 상세하게 설명한다.
추론적 스레드 실행을 위한 지원
최신의 슈퍼스칼라 프로세서는 큰 명령 윈도우를 갖는다. 이 때문에, 스레드의 개시 이전에 Fork 명령이 퇴거하기를 기다리는 것은, 상당한 지연을 야기시킬 수 있다. 최적의 스레드 개시를 가능하게 하기 위해, 이 메커니즘은 스레드의 추론적인 개시를 가능하게 해야 한다. 이에 의해, 마스터 프로세서 내에서 Fork 명령이 퇴거하기 훨씬 전에, 슬레이브 프로세서 내에서 제 2 스레드를 개시 및 실행할 수 있게 된다. 유익하게는, 다중 스레드 다중 프로세서의 성능이 개선된다.
추론적인 스레드 실행을 지원하기 위해, 각 프로세서(12)는 재배열 버퍼 태그 변환 버퍼(RTB)(400)를 포함하는바, 이는 하나의 프로세서 재배열 버퍼 내의 명령의 위치를 다른 프로세서 재배열 버퍼 내의 동일한 명령의 위치에 맵핑한다. 일 실시예에서, RTB(400)는 재배열 버퍼(32)와 같은 수의 엔트리를 갖는다. RTB는 제 1 프로세서의 재배열 버퍼(32) 태그와 함께 어드레스되고, RTB(400)의 어드레스되는 엔트리는 제 2 프로세서의 대응하는 재배열 버퍼 태그(32)를 포함한다.
스레드의 추론적 개시 및 실행을 가능하게 하기 위해, Wr2Proc 및 Fork 명령은 추론적으로 처리된다. Wr2Proc 및 포크가 마스터 프로세서 ICU(320A)에 디스패치될 때, 이들은 FIFO 1(310A)을 통해 슬레이브 프로세서(12B)에도 전송된다. Wr2Proc 명령이 마스터 ICU(320A)에 디스패치될 때에는, 2개의 가능성, 즉 데이터가 이용가능하거나 또는 이용가능하지 않다는 가능성이 존재할 수 있다. 데이터가 이용가능한 경우, 명령 및 그 명령의 재배열 버퍼(32A) 태그 및 "가산 명령"이 슬레이브 프로세서에 전송된다. 명령 및 데이터는 슬레이브 프로세서의 재배열 버퍼(32B)에 삽입되고, 엔트리는 유효 데이터를 갖는 것으로 마크된다. 또한, 슬레이브의 RTB(400B)가 갱신되어, 재배열 버퍼(32A) 엔트리와 재배열 버퍼(32B) 엔트리 간의 대응을 나타낸다. 마스터 프로세서 ICU(320A)로의 디스패치 시에 데이터가 이용가능하지 않은 경우, 명령은 데이터가 이용가능하게 될 때까지 마스터 프로세서 ICU(320A)의 ICU 예약 스테이션(402A)에 남는다. 하지만, 명령은 슬레이브 프로세서(12B)에 전송된다. 그 명령은 슬레이브 프로세서의 재배열 버퍼(32B) 내에 삽입되고, 슬레이브 프로세서의 재배열 버퍼(32B) 내의 엔트리는 유효 데이터를 갖지 않는 것으로 마크되며, 그리고 RTB(400B)는 상기 설명한 바와 같이 갱신된다. 유효 데이터를 갖지 않는 것으로 마크된 슬레이브 프로세서 재배열 버퍼(32B) 내의 명령은, 데이터가 이용가능해질 때 까지 실행되지 않는다. 마스터 프로세서(12A)의 예약 스테이션(402A) 내에서 대기하고 있는 명령에 대해 데이터가 이용가능해지면, 그 명령은 마스터 프로세서(12A)의 예약 스테이션(402A)으로부터 제거되고, ICU(320A)에 발행된다. ICU(320A)가 이 명령을 수신하면, 마스터 프로세서의 데이터 및 재배열 버퍼(32A) 태그가 "데이터 갱신" 커맨드와 함께 슬레이브 프로세서(12B)에 전송된다. 슬레이브 프로세서(12B)는 RTB(400B)를 이용하여 재배열 버퍼(32A) 태그를 변환하여, 슬레이브 프로세서(12B)의 재배열 버퍼(32B)에 있어서의 명령의 태그를 식별한다. 그런 다음, 대응하는 재배열 버퍼(32B) 태그를 이용하여, 데이터를 정확한 재배열 버퍼(32B) 엔트리 내에 삽입한다. 슬레이브 프로세서 재배열 버퍼(32B) 내의 명령이 유효 데이터를 갖는 것으로 마크되고, 슬레이브 프로세서(12B) 내의 종속 명령이 발행될 수 있다.
스레드 셋업 및 스레드 개시
다른 프로세서 상에서의 실행을 위해 제 2 스레드를 셋업하기 위해, 마스터 프로세서(12A)는 FIFO 1(310A)을 통해 슬레이브 프로세서(12B)에 추론적인 Wr2Proc 명령을 전달한다. 이 Wr2Proc 명령에 부가적으로, 마스터 프로세서(12A)는 명령의 재배열 버퍼(32A) 태그를 슬레이브 프로세서(12B)에 전달한다. 이 명령은 슬레이브 프로세서의 재배열 버퍼(32B) 내에 배치된다. Wr2Proc 명령에 대한 데이터가 이용가능한 경우, 이 또한 재배열 버퍼(32B) 내에 배치된다. 그렇지 않은 경우, 재배열 버퍼(32B) 엔트리는 유효 데이터를 갖지 않는 것으로 마크된다. 이와 병행하여, 슬레이브 프로세서 재배열 버퍼(32B)의 태그를 마스터 프로세서 재배열 버퍼(32A)의 태그에 의해 인덱스되는 위치에 배치함으로써, 슬레이브 프로세서의 RTB(400B)가 갱신된다. 슬레이브 프로세서(12B)의 재배열 버퍼(32B)가 가득차는 경우에는, 마스터 프로세서(12A)로부터 어떠한 명령도 수신되지 않는다. 슬레이브 프로세서 재배열 버퍼(12B) 내에서 공간이 이용가능한 경우, 마스터 프로세서(12A)는 표시를 수신하고, 미결 명령이 전송될 수 있다.
제 2 스레드의 셋업이 완료된 후, Fork 명령을 이용하여 제 2 스레드의 실행을 시작한다. Fork 명령이 마스터 프로세서를 만나면, 이는 상기 설명한 바와 같이 스레드 제어 디바이스(300)를 통해 슬레이브 프로세서(12B)에 전송된다. 슬레이브 프로세서(12B)가 이미 스레드를 실행하고 있는 경우, Fork 명령은 무시된다. 슬레이브 프로세서(12B)에 의해 Fork 동작의 성공에 관한 표시가 작성된다. 이러한 표시는, 마스터 프로세서(12A)에 의해 체크될 수 있는 통상의 프로세서 플래그를 세트 하는 등의 다양한 수단에 의해 작성될 수 있다. 다른 실시예는 다른 수단을 이용하여, 다른 스레드가 이미 실행되고 있는 동안에는 제 2 스레드를 개시하고자 하는 시도가 이루어지지 않도록 하여, 플래그의 세트 및 체크의 필요성을 없앨 수 있다. 슬레이브 프로세서(12B)가 아직 스레드를 실행하지 않은 경우, Fork 명령이 재배열 버퍼(32B) 내에 배치되고, 슬레이브 프로세서는 제 2 스레드에 대한 명령의 페치를 시작한다. 새롭게 페치된 스레드 명령은 재배열 버퍼(32B) 내에서 Fork 명령 뒤에 배치되어, 실행을 위해 프로세서 기능 유닛에 디스패치된다. Wr2Proc 명령에 대한 어떠한 현저한 종속성도 갖지 않는 명령이 발행될 수 있다. 유익하게는, 마스터 프로세서(12A) 내에서 Fork 명령이 퇴거되기 전에, 슬레이브 프로세서(12B) 내에서 많은 비종속 명령이 발행될 수 있다. 슬레이브 프로세서(12B) 내의 Fork 명령 이후의 스레드 명령을 실행하는 메커니즘은 통상의 슈퍼스칼라 프로세서와 동일하다.
분기 오예측 및 정정
마스터 프로세서(12A)에서 분기 오예측이 검출되면, 그 분기 다음의 재배열 버퍼(32A) 내의 모든 엔트리를 무효화된다. Wr2Proc 또는 Fork 명령이 오예측되는 경우, 이들은 또한 슬레이브 프로세서(12B)에서도 무효화될 필요가 있다. 마스터 프로세서(12A)가 오예측된 분기 이후의 재배열 버퍼(32A) 내의 엔트리를 무효화할 때, 이는 오예측된 분기 이후의 첫 번째 Wr2Proc 또는 Fork 명령을 검출하여, 무효화 요구와 함께 그 명령의 재배열 버퍼(32A) 태그를 ICU(320A)에 전송한다. 이후, 이러한 태그 및 요구는 슬레이브 프로세서(12B)에 전달되는바, 그곳에서 마스터 프로세서 재배열 버퍼(32A) 태그가 RTB(400B)에 의해 변환됨으로써, 슬레이브 프로세서(12B)의 재배열 버퍼(32B) 태그를 얻는다. 결과적인 재배열 버퍼(32B) 태그를 이용하여, 재배열 버퍼(32B) 내의 그 엔트리 및 그 이후의 모든 엔트리가 무효화된다. 재배열 버퍼(32B) 내에서 명령이 무효화되는 동안 Fork 명령을 만나는 경우, 슬레이브 프로세서(12B)에서의 추론적인 실행은 정지된다.
제 2 스레드 실행의 종료 및 퇴거
슬레이브 프로세서(12B) 상에서 실행되는 제 2 스레드의 종료는 Join 명령에 의해 지시된다. Join 명령은, 마스터 프로세서(12A) 상에서 실행되는 스레드에 대해서도 이용된디. 마스터 및 슬레이브 프로세서(12) 모두가 Join 명령을 퇴거한 경우, 슬레이브 프로세서(12B)는 실행을 정지하고, 실행은 마스터 프로세서(12A)에서만 계속된다. 슬레이브 프로세서(12B)가 Join 명령을 퇴거하면, 이는 이러한 퇴거를 마스터 프로세서(12A)에 신호하고, 그의 재배열 버퍼(32B)는 클리어된다. 이후, 슬레이브 프로세서(12B)는 실행을 정지하고, 다음 Fork 명령을 기다린다. 슬레이브 프로세서(12B)가 Join 명령을 퇴거했다는 표시를 마스터 프로세서(12A)가 받게 되면, 마스터 프로세서(12A)는 그의 Join 명령을, 완료되어 퇴거 준비가 된 것으로 마크한다.
양쪽 모두의 프로세서(12)가 Join 명령을 퇴거하면, 마스터 프로세서(12A)는 슬레이브 프로세서(12B)의 레지스터 파일(30B)을 액세스하여, 제 2 스레드의 실행 결과를 얻을 수 있다. 슬레이브 레지스터 파일(30B)로의 액세스는, RdFrProc 명령을 이용하여 얻을 수 있다. RdFrProc 명령은 마스터 프로세서(12A)에 의해 ICU(320A)에 디스패치되는바, 이곳에서는 예약 스테이션(402A) 내에서 그것이 선두가 될 때 까지 기다린 다음 발행된다. 이후, RdFrProc 커맨드가 슬레이브 프로세서(12B)에 전송된다. 슬레이브 프로세서(12B)에서의 RdFrProc 커맨드의 실행은 특정화된 레지스터의 콘텐츠를 읽고, 그 결과를 FIFO 2(310B)를 통해 마스터 프로세서(12A)에 되돌린다. 여전히 실행 상태에 있는 마스터 프로세서 내의 RdFrProc 커맨드는 결과를 검색한 다음, 그것을 결과 버스(38A) 상에 둔다. 이후, 통상적인 명령 실행이 계속된다.
RdFrProc 명령은 Join 명령이 퇴거하기 전에 발행될 수 있지만, Join 명령이 퇴거한 이후까지는 퇴거할 수 없다. RdFrProc 명령 이전에는 동기화가 행해지지 않기 때문에, Join 명령은 마스터 및 슬레이브 스레드의 양쪽 모두에 있어서 그 명령을 선행해야 한다. 오예측 분기가 발생하고, RdFrProc 명령이 오예측되면, 그 명령은 여전히 데이터를 수신할 수 있지만, 그 결과는 마스터 프로세서 재배열 버퍼(32A)에 의해 폐기된다. 유익하게는, 상기 메커니즘은 RdFrProc 명령의 추론적인 실행을 가능하게 한다.
Wr2Proc 및 Fork 명령의 퇴거
Wr2Proc 또는 Fork 명령이 마스터 프로세서 재배열 버퍼(32A) 내에서 퇴거될 때, 재배열 버퍼(32A) 태그는 슬레이브 프로세서에 전송되어, RTB(400B)에 의해 슬레이브 프로세서의 재배열 버퍼(32B)로 변환된다. 이후, 마스터 프로세서(12A)에서 퇴거된 명령은 슬레이브 프로세서(12B)로부터도 퇴거될 수 있다.
Wr2Proc 및 Fork 명령의 퇴거는 다양한 방식으로 다루어질 수 있다. 제 1 방법은 퇴거 커맨드를 포함하고, 제 2 방법은 Fork 커미트 커맨드를 포함한다. 상기 설명한 바와 같이 분기 오예측 복구를 구현하기 위해, Wr2Proc 및 Fork 커맨드는, 이들이 마스터 프로세서 재배열 버퍼(32A)에서 퇴거될 때 까지, 슬레이브 프로세서 재배열 버퍼(32B)에서 퇴거될 수 없다. 결과적으로, 이러한 퇴거가 일어날 경우에는 재배열 버퍼(32A)는 재배열 버퍼(32B)에 통지해야 한다. 이러한 통지를 행하기 위한 하나의 방법은, Wr2Proc 또는 Fork 명령이 마스터 재배열 버퍼(32A)에서 퇴거될 때 마다, 슬레이브 프로세서(12B)에 재배열 버퍼(32A) 태그와 함께 퇴거 커맨드를 전송하는 것이다. 이후, 마스터 재배열 버퍼(32A) 태그는 슬레이브 프로세서(12B) 내의 RTB(400B)에 의해 변환되어, 슬레이브 재배열 버퍼(32B) 태그를 얻는다. 이후, 결과적인 슬레이브 재배열 버퍼(32B) 태그를 이용하여, 대응하는 명령을 퇴거한다. 이 방법이 슬레이브 재배열 버퍼(32B)에 부가적인 퇴거 트래픽을 생성하기는 하지만, 이 방법의 동작은 하기의 방법과 달리 소프트웨어에 대해 투명한 것이 장점이다.
Wr2Proc 및 Fork 명령의 퇴거를 취급하는 제 2 방법은 포크 커미트 커맨드의 이용을 포함한다. Fork 명령이 마스터 재배열 버퍼(32A)에서 퇴거되면, 재배열 버퍼(32A)는, Fork 명령이 퇴거되었음을 대응하는 재배열 버퍼(32A) 태그와 함께 ICU(320A)에 나타낸다. 그러면, ICU(320A)는 포크 커미트 커맨드 및 재배열 버퍼(32 A) 태그를 슬레이브 프로세서(12B)에 전송한다. 이후, 재배열 버퍼(32A) 태그가 RTB(400B)에 의해 변환되어, 대응하는 재배열 버퍼(32B) 태그를 얻는다. 이후, 결과적인 재배열 버퍼(32B) 태그를 이용하여, 대응하는 엔트리를 완료되어 퇴거 준비가된 것으로서 마크한다. 또한, 슬레이브 재배열 버퍼(32B) 내의 이전의 모든 Wr2Proc 명령은, 완료되어 이제 퇴거할 수 있는 것으로 마크된다. 이러한 제 2 방법을 이용하게 되면, 고려해야 할 특별한 경우가 있다. 어떠한 이유로 인해, Wr2Proc 명령 뒤에 Fork 명령이 계속되지 않는 경우, 이들은 완료된 것으로서 마크되지 않고, 재배열 버퍼(32B)에 남을 수 있다. 마스터 프로세서(12A)에 의한 이후의 스레드 셋업은 보다 많은 Wr2Proc 명령을 기록할 수 있다. 각 셋업에 의해, 슬레이브 재배열 버퍼(32B)에서는 보다 적은 공간이 이용가능해진다. 이 프로세스는 계속될 수 있고, 최종적으로는 슬레이브 재배열 버퍼(32B)의 오버플로우를 야기시킨다. 이러한 상태를 회피하기 위해, 소프트웨어는 슬레이브 재배열 버퍼(32B)의 이용가능한 크기를 항상 추적할 것이 요구된다. 이러한 제 2 방법이 상기 설명한 제 1 방법 보다 적은 트래픽을 생성할 수 있기는 하지만, 소프트웨어가 슬레이브 재배열 버퍼(32B) 내의 이용가능한 공간을 계속적으로 추적할 것을 요구하는 것은 바람직하지 않다. 결과적으로, 퇴거 커맨드를 이용하고 소프트웨어에 대해 투명한 상기 설명한 제 1 방법이 바람직하다.
일 실시예에서, ICU(320)는 사이클당 복수의 명령을 수락할 수 있다. 예약 스테이션(402)은 복수의 명령들을 수용할 수 있는바, 예약 스테이션(402) 내의 상기 명령들의 위치는 이들이 다른 프로세서에 전송되는 순서를 나타낸다. 또한, 복수의 명령들은 다른 프로세서에 한번에 전달될 수 있다. 전체적으로, 명령이 다른 프로세서의 재배열 버퍼(32B)에 순서대로 삽입되는 것을 확실히 할 필요가 있다.
스레드의 동기
동기 명령을 이용한 동기
병행 스레드를 실행하는 동안, 스레드를 결정가능한 상태로 하는 것이 바람직할 때가 있다. 예를 들어, 스레드 간에 데이터를 교환할 필요가 있는 경우에는, 스레드의 실행을 동기화하기 위한 메커니즘이 필요하다. 동기화를 가능하게 하기 위해, 일 실시예에서는, 동기 명령 및 동기 논리가 이용될 수 있다. 이용되는 동기 메커니즘은 그 시스템의 특징에 의존한다. 시스템의 모든 프로세서가 동일한 대기 시간 및 상(phase)을 갖는 경우에는, 상당히 동기적인 구현이 이용될 수 있다. 그렇지 않으면, 보다 유연한 구현이 이용될 수 있다. 어느 경우이든, 메커니즘은 소프트웨어에 대해 투명하다. 어느 구현에 대해서든, 동일한 동기 코드가 이용될 수 있다.
도 5는 스레드를 동기시키기 위해 동기 명령을 어떻게 이용할 수 있는 지를 예시한다. 도 5는 2개의 칼럼을 포함하는바, 각각 명령의 스레드를 나타낸다. 제 1 칼럼은 마스터 프로세서 상에서 실행되는 코드의 스레드를 나타내고, 제 2 칼럼은 슬레이브 프로세서 상에서 실행되는 코드의 스레드를 나타낸다. 도 5의 각 칼럼은 로우로 분할되는바, 각 셀은 단일의 명령을 나타낸다. 명령(500)은 코드 내의 다른 위치로부터의 분기 엔트리 포인트의 역할을 할 수 있는 라벨을 나타낸다. 스레드의 동작은 다음과 같다. 스레드 1 코드는 스레드 2 코드와 병행하여 실행한다. 스레드 1은 제 1 동기(502) 명령에 이를 때까지 실행한다. 스레드 2 코드는, Handle 데이터를 reg1로 이동시키는 mov 명령(510)을 실행한다. 이후, 스레드 2는 동기 명령(512)에 대한 실행을 계속한다. 양쪽 모두의 스레드가 제 1 동기 명령, 즉 각각 502 및 512에 이르렀을 때, 동기 명령은 퇴거될 수 있다. 양쪽 모두의 동기 명령이 동기 포인트를 나오면, (퇴거된) 실행이 계속된다. 스레드 1은, 프로세서(2)의 reg1로부터 그 레지스터 파일의 reg0에 데이터를 판독하는 명령(504)을 실행시킨다. 양쪽 모두의 스레드는 동기 명령(506 및 514)에서 제 2 동기 포인트에 이른다. 동기 명령(506 및 514)이 모두 퇴거 준비가 되면, 양쪽 모두는 퇴거되고, 실행이 계속된다. 이후, 스레드 1은 비교 명령(507)을 실행하고, 이들이 동일하지 않은 경우에는, 점프 명령(508)에 의해 명령(500)에 의한 실행이 계속되게 한다. 그렇지 않은 경우, 스레드 1의 실행은 다른 코드에 의해 계속된다. 상기 예가 나타내는 바와 같이, 동기 명령은, 모든 프로세서가 자신들의 대응하는 동기 명령을 퇴거할 준비가 될 때 까지 퇴거되지 않는다. 이는, 각 프로세서가 언제 동기 명령을 퇴거할 준비가 되는 지를 나타낼 것을 필요로 하고, 또한 각 프로세서는 다른 모든 프로세서가 언제 동기 포인트에 이르렀는 지를 알아야할 필요가 있다.
도 6은 동기 논리를 실현하기 위한 동기 메커니즘의 블록도이다. 동기 논리(314), SSO 신호(600) 및 SSI 신호(602)가 나타난다. SSO 신호(600)는 CPUs1-x로부터 출력되어, 동기 논리(314)에 입력된다. 동기 논리(314)는 신호 SSI(602)를 출력한다. 도 6에 나타낸 동기 구현에서, 각 프로세서는 2개의 신호, 즉 Sync State Out (SSO) 신호(600) 및 Sync Signal In (SSI)(602)에 의해 동기 논리(314)에 접속된다. 각 프로세서는 SSO 신호(600)를 출력하여, 동기 논리(314)에 동기 명령의 상태를 나타낸다. 또한, 각 프로세서는 SSI 신호(602)를 입력으로서 수신하여, 다른 프로세서에 있어서의 동기 명령 상태를 검출한다. 일 실시예에서, SSO 신호(600)의 상태는 하기의 표에 의해 설명된다.
SSO 상태 상태 설명
0 어떠한 동기 명령도 없음
1 동기 명령이 퇴거 준비가 됨
표 2
동기 명령은 재배열 버퍼에 의해 특별히 다루어진다. 동기적인 구현에서, 동기 명령이 다음에 퇴거되는 경우, 그 프로세서의 SSO 신호(600)는 상태 1로 세트되어, 다른 모든 프로세서에게 그것이 동기 포인트에 들어갔음을 나타낸다. 동기 논리(314)에 입력되는 모든 SSO 신호(600)가 상태 1로 세트되면, 동기 논리(314)는 SSI 신호(602)를 상태 1로 세트시킨다. 프로세서에 입력되는 SSI 신호(602)가 상태 1로 세트되는 경우에만, 프로세서는 자신의 동기 명령을 퇴거할 수 있다. 이러한 방식으로, 모든 프로세서가 자신의 동기 명령을 동시에 퇴거한다. 프로세서가 동기 명령을 퇴거할 때, 그 SSO 신호(600)는 이후의 클럭 사이클에 대해 상태 0으로 세트되어, 그것이 동기 포인트를 나왔음을 나타낸다. 퇴거 이후의 제 2 클럭 사이클에 있어서, 동기 명령이 퇴거 준비가 된 경우에는, SSO 신호(600)가 다시 상태 1로 세트될 수 있다. 이러한 동기적인 구현에 있어서, 동기 논리(314)는 앤드 게이트로 이루어질 수 있는바, 모든 SSO 신호(600)를 입력으로서 갖고 SSI 신호(602)를 출력으로서 갖는다. 이러한 동기적인 구현은 최고 속도의 동기 메커니즘을 제공한다. 하지만, 이는 프로세서가 사이클 마다 동기적인 방식으로 동작하는 경우에만 이용될 수 있다.
프로세서 간의 동기적인 동작이 보장되지 않는 경우에는, 동기 논리(314)의 비동기적인 구현이 이용될 수 있다. 도 7은 비동기적인 구현을 나타내는 블록도이다. 도 7은 동기 논리(314), 동기 논리(314)에 입력되는 SSO 신호(700), 및 동기 논리(314)로부터 출력되는 SSI 신호(702)를 나타낸다. 이러한 비동기적인 구현에서, 각 프로세서는 자신의 동기 명령 상태를 나타내기 위한 2 비트 SSO 신호(700)를 포함한다. 동기적인 구현에서와 같이, 동기 논리(314)는 각 프로세서에 SSI 신호(702)를 출력한다. 일 실시예에서, SSO 신호(700)의 상태는 하기의 표에 의해 설명될 수 있다.
SSO 상태 상태 설명
0 어떠한 동기 명령도 없음
1 동기 명령이 퇴거 준비가 됨
2 동기 명령이 퇴거됨
표 3
동기적 구현에서와 같이, 동기 명령은 재배열 버퍼(32)에 의해 특별히 다루어진다. 비동기적 구현에서, 동기 명령이 다음에 퇴거되는 경우, 그 프로세서의 SSO 신호는 상태 1로 세트되어, 그 동기 명령을 퇴거할 준비가 되었음을 다른 프로세서에게 나타낸다. 동기 논리(314)에 입력되는 모든 SSO 신호(700)가 상태 1로 세트되면, 동기 논리(314)는 SSI 신호(702)를 상태 1로 세트시킨다. 프로세서에 입력되는 SSI 신호(702)가 상태 1로 세트되는 경우에만, 그 프로세서는 자신의 동기 명령을 퇴거할 수 있다. 이러한 방식으로, 모든 프로세서는 자신의 동기 명령을 동시에 퇴거한다. 동기 명령이 퇴거될 때, 그 프로세서의 SSO 신호(700)는 상태 2로 세트되어, 그것이 동기 포인트를 나왔음을 다른 프로세서에게 나타낸다. 프로세서가 동기 포인트를 나오고 그 SSO 신호(700)를 상태 2로 세트시키면, 이것은 다른 모든 프로세서가 동기 포인트를 나올 때 까지 기다린다. 모든 프로세서가 자신들의 SSO 신호(700)를 상태 2로 세트시키면, SSI 신호(702)는 상태 0으로 세트된다. 이후, 모든 프로세서는 SSI 신호(702)가 상태 0으로 세트된 것을 검출하여, 실행을 계속한다. SSI 신호(702)가 상태 0으로 돌아온 후, 프로세서는 자신의 SSI 신호(702)를 상태 1로 세트시킴으로써 다른 동기 명령이 퇴거 준비가 되었음을 나타낼 수 있다.
동기 논리(314)의 비동기적인 구현은 중앙 논리가 되거나, 또는 프로세서들중 하나의 일부로서 포함될 수 있다. 동기 논리(314)는 도 8에 예시되는 바와 같이 동작할 수 있는 작은 상태 머신을 구현한다. 도 8은 FSMState 상태를 연속적으로 체크하는 연속 루프를 나타낸다. FSMState는 프로세서 내에서의 동기 신호 SSO 상태를 나타낸다. 처음에, 동기 논리(314)는 상태 WAIT_ALL_S1이 될 수 있다. 상태 WAIT_ALL_S1에 있을 때, 신호 SSI는 상태 0으로 세트된다. 모든 SSO 신호가 상태 S1에 있어, 모든 프로세서가 동기 명령을 퇴거할 준비가 되었음을 나타내는 경우, FSMState에 대한 다음 상태는 ALL_S1이다. 그렇지 않으면, FSMState에 대한 다음 상태는 WAIT_ALL_S1인 채로 남는다. 모든 SSO 신호가 상태 S1이 되면, FSMState는 상태 ALL_S1 및 이후 상태 WAIT_ALL_S2로 변환된다. 상태 WAIT_ALL_S2에서, 신호 SSI는 상태 1로 세트되어, 각 프로세서가 자신의 동기 명령을 퇴거할 수 있게 한다. 상태 WAIT_ALL_S2에 있을 때, 동기 논리는 모든 SSO 신호가 상태 2에 들어가기를 기다린다. 모든 프로세서가, 자신의 SSO 신호를 상태 2로 세트시킴으로써 나타나는 바와 같이, 동기 포인트를 나오는 경우, FSMState는 상태 ALL_S2 및 이후 상태 WAIT_ALL_S1로 변환되는바, 여기서 신호 SSI를 상태 0으로 세트시킨다. 이러한 구현에 의해, 비록 프로세서들이 로크 단계(lock step)에서 동작하지 않는다고 할지라도, 이들의 동기를 가능하게 한다. 이러한 구현은 보다 유연하지만, dlsms 상기 설명한 동기 구현 보다 긴 대기 시간을 갖는다.
스크래치패드를 이용한 동기
복수의 프로세서가 다른 스레드를 처리하고 있는 동안 데이터를 교환하는 다른 방식은 스크래치패드 레지스터 공간을 이용하는 것이다. 도 9는, 동기를 위해 스크래치패드 레지스터(902)를 이용하는 TCD(900) 및 ICU(920A)의 블록도를 나타낸다. 스크래치패드 레지스터(902)에 부가하여, 이러한 스크래치패드 레지스터에 액세스하기 위한 부가적인 스크래치패드 명령(이하 SCINS)이 부가된다. 스크래치패드 메커니즘을 구현하기 위해, 스크래치패드 논리(902)가 TCD에 부가된다. 도 9에는 ICU(920A) 및 TCD(900)가 나타난다. ICU(920A)는 SCINS 판독 예약 스테이션(930A), SCINS 기록 예약 스테이션(932A) 및 FIFO 예약 스테이션(402A)을 포함한다. TCD(900)는 FIFO(310), 동기 논리(314) 및 스크래치패드 레지스터(902)를 포함한다. ICU(920A)는 TCD(900)에 결합된다.
SCINS는 스크래치패드 레지스터 위치에 대한 로크된 판독-변경-기록(이하, RmodW) 명령이다. 이 명령은 병행의 스레드 실행 동안 공유 데이터의 변경을 가능하게 한다. 스크래치패드 레지스터는 어드레스 베이스에 의해 어드레스에 로크될 수 있다. SCINS는, ICU(920)로부터 분리되거나 또는 ICU(920)에 포함될 수 있는 특별한 기능 유닛에 의해 다루어진다. SCINS 기능 유닛은 판독 및 기록 액세스를 위한 개별적인 예약 스테이션(930 및 932)을 포함한다. 모든 명령은 스크래치패드 예약 스테이션으로부터 순서대로 발행된다. RmodW 동작에 의해 스크래치패드 위치를 변경하는 모든 명령은 로크된 명령이다. SCINS는 복수의 동작으로 디코드된다. 적어도 로크된 판독, ALU 동작, 및 로크된 기록이 생성된다. 이 메커니즘은 다음과 같이 동작한다.
1. 로크된 RmodW SCINS가 디코드된다. 이러한 디코드된 명령으로부터, 로크된 판독 및 로크된 기록이 SCINS 기능 유닛에 디스패치된다.
2.로크된 판독이 로크된 판독 예약 스테이션(930A)에 삽입된다. 로크된 쓰기가 로크된 쓰기 예약 스테이션(932A)에 삽입된다.
3.판독 예약 스테이션(930A) 내의 이전의 모든 판독이 완료되면, 로크된 판독이 판독 예약 스테이션(930A)으로부터 발행된다. 모든 RmodW 명령은 순서대로 발행되기 때문에, 대응하는 쓰기 명령 또한 쓰기 예약 스테이션(932A)의 선두가 된다.
4. 이제, 판독이 스크래치패드 레지스터(902)를 액세스한다. 이것이 로크된 경우, 판독은 그것이 언로크될 때 까지 기다린다. 이후, 스크래치패드 레지스터(902) 위치를 로크시키고, 그 동작을 완료하며, 결과를 결과 버스에 전달한다. 하지만, 판독 명령은 아직 예약 스테이션(930A)으로부터 제거되지 않는다.
5. 이제, 판독에 의존하는 모든 명령이 발행될 수 있다. 쓰기 예약 스테이션(932A) 내의 로크된 기록이 그의 입력 오퍼랜드를 수신하면, 이는 발행 준비가 된다. 하지만, 쓰기는 그 쓰기가 재배열 버퍼(32)에 대해 다음으로 퇴거할 때 까지 발행되지 않는다. 이는, 비추론적인 쓰기 만이 허락되기 때문에 필요하다.
6. 쓰기가 재배열 버퍼(32)에서 다음으로 퇴거할 때, 이 쓰기는 예약 스테이션(932A)으로부터 발행되어, 스크래치패드 레지스터(902)에 기록된다. 이러한 기록은 데이터를 갱신하고 위치를 언로크한다. SCINS 판독 및 쓰기 명령은 각각 예약 스테이션(930 및 932)으로부터 제거된다.
상기 6에서, 관련된 쓰기가 퇴거되면, 판독은 예약 스테이션(930)으로부터 제거된다. 분기 오예측을 적절히 다루기 위해, 판독은 예약 스테이션(930)에 남아야 한다. 오예측된 분기의 경우, 이 메커니즘은 다음과 같이 동작한다:
1. 오예측된 분기가 검출되면, 재배열 버퍼(32) 내의 오예측된 분기 이후의 엔트리는 취소(nullify)된다.
2. 취소 동안, SCINS의 로크된 명령이 검출될 수 있다. 이에 의해, 재배열 버퍼(32)는 무효 커맨드와 함께 취소된 SCINS에 대한 재배열 버퍼 태그를 SCINS 기능 유닛에 전송한다. 복수의 SCINS 명령이 검출되면, 분기 이후의 제 1 명령의 태그만이 요구된다.
3. SCINS 기능 유닛은 전달된 재배열 버퍼 태그를 이용하여, 수신된 재배열 버퍼 태그로부터 시작되고 그에 계속되는 예약 스테이션(930 및 932) 내의 모든 명령을 무효화한다.
4. 판독 예약 스테이션(930A) 내의 명령의 취소가 이미 발행된 예약 스테이션(930A)의 선두에 있어서의 판독에 히트하는 경우, 논리는 그 판독 명령의 어드레스를 이용하여 스크래치패드 레지스터(902) 내의 그 위치를 언로크한다. 상기 메커니즘은 추론적으로 로크된 스크래치패드 위치(902)가 언로크될 수 있게 한다. 유익하게는, 상기 메커니즘은 로크된 판독의 추론적인 실행을 가능하게 한다. 상기 설명은 개별적인 판독 및 쓰기 예약 스테이션을 이용하지만, 그 외의 구현이 이용될 수 있고 예기된다. 하지만, 로크된 판독이 오예측된 경우, 오예측된 로크된 기록을 실행하지 않으면서 그 위치를 언로크할 수 있어야 한다.
컴퓨터 시스템
도 10은 버스 브리지(1802)를 통해 다양한 시스템 구성 요소에 결합되는 다중 프로세서 컴퓨터(100)를 포함하는 컴퓨터 시스템(1800)의 일 실시예의 블록도이다. 그 외의 실시예가 가능하며 예기된다. 도시된 시스템에서, 주 메모리(1804)는 메모리 버스(1806)를 통해 버스 브리지(1802)에 결합되고, 그래픽스 제어기(1808)는 AGP 버스(1810)를 통해 버스 브리지(1802)에 결합된다. 마지막으로, 복수의 PCI 장치(1812A-1812B)가 PCI 버스(1814)를 통해 버스 브리지(1802)에 결합된다. 또한, EISA/ISA 버스(1820)를 통해 1개 또는 그 이상의 EISA 또는 ISA 디바이스(1818)에 대한 전기적인 인터페이스를 도모하기 위해 부차 버스 브리지(1816)가 제공될 수 있다. 다중 프로세서 컴퓨터(100)는 CPU 버스(1824)를 통해 버스 브리지(1802)에 결합되고, 임의의 L2 캐시(1828)에 결합된다.
버스 브리지(1802)는 다중 프로세서 컴퓨터(100), 주 메모리(1804), 그래픽스 제어기(1808), 및 PCI 버스(1814)에 부착된 디바이스들 간의 인터페이스를 제공한다. 버스 브리지(1802)에 접속된 디바이스들중 하나로부터 동작이 수신되면, 버스 브리지(1802)는 동작의 목표(예를 들어, 특정 디바이스, 또는 PCI 버스(1814)의 경우 그 목표는 PCI 버스(1814) 상에 있다)를 식별한다. 버스 브리지(1802)는 그 동작을 목표 디바이스에 전송한다. 버스 브리지(1802)는 일반적으로 소스 디바이스 또는 버스에 의해 이용되는 프로토콜로부터 목표 디바이스 또는 버스에 의해 이요되는 프로토콜로 동작을 변환한다.
부차 버스 브리지(1816)는, PCI 버스(1814)에 대해 ISA/EISA 버스에 대한 인터페이스를 제공하는 것에 부가하여, 필요에 따라 부가 기능을 포함시킬 수 있다. 필요에 따라, 키보드 및 마우스(1822)와 그리고 다양한 직렬 및 병렬 포트에 대한 동작 지원을 제공하기 위해, 부차 버스 브리지(1816)의 외부에 있거나 또는 그 브리지(1816)에 일체화되는 입/출력 제어기(미도시)가 컴퓨터 시스템(1800) 내에 포함될 수 있다. 다른 실시예에서는, 다중 프로세서 컴퓨터(100)와 버스 브리지(1802) 간의 CPU 버스(1824)에 외부 캐시 유닛(미도시)가 결합될 수 있다. 대안적으로, 외부 캐시는 버스 브리지(1802)에 결합될 수 있고, 그 외부 캐시에 대한 캐시 제어 논리는 버스 브리지(1802) 내에 일체화될 수 있다. 프로세서(10)에 대한 후측 구성에는 또한 L2 캐시(1828)가 있다. 주목할 사항으로서, L2 캐시(1828)는 다중 프로세서 컴퓨터(100)로부터 분리되고, 다중 프로세서 컴퓨터(100)와 함께 카트리지(예를 들어, 슬롯 I 또는 슬롯 A)에 일체화되거나, 또는 심지어 다중 프로세서 컴퓨터(100)와 함께 반도체 기판 위에 일체화될 수 있다.
주 메모리(1804)는, 응용 프로그램이 저장되고 이로부터 다중 프로세서 컴퓨터(100)가 주로 실행하는 메모리이다. 적절한 주 메모리(1804)는 DRAM(다이내믹 랜덤 액세스 메모리)을 포함한다. 예를 들어, 복수의 뱅크의 SDRAM(동기 DRAM) 또는 Rambus DRAM(RDRAM)이 적절하다.
PCI 디바이스(1812A-1812B)는, 예를 들어 네트워크 인터페이스 카드, 비디오 가속기, 오디오 카드, 하드 또는 플로피 디스크 드라이브 또는 드라이브 제어기, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터 및 전화 카드 등의 다양한 주변 디바이스를 예시하는 것이다. 유사하게, ISA 디바이스(1818)는, 모뎀, 사운드 카드 및 다양한 데이터 획득 카드(예를 들어, GPIB 또는 필드 버스 인터페이스 카드) 등의 다양한 종류의 주변 디바이스를 예시하는 것이다.
그래픽스 제어기(1808)는 디스플레이(1826) 상에서의 텍스트 및 이미지의 렌더링(rendering)을 제어하기 위해 제공된다. 그래픽스 제어기(1808)는, 주 메모리(1804) 내에 그리고 이 주 메모리(1804)로부터 효율적으로 시프트될 수 있는 삼차원 데이터 구조를 렌더링하기 위해 당업계에 일반적으로 알려져 있는 전형적인 그래픽스 가속기를 구현할 수 있다. 이에 따라, 그래픽스 제어기(1808)는, 버스 브리지(1802) 내의 목표 인터페이스에 대한 액세스를 요구 및 수신함으로써 주 메모리(1804)에 대한 액세스를 얻을 수 있다는 점에서, AGP 버스(1810)의 마스터가 될 수 있다. 전용 그래픽스 버스는 주 메모리(1804)로부터의 데이터의 신속한 검색을 도모한다. 특정 동작에 있어서, 그래픽스 제어기(1808)는 Ehgks AGP 버스(1810) 상에 PCI 프로토콜 트랜잭션을 생성하도록 구성될 수 있다. 따라서, 버스 브리지(1802)의 AGP 인터페이스는 AGP 프로토콜 트랜잭션 뿐 아니라 PCI 프로토콜 목표 및 개시 트랜잭션을 모두 지원하는 기능을 포함할 수 있다. 디스플레이(1826)는 이미지 또는 텍스트를 제공할 수 있는 모든 전자 디스플레이이다. 적절한 디스플레이(1826)로는 음극선관("CRT"), 액정 디스플레이("LCD") 등이 있다.
주목할 사항으로서, 상기 설명에서는 AGP, PCI 및 ISA 또는 EISA 버스를 예로서 이용했지만, 필요에 따라 어떠한 버스 아키텍쳐로도 대신할 수 있다. 또한, 주목할 사항으로서, 컴퓨터 시스템(1800)은 부가적인 다중 프로세서 컴퓨터(예를 들어, 컴퓨터 시스템(1800)의 임의의 구성 요소로서 나타낸 다중 프로세서 컴퓨터(10a) 등)를 포함하는 다중 처리 컴퓨터 시스템이 될 수 있다. 다중 프로세서 컴퓨터(10a)는 다중 프로세서 컴퓨터(10)와 유사하다. 보다 특정하게, 다중 프로세서 컴퓨터(10a)는 다중 프로세서 컴퓨터(10)의 동일한 카피가 될 수 있다. 다중 프로세서 컴퓨터(10a)는 (도 5에 나타낸 바와 같이) 독립적인 버스를 통해 버스 브리지(1802)에 접속되거나, 또는 프로세서(10)와 함께 CPU 버스(1824)를 공유할 수 있다. 또한, 프로세서(10a)는 L2 캐시(1828)와 유사한 임의의 L2 캐시(1828a)에 결합될 수 있다.
주목할 사항으로서, 본 설명은 다양한 신호의 어써션(assertion)에 대해 참조한다. 본원에서, 어떠한 신호가 특정 상태를 나타내는 값을 전달하는 경우, 그 신호는 "어써트된다". 반대로, 어떠한 신호가 특정 상태의 결여를 나타내는 값을 전달하는 경우, 이 신호는 "디어써트된다". 신호는, 그것이 논리 0값을 전달할 때, 또는 반대로 그것이 논리 1값을 전달할 때 어써트되는 것으로 정의될 수 있다. 또한, 상기 설명에서는 다양한 값들이 폐기되는 것으로 설명되었다. 값은 많은 방식으로 폐기될 수 있지만, 일반적으로는, 값을 변경함으로써, 그 값을 수신하는 논리 회로가 그것을 무시하도록 하는 것을 포함한다. 예를 들어, 값이 비트를 포함하는 경우에는, 그 값의 논리 상태를 반전시켜 그 값을 폐기할 수 있다. 값이 n 비트 값인 경우, n 비트 엔코딩중 하나는 그 값이 무효임을 나타낼 수 있다. 값을 무효 엔코딩으로 세트시킴으로써, 그 값은 폐기된다. 또한, n 비트 값은, 세트될 때 그 n 비트 값이 유효함을 나타내는 유효 비트를 포함할 수 있다. 유효 비트를 리셋하는 것은 그 값을 폐기하는 것을 포함한다. 값을 폐기하는 그 외의 방법이 이용될 수 있다.
상기 개시를 완전히 인식하게 되면, 다양한 수정 및 변형이 당업자에게 명백해질 것이다. 첨부된 청구항은 이러한 모든 수정 및 변경을 포함하는 것으로 의도된다.
본 발명은 다중 처리 컴퓨터 시스템에 적용될 수 있다.

Claims (29)

  1. 복수의 프로세서와, 여기서 상기 복수의 프로세서 각각은 레지스터 파일, 재배열 버퍼 및 추론적인 다중 스레드 실행을 지원하는 회로를 포함하며;
    제 1 프로세서의 재배열 버퍼 내의 엔트리를 제 2 프로세서의 재배열 버퍼 내의 엔트리에 맵핑하는 재배열 버퍼 태그 변환 버퍼와; 그리고
    상기 복수의 프로세서 간의 명령을 저장 및 전송하는 스레드 제어 디바이스를 포함하고, 여기서 상기 명령은 상기 프로세서 상에서의 스레드의 추론적인 실행을 지원하며, 상기 스레드는 병렬적으로 실행되는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  2. 제 1 항에 있어서,
    상기 회로는 상기 스레드 실행의 동기화를 지원하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  3. 제 2 항에 있어서,
    상기 회로는 프로세서 간 통신 유닛을 포함하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  4. 제 3 항에 있어서,
    상기 프로세서 간 통신 유닛은 예약 스테이션을 포함하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  5. 제 3 항에 있어서,
    상기 프로세서간 통신 유닛은 예약 스테이션, 로크된 판독 예약 스테이션, 로크된 기록 예약 스테이션 및 스크래치패드 기능 유닛을 포함하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  6. 제 5 항에 있어서,
    상기 다중 프로세서 컴퓨터는 스크래치패드 명령을 포함하고, 상기 스크래치패드 명령은 제 1 프로세서 상에서 실행되는 제 1 스레드와 제 2 프로세서 상에서 실행되는 제 2 스레드 간의 공유 데이터의 교환을 지원하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  7. 제 1 항에 있어서,
    상기 다중 프로세서 컴퓨터는 복수의 상기 재배열 버퍼 태그 변환 버퍼를 포함하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  8. 제 1 항에 있어서,
    상기 스레드 제어 디바이스는 상기 프로세서 상에서의 상기 스레드의 실행을 동기시키는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  9. 제 8 항에 있어서, 상기 스레드 제어 디바이스는:
    저장 버퍼와; 그리고
    상기 프로세서 상에서의 상기 스레드의 동기를 지원하는 동기 논리부를 포함하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  10. 제 9 항에 있어서,
    상기 스레드 제어 디바이스는 복수의 스크래치패드 레지스터를 더 포함하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  11. 제 9 항에 있어서,
    상기 저장 버퍼는 복수의 FIFO를 포함하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  12. 제 8 항에 있어서, 상기 스레드 실행의 동기는:
    상기 제 1 프로세서가 제 1 동기 명령을 실행하고,
    상기 제 2 프로세서가 제 2 동기 명령을 실행하고;
    상기 제 1 동기 명령이 상기 제 1 프로세서에서 퇴거 준비가 되었고, 상기 제 2 프로세서 내의 상기 제 2 동기 명령이 퇴거 준비가 되지 않았음을 검출하는 것에 응답하여, 상기 제 1 프로세서가 상기 제 1 프로세서 상에서의 상기 스레드의 실행을 정지시키고;
    상기 제 2 동기 명령이 상기 제 2 프로세서에서 퇴거 준비가 되었고, 상기 제 1 프로세서 내의 상기 제 1 동기 명령이 퇴거 준비가 되지 않았음을 검출하는 것에 응답하여, 상기 제 2 프로세서가 상기 제 2 프로세서 상에서의 실행을 정지시키고;
    상기 제 1 동기 명령 및 상기 제 2 동기 명령이 모두 퇴거 준비가 되었음을 검출하는 것에 응답하여, 상기 제 1 프로세서가 상기 제 1 프로세서 상에서의 상기 스레드의 실행을 계속하고; 그리고
    상기 제 1 동기 명령 및 상기 제 2 동기 명령이 모두 퇴거 준비가 되었음을 검출하는 것에 응답하여, 상기 제 2 프로세서가 상기 제 2 프로세서 상에서의 상기 스레드의 실행을 계속하는 것을 포함하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  13. 제 8 항에 있어서, 상기 스레드 실행의 동기는:
    상기 제 1 프로세서가 제 1 동기 명령을 실행하고,
    상기 제 2 프로세서가 제 2 동기 명령을 실행하고;
    상기 제 1 동기 명령이 상기 제 1 프로세서에서 퇴거 준비가 되었고, 상기 제 2 프로세서 내의 상기 제 2 동기 명령이 퇴거 준비가 되지 않았음을 검출하는 것에 응답하여, 상기 제 1 프로세서가 상기 제 1 프로세서 상에서의 상기 스레드의 실행을 정지시키고;
    상기 제 2 동기 명령이 상기 제 2 프로세서에서 퇴거 준비가 되었고, 상기 제 1 프로세서 내의 상기 제 1 동기 명령이 퇴거 준비가 되지 않았음을 검출하는 것에 응답하여, 상기 제 2 프로세서가 상기 제 2 프로세서 상에서의 실행을 정지시키고;
    상기 제 1 동기 명령 및 상기 제 2 동기 명령이 모두 퇴거 준비가 되었음을 검출하는 것에 응답하여, 상기 제 1 프로세서가 상기 제 1 동기 명령을 퇴거하고;
    상기 제 1 동기 명령 및 상기 제 2 동기 명령이 모두 퇴거 준비가 되었음을 검출하는 것에 응답하여, 상기 제 2 프로세서가 상기 제 2 동기 명령을 퇴거하고;
    상기 제 1 프로세서 내의 상기 제 1 동기 명령이 퇴거되었고, 상기 제 2 프로세서 내의 상기 제 2 동기 명령이 퇴거되지 않았음을 검출하는 것에 응답하여, 상기 제 1 프로세서가 상기 제 1 프로세서 상에서의 상기 스레드의 실행을 정지시키고;
    상기 제 2 프로세서 내의 상기 제 2 동기 명령이 퇴거되었고, 상기 제 1 프로세서 내의 상기 제 1 동기 명령이 퇴거되지 않았음을 검출하는 것에 응답하여, 상기 제 2 프로세서가 상기 제 2 프로세서 상에서의 상기 스레드의 실행을 정지시키고;
    상기 제 1 동기 명령 및 상기 제 2 동기 명령이 퇴거되었음을 검출하는 것에 응답하여, 상기 제 1 프로세서가 상기 제 1 프로세서 상에서의 상기 스레드의 실행을 계속하고; 그리고
    상기 제 1 동기 명령 및 상기 제 2 동기 명령이 퇴거되었음을 검출하는 것에 응답하여, 상기 제 2 프로세서가 상기 제 2 프로세서 상에서의 상기 스레드의 실행을 계속하는 것을 포함하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  14. 제 1 항에 있어서,
    상기 복수의 프로세서중 제 1 프로세서는 마스터이고, 상기 마스터는 상기 다중 프로세서 컴퓨터 상에서 모든 단일 스레드 코드를 실행하는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  15. 제 14 항에 있어서,
    복수의 다중 스레드 명령을 더 포함하고;
    상기 복수의 다중 스레드 명령중 제 1 명령에 응답하여, 상기 마스터는 상기 마스터의 레지스터 파일로부터의 데이터를 제 2 프로세서에 전달하고;
    상기 복수의 다중 스레드 명령중 제 2 명령에 응답하여, 상기 제 2 프로세서는 상기 제 2 프로세서의 레지스터 파일로부터의 데이터를 상기 마스터에 전달하고;
    상기 복수의 다중 스레드 명령중 제 3 명령에 응답하여, 상기 제 2 프로세서는 명령의 스레드의 실행을 시작하고;
    상기 복수의 다중 스레드 명령중 제 4 명령에 응답하여, 상기 제 2 프로세서는 상기 명령의 스레드의 실행을 종료하고; 그리고
    상기 복수의 다중 스레드 명령중 제 5 명령에 응답하여, 상기 마스터 및 상기 제 2 프로세서는 스레드 실행을 동기시키는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  16. 제 15 항에 있어서,
    상기 제 1 명령은 Wr2Proc 명령이고, 상기 제 2 명령은 RdFrProc 명령이고, 상기 제 3 명령은 Fork 명령이고, 상기 제 4 명령은 Join 명령이고, 상기 제 5 명령은 Sync 명령인 것을 특징으로 하는 다중 프로세서 컴퓨터.
  17. 제 15 항에 있어서,
    상기 제 1 명령, 상기 제 2 명령 및 상기 제 3 명령은 상기 제 2 프로세서에서 추론적으로 실행되는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  18. 제 15 항에 있어서,
    상기 제 1 명령이 상기 제 2 프로세서의 상기 재배열 버퍼에서 퇴거 준비가 되었음을 검출하고, 상기 제 1 명령이 상기 마스터의 재배열 버퍼로부터 퇴거되었다는 표시를 상기 마스터로부터 수신하는 것에 응답하여, 상기 제 1 명령이 상기 제 2 프로세서의 재배열 버퍼로부터 퇴거되고,
    상기 제 3 명령이 상기 제 2 프로세서의 상기 재배열 버퍼에서 퇴거 준비가 되었음을 검출하고, 상기 제 3 명령이 상기 마스터의 상기 재배열 버퍼로부터 퇴거되었다는 표시를 상기 마스터로부터 수신하는 것에 응답하여, 상기 제 3 명령이 상기 제 2 프로세서의 상기 재배열 버퍼로부터 퇴거되는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  19. 제 15 항에 있어서,
    상기 제 1 명령이 상기 제 2 프로세서의 상기 재배열 버퍼에서 퇴거 준비가 된 것을 검출하고, 상기 제 3 명령이 상기 마스터의 재배열 버퍼로부터 퇴거되었다는 표시를 상기 마스터로부터 수신하는 것에 응답하여, 상기 제 1 명령이 상기 제 2 프로세서의 재배열 버퍼로부터 퇴거되고,
    상기 제 3 명령이 상기 제 2 프로세서의 상기 재배열 버퍼에서 퇴거 준비가 된 것을 검출하고, 상기 제 3 명령이 상기 마스터의 상기 재배열 버퍼로부터 퇴거되었다는 표시를 상기 마스터로부터 수신하는 것에 응답하여, 상기 제 3 명령이 상기 제 2 프로세서의 상기 재배열 버퍼로부터 퇴거되는 것을 특징으로 하는 다중 프로세서 컴퓨터.
  20. 제 2 프로세서 상에서의 스레드의 실행을 위해 스레드 셋업을 행하는 단계와, 여기서 상기 셋업은 제 1 프로세서가 셋업 명령을 상기 제 2 프로세서에 전달하는 것을 포함하고, 상기 셋업 명령은 상기 제 2 프로세서 상에서 추론적으로 실행되며;
    상기 제 1 프로세서에 재배열 버퍼의 재배열 버퍼 태그를 저장하는 단계와, 여기서 상기 재배열 버퍼 태그는 상기 셋업 명령의 제 1 명령을 포함하는 상기 제 1 프로세서의 상기 재배열 버퍼 내의 위치에 대응하며;
    상기 제 1 프로세서로부터 상기 제 2 프로세서에 개시 명령을 전달하는 단계와, 여기서 상기 개시 명령은 상기 제 2 프로세서 상에서 추론적으로 실행되며;
    상기 개시 명령의 수신에 응답하여, 상기 제 2 프로세서 상에서 상기 스레드를 실행하는 단계와, 여기서 상기 스레드는 추론적으로 실행되고, 상기 스레드는 상기 제 1 프로세서 상에서의 스레드의 실행과 병렬적으로 실행되며;
    상기 제 2 프로세서 상에서의 상기 스레드의 실행을 종료하는 단계와, 여기서 상기 종료는 상기 제 2 프로세서에서 제 1 종료 명령을 퇴거하는 것을 포함하고;
    상기 제 2 프로세서가 검색 결과 명령을 수신하는 것에 응답하여, 상기 제 2 프로세서 상에서의 상기 스레드의 실행 결과를 상기 제 1 프로세서에 전달하는 단계와, 여기서 상기 검색 결과 명령은 상기 제 2 프로세서에 의해 추론적으로 실행되고; 그리고
    재배열 버퍼 태그 변환 버퍼를 갱신하는 단계를 포함하고, 상기 갱신은 상기 제 2 프로세서의 상기 재배열 버퍼의 재배열 버퍼 태그를 상기 재배열 버퍼 내의 위치에 저장하는 것을 포함하고, 상기 제 2 프로세서의 상기 재배열 버퍼의 상기 재배열 버퍼 태그는 상기 제 2 프로세서의 상기 재배열 버퍼 내의 상기 제 1 명령의 위치에 대응하며, 상기 변환 버퍼 내의 상기 위치는 상기 제 1 프로세서의 상기 재배열 버퍼의 상기 재배열 버퍼 태그에 의해 선택되는 것을 특징으로 하는 방법.
  21. 제 20 항에 있어서, 상기 결과를 전달하는 단계는:
    상기 제 1 프로세서로부터의 검색 결과 명령을 제 1 FIFO에 저장하는 단계와;
    상기 제 2 프로세서에 의해 상기 제 1 FIFO로부터 상기 검색 결과 명령을 판독하는 단계와;
    상기 제 2 프로세서에 의해 상기 제 2 프로세서의 레지스터 파일로부터 데이터를 판독하는 단계와, 여기서 상기 데이터는 상기 제 2 프로세서의 상기 레지스터 파일 내의 위치에 대응하고, 상기 위치는 상기 검색 결과 명령에 의해 표시되며;
    상기 데이터를 제 2 FIFO에 저장하는 단계와; 그리고
    상기 제 1 프로세서에 의해 상기 제 2 FIFO로부터 상기 데이터를 판독하는 단계를 포함하는 것을 특징으로 하는 방법.
  22. 제 20 항에 있어서,
    상기 결과를 전달하는 단계는 상기 제 2 프로세서에서의 상기 제 1 종료 명령의 퇴거 이후에 계속되고, 상기 전달 단계는 상기 제 1 프로세서에서의 제 2 종료 명령의 퇴거 이후에 계속되는 것을 특징으로 하는 방법.
  23. 제 20 항에 있어서,
    상기 제 1 프로세서 상에서의 상기 스레드의 실행과 상기 제 2 프로세서 상에서의 상기 스레드의 실행을 동기시키는 단계를 더 포함하는 것을 특징으로 하는 방법.
  24. 제 23 항에 있어서, 상기 동기 단계는:
    상기 제 1 프로세서 상에서 제 1 동기 명령을 실행하는 단계와;
    상기 제 2 프로세서 상에서 제 2 동기 명령을 실행하는 단계와;
    상기 제 1 동기 명령이 퇴거 준비가 되었고 상기 제 2 동기 명령이 퇴거 준비가 되지 않았음을 검출하는 것에 응답하여, 상기 제 1 프로세서 상에서의 상기 스레드의 실행을 정지시키는 단계와;
    상기 제 2 동기 명령이 퇴거 준비가 되었고 상기 제 1 동기 명령이 퇴거 준비가 되지 않았음을 검출하는 것에 응답하여, 상기 제 2 프로세서 상에서의 상기 스레드의 실행을 정지시키는 단계와; 그리고
    상기 제 1 동기 명령 및 상기 제 2 동기 명령 모두가 퇴거 준비가 되었음을 검출하는 것에 응답하여, 상기 제 1 프로세서 상에서의 상기 스레드 및 상기 제 2 프로세서 상에서의 상기 스레드의 실행을 계속하는 단계를 포함하는 것을 특징으로 하는 방법.
  25. 제 23 항에 있어서, 상기 동기 단계는:
    상기 제 1 프로세서 상에서 제 1 동기 명령을 실행하는 단계와;
    상기 제 2 프로세서 상에서 제 2 동기 명령을 실행하는 단계와;
    상기 제 1 동기 명령이 퇴거 준비가 되었고 상기 제 2 동기 명령이 퇴거 준비가 되지 않았음을 검출하는 것에 응답하여, 상기 제 1 프로세서 상에서의 상기 스레드의 실행을 정지시키는 단계와;
    상기 제 2 동기 명령이 퇴거 준비가 되었고 상기 제 1 동기 명령이 퇴거 준비가 되지 않았음을 검출하는 것에 응답하여, 상기 제 2 프로세서 상에서의 상기 스레드의 실행을 정지시키는 단계와;
    상기 제 1 동기 명령 및 상기 제 2 동기 명령 모두가 퇴거 준비가 되었음을 검출하는 것에 응답하여, 상기 제 1 동기 명령 및 상기 제 2 동기 명령을 퇴거하는 단계와;
    상기 제 1 동기 명령이 퇴거되었고 상기 제 2 동기 명령이 퇴거되지 않았음을 검출하는 것에 응답하여, 상기 제 1 프로세서 상에서의 상기 스레드의 실행을 정지시키는 단계와;
    상기 제 2 동기 명령이 퇴거되었고 상기 제 1 동기 명령이 퇴거되지 않았음을 검출하는 것에 응답하여, 상기 제 2 프로세서 상에서의 상기 스레드의 실행을 정지시키는 단계와; 그리고
    상기 제 1 동기 명령 및 상기 제 2 동기 명령 모두가 퇴거되었음을 검출하는 것에 응답하여, 상기 제 1 프로세서 상에서의 상기 스레드 및 상기 제 2 프로세서 상에서의 상기 스레드의 실행을 계속하는 단계를 포함하는 것을 특징으로 하는 방법.
  26. 제 20 항에 있어서,
    상기 제 1 셋업 명령이 상기 제 2 프로세서의 상기 재배열 버퍼에서 퇴거 준비가 되었음을 검출하고, 상기 제 1 셋업 명령이 상기 제 1 프로세서 내의 재배열 버퍼로부터 퇴거되었다는 표시를 상기 제 1 프로세서로부터 수신하는 것에 응답하여, 상기 제 2 프로세서의 재배열 버퍼로부터 상기 셋업 명령의 제 1 셋업 명령을 퇴거하는 단계와; 그리고
    상기 개시 명령이 상기 제 2 프로세서의 상기 재배열 버퍼에서 퇴거 준비가 되었음을 검출하고, 상기 개시 명령이 상기 제 1 프로세서 내의 상기 재배열 버퍼로부터 퇴거되었다는 표시를 상기 제 1 프로세서로부터 수신하는 것에 응답하여, 상기 제 2 프로세서의 재배열 버퍼로부터 상기 개시 명령을 퇴거하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  27. 제 20 항에 있어서,
    상기 셋업 명령이 상기 제 2 프로세서의 상기 재배열 버퍼에서 퇴거 준비가 되었음을 검출하고, 상기 개시 명령이 상기 제 1 프로세서 내의 재배열 버퍼로부터 퇴거되었다는 표시를 상기 제 1 프로세서로부터 수신하는 것에 응답하여, 상기 제 2 프로세서의 재배열 버퍼로부터 상기 셋업 명령을 퇴거하는 단계와; 그리고
    상기 개시 명령이 상기 제 2 프로세서의 상기 재배열 버퍼에서 퇴거 준비가 되었음을 검출하고, 상기 개시 명령이 상기 제 1 프로세서 내의 상기 재배열 버퍼로부터 퇴거되었다는 표시를 상기 제 1 프로세서로부터 수신하는 것에 응답하여, 상기 제 2 프로세서의 상기 재배열 버퍼로부터 상기 개시 명령을 퇴거하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  28. 제 20 항에 있어서,
    상기 제 1 프로세서에 의해 스크래치패드 명령을 디코딩하는 단계와, 여기서 상기 디코딩은 복수의 동작을 생성하고, 상기 복수의 동작은 스크래치패드 기능 유닛 및 제 1 재배열 버퍼에 전달되고, 상기 복수의 동작은 로크된 판독 동작, ALU 동작 및 로크된 기록 동작을 포함하고;
    상기 로크된 판독 동작을 로크된 판독 예약 스테이션에 저장하고, 상기 로크된 기록 동작을 로크된 기록 예약 스테이션에 저장하는 단계와;
    상기 로크된 판독 예약 스테이션 내의 이전의 모든 로크된 판독 동작이 완료되었음을 검출하는 것에 응답하여, 상기 로크된 판독 예약 스테이션으로부터 상기 로크된 판독 동작을 발행하는 단계와;
    저장소 내의 위치를 로크하는 단계와, 여기서 상기 위치가 로크되지 않았음을 검출하는 것에 응답하여, 상기 위치는 상기 로크된 판독 동작에 의해 로크되며;
    상기 로크된 위치의 콘텐츠를 판독하는 단계와;
    상기 로크된 기록 동작이 그의 입력 오퍼랜드를 수신하였으며, 상기 로크된 기록 동작이 상기 제 1 재배열 버퍼 내에서 다음으로 퇴거될 것임을 검출하는 것에 응답하여, 상기 로크된 기록 예약 스테이션으로부터 상기 로크된 기록 동작을 발행하는 단계와;
    상기 위치에 데이터를 저장하는 단계와;
    상기 위치를 언로크하는 단계와; 그리고
    상기 로크된 판독 동작 및 상기 로크된 기록 동작이 완료되었음을 검출하는 것에 응답하여, 상기 로크된 판독 예약 스테이션으로부터 상기 로크된 판독 동작을 제거하고, 상기 로크된 기록 예약 스테이션으로부터 상기 로크된 기록 동작을 제거하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  29. 제 28 항에 있어서,
    재배열 버퍼 내의 분기 명령이 오예측되었음을 검출하는 단계와;
    상기 재배열 버퍼 내의 상기 분기 명령 이후의 복수의 명령을 무효화하는 단계와;
    상기 복수의 명령중 하나가 로크된 명령임을 검출하는 단계와;
    복수의 재배열 버퍼 태그를 스크래치패드 기능 유닛에 전달하는 단계와, 여기서 상기 재배열 버퍼 태그는 상기 로크된 명령에 대응하고, 상기 로크된 명령은 상기 분기 명령 이후의 상기 제 1 재배열 버퍼 내의 제 1 로크된 명령이며;
    상기 스크래치패드 기능 유닛 내의 로크된 명령을 무효화하는 단계와, 여기서 상기 로크된 명령은 상기 복수의 재배열 버퍼 태그에 대응하며; 그리고
    상기 로크된 명령중 하나가 로크된 판독 명령임을 검출하는 것에 응답하여, 스크래치패드 레지스터 내의 위치를 언로크하는 단계를 포함하고, 상기 로크된 판독 명령은 로크된 판독 예약 스테이션의 선두이며, 상기 로크된 판독 명령은 발행된 것을 특징으로 하는 방법.
KR1020027005631A 1999-11-01 2000-07-31 밀접하게 결합된 다중 프로세서를 위한 고속의 다중 스레딩 KR100734529B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/431,358 US6574725B1 (en) 1999-11-01 1999-11-01 Method and mechanism for speculatively executing threads of instructions
US09/431,358 1999-11-01

Publications (2)

Publication Number Publication Date
KR20020087928A KR20020087928A (ko) 2002-11-23
KR100734529B1 true KR100734529B1 (ko) 2007-07-04

Family

ID=23711587

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020027005631A KR100734529B1 (ko) 1999-11-01 2000-07-31 밀접하게 결합된 다중 프로세서를 위한 고속의 다중 스레딩

Country Status (7)

Country Link
US (1) US6574725B1 (ko)
EP (1) EP1226498B1 (ko)
JP (1) JP4578042B2 (ko)
KR (1) KR100734529B1 (ko)
CN (1) CN1199099C (ko)
DE (1) DE60036016T2 (ko)
WO (1) WO2001033352A1 (ko)

Families Citing this family (82)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6922409B1 (en) 1998-02-20 2005-07-26 Sprint Communications Company L.P. System and method for allocating bandwidth for a call
US6341338B1 (en) * 1999-02-04 2002-01-22 Sun Microsystems, Inc. Protocol for coordinating the distribution of shared memory
US7996843B2 (en) 1999-08-25 2011-08-09 Qnx Software Systems Gmbh & Co. Kg Symmetric multi-processor system
US6684398B2 (en) * 2000-05-31 2004-01-27 Sun Microsystems, Inc. Monitor entry and exit for a speculative thread during space and time dimensional execution
US7051192B2 (en) * 2000-05-31 2006-05-23 Sun Microsystems, Inc. Facilitating value prediction to support speculative program execution
US6986130B1 (en) 2000-07-28 2006-01-10 Sun Microsystems, Inc. Methods and apparatus for compiling computer programs using partial function inlining
US6910107B1 (en) * 2000-08-23 2005-06-21 Sun Microsystems, Inc. Method and apparatus for invalidation of data in computer systems
WO2002046917A1 (en) * 2000-12-07 2002-06-13 Koninklijke Philips Electronics N.V. Digital signal processing apparatus
US6928645B2 (en) * 2001-03-30 2005-08-09 Intel Corporation Software-based speculative pre-computation and multithreading
US7752423B2 (en) * 2001-06-28 2010-07-06 Intel Corporation Avoiding execution of instructions in a second processor by committing results obtained from speculative execution of the instructions in a first processor
JP3702813B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US7383421B2 (en) 2002-12-05 2008-06-03 Brightscale, Inc. Cellular engine for a data processing system
US7107478B2 (en) * 2002-12-05 2006-09-12 Connex Technology, Inc. Data processing system having a Cartesian Controller
US7461213B2 (en) 2002-10-08 2008-12-02 Rmi Corporation Advanced processor system using request, data, snoop, and response rings
US7334086B2 (en) * 2002-10-08 2008-02-19 Rmi Corporation Advanced processor with system on a chip interconnect technology
US7984268B2 (en) * 2002-10-08 2011-07-19 Netlogic Microsystems, Inc. Advanced processor scheduling in a multithreaded system
US8015567B2 (en) * 2002-10-08 2011-09-06 Netlogic Microsystems, Inc. Advanced processor with mechanism for packet distribution at high line rate
US8478811B2 (en) 2002-10-08 2013-07-02 Netlogic Microsystems, Inc. Advanced processor with credit based scheme for optimal packet flow in a multi-processor system on a chip
US9088474B2 (en) 2002-10-08 2015-07-21 Broadcom Corporation Advanced processor with interfacing messaging network to a CPU
US20050044324A1 (en) * 2002-10-08 2005-02-24 Abbas Rashid Advanced processor with mechanism for maximizing resource usage in an in-order pipeline with multiple threads
US20040103248A1 (en) * 2002-10-08 2004-05-27 Hass David T. Advanced telecommunications processor
US7924828B2 (en) * 2002-10-08 2011-04-12 Netlogic Microsystems, Inc. Advanced processor with mechanism for fast packet queuing operations
US8037224B2 (en) 2002-10-08 2011-10-11 Netlogic Microsystems, Inc. Delegating network processor operations to star topology serial bus interfaces
US7627721B2 (en) 2002-10-08 2009-12-01 Rmi Corporation Advanced processor with cache coherency
US7961723B2 (en) * 2002-10-08 2011-06-14 Netlogic Microsystems, Inc. Advanced processor with mechanism for enforcing ordering between information sent on two independent networks
US7346757B2 (en) 2002-10-08 2008-03-18 Rmi Corporation Advanced processor translation lookaside buffer management in a multithreaded system
US7603664B2 (en) * 2002-10-22 2009-10-13 Sun Microsystems, Inc. System and method for marking software code
US7346902B2 (en) * 2002-10-22 2008-03-18 Sun Microsystems, Inc. System and method for block-based concurrentization of software code
US7222218B2 (en) * 2002-10-22 2007-05-22 Sun Microsystems, Inc. System and method for goal-based scheduling of blocks of code for concurrent execution
US7765532B2 (en) * 2002-10-22 2010-07-27 Oracle America, Inc. Inducing concurrency in software code
US7237041B2 (en) * 2002-12-02 2007-06-26 Adc Telecommunications, Inc. Systems and methods for automatic assignment of identification codes to devices
US6996639B2 (en) * 2002-12-10 2006-02-07 Intel Corporation Configurably prefetching head-of-queue from ring buffers
US7657880B2 (en) * 2003-01-31 2010-02-02 Intel Corporation Safe store for speculative helper threads
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US6981128B2 (en) * 2003-04-24 2005-12-27 International Business Machines Corporation Atomic quad word storage in a simultaneous multithreaded system
JP4028444B2 (ja) * 2003-06-27 2007-12-26 株式会社東芝 スケジューリング方法およびリアルタイム処理システム
US6862027B2 (en) * 2003-06-30 2005-03-01 Microsoft Corp. System and method for parallel execution of data generation tasks
CN1816806A (zh) * 2003-07-02 2006-08-09 皇家飞利浦电子股份有限公司 系统、方法、程序、编译器和记录载体
US7107367B1 (en) * 2003-08-12 2006-09-12 Advanced Micro Devices, Inc. Method for efficient buffer tag allocation
US7496921B2 (en) * 2003-08-29 2009-02-24 Intel Corporation Processing block with integrated light weight multi-threading support
US7181601B2 (en) * 2003-12-08 2007-02-20 Intel Corporation Method and apparatus for prediction for fork and join instructions in speculative execution
US7310722B2 (en) 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US8301844B2 (en) * 2004-01-13 2012-10-30 Hewlett-Packard Development Company, L.P. Consistency evaluation of program execution across at least one memory barrier
US7302554B2 (en) * 2004-04-22 2007-11-27 Sony Computer Entertainment Inc. Methods and apparatus for multi-processor pipeline parallelism
US7543132B1 (en) * 2004-06-30 2009-06-02 Sun Microsystems, Inc. Optimizing hardware TLB reload performance in a highly-threaded processor with multiple page sizes
US7426612B2 (en) * 2004-06-30 2008-09-16 Intel Corporation Methods and apparatus for enforcing instruction-cache coherence
GB0415851D0 (en) * 2004-07-15 2004-08-18 Imagination Tech Ltd Microprocessor output ports and control of instructions provided therefrom
US8166282B2 (en) * 2004-07-21 2012-04-24 Intel Corporation Multi-version register file for multithreading processors with live-in precomputation
JP2006079394A (ja) * 2004-09-10 2006-03-23 Renesas Technology Corp データ処理装置
CA2484694A1 (en) * 2004-10-14 2006-04-14 Alcatel Database ram cache
US7802023B2 (en) * 2004-10-15 2010-09-21 Sony Computer Entertainment Inc. Methods and apparatus for supporting multiple configurations in a multi-processor system
US8719819B2 (en) 2005-06-30 2014-05-06 Intel Corporation Mechanism for instruction set based thread execution on a plurality of instruction sequencers
US7721054B2 (en) * 2005-01-18 2010-05-18 Texas Instruments Incorporated Speculative data loading using circular addressing or simulated circular addressing
WO2006122990A2 (es) * 2005-05-19 2006-11-23 Intel Corporation Aparato, sistema y método de dispositivo de memoria para conjuntos múltiples de instrucciones de tipo especulativo
US7730263B2 (en) * 2006-01-20 2010-06-01 Cornell Research Foundation, Inc. Future execution prefetching technique and architecture
US8766995B2 (en) * 2006-04-26 2014-07-01 Qualcomm Incorporated Graphics system with configurable caches
US20070268289A1 (en) * 2006-05-16 2007-11-22 Chun Yu Graphics system with dynamic reposition of depth engine
US8884972B2 (en) * 2006-05-25 2014-11-11 Qualcomm Incorporated Graphics processor with arithmetic and elementary function units
US8869147B2 (en) * 2006-05-31 2014-10-21 Qualcomm Incorporated Multi-threaded processor with deferred thread output control
US8644643B2 (en) * 2006-06-14 2014-02-04 Qualcomm Incorporated Convolution filtering in a graphics processor
US8766996B2 (en) * 2006-06-21 2014-07-01 Qualcomm Incorporated Unified virtual addressed register file
GB0613289D0 (en) 2006-07-04 2006-08-16 Imagination Tech Ltd Synchronisation of execution threads on a multi-threaded processor
US8010550B2 (en) * 2006-11-17 2011-08-30 Microsoft Corporation Parallelizing sequential frameworks using transactions
US8024714B2 (en) 2006-11-17 2011-09-20 Microsoft Corporation Parallelizing sequential frameworks using transactions
DE102007025397B4 (de) * 2007-05-31 2010-07-15 Advanced Micro Devices, Inc., Sunnyvale System mit mehreren Prozessoren und Verfahren zu seinem Betrieb
US8966488B2 (en) * 2007-07-06 2015-02-24 XMOS Ltd. Synchronising groups of threads with dedicated hardware logic
US9596324B2 (en) * 2008-02-08 2017-03-14 Broadcom Corporation System and method for parsing and allocating a plurality of packets to processor core threads
US7941644B2 (en) * 2008-10-16 2011-05-10 International Business Machines Corporation Simultaneous multi-thread instructions issue to execution units while substitute injecting sequence of instructions for long latency sequencer instruction via multiplexer
US9690625B2 (en) * 2009-06-16 2017-06-27 Oracle America, Inc. System and method for out-of-order resource allocation and deallocation in a threaded machine
JP2011034401A (ja) * 2009-08-03 2011-02-17 Ricoh Co Ltd 情報処理装置、情報処理方法及びそのプログラム
US9075764B2 (en) * 2010-08-11 2015-07-07 Apple Inc. Multiprocessor system-on-a-chip for machine vision algorithms
US8499305B2 (en) * 2010-10-15 2013-07-30 Via Technologies, Inc. Systems and methods for performing multi-program general purpose shader kickoff
KR101686010B1 (ko) 2010-12-21 2016-12-13 삼성전자주식회사 실시간 멀티코어 시스템의 동기화 스케쥴링 장치 및 방법
JP5672311B2 (ja) * 2010-12-22 2015-02-18 富士通株式会社 同期処理方法
KR101984635B1 (ko) * 2012-07-19 2019-05-31 삼성전자주식회사 어플리케이션을 고속으로 처리하는 연산 처리 장치 및 방법
US9229791B1 (en) * 2012-08-24 2016-01-05 Qlogic, Corporation System and method for high speed multiple buffer allocation
US9710275B2 (en) * 2012-11-05 2017-07-18 Nvidia Corporation System and method for allocating memory of differing properties to shared data objects
EP2806361B1 (en) * 2013-05-22 2020-03-04 Teknologian Tutkimuskeskus VTT Memory unit for emulated shared memory architectures
US9218223B2 (en) 2013-08-13 2015-12-22 Qualcomm Incorporated Barrier synchronization with dynamic width calculation
US20160147536A1 (en) * 2014-11-24 2016-05-26 International Business Machines Corporation Transitioning the Processor Core from Thread to Lane Mode and Enabling Data Transfer Between the Two Modes
US11119972B2 (en) * 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
US11288072B2 (en) * 2019-09-11 2022-03-29 Ceremorphic, Inc. Multi-threaded processor with thread granularity

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5430850A (en) 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
JP3309425B2 (ja) * 1992-05-22 2002-07-29 松下電器産業株式会社 キャッシュ制御装置
US5594741A (en) * 1993-03-31 1997-01-14 Digital Equipment Corporation Method for control of random test vector generation
JPH0784851A (ja) * 1993-09-13 1995-03-31 Toshiba Corp 共有データ管理方法
US5721857A (en) * 1993-12-30 1998-02-24 Intel Corporation Method and apparatus for saving the effective address of floating point memory operations in an out-of-order microprocessor
US5632023A (en) * 1994-06-01 1997-05-20 Advanced Micro Devices, Inc. Superscalar microprocessor including flag operand renaming and forwarding apparatus
JP3169779B2 (ja) 1994-12-19 2001-05-28 日本電気株式会社 マルチスレッドプロセッサ
US5724565A (en) 1995-02-03 1998-03-03 International Business Machines Corporation Method and system for processing first and second sets of instructions by first and second types of processing systems
US5828880A (en) 1995-07-06 1998-10-27 Sun Microsystems, Inc. Pipeline system and method for multiprocessor applications in which each of a plurality of threads execute all steps of a process characterized by normal and parallel steps on a respective datum
US5745703A (en) * 1995-07-18 1998-04-28 Nec Research Institute, Inc. Transmission of higher-order objects across a network of heterogeneous machines
US6058465A (en) * 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
JP2970553B2 (ja) * 1996-08-30 1999-11-02 日本電気株式会社 マルチスレッド実行方法
JP2002513486A (ja) * 1997-01-29 2002-05-08 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド スーパースカラマイクロプロセッサ用ライン指向型リオーダバッファ
US6463527B1 (en) 1997-03-21 2002-10-08 Uzi Y. Vishkin Spawn-join instruction set architecture for providing explicit multithreading
US5951672A (en) 1997-07-02 1999-09-14 International Business Machines Corporation Synchronization method for work distribution in a multiprocessor system
JPH1196005A (ja) * 1997-09-19 1999-04-09 Nec Corp 並列処理装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
논문 "A chip-multiprocessor architecture with speculative multithreading", IEEE trans. on computer

Also Published As

Publication number Publication date
DE60036016T2 (de) 2008-05-08
US6574725B1 (en) 2003-06-03
JP4578042B2 (ja) 2010-11-10
CN1384935A (zh) 2002-12-11
EP1226498B1 (en) 2007-08-15
WO2001033352A1 (en) 2001-05-10
JP2003514274A (ja) 2003-04-15
CN1199099C (zh) 2005-04-27
EP1226498A1 (en) 2002-07-31
DE60036016D1 (de) 2007-09-27
KR20020087928A (ko) 2002-11-23

Similar Documents

Publication Publication Date Title
KR100734529B1 (ko) 밀접하게 결합된 다중 프로세서를 위한 고속의 다중 스레딩
US6651163B1 (en) Exception handling with reduced overhead in a multithreaded multiprocessing system
KR100880686B1 (ko) 2개 레벨의 분기 예측 캐시를 갖는 분기 예측
Kessler The alpha 21264 microprocessor
US7213126B1 (en) Method and processor including logic for storing traces within a trace cache
US5944815A (en) Microprocessor configured to execute a prefetch instruction including an access count field defining an expected number of access
US6151662A (en) Data transaction typing for improved caching and prefetching characteristics
US10019263B2 (en) Reordered speculative instruction sequences with a disambiguation-free out of order load store queue
US5761712A (en) Data memory unit and method for storing data into a lockable cache in one clock cycle by previewing the tag array
US9965277B2 (en) Virtual load store queue having a dynamic dispatch window with a unified structure
US9904552B2 (en) Virtual load store queue having a dynamic dispatch window with a distributed structure
US10048964B2 (en) Disambiguation-free out of order load store queue
US20150205605A1 (en) Load store buffer agnostic to threads implementing forwarding from different threads based on store seniority
US6427192B1 (en) Method and apparatus for caching victimized branch predictions
US6493819B1 (en) Merging narrow register for resolution of data dependencies when updating a portion of a register in a microprocessor
EP2862058B1 (en) A semaphore method and system with out of order loads in a memory consistency model that constitutes loads reading from memory in order
US6542986B1 (en) Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor
US9990198B2 (en) Instruction definition to implement load store reordering and optimization
KR20030010727A (ko) 변환 색인 버퍼 플러시 필터
US20150095588A1 (en) Lock-based and synch-based method for out of order loads in a memory consistency model using shared memory resources
US20030074530A1 (en) Load/store unit with fast memory data access mechanism
US6460132B1 (en) Massively parallel instruction predecoding
US6535972B1 (en) Shared dependency checking for status flags
US20150095591A1 (en) Method and system for filtering the stores to prevent all stores from having to snoop check against all words of a cache
US7555633B1 (en) Instruction cache prefetch based on trace cache eviction

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: 20120611

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee