KR100810017B1 - 서로 다른 스레드에 대한 비대칭 하드웨어 멀티스레딩지원을 갖는 디지털 데이터 처리 장치 - Google Patents
서로 다른 스레드에 대한 비대칭 하드웨어 멀티스레딩지원을 갖는 디지털 데이터 처리 장치 Download PDFInfo
- Publication number
- KR100810017B1 KR100810017B1 KR1020060110854A KR20060110854A KR100810017B1 KR 100810017 B1 KR100810017 B1 KR 100810017B1 KR 1020060110854 A KR1020060110854 A KR 1020060110854A KR 20060110854 A KR20060110854 A KR 20060110854A KR 100810017 B1 KR100810017 B1 KR 100810017B1
- Authority
- KR
- South Korea
- Prior art keywords
- threads
- cache
- thread
- special class
- processor
- Prior art date
Links
- 238000012545 processing Methods 0.000 title claims abstract description 24
- 230000015654 memory Effects 0.000 claims abstract description 46
- 238000000034 method Methods 0.000 claims description 20
- 230000006870 function Effects 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 5
- 238000012423 maintenance Methods 0.000 claims description 4
- 238000011010 flushing procedure Methods 0.000 abstract description 6
- 239000000872 buffer Substances 0.000 description 18
- 238000004891 communication Methods 0.000 description 14
- 238000013461 design Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 11
- 238000007667 floating Methods 0.000 description 9
- 238000013519 translation Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 5
- 230000009467 reduction Effects 0.000 description 5
- 230000011664 signaling Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 230000001154 acute effect Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012536 packaging technology Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000010408 sweeping Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0855—Overlapped cache accessing, e.g. pipeline
- G06F12/0859—Overlapped cache accessing, e.g. pipeline with reload from main memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
- G06F9/462—Saving or restoring of program or task context with multiple register sets
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Executing Machine-Instructions (AREA)
Abstract
특수 클래스의 스레드에 대한 비대칭 하드웨어 지원이 제공된다. 양호하게는, 특수 클래스 스레드는 높은 우선순위의 I/O 바운드 스레드(I/O bound thread)이다. 제1 측면에서, 멀티스레드 방식 프로세서(multithreaded processor)는 N개의 스레드의 동시 실행을 지원하기 위해 N개의 레지스터 세트를 포함한다. 레지스터 세트들 중 적어도 하나는 특수 클래스의 스레드에 의한 사용에 전용되어 있으며, 아이들 상태에 있더라도 다른 스레드에 의해 사용될 수 없다. 제2 측면에서, 특수 클래스의 스레드는 그렇지 않으면 발생될지도 모르는 캐쉬의 플러시(flush)를 감소시키기 위해 캐쉬 메모리의 제한된 부분만을 채울 수 있다.
데이터 처리 장치, 멀티스레딩, 스레드, 비대칭 하드웨어 지원
Description
도 1은 본 발명의 양호한 실시예에 따른, 서로 다른 스레드에 대한 비대칭 하드웨어 멀티스레딩 지원을 이용하는 컴퓨터 시스템의 주요 하드웨어 컴포넌트의 상위 레벨 블록도.
도 2는 양호한 실시예에 따른, 메인 메모리의 일부분을 일시적으로 저장하기 위한 여러가지 레벨의 캐쉬 및 계층 구조 CPU를 더욱 상세히 나타낸 도면.
도 3은 양호한 실시예에 따른, 어떤 관련 캐쉬 구조를 포함하는 CPU의 주요 컴포넌트의 상위 레벨 도면.
도 4는 양호한 실시예에 따른, 관련 액세스 메카니즘을 포함하는 캐쉬의 일반적인 구조를 나타낸 도면.
도 5는 양호한 실시예에 따른, 메모리(102)의 어떤 주요 소프트웨어 컴포넌트 및 컴퓨터 시스템에서의 서로 다른 추상화 레벨에서의 하드웨어 및 소프트웨어 기능의 구분을 나타낸 개념도.
<도면의 주요 부분에 대한 부호의 설명>
101: CPU
102: 메인 메모리
105: 버스 인터페이스
106: 캐쉬
111: 단말기 인터페이스
112: 저장 장치 인터페이스
113: I/O 장치 인터페이스
114: 네트워크 인터페이스
130: 네트워크
본 발명은 디지털 데이터 처리 하드웨어에 관한 것으로서, 상세하게는 디지털 데이터 처리 장치의 처리 유닛 내에서의 다중 스레드의 동시 실행을 지원하는 디지털 데이터 처리 하드웨어의 설계 및 동작에 관한 것이다.
20세기 후반기에, 정보 혁명이라는 현상이 시작되었다. 정보 혁명이 어떤 사건 또는 기계보다 더 넓은 범위에서의 역사적 발전인 한편, 어떤 단일의 장치도 디지털 전자 컴퓨터보다 더 정보 혁명을 대표하지는 못한다. 컴퓨터 시스템의 개발은 정말로 혁명이었다. 해마다, 컴퓨터 시스템은 더 빨라지고, 더 많은 데이터를 저장하며, 또 그의 사용자에게 더 많은 애플리케이션을 제공한다.
최신의 컴퓨터 시스템은 일반적으로 중앙 처리 장치(CPU), 그리고 통신 버스 및 메모리 등의 정보를 저장, 검색 및 전송하는 데 필요한 지원 하드웨어를 포함한다. 이 컴퓨터 시스템은 또한 입력/출력 제어기 또는 저장 장치 제어기, 및 키보드, 모니터, 테이프 드라이브, 디스크 드라이브, 네트워크에 연결된 통신 회선, 기타 등등의 컴퓨터 시스템에 연결된 장치 등의 외부 세계와 통신하는 데 필요한 하드웨어를 포함한다. CPU는 이 시스템의 중심이다. CPU는 컴퓨터 프로그램을 구성하는 명령어들을 실행하고 나머지 시스템 컴포넌트들의 동작을 지시한다.
컴퓨터의 하드웨어의 관점에서 볼 때, 대부분의 시스템은 기본적으로 동일한 방식으로 동작한다. 프로세서는 산술, 논리적 비교, 및 한 장소로부터 다른 장소로의 데이터의 이동 등의 제한된 일련의 아주 간단한 동작들을 수행할 수 있다. 그렇지만, 각각의 동작이 아주 빠르게 수행된다. 컴퓨터에 대량의 이들 간단한 동작을 수행하도록 지시하는 프로그램은 컴퓨터가 복잡한 무언가를 하고 있다는 착각을 하게 만든다. 사용자가 컴퓨터 시스템의 새로운 또는 개선된 기능이라고 인식한 것은 기본적으로는 동일한 일련의 아주 간단한 동작들을 수행하지만 그 동작을 더 빠르게 행함으로써 가능하게 된다. 따라서, 컴퓨터 시스템을 계속하여 개선시키려면 이들 시스템이 점점 더 빠르게 되어야만 한다.
컴퓨터 시스템의 전체적인 속도(또한 "처리 용량(throughput)"이라고도 함)는 단위 시간당 수행되는 동작의 수로서 개략적으로 측정될 수 있다. 개념적으로, 시스템 속도에 대한 모든 가능한 개선 중 가장 간단한 것은 여러가지 컴포넌트의 클럭 속도, 특히 프로세서의 클럭 속도를 높이는 것이다. 예를 들어, 모든 것들이 2배 빠르게 실행되지만 다른 점에서는 정확히 동일한 방식으로 동작하는 경우, 그 시스템은 주어진 작업을 절반의 시간 내에 수행하게 된다. 많은 개별적인 컴포넌트로 구성된 초기의 컴퓨터 프로세서는 컴포넌트들을 축소 및 결합시키고 궁극적으로는 전체 프로세서를 단일의 칩 상에 집적 회로로서 패키징함으로써 상당한 클럭 속도를 향상시킬 수 있었으며, 추가의 크기 축소 및 다른 개선을 통해 클럭 속도를 증가시키는 것이 계속하여 목표가 되고 있다.
클럭 속도를 증가시키는 것 이외에, 클럭 사이클당 실행되는 동작의 평균 수(average number)를 증가시킴으로써 개개의 CPU 또는 시스템의 처리 용량을 증가시키는 것이 가능하다. 최신의 컴퓨터 시스템은 주어진 시간 내에 실행되는 동작의 평균 수를 증가시키기 위해 많은 동작을 동시에 수행하도록 설계되어 있다. 여러가지 유형의 병렬 처리(parallelism)는 시스템 처리 용량을 증가시키는 통상적인 기술이다. 예를 들어, 개개의 프로세서의 크기 및 단가의 감소로 단일의 컴퓨터 시스템에서 병렬로 동작하는 다수의 CPU를 제공하는 것이 가능하게, 실제로 흔하게 되었다.
컴퓨터 설계에서의 한 특정 형태의 병렬 처리는 컴퓨터 프로세서 내에 하드웨어 멀티스레딩을 사용하는 것이다. 용어 멀티스레딩은, 프로세서 설계와 관련하여 사용되는 바와 같이, 이 용어의 소프트웨어 사용과 동일하지 않으며, 이 때문에 프로세서 설계와 관련한 멀티스레딩을 소프트웨어와 관련한 멀티스레딩 또는 멀티프로그래밍과 구분하기 위해 종종 하드웨어 멀티스레딩(hardware multithreading)이라는 구문이 사용된다. 이 용어의 소프트웨어 사용은 단일의 프로세스 또는 작업이 실행을 위해 독립적으로 디스패치(dispatch)될 수 있는 다수의 관련 스레드로 세분된다는 것을 의미한다. 하드웨어 멀티스레딩은 단일의 프로세서 내에서 다수의 소프트웨어 스레드의 동시 실행을 수반한다. 이들 스레드는 서로 관련이 없는 완전히 독립적인 작업을 나타낼 수 있다. 본 명세서에서 사용되는 바와 같이, 용어 멀티스레딩은 달리 특정하지 않는 한 하드웨어 멀티스레딩을 말한다.
하드웨어 멀티스레딩을 지원하는 프로세서는 임의의 순간에 다수의 활성 스레드를 지원할 수 있다. 즉, 운영 체제 내의 디스패처(dispatcher)가 다수의 스레드를 동일한 프로세서로 동시에 디스패치할 수 있다. 운영 체제 관점에서 볼 때, 각각이 각각의 스레드를 실행하는 2개의 프로세서가 있는 것처럼 보인다. 다수의 하드웨어 멀티스레딩 방법이 있다. 때때로 소단위 멀티스레딩(fine-grained multithreading)이라고 하는 보다 종래의 형태에서는, 프로세서는 한 사이클씩 실행을 인터리빙함으로써 N개의 스레드를 동시에 실행한다. 이것은 단일의 스레드 내의 각 명령어의 실행 사이에 간극을 생성하며, 이는 파이프라인 동작이 완료되기를 기다리는 등의 어떤 단기 대기 시간 이벤트(short term latency event)를 기다리는 효과를 감소시키는 경향이 있다. 때때로 대단위 멀티스레딩(coarse-grained multithreading)이라고 하는 제2 형태의 멀티스레딩에서는, 프로세서가 캐쉬 미스(cache miss) 등의 어떤 장기 대기 시간 이벤트(long term latency event)(이 때에 프로세서는 다른 스레드로 전환함)를 만날 때까지 단일 스레드의 다수의 명령어가 독점적으로 실행된다. 본 명세서에서 동적 멀티스레딩(dynamic multithreading)이라고 하는 제3 형태의 멀티스레딩에서, 프로세서 내의 명령어 유닛(instruction unit)은 현재 프로세서 및 스레드 상태에 따라 각각의 사이클에서 실행하기 위한 다수의 스레드 중에서 하나 이상의 명령어를 선택한다.
이용되는 하드웨어 멀티스레딩의 유형에 상관없이, 모든 하드웨어 멀티스레딩은 어떤 프로세서 자원의 생산적인 이용을 증가시키는 경향이 있는데, 그 이유는 예를 들어 캐쉬 라인(cache line)이 채워지기를 기다릴 때와 같이 다른 스레드들이 정지(stall)되어 있는 동안에도 하나 이상의 활성 스레드가 명령어를 실행하기 위해 프로세서 자원을 활용할 수 있기 때문이다. 즉, 단지 하나의 스레드만을 지원하는 프로세서에서, 파이프라인 등의 어떤 프로세싱 자원은 임의의 수많은 대기 시간 이벤트 시에 아이들 상태로 기다려야만 한다. 그렇지만, 그 프로세서에 다수의 스레드가 활성인 경우, 자원이 이용될 수 있는 확률이 증가된다. 달리 말하면, 멀티스레드 방식 프로세서는 단지 하나의 스레드만을 지원하는 유사한 프로세서와 비교하여 클럭 사이클당 실행되는 동작의 평균 수를 증가시킨다.
일반적으로, 하드웨어 멀티스레딩은 다수의 스레드의 상태를 독립적으로 유지하기 위해 각각의 스레드를 위해 어떤 프로세서 레지스터의 복제(replicate)를 수반한다. 예를 들어, PowerPC™ 아키텍처를 구현하는 프로세서가 멀티스레딩을 수행하기 위해, 그 프로세서는 N개의 스레드를 실행하기 위해 N개의 상태를 유지해야만 한다. 따라서, 이하의 것, 즉 범용 레지스터, 부동 소수점 레지스터, 조건 레지스터, 부동 소수점 상태 및 제어 레지스터, 카운트 레지스터, 링크 레지스터, 예외 레지스터, 저장/복원 레지스터, 및 특수 목적 레지스터가 N번 복제된다. 게다가, 세그먼트 색인 버퍼(segment lookaside buffer) 등의 어떤 특수 버퍼가 복제될 수 있거나 각각의 엔트리에 스레드 번호가 부착될 수 있다. 또한, 상관 레지스 터(correlation register) 및 복귀 스택(return stack) 등의 어떤 분기 예측 메카니즘도 또한 복제되어야만 한다. 캐쉬 및 실행 유닛 등의 더 큰 하드웨어 구조는 일반적으로 복제되지 않으며, 모든 스레드에 의해 공유된다.
따라서, 하드웨어 멀티스레딩이 상태 정보를 유지하는 데 필요한 부가의 레지스터 및 다른 구조 형태로 하드웨어의 복제를 수반한다는 것을 알 수 있다. 지원되는 스레드의 수가 다를 수 있는 반면, 각각의 스레드는 실행 유닛 등의 공유된 하드웨어 자원의 활용의 증가로 정당화되어야만 하는 부가의 하드웨어 자원을 필요로 한다. 더 많은 스레드가 추가되고 공유된 하드웨어 자원이 보다 충분히 활용됨에 따라, 한계적인 활용도 개선은 떨어지는 반면, 각각의 부가적인 스레드의 비용은 비교적 일정하다. 따라서, 대부분의 하드웨어 멀티스레딩 프로세서에서 지원되는 스레드의 수는 비교적 작으며, 2개가 통상적인 수이다.
많은 시스템 아키텍처에서 인터럽트 및 다른 특수 프로세스를 나타내는 어떤 스레드들은 높은 우선순위로 실행된다. 특정의 예는 I/O 바운드 스레드, 즉 I/O 프로세스를 제공하는 스레드이다. 일반적으로, 이들 스레드는 그의 시간의 대부분을 I/O 완료를 기다리는 대기 상태에 소비하고, 실행될 때 종종 실행되긴 하지만 단지 간단하게 실행되며, 많은 하드웨어 자원을 필요로 하지 않는다. 이러한 스레드가 이벤트를 기다리고 있고 그 이벤트가 일어나는 경우, 운영 체제 디스패처는 종종 그 스레드를 (그의 높은 우선순위로 인해) 즉각 프로세서로 디스패치하여 어떤 현재 실행 중인 스레드를 대체(pre-empt)하게 만든다.
각각의 I/O 바운드 스레드는 디스패치될 때 단지 잠시 실행될 수 있지만, 수 많은 상위-우선순위 선점(pre-emption)의 누적 효과는 시스템 동작의 효율성을 떨어뜨릴 수 있다. 현재 실행 중인 스레드를 대체하는 것, 그의 상태를 저장하는 것, 및 I/O 바운드 스레드를 프로세서로 디스패치하는 것에는 어떤 오버헤드가 관여되어 있으며, 많은 이러한 이벤트로 증가되면 이것은 상당한 부가적인 작업이 된다. 게다가, 높은 우선순위 스레드는, 단지 잠시 실행되는 때에도, 캐쉬의 내용을 플러시하는 경향을 갖는다. 즉, 이 스레드는 캐쉬, 특히 프로세서에 가장 가까운 상위 레벨 캐쉬를 그가 필요로 하는 데이터로 채우며, 그 결과 다른 스레드가 필요로 하는 데이터를 제거하게 된다.
이러한 높은 우선순위 스레드를 서비스하는 것에 대한 일부 바람직하지 않은 부작용을 회피 또는 완화시키는 프로세서 동작 및 설계에 대한 개선된 기술을 찾는 것이 바람직하다.
본 발명의 양호한 실시예의 제1 측면에서, 멀티스레딩을 지원하는 프로세서는 스레드 상태의 유지 및 N개의 스레드의 동시 실행을 지원하기 위해 N개의 레지스터 세트를 포함한다. 레지스터 세트들 중 적어도 하나는 특수 클래스의 스레드에 의한 사용을 위해 전용되어 있으며, 특수 클래스의 스레드가 실행 중이 아니더라도 다른 유형의 스레드에 의해 사용될 수 없다.
본 발명의 양호한 실시예의 제2 측면에서, 특수 클래스의 스레드는 캐쉬 메모리의 사용이 제한되어 있다. 특수 클래스의 스레드는 그렇지 않은 경우 일어날지도 모르는 캐쉬의 플러시를 감소시키기 위해 캐쉬 메모리의 제한된 일부분만을 채울 수 있다.
양호한 실시예에서, 프로세서는 3개의 레지스터 세트를 지원하며, 이들 중 하나는 특수 클래스의 스레드에 의한 사용을 위해 전용되어 있다. 양호하게는, 이 특수 클래스는 일반적으로 잠시만 실행되는 높은 우선순위의 스레드를 포함하며, 상세하게는 I/O 바운드 스레드를 포함한다. 일반적으로, 전용된 레지스터 세트는 대부분의 시간 아이들 상태에 있을 것으로 예상된다. 특수 클래스 스레드가 디스패치될 때, 그의 상태는 전용의 레지스터 세트에 유지된다. 특수 클래스 스레드는 또한 L1 I-캐쉬 및 L1 D-캐쉬에서 그 스레드가 채울 수 있는 캐쉬 라인의 수에 제한이 있다. 양호하게는, 이들 캐쉬는 N-웨이 연관형(N-way associative)이고, 각각의 연관 세트(associativity set) 내의 어떤 제한된 수의 캐쉬 라인이 특수 클래스 스레드에 의해 사용될 수 있다. 특수 클래스 스레드는 캐쉬의 이 제한된 부분으로만 데이터를 로드할 수 있으며, 그에 의해 스레드가 캐쉬의 모든 내용을 플러시하는 것을 방지한다.
양호한 실시예에서, 프로세서는 명령어 유닛이 스레드 우선순위(이 특수 클래스 스레드는 최고 우선순위를 가짐)에 기초하여 실행을 위한 명령어를 선택하는 동적 멀티스레드 방식 프로세서로서 동작한다. 즉, 명령어 유닛은, 즉각 실행을 위한 명령어가 있는 경우에, 최고 우선순위 스레드로부터 실행을 위한 명령어를 선택하고, 상위 우선순위 스레드 명령어가 즉각 실행될 준비가 되어 있지 않은 경우에, 더 낮은 우선순위 스레드로부터 명령어를 선택한다. 그렇지만, 대안적인 형태의 멀티스레딩이 사용될 수 있다.
양호하게는, 운영 체제의 디스패처는 디스패치된 스레드가 특수 클래스 레지스터 세트에서 실행되어야 하는지 여부를 프로세서에 알려주는, 특수 클래스에서의 멤버 지위(membership)에 따라 스레드를 디스패치한다.
N개의 레지스터 세트 중 하나를 어떤 클래스의 스레드로 제한하는 것(그 결과 그 레지스터 세트는 대부분의 시간을 비활성으로 있게 됨)이 임의의 스레드가 N개의 세트 중 임의의 레지스터 세트에서 실행될 수 있게 해주는 것보다 덜 효율적일 것라고 생각될 수 있지만, 이것이 반드시 그렇지는 않다. 레지스터 세트의 수(N)가 증가함에 따라, 보다 낮은 우선순위의 레지스터 세트는 보다 덜 빈번하게 실행되고, 따라서 N번째 세트의 이점이 의심스럽게 된다. 일반적으로 종종 잠시만 실행되는 어떤 높은 우선순위의 스레드를 위한 특수 레지스터 세트를 설정함으로써, 디스패치된 특수 스레드는 일반적으로 프로세서의 레지스터 내의 비활성 특수 스레드를 대체한다. 활성의 범용 스레드를 스왑아웃(swap out)하고 이어서 특수 스레드가 프로세서를 포기할 때 이를 다시 스왑인(swap in)할 필요가 없다. 이것은 범용 스레드에 의해 겪게 되는 운영 체제에서의 컨텍스트 변경 활동(context change activity)의 양을 감소시킨다. 이러한 컨텍스트 변경 작업 부하에서의 감소는 특수 레지스터 세트가 대부분 시간 동안 휴지 상태(idle)에 있다는 점을 보다 보완할 수 있다. 게다가, 특수 스레드가 이용가능한 캐쉬 라인의 수를 제한함으로써(특수 스레드는 일반적으로 아주 많은 캐쉬 라인을 필요로 하지 않음), 이들 스레드가 그의 짧은 실행 기간 동안에 캐쉬를 플러시하는 것이 효과적으로 방지되며, 따라서 다른 활성 스레드에 대한 방해를 감소시킨다.
구조 및 동작에 관한 본 발명의 세부 내용은 유사한 참조 번호가 유사한 부분을 가리키고 있는 첨부 도면을 참조하면 가장 잘 이해될 수 있다.
몇개의 도면들에 걸쳐 유사한 참조 번호가 유사한 부분을 나타내고 있는 첨부 도면을 참조하면, 도 1은 본 발명의 양호한 실시예에 따른, 서로 다른 스레드들에 대한 비대칭 하드웨어 멀티스레딩 지원을 이용하는 컴퓨터 시스템(100)의 주요 하드웨어 컴포넌트의 상위-레벨 표현이다. 컴퓨터 시스템(100)의 주요 컴포넌트는 하나 이상의 중앙 처리 장치(CPU)(101A-101D), 메인 메모리(102), 캐쉬 메모리(106), 단말기 인터페이스(111), 저장 장치 인터페이스(112), I/O 장치 인터페이스(113), 및 통신/네트워크 인터페이스(114)를 포함하며, 이들 모두는 컴포넌트간 통신(inter-component communication)을 위해 버스(103, 104) 및 버스 인터페이스(105)를 통해 연결되어 있다.
시스템(100)은, 본 명세서에서 일반적으로 참조 번호 101로 언급되고 있는, 하나 이상의 범용 프로그램가능 중앙 처리 장치(CPU)(101A-101D)를 포함한다. 양호한 실시예에서, 시스템(100)은 다수의 프로세서를 포함하지만 - 이는 비교적 대규모인 시스템을 나타냄 -, 시스템(100)은 다른 대안으로서 단일 CPU 시스템일 수 있다. 각각의 프로세서(101)는 다수의 활성 스레드를 위해 메모리(102)에 저장되어 있는 명령어들을 동시에 실행한다. 명령어들 및 기타의 데이터는 처리를 위해 메인 메모리(102)로부터 캐쉬 메모리(106)로 로드된다. 메인 메모리(102)는 프로그램을 비롯한 데이터를 저장하는 랜덤-액세스 반도체 메모리이다. 메인 메모 리(102) 및 캐쉬(106)가 도 1에서 단일의 개체로서 개념적으로 나타내어져 있지만, 사실은 이들이 보다 복잡하고 또 특히, 이하에 더욱 상세히 기술하는 바와 같이, 캐쉬가 다수의 서로 다른 레벨에 존재한다는 것을 잘 알 것이다. 이와 마찬가지로, 몇몇 레벨의 캐쉬가 도 1에 도시된 바와 같이 다수의 CPU 간에 공유될 수 있지만, 다른 레벨의 캐쉬는, 각각이 단일의 CPU에 밀접하게 연결되어 있는, 다수의 캐쉬 어레이를 포함할 수 있다.
버스(105-105)는 여러가지 시스템 컴포넌트들 간의 통신 경로를 제공한다. 메모리 버스(103)는 CPU(101)와 캐쉬(106), 메인 메모리(102), 및 I/O 버스 인터페이스 유닛(105) 간에 데이터를 전송하는 데이터 통신 경로를 제공한다. I/O 버스 인터페이스(105)는 또한 여러가지 I/O 유닛으로/로부터 데이터를 전송하기 위한 시스템 I/O 버스(104)에 연결되어 있다. I/O 버스 인터페이스(105)는 시스템 I/O 버스(104)를 통해 I/O 프로세서(IOP) 또는 I/O 어댑터(IOA)라고도 알려져 있는 다수의 I/O 인터페이스 유닛(111-114)과 통신한다. 시스템 I/O 버스는 예를 들어 산업 표준 PCI 버스 또는 임의의 다른 적절한 버스 기술일 수 있다.
I/O 인터페이스 유닛(111-114)은 다양한 저장 장치 및 I/O 장치와의 통신을 지원한다. 예를 들어, 단말기 인터페이스 유닛(111)은 하나 이상의 사용자 단말기(121-124)의 부착을 지원한다. 저장 장치 인터페이스(112)는 하나 이상의 직접 액세스 저장 장치(DASD)(125-127)(이들은 일반적으로 회전 자기 디스크 드라이브 저장 장치이지만, 이들은 다른 대안으로서 호스트에 대해 단일의 대용량 저장 장치처럼 보이도록 구성된 디스크 드라이브 어레이를 포함한 다른 장치일 수 있음)의 부착을 지원한다. I/O 및 다른 장치 인터페이스(113)는 여러가지 다른 입/출력 장치 또는 다른 유형의 장치 중 임의의 것으로의 인터페이스를 제공한다. 2가지 이러한 장치, 즉 프린터(128) 및 팩스 기계(129)가 도 1의 예시적인 실시예에 도시되어 있지만, 다른 유형일 수 있는 많은 다른 이러한 장치가 존재할 수 있다는 것을 잘 알 것이다. 네트워크 인터페이스(114)는 시스템(100)으로부터 다른 디지털 장치 및 컴퓨터 시스템으로의 하나 이상의 통신 경로를 제공하며, 이러한 경로는 예를 들어 인터넷, 근거리 통신망 또는 기타의 네트워크 등의 하나 이상의 네트워크(130)를 포함할 수 있거나, 원격 장치 통신 회선, 무선 연결, 기타 등등을 포함할 수 있다.
도 1이 시스템(100)의 대표적인 주요 컴포넌트를 상위 레벨로 나타내려고 한 것이고, 개별적인 컴포넌트가 도 1에 나타낸 것보다 더 복잡할 수 있으며, 또 도 1에 도시된 것 이외의 또는 그에 부가하여 컴포넌트들이 존재할 수 있고, 또한 이러한 컴포넌트들의 수, 유형 및 구성이 다를 수 있다는 것을 잘 알 것이다. 또한, 도 1에 도시된 컴포넌트들 전부가 특정의 컴퓨터 시스템에 다 존재하지 않을 수 있다는 것도 잘 알 것이다. 이러한 부가적인 복잡도 또는 부가적인 변형의 몇가지 특정 예가 본 명세서에 기술되어 있지만, 이들이 단지 예이며 반드시 이러한 유일한 변형인 것은 아님을 잘 알 것이다.
메인 메모리(102)가 도 1에서 단일의 모놀리딕 개체로서 도시되어 있지만, 메모리는 또한 서로 다른 CPU 또는 CPU 세트들에 분산되고 또 그와 연관되어 있을 수 있으며, 이는 임의의 여러가지 소위 NUMA(non-uniform memory access) 컴퓨터 아키텍처에서 잘 알려져 있는 것이다. 메모리 버스(103)가 도 1에서 캐쉬(106), 메인 메모리(102) 및 I/O 버스 인터페이스(105) 간의 직접 통신 경로를 제공하는 비교적 간단한 단일의 버스 구조로서 도시되어 있지만, 사실은 메모리 버스(103)는 계층적, 스타 또는 웹(web) 구성으로 된 점대점 링크(point-to-point link), 다수의 계층적 버스, 병렬 및 중복 경로(parallel and redundant path), 기타 등등의 여러가지 형태 중 임의의 것으로 구성될 수 있는 다수의 다른 버스 또는 통신 경로를 포함할 수 있다. 게다가, I/O 버스 인터페이스(105) 및 I/O 버스(104)가 단일의 개별적인 유닛으로서 도시되어 있지만, 시스템(100)은 사실은 다수의 I/O 버스 인터페이스 유닛(105) 및/또는 다수의 I/O 버스(104)를 포함할 수 있다. 시스템 I/O 버스(104)를 여러가지 I/O 장치로 뻗어 있는 다양한 통신 경로와 분리시키는 다수의 I/O 인터페이스 유닛이 도시되어 있지만, 다른 대안으로서 I/O 장치들 중 일부 또는 그 전부를 하나 이상의 시스템 I/O 버스에 직접 연결시키는 것도 가능하다.
도 1에 도시된 컴퓨터 시스템(100)은 다중-사용자 메인 프레임 컴퓨터 시스템에 전형적일 수 있는 것 등의 다수의 부착된 단말기(121-124)를 갖는다. 일반적으로, 이러한 경우에 부착된 장치의 실제 수가 도 1에 도시된 것보다 더 많지만, 본 발명은 임의의 특정의 크기의 시스템으로 한정되지 않는다. 컴퓨터 시스템(100)은 다른 대안으로서 일반적으로 단일 사용자 디스플레이 및 키보드 유닛만을 포함하는 단일-사용자 시스템일 수 있거나, 직접 사용자 인터페이스를 거의 갖지 않거나 전혀 갖지 않지 않지만 다른 컴퓨터 시스템(클라이언트)로부터 요청을 수신하는 서버 또는 유사한 장치일 수 있다.
여러가지 시스템 컴포넌트가 상위 레벨에서 기술되고 도시되어 있지만, 일반적인 컴퓨터 시스템이 본 발명을 이해하는 데 필수적인 것이 아닌 도시되지 않은 기타의 컴포넌트를 포함하고 있다는 것을 잘 알 것이다.
도 2는 양호한 실시예에 따른, 메인 메모리(102)의 일부분을 일시적으로 저장하는 여러가지 레벨의 캐쉬 및 계층 구조 CPU를 보다 상세히 나타낸 것이다. 이 실시예에서, 메인 메모리 이외에, 레벨 1(최고 레벨), 레벨 2 및 레벨 3으로 표시된 레벨들에 있는 캐쉬들의 계층 구조가 있다. 일반적으로, 캐쉬는 (프로세서에 보다 가까운) 상위 레벨에서 더 빠르게 되고 점차적으로 더 적은 데이터를 저장한다. 각각의 프로세서(101)는 임의의 다른 프로세서와 공유되지 않는 각각의 레벨 1 캐쉬 쌍과 연관되어 있다. 이 쌍 중 하나의 캐쉬는 연관된 프로세서(101) 상에서 실행하기 위한 명령어를 저장하는 레벨 1 명령어 캐쉬(L1 I-캐쉬)(201A, 201B)(본 명세서에서 일반적으로 참조 번호(201)로서 언급됨)이다. 이 쌍의 나머지 캐쉬는 연관된 프로세서(101) 상에서 실행되는 스레드에 의해 처리될 (명령어 이외의) 데이터를 저장하는 레벨 1 데이터 캐쉬(L1 D-캐쉬)(202A, 202B)(본 명세서에서 일반적으로 참조 번호(202)로서 언급됨)이다. 각각의 프로세서는 또한 각각의 레벨 2 캐쉬(203) 및 레벨 3 캐쉬(204)와 연관되어 있으며, 이들 캐쉬는 일반적으로 메모리(102)로부터의 임의의 형태의 데이터를 저장할 수 있다. 레벨 1 캐쉬(201, 202)의 각 쌍은 양호하게는 단일의 대응하는 프로세서에 전용되어 있으며, 각각의 L2 캐쉬(203) 및 각각의 L3 캐쉬(204)는 일반적으로 다수의 프로세서들 간 에 공유되지만, 이러한 캐쉬들 중 하나 이상은 다른 대안으로서 단일의 각각의 프로세서에 전용되어 있을 수 있다. 설명의 명확함을 위해, 도 2는 단지 2개의 프로세서, 2 쌍의 L1 캐쉬(201, 202), 하나의 L2 캐쉬(203) 및 하나의 L3 캐쉬(204)만을 도시하고 있지만, 시스템(100)의 여러가지 레벨에서의 프로세서 및 캐쉬의 수는 다를 수 있으며, 여러가지 레벨들 각각에 있는 캐쉬를 공유하는 프로세서의 수도 역시 다를 수 있다. 또한, 캐쉬 레벨의 수가 다를 수 있으며 또 L1 캐쉬가 개별적인 명령어 및 데이터 캐쉬로 분할될 필요가 없고 또한 3개보다 더 많은 또는 더 적은 레벨의 캐쉬가 있을 수 있다는 것을 잘 알 것이다.
도 2는 여러가지 캐쉬들 간의 어떤 기능상 관계를 나타내기 위한 것이며, 어떤 컴포넌트들이 개별적으로 도시되어 있다는 사실은 그 컴포넌트들이 어떻게 패키징되어 있는지를 나타내려고 한 것이 아니다. 최근의 집적 회로 기술은 적어도 어떤 캐쉬가 일반적으로 프로세서(이를 캐쉬 및 다른 메카니즘과 구별하기 위해, 때로는 프로세서 코어라고도 함)와 동일한 집적 회로 칩 상에 패키징되는 정도까지 진보하였다. 일반적으로, L1 캐쉬(201, 202)는 프로세서와 동일한 집적 회로 칩 상에 패키징되며, 프로세서의 일부로서 생각될 수 있다. 심지어, 다수의 프로세서 코어를 어느 정도의 공유 캐쉬를 갖는 단일 칩 상에 배치하는 것도 가능하다. 예를 들어, 도 2에 나타낸 실시예에서, 한쌍의 CPU(101A, 101B)는 한쌍의 각각의 L1 I-캐쉬(201A, 201B), 한쌍의 각각의 L1 D-캐쉬(202A, 202B), 및 프로세서(101A, 101B)에 의해 공유되는 단일의 L2 캐쉬(203)와 함께 단일의 집적 회로 칩(210) 상에 패키징되어 있다. L3 캐쉬(204)는 일반적으로 대응하는 프로세서 칩과 함께 공 통의 회로 패키지 상에 실장되어 있는 별도의 집적 회로 칩 또는 칩들이다. 그렇지만, 이 구성은 단지 하나의 가능한 패키징 구성에 불과하며, 집적 회로 및 다른 전자 회로 패키징 기술이 발전함에 따라, 추가적인 집적이 이용되는 것이 생각될 수 있다.
칩(210)은 칩(210) 외부에 있는 시스템 컴포넌트와의 데이터 통신을 처리하는 양방향 외부 데이터 통신 인터페이스(205)를 포함한다. 메인 메모리(102), L3 캐쉬(204) 및 칩 외부 데이터 인터페이스(205) 사이에, 그리고 인터페이스(205), L2 캐쉬(203) 및 L1 캐쉬(201, 202) 사이에 데이터 경로가 존재한다. 도 2는 데이터 경로를 개념적으로 직접 경로로서 도시하고 있지만, 이들 경로는 사실은 다수의 연속적인 버스 또는 이와 유사한 데이터 경로로서 구현될 수 있다.
도 3은 도 1 또는 도 2에 도시된 것보다 더욱 상세하게 CPU(101)를 나타낸, 양호한 실시예에 따른, 어떤 연관된 캐쉬 구조를 포함하는 CPU(101)의 주요 컴포넌트의 상위-레벨 도면이다. CPU(101)는 명령어 유닛부(301) 및 실행 유닛부(311)를 포함한다. 일반적으로, 명령어 유닛(301)은 L1 I-캐쉬(201)로부터 명령어를 획득하고, 실행 유닛으로 디스패치할 명령어를 선택하여 디코딩하며, 프로그램 흐름을 제어하기 위해 분기 조건을 해석한다. 실행 유닛(311)은 레지스터 내의 데이터에 대해 산술 및 논리 연산을 수행하고, L1 D-캐쉬(202)로부터 데이터를 로드 또는 그에 데이터를 저장한다. CPU(101)는 또한 주소 변환 유닛(address translation unit)(322)을 포함한다.
이 실시예에서, CPU는 3개까지의 독립적인 스레드의 프로세서(101) 내에서의 동시 실행을 지원하지만, 지원되는 스레드의 수가 다를 수 있다는 것을 잘 알 것이다. 구체적으로는, CPU는 3개까지의 활성 스레드의 상태를 유지하며, 이들 스레드 중 임의의 것이 프로세서의 하드웨어 자원을 이용할 수 있다. 3개의 활성 스레드의 상태를 유지하기 위해, 상태 정보를 유지하는 어떤 레지스터 또는 그의 일부분이 각각의 스레드에 대해 복제된다. 본 명세서에서 활성 스레드는 스레드 0, 1 및 2(T0, T1, T2)로서 표시되고 있으며, 여기서 T0는 최고 우선순위 스레드이고 T2는 최저 우선순위 스레드이다. 스레드(T0)는 일반적으로 I/O 바운드 스레드 및 어떤 다른 스레드인 특수 클래스의 스레드에 의해 사용하기 위해 예비 할당 할당되어 있다. 이 특수 클래스의 스레드는 일반적으로 그의 시간 대부분을 어떤 이벤트(I/O 인터럽트 등)를 기다리는 운영 체제에서의 대기 상태에 소비한다. 실행을 위해 프로세서로 디스패치될 때, 이들 스레드는 높은 우선순위로 실행되어야만 한다. 일반적으로, 실행은 잠시이며, 이 스레드는 이어서 대기 상태로 복귀한다. 운영 체제의 디스패처는 디스패치된 스레드가 스레드(T0)(특수 스레드)로서 실행되어야 하는지 다른 일반적인 스레드들 중 하나로서 실행되어야 하는지를 나타낸다.
명령어 유닛(301)은 분기 유닛(302), 명령어 디코드/디스패치 유닛(303), 및 일련의 명령어 레지스터(명령어 버퍼라고도 함)(304)를 포함한다. L1 I-캐쉬(201)로부터의 명령어는 실행되기 이전에 버퍼(304)에 로드된다. 양호한 실시예에서, 명령어 유닛은 3개의 명령어 버퍼 서브셋(305-307)을 포함하며, 각각의 서브셋은 동일한 크기이고 또 프로세서에 의해 지원되는 각각의 스레드에 대응한다. 디코드/디스패치 유닛(203)은 현재 머신 사이클에서 버퍼(204)로부터 실행을 위해 디스패 치될 하나 이상의 명령어를 선택하고, 수행될 연산(들) 또는 분기 조건을 판정하기 위해 그 명령어(들)를 디코딩한다. 분기 유닛(202)은 분기 조건을 평가함으로써 프로그램 흐름을 제어하고, L1 I-캐쉬(221)로부터 버퍼(204)를 재충전한다.
실행 유닛(211)은 다수의 실행 파이프라인(312-314)을 포함한다. 도 3은 로드-저장 파이프라인(312), 정수 산술/논리 파이프라인(313), 및 부동 소수점 파이프라인(314)을 나타내고 있다. 도 3에 3개의 대표적인 파이프라인이 도시되어 있지만, 파이프라인의 수가 다를 수 있으며 또 동일한 유형의 다수의 파이프라인이 있을 수 있다는 것을 잘 알 것이다. 각각의 파이프라인은 머신 사이클에 대응하는 다수의 단계들에서 데이터에 대해 정의된 연산 또는 일련의 연산들을 수행한다. 기술 분야에 공지된 바와 같이, 연산을 위한 데이터는 제1 머신 사이클에서 파이프라인 내로 들어오고, 각각의 계속되는 사이클에서 파이프라인에서 한 단계씩 전진한다. 파이프라인이 항상 채워져 있다면, 연산을 완료하는 데 몇개의 스테이지가 걸리는지에 상관없이, 파이프라인은 사이클마다 평균 하나의 연산을 수행할 수 있다(그렇지만, 사실은 파이프라인을 항상 채워진 상태로 유지하는 것은 불가능하다).
실행 유닛(211)은 또한 명령어 유닛(301)으로부터의 명령어에 따라 파이프라인(312-314)에서 처리될 데이터를 저장하는 일련의 범용 데이터 레지스터(215)를 포함한다. 범용 데이터 레지스터는 3개의 서브셋(316-318)을 포함하며, 각각의 서브셋은 동일한 크기이고 프로세서에 의해 지원되는 각각의 스레드에 대응한다. 설명의 명확함을 위해, 데이터 레지스터의 각각의 서브셋(316-318)은 동일한 크기의 레지스터의 단일 집합체로서 나타내어져 있다. 그렇지만, 많은 프로세서 아키텍처에서, 데이터 레지스터는 일련의 정수 데이터 레지스터 및 별도의 일련의 부동 소수점 데이터 레지스터를 포함하며, 후자의 것이 종종 더 길다. 프로세서 아키텍처가 정수 및 부동 소수점 레지스터 모두를 지원하는 경우, 각각의 서브셋(316-318)은 정수 및 부동 소수점 레지스터 전체를 포함한다. 프로세서 구현이 프로세서 아키텍처보다 더 많은 레지스터를 포함하는 경우, 여분의 것은 하나의 특정의 서브셋(316-318)에 할당되거나 이들 간에 공유될 수 있다.
도 2에 도시된 컴포넌트 이외에, 프로세서(101)는 머신 상태 레지스터, 조건 레지스터, 상태 레지스터, 기타 등등(도시 생략)의 여러가지 특수 목적 레지스터 중 임의의 것을 포함할 수 있다. 특수 목적 레지스터가 스레드에 관련한 상태 정보를 포함하는 경우, 이 스레드-관련 정보는 프로세서에 의해 지원되는 스레드들 각각을 위해 복제된다.
주소 변환 유닛(321)은 명령어 유닛(201) 또는 실행 유닛(211)에 의해 발생된 주소(일반적으로 가상 주소(virtual address) 또는 유효 주소(effective address)라고 함)를 메모리(102)에서의 대응하는 주소(일반적으로 실제 주소(real address) 또는 물리 주소(physical address)라고 함)로 변환한다. 주소 변환 유닛은 양호하게는 변환 색인 버퍼(translation look-aside buffer, TLB)(322)를 포함하며, 이 TLB는 사실상 메모리 내의 페이지 테이블(page table)로부터의 어떤 주소 변환 데이터의 캐쉬이며, 다른 데이터도 포함할 수 있다. 아키텍처에 따라, 주소 변환은 주소를 발생한 스레드에 의존할 수 있다. 이러한 경우에, 각각의 TLB 엔트 리는 TLB 엔트리가 대응하는 스레드를 식별해주는 스레드 식별자를 포함한다.
양호한 실시예에서, L2 캐쉬(203) 및 L3 캐쉬(204)는 실제 주소를 사용하여 어드레싱되는 반면, L1 캐쉬(201, 202)는 유효 주소를 사용하여 어드레싱된다. 캐쉬에 액세스하는 데 실제 주소의 사용은 반드시 캐쉬에 액세스하기 이전에 데이터 액세스를 위한 주소가 주소 변환 유닛(321)에 의해 변환되어야만 함을 의미하지만, 다른 측면에서, 특히 시스템이 다수의 프로세서 및 캐쉬를 갖는 경우 캐쉬 일관성(cache coherency)을 유지하는 것에서 상당한 이점을 갖는다. 실제 주소를 사용하여 캐쉬에 액세스할 것인지 및 유효 주소를 사용하여 캐쉬에 액세스할 것인지는 많은 요인들을 포함하는 아키텍처 설계 선택이며, 일부 시스템 아키텍처는 모든 캐쉬에 액세스하는 데 전적으로 실제 주소만을 사용하고, 일부 아키텍처는 전적으로 유효 주소만을 사용하며, 일부 아키텍처는 어떤 캐쉬(상위-레벨 캐쉬)에 대해서는 유효 주소를 사용하고 다른 캐쉬에 대해서는 실제 주소를 사용한다. 본 명세서에 특정의 실시예가 기술되어 있지만, 본 발명은 임의의 특정의 아키텍처에 한정되지 않으며, 이들 변형 중 임의의 것을 사용하는 시스템에서 이용될 수 있다.
동작을 설명하면, 디코드/디스패치 유닛(303)은 실행 유닛(311)으로 디스패치하기 위해 레지스터(304)로부터 명령어를 선택한다. CPU(101)에서 실행되는 각각의 명령어는 로드, 저장, 정수 산술 또는 논리 연산, 부동 소수점 연산, 분기, 기타 등등의 단일의 프리미티브 동작을 수행한다. 디코드/디스패치 유닛(303)은 단일의 머신 사이클 내에 다수의 이러한 명령어들을 동시에 디스패치할 수 있으며, 이들 명령어는 동일한 스레드로부터 또는 서로 다른 스레드로부터 온 것일 수 있 다. 디스패치는 명령어를 처리하는 데 있어서 초기 단계이다. 실행 유닛의 파이프라인(312-314)으로 디스패치되는 명령어의 경우, 그 명령어를 완료하는 데 다수의 머신 사이클이 걸릴 수 있으며, 다른 명령어들은 후속하는 사이클에서 동일한 파이프라인으로 디스패치될 수 있다.
디코드/디스패치 유닛(303)은 스레드 우선순위에 기초하여 디스패치하기 위한 명령어를 선택한다. 명령어를 수신하기 위해 파이프라인 등의 하드웨어 프로세싱 자원이 이용가능하고 프로세싱 자원을 사용할 준비가 되어 있는 이용가능한 명령어가 T0 버퍼에 있는 경우, TO 버퍼로부터의 이 명령어가 선택되고 디스패치된다. 프로세싱 자원이 이용가능하지만 그 자원을 사용할 수 있는 이용가능한 명령어가 TO 버퍼에 없는 경우에, 디코드/디스패치 유닛은, 이러한 명령어가 T1 버퍼(306)에 존재하는 경우, T1 버퍼(306)로부터 이용가능한 명령어를 선택하고, 그것이 실패하면, 이러한 명령어가 T2 버퍼(307)에 존재하는 경우, T2 버퍼(307)로부터 이용가능한 명령어를 선택한다. 프로세싱 자원이 각각의 사이클에서 새로운 명령어를 수신하기 위해 항상 이용가능한 것은 아니다. 파이프라인은 때때로 정지되고 및/또는 플러시 및 재시작될 필요가 있을 수 있으며, 이로 인해 파이프라인이 하나 이상의 사이클 동안 이용불가능하게 될 수 있다. 게다가, 명령어가 레지스터들(204) 중 하나에 있다는 사실이 그 명령어가 실행가능하다는 것을 의미하지 않는다. 프로그램 논리가 먼저 실행해야만 하는 다른 선행하는 명령어가 있을 수 있다(그렇지만, 이러한 경우에, 프로그램 논리를 훼손시키지 않고 다수의 명령어들을 동시에 또는 무순서로(out of sequence) 실행하는 것이 가능하다).
각각의 실행 스레드 내의 명령어들은 비의존적인 순차적 명령어들(non-dependent sequential instructions)의 그룹으로 그룹지어져 있다. 명령어가 L1 I-캐쉬(201)로부터 버퍼(204)로 로드될 때, 의존성 검사 유닛(dependency check unit)(308)은 어느 명령어가 동시에 또는 무순서로 실행될 수 있는지를 판정하기 위해 자동적으로 명령어 스트림을 분석한다. 의존성 검사 유닛은 각각의 그룹의 마지막 명령어에 정지 비트(stop bit)를 배치함으로써 명령어 스트림을 순차적 명령어들의 그룹으로 분할한다. 임의의 그룹 내에서, 명령어들은 의존성을 갖지 않으며, 안전하게 무순서로 실행될 수 있다. 구체적으로는, 각각의 명령어에 대해, 의존성 검사 유닛은 동일한 그룹에서 이전의 명령의 완료 시에 어떤 의존성이 있는지를 판정한다. 의존성은 명령어 및 연산자(들)의 유형에 의존한다. 2개의 서로 다른 명령어가 동일한 연산자를 참조하는 경우, 이것은 종종 의존성을 생성하지만 항상 그런 것은 아니다. 예를 들어, 명령어 모두가 어떤 파이프라인으로 판독 또는 입력되는 데이터 소스로서 동일한 명령어를 사용하는 경우, 의존성이 존재하지 않는다. 그렇지만, 제1 명령어가 피연산자 위치에 기록하고 제2 명령어가 동일 장소로부터 판독하는 경우, 제2 명령어는 제1 명령어에 분명히 의존하며, 제1 명령어 이전에 또는 그와 동시에 실행될 수 없다. 동일한 그룹 내에서 의존성이 발견되는 경우, 의존성 검사 유닛은 직전의 선행하는 명령어에 정지 비트를 배치하며, 따라서 분석되는 명령어는 별개의 그룹의 일부가 된다. 디코드/디스패치 유닛(303)이 디스패치하기 위한 명령어를 선택할 때, 이전의 명령어들 모두가 디스패치될 때까지 그룹(정지 비트로 표시됨)을 넘어 진행하지 않는다.
T0 스레드 레지스터가 특수 클래스의 스레드에 의한 사용을 위해 예비 할당 할당되어 있기 때문에(반면에 나머지 레지스터 세트들은 임의의 유형의 스레드에 의해 사용될 수 있음), 대부분의 시간 동안 프로세서에서 실행되는 활성 T0 스레드가 없으며, TO 레지스터 세트는 그의 시간의 대부분을 아이들 상태로 소비한다. 활성 T0 스레드가 없을 때, 디코드/디스패치 유닛(303)은 일반적으로 디스패치를 위해 T1 스레드로부터 명령어를 선택하고, 하드웨어 자원이 이용가능하고 T1 스레드 명령어가 그를 채우기 위해 디스패치될 수 없는 경우에 때로는 T2 스레드 명령어를 선택한다. T0 스레드가 활성일 때, TO 스레드는 다른 스레드보다 우선권을 가지며, 그 결과 T1 및 T2 스레드는 상당히 더 낮은 빈도로 디스패치된다. 이 모드에서, 최저 우선순위인 T2 스레드는 그의 명령어를 거의 또는 전혀 디스패치시키지 못할 수도 있지만, 그의 상태는 그의 레지스터 세트에 유지되어, T0 스레드가 프로세서를 포기할 때 보다 빈번한 실행을 재개할 준비가 되어 있다.
여러가지 CPU 컴포넌트가 상위 레벨에서 기술되고 도시되어 있지만, 양호한 실시예의 CPU가 본 발명의 이해에 필수적이지 않은 도시되지 않은 많은 다른 컴포넌트를 포함하고 있다는 것을 잘 알 것이다. 게다가, 도 3의 CPU가 CPU 아키텍처의 한 예에 불과하고, CPU(101) 내의 컴포넌트의 수, 유형 및 구성에 많은 변형이 존재할 수 있으며, 또 도시되지 않은 컴포넌트가 도시된 컴포넌트에 부가하여 존재할 수 있고, 또한 도시된 컴포넌트들 전부가 CPU 설계에 다 존재하지 않을 수 있다는 것을 잘 알 것이다. 예를 들어, 버퍼 및 캐쉬의 수 및 구성이 다를 수 있으며, 실행 유닛 파이프라인의 수 및 기능이 다를 수 있고, 레지스터들이 다른 어레이 및 세트에 구성될 수 있으며, 전용의 부동 소수점 하드웨어가 존재하거나 존재하지 않을 수 있고, 기타 등등일 수 있다. 게다가, CPU(101)는 간단한 또는 복잡한 명령어 세트를 가질 수 있다.
양호한 실시예에서, T0 스레드는 어떤 캐쉬의 일부분을 사용하는 것으로 제한되어 있다. 이렇게 제한하는 이유는 높은 우선순위에서 동작하는 T0 스레드가 그 캐쉬를 플러시하고 또 그의 내용을 그 자신의 데이터로 교체하는 경향이 있기 때문이다. 잠시의 실행 이후에, T1 및 T2 스레드는 이어서 그의 데이터로 캐쉬를 재충전시켜야만 한다. 그렇지만, T0 스레드는 일반적으로 다른 스레드들만큼 큰 캐쉬 공간을 필요로 하지 않는다. 그의 작업 세트(working set)는 일반적으로 더 작다. 제한되어 있지 않은 경우, 최근 최소 사용된(least recently used) 캐쉬 라인이 축출되어지며, 보통 이들은 다른 스레드와 연관된 라인들이다. 그렇지만, T0 스레드가 캐쉬의 어떤 일부분(이는 적절한 작업 세트를 제공할 정도로 여전히 충분히 큼)으로 제한되어 있는 경우, T0 스레드는 다른 스레드에 의해 장래에 필요하게 될 더 오래된 캐쉬 라인이 아니라 더 이상 필요하지 않은 그 자신의 캐쉬 라인을 축출하는 것으로 마무리한다.
일반적으로, 높은 우선순위의 스레드에 의해 야기되는 플러시의 효과는 상위 캐쉬 레벨에서 더 크다. T0 스레드가 일반적으로 대량의 데이터를 필요로 하지 않기 때문에, 제한되지 않은 경우에도 보다 큰 하위 레벨 캐쉬가 상당히 플러시될 가능성은 없다. 따라서, 양호한 실시예에서, L1 캐쉬만이 제한되며, 즉 T0 스레드는 L1 캐쉬의 일부분으로만 제한되며, L2 또는 L3 캐쉬의 일부분으로는 제한되지 않는 다. 다른 대안으로서, T0 스레드를 L2 및/또는 L3 캐쉬의 어떤 적절한 일부분으로 제한하는 것도 가능하다.
도 4는 양호한 실시예에 따른, 연관된 액세스 메카니즘을 포함하는 캐쉬의 일반적인 구조를 나타낸 것이다. 도 4는 L1 I-캐쉬(201), L1 D-캐쉬(202), L2 캐쉬(203), 또는 L3 캐쉬(204) 중 임의의 것을 나타낼 수 있지만, 양호한 실시예에서는, 본 명세서에서 더 설명하는 바와 같이, L1 캐쉬에서는 축출 선택 로직(410)이 다르다.
기술 분야에 공지된 바와 같이, 선택적인 주소 비트(또는 어떤 경우에 스레드 식별자 비트 등의 부가적인 비트)로부터 연관 세트의 식별자를 디코딩하고 연관 세트에서의 캐쉬 라인의 주소를 원하는 데이터 주소와 비교함으로써 캐쉬가 액세스된다. 예를 들어, 캐쉬 내에 1K 연관 세트가 있는 경우, 1K 중에서 특정의 연관 세트를 지정하기 위해서는 10 비트가 필요하다. 이상적으로는, 이들 10 비트는 각각의 연관 세트가 동일한 액세스 확률을 갖도록 결정된다. 양호한 실시예에서, L1 캐쉬(201, 202)는 유효 주소를 사용하여 액세스되는 반면, L2 캐쉬(203) 및 L3 캐쉬(204)는 실제 주소를 사용하여 어드레싱된다. 따라서, L2 또는 L3 캐쉬에 액세스하기 위해서는, 프로세서에 의해 발생된 유효 주소가 먼저 주소 변환 하드웨어(321)에 의해 실제 주소로 변환된다. 다른 대안으로서, 어떤 컴퓨터 시스템 설계에서 알려진 바와 같이, 실제 주소를 사용하여 모든 캐쉬 레벨에 액세스하거나 또는 변환 없이 가상 또는 유효 주소를 사용하여 L1 이하의 캐쉬들 중 일부 또는 그 전부에 액세스하는 것이 가능하다.
도 4를 참조하면, 캐쉬는 캐쉬 데이터 테이블(401) 및 캐쉬 인덱스(402)를 포함한다. 데이터 테이블(401)은 연관 세트(404) 내에 그룹화되어 있는 다수의 데이터 캐쉬 라인(403)을 포함한다. 양호한 실시예에서, 각각의 캐쉬 라인(403)은 모든 캐쉬에서 동일한 크기이지만, 이렇게 할 필요는 없다. 캐쉬 라인은 캐쉬로 가져오거나 캐쉬로부터 축출될 수 있는 최소 데이터 단위이다. 일반적인 캐쉬 라인 크기는 128 바이트이지만, 이것은 다를 수 있다. 각각의 연관 세트(404) 내의 캐쉬 라인의 수는 일반적으로 다르며, 이 수는 하위 레벨 캐쉬에 대해 더 많다. 예를 들어, L1 캐쉬는 각각의 연관 세트 내에 8개의 캐쉬 라인을 포함할 수 있는 반면, L2 및 L3 캐쉬는 각각의 연관 세트 내에 16개의 캐쉬 라인을 가지며, 이들이 달라질 수 있는 대표적인 파라미터에 불과하다는 것을 잘 알 것이다.
인덱스(402)는 인덱스 엔트리(406)의 다수의 행(405)을 포함하며, 각각의 행(405)은 데이터 테이블(401)의 각각의 연관 세트(404)에 대응하며 연관 세트(404) 내의 캐쉬 라인(403)의 수와 같은 수의 인덱스 엔트리(406)를 포함한다. 각각의 인덱스 엔트리(406)는 대응하는 캐쉬 라인(403)의 주소(421), 어떤 제어 비트(422) 및 스레드 식별자(423)의 적어도 일부분을 포함한다. 주소 부분(421)은 캐쉬에 액세스하는 데 어느 것이 사용되느냐에 따라 실제 또는 유효 주소의 일부분일 수 있다. 기술 분야에 공지된 바와 같이, 제어 비트(422)는 수정된 비트(modified bit), 무효 비트, 최근 최소 사용된(least-recently-used, LRU) 비트 등의 필요한 경우 축출될 캐쉬 라인을 선택하기 위한 하나 이상의 비트, 세마포어(semaphore)로서 사용되는 하나 이상의 비트, 캐쉬 일관성을 유지하기 위한 로 크(lock) 또는 유사한 메카니즘, 기타 등등을 포함할 수 있지만, 반드시 이에 한정되는 것은 아니다.
캐쉬 라인은 셀렉터 로직(407)을 사용하여 원하는 데이터의 주소(420)(본 명세서에서는 참조 주소(reference address)라고 함)의 일부분의 어떤 기능에 대응하는 인덱스(402)의 행(405)을 선택함으로써 참조된다. 이 기능은 여러가지 연관 세트들 간에 거의 동일한 분포의 데이터 참조를 달성하도록 선택된다. 종종, 이 기능은 캐쉬 라인 크기에 대응하는 최하위 M 비트 바로 위쪽의 비트 위치에 있는 N 비트의 참조 주소의 직접 디코드이다. 예를 들어, 캐쉬 라인 크기가 128, 즉 27인 경우, M은 7이다. N은 캐쉬 내의 연관 세트의 수에 의존하며, 임의의 연관 세트를 선택할 정도로 충분히 크다. 일반적으로, 이것은 N이 연관 세트의 수의 log2이다. 즉, 1024개의 연관 세트를 갖는 캐쉬의 경우, N은 10이다. 그렇지만, 보다 복잡한 해싱 함수가 다른 대안으로서 사용될 수 있으며, 이는 스레드 식별자 등의 주소 이외의 비트를 포함할 수 있다. 게다가, 이 함수가 모든 캐쉬에 대해 동일할 필요는 없으며, 하나의 캐쉬에 대해 직접 디코드(direct decode)가 사용될 수 있는 반면, 다른 캐쉬에 대해서는 보다 복잡한 해싱 함수가 사용된다. 참조 주소는 (N+M) 이상의 비트를 포함하며, 따라서 다수의 주소가 동일한 연관 세트에 매핑된다.
참조 주소의 선택적인 비트가 셀렉터 로직(407)에 입력되며, 이 셀렉터 로직(407)은 캐쉬 인덱스(402)의 단일 행(405)을 선택하는 선택 신호를 발생한다. 선택된 행(405)의 각각의 개별적인 인덱스 엔트리(406)에서의 주소(411)는 이어서 비교기 로직(409)에 의해 참조 주소(420)와 비교된다. 사실, 보통은 셀렉터(407)에 의해 사용되지 않은 참조 주소의 어떤 일부분만을 비교하면 되는데, 그 이유는 셀렉터(407)에 의해 사용된 비트들이 행 선택에 의해 본질적으로 비교되기 때문이다. 일치하는 것이 있는 경우, 비교기 로직(409)은 인덱스 엔트리들 중 일치하는 것에 대응하는 선택 신호를 출력한다. 셀렉터 로직(408)은 셀렉터(407)에 의해 사용되는 동일한 참조 주소 비트를 사용하여 캐쉬 라인(403)의 연관 세트(404)를 선택하고, 비교기(409)의 출력은 선택된 연관 세트 내의 캐쉬 라인(403) 중 단 하나를 선택한다. 선택된 라인은 캐쉬의 데이터 출력(413)이다. 비교기(409)에 의해 출력된 여러가지 선택 라인은 OR 게이트에 의해 논리적으로 OR 연산되어 캐쉬 히트 신호(cache hit signal)를 생성한다. 즉, OR 게이트(412)의 출력이 활성인 경우, 캐쉬 히트가 검출되었으며, 데이터 출력(413)은 유효한 것으로 생각될 수 있고, OR 게이트(412)의 출력이 활성이 아닌 경우, 캐쉬 미스(cache miss)가 있었다.
도 4에서 셀렉터(407, 408)가 별개의 개체로서 도시되어 있지만, 이들이 동일한 기능을 수행한다는 것을 잘 알 것이다. 칩 설계에 따라, 이들은 사실상 인덱스(402) 내의 인덱스 행(405) 및 캐쉬 데이터 테이블(401) 내의 연관 세트(404) 모두를 동시에 선택하는 출력을 갖는 단일의 셀렉터일 수 있다.
캐쉬에 대한 데이터 참조가 캐쉬 미스를 생성하는 경우(요구된 데이터가 캐쉬에 없는 경우), 일반적으로 요구된 데이터를 하위 레벨 캐쉬로부터 또는 메인 메모리(102)로부터 로드할 필요가 있다. 시스템 설계에 따라, 때때로 가망이 있어 데이터를 캐쉬로 로드하는 것도 가능하지만, 이것은 보통 하위 레벨 캐쉬에 대해서 만 행해지며, L1 캐쉬에 대해서는 행해지지 않는다. 새로운 캐쉬 라인이 캐쉬로 로드될 때, 대체될(캐쉬로부터 축출될) 기존의 라인을 선택할 필요가 있다. 선택은 축출 선택 로직(eviction selection logic)(410)에 의해 수행된다.
축출되는 라인은 반드시 축출되는 라인을 교체하게 되는 라인과 동일한 연관 세트에 속해 있어야만 한다. 셀렉터(407)를 사용하여 캐쉬 인덱스(402)의 적절한 행(405)을 선택하고 각각의 엔트리(406)의 선택적인 제어 비트(422) 및 스레드 식별자(423)를 입력함으로써 축출을 위한 라인이 선택된다. 축출 선택 로직(410)은 선택 신호를 출력하며, 이 선택 신호는 캐쉬 데이터 테이블(401)로부터 기록하기 위해 또는 새로운 캐쉬 라인을 로드 버스(413)로부터 캐쉬 데이터 테이블로 로드하기 위해 연관 세트(404)의 캐쉬 라인(403)을 선택하는 데 사용된다. 새로운 캐쉬 라인을 로드할 때, 축출 선택 로직(410)의 출력은 또한 기록 셀렉터(write selector)(411)도 구동하며, 이 기록 셀렉터(411)는 로드 버스(413)로부터의 데이터, 주소(420), 또는 새로 로드된 캐쉬 라인에 적용가능한 다른 제어 정보를 기록하기 위해 캐쉬 인덱스의 행(405)의 엔트리(406)를 선택한다.
양호한 실시예에서, 캐쉬들 중 적어도 하나에 대해, 축출 로직(410)은 T0 스레드에 의해 채워질 수 있는 각각의 연관 세트 내의 캐쉬 라인들의 수를 효과적으로 제한한다. 이 수는 T0 한계(limit)(T0L)라고 하며, 이 수는 필연적으로 각각의 연관 세트 내의 캐쉬 라인의 수보다 작다. 외부 신호(T0)는 새로운 캐쉬 라인을 요청한 스레드가 T0 스레드인지 여부를 축출 로직에 알려준다. 아닌 경우에, 축출 로직은 적절한 축출 알고리즘에 따라 축출을 위한 연관 세트의 임의의 캐쉬 라인을 선택한다. 수많은 이러한 알고리즘이 종래 기술에 존재하며, 현재 알려져 있거나 이후에 개발되는 임의의 이러한 알고리즘이 사용될 수 있다. T0 스레드가 새로운 캐쉬 라인을 요청하였고 또 TOL개의 캐쉬 라인이 스레드 T0에 의해 채워지는 연관 세트 내에 이미 있는 경우, 축출 로직은 스레드 T0에 의해 채워진 캐쉬 라인들 중 하나를 어쩔 수 없이 축출해야만 한다. 이와 같이, 스레드 T0에 의해 채워진 캐쉬 내의 라인의 수는 TOL을 초과할 수 없다.
축출 로직(410)은 어떤 상황 하에서 축출 우선순위를 변경함으로써 이 제한을 쉽게 구현할 수 있다. 통상적으로, 축출 로직(410)은 선택된 연관 세트의 각각의 캐쉬 라인에 대한 우선순위를 도출하고, 축출을 위한 낮은 우선순위의 라인을 선택한다. 이 우선순위는 통상적으로 여러가지 공지의 기술 또는 이후에 개발되는 기술 중 임의의 것에 따라 참조의 최근성을 나타내는 LRU 비트, 무효 비트, 기타 등등의 제어 필드(422)의 어떤 비트로부터 도출된다. 이 우선순위(Std_Priority)는 새로운 캐쉬 라인이 스레드 T0에 의해 채워지는 중이고 T0에 의해 채워진 연관 세트 내에 T0L개 이상의 캐쉬 라인이 이미 있는 경우 수정된다. 각각의 캐쉬 라인에 할당되는 수정된 우선순위는 다음과 같이 표현될 수 있다.
IF (3 Cache_Line_T0(i) + New_Line_T0 > T0L) AND
(Cache_Line_T0(S) = 0)
THEN Priority_Cache_Line(S) = MAX
ELSE Priority_Cache_Line(S) = Std_Priority_Cache_Line(S)
여기서, New_Line_T0는 새로운 캐쉬 라인을 채우고 있는 스레드가 T0 스레드 인 경우 1이고, 그렇지 않은 경우 0이며, Cache_Line_T0(i)는 캐쉬 라인 i가 스레드 T0에 의해 채워진 경우에는 1이고 그렇지 않은 경우에는 0이며(연관 세트 내의 모든 캐쉬 라인 i에 걸쳐 합산이 행해짐), MAX는 최고 우선순위이고, Priority_Cache_Line(S)는 캐쉬 라인 S의 수정된 우선순위이며, Std_Priority_Cache_Line(S)는 LRU, 무효 및/또는 다른 제어 비트에 기초한 캐쉬 라인 S의 미수정된 우선순위이다. 양호하게는, MAX는 임의의 다른 레벨보다 높은 특수한 고 우선순위 레벨이지만, 다른 대안으로서는 LRU에 기초한 최고 레벨(즉, 가장 최근에 액세스된 캐쉬 라인과 동등한 레벨)일 수 있다. 다른 대안으로서, MAX 우선순위를 받기 위해서는 캐쉬 라인 S가 유효해야만 한다는 부가의 조건을 추가함으로써 상기 식을 수정하는 것이 가능하다. 이 부가의 조건은 무효인 캐쉬 라인이 스레드 T0에 의해 요청된 캐쉬 라인에 의해 교체될 수 있게 해줄 수 있으며, 따라서 제한된 상황에서, 스레드 T0에 의해 채워지는 캐쉬 라인이 T0L 한계를 초과할 수 있다.
상기한 바와 같이, 특수 클래스의 스레드들은 프로세서(101) 내의 T0 레지스터 세트를 사용하여 실행된다. 프로세서 자체 내에는 임의의 유형의 스레드가 T0 레지스터 세트를 실행하는 것을 방지할 아무것도 없다는 것을 잘 알 것이다. 프로세서는 T0 레지스터 세트에서 실행되어야만 하는 특수 클래스의 스레드를 식별하기 위해 운영 체제에 의존한다. 운영 체제의 디스패처는 스레드 유형을 별도로 기록하고 디스패치된 스레드가 실행되어야만 하는 레지스터 세트를 프로세서에 알려준다.
도 5는 메모리(102)의 어떤 주요 소프트웨어 컴포넌트 및 컴퓨터 시스템(100)에서의 서로 다른 레벨의 추상화에서의 하드웨어 및 소프트웨어 기능의 구분을 나타낸 개념도이다. 공지된 바와 같이, 컴퓨터 시스템은 프로세스를 수행하는 순차적 상태 머신이다. 이들 프로세스는 여러가지 레벨의 추상화로 표현될 수 있다. 상위 레벨의 추상화에서, 사용자는 프로세스 및 입력을 지정하고 출력을 받는다. 하위 레벨로 진행함에 따라, 이들 프로세스가 어떤 프로그래밍 언어로 된 명령어들의 시퀀스이고, 계속하여 아래쪽으로 가면 이들 프로세스는 하위 레벨의 명령어 시퀀스로 변환되고 운영 체제 코드를 지나서 궁극적으로는 어떤 동작을 시키기 위해 머신 레지스터에 집어 넣어지는 데이터 비트에 이른다는 것을 알게 된다. 아주 낮은 레벨에서는, 전기 전위를 변경시키는 것에 의해 여러가지 트랜지스터가 턴온 및 턴오프된다. 도 5에서, 상위 레벨의 추상화는 도면의 상부쪽으로 가면서 나타내어져 있고, 하위 레벨은 아래쪽으로 가면서 나타내어져 있다.
도 5에 도시한 하드웨어 레벨(501)은 물리적 프로세서, 메모리, 버스 및 명령어를 실행하는 다른 컴포넌트를 나타낸다. 본 명세서에서 사용되는 바와 같이, 하드웨어 레벨(501)은, 도 1 내지 도 4에 도시되지 않은 다른 하드웨어를 비롯하여, 도 1 내지 도 4에 도시된 물리적 장치(장치들 내에 저장된 데이터가 아님)의 집합체를 나타낸다.
하드웨어 바로 위에는 어떤 운영 체제에서는 커널(kernel)이라고 하는 하위-레벨 운영 체제 계층(502)이 있다. 물리적 의미에서, 운영 체제는 코드이다, 즉 여러가지 메모리 장소에 저장되어 있고 요구된 기능을 수행하기 위해 하나 이상의 프로세서 상에서 실행되는 명령어 형태의 데이터이다. 하위-레벨 운영 체제는 시스템 자원을 공유하고, 메모리를 할당하며, 보안을 시행하고, 기타 등등을 하는 데 필요한 어떤 기본적인 운영 체제 기능을 제공한다. 하위-레벨 운영 체제(502)에 의해 제공되는 기능들 중에 스레드 디스패치 기능(503)이 있다. 디스패처(503)는 여기에 보다 자세히 설명되어 있는 바와 같이, 실행을 위해 프로세서에 대하여 실행되어질 것을 대기하고 있는 스레드를 디스패치한다. 실행될 준비가 되어 있고 또 디스패처(503)에 의한 디스패치를 대기하고 있는 스레드를 포함하고 있는 준비 큐 데이터 구조(ready queue data structure)(504), 즉각 실행될 준비가 되어 있지 않은, 즉 실행을 위해 프로세서로 디스패치될 수 있기 이전에 어떤 이벤트(I/O 동작의 완료 등)가 발생하기를 기다리고 있는 인스턴스화된 스레드(instantiated thread)를 포함하고 있는 대기 큐 데이터 구조(wait queue data structure)(505), 및 각각의 개별적인 프로세서(101A-101D)에서 현재 실행 중인 스레드를 기록하는 실행 상태 데이터 구조(execution state data structure)(개체(506A-506D)로 표시되어 있으며, 본 명세서에서는 전체적으로 참조 번호(506)으로 언급되고 있음)와 연관되어 있다.
하위-레벨 운영 체제의 계층(502) 위쪽에는 여러가지 사용자 애플리케이션(510-512) 및 사용자 데이터 객체(513-518)가 있다. 이 시스템은 선택적으로 부가의 상위-레벨 운영 체제 함수(509)를 포함할 수 있다. 일반적으로, 상위-레벨 운영 체제 함수(509)는 그에 액세스하고자 하는 사용자에게 부가적인 기능 및 함수를 제공하지만, 사용자 프로세스는 실행을 위해 하위-레벨 운영 체제(502)에 직접 액세스할 수 있다.
스레드 디스패치는 스레드의 상태 및 우선순위에 의존한다. 임의의 순간에, 스레드는 몇가지 상태 중 하나에 있다. 예를 들어, 스레드는 스레드가 실행을 위해 프로세서로 디스패치되어 있는 실행중 상태(executing state), 스레드가 어떤 외부 이벤트의 발생 때까지 실행될 수 없고 따라서 그 이벤트가 발생하기를 기다리고 있는 이벤트 대기 상태(event wait state), 또는 스레드가 실행될 준비가 되어 있고 단지 이용가능한 프로세서를 기다리고 있는 준비 상태(ready state)에 있을 수 있다. 운영 체제에 따라, 부가적인 상태 또는 상기 상태의 세분화(refinement)가 정의될 수 있다. 게다가, 실행의 우선순위는 일반적으로 각각의 스레드와 연관되어 있다. 기술 분야에 공지되어 있거나 이후로 개발되는 여러가지 우선순위 할당 방식 중 임의의 것이 사용될 수 있다. 이 우선순위는 일반적으로 사용자, 시스템 관리자, 또는 운영 체제 자체에 의해 할당된다. 예를 들어, 사용자 애플리케이션 프로세스의 우선순위는 종종 운영 체제에 의해 지정된 사용자 프로세스에 대한 기본 우선순위(default priority)이며, 이는 사용자에 의해 번복(override)된다. 이 우선순위는 스레드가 존재하는 기간 동안에 고정되어 있을 수 있거나 또는 스레드가 준비 큐에서 기다리고 있은 시간의 길이(length of time) 등의 여러가지 인자에 따라 조정가능할 수 있다.
양호한 실시예에서, 각각의 스레드 또는 스레드의 그룹에 의해 전달되는 상태 정보 중에는 그 스레드 또는 그룹이 특수 클래스의 스레드의 멤버(member)인지 여부에 관한 정보가 있다. 이 정보는 단일 비트로 전달될 수 있지만, 다른 대안으 로서 다수의 특수 클래스 또는 다른 클래스의 스레드가 다중 비트의 상태 정보를 요구하는 것이 가능하다.
특수 클래스의 멤버 지위(membership)는 양호하게는 여러가지 대안적인 기술들 중 임의의 것에 의해 지정된다. 예를 들어, 운영 체제는 동일한 스레드 속성 또는 스레드 속성의 조합에 기초하여 어떤 커널 스레드를 특수 클래스에 자동 할당할 수 있다. 이전에 디스패치될 때 스레드가 실행한 명령어 또는 시간의 양 등의 관찰된 거동에 기초하여, 운영 체제가 그 스레드를 특수 클래스에 동적으로 할당하는 것까지도 가능할 수 있다. 멤버 지위는 사용자에 의해 수동으로 지정되는 코드의 고정된 속성이고 컴파일(compile)할 때, 빌드(build)할 때, 로드(load)할 때 또는 명령어 실행 이전의 다른 때에 할당될 수 있다. 어떤 임의적인 사용자가 그의 코드 또는 그의 일부분이 특수 클래스 스레드로서 실행되도록 지정할 수 있게 해주는 것이 바람직하지 않을 수 있기 때문에, 양호하게는 허가된 사람만이 이용할 수 있는 특별한 도구가 특수 클래스에서의 멤버 지위를 지정하는 데 사용된다.
일반적으로, 특수 클래스 스레드는 사용자 애플리케이션 코드보다는 하위-레벨 운영 체제 함수일 것으로 예상된다. 특수 클래스에 속하는 것으로 지정되지 않은 스레드는 일반 클래스의 스레드인 것으로 간주된다. 도 5에서, 특수 클래스 스레드는 SN으로 표현되어 있으며, 일반 클래스 스레드는 GN으로 표시되어 있으며, 여기서 N은 정수이다.
스레드 준비 큐 구조(thread ready queue structure)(504) 및 스레드 대기 큐 구조(thread wait queue structure)(505)는 가변 수의 스레드를 식별하며, 그 안에 있는 데이터는 임의의 적절한 종래의 형태에 따라 구조화될 수 있다. 이들 큐 구조는 도 5에서 개별적인 단일의 리스트 또는 큐로 나타내어져 있지만, 사실은 어느 것이든 우선순위 또는 다른 고려 사항에 따라 구분되어 있는 다수의 리스트를 포함할 수 있다. 도 5에 나타낸 바와 같이, 준비 큐(504)에 있는 스레드들은 일반적으로 일반 클래스 스레드인데, 그 이유는 특수 클래스 스레드가 즉각 디스패치되는 경향이 있기 때문이며, 대기 큐(505)는 일반적으로 특수 클래스 스레드 및 일반 클래스 스레드를 혼합하여 포함하고 있다.
스레드가 기다리고 있던 어떤 이벤트가 발생할 때까지 그 스레드는 대기 큐(505)에 남아 있다. 그 이벤트가 발생할 때, 스레드는 준비 큐(504)로 전송된다. 디스패처(503)는 준비 큐(504)로부터 디스패치하기 위한 스레드를 선택한다. 일반적으로, 스레드는 우선순위에 따라 선택되며, 동일 우선순위의 스레드 중에서는, 준비 큐에 가장 오래 있었던 스레드가 먼저 선택된다. 그렇지만, 다른 고려사항이 사용될 수 있다. 예를 들어, 논리적으로 분할(partition)되어 있는 NUMA(non-uniform memory architecture) 시스템 또는 시스템 등의 어떤 시스템들에서, 시스템 내의 서로 다른 프로세서 또는 프로세서 그룹에 대해 개별적인 큐가 유지될 수 있으며 및/또는 스레드는 프로세서 또는 프로세서 그룹과의 어떤 형태의 연관성에 기초하여 디스패치될 수 있다. 게다가, 본 시스템이 특수 클래스의 스레드를 T0 레지스터 세트로 디스패치하는 단일의 운영 체제 및 디스패처를 갖는 것으로 기술되어 있지만, 컴퓨터 시스템은 다수의 논리적 파티션으로 분할될 수 있으며, 그 각각은 그 자신의 개별적인 운영 체제 및 디스패처를 포함하고 있고, 이 경 우에 T0 레지스터 세트로 디스패치하기 위한 특수 클래스의 스레드를 선택하는 디스패처는 논리적 파티션들 중 하나, 그 일부 또는 그 전부에 존재할 수 있다.
실행 상태 데이터 구조(506)는 각 프로세서의 각 레지스터 세트에서 실행 중인 스레드를 기록한다. 예를 들어, 도 5에 도시한 바와 같이, 프로세서(101A)와 연관되어 있는 데이터 구조(506A)는 스레드(S4)를 T0 레지스터 세트에 기록하고, 스레드(G3)를 T1 레지스터 세트에 기록하며, 스레드(G8)를 T2 레지스터 세트에 기록한다. 일반적으로, T1 및 T2 레지스터 세트는 분주하며(busy), 따라서 일반 클래스 스레드는 준비 큐(504)에서 기다리고 있게 된다. 그렇지만, 일반적으로 대부분의 특수 클래스 스레드는 대기 큐(505)에서 기다리고 있게 되며 임의의 주어진 시간에 단지 몇개만이 실행되게 된다. 일반적으로, 실행 중인 특수 클래스 스레드의 수는 프로세서의 수, 즉 T0 레지스터 세트의 수를 초과하지 않는다. 도 5에 도시한 바와 같이, 프로세서(101B, 101D)에 대한 T0 레지스터 세트들(이들은 각각 실행 상태 데이터 구조(506B, 506D)에 기록되어 있음)은 아이들 상태에 있다.
일반 클래스의 스레드는 준비 큐(504)로부터 이용가능한 T1 또는 T2 레지스터 세트로만 디스패치되며 T0 레지스터 세트가 아이들 상태에 있더라도 T0 레지스터 세트로는 결코 디스패치되지 않는다. 임의의 프로세서 내의 T1 또는 T2 레지스터 세트가 (실행 중인 스레드가 프로세서를 포기하거나 대체되는 것으로 인해) 이용가능하게 될 때, 디스패처(503)는 준비 큐(504)로부터 스레드를 선택하여 이를 프로세서로 디스패치한다. T1 레지스터 세트가 이용가능하게 되는 경우, 디스패처는 프로세서로 하여금 기존의 T2 스레드를 T1 레지스터 세트로 전환시키도록 할 수 있으며, 인큐잉된 스레드(enqueued thread)를 T2 레지스터 세트로 디스패치한다. 일반적으로, 준비 큐로부터 T1 또는 T2 레지스터 세트로 디스패치된 스레드는 일반 클래스 스레드이지만, 드문 경우에 그 스레드는 이하에서 기술하는 바와 같이 특수 클래스 스레드일 수도 있다.
대기 큐(505)에서 기다리고 있는 스레드로 하여금 실행될 준비가 되어 있도록 하게 하는 이벤트가 발생할 때, 스레드는 준비 큐(504)로 전송된다. 스레드가 특수 클래스 스레드인 경우, 스레드는 보통 높은 우선순위의 스레드이며 즉각적인 디스패치를 위해 준비 큐의 헤드(head)로 간다. T0 레지스터 세트가 이용가능한 경우, 특수 클래스 스레드는 T0 레지스터로 디스패치된다. 보통, 하나 이상의 T0 레지스터 세트가 이용가능하게 되며, 그 T0 레지스터 세트로 특수 클래스 스레드가 즉각 디스패치된다. 드문 상황에서, 모든 T0 레지스터 세트가 사용 중일 수 있다. 이러한 일이 일어나는 경우, 특수 스레드는 T1 레지스터 세트(또는 심지어 T2 레지스터 세트)로 디스패치될 수 있다. 특수 클래스 스레드가 높은 우선순위를 갖기 때문에, 특수 클래스 스레드는 일반적으로 기존의 일반 클래스 스레드를 대체하게 되고, 이들 상황에서 즉각 T1 레지스터 세트로 디스패치된다. 특수 클래스 스레드가 T1 레지스터 세트로 디스패치되는 경우, 이 특수 클래스 스레드는 임의의 일반 클래스 스레드처럼 T1 레지스터 세트에서 실행되고, (T0 레지스터 세트에서 실행 중인 스레드처럼) L1 캐쉬 내의 어떤 캐쉬 라인 서브셋으로 한정되지 않는다. 운영 체제 조정 파라미터는 특수 스레드가 T1 및 T2 논리 프로세서로 디스패치될 수 있는지 여부를 제어한다.
여러가지 소프트웨어 엔트리가 도 5에서 별개의 개체로서 또는 다른 개체 내에 포함되어 있는 것으로 나타내어져 있다. 그렇지만, 이렇게 나타낸 것은 단지 설명을 위한 것으로서 특정의 모듈 또는 데이터 개체가 별개의 개체이거나 공통 모듈 또는 모듈 패키지의 일부일 수 있다는 것을 잘 알 것이다. 게다가, 어떤 수 및 유형의 소프트웨어 개체가 도 5의 개념도에 도시되어 있지만, 이러한 개체들의 실제 수는 다를 수 있으며 또 특히 복잡한 멀티-프로세서 시스템 환경에서는 이러한 개체들의 수 및 복잡도가 일반적으로 훨씬 더 크다는 것을 잘 알 것이다.
도 5의 소프트웨어 컴포넌트가 메모리(202)에 존재하는 것으로 개념적으로 도시되어 있지만, 일반적으로 컴퓨터 시스템의 메모리가 너무 작아서 모든 프로그램 및 데이터를 동시에 보유하지 못하며 또 정보가 일반적으로 회전 자기 디스크 드라이브 등의 하나 이상의 대용량 저장 장치를 포함하는 데이터 저장 장치(125-127)에 저장되어 있고 또한 이 정보가 필요에 따라 운영 체제에 의해 메모리 내에 페이징되어 있다는 것을 잘 알 것이다. 게다가, 도 5의 개념적인 표현이 임의의 특정의 메모리 구성 모델을 암시하려는 것은 아니며 또 시스템(100)이 단일의 주소 공간 가상 메모리(address space virtual memory)를 이용하거나 중첩하는 다수의 가상 주소 공간을 이용할 수 있다는 것을 잘 알 것이다.
하나의 높은 우선순위의 캐쉬 제한된 하드웨어 스레드 및 2개의 하드웨어 정규 스레드(hardware regular thread)를 갖는 본 명세서에 기술된 본 발명의 실시예는 3개의 정규 스레드를 갖는 프로세서와 비교하는 게 가장 나을 수 있다. 비교를 위해, 2개 또는 3개의 CPU 계산-집중적인 애플리케이션 스레드 및 몇개의 I/O 집중 적인 스레드가 있는 경우에 대해 생각해보자. I/O 집중적인 스레드는 계산-집중적인 애플리케이션을 위해 비동기적인 I/O를 행하고 있고 및/또는 파일을 한 장치에서 다른 장치로 복사하는 등의 유틸리티 함수를 수행하고 있을 수 있다.
특수 레지스터 세트를 지정하지 않은 상태에서의 종래의 3-스레드 프로세서(three-threaded processor)의 경우, 높은 우선순위의 I/O 스레드를 디스패치하기 위해 운영 체제는 "컨텍스트 전환(context switch)"을 수행하여, 3개의 실행 중인 계산-집중적인 스레드 중 하나의 상태를 저장한 다음에 I/O 스레드의 상태를 복원한다. I/O 스레드가 실행 중인 동안에, I/O 스레드가 한 블록의 데이터를 한 메모리 버퍼로부터 다른 메모리 버퍼로 복사하는 경우, I/O 스레드는 계산 스레드의 데이터를 전부는 아니더라도 많이 캐쉬로부터 플러시하게 된다. 2개의 여전히 실행 중인 계산 집중적인 애플리케이션은 캐쉬의 I/O 스레드의 스위프(sweep)에 의해 상당히 속도가 떨어지게 된다. I/O 스레드가 대기 상태에 들어갈 때, 운영 체제는 다른 컨텍스트 전환을 수행하여, I/O 스레드의 상태를 저장하고 실행 준비가 된 계산 집중적인 스레드의 상태를 복원한다. 이제 3개의 계산 스레드 전부가 실행 중이지만, 느리게 수행되는데 그 이유는 이들 스레드 전부가 반복적으로 캐쉬 미스를 겪고 있으며 이들 캐쉬 미스로 인해 명령어들을 실행하는 데 더 많은 클럭 사이클이 걸리기 때문이다.
비교에 의해, 양호한 실시예는 I/O 스레드의 디스패치로 인한 계산 집중적인 스레드 컨텍스트의 저장/복원을 회피한다. 이 양호한 실시예는 또한 I/O 스레드에 의해 계산 스레드에서 일어나게 되는 캐쉬 미스를 회피한다.
많은 동시적인 I/O 스레드로 분주한 시스템에서, I/O 스레드를 관여시키는 많은 컨택스트 변경이 있게 되는데, 그 이유는 I/O 인터럽트 이후에 I/O 스레드가 디스패치가능하게 되기 때문이다. 본 발명의 실시예에서, I/O 스레드는 양호하게는 범용 스레드(general purpose thread)보다는 높은 우선순위의 하드웨어 스레드를 이용한다.
2개 또는 3개의 계산 집중적인 애플리케이션 스레드가 있는 경우, 양호한 실시예에서는, 어느 스레드도 I/O 집중적인 스레드에 서비스를 제공하기 위해 인터럽트 및 컨텍스트 전환을 겪지 않는다. 그렇지만, 3개의 계산-집중적인 애플리케이션 스레드가 있는 경우, 2개 이상이 동일한 애플리케이션 우선순위를 공유한다면, 운영 체제에 의해 이들 간에 인터럽트 및 컨텍스트 전환이 있는데 그 이유는 운영 체제가 이들 애플리케이션 스레드 간에 시스템 자원을 시분할(time-sharing)하기 때문이다.
이들 문제는 일반적으로 단지 2개의 스레드만을 지원하는 종래의 프로세서의 경우에 더욱 심각하다.
양호한 실시예에서, 캐쉬 내의 축출 선택 로직은 T0가 채운 라인의 수가 미리 정해진 한계(T0L)에 있을 때 T0가 채운 라인을 우선적으로 축출함으로써 T0 스레드에 의해 채워질 수 있는 캐쉬 라인의 수를 제한하는 동작을 한다. 이 실시예는 구현이 간단하다는 이점을 가지며, 모든 캐쉬 라인이 활성 T0 스레드가 없는 경우에 비-T0 스레드에 의해 사용될 수 있도록 충분히 유연성이 있다. 그렇지만, T0 스레드에 의해 사용되는 캐쉬 라인의 수를 제한하는 여러가지 대안적인 방법이 있 다. 예를 들어, 각각의 연관 세트 내의 라인들의 고정된 서브셋이 T0 스레드를 위해 예비 할당 할당되어 있을 수 있으며, 이 T0 스레드는 임의의 다른 캐쉬 라인을 사용할 수 없다. 이러한 서브셋은 T0 스레드만을 위해서 예비 할당 할당되어 있을 수 있거나 활성 TO 스레드가 없는 경우에 다른 스레드들에 의해 사용될 수 있다. 다른 대안으로서, T0 스레드는 동일 레벨에 있는 그 자신의 별도의 캐쉬를 가질 수 있으며, 이 캐쉬에 다른 스레드들은 액세스할 수 없다. 별도의 캐쉬에 의해 제공되는 격리는, 어떤 상황에서, T1 또는 T2 스레드가 T0 스레드에 전용되어 있는 여분의 캐쉬 라인을 사용할 수 없음에도 불구하고 보다 나은 성능을 제공할 수 있다.
양호한 실시예에서, 특수 클래스의 스레드는 전용된 높은 우선순위의 레지스터 세트로 디스패치되고, 캐쉬 내의 캐쉬 라인들의 서브셋만을 사용하도록 제한되어 있다. 그렇지만, 다른 대안으로서, 이들 특징 중 하나만을 나머지 것들과는 무관하게 이용하는 것이 가능하다. 예를 들어, 특수한 높은 우선순위의 레지스터 세트가 이 레지스터 세트가 이용할 수 있는 캐쉬 라인의 수에 어떤 제한도 두지 않고 특수 클래스 스레드를 위해 따로 준비되어 있을 수 있다. 다른 대안으로서, 어떤 클래스의 스레드에 대한 특수 레지스터 세트를 제공하지 않고 이러한 스레드에 의해 채워질 수 있는 캐쉬 라인의 수에 제한을 가하는 것이 가능하다.
양호한 실시예에서, 특수 클래스의 스레드는 일반 클래스 스레드가 이용할 수 없는 전용의 높은 우선순위의 레지스터 세트를 이용하며, 어쩔 수 없이 캐쉬 내의 캐쉬 라인들의 서브셋만을 이용해야만 한다. 그렇지만, 다른 대안으로서, 특수 클래스의 스레드에 대한 다른 형태의 비대칭 하드웨어 자원 지원을 제공하는 것이 가능하다. 예를 들어, 일반적으로 특수 클래스의 스레드는 대량의 부동 소수점 또는 벡터 연산을 수행하지 않는 것으로 예상된다. 프로세서가 부동 소수점 연산을 지원하는 벡터 및 부동 소수점 레지스터를 비롯하여 벡터 또는 특수 부동 소수점 파이프라인 및 부동 소수점 연산을 효율적으로 수행하기 위한 다른 로직을 포함하는 경우, 어떤 프로세서 설계에서 T1 레지스터 세트 내의 이러한 레지스터를 생략하는 것이 가능할 수 있다. 이러한 생략은 T0 레지스터 세트를 지원하는 데 필요한 하드웨어 자원의 약간의 감소를 달성하지만, 이러한 생략은 부동 소수점 명령어를 사용하지 않는 특수 모드에서 컴파일러가 T0-적격 스레드(T0-eligible thread)를 컴파일할 수 있어야만 함을 요구할 수 있다. T0 레지스터 세트에 대한 부가적인 하드웨어 감소 또는 수정이 가능할 수 있다.
본 명세서에 기술한 바와 같이, 멀티스레드 방식 프로세서는 N개(단, N은 양호하게는 3임)의 스레드의 동시 실행을 지원한다. 그렇지만, N의 선택은 많은 설계 인자에 의존할 수 있으며, 또 3 이외의 수일 수 있다. 프로세서가 성능이 더욱 좋아짐에 따라, 설계 고려 사항이 더 많은 수의 스레드에 혜택을 주는 것이 가능하다. 게다가, 양호한 실시예에서 단일의 레지스터 세트가 특수 클래스의 스레드를 위해 예비 할당 할당되어 있지만, 생각하건대 특수 클래스의 스레드를 위해 예비 할당된 레지스터 세트의 수는 0보다 클 수 있다.
일반적으로, 본 발명의 어떤 예시된 실시예를 구현하는 데 실행되는 소프트웨어 루틴은, 운영 체제 커널의 일부로서 구현되든지 또는 다른 방식으로서 구현되든지 간에 상관없이, 본 명세서에서는 프로그램 또는 컴퓨터 프로그램이라고 칭한 다. 이 프로그램은 일반적으로, 본 발명에 따른 컴퓨터 시스템 내의 장치들 또는 시스템들 내의 하나 이상의 프로세서에 의해 판독되고 실행될 때, 그 장치 또는 시스템으로 하여금 본 발명의 여러가지 측면을 구현하는 단계들을 실행하거나 구성 요소들을 생성하는 데 필요한 단계들을 수행하게 하는 명령어들을 포함한다. 게다가, 본 발명이 완전하게 기능하는 컴퓨터 시스템과 관련하여 기술되었고 이후에 기술되고 있지만, 본 발명의 여러가지 실시예들은 여러가지 형태의 프로그램 제품으로서 배포될 수 있고, 또 본 발명은 이 배포를 실제로 실시하는 데 사용되는 특정의 유형의 신호 전달 매체에 상관없이 똑같이 적용된다. 신호 전달 매체의 예는 휘발성 및 비휘발성 메모리 장치, 플로피 디스크, 하드 디스크 드라이브, CD-ROM, DVD, 자기 테이프, 기타 등등을 포함하지만 이에 한정되는 것은 아니다. 게다가, 본 발명은 데이터가 무선 네트워크를 비롯한 전송 네트워크를 통해 한 형태의 신호 전달 매체에서 다른 형태의 신호 전달 매체로 교환되는지 여부에 상관없이 임의의 형태의 신호 전달 매체에 적용된다. 신호 전달 매체의 예가 도 1에서는 시스템 메모리(102) 및 데이터 저장 장치(125-127)로서 도시되어 있다.
본 발명의 특정 실시예가 어떤 대안들과 함께 기술되어 있지만, 당업자라면 형태 및 상세에 있어서의 부가적인 변형이 이하의 청구항들의 범위 내에서 행해질 수 있음을 잘 알 것이다.
본 발명의 구성에 따르면, 스레드가 그의 짧은 실행 기간 동안에 캐쉬를 플러시하는 것이 효과적으로 방지되며, 따라서 다른 활성 스레드에 대한 방해를 감소 시킬 수 있다.
Claims (20)
- 스레드 상태의 유지 및 복수의 스레드의 동시 실행을 지원하는 복수의 레지스터 세트를 포함하는 프로세서로서, 상기 복수의 레지스터 세트의 각각의 레지스터 세트는 각각의 스레드에 대응하는 것인 프로세서,상기 프로세서에 의해 실행가능한 명령어들을 저장하는 메모리, 및복수의 프로세서-실행가능 명령어들로서 구현되는 운영 체제로서, 상기 프로세서로 디스패치(dispatch)하기 위한 스레드를 선택하는 디스패처(dispatcher)를 포함하는 운영 체제를 포함하며,상기 스레드들은 특수 클래스의 복수의 스레드 및 상기 특수 클래스에 속하지 않는 복수의 스레드를 포함하며,하나 이상의 상기 레지스터 세트는 상기 특수 클래스의 스레드들을 위해 예비 할당되어 있는 것인 디지털 데이터 처리 장치.
- 제1항에 있어서, 상기 특수 클래스의 스레드들은 높은 우선순위 I/O 바운드 스레드(I/O bound thread)를 포함하는 것인 디지털 데이터 처리 장치.
- 제1항에 있어서, 각각의 실행 우선순위는 상기 복수의 레지스터 세트의 상기 레지스터 세트 각각과 연관되어 있고,상기 프로세서는 상기 복수의 레지스터 세트 중에서 실행을 위한 명령어들을 선택하는 명령어 유닛을 포함하며, 상기 명령어 유닛은 각각의 상기 레지스터 세트의 각각의 실행 우선순위에 따라 명령어들을 우선적으로 선택하는 것인 디지털 데이터 처리 장치.
- 제3항에 있어서, 상기 특수 클래스의 스레드들을 위해 예비 할당된 상기 레지스터 세트는 상기 특수 클래스의 스레드들을 위해 예비 할당되지 않은 상기 복수의 레지스터 세트 중 어떠한 레지스터 세트보다 더 높은 실행 우선순위를 갖는 것인 디지털 데이터 처리 장치.
- 제1항에 있어서, 상기 디스패처는 디스패처 특정 레지스터 세트들에서 실행하기 위한 스레드를 디스패치하고,상기 디스패처는 상기 특수 클래스에 속하지 않는 상기 스레드들을, 상기 특수 클래스의 스레드들을 위해 예비 할당된 상기 하나 이상의 레지스터 이외의 레지스터 세트로만 디스패치하는 것인 디지털 데이터 처리 장치.
- 제1항에 있어서, 상기 프로세서 상에서 실행 중인 스레드에 의한 사용을 위해 상기 메모리의 선택적인 내용을 일시적으로 저장하는 하나 이상의 캐쉬를 더 포함하고,상기 프로세서 상에서 실행 중인 상기 특수 클래스의 스레드들이 상기 캐쉬 의 일부분보다 더 많이 채워지는 것이 방지되며,상기 일부분은 상기 캐쉬의 전부보다 작은 것인 디지털 데이터 처리 장치.
- 스레드 상태의 유지 및 복수의 스레드의 동시 실행을 지원하는, 복수의 레지스터 세트를 포함하는 프로세서로서, 상기 복수의 레지스터 세트의 각각의 레지스터 세트는 각각의 스레드에 대응하는 것인 프로세서,상기 프로세서에 의해 실행가능한 명령어들을 저장하는 메모리, 및상기 프로세서 상에서 실행 중인 스레드들에 의한 사용을 위해 상기 메모리의 선택적인 내용을 일시적으로 저장하는 캐쉬를 포함하며,상기 스레드들은 특수 클래스의 복수의 스레드 및 상기 특수 클래스에 속하지 않는 복수의 스레드를 포함하며,상기 프로세서 상에서 실행 중인 상기 특수 클래스의 스레드는 상기 캐쉬의 일부분보다 더 많이 채워지는 것이 방지되며,상기 일부분은 상기 캐쉬의 전부보다 작은 것인 디지털 데이터 처리 장치.
- 청구항 8은(는) 설정등록료 납부시 포기되었습니다.제7항에 있어서, 상기 특수 클래스의 스레드들은 높은 우선순위 I/O 바운드 스레드(I/O bound thread)를 포함하는 것인 디지털 데이터 처리 장치.
- 제7항에 있어서, 상기 캐쉬는 복수의 캐쉬 라인을 포함하며,각각의 라인은 상기 특수 클래스의 스레드들이 동일하게 이용가능하고,상기 데이터 처리 장치는 상기 특수 클래스의 스레드들에 의해 채워지는 상기 캐쉬 라인의 수를 제한하는 캐쉬 충전 수단(cache filling facility)을 더 포함하는 것인 디지털 데이터 처리 장치.
- 청구항 10은(는) 설정등록료 납부시 포기되었습니다.제9항에 있어서, 상기 캐쉬는 복수의 연관 세트(associativity set)를 포함하고, 각각의 연관 세트는 N개(단, N은 1보다 큰 정수)의 캐쉬 라인을 포함하며,상기 캐쉬 충전 수단은 상기 캐쉬로부터 축출하기 위한 캐쉬 라인을 선택하는 축출 로직(eviction logic)을 포함하고,상기 축출 로직은 상기 특수 클래스의 스레드들에 의해 채워진 상기 연관 세트 내의 캐쉬 라인의 총수가 N보다 작은 미리 정해진 값과 같거나 큰 경우, 상기 연관 세트로부터 축출하기 위한 상기 특수 클래스의 스레드에 의해 채워진 라인을 우선적으로 선택하는 것인 디지털 데이터 처리 장치.
- 청구항 11은(는) 설정등록료 납부시 포기되었습니다.제7항에 있어서, 상기 캐쉬는 복수의 개별적인 부분으로 분할되며,하나 이상의 부분이 상기 특수 클래스의 스레드들에 할당되고 하나 이상의 부분이 상기 특수 클래스에 속하지 않는 스레드들에 할당되는 것인 디지털 데이터 처리 장치.
- 청구항 12은(는) 설정등록료 납부시 포기되었습니다.제7항에 있어서, 상기 하나 이상의 캐쉬는 제1 레벨에 있는 하나 이상의 캐쉬 및 제2 레벨에 있는 하나 이상의 캐쉬를 포함하고,상기 프로세서 상에서 실행 중인 상기 특수 클래스의 스레드들은 상기 제1 레벨에 있는 상기 하나 이상의 캐쉬의 일부분보다 더 많이 채워지는 것이 방지되지만, 상기 제2 레벨에 있는 상기 하나 이상의 캐쉬의 일부분보다 많이 채워지는 것은 방지되지 않으며,상기 일부분은 상기 제1 레벨에 있는 상기 하나 이상의 캐쉬의 전부보다 작은 것인 디지털 데이터 처리 장치.
- 디스패치 기능을 지원하는 컴퓨터 프로그램이 기록된 컴퓨터 판독가능 기록매체로서,상기 컴퓨터 프로그램은 상기 컴퓨터 판독가능 기록매체에 기록된 복수의 컴퓨터-실행가능 명령어로서 구현되는 멀티스레드 프로세서의 디스패처를 포함하고,상기 컴퓨터-실행가능 명령어는, 하나 이상의 컴퓨터 시스템에 의해 실행될 때, 상기 하나 이상의 컴퓨터 시스템으로 하여금 상기 멀티스레드 프로세서로 디스패치하기 위한 스레드를 선택하도록 하며,상기 멀티스레드 프로세서는 스레드 상태의 유지 및 복수의 스레드의 동시 실행을 지원하기 위한 복수의 레지스터 세트를 포함하며, 상기 복수의 레지스터 세트의 각각의 레지스터 세트는 각각의 스레드에 대응하고,상기 스레드들은 특수 클래스의 복수의 스레드 및 상기 특수 클래스에 속하지 않는 복수의 스레드를 포함하며,하나 이상의 상기 레지스터 세트는 상기 특수 클래스의 스레드들을 위해 예비 할당되어 있고,상기 디스패처는 디스패치되는 스레드가 상기 특수 클래스의 스레드인지 여부에 따라 상기 스레드가 디스패치되는 상기 멀티스레드 프로세서의 상기 복수의 레지스터 세트 중에서 한 레지스터 세트를 선택하는 것인 컴퓨터 판독가능 기록매체.
- 청구항 14은(는) 설정등록료 납부시 포기되었습니다.제13항에 있어서, 상기 특수 클래스의 스레드들은 높은 우선순위 I/O 바운드 스레드를 포함하는 것인 컴퓨터 판독가능 기록매체.
- 디지털 데이터 처리 시스템에서 사용하기 위한 디지털 데이터 프로세서 칩으로서,스레드 상태의 유지 및 복수의 스레드의 동시 실행을 지원하는 복수의 레지스터 세트를 포함하는 프로세서 코어로서, 상기 복수의 레지스터 세트의 각각의 레지스터 세트는 각각의 스레드에 대응하는 것인 프로세서 코어, 및상기 프로세서 코어 상에서 실행 중인 스레드들에 의해 사용되는 캐쉬로서, 상기 프로세서 상에서 실행 중인 스레드들에 의한 사용을 위해 상기 디지털 데이터 처리 시스템의 메모리의 선택적인 내용을 일시적으로 저장하는 것인 캐쉬를 포함하며,상기 스레드들은 특수 클래스의 복수의 스레드 및 상기 특수 클래스에 속하 지 않는 복수의 스레드를 포함하고,상기 프로세서 상에서 실행 중인 상기 특수 클래스의 스레드는 상기 캐쉬의 일부분보다 더 많이 채워지는 것이 방지되며,상기 일부분은 상기 캐쉬의 전부보다 작은 것인 디지털 데이터 프로세서 칩.
- 청구항 16은(는) 설정등록료 납부시 포기되었습니다.제15항에 있어서, 상기 캐쉬는 복수의 캐쉬 라인을 포함하며,각각의 라인은 상기 특수 클래스의 스레드들이 동일하게 이용가능하고,상기 데이터 처리 장치는 상기 특수 클래스의 스레드들에 의해 채워지는 상기 캐쉬 라인의 수를 제한하는 캐쉬 충전 수단(cache filling facility)을 더 포함하는 것인 디지털 데이터 프로세서 칩.
- 청구항 17은(는) 설정등록료 납부시 포기되었습니다.제16항에 있어서, 상기 캐쉬는 복수의 연관 세트(associativity set)를 포함하고, 각각의 연관 세트는 N개(단, N은 1보다 큰 정수)의 캐쉬 라인을 포함하며,상기 캐쉬 충전 수단은 상기 캐쉬로부터 축출하기 위한 캐쉬 라인을 선택하는 축출 로직(eviction logic)을 포함하고,상기 축출 로직은 상기 특수 클래스의 스레드들에 의해 채워진 상기 연관 세트 내의 캐쉬 라인의 총수가 N보다 작은 미리 정해진 값과 같거나 큰 경우, 상기 연관 세트로부터 축출하기 위한 상기 특수 클래스의 스레드에 의해 채워진 라인을 우선적으로 선택하는 것인 디지털 데이터 프로세서 칩.
- 청구항 18은(는) 설정등록료 납부시 포기되었습니다.하나 이상의 부분이 상기 특수 클래스의 스레드들에 할당되고, 하나 이상의 부분이 상기 특수 클래스에 속하지 않는 스레드들에 할당되는 것인 디지털 데이터 프로세서 칩.
- 청구항 19은(는) 설정등록료 납부시 포기되었습니다.제15항에 있어서, 상기 프로세서 칩은 제1 레벨에 있는 하나 이상의 캐쉬 및 제2 레벨에 있는 하나 이상의 캐쉬를 포함하고,상기 제1 레벨은 상기 제2 레벨보다 상기 프로세서 코어에 더 근접하며,상기 프로세서 코어 상에서 실행 중인 상기 특수 클래스의 스레드들은 상기 제1 레벨에 있는 상기 하나 이상의 캐쉬의 일부분보다 더 많이 채워지는 것이 방지되지만, 상기 제2 레벨에 있는 상기 하나 이상의 캐쉬의 일부분보다 더 많이 채워지는 것은 방지되지 않으며,상기 일부분은 상기 제1 레벨에 있는 상기 하나 이상의 캐쉬의 전부보다 작은 것인 디지털 데이터 프로세서 칩.
- 청구항 20은(는) 설정등록료 납부시 포기되었습니다.제15항에 있어서, 하나 이상의 상기 레지스터 세트는 상기 특수 클래스의 스레드들에 대해 예비 할당되어 있는 것인 디지털 데이터 프로세서 칩.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/290,887 US7624257B2 (en) | 2005-11-30 | 2005-11-30 | Digital data processing apparatus having hardware multithreading support including a register set reserved for special class threads |
US11/290,887 | 2005-11-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20070056945A KR20070056945A (ko) | 2007-06-04 |
KR100810017B1 true KR100810017B1 (ko) | 2008-03-07 |
Family
ID=38088885
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020060110854A KR100810017B1 (ko) | 2005-11-30 | 2006-11-10 | 서로 다른 스레드에 대한 비대칭 하드웨어 멀티스레딩지원을 갖는 디지털 데이터 처리 장치 |
Country Status (4)
Country | Link |
---|---|
US (2) | US7624257B2 (ko) |
KR (1) | KR100810017B1 (ko) |
CN (1) | CN100530082C (ko) |
TW (1) | TW200805150A (ko) |
Families Citing this family (52)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7624257B2 (en) * | 2005-11-30 | 2009-11-24 | International Business Machines Corporation | Digital data processing apparatus having hardware multithreading support including a register set reserved for special class threads |
KR100770034B1 (ko) * | 2006-03-02 | 2007-10-26 | 삼성전자주식회사 | 복수의 레지스터 파일을 이용한 문맥 교환 방법 및 시스템 |
US9003410B2 (en) * | 2007-01-30 | 2015-04-07 | Hewlett-Packard Development Company, L.P. | Abstracting a multithreaded processor core to a single threaded processor core |
GB2448118B (en) * | 2007-04-03 | 2011-08-24 | Advanced Risc Mach Ltd | Error recovery following erroneous execution with an instruction processing pipeline |
US7747820B2 (en) * | 2007-06-15 | 2010-06-29 | Microsoft Corporation | Managing working set use of a cache via page coloring |
US8584138B2 (en) * | 2007-07-30 | 2013-11-12 | Hewlett-Packard Development Company, L.P. | Direct switching of software threads by selectively bypassing run queue based on selection criteria |
US9772853B1 (en) * | 2007-09-17 | 2017-09-26 | Rocket Software, Inc | Dispatching a unit of work to a specialty engine or a general processor and exception handling including continuing execution until reaching a defined exit point or restarting execution at a predefined retry point using a different engine or processor |
CN101546282B (zh) * | 2008-03-28 | 2011-05-18 | 国际商业机器公司 | 用于在处理器中执行写拷贝的方法和设备 |
US10089119B2 (en) | 2009-12-18 | 2018-10-02 | Microsoft Technology Licensing, Llc | API namespace virtualization |
US8341355B2 (en) * | 2010-05-25 | 2012-12-25 | International Business Machines Corporation | Reducing energy consumption of set associative caches by reducing checked ways of the set association |
US8413158B2 (en) | 2010-09-13 | 2013-04-02 | International Business Machines Corporation | Processor thread load balancing manager |
CN102141938B (zh) * | 2010-12-03 | 2013-01-30 | 华为技术有限公司 | 多线程系统中软件负荷的调整方法及装置 |
US8725993B2 (en) * | 2011-02-23 | 2014-05-13 | International Business Machines Corporation | Thread transition management |
US8776094B2 (en) | 2011-08-11 | 2014-07-08 | Microsoft Corporation | Runtime system |
US8695021B2 (en) | 2011-08-31 | 2014-04-08 | Microsoft Corporation | Projecting native application programming interfaces of an operating system into other programming languages |
TWI556092B (zh) | 2011-09-30 | 2016-11-01 | 英特爾公司 | 用以減少電力消耗之基於優先順序的應用程式事件控制技術 |
TWI497419B (zh) * | 2011-10-20 | 2015-08-21 | Via Tech Inc | 電腦裝置及其中斷任務分配方法 |
US9069598B2 (en) * | 2012-01-06 | 2015-06-30 | International Business Machines Corporation | Providing logical partions with hardware-thread specific information reflective of exclusive use of a processor core |
US9201810B2 (en) * | 2012-01-26 | 2015-12-01 | Microsoft Technology Licensing, Llc | Memory page eviction priority in mobile computing devices |
US9639466B2 (en) * | 2012-10-30 | 2017-05-02 | Nvidia Corporation | Control mechanism for fine-tuned cache to backing-store synchronization |
US10095765B1 (en) * | 2013-04-10 | 2018-10-09 | Marvell International Ltd. | Method and apparatus for a hardware-implemented AVL tree module |
US9817667B2 (en) * | 2013-05-23 | 2017-11-14 | Advanced Micro Devices, Inc. | Techniques for scheduling operations at an instruction pipeline |
US9760511B2 (en) * | 2014-10-08 | 2017-09-12 | International Business Machines Corporation | Efficient interruption routing for a multithreaded processor |
US10635504B2 (en) | 2014-10-16 | 2020-04-28 | Microsoft Technology Licensing, Llc | API versioning independent of product releases |
US9575802B2 (en) | 2014-10-28 | 2017-02-21 | International Business Machines Corporation | Controlling execution of threads in a multi-threaded processor |
US11080064B2 (en) | 2014-10-28 | 2021-08-03 | International Business Machines Corporation | Instructions controlling access to shared registers of a multi-threaded processor |
US9652817B2 (en) * | 2015-03-12 | 2017-05-16 | Samsung Electronics Co., Ltd. | Automated compute kernel fusion, resizing, and interleave |
US10275280B2 (en) | 2016-08-10 | 2019-04-30 | International Business Machines Corporation | Reserving a core of a processor complex for a critical task |
US10248457B2 (en) | 2016-08-10 | 2019-04-02 | International Business Machines Corporation | Providing exclusive use of cache associated with a processing entity of a processor complex to a selected task |
CN117555598A (zh) * | 2016-09-28 | 2024-02-13 | 北京忆芯科技有限公司 | 调度方法与装置 |
US10223164B2 (en) | 2016-10-24 | 2019-03-05 | International Business Machines Corporation | Execution of critical tasks based on the number of available processing entities |
US10248464B2 (en) | 2016-10-24 | 2019-04-02 | International Business Machines Corporation | Providing additional memory and cache for the execution of critical tasks by folding processing units of a processor complex |
US12099876B2 (en) * | 2017-04-03 | 2024-09-24 | Ocient Inc. | Coordinating main memory access of a plurality of sets of threads |
CN107707665A (zh) * | 2017-10-19 | 2018-02-16 | 郑州云海信息技术有限公司 | 一种网络存储方法、装置、系统及计算机可读存储介质 |
US10592164B2 (en) | 2017-11-14 | 2020-03-17 | International Business Machines Corporation | Portions of configuration state registers in-memory |
US10642757B2 (en) | 2017-11-14 | 2020-05-05 | International Business Machines Corporation | Single call to perform pin and unpin operations |
US10496437B2 (en) | 2017-11-14 | 2019-12-03 | International Business Machines Corporation | Context switch by changing memory pointers |
US10552070B2 (en) | 2017-11-14 | 2020-02-04 | International Business Machines Corporation | Separation of memory-based configuration state registers based on groups |
US10698686B2 (en) | 2017-11-14 | 2020-06-30 | International Business Machines Corporation | Configurable architectural placement control |
US10901738B2 (en) | 2017-11-14 | 2021-01-26 | International Business Machines Corporation | Bulk store and load operations of configuration state registers |
US10761983B2 (en) | 2017-11-14 | 2020-09-01 | International Business Machines Corporation | Memory based configuration state registers |
US10761751B2 (en) | 2017-11-14 | 2020-09-01 | International Business Machines Corporation | Configuration state registers grouped based on functional affinity |
US10635602B2 (en) | 2017-11-14 | 2020-04-28 | International Business Machines Corporation | Address translation prior to receiving a storage reference using the address to be translated |
US10664181B2 (en) | 2017-11-14 | 2020-05-26 | International Business Machines Corporation | Protecting in-memory configuration state registers |
US10558366B2 (en) | 2017-11-14 | 2020-02-11 | International Business Machines Corporation | Automatic pinning of units of memory |
US12019920B2 (en) | 2018-01-29 | 2024-06-25 | Micron Technology, Inc. | Memory controller with programmable atomic operations |
EP3746902B1 (en) | 2018-01-29 | 2023-09-27 | Micron Technology, Inc. | Memory controller |
US10691490B2 (en) * | 2018-07-06 | 2020-06-23 | Apple Inc. | System for scheduling threads for execution |
CN110297722B (zh) * | 2019-06-28 | 2021-08-24 | Oppo广东移动通信有限公司 | 线程任务通信方法及相关产品 |
KR20210051718A (ko) | 2019-10-31 | 2021-05-10 | 에스케이하이닉스 주식회사 | 데이터 저장 장치 및 그것의 동작 방법 |
US11625269B1 (en) * | 2021-03-31 | 2023-04-11 | Amazon Technologies, Inc. | Scheduling for locality of reference to memory |
US20240289282A1 (en) * | 2023-02-23 | 2024-08-29 | Apple Inc. | Cache Control to Preserve Register Data |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07191847A (ja) * | 1992-02-25 | 1995-07-28 | Ind Technol Res Inst | 静的インタリーブを用いたマルチスレッドマイクロコンピュータ |
JPH11203149A (ja) | 1998-01-13 | 1999-07-30 | Matsushita Electric Ind Co Ltd | タスクスケジュール装置およびその方法 |
KR20040065981A (ko) * | 2003-01-16 | 2004-07-23 | 인터내셔널 비지네스 머신즈 코포레이션 | 스레드 유형에 근거한 컴퓨터 자원의 동적 할당 |
JP2005182825A (ja) | 2003-12-18 | 2005-07-07 | Nvidia Corp | マルチスレッド式マイクロプロセッサのスレッドにまたがるアウト・オブ・オーダー命令ディスパッチ |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US6202129B1 (en) | 1998-03-31 | 2001-03-13 | Intel Corporation | Shared cache structure for temporal and non-temporal information using indicative bits |
US6275907B1 (en) * | 1998-11-02 | 2001-08-14 | International Business Machines Corporation | Reservation management in a non-uniform memory access (NUMA) data processing system |
US6938252B2 (en) | 2000-12-14 | 2005-08-30 | International Business Machines Corporation | Hardware-assisted method for scheduling threads using data cache locality |
US20020103847A1 (en) * | 2001-02-01 | 2002-08-01 | Hanan Potash | Efficient mechanism for inter-thread communication within a multi-threaded computer system |
US7080379B2 (en) | 2002-06-20 | 2006-07-18 | International Business Machines Corporation | Multiprocessor load balancing system for prioritizing threads and assigning threads into one of a plurality of run queues based on a priority band and a current load of the run queue |
US7496915B2 (en) * | 2003-04-24 | 2009-02-24 | International Business Machines Corporation | Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes |
US20040268093A1 (en) | 2003-06-26 | 2004-12-30 | Samra Nicholas G | Cross-thread register sharing technique |
US7103735B2 (en) * | 2003-11-26 | 2006-09-05 | Intel Corporation | Methods and apparatus to process cache allocation requests based on priority |
US7475399B2 (en) * | 2004-01-13 | 2009-01-06 | International Business Machines Corporation | Method and data processing system optimizing performance through reporting of thread-level hardware resource utilization |
US20060036810A1 (en) * | 2004-08-12 | 2006-02-16 | International Business Machines Corporation | System, application and method of reducing cache thrashing in a multi-processor with a shared cache on which a disruptive process is executing |
US7624257B2 (en) * | 2005-11-30 | 2009-11-24 | International Business Machines Corporation | Digital data processing apparatus having hardware multithreading support including a register set reserved for special class threads |
-
2005
- 2005-11-30 US US11/290,887 patent/US7624257B2/en not_active Expired - Fee Related
-
2006
- 2006-09-08 CN CNB2006101517453A patent/CN100530082C/zh not_active Expired - Fee Related
- 2006-11-08 TW TW095141321A patent/TW200805150A/zh unknown
- 2006-11-10 KR KR1020060110854A patent/KR100810017B1/ko not_active IP Right Cessation
-
2007
- 2007-10-24 US US11/923,455 patent/US8250347B2/en not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07191847A (ja) * | 1992-02-25 | 1995-07-28 | Ind Technol Res Inst | 静的インタリーブを用いたマルチスレッドマイクロコンピュータ |
JPH11203149A (ja) | 1998-01-13 | 1999-07-30 | Matsushita Electric Ind Co Ltd | タスクスケジュール装置およびその方法 |
KR20040065981A (ko) * | 2003-01-16 | 2004-07-23 | 인터내셔널 비지네스 머신즈 코포레이션 | 스레드 유형에 근거한 컴퓨터 자원의 동적 할당 |
JP2005182825A (ja) | 2003-12-18 | 2005-07-07 | Nvidia Corp | マルチスレッド式マイクロプロセッサのスレッドにまたがるアウト・オブ・オーダー命令ディスパッチ |
Also Published As
Publication number | Publication date |
---|---|
CN100530082C (zh) | 2009-08-19 |
KR20070056945A (ko) | 2007-06-04 |
US8250347B2 (en) | 2012-08-21 |
US7624257B2 (en) | 2009-11-24 |
TW200805150A (en) | 2008-01-16 |
CN1975663A (zh) | 2007-06-06 |
US20080040583A1 (en) | 2008-02-14 |
US20070124568A1 (en) | 2007-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100810017B1 (ko) | 서로 다른 스레드에 대한 비대칭 하드웨어 멀티스레딩지원을 갖는 디지털 데이터 처리 장치 | |
US6871264B2 (en) | System and method for dynamic processor core and cache partitioning on large-scale multithreaded, multiprocessor integrated circuits | |
EP1029269B1 (en) | Method and apparatus for selecting thread switch events in a multithreaded processor | |
US6018759A (en) | Thread switch tuning tool for optimal performance in a computer processor | |
JP3965157B2 (ja) | 非均一メモリ・アクセス(numa)コンピュータ・システムでタスクをディスパッチする方法および装置 | |
US6076157A (en) | Method and apparatus to force a thread switch in a multithreaded processor | |
US6212544B1 (en) | Altering thread priorities in a multithreaded processor | |
US6105051A (en) | Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor | |
US6567839B1 (en) | Thread switch control in a multithreaded processor system | |
US6317811B1 (en) | Method and system for reissuing load requests in a multi-stream prefetch design | |
JP4006436B2 (ja) | 種々のキャッシュ・レベルにおける連想セットの重畳一致グループを有するマルチレベル・キャッシュ | |
US20110055838A1 (en) | Optimized thread scheduling via hardware performance monitoring | |
Racunas et al. | Partitioned first-level cache design for clustered microarchitectures | |
BiTalebi et al. | LARA: Locality-aware resource allocation to improve GPU memory-access time | |
JP2004021426A (ja) | コンピュータシステム及び該コンピュータシステムに適したハードウェア/ソフトウェアロジック並びにキャッシュ方法 | |
Aamodt et al. | Memory System |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20110110 Year of fee payment: 4 |
|
LAPS | Lapse due to unpaid annual fee |