KR20070055554A - 스레드 라이브록 유닛 - Google Patents

스레드 라이브록 유닛 Download PDF

Info

Publication number
KR20070055554A
KR20070055554A KR1020077006549A KR20077006549A KR20070055554A KR 20070055554 A KR20070055554 A KR 20070055554A KR 1020077006549 A KR1020077006549 A KR 1020077006549A KR 20077006549 A KR20077006549 A KR 20077006549A KR 20070055554 A KR20070055554 A KR 20070055554A
Authority
KR
South Korea
Prior art keywords
livelock
processor
logical processor
thread
state
Prior art date
Application number
KR1020077006549A
Other languages
English (en)
Other versions
KR100880470B1 (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 KR20070055554A publication Critical patent/KR20070055554A/ko
Application granted granted Critical
Publication of KR100880470B1 publication Critical patent/KR100880470B1/ko

Links

Images

Classifications

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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Bus Control (AREA)
  • Multi Processors (AREA)
  • Debugging And Monitoring (AREA)
  • Hardware Redundancy (AREA)
  • Power Sources (AREA)

Abstract

스레드가 명령 방출과 함께 진행할 수 없는 경우, 스레드에 우선순위를 할당하는 방법, 장치 및 시스템의 실시예. 적어도 하나의 실시예에 대해, 스레드는 메모리 라이브록 차단기 로직 및/또는 고갈 회피 로직을 포함하는 멀티프로세서 시스템의 복수의 활성 스레드 중 하나이다. 다른 실시예도 또한 기술되고 청구된다.
멀티스레드(multithread), 라이브록(livelock), 멀티코어 멀티스레드 시스템(multicore multithreaded system).

Description

스레드 라이브록 유닛{THREAD LIVELOCK UNIT}
본 명세서는 일반적으로는 정보 프로세싱 시스템(information processing system)에 관한 것이며, 특히 멀티스레드(multi-threaded) 프로세싱 시스템에 있어서의 다수의 동시 스레드 간의 라이브록(livelock) 감지 및 보정에 관한 것이다.
마이크로프로세서(microprocessor)를 포함하는 것과 같은 정보 프로세싱 시스템의 성능을 증가시키기 위해, 하드웨어 및 소프트웨어 기술 모두가 사용되어 왔다. 하드웨어 측면에서, 마이크로프로세서의 성능을 개선하기 위한 마이크로프로세서 설계 방안은 증가된 클럭(clock) 속도, 파이프라이닝(pipelining), 분기 예측(branch prediction), 슈퍼 스칼라 실행(super-scalar execution), 비순차적 실행(out-of-order execution) 및 캐쉬(cache)를 포함하여 왔다. 그러한 많은 방안들은 트랜지스터 개수의 증가를 초래하였고, 일부 경우에는, 개선된 성능비 보다 더 큰 비율로 트랜지스터 개수를 증가시키는 결과를 가져왔다.
트랜지스터의 추가를 통해서만 성능을 증가시키려고 하기 보다, 다른 방식의 성능 향상은 소프트웨어 기술을 수반하는 것이다. 프로세서 성능을 개선하기 위해 사용되어 온 하나의 소프트웨어 접근법은 "멀티스레딩(multithreading)"으로 알려져 있다. 소프트웨어 멀티스레딩에서, 명령 스트림(instruction stream)은 병렬로 실행될 수 있는 다수의 명령 스트림으로 나누어질 수 있다. 이와 달리, 다수의 독립적인 소프트웨어 스트림이 병렬로 실행될 수 있다.
시분할(time-slice) 멀티스레딩 또는 시간-다중화(time-multiplex; TMUX) 멀티스레딩으로 알려진 한 가지 방법에서는, 단일 프로세서가 고정 시간 주기 후 스레드 사이를 스위치(switch)한다. 또 다른 방법에서, 단일 프로세서는, 장기 대기시간 캐쉬 미스(long latency cache miss)와 같은 트리거 이벤트(trigger event)가 발생하는 경우 스레드 사이를 스위치한다. 스위치-온-이벤트 멀티스레딩(switch-on-event multithreading; SoEMT)으로 알려진 후자의 방안에서는, 주어진 시간에 많아야 단 한 개의 스레드가 활성화된다.
점차적으로, 멀티스레딩은 하드웨어 면에서 지원된다. 예를 들면, 한 가지 방법에서, 칩 멀티프로세서(chip multiprocessor; CMP) 시스템과 같은 멀티 프로세서 시스템의 프로세서는 복수의 소프트웨어 스레드 중 하나에 대해 동시에 각각 동작할 수 있다. 동시 멀티스레딩(simultaneous multithreading; SMT)으로 지칭되는 다른 방법에서, 단일 물리 프로세서가 운영체제(operating system) 및 사용자 프로그램에게 복수의 논리 프로세서로 보이도록 한다. SMT에서, 복수의 소프트웨어 스레드는 스위칭 없이 단일 프로세서 상에서 동시에 활성화되고 실행할 수 있다. 즉, 각각의 논리 프로세서가 완전한 세트의 아키텍처(architecture) 상태를 관리하지만, 캐쉬, 실행 유닛(execution unit), 분기 예측기(branch predictor), 컨트롤 로직(control logic) 및 버스(bus)와 같은, 물리 프로세서의 다른 많은 자원들은 공유된다. SMT에서, 복수의 소프트웨어 스레드로부터의 명령은 이렇게 각각의 논 리 프로세서 상에서 실행된다.
SMT 및/또는 CMP 시스템과 같이, 소프트웨어 스레드의 동시 실행을 지원하는 시스템에 있어서, 둘 이상의 동시 활성화된 스레드 간의 공유 자원에 대한 경쟁이, 스레드 중 적어도 하나가 순방향으로 진행하는 것을 막을 수 있는 가능성이 존재한다. 활성화된 다른 스레드와의 자원 경합으로 인해 스레드가 순방향 진행을 할 수 없게 되는 것을 "라이브록(livelock)"이라고 한다.
본 발명의 실시예는 이하 도면을 참조하여 이해될 수 있으며, 유사 요소는 유사 참조 부호에 의해 표시된다. 이 도면은 멀티스레드 프로세싱 시스템에서 다수의 동시 스레드 간의 라이브록을 감지하고 조정하기 위한 장치, 시스템 및 방법의 채택된 실시예를 도시하고자 함이며, 발명을 한정하려는 것은 아니다.
도 1은 복수의 스레드 라이브록 유닛을 포함하는 프로세서의 적어도 하나의 실시예의 블록도로, 각 유닛은 복수의 논리 프로세서 중 하나에 대한 순방향 스레드 진행을 결정한다.
도 2는 개시된 기술을 수행할 수 있는 멀티스레드 시스템의 적어도 하나의 실시예를 도시하는 블록도.
도 3은 다수의 논리 프로세서 각각에 대한 스레드 라이브록 유닛(thread livelock unit)을 포함하는 프로세서의 적어도 하나의 실시예에 대한 프론트 엔드(front end)와 실행 코어(core)를 도시하는 블록도.
도 4는 다수의 논리 프로세서 각각에 대한 스레드 라이브록 유닛을 포함하는 프로세싱 시스템의 적어도 하나의 실시예에 대한 메모리 계층(hierarchy)을 도시하는 블록도.
도 5 및 도 6은 복수의 동시 스레드(concurrent thread) 간의 라이브록을 감지하고 해결하는 방법의 적어도 하나의 실시예를 도시하는 상태도(state diagram).
도 7은 도 5 및 도 6에 도시된 방법에 대하여 휴지 상태(idle state)로 진입하기 위한 리셋 조건을 도시하는 블록도.
도 8은 복수의 프로세서 간의 라이브록 우선순위 요청(livelock priority request)을 중재하는 방법의 적어도 하나의 실시예를 도시하는 흐름도(flowchart).
도 9는 스레드 라이브록 유닛 및 메모리 라이브록 유닛 간에 공유되는 라이브록 차단 로직(livelock breaker logic)의 적어도 하나의 실시예를 도시하는 블록도.
이하의 설명에서, 프로세서 타입, 멀티스레딩 환경 및 마이크로아키텍처 구조(microarchitectural structure)와 같은 많은 구체적인 내용이 본 발명의 보다 완전한 이해를 돕기 위해 기술될 것이다. 그러나, 당업자는 그러한 구체적인 내용 없이도 발명이 실시될 수 있다는 점을 인식할 것이다. 또한 몇몇 잘 알려진 구조, 회로 등은 본 발명을 불필요하게 모호하게 만드는 것을 피하기 위하여 상세히 나타내지 않았다.
본 명세서에 개시된 방법, 장치 및 시스템 실시예는 멀티스레드 프로세싱 시스템에 있어서 라이브록의 감지 및 회피에 필요한 것이다. 적어도 하나의 개시된 실시예에 대하여, 스레드 라이브록 유닛(thread livelock unit)은 논리 프로세서에 대한 소프트웨어 스레드의 명령의 방출(retirement)을 추적하는 메카니즘을 포함한다. 방출 추적은 스레드가 순방향 진행을 하고 있는지 추적하는 한 가지 접근법일 뿐이다. 본 명세서에서 논의되는 실시예는 순방향 진행의 표지(indicator)로서 명령의 방출에 초점을 맞추고 있으나, 당업자라면 다른 실시예에서 스레드가 순방향 진행을 하고 있는지 결정하기 위해 다른 또는 추가적인 표지를 이용할 수 있음을 인지할 것이다. 예를 들면, 스레드 진행 신호 또는 레지스터(resister)의 값을 구할 수 있고, 명령 포인터(pointer)의 진행을 추적할 수 있고, 또는 임의의 다른 진행-표시 신호(progress-indicating signal) 또는 표지의 값을 구할 수도 있다.
도 1은 멀티스레딩을 수행할 프로세서(104) 및 중재기(arbitrator)(180)의 적어도 하나의 실시예를 도시한다. 프로세서(104)와 중재기(180)는 단일 칩 패키지(103)에 존재할 수 있다. 프로세서(104)는 동시 멀티스레딩을 지원하는 다중(multiple) 논리 프로세서(150a-150n)를 포함할 수 있다. 적어도 하나의 실시예에 대해, 프로세서(104)는 SMT 프로세싱 능력을 제공하기 위해 자체의 다중 논리 프로세서(150a-150n)를 이용한다. 그러한 실시예에서, 각각의 논리 프로세서(150a-150n)는 자체의 고유 명령 시퀀서(예로, 도 3의 340 참조)를 가지고 있다. 그러한 실시예에서, 단일 프로세서 코어(104)의 실행 자원이 모든 동시 SMT 소프트웨어 스레드 간에 공유될 수 있지만, 논리 프로세서(150)는 자체의 고유 버전의 아키텍처 상태를 관리한다.
SMT에 대해, 복수의 다중 소프트웨어 스레드들이 각각 다수의 논리 프로세서(150) 중 하나 상에서 동시에 동작할 수 있다. 논리 프로세서(150a-150n)는 또한 본 명세서에서 "물리 스레드(physical thread)"로 상호교환적으로 지칭될 수 있다. 다른 방법으로 특별히 명시하지 않는 한, 본 명세서에서 사용되는 "스레드"라는 용어는, "물리적" 또는 "소프트웨어"라고 단서를 달지 않는 경우, 활성화된 논리 프로세서 및 그 논리 프로세서가 실행하고 있는 연관된 소프트웨어 명령 스트림을 통합적으로 지칭하는 것으로 한다.
도 1은 스레드 라이브록 유닛("TLU")(165a-165n)이 각각의 논리 프로세서(150a-150n)와 연관될 수 있음을 도시한다. 적어도 하나의 실시예에 대해, TLU(165)는 이와 같이 프로세서(104)의 물리 스레드(150a-150n) 각각에 대해 스레드 단위(per-thread basis)로 복제되어 있다. 특정 물리 스레드(150)에 대한 TLU(165)는 때때로 본 명세서에서 간단히 물리 스레드의 "TLU"라고 지칭할 수 있다.
도 1은 프로세서(104)가 또한 메모리 라이브록 유닛(memory livelock unit; "MLU")(166)을 포함할 수 있음을 도시한다. 메모리 라이브록 유닛(166)은 1) 메모리 라이브록 표지에 기초하여 단일 프로세서(104)에 대한 동시 스레드로들부터의 메모리 동작(memory operation)들 간의 라이브록을 감지하고, 2) 그러한 라이브록을 해결하는 동작을 취할 수 있다.
TLU(165)의 동작은 도 5 내지 도 7과 관련하여 이하에서 보다 상세히 논의된다. 일반적으로, 스레드 라이브록 유닛(165)은 1) 소정의 스레드 라이브록 표지에 기초하여, 관련된 논리 프로세서에 대한 소프트웨어 스레드가 순방향 진행에 실패하고 있는지("라이브록 상태")를 결정하고, 2) 그러한 라이브록을 해결하는 동작을 취할 수 있다. 적어도 하나의 실시예에 대해, 스레드 라이브록 유닛(165)은 그것의 논리 프로세서가 명령을 방출했거나, 다른 방식으로 잠재적인 순방향 진행을 나타낸 이후, 사이클(cycle)의 숫자를 카운트함으로써 순방향 진행이 부족한지를 판별할 수 있다. 특히, 스레드 라이브록 유닛(165)이 감지할 수 있는 하나의 특정한 조건은 "명령 고갈(instruction starvation)"로 지칭된다. 명령 고갈은 첫번째 스레드가 다른 스레드를 위한 명령 인출(instruction fetching)을 블록하거나 심하게 지연시키는 상태를 말한다. 결과적으로, 다른 스레드는 "명령 고갈되었다(instruction starved)" 또는 I-고갈되었다(I-starved)고 말한다. 명령 고갈 상태인 스레드는 실행을 위한 가용 명령이 없어진 상태이다 - 방출할 명령이 없기 때문에 순방향 진행을 할 수 없다.
스레드 라이브록 유닛(165)이 라이브록을 해결하기 위해 동작을 취하는 경우, 스레드 라이브록 유닛(165)은 본 명세서에서 "활성(active)"이라고 지칭된다. 스레드 라이브록 유닛(165)은 임의의 여러 가지 라이브록 차단 동작을 수행하기 위해 "활성"이 될 수 있으며, 이는 TLU(165)가 연관된 스레드의 순방향 진행을 촉진하는 책임을 갖는다. 예를 들면, 첫번째 논리 프로세서(150)의 TLU(165)는, 연관된 논리 프로세서(150)가 순방향 진행을 할 수 없는 것에 반응하여, 하나 이상의 다른 논리 프로세서(150)가 정지되도록, 또는 하나 이상의 다른 논리 프로세서(150)에 대한 마이크로아키텍처 상태가 리셋(때때로 본 명세서에서 "누크(nuked)"로 표시한다)되도록 요청하는 동작을 취할 수 있다. 또한, 예를 들면, 활성 TLU(165)는 명령 고갈을 해결하는 동작을 취하기 위해 라이브록 차단기(예로, 이하의 도 9와 관련된 공유 라이브록 차단기(950)에 대한 논의 참조)를 호출할 수 있다. 또한 활성 TLU(165)는 장기 대기시간 캐쉬 미스(long-latency cache miss)가 감지되는 경우 중재기(180)로부터 우선순위(priority)를 요청할 수 있다. 그러한 동작을 취하는 몇몇 실시예가 도 5 내지 7과 관련하여 이하 보다 상세히 논의될 것이다.
이와 같이, 일 실시예에 따르면, TLU(165a-165n)는, 중재기(180)와 함께, SMT 소프트웨어 스레드의 실행중 라이브록 조건을 감지하고 해결하기 위해 논리 프로세서(150a-150n)와 프로세서(104)에 대한 MLU(166) 간의 우선순위 매김을 집행한다. 또한, TLU(165a-165n)는 소정 라이브록 조건을 감지하고 해결하기 위해 자체적으로 논리 프로세서(150a-150n) 사이의 우선순위 매김을 집행할 수 있다. 마지막으로, 멀티코어 프로세싱 시스템(multi-core processing system)에 있어서, 중재기(180)도 스레드 라이브록을 해결하기 위해 다수의 코어들 간의 우선순위 매김을 집행할 수 있다. 그러나, 여러 가지 상이한 실시예에서, 이러한 특징의 일부 또는 전부가 존재할 수도 있고 존재하지 않을 수도 있다.
도 2는 다수의 동시 스레드 간의 라이브록을 감지하고 해결하는 개시된 기술을 수행할 수 있는 멀티코어 멀티스레드 연산 시스템(multi-core multithread computing system)(200)의 적어도 하나의 실시예를 도시하는 블록도이다. 도 1 및 도 2에서 유사한 요소는 유사한 참조 부호로 표시된다.
도 2는, 연산 시스템(200)은 적어도 하나의 프로세서 코어(104a) 및 메모리(202)를 포함한다는 것을 도시한다. 메모리(202)는 프로세서(104a-104n)의 동작을 제어하는 데이터(240) 및 명령(241)을 저장할 수 있다. 적어도 하나의 실시예에 대해, 프로세서(104a)는 단일 칩 패키지(103) 내에 존재하는 복수의 프로세서 코어(104a-104n) 중 하나일 수 있다. 104n을 포함하는, 추가적인 프로세서들은 선택적(optional)이다. 도 2에서 추가적인 프로세서들의 선택적 특성은 타원과 파선에 의해 표시된다.
도 2는 프로세싱 코어(104a-104n) 외에, 추가적인 로직(280)이 칩 패키지(103) 상에 존재할 수 있음을 도시한다. 그러한 추가적인 로직(280)은 때때로 본 명세서에서 "언코어(uncore)"로 지칭된다. 추가적인 로직(280)은 하나 이상의 캐쉬(251)와 중재 및 제어 로직(252)을 포함할 수 있다. 캐쉬(251)는 프로세서(104a-104n) 간에 공유되는 최종 레벨의 공유 통합 데이터(last-level shared unified data) 및 명령 캐쉬(instruction cache)일 수 있다. 중재 및 제어 로직(252)은 지점간 통신 컨트롤러(point-to-point communication controller), 글로벌 통신 큐(global communication queue), 및/또는 중재 로직(180)을 포함할 수 있다(도 1 참조).
추가적인 로직(280)은 또한 통합 메모리 컨트롤러(integrated memory controller)(253)를 선택적으로 포함할 수 있다. 통합 메모리 컨트롤러(253)는 오프-칩 메모리(off-chip memory)(202)로의 인터페이스를 제공할 수 있다. 그러한 실시예에 대해, 칩셋(chipset)(255)은 기본적으로 그래픽 관련 기능성을 지원한다. 칩셋(255)은 또한 하나 이상의 입/출력(I/O) 장치(290)와의 연결성을 제공할 수 있다. 적어도 하나의 실시예에 대해, 칩셋(255)은 하나 이상의 칩셋 장치를 포함할 수 있으며, 각각의 칩셋 장치는 분리된 인터페이스 기능성을 제공한다. 예를 들면, 칩셋 장치 중 하나는 그래픽 기능성을 지원할 수 있고, 반면 다른 칩셋 장치는 I/O 연결성 및/또는 펌웨어 허브(firmware hub)(도시되지 않음)와의 인터페이스를 지원할 수 있다.
칩 패키지(103)에 통합 메모리 컨트롤러(253)를 포함하지 않는 실시예에 대해, 칩셋(255)은 오프-칩 메모리(202)로의 인터페이스를 제공할 수 있다. 그러한 실시예에 대해, 칩셋(255)은 또한 메모리 컨트롤 기능성 외에, 상기 기술한 그래픽, I/O 및/또는 펌웨어 기능성을 제공할 수 있다.
시스템(200)의 실시예가 지점간 통신 컨트롤러를 중재 및 제어 로직(252)의 일부로서 구비하는 것으로 본 명세서에서 논의되고 있으나, 그러한 컨트롤러가 모든 실시예에 필요한 것은 아니다. 사실, 당업자라면 본 명세서에서 논의된 라이브록 감지 및 보정 메카니즘의 실시예가 다중 분기 버스(multi-drop bus) 또는 다른 통신 토폴로지(topology)를 사용하는 시스템에서 수행될 수 있음을 인지할 것이다.
도 1에 도시된 바와 마찬가지로, 도 2는 시스템(200)의 하나 이상의 프로세서 코어(104a-104n)의 적어도 하나의 실시예가, 각각의 논리 프로세서(150a-150n)에 대한 TLU(165)를 포함하고, 또한 메모리 라이브록 유닛(166)을 포함하는 멀티스레딩 코어일 수 있음을 도시한다.
복수의 프로세서 코어(104a-104n)를 포함하는 프로세싱 시스템(200)의 실시예에 대해, 프로세스 코어(104a-104n) 상의 물리 프로세서(150a-150n) 중 하나에 대한 TLU가 보정 동작을 취하였으나 그와 관련된 물리 스레드(150)가 그와 관련된 소프트웨어 스레드에 대한 명령의 실행에 있어서 여전히 순방향 진행을 하지 못한다면, TLU는 중재 로직(180)에 신호를 보낼 수 있다. 그러한 경우, 다른 프로세서 코어(104)의 동작이 첫번째 프로세서 코어(104a)가 순방향 진행을 하는 것을 방해하고 있을 수 있다. 이하에서 보다 상세히 설명되는 바와 같이, 중재 로직(180)은 요청 코어(104)에 우선순위를 부여할 수 있고 및/또는 다른 코어들을 "누크(nuke)"하는 동작을 취할 수도 있다.
따라서, 각각의 코어에 대한 MLU(166)와 함께, 각각의 프로세서 코어(104)에 대한 TLU(165a-165n)와 중재기(180)는 함께 통합 라이브록 감소기(coordinated livelock reducer)를 형성할 수 있다. 라이브록 감소기는 이렇게 각각의 코어(104)에 대한 라이브록 회로를 포함할 수 있으며, 라이브록 회로는 코어에 대한 TLU(165a-165n) 및 MLU(166)를 포함할 수 있다. 이하에서 보다 상세히 기술되는 바와 같이, 라이브록 감소기는 제1 프로세서(104a)로부터 스레드에 대한 스레드 진행 정보를 수신할 수 있고, 제1 프로세서 코어(104a)로부터의 제1 스레드에 대한 스레드 진행 정보에 대응하여 제2 프로세서 코어(104n)의 스레드의 활동을 조정할 수 있다.
이하에서 보다 상세히 설명되는 바와 같이, 프로세서(104)의 적어도 하나의 실시예는 물리 스레드(150)가 현재의 명령 스트림에 대해 순방향 진행을 할 수 없음을 TLU(165)가 감지함에 따라 MLU(166)의 동작 로직을 호출하도록 설계될 수 있다. MLU(166) 로직은, 예를 들면, TLU(165)가 명령 고갈(I-side starvation)을 해결하는 동작을 취하는 경우 호출될 수 있다. (이하 도 6의 상태(604)에 대한 논의 참조).
도 3은 복수의 동시 스레드 사이의 라이브록 상태를 감지하고 해결하는 개시된 기술을 수행할 수 있는 프로세서(104)에 대한 적어도 하나의 실시예를 더 상세히 도시하는 블록도이다. 프로세서(104)는 실행될 가능성이 있는 명령을 미리 인출(prefetch)하는 프론트 엔드(front end)(320)를 포함할 수 있다.
적어도 하나의 실시예에 대해, 프론트 엔드(320)는 하나 이상의 논리 프로세서(150a-150n) 각각에 대하여 논리적으로 독립적인 시퀀서(340a-340n)를 포함하는 인출/디코드 유닛(fetch/decode unit)(322)을 포함한다. 인출/디코드 유닛(322)은 명령 캐쉬로부터 적합한 명령을 인출할 수 있다(예를 들면, 도 4의 I-캐쉬(444) 참조). 인출/디코드 유닛(322)은 또한 명령을 최종 또는 중간 형태로 디코드하는 디코드 로직을 포함할 수 있다.
물리적 인출/디코드 유닛(322)은 이렇게 각각이 물리 스레드(150)에 대응하는, 복수의 논리적으로 독립적인 시퀀서(340a-340n)를 포함한다. 물리 스레드(150)에 대한 시퀀서(340)는 물리 스레드(150)에 의해 실행될 관련 소프트웨어 명령 스트림(본 명세서에서 "소프트웨어 스레드"로도 지칭됨)의 다음 명령을 결정한다. 시퀀서(340a-340n)는 어떤 명령이 다음으로 실행되는지 결정하기 위해 분기 예측기(branch predictor)(도 4의 432 참조)로부터의 정보를 이용할 수 있다.
도 3은 프로세서(104)의 적어도 하나의 실시예가 실행을 위한 명령을 준비하고, 명령을 실행하고, 실행된 명령을 방출하는 실행 코어(execution core)(330)를 포함한다는 것을 도시한다. 실행 코어(330)는 비순차적 명령어 처리를 위한 명령을 스케줄(schedule)하는 비순차적 로직(out-of-order logic)을 포함할 수 있다. 실행 코어(330)는 명령이 실행 파이프라인을 통해 흘러 실행을 위해 스케줄될 때 명령 플로우(instruction flow)를 원활히 하거나 재구성(re-order)하기 위해 이용하는 하나 이상의 자원(362)을 포함할 수 있다. 이러한 자원(362)은 스케줄되지 않은 명령, 메모리 오더링 버퍼(memory ordering buffer), 완료되지 않은 로드 명령 목록을 관리하는 로드 요청 버퍼(load request buffer), 완료되지 않은 저장 명령 목록을 관리하는 저장 요청 버퍼(store request buffer), MLU(도 1의 166 참조) 등을 관리하는 하나 이상의 명령 큐(queue)를 포함할 수 있다.
실행 코어(330)는 비순차적 방식으로 실행된 명령을 다시 본래 프로그램 순서로 재구성하는 방출 로직을 포함할 수 있다. 그러한 방출 로직은 실행 파이프라인의 명령이 방출될 때까지 실행 파이프라인의 명령에 대한 정보를 관리하는 적어도 하나의 방출 큐(retirement queue)(364)를 포함할 수 있다. 적어도 하나의 실시예에 대해, 방출 큐의 일부가 각각의 논리 프로세서(150a-150n)에 할당되도록, 방출 큐(364)는 논리 프로세서(150a-150n) 사이에 파티션(partition)될 수 있다. 이와 달리, 분리된 방출 큐(364)가 각각의 논리 프로세서(150a-150n)에 대해 이용될 수도 있다.
방출 로직은 실행 유닛(360)으로부터 실행된 명령의 완료 상태를 수신할 수 있으며, 프로그램 순서에 따라 적절한 아키텍처 상태가 수행(또는 방출)되도록 결과를 처리할 수 있다. 방출 로직은 또한 스레드 라이브록 유닛(165a-165n)을 포함할 수 있다. 적어도 하나의 실시예에 대해, 프로세서(104)는 각각의 논리 프로세서(150a-150n)에 대해 분리된 TLU(165a-165n)를 포함할 수 있다.
물론, 당업자라면 실행 코어(330)는 명령을 프로그램 순서에 따라 처리할 수 있고 반드시 비순차적 프로세싱을 제공할 필요는 없다는 것을 인지할 것이다. 그러한 경우에는, 방출 큐(364)는 재구성 버퍼(reorder buffer)가 아니라, 단순히 그러한 명령이 방출될 때까지 명령을 프로그램 순서대로 관리하는 버퍼일 뿐이다. 이와 유사하게, 그러한 순차적 프로세서에 대한 실행 자원(362)은 비순차적 프로세싱에 대한 명령을 재구성 및 추적하는 기능을 갖는 구조를 포함하지 않는다.
도 4는 개시된 기술을 실시할 수 있는 멀티스레드 비순차 프로세싱 시스템(400)의 적어도 하나의 실시예를 도시하는 블록도이다. 도 4와 도 1, 2, 및/또는 3에서 유사한 요소는 유사한 참조 부호로 표시한다. 도 4는 프로세싱 시스템이 메모리 서브시스템(memory subsystem)(490), 프로세서(404) 및 메모리 컨트롤러(453)를 포함할 수 있음을 도시한다.
도 4는 프로세서(404)가 도 3과 관련하여 상기 기술된 프론트 엔드(320)와 유사한 프론트 엔드(420)를 포함할 수 있음을 도시한다. 프론트 엔드(420)는 실행 코어(430)에 명령 정보를 공급한다. 적어도 하나의 실시예에 대해, 프론트 엔드(420)는 실행 코어(430)에 프로그램 순서대로 명령 정보를 공급할 수 있다.
프론트 엔드(420)는 복수의 논리 프로세서(150a-150n) 각각에 대한 복수의 독립적인 논리 시퀀서(340a-340n)를 갖는 인출/디코드 유닛(322)을 포함할 수 있다. 적어도 하나의 실시예에 대해, 프론트 엔드(420)는 실행 가능성이 있는 명령을 미리 인출(prefetch)한다. 분기 예측기 유닛(432)은 프론트 엔드가 어떤 명령이 실행 가능성이 있는지를 결정하는 것을 돕기 위해 분기 예측 정보를 공급할 수 있다.
적어도 하나의 실시예에 있어서 실행 코어(430)는 비순차적 실행에 대한 명령을 준비하고, 명령을 실행하며, 실행된 명령을 방출한다. 실행 코어(430)는 TLU(165)를 포함할 수 있다. 프로세서(404)에 대한 실행 자원(462)은 MLU(166), 명령 큐, 로드 요청 버퍼 및 저장 요청 버퍼를 포함할 수 있다.
MLU(166)는 다음의 설계 특징과 관련된 라이브록을 해결하기 위해 설계되었다: 즉, 논리 프로세서(150a-150n)는 메모리 시스템(490)의 자원을 공유할 수 있다는 것이다. 따라서, 하나의 논리 프로세서(150)로부터의 (프로그램 순서에 있어서) 이전 메모리 명령이 다른 논리 프로세서(150)로부터의 신규의 메모리 명령에 의해 블록(block)될 수 있다. MLU(166)는 이러한 상황을 감지하고 보정하기 위해 설계되었다. MLU는 다른 논리 프로세서가 하나 이상의 메모리 연산을 완료할 수 있도록 하나의 논리 프로세서를 정지시킬 수 있다.
실행 코어(430)는 비순차적 방식으로 실행된 명령을, 재구성 버퍼(reorder buffer; ROB)로 불리우는 방출 큐(464)에 본래 프로그램 순서로 재구성하는, 방출 로직을 포함할 수 있다. 이러한 방출 로직은 실행 유닛(360)으로부터 실행된 명령의 완료 상태를 수신한다. 실행 코어(430)는 하나 이상의 재구성 버퍼(464)를 포함할 수 있다. 즉, 단일 파티션된 재구성 버퍼(464)의 일부는 모든 논리 프로세서(150a-150n)에 대하여 방출되지 않은 명령 정보를 관리할 수 있다. 이와 달리, 분리된 재구성 버퍼(464)가 각각의 논리 프로세서(150)에 대하여 관리될 수 있다.
실행 코어(430)는 또한 최신의 효과적인 분기 이력 정보(branch history information)를 전달하기 위해 프로세서(404)의 프론트 엔드(420)의 분기 예측기(432)에게 분기 이력 정보를 보고할 수 있다.
본 명세서에서 사용되는 "명령 정보"라는 용어는 실행 코어(430)에 의해 이해되고 실행될 수 있는 최종 형태를 갖는 작업의 기본 단위를 나타낸다. 명령 정보는 캐쉬(425)에 저장될 수 있다. 캐쉬(425)는 실행 명령 캐쉬(execution instruction cache) 또는 실행 추적 캐쉬(execution trace cache)로 구현될 수 있다. 실행 명령 캐쉬를 이용하는 실시예에 대해, "명령 정보"는 명령 캐쉬(444)로부터 인출된 명령들을 포함한다. 그러한 인출된 명령은 실행 명령 캐쉬에 저장되기 전 마이크로 연산(micro-operation)으로 디코드될 수도 또는 디코드되지 않을 수도 있다. 추적 캐쉬를 이용하는 실시예에 대해, "명령 정보"라는 용어는 매크로 명령(macroinstruction)으로부터 디코드된 마이크로 연산의 추적 기록(trace)을 포함할 수 있다. 실행 명령 캐쉬 또는 추적 캐쉬 모두 이용하지 않는 실시예에 대해, "명령 정보"는 또한 명령 캐쉬(I-캐쉬(444)와 같은 것)에 저장될 수 있는 명령에 대한 로우 바이트(raw byte)를 포함할 수 있다.
프로세싱 시스템(400)은 메모리(202)와 함께 하나 이상의 캐쉬(442, 444)를 포함할 수 있는 메모리 서브시스템(490)을 포함한다. 도 4에 그와 같이 도시되어 있지는 않으나, 당업자라면 캐쉬(442, 444)의 한쪽 또는 양쪽의 전부 또는 일부는 프로세서(404)에 탑재된 온-디 캐쉬(on-die cache)로 물리적으로 구현될 수 있음을 인지할 것이다. 메모리 서브 시스템(490)은 메모리 계층 구조로 구현될 수 있으며, 또한 데이터(240) 및/또는 명령(241)과 같은 정보를 메모리(202)로부터 계층 레벨로 전달하는 것을 용이하게 하기 위해 상호접속(453)을 포함할 수 있다. 당업자라면 비포함 계층 구조(non-inclusive hierarchy) 구성을 포함하여, 메모리 계층 구조에 대한 다양한 구성이 사용가능하다는 것을 인지할 것이다.
도 4에는 비순차적 프로세싱 시스템(400)만이 도시되어 있으나, 본 명세서에서 논의된 실시예는 순차적 프로세싱 시스템에도 동등하게 적용 가능하다는 것은 당업자에게 자명하다. 그러한 순차적 프로세싱 시스템은 일반적으로 ROB(464)를 포함하지 않는다. 그러나, 그러한 순차적 시스템은 방출되지 않은 명령을 추적하기 위해 방출 큐(도 3의 364 참조)는 포함할 수 있다.
도 5, 6 및 7은 모두 복수의 동시 스레드 간에 라이브록 상태가 존재하는지를 결정하고 라이브록 상태를 해소하기 위한 동작을 취하는 방법(500)의 적어도 하나의 실시예를 도시하는 상태도를 나타낸다. 적어도 하나의 실시예에 대해, 도 1 내지 4에서 도시된 TLU(165)와 같은 스레드 라이브록 유닛은 상기 방법(500)을 수행할 수 있다. TLU(165)는 상태 머신(state machine)으로 상기 방법(500)을 구현하는 하드웨어 유닛일 수 있다.
이제, 도 3 및 도 4를 참조하여 도 5에 대해 논의한다. 도 5에 대한 배경지식으로, 도 3과 도4에 각각 도시된 프로세서(104 및 404)와 같은 SMT 프로세서의 적어도 하나의 실시예에 대해, 각각의 논리 프로세서(150)가 완전한 세트의 아키텍처 상태를 관리하고 있음을 이해하는 것이 도움이 된다. 또한, 방출 큐(364) 또는 ROB(464) 및 실행 자원(362, 462)과 같은 프로세서의 특정한 부분들은 각각의 동시 활성 소프트웨어 스레드에 대한 마이크로아키텍처 상태 정보를 관리할 수 있다. 소정 조건에 있어서, 활성 스레드는 정지될 수 있고 상기 스레드에 대한 마이크로아키텍처 상태는 SMT 논리 프로세서(150)로부터 플러시(flush) 또는 "누크"될 수 있다. (순방향 진행을 하고 있을 수 있는) 선택되지 않은 논리 프로세서의 마이크로아키텍처 상태를 정지 또는 "누크" 시킴으로써, 선택된 논리 프로세서는 현재의 비트 패턴(beat pattern)으로부터 벗어날 수 있고 선택되지 않은 논리 프로세서의 방해 없이 순방향 진행을 할 수 있을 수 있다.
도 5는 방법(500)이 휴지 상태(idle state)(502)를 포함하는 것을 도시한다. 도 5는 또한 하나 이상의 리셋 조건(501)이 만족되는 경우 휴지 상태(502)로 진입(551)할 수 있음을 도시한다. 도 5 및 6을 간략화하기 위해, 블록(501)과 상태(502) 사이의 화살표(551)는 임의의 리셋 조건(501)이 만족되었음을 표시한다. 당업자라면 하나 이상의 리셋 조건에 대해, 상태(502)로의 천이는 도 5 및 6에 도시된 다른 상태들(504, 506, 508, 602, 604, 606) 중 하나로부터 발생할 수 있다는 것을 인지할 것이다. 그러나, 단순화할 목적으로, 그러한 천이를 표시하는 화살표는 도 5 및 6에 도시되지 않았다.
도 7을 보면, 하나 이상의 리셋 조건(501)에 대한 적어도 하나의 실시예를 볼 수 있다. 도 7은 본 명세서에서 도 4 및 5를 참조하여 논의된다. 적어도 하나의 실시예에 대해, 리셋 조건(501)은 단일 코어 프로세싱 시스템 또는 멀티 코어 프로세싱 시스템 모두에 적용될 수 있다. 이하의 논의에서, "현재 논리 프로세서"라는 용어는 리셋 조건(501)이 TRUE인지를 결정하는 방법(500)을 수행하는 TLU(165)와 연관된 논리 프로세서(150)를 나타내는 것으로 한다. 따라서, 프로세서 내의 하나 이상의 다른 TLU(165a-165n)도 동시에 방법(500)을 수행할 수 있으나, "현재 논리 프로세서"가 프로세서(104)의 다른 논리 프로세서(150)와는 달리 논의 대상인 논리 프로세서이다.
도 7은 TLU(165)가 상태(502, 504, 506, 508, 602, 606 및 604)를 포함하여 도 5 및 6에 도시된 임의의 다른 상태인 경우 하나 이상의 리셋 조건(501)이 TRUE가 될 수 있음을 도시한다. 하나 이상의 리셋 조건(501)이 TRUE인 경우, 상태(502)로의 천이가 유발된다. 상기 언급한 바와 같이, 임의의 다른 상태로부터 상태(502)로의 천이는 화살표(551)에 포괄되며, 이는 임의의 다른 상태로부터 휴지 상태(502)로의 천이를 나타낸다.
도 7은, 리셋 조건(501)의 조건 A는, TLU(165)가 디스에이블(disable)된 경우 TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것임을 도시한다. 그러한 조건 A는, 적어도 하나의 실시예에 대해, TLU(165)가 디스에이블될 수 있다는 가정을 반영하는 것이다. 적어도 하나의 실시예에 대해, 예를 들면, 예외 처리 루틴(exception-handling routine)의 실행 중 TLU(165)가 디스에이블될 수 있다. 마이크로코드 또는 다른 펌웨어에 의해 수행될 수 있는, 그러한 루틴 중 라이브록 감지가 디스에이블될 수 있다. TLU(165)를 디스에이블시킬 수 있는 예외의 한 예는 칩셋(예로, 도 2의 255 참조)이 프로세서(104)의 저전력 상태로의 천이를 요청하였음을 표시하는, 정지 클럭 신호(stopclock signal)와 같은, 신호의 선언(assertion)이다.
도 7은, 리셋 조건(501)의 조건 B는, 리셋 트리거(trigger)가 감지된 경우 TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것임을 도시한다. 그러한 리셋 트리거를 감지하면, TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아감으로써 효과적으로 라이브록 결정 활동을 리셋한다. 적어도 하나의 실시예에 대해, 리셋 트리거는 초기화 핀 또는 파워 다운 리셋(power-down reset)의 활성화와 같은 사용자-개시(user-initiated) 이벤트에 의해 활성화될 수 있다.
도 7은, 리셋 조건(501)의 조건 C는, TLU와 연관된 논리 프로세서(150)가 휴지 상태(idle)이고 따라서 현재 소프트웨어 스레드 실행을 시도하고 있지 않은 경우 TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것임을 도시한다. 그러한 조건은, 적어도 하나의 실시예에 대해, TLU(165)에 대한 "스레드 활성" 표지를 관리하는 레지스터를 검사함으로써 TLU(165)에 의해 감지될 수 있다.
도 7은, 리셋 조건(501)의 조건 D는, 프로세서 코어(104)의 다른 논리 프로세서(150)가 배타적 액세스 모드(exclusive access mode)에 있는 경우 TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것임을 도시한다. 배타적 액세스 모드에 있는 동안, 하나의 논리 프로세서는 다른 모든 논리 프로세서가 인식할 필요가 있는 동작을 취하고 있을 수 있다. 예를 들면, 하나의 논리 프로세서가 ROB(464)와 같은 공유 자원의 재파티션(re-partitioning)에 영향을 주는 명령을 실행시키고 있는 때가 있을 수 있다. 또는, 예를 들면, 하나의 논리 프로세서가 컨트롤 레지스터의 캐쉬 디스에이블 비트(cache disable bit)를 세트하는 것과 같이 전역적 변경(global change)을 일으키는 명령을 실행할 수 있다. 그러한 환경에서, 다른 모든 논리 프로세서는 배타적 액세스 동작이 완료될 때까지 실행을 정지하여야 한다. 그러한 시간 동안, 정지된 TLU(165)는 그와 연관된 논리 프로세서가 순방향 진행을 하는 것을 기대할 수 없고, 따라서 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다. 적어도 하나의 실시예에 대해, TLU(165)는 프로세서(104)의 다른 논리 프로세서(150)가 배타적 액세스 모드에 있는 지를 결정하는 공유 신호(예를 들면, 이는 마이크로아키텍처 레지스터에 반영될 수 있는 신호)를 검사함으로써 조건 D가 만족되었는지 결정할 수 있다.
도 7은, 리셋 조건(501)의 조건 E는, TLU(165)의 논리 프로세서(150)가 I-side 고갈 동작 상태(604)(도 6 참조) 밖으로 천이된 경우 TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것임을 도시한다. 그러한 천이는 현재 논리 프로세서(150) 상의 I-side 고갈을 해소하려는 시도에 있어서 성공적인 동작(상태(604)와 관련하여 이하 논의함)이 이루어졌음을 나타내며, 따라서 TLU(165)는 고갈 회피(starvation-avoidance) 동작이 효과를 나타낼 시간을 주기 위해 휴지 상태(502)로 돌아가 새로운 라이브록 감지 시퀀스를 시작하여야 한다.
도 7은 또한, 리셋 조건(501)의 조건 F는, 메모리 라이브록 유닛(166)이 현재 활성 상태인 경우 TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것임을 도시한다. 이러한 조건 F를 통해, TLU(165)는 메모리 라이브록 유닛(166)에게 우선순위를 부여한다. 그러한 우선순위 부여 기법은 TLU(165)와 MLU(166) 간의 경쟁에 의해 야기되는 라이브록을 방지하는데 유용하다. 즉, 상기 언급된 바와 같이, MLU(166)는 다른 논리 프로세서가 하나 이상의 메모리 연산을 완료할 수 있도록 하나의 논리 프로세서(150)의 메모리 연산을 정지시킬 수 있다. 리셋 조건 F가 없는 경우, 정지된 논리 프로세서는 불필요한 라이브록 상태로 인해 순방향 진행을 할 수 없다고 잘못 결정할 수 있다. 조건 F는, 그러한 경우, TLU(165)가 MLU(166)에게 우선순위를 부여한다는 것을 보증한다. 따라서, 리셋 조건 F는 각각의 TLU(165) 및 MLU(166)이 서로에 대해 인지하고, 협력하여 서로 함께 동작한다는 것을 보증한다.
도 7은 또한, 리셋 조건(501)의 조건 G는, "누크" 동작이 TLU의 논리 프로세서에 대해 선언되는 경우 TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것임을 도시한다. 논리 프로세서(150)에 대한 누크 동작은 다음의 결과를 갖는다: 즉, 현재의 매크로 연산(macro-operation)의 실행을 모두 완료하기 위해 필요한 임의의 다른 명령 뿐만 아니라, 현재의 명령도 완료된다는 것이다. 더 이상의 모든 명령 실행이 중지되고 모든 파이프라인 및, 논리 프로세서(150)에 대한, 연관된 마이크로아키텍처 상태가 플러시(flush)된다. 이러한 방식으로, 스레드에 대한 프로세싱이 중지될 뿐 아니라 그 마이크로아키텍처 상태도 플러시된다.
예를 들면 전체-"누크" 동작이 다른 논리 프로세서(150a-150n)에 의해 개시되었다면 현재 논리 프로세서에 대한 조건 G가 TRUE일 수 있다. 예를 들면, 그러한 조건은 다른 논리 프로세서가 상태(606)의 완료의 결과로서 전체-"누크" 동작을 실시한 경우 만족될 수 있다. 그러한 경우, 적어도 하나의 실시예에 대해, 현재 논리 프로세서는 중지될 것이고 그 마이크로아키텍처 상태는 플러시될 것이다; 따라서 현재 논리 프로세서에 대한 TLU(165)는 휴지 상태(502)로 돌아가야 한다.
이와 달리, 만일 다른 논리 프로세서가 상태(606)를 완료하지 못한 경우, 특정 논리 프로세서에 대해 조건 G가 만족될 수 있다. 대신, 현재 논리 프로세서(150)에 대한 "누크" 동작이 방법(500)의 상태와 달리 관련이 없는 프로세서의 임의의 다른 여러 가지 이벤트에 의해 개시될 수 있다. 예를 들면, "누크" 이벤트는 비순차적 프로세서(104)에 대한 정확한 예외 처리를 제공하기 위해 현재 논리 프로세서(150)의 인터럽트의 결과로서 선언될 수 있다.
도 7은 또한, 리셋 조건(501)의 조건 H는, 다른 논리 프로세서의 TLU(165)가 "활성화"되어 라이브록 차단 동작을 취하는 단계에 있는 경우 TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것임을 도시한다. 조건 H에 의해, 제1 TLU(165)가 감지 상태(502, 504, 506 참조)에서, 라이브록 조건을 해결하려 하는 일종의 보정 동작을 취한다는 점에서 제1 TLU(165)가 "활성"인 상태(508, 602, 606, 604 참조)로 천이되었다면 제2 TLU(165)는 제1 TLU(165)에게 양보하도록 설계된다. 조건 H가 만족되기 위해서는 각각의 TLU(165)가 프로세서 상의 다른 TLU(165)의 상태를 알고 있음을 필요로 한다(도 3은, 적어도 하나의 실시예에 대해, 모든 TLU(165a-165n)가 서로 통신하는 것을 도시한다).
동일한 클럭 사이클(clock cycle) 동안 하나 이상의 TLU(165)가 활성 상태로 천이하려고 하는 "타이(tie)" 상황이 발생할 수 있다. 그러한 경우, 요청 TLU(165)들 중 하나에게만 우선순위가 부여될 수 있다. 예를 들면, 우선순위는 가장 낮은 번호의 TLU에게 할당될 수 있다(즉, 165a가 165b보다 상위 우선순위를 가지며, 따라서 165b는 휴지 상태(502)로 돌아간다). 이와 달리, 많은 다른 우선순위 선택 메카니즘이 이용될 수 있다. 적어도 하나의 실시예에 대해, 우선순위 메카니즘은 중재기(예로, 도 1의 180 참조)에 의해 집행된다. 이 경우 우선순위 할당에 이용되는 중재 정책은 도 8과 관련하여 이하 기술된 블록(806)에서 이용되는 것과 동일한 정책일 수 있으나, 반드시 그러할 필요는 없다.
도 7은 또한, 리셋 조건(501)의 조건 I는, TLU(165)가 탐욕스런 행동(greedy behavior)을 보여 다른 논리 프로세서(150) 상의 라이브록 상태의 원인이 될 가능성이 있는 경우, TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것임을 도시한다. 그러한 탐욕스런 행동은 여러 가지 방법으로 파악될 수 있다. 즉, TLU(165)는, 그 실행 자원 중 하나가 가득 차서 ROB(364) 부분이 비어있는 프로세서(150)와 같이, I-side 고갈 외의 이유로 TLU의 논리 프로세서(150)의 ROB(364) 부분이 비어있는 경우 비휴지 상태(non-idle state)에 남아야 할 필요가 없다.
예를 들면, 논리 프로세서(150)가 시스템의 메모리 대역폭(bandwidth)을 정체시켜 현재 논리 프로세서(150)에 대한 저장 버퍼가 저장 명령으로 차버리게끔 하는 일련의 저장 명령을 발행함으로써 탐욕스런 행동을 보일 수 있다. 적어도 하나의 실시예에 대해, 논리 프로세서(150)의 명령 처리는 실행 자원(예를 들면 저장 버퍼와 같은 것)이 더 이상 가득 차있지 않을 때까지 정지될 수 있다. 논리 프로세서(150)가 이와 같이 정지된 시간 동안, 현재 논리 프로세서에 대한 ROB(364) 부분은 비어 있을 수 있으나, 다른 실행 자원(즉, 저장 버퍼)은 가득 차 있다. 따라서, 조건 I에 대해, 현재 논리 프로세서(150)에 대한 ROB(364)의 할당된 부분이 비어 있으나, 그 저장 버퍼(또는 임의의 다른 특정 실행 자원)는 아직 캐쉬 또는 메모리로 전달되지 않은 데이터를 가진 방출된 저장 명령으로 가득 차 있는 경우, 탐욕스런 행동이 파악될 수 있다. 그러한 경우, 현재 논리 프로세서(150)는 휴지 상태(502)로 돌아오고 다른 논리 프로세서의 TLU(165)가 활성화될 필요가 있는 경우 절대적으로 우선순위를 양보한다.
도 7은 또한, 리셋 조건(501)의 조건 J는, TLU(165)의 논리 프로세서가 실행에 가용한 명령을 갖고, 다른 논리 프로세서가 상위 우선순위의 록 시퀀스(lock sequence)를 수행하고 있는 경우, TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것을 표시함을 도시한다. 상위 우선순위의 록 시퀀스는, 예를 들면, 기본 명령(atomic instruction)일 수 있다. 기본 명령에 대해, 프로세서의 메모리 로직은 얼마의 시간이 걸리건 간에, 록(lock)이 걸린 연산이 완료될 때까지, 록이 걸린 스레드 상에서만 동작한다. 이러한 유형의 상위 우선순위 록 시퀀스는 프로세서 내의 최상위 우선순위를 나타낼 수 있다. 따라서, 리셋 조건 J는 다른 논리 프로세서가 현재 이러한 유형의 상위 우선순위 록 시퀀스를 처리하고 있는 경우 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아감으로써 이러한 우선순위를 집행한다. 다른 프로세서가 일련의 상위 우선순위 록 시퀀스를 수행하고 있어서, 현재 논리 프로세서(150)가 자체의 고유 메모리 명령을 장시간 동안 실행하지 못하는 경우, 현재 논리 프로세서가 자체 메모리 명령을 실행하도록 하기 위해 아마도 MLU(166)가 호출될 것이다. 따라서, 두 논리 프로세서 간의 경합하는 메모리 명령에 있어서, MLU(166)는 다른 논리 프로세서 상의 일련의 상위 우선순위 록으로 인해 하나의 논리 프로세서가 허용할 수 없을 만큼 장시간 정지되는 것을 방지할 수 있다.
그러나, 만일 현재 논리 프로세서가 실행할 명령을 가지고 있지 않다면(즉, 현재 논리 프로세서의 ROB(464)가 비어있음) 리셋 조건 J는 만족되지 않는다. 즉, 다른 논리 프로세서가 현재 상위 우선순위의 록 연산을 처리하고 있으나, 현재 논리 프로세서의 ROB(464) 부분이 비어있는 경우, TLU(165)는 휴지 상태(502)로 돌아가지 않는다. ROB(464) 부분이 비어있다면, 현재 논리 프로세서는 처리할 명령을 가지고 있지 않다. 따라서, MLU(166)가, 다른 논리 프로세서에 의해 수행되는 일련의 상위 우선순위 록 연산에 현재 논리 프로세서가 종속되는 것을 방지할 것으로 기대할 수 없다. 그러한 경우, TLU(165)는 현재 논리 프로세서가 그러한 일련의 상위 우선순위 록 연산을 접하여 과도하게 오래 중지되는 것을 방지할 책임이 있다. 따라서, 만일 현재 논리 프로세서(150)가 빈 ROB(464) 부분을 가지고 다른 스레드 상에 진행 중인 상위 우선순위 록이 존재한다면, 현재의 TLU(165)는 상태(506)에서 I-side 고갈 방지 동작을 수행하여야 하는지에 대한 결정을 진행하여야 한다.
도 7은 또한, 리셋 조건(501)의 조건 K는, 현재 논리 프로세서(150)가 장기 대기시간의 데이터를 수신한 경우, TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것을 표시함을 도시한다. 적어도 하나의 실시예에 대해, 조건 K는 캐쉬 미스(cache miss)의 결과로 데이터 또는 명령을 기다리고 있던 논리 프로세서가 결국 데이터 또는 명령을 수신하는 경우 만족된다. 그 시점에서, 현재 논리 프로세서는 휴지 상태(502)로 돌아가야 한다. 이는, 만일 현재 논리 프로세서(150)가 조건 K가 만족됨에 따라 휴지 상태(502)로 돌아가지 않는다면, 논리 프로세서(150)가 캐쉬 미스와 관련된 우선순위 요청(530)을 중재기(180)(도 1 및 2 참조)에게 계속 잘못 송신할 수 있기 때문이다(이하 상태(506)에 관한 논의 참조).
도 7은 또한, 리셋 조건(501)의 조건 L은, 적절한 시간 프레임(frame) 동안 현재 논리 프로세서(150)가 적어도 하나의 최종 형태의 명령을 방출한 경우, TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것임을 도시한다. 적어도 하나의 실시예에 대해, 최종 형태의 명령은 마이크로 연산(micro-operation)이며, 적절한 시간 간격은 단일 클럭 사이클이다. 만일 조건 L이 만족되면, 현재 논리 프로세서(150)는 스레드 명령 스트림의 실행에 있어서 순방향 진행을 했다고 할 수 있다. 따라서, 라이브록 조건은 존재하지 않고, TLU(165)는 휴지 상태(502)로 돌아가거나 휴지 상태(502)에 남아 있어야 한다.
도 7은 또한, 리셋 조건(501)의 조건 M은, 중재기(180, 도 1 및 2 참조)(이하 상태(506)에 대한 논의 참조)에게 우선순위 요청(530)을 송신하는 논리 프로세서의 능력이 디스에이블된 경우, TLU(165)는 휴지 상태(502)에 남거나 / 휴지 상태(502)로 돌아가야 한다는 것임을 도시한다. 중재기(180, 도 1 및 2 참조)에게 우선순위 요청(530)을 송신하는 논리 프로세서의 능력이 디스에이블된 경우, "손상(defeature)"이 TRUE라고 한다. 조건 M은, 1) 다른 방식으로 상태(506)로부터 우선순위 요청(530)을 송신하도록 이끌어낼 수 있는 임의의 조건이 TRUE인 경우 및 2) 손상이 TRUE인 경우, 만족될 수 있다. 그러한 경우, 상태(506)로부터 우선순위 요청(530)을 송신하기 위한 조건이 TRUE인 경우에도, 논리 프로세서(150)는 요청을 보낼 수 없다. 따라서, 논리 프로세서(150)는 특별 케이스 상태(506)로 천이하거나 상태(506)에 남지 않고, 휴지 상태(502)에 남거나 휴지 상태(502)로 돌아가야 한다(이하에서 논의한다).
적어도 하나의 실시예에 대해, 조건 M의 첫번째 부분(즉, "1) 다른 방식으로 상태(506)로부터 우선순위 요청(530)을 송신하도록 이끌어낼 수 있는 임의의 조건이 TRUE인 경우")은 논리 프로세서(150)가 (데이터 또는 명령의) 온코어 캐쉬 미스(on-core cache miss)를 경험하고 있고, 오프-코어 소스(off-core source)(예로, 오프-코어 공유 캐쉬(251) 또는 오프-칩(off-chip) 메모리(202)와 같은 것)로부터 명령 또는 데이터를 기다리고 있는 경우 만족될 수 있다. 그러한 미스는 예를 들면, 1) 로드 명령에 대해 캐쉬 미스가 발생하였고 로드 명령이 방출 단계에 있으나, 프로세서 코어(104) 상에서 로드 데이터가 가용하지 않아(즉, 어떤 온코어 캐쉬 또는 로드 버퍼("LDRB")에서도 가용하지 않아) 방출할 수 없는 경우 발생할 수 있다. 그러한 미스는 또한 2) 논리 프로세서(150)가 명령 인출에 대해 온코어 미스를 경험하고 있고, 오프-코어 소스(예로, 오프-코어 공유 캐쉬(251) 또는 오프-칩 메모리(202)와 같은 것)로부터 명령 정보를 기다리고 있는 경우, 또는 3) 논리 프로세서(150)가 (저장(Store) 매크로 명령과 관련된 최종 형태의 저장 주소(Store-Address) 마이크로 연산인) STA 마이크로 연산에 대해 온코어 미스를 경험하고 있고, 따라서 Store-Address 마이크로 연산에 의해 표시되는 메모리 위치의 오프-코어 검색을 기다리고 있는 경우 발생할 수 있다.
즉, 그러한 3번째 조건은 만일 STA 마이크로 연산이 방출 단계에 있으나, 저장 명령과 연관된 데이터가 기록되어야 할 메모리 위치(저장 주소)가 프로세서 코어(104) 상에도, 캐쉬 또는 저장 버퍼("STRB") 내에도 없기 때문에 방출할 수 없는 경우 만족된다. 통상적으로는, 이러한 세 가지 조건 중 어느 것이든 TLU(165)를 특별 케이스 상태(506)로 천이하게 하는 원인이 될 수 있다. 그러나, 손상이 TRUE인 경우, 그러한 조건 하에서는 논리 프로세서(150)가 우선순위 요청(530)을 송신하는 능력이 디스에이블되었기 때문에, 리셋 조건 M은 그러한 천이가 발생할 수 없음을 나타낸다.
도 5로 돌아가면, TLU(165)에 의해 라이브록 상태가 존재하는지 결정하기 위해 진입될 수 있는 다른 상태들(504, 506)을 볼 수 있다. 그러한 상태들(504, 506)은 휴지 상태(502)와 함께, 본 명세서에서 "감지" 상태로 표시된다. TLU(165)가 그러한 감지 상태(502, 504, 506)에 있는 동안, 단순히 소정 조건을 모니터링할 뿐이고 라이브록을 차단하려는 시도로 임의의 확실한 동작을 취하고 있지 않기 때문에, "활성"인 것으로 보지 않는다. 이와 같이, 논리 프로세서(150)는, 감지 상태(502, 504, 506) 중 하나의 상태에 있는 동안, 도 7과 관련하여 논의된 리셋 조건(501)의 리셋 조건 H를 유발하지 않을 것이며, 따라서 다른 논리 프로세서(150a-150n 참조)가 현재 논리 프로세서(150)에게 우선순위를 양보하도록 하지 않을 것이다.
남은 두 개의 감지 상태(504 및 506)로의 진입은 논리 프로세서(150)가 휴지 상태(502) 밖으로 천이되도록 한 조건이 1) 결국 중재기(180)(도 1 및 2 참조)에게 우선순위 요청(530)을 송신함으로부터 이익을 얻을 수 있는 것인가 또는 2) 논리 프로세서(150)가 I-side 고갈로 고통받고 있을 수 있으나 다른 스레드 상의 상위 우선순위 록에 의해 동작을 취하는 것이 블록된 경우(이러한 경우를 본 명세서에서 "특별 케이스"로 지칭한다)인가에 의해 달라진다. 만일 그렇다면, TLU(165)는 휴지 상태(502)로부터 특별 케이스 상태(506)로 천이(552)한다. 그렇지 않은 경우, TLU(165)는 휴지 상태(502)로부터 초기 카운팅 상태(504)로 천이(553)한다. 이러한 상태(504, 506) 각각에 대해 이하 구분하여 논의한다.
1) 모든 리셋 조건(501)이 TRUE가 아니고, 2)
a. 논리 프로세서(150)가 온-코어 캐쉬 미스를 경험하고 있거나,
b. 논리 프로세서(150)의 ROB(464)가 비어 있으나 다른 논리 프로세서의 진행에 상위 우선순위("HP")가 있는 경우, 휴지 상태(502)로부터 특별 케이스 상태(506)로 진입한다(552).
후자의 경우(조건 2b), 현재 논리 프로세서(150)는 I-side 고갈을 경험하고 있을 수 있다. 그러나, 다른 스레드가 상위 우선순위 록 연산을 수행하고 있기 때문에 현재 논리 프로세서(150)도 중지되어야 한다. 따라서, 상위 우선순위 록 연산이 제거될 때까지, 현재 논리 프로세서(150)는 어떤 "활성" 상태로도 진행할 수 없다.
전자의 경우(2a), 논리 프로세서(150)는 온-코어 캐쉬 미스를 경험하고 있다. 적어도 하나의 실시예에 대해, 그러한 온-코어 캐쉬 미스는 리셋 조건(501)의 조건 M과 관련하여 상기 기술한 세 가지 조건(방출 단계 로드 또는 STA 명령, 또는 완료할 수 없는 명령 인출)을 검사함으로써 결정할 수 있다. 물론, 당업자라면 그러한 실시예에 한정되지 않으며, 다른 실시예에 대해 다른, 또는 추가적인 조건을 구함으로써 온-코어 캐쉬 미스를 결정할 수 있음을 인지할 것이다. 임의의 이벤트에서, 논리 프로세서(150)가 온-코어 캐쉬 미스를 경험하고 있는 경우(또한 손상은 TRUE가 아닌 경우), TLU(165)는 중재기(180)에게 우선순위 요청 신호(530)를 송신할 수 있도록, 정지 선언 상태(stall assertion state)(508)와 같은, 다른 논리 프로세서의 프로세싱을 명백히 방해하는 더 엄격한(severe) 동작 상태로 직접 천이하지 않고, 특별 케이스 상태(506)로 천이(552)하며, 이는 다른 논리 프로세서에게 최소한의 영향을 준다.
특별 케이스 상태(506)에서, TLU(165)는 특별 케이스 상태(506)로 진입한 이후 경과한 클럭 사이클 수를 카운트하기 위해 카운터를 이용한다. 다른 실시예에 대해, 클럭 사이클을 카운트하는 것 외에, 또는 그에 부가하여, 경과한 시간을 측정하는 임의의 다른 접근법이 사용될 수 있다. 소정의 클럭 사이클 수(X)가 경과한 후, TLU(165)는 우선순위 요청(530)을 선언할 수 있다. 우선순위 요청(530)은 1) 현재 논리 프로세서(150)가 캐쉬 미스를 경험하고 있는 경우, 또한 2) TLU(165)가 이러한 특별 케이스 상태(506)의 발생에 진입한 이후 소정 분량의 시간(X)이 경과한 경우 발행된다.
우선순위 요청(530)은 중재기(180)(도 1 및 2 참조)로 송신되고, 중재기(180)로 하여금 현재 논리 프로세서(150)의 메모리 요청에 다른 논리 프로세서(150a-150n 참조)로부터의 메모리 요청보다 상위 우선순위를 부여하도록 요청한다. 이와 달리, 멀티 코어 실시예(도 2의 104a-104n 참조)에서는 우선순위 요청(530)이 중재기(180)로 하여금 현재 프로세서 코어(104)의 메모리 요청에 다른 프로세서 코어보다 높은 우선순위를 부여하도록 요청할 수 있다. 후자의 실시예에 대해, 우선순위 요청(530)은 단일 코어 시스템(도 1 참조)에서는 유용하지 않다. 따라서, 도 5에서 단일 코어 실시예에 대해 코어에 특유한(core-specific) 우선순위 요청(530)의 선택적인(optional) 특징을 점선으로 표시하였다. 우선순위 요청(530)을 발행한 후, TLU(165)는 이하 논의될 이탈 조건(exit condition) 중 하나가 TRUE가 될 때까지 특별 케이스 상태(506)에 남을 수 있다.
논리 프로세서는 TLU(165)의 논리 프로세서(150)와 연관된 ROB(464) 부분이 비어 있고, 프로세서 코어(104)에 대한 임의의 다른 논리 프로세서(150a-150n 참조)가 상위 우선순위의 록 연산을 수행하고 있는 한 특별 케이스 상태(506)에 잔류(555)한다. 그러나, 특별 케이스 상태(506)에 있는 동안 TLU(165)가 다른 논리 프로세서에 대한 HP 록-진행 표지(HP lock-in-progress indicator)가 TRUE에서 FALSE로 변경되었다고 판단하는 경우, TLU(165)는 특별 케이스 상태(506)를 이탈하여 "활성" 상태, 즉 정지 선언 상태(508)로 진입(554)하며, 그곳에서 현재 논리 프로세서(150)는 다른 논리 프로세서에게 정지를 선언한다. ROB(464) 부분이 비어 있는 경우 초기 카운팅 상태(504)는 이와 같이 우회(bypass)된다. 초기 카운팅 상태(504)를 수행하는 시간이 소요되지 않기 때문에 ROB(464) 부분이 비어 있는 경우 상태(506)로부터 상태(508)로의 천이(554)는 상위 우선순위 프로세싱을 구현한다. ROB(464)가 비어 있는 경우 카운팅은 매우 오래 걸린다; 즉, 이 경우 논리 프로세서는 어떤 명령어도 갖지 않고, TLU(165)는 따라서 ROB(464)로 가능한 많은 명령을 넣도록 설계된다.
도 5는 TLU(165)가 코어(104)에 대한 메모리 라이브록 유닛(166)이 트리거되었다고 판단하는 경우에도, 특별 케이스 상태(506)로부터 천이(556)할 수 있음을 도시한다. 그러한 경우, TLU(165)는 특별 케이스 상태(506)로부터 초기 카운팅 상태(504)로 천이(556)한다. 그러한 동작 하에서, TLU(165)는, MLU(166) 로직이 논리 프로세서(150)가 경험하고 있을 수 있는(상기 기술된, 특별 케이스 상태(506)에 진입하기 위한 조건 2a 참조) 장기 대기시간의 온-코어 캐쉬 미스의 결과로서 생성되고 있는 잠재적인 라이브록의 방지 시도를 할 수 있도록, 임시 우선순위를 MLU(166)에게 양보한다. 프로세싱 중, MLU(166)는 특정 스레드에 우선순위를 할당할 수 있다. 천이(556) 시점에서 MLU(166)에 우선순위를 양보함으로써, MLU(166)가 다른 논리 프로세서(150)에게 우선순위를 할당한 동안 TLU(165)는 현재 논리 프로세서에게 우선순위를 할당하는 것을 효과적으로 회피한다. 이러한 방식으로, TLU(165)와 MLU(166)는 한번에 단 하나의 스레드에게만 우선순위를 할당하도록 협력하여 동작한다. TLU(165)는, MLU(166)가 메모리 라이브록을 해결할 수 없으며, 현재 논리 프로세서(150)가 적절한 시간이 지난 후 여전히 순방향 진행을 할 수 없다고 판단할 때까지 MLU(166)에게 충분한 소정 시간 기간(Y)(이하 상태(504)에 대한 논의 참조)을 허용하기 위해 이와 같이 초기 카운팅 상태(504)로 천이(556)한다.
도 7과 관련하여 상기 기술된 리셋 조건 K에 따라, MLU(166)가 성공적으로 메모리 라이브록을 차단할 수 있어 결국 캐쉬 미스 정보(데이터 또는 명령)가 수신되는 경우 TLU(165)는 초기 카운팅 상태(504)로부터 다시 휴지 상태(502)로 천이(551)한다는 점을 유의하여야 한다.
리셋 조건 K에 따르면, 특별 케이스 상태(506)로부터 휴지 상태(502)로 다시 천이(551)하는 것은, 통상의 프로세서 동작의 일부로서 요청된 데이터 또는 인출된 명령이 결국 수신된 경우 MLU(166)로부터의 협조가 없이도 발생할 수 있다는 점을 유의하여야 한다.
상기 기술된 바와 같이, 어떤 특별 케이스 조건도 존재하지 않고(온-코어 캐쉬 미스 또는 비어있는 ROB + HP 록) 어떤 리셋 조건(501)도 TRUE가 아닌 경우, TLU(165)는 휴지 상태(502)로부터 초기 카운팅 상태(504)로 천이(553)한다. 초기 카운팅 상태에서, TLU(165)는 TLU(165)가 소정 시간(Y) 동안 초기 카운팅 상태(504)에 있었는지를 판단하는 타이머를 관리한다. 이 소정 시간(Y)은 그 시간 후에도 현재 논리 프로세서(150)가 순방향 진행을 할 수 없다면, 현재 논리 프로세서(150)가 라이브록 상태를 경험하고 있다고 추정되는 시간을 반영하도록 결정될 수 있다.
적어도 하나의 실시예에 대하여, TLU(165)는 초기 카운팅 상태(504) 동안 카운트다운 타이머를 관리하며, 타이머는 상기 소정 시간(Y)으로 설정되고, 매 클럭 사이클마다 카운터를 감소시킨다. 카운터가 0(또는 다른 소정의 최소값)에 도달하면, 논리 프로세서(150)는 라이브록 상태에 있을 수 있고, "활성" 상태로 천이할 것이 확실시될 수 있다. 소정 타이머 값(Y)로부터 소정 최소값 까지의 타이머 카운트다운은, 적어도 하나의 실시예에서, 순방향 진행의 부족이 용인될 수 있는 소정 클럭 사이클 수를 나타낸다.
초기 카운팅 상태(504)에서 임의의 리셋 조건(501)이 TRUE가 되는 경우, TLU(165)는 휴지 상태(502)로 천이하게 되고 초기 카운팅 상태(504)에서 사용된 카운터는 다시 초기화될 수 있다. 한가지 그러한 리셋 조건, 즉 조건 L은 최종 형태의 명령의 방출이다. 그러한 방출이 초기 카운팅 상태(504)에서 발생하지 않으면, 현재 논리 프로세서는 그 명령의 실행에 있어서 순방향 진행을 하고 있지 않은 것이다. 다른 리셋 조건, A-K 및 M은 가능한 순방향 진행의 일부 다른 표지를 제공할 수 있다. 소정 클럭 사이클 수 동안 어떤 리셋 조건도 발생하지 않는 경우, TLU(165)는 초기 카운팅 상태(504)로부터 정지 선언 상태(508)로 천이(557)한다.
도 5는 이렇게 정지 선언 상태(508)가 초기 카운팅 상태(504)로부터(천이 557) 또는 특별 케이스 상태(506)로부터(천이 554) 진입될 수 있음을 도시한다. 정지 선언 상태(508)에서, TLU(165)는 자신의 고유 논리 프로세서(즉, 현재 논리 프로세서)를 제외한, 프로세서(104)의 모든 논리 프로세서(150a-150n)에게 정지 신호를 선언한다. 그러한 동작은 프로세서(104)에 대한 모든 논리 프로세서(150a-150n) 간의 우선순위를 집행한다. 적어도 하나의 실시예에 대해, 정지 선언 상태(508)에서 선언된 정지 신호는 정지 신호가 선언된 동안 다른 논리 프로세서(150a-150n 참조)가 실행 유닛(360)으로 명령을 발행할 수 없도록 한다. TLU(165)는 정지 선언 상태에 남아, 이하의 이탈 조건 중 하나가 만족될 때까지 프로세서(104)의 다른 모든 논리 프로세서(150)에게 정지 신호 선언을 계속한다.
도 5는 TLU(165)의 적어도 하나의 실시예에서 클럭 사이클 수(Z1)로 반영될 수 있는 소정 시간이 경과하고 현재 논리 프로세서와 연관된 ROB(464) 부분이 비어 있지 않은 경우 정지 선언 상태(508)를 이탈(558)할 수 있음을 도시한다. 그러한 경우, 특정 ROB(464) 부분이 비어있지 않기 때문에 현재 논리 프로세서(150)는 명령 고갈을 경험하고 있지 않은 것이다. 그럼에도, 현재 논리 프로세서(150)는 Z1 클럭 사이클의 기간 동안 다른 모든 논리 프로세서에게 정지 신호를 선언하고 있으며 여전히 순방향 진행을 할 수 없는 상태이다. 다른 논리 프로세서를 정지시키는 것이 현재 논리 프로세서(150)가 순방향 진행을 하도록 허용해주지는 못하며, 따라서 라이브록 상태를 해결하고자 하려면 추가적인 동작이 필요하다. 그러한 이탈 조건이 TRUE인 경우 TLU(165)는 이렇게 도 6의 상태(602)로 천이(558)한다.
반면, 현재 논리 프로세서(150)에 대한 ROB(464)의 지정된 부분이 비어 있는 경우, 직전에 기술된 상태(508)에 대한 제1 이탈 조건은 TRUE가 아니다. ROB(464) 부분이 비어 있기 때문에, 현재 논리 프로세서(150)는 명령 고갈을 경험하고 있을 수 있다. 따라서, ROB(464) 부분이 비어 있는 경우, TLU(165)는 도 6의 상태(604)로 천이(559)하기 전, 소정 시간(Z2) 동안 대기하며, 상태(604)에서 논리적 프로세서(150)는 명령 고갈을 해결하는 동작을 취할 수 있다.
도 6으로 돌아가, 도 4를 참조하여 설명하면, 적어도 소정 시간(Z2) 동안 ROB(464) 부분이 비어 있음에 따라 정지 선언 상태(508)로부터 I-side 고갈 동작 상태(604)로 진입(559)할 수 있음을 볼 수 있다. I-side 고갈 동작 상태(604)에서, TLU(165)는 더 많은 명령을 현재 논리 프로세서의 ROB(464) 부분에 넣기 위해 하나 이상의 동작을 취한다. 이러한 동작은 본 명세서에서 고갈 회피 동작(starvation avoidance action)으로 지칭된다. 상태(604)에서, TLU(165)는 다른 논리 프로세서(150a-150n)에 대해, 상태(508)에서 선언되었던 정지 신호 선언을 취소(de-assert)한다. 그러한 선언 기간 동안, 현재 논리 프로세서(150)는 순방향 진행을 할 수 없다; 정지 선언은 도움이 되지 않으며 현재 논리 프로세서(150)는 여전히 명령의 부족을 경험하고 있다(즉, ROB(464)가 여전히 비어 있음). 사실, 상태(604)로의 진입시, 상태(508)에서 선언된 정지 신호가 다른 논리 프로세서가 매크로 명령의 실행을 완료하는 것을 막고 있어, 현재 논리 프로세서(150)가 필요로 하는 자원의 해제를 막고 있는 경우일 수 있다.
상태(604)로의 진입시, 현재 논리 프로세서는 분명 명령 고갈(instruction-side starvation)을 겪고 있다고 추측된다(즉, 실행할 가용 명령이 부족함). 그러한 고갈은 임의의 여러 가지 요인에 기인할 수 있다. 적어도 하나의 실시예에 대해, 그러한 요인은, 명령 인출 요청이 메모리 명령 중재 로직(도시되지 않음)에서 블록되고 있는 경우, 하나 이상의 다른 논리 프로세서가 일련의 상위 우선순위 록 연산을 수행하고 있는 경우, 또는 현재 논리 프로세서(150)의 명령 인출이 메모리 시스템으로의 요청을 처리하는데 이용되는 임의의 구조체(structure)로부터 반복적으로 "승인되지 않음(not acknowledged)" 응답을 수신해 온 경우를 포함할 수 있다.
I-side 고갈 상태(604)에서, TLU(165)는 다음의 동작을 수행할 수 있다: 즉, 1) 프로세서 코어(104)의 다른 모든 논리 프로세서(150a-150n)로 정지 신호 선언을 취소하고 2) 현재 논리 프로세서에게 "스레드 우선순위(thread priority)"를 부여할 것을 요청하는 것이다. "스레드 우선순위" 요청은 스레드 우선순위 로직(도시되지 않음)에게 이루어진다. 현재 논리 프로세서가 스레드 우선순위를 얻는 경우, MLU(166)가 호출될 수 있다.
도 9를 간단히 참조하면, I-side 고갈 동작 상태(604)(도 6 참조)의 적어도 하나의 실시예에서 협력하여 동작하는 TLU(165) 및 MLU(166)의 소정 특징이 도시되어 있다. 도 9는 본 명세서에서 도 3, 5 및 6을 참조하여 설명된다. 도 9는 각각의 TLU(165a-165n)가 라이브록 감지기(920) 및 라이브록 차단기(930)를 포함할 수 있음을 도시한다. 적어도 하나의 실시예에 대해, 라이브록 감지기(920)는 리셋 조건(501)에 대해 모니터링하고 상태(502, 504, 506)의 감지를 수행한다. 라이브록 차단기(930)는, 적어도 하나의 실시예에 대해, "활성" 상태(508, 602, 604 및 606)의 동작을 수행하는 역할을 한다.
도 9는 MLU(166)가 메모리 라이브록 차단기(940)를 포함한다는 것을 도시한다. 메모리 라이브록 차단기(940)는, 적어도 하나의 실시예에 대해, 상기 기술된 바와 같은 지속된(prolonged) 온-코어 캐쉬 미스 상태와 같은, 메모리 라이브록 상태를 해결하는 동작을 취하는 역할을 한다.
도 9는 MLU(166)의 메모리 라이브록 차단기(940)가 공유 라이브록 차단기 로직(shared livelock breaker logic)(950)을 포함한다는 것을 도시한다. 공유 라이브록 차단기 로직(950)은 I-side 고갈 동작 상태(604)에서, 현재 논리 프로세서가 "스레드 우선순위"를 획득하는 것에 대응하여 호출될 수 있다. 공유 라이브록 차단기 로직(950)은 프로세서 코어(104) 상의 임의의 논리 프로세서(150a-150n)에 대한 TLU(165)에 의해 호출될 수 있다.
도 6으로 돌아가면, I-side 고갈을 경험하는 논리 프로세서(150)가, 현재 논리 프로세서가 처음 "스레드 우선순위"를 부여받은 이후, 연속된 소정 시간(N)(클럭 사이클 수를 의미할 수 있음) 동안 할당된 스레드 우선순위를 갖는 경우 I-side 고갈 동작 상태(604)를 이탈할 수 있음을 볼 수 있다. 그러한 경우, TLU(165)는 누크 상태(606)로 천이(651)한다.
천이(651)는 I-side 고갈 동작 상태(604)에서 취한 동작이 성공적이지 못한 경우에만 이루어진다는 점을 유의하여야 한다. 예를 들면, 다른 논리 프로세서에 의해 개시된 자기 수정 코드(Self-Modifying Code; SMC)의 반복적인 감지는 고갈 상태의 스레드(starved thread)가 계속적으로 명령을 취소하고 재인출하도록 하여, ROB(464) 부분이 빈 상태로 유지되도록 할 수 있다. 그러나, 상태(604)에서 취한 I-side 고갈 회피 동작이 명령 고갈 상태를 해결하는데 성공적일 수 있다. 만일 그렇다면, 명령이 인출되어 현재 논리 프로세서(150)에 대한 ROB(464)의 할당된 부분으로 전송될 것이다. 이 경우, 현재 논리 프로세서(150)는, 적어도 하나의 실시예에 대해, 명령 고갈 상태를 이탈하게 될 것이다. 따라서, 리셋 조건 E(도 7의 501 참조)가 TRUE가 되고, TLU(165)는 I-side 고갈 동작 상태(604)에서 휴지 상태(502)(도 5 참조)로 천이(501)하게 될 것이다.
도 6은 정지 선언 상태(508)로부터 누크 카운트다운 상태(nuke countdown state)(602)로 진입(558)할 수 있음을 도시한다. 누크 카운트다운 상태(602)에서, 다시, TLU(165)는 다른 논리 프로세서(150a-150n)에 대해, 상태(508)에서 선언되었던 정지 신호 선언을 취소(de-assert)한다. 그러한 선언 상태 동안, 현재 논리 프로세서(150)는 순방향 진행을 할 수 없으며, 정지 선언은 도움이 되지 않는다. 사실, 상태(602)로 진입시, 상태(508)에서 선언된 정지 신호는 다른 논리 프로세서(150)가 매크로 명령의 실행을 완료하는 것을 막고 있어, 현재 논리 프로세서(150)가 필요로하는 자원의 해제를 막고 있던 경우일 수 있다. 그러나, 정지(stall)는 다른 논리 프로세서의 타이밍을 교란(perturb)할 수 있어, 현재 논리 프로세서(150)가 순방향 진행을 하는 것을 돕는데 도움이 될 수 있다.
누크 카운트다운 상태(602)로 진입하는 경우, 현재 논리 프로세서(150)는 결국 순방향 진행으로 인도하는 상태에 있을 수 있다. 예를 들면, 현재 논리 프로세서(150)는, MLU(166)가 현재 활성이지만, 라이브록 차단 프로세싱을 완료하는데 시간이 더 필요한 상태인 메모리 라이브록을 겪고 있을 수 있다. 누크 카운트다운 상태(602)에서, TLU(165)는 현재 논리 프로세서(150)가 리셋 조건(501) 중 하나를 만족시키기를 기대하며 소정 시간(예로, M 사이클의 카운트로 반영될 수 있음) 동안 대기한다. 적어도 하나의 실시예에 대해, 도 6에 도시된 M 및 N 카운트는 동일한 숫자일 수 있으나, 모든 실시예에 대해 동일할 필요가 있는 것은 아니다.
도 6은, 적어도 하나의 실시예에 대해, TLU(165)가 다음의 조건에 따라 누크 카운트다운 상태(602)에서 누크 상태(606)로 천이(652)하는 것을 도시한다: 즉, 현재 논리 프로세서에 "스레드 우선순위"가 할당되었고, 연속된 시간 프레임(M) 동안 스레드 우선순위를 유지해 온 것이다. 이 시간 동안, 현재 논리 프로세서(150)는, 스레드 우선순위에도 불구하고, 순방향 스레드 진행을 할 수 없다. 상기 기술된 바와 같이, TLU(165)는 또한 현재 논리 프로세서가 명령 고갈 상태인 경우, 즉, 상태(604)에서 취한 I-side 고갈 동작이 성공적이지 못한 경우, 누크 상태(606)로 천이(651)할 수 있다.
상태(606)에서, TLU(165)는 프로세서 코어(104)의 다른 논리 프로세서(150a-150n) 각각에게 코어-내부의(core-internal) "누크" 신호를 발행한다. 그러한 동작의 결과로, 현재 논리 프로세서(150)는 이제 순방향 진행을 할 수 있을 것으로 기대된다. 도 1에 도시된 바와 같은 단일 코어의 실시예에 대해, 방법(500)에 대한 프로세싱은 상태(606)에서 휴지 상태(502)로 천이(654)한다(연결 표시 "C" 참조).
도 6은 상기 기술된 상태 천이 중 하나의 결과로서가 아닌, 외부 이벤트에 대한 반응으로도 누크 상태(606)로 진입할 수 있음을 도시한다. 그러한 외부 이벤트는, 예를 들면, 옵션 상태(608)에서 다른 코어 상의 TLU(165)에 의해 생성된 전체 스레드 누크 요청(all-thread nuke request)을 수신하는 것일 수 있다(이하 기술됨).
상태(606)로부터, 옵션 상태로의 천이(653)는 상태(606)에서 발행된 코어 내부의 전체 스레드 "누크" 신호가 소정 시간(P) 내에 현재 논리 프로세서(150)에 대한 순방향 진행을 유발하지 않는 경우 발생할 수 있다. 상태(608)는 도 6에 점선으로 표시되었음을 유의한다. 이는 천이(653) 및 상태(608)가, 도 2에 도시된 실시예(200)와 같은, 멀티 코어 실시예에만 적용되는 점에서 선택적(optional)이기 때문이다. 상태(608)에서, 전체 코어 누크 요청이 중재기(180)(도 1 및 2 참조)로 송신된다. 상태(608)에서 생성된 요청에 대응하여, 중재기(180)의 적어도 하나의 실시예는 다음의 동작을 개시한다: 즉, 중재기(180)에 의해 관리되는 모든 큐는 모든 코어(104a-104n) 상의 모든 스레드(150a-150n)(현재 논리 프로세서는 제외)에 대해 배출(drain)된다. 또한 현재 논리 프로세서(150)로부터 발행되는 것을 제외한, 모든 신규의 전체 코어 누크 요청은 블록된다(도 8의 블록(806) 참조). 결과적으로, 전체 스레드 누크 요청(상기 상태(508)에 대한 논의 참조)은 다른 모든 프로세서 코어(104a-104n)에 대해 발행되고 또한 현재 논리 프로세서(150)와 연관된 프로세서 코어(104) 상의 다른 모든 스레드(150a-150n)(현재 논리 프로세서는 제외)에 대해 발행된다. (상기 기술된 바와 같이, 그러한 누크 요청은, 다른 프로세서 코어의 논리 프로세서에 의해 수신된 경우, 그 논리 프로세서에 대한 TLU(165)가 상태(606)로 진입하도록 할 수 있다 - 블록(620)에 대한 상기 논의 참조). 상태(608)로부터, TLU(165)는 휴지 상태로 돌아간다(연결 표시 "D" 참조).
도 8은 멀티 코어 실시예에 대해 상태(608)에서 발행된 것과 같은 전체 코어 누크 요청을 처리하는 방법(800)을 도시하는 흐름도이다. 적어도 하나의 실시예에 대해, 방법(800)은 도 1 및 2에 도시된 중재기(180)와 같은, 중재기에 의해 수행될 수 있다. 중재기는, 적어도 하나의 실시예에 대해, 본 명세서에서 "언코어"로 지칭되는 로직의 오프-코어 부분(280)(도 2)의 일부로 포함될 수 있다.
도 8은 방법(800)이 블록(802)에서 시작하여 블록(804)으로 진행하는 것을 도시한다. (첫번째 프로세서 코어(104a) 상의 TLU(165)로부터) 하나의 전체 코어 누크 요청이 생성된 경우, 프로세스는 블록(806)으로 진행한다. 상태(608)와 연관된 프로세싱과 관련하여 상기 기술된 바와 같이, 요청 코어(104a)는 블록(806)에서 우선순위를 할당받고, 남은 코어(104a-104n)로부터의 모든 추후의 전체 코어 누크 요청은 무시된다.
프로세스는 블록(806)에서 블록(808)으로 진행한다. 블록(808)에서, 전체 스레드 누크 요청이, 최초 전체 코어 누크 요청이 생성된 코어를 제외한 다른 모든 코어(104a-104n)에 대해 개시된다. 그러한 요청은 다른 코어에 의해 수신되어 다른 코어가 누크 상태(606)(도 6의 블록(620) 참조)로 천이하도록 할 수 있다. 그 후 프로세스는 블록(814)에서 종료한다.
그러나, 둘 이상의 전체 코어 누크 요청이 동시에 복수의 코어로부터 수신되는 경우, 프로세스는 블록(804)에서 블록(810)으로 진행한다. 블록(810)에서, 방법(800)은 복수의 요청 코어 중 하나를 우선 코어(priority core)로 선택하는 중재 정책을 적용한다. 적어도 하나의 실시예에 대해, 요청 코어는 중재기에, 누크 요청과 함께, 코어 ID를 공급할 수 있다. 그 후 중재기(180)는, 가장 높은 또는 가장 낮은 ID를 가진 코어를 우선 코어로 선택하는 것과 같은, 단순한 선택 알고리즘을 적용할 수 있다. 상기 단락에 기술된 바와 같이, 프로세스는 블록(810)으로부터 블록(808)으로, 그 후 블록(814)으로 진행한다.
상기의 논의는 라이브록 차단기 로직, I-side 고갈 회피 로직, 및 상위 우선순위 록 프로세싱 간의 우선순위를 관리하는 동시에, 스레드 명령의 실행에 있어서 순방향 진행이 가능하도록 복수의 스레드 간의 스레드 우선순위를 조정하는 방법, 시스템 및 장치의 선택된 실시예를 기술한다. 본 명세서에 기술된 메카니즘은 단일 코어 또는 멀티코어 멀티스레딩 시스템에 이용될 수 있다. 상기 내용에서, 다양한 태양의 방법, 시스템 및 장치가 기술되었다. 설명의 목적으로, 보다 자세한 이해를 돕기 위해 특정 숫자, 예시, 시스템 및 구성이 나열되었다. 그러나, 기술된 방법 및 장치를 상기의 특정 상세 내용이 없이도 실시할 수 있다는 것은 당업자에게 자명하다. 기타의 예에서, 잘 알려진 특징은 방법 및 장치를 모호하게 하지 않도록 생략하거나 간략화하였다.
본 명세서에 기술된 방법들의 실시예는 하드웨어, 하드웨어 에뮬레이션 소프트웨어 또는 기타 소프트웨어, 펌웨어, 또는 그러한 구현 방안의 조합에 있어서 구현될 수 있다. 발명의 실시예는 적어도 하나의 프로세서, (휘발성, 비휘발성 메모리 및/또는 저장소 구성 요소를 포함하는) 데이터 저장 시스템, 적어도 하나의 입력 장치, 및 적어도 하나의 출력 장치를 포함하는 프로그램 가능한 시스템(programmable system)에 대해 구현될 수 있다. 이러한 응용의 목적에 대해, 프로세싱 시스템은, 예를 들면 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 주문형 반도체(application specific integrated circuit; ASIC) 또는 마이크로프로세서와 같은, 프로세서를 구비한 임의의 시스템을 포함한다.
프로그램은 범용 또는 특정 용도의 프로그램 가능한 프로세싱 시스템에 의해 판독 가능한 저장 매체 또는 장치(예로, 하드 디스크 드라이브, 플로피 디스크 드라이브, ROM, CD-ROM 장치, 플래시 메모리 장치, DVD, 또는 기타 저장 장치)에 저장될 수 있다. 저장 매체 또는 장치가 프로세싱 시스템에 의해 판독되어 본 명세서에 기술된 절차를 수행하는 경우, 프로세싱 시스템의 프로세스가 액세스할 수 있는 명령은 프로세싱 시스템을 구성하고 동작시킨다. 발명의 실시예는 또한 프로세싱 시스템과 함께 사용하도록 구성된 머신-판독 가능한 저장 매체로 구현되는 것도 고려하며, 그렇게 구성된 저장 매체는 프로세싱 시스템이 특정한, 사전 정의된 방식으로 본 명세서에 기술된 기능을 수행하도록 동작시킨다.
그러한 프로세싱 시스템에 대한 예의 적어도 하나의 실시예가 도 4에 도시되어 있다. 샘플 시스템(400)은, 예를 들면, 라이브록 상태를 감지하여 그러한 상태를 해결하고자 보정 동작을 취하는데 이용된다. 샘플 시스템(400)은 Intel Corporation의 Pentium®, Pentium® Pro, Pentium®II, Pentium®III, Pentium®4, 그리고 Itanium® 및 Itanium®2 마이크로 프로세서 기반의 프로세싱 시스템의 대표적인 예이지만, (기타의 마이크로프로세서, 공학용 워크스테이션, PDA 및 기타 휴대용 장치, 셋톱 박스 등을 구비한 퍼스널 컴퓨터(PC)를 포함하는) 다른 시스템도 사용될 수 있다. 일 실시예에 대해, 샘플 시스템은 Microsoft Corporation의 WindowsTM 운영 체제 버전을 실행시킬 수 있으나, 예를 들어 기타 운영 체제와 GUI(graphical user interface)가 사용될 수도 있다.
도 4를 참조하면, 샘플 프로세싱 시스템(400)은 메모리 시스템(490) 및 프로세서(404)를 포함할 수 있다. 메모리 시스템(490)은 프로세서(404)의 동작을 제어하는 명령(241) 및 데이터(240)를 저장할 수 있다.
메모리 시스템(490)은 메모리의 일반화된 표현으로 간주되며, 하드 드라이브, CD-ROM, RAM(random access memory), DRAM(dynamic random access memory), SRAM(static random access memory), 플래시 메모리 및 관련 장치와 같은, 다양한 형태의 메모리를 포함할 수 있다. 메모리 시스템(490)은 프로세서(404)에 의해 실행될 수 있는 데이터 신호에 의해 나타나는 명령(241) 및/또는 데이터(240)를 저장할 수 있다. 명령(241) 및/또는 데이터(240)는 본 명세서에 논의된 기술의 전부 또는 일부를 수행하는 코드를 포함할 수 있다.
본 발명의 특정한 실시예들이 도시되고 기술되었지만, 넓은 측면에서 본 발명을 벗어나지 않고 변경 및 수정이 이루어질 수 있음은 당업자에게 자명하다. 예를 들면, 상기 기술된 카운터 값 X, Y, Z1, Z2, M, N, P는 가산식(counter-up) 또는 감산식(count-down) 카운터 값으로 사용될 수 있다. 각각의 그러한 카운터 값은 상이한 값일 수 있으나, 반드시 그런 것은 아니다. 예를 들면, 적어도 하나의 실시예에 대해, P>>M, P>>N, Z1>Y, Z2>Y, P>Z1, P>Z2, X>Z1 이다. 그러한 카운터값의 디폴트 값은 하드웨어에 설정될 수 있다. 일부 실시예에 대해, 디폴트 카운터 값은 프로그램 가능한 것으로, 예를 들면 마이크로 코드 또는 기타 펌웨어나 소프트웨어 코드로 수정될 수 있다.
따라서, 당업자라면 넓은 측면에서 본 발명을 벗어나지 않고 변경 및 수정이 이루어질 수 있음을 인지할 것이다. 첨부된 청구항은 본 발명의 진정한 범주 내에 속하는 그러한 모든 변경 및 수정을 청구 범위 내에 포괄하고자 한다.

Claims (39)

  1. 제1 논리 프로세서 및 제2 논리 프로세서를 포함하는 프로세서 코어;
    상기 제1 논리 프로세서에 연결된 제1 스레드 라이브록 유닛;
    상기 제2 논리 프로세서에 연결된 제2 스레드 라이브록 유닛; 및
    중재기를 포함하고,
    상기 제1 라이브록 유닛은 상기 제1 라이브록 유닛에 의한 실행에 가용한 명령이 부족한 것에 대응하여 상기 제2 라이브록 유닛의 정지(stall)를 요청하는 것이며,
    상기 제1 및 제2 스레드 라이브록 유닛과 상기 중재기는 상기 제1 논리 프로세서와 상기 제2 논리 프로세서 간의 우선순위 매김을 집행하는 것을 특징으로 하는 프로세서.
  2. 제1항에 있어서,
    상기 제1 스레드 라이브록 감지기는 또한 상기 제1 논리 프로세서가 제1 소프트웨어 스레드에 대한 명령 실행 중 순방향 진행을 할 수 없는지를 판단하고,
    상기 제2 스레드 라이브록 감지기는 상기 제2 논리 프로세서가 제2 소프트웨어 스레드에 대한 명령 실행 중 순방향 진행을 할 수 없는지를 판단하는 것을 특징으로 하는 프로세서.
  3. 제1항에 있어서,
    상기 제1 및 제2 논리 프로세서에 연결된 메모리 라이브록 유닛을 더 포함하는 프로세서.
  4. 제3항에 있어서,
    상기 메모리 라이브록 유닛은 또한 메모리 라이브록 회피 동작을 개시하는 것을 특징으로 하는 프로세서.
  5. 제1항에 있어서,
    상기 중재기는 장기 대기시간 캐쉬 미스(long latency cache miss)를 해결하기 위해 상기 제1 논리 프로세서 및 상기 제2 논리 프로세서 간의 우선순위 매김을 집행하는 것을 특징으로 하는 프로세서.
  6. 제3항에 있어서,
    상기 제1 및 제2 라이브록 유닛은 또한 상기 메모리 라이브록 유닛에게 우선순위를 양보하는 것을 특징으로 하는 프로세서.
  7. 제1항에 있어서,
    상기 라이브록 유닛들은 또한 실행에 가용한 명령이 없음에 대응하여 고갈 회피 동작(starvation avoidance action)을 개시하는 것을 특징으로 하는 프로세 서.
  8. 제6항에 있어서,
    상기 제1 라이브록 유닛은 또한 상기 제1 논리 프로세서와 연관된 제1 소프트웨어 스레드에 대해 상기 가용 명령이 없음이 존재하는지를 판단하고,
    상기 제2 라이브록 유닛은 또한 상기 제2 논리 프로세서와 연관된 제2 소프트웨어 스레드에 대해 상기 가용 명령이 없음이 존재하는지를 판단하는 것을 특징으로 하는 프로세서.
  9. 제2항에 있어서,
    상기 제1 라이브록 유닛은 또한 상기 제1 논리 프로세서가 상기 제1 소프트웨어 스레드에 대한 명령 실행 중 순방향 진행을 할 수 없다는 판단에 대응하여 활성(active)이 되는 것을 특징으로 하는 프로세서.
  10. 제9항에 있어서,
    상기 제1 논리 프로세서가 활성인 경우 상기 제2 라이브록 유닛은 상기 제1 논리 프로세서에게 우선순위를 양보하는 것을 특징으로 하는 프로세서.
  11. 제2항에 있어서,
    상기 제2 라이브록 유닛은 또한 상기 제2 논리 프로세서가 제2 소프트웨어 스레드에 대한 명령 실행 중 순방향 진행을 할 수 없다는 판단에 대응하여 활성이 되는 것을 특징으로 하는 프로세서.
  12. 제11항에 있어서,
    상기 제2 논리 프로세서가 활성인 경우 상기 제1 라이브록 유닛은 상기 제2 논리 프로세서에게 우선순위를 양보하는 것을 특징으로 하는 프로세서.
  13. 제12항에 있어서,
    상기 제1 라이브록 유닛은 상기 제2 논리 프로세서에 의해 실행된 상위 우선순위 록 연산(high-priority lock operation) 중 상기 제2 논리 프로세서에게 우선순위를 양보하는 것을 특징으로 하는 프로세서.
  14. 제1항에 있어서,
    상기 프로세서 코어는 적어도 하나의 추가적인 논리 프로세서를 포함하고, 각각은 추가적인 라이브록 유닛에 연결되며,
    상기 적어도 하나의 추가적인 라이브록 유닛은, 상기 제1 및 제2 라이브록 유닛 및 상기 중재기와 함께, 상기 제1 논리 프로세서, 상기 제2 논리 프로세서, 및 상기 적어도 하나의 추가적인 논리 프로세서 간의 우선순위 매김을 집행하는 것을 특징으로 하는 프로세서.
  15. 메모리 시스템; 및
    적어도 제1 논리 프로세서를 구비한 제1 프로세서 코어; 및
    제2 프로세서 코어;
    를 포함하고, 상기 제1 프로세서 코어는, 상기 제1 논리 프로세서에 복수의 조건들이 존재하는지 판단하고 또한 상기 복수의 조건이 만족됨에 따라 상기 제1 논리 프로세서가 라이브록 상태인지를 판단하는 제1 라이브록 유닛을 더 포함하며,
    상기 제1 라이브록 유닛은 또한 상기 제1 논리 프로세서가 라이브록 상태인 것으로 판단함에 대응하여 상기 제2 프로세서 코어의 정지를 요청하는 것을 특징으로 하는 시스템.
  16. 제15항에 있어서,
    상기 제1 라이브록 유닛은 또한, 상기 제1 논리 프로세서가 라이브록 상태인 것으로 판단함에 대응하여, 상기 제2 프로세서 코어와 연관된 적어도 하나의 마이크로 아키텍처 구조체(microarchitectural structure)의 플러시(flush)를 요청하는 것을 특징으로 하는 시스템.
  17. 제15항에 있어서,
    상기 제1 라이브록 유닛은 또한, 상기 복수의 조건이 만족됨에 따라, 상기 제1 논리 프로세서가 명령 고갈 상태인지를 판단하는 것을 특징으로 하는 시스템.
  18. 제17항에 있어서,
    상기 제1 라이브록 유닛은 또한 상기 제1 논리 프로세서가 명령 고갈 상태인 것으로 판단됨에 대응하여 고갈 회피 동작을 개시하는 것을 특징으로 하는 시스템.
  19. 제15항에 있어서,
    상기 제1 및 제2 프로세서로부터의 우선순위 요청을 중재하는 중재기를 더 포함하고, 상기 우선순위 요청은 라이브록 판단에 기초하는 것을 특징으로 하는 시스템.
  20. 제15항에 있어서,
    상기 메모리 시스템은 DRAM(dynamic random access memory)을 더 포함하는 것을 특징으로 하는 시스템.
  21. 제1 프로세서에 대한 제1 논리 프로세서가 적어도 하나의 명령 실행에 있어서 순방향 진행을 할 수 없는지 판단하는 단계;
    순방향 진행을 할 수 없는 경우, 제2 논리 프로세서의 동작 정지를 선언하는 단계;
    상기 정지로 인해 상기 제1 논리 프로세서에 대한 순방향 진행이 이루어졌는지 판단하는 단계;
    순방향 진행이 이루어지지 않은 경우, 상기 제1 논리 프로세서가 명령 고갈 상태인지 판단하는 단계 및 명령 고갈인 경우, 고갈 회피 동작을 취하는 단계; 및
    상기 제2 논리 프로세서의 정지를 요청하는 단계
    를 포함하는 것을 특징으로 하는 방법.
  22. 제21항에 있어서,
    상기 제2 논리 프로세서와 연관된 파이프라인이 플러시되도록 요청하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  23. 제21항에 있어서,
    제2 프로세서의 정지를 요청하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  24. 제21항에 있어서,
    상기 제2 논리 프로세서의 동작 정지를 선언하는 단계는,
    상기 제2 논리 프로세서가 활성 라이브록 회피 상태에 있지 않은 경우 상기 정지를 선언하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  25. 제21항에 있어서,
    상기 제2 논리 프로세서의 동작 정지를 선언하는 단계는,
    상기 제2 논리 프로세서가 상위 우선순위 록 연산을 수행하고 있지 않은 경 우 상기 정지를 선언하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  26. 제21항에 있어서,
    상기 제2 논리 프로세서의 동작 정지를 선언하는 단계는,
    상기 제1 논리 프로세서가 적어도 소정 시간 동안 순방향 진행을 할 수 없었다고 판단함에 대응하여 상기 정지를 선언하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  27. 멀티스레드 프로세서(multi-threaded processor)에 있어서, 복수의 스레드 및 메모리 라이브록 유닛 간의 스레드 우선순위를 할당하는 방법으로,
    상기 메모리 라이브록 유닛과 상기 프로세서의 적어도 두 개의 스레드 간에 복수의 조건이 존재하는지 판단하는 단계로, 상기 적어도 두 개의 스레드는 제1 스레드 및 남은 스레드 집합을 포함하는 단계;
    상기 복수의 조건이 만족됨에 따라, 상기 제1 스레드가 라이브록 상태인지를 판단하는 단계; 및
    상기 제1 스레드가 라이브록 상태인 경우, 상기 제1 스레드에게 우선순위를 할당하고 상기 남은 스레드 집합에는 우선순위를 할당하지 않는 단계
    를 포함하는 것을 특징으로 하는 방법.
  28. 제27항에 있어서,
    상기 제1 스레드는 적어도 소정 시간 동안 라이브록 상태였는지 판단하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  29. 제27항에 있어서,
    상기 제1 스레드의 순방향 진행을 촉진하는 동작을 취하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  30. 제29항에 있어서,
    동작을 취하는 단계는, 상기 남은 스레드 중 적어도 하나에게 정지를 발행하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  31. 제29항에 있어서,
    동작을 취하는 단계는, 명령 고갈(instruction-side starvation)의 판단에 대응하여 라이브록 차단기(livelock breaker)를 호출하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  32. 제31항에 있어서,
    방출 큐의 일부가 비어있는지를 판단하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  33. 제29항에 있어서,
    동작을 취하는 단계는, 캐쉬 미스에 대응하여 중재기에게 우선순위 요청을 발행하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  34. 제29항에 있어서,
    동작을 취하는 단계는, 다른 프로세서에게 정지 요청을 발행하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  35. 복수의 프로세서 코어;
    각각의 상기 복수의 프로세서 코어와 통신하도록 연결된 라이브록 감소기(livelock reducer)
    를 포함하고, 상기 복수의 프로세서 코어 각각은 복수의 스레드를 실행시킬 수 있는 멀티스레딩 프로세서이고,
    상기 라이브록 감소기는 제1 프로세서 코어로부터 제1 스레드에 대한 스레드 진행 정보를 수신하고 상기 제1 프로세서 코어로부터의 상기 제1 스레드에 대한 상기 스레드 진행 정보에 대응하여 상기 복수의 프로세서의 제2 프로세서 코어의 제2 스레드의 활동성을 조정하는 것을 특징으로 하는 멀티코어 멀티스레드 프로세서(multicore multithreaded processor).
  36. 제35항에 있어서,
    상기 라이브록 감소기는 복수의 라이브록 회로를 포함하고, 적어도 하나의 라이브록 회로는 상기 복수의 프로세서 코어 중 하나와 연관되는 것을 특징으로 하는 멀티코어 멀티스레드 프로세서.
  37. 제35항에 있어서,
    상기 라이브록 감소기는 상기 복수의 프로세서 코어와 연결된 중재 제어 로직(arbitation control logic)을 포함하고, 상기 중재 제어 로직은 상기 복수의 코어로부터 스레드 진행 정보를 수신하여 어떤 스레드를 보조해야 하는지를 결정하도록 우선순위를 중재하는 것을 특징으로 하는 멀티코어 멀티스레드 프로세서.
  38. 제35항에 있어서,
    각각의 프로세서 코어는
    상기 코어와 연결된, 스레드 라이브록 표지를 측정하는 스레드 라이브록 유닛; 및
    상기 코어와 연결된, 메모리 라이브록 표지를 측정하는 메모리 라이브록 유닛
    을 포함하는 것을 특징으로 하는 멀티코어 멀티스레드 프로세서.
  39. 제38항에 있어서,
    각각의 상기 복수의 코어의 상기 스레드 라이브록 유닛 및/또는 상기 메모리 라이브록 유닛으로부터 라이브록 정보를 수신하는 중재기
    를 더 포함하고, 상기 중재기는 상기 라이브록 정보에 대응하여 하나의 스레드에 다른 스레드에 대해 우선순위를 부여하는 것을 특징으로 하는 멀티코어 멀티스레드 프로세서.
KR1020077006549A 2004-09-23 2005-09-13 스레드 라이브록 유닛 KR100880470B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/948,878 US7748001B2 (en) 2004-09-23 2004-09-23 Multi-thread processing system for detecting and handling live-lock conditions by arbitrating livelock priority of logical processors based on a predertermined amount of time
US10/948,878 2004-09-23

Publications (2)

Publication Number Publication Date
KR20070055554A true KR20070055554A (ko) 2007-05-30
KR100880470B1 KR100880470B1 (ko) 2009-01-28

Family

ID=35997071

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077006549A KR100880470B1 (ko) 2004-09-23 2005-09-13 스레드 라이브록 유닛

Country Status (7)

Country Link
US (2) US7748001B2 (ko)
JP (1) JP4603583B2 (ko)
KR (1) KR100880470B1 (ko)
CN (2) CN101031877B (ko)
DE (1) DE112005002305B4 (ko)
TW (1) TWI298458B (ko)
WO (1) WO2006034288A2 (ko)

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7748001B2 (en) 2004-09-23 2010-06-29 Intel Corporation Multi-thread processing system for detecting and handling live-lock conditions by arbitrating livelock priority of logical processors based on a predertermined amount of time
US9626194B2 (en) * 2004-09-23 2017-04-18 Intel Corporation Thread livelock unit
US7525986B2 (en) * 2004-10-28 2009-04-28 Intel Corporation Starvation prevention scheme for a fixed priority PCI-Express arbiter with grant counters using arbitration pools
US7810083B2 (en) * 2004-12-30 2010-10-05 Intel Corporation Mechanism to emulate user-level multithreading on an OS-sequestered sequencer
US7380038B2 (en) * 2005-02-04 2008-05-27 Microsoft Corporation Priority registers for biasing access to shared resources
WO2007031696A1 (en) * 2005-09-13 2007-03-22 Arm Limited Cache miss detection in a data processing apparatus
US7558946B2 (en) * 2005-12-12 2009-07-07 Intel Corporation Breaking a lock situation in a processor without detection of the lock situation using a multi-level approach
WO2007099273A1 (en) * 2006-03-03 2007-09-07 Arm Limited Monitoring values of signals within an integrated circuit
WO2007101969A1 (en) * 2006-03-06 2007-09-13 Arm Limited Accessing a cache in a data processing apparatus
JP4557949B2 (ja) * 2006-04-10 2010-10-06 富士通株式会社 資源ブローカリングプログラム、該プログラムを記録した記録媒体、資源ブローカリング装置、および資源ブローカリング方法
US7434033B2 (en) 2006-04-14 2008-10-07 International Business Machines Corporation Placing a processor into a gradual slow mode of operation in response to a detected livelock condition within a processor pipeline
US7437539B2 (en) * 2006-04-14 2008-10-14 International Business Machines Corporation Issue unit for placing a processor into a gradual slow mode of operation in response to a detected livelock condition within a processor pipeline
WO2007132424A2 (en) * 2006-05-17 2007-11-22 Nxp B.V. Multi-processing system and a method of executing a plurality of data processing tasks
US20080046684A1 (en) * 2006-08-17 2008-02-21 International Business Machines Corporation Multithreaded multicore uniprocessor and a heterogeneous multiprocessor incorporating the same
JP4841358B2 (ja) 2006-08-18 2011-12-21 富士通株式会社 リクエスト送信制御装置およびリクエスト送信制御方法
US7590784B2 (en) * 2006-08-31 2009-09-15 Intel Corporation Detecting and resolving locks in a memory unit
US8276151B2 (en) 2006-09-06 2012-09-25 International Business Machines Corporation Determination of running status of logical processor
CN100458751C (zh) * 2007-05-10 2009-02-04 忆正存储技术(深圳)有限公司 并行闪存控制器
US8117618B2 (en) * 2007-10-12 2012-02-14 Freescale Semiconductor, Inc. Forward progress mechanism for a multithreaded processor
JP4691153B2 (ja) * 2008-12-10 2011-06-01 富士通株式会社 マルチコアプロセッサ,制御方法および情報処理装置
US8392667B2 (en) * 2008-12-12 2013-03-05 Nvidia Corporation Deadlock avoidance by marking CPU traffic as special
JP5035469B2 (ja) * 2009-03-31 2012-09-26 富士通株式会社 データ転送回路及びデータ転送方法
US8352561B1 (en) 2009-07-24 2013-01-08 Google Inc. Electronic communication reminder technology
US8516577B2 (en) 2010-09-22 2013-08-20 Intel Corporation Regulating atomic memory operations to prevent denial of service attack
US8898434B2 (en) 2011-11-11 2014-11-25 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Optimizing system throughput by automatically altering thread co-execution based on operating system directives
WO2013101138A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Identifying and prioritizing critical instructions within processor circuitry
US20130332910A1 (en) * 2012-05-22 2013-12-12 Nec Laboratories America, Inc. Dynamic livelock analysis of multi-threaded programs
US9336357B2 (en) * 2012-09-28 2016-05-10 Intel Corporation Secure access management of devices
JP6201591B2 (ja) * 2013-09-30 2017-09-27 富士通株式会社 情報処理装置および情報処理装置の制御方法
US9575916B2 (en) 2014-01-06 2017-02-21 International Business Machines Corporation Apparatus and method for identifying performance bottlenecks in pipeline parallel processing environment
US9501377B2 (en) 2014-03-18 2016-11-22 International Business Machines Corporation Generating and implementing data integration job execution design recommendations
US9424160B2 (en) 2014-03-18 2016-08-23 International Business Machines Corporation Detection of data flow bottlenecks and disruptions based on operator timing profiles in a parallel processing environment
US9642787B2 (en) 2014-04-25 2017-05-09 The Procter & Gamble Company Method of inhibiting copper deposition on hair
US9626749B2 (en) 2014-12-10 2017-04-18 Intel Corporation Sub-pixel modification of digital images by locally shifting to an arbitrarily dense supergrid
US10248463B2 (en) * 2015-02-13 2019-04-02 Honeywell International Inc. Apparatus and method for managing a plurality of threads in an operating system
WO2016178658A1 (en) * 2015-05-01 2016-11-10 Hewlett Packard Enterprise Development Lp Throttled data memory access
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10191747B2 (en) * 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US9766946B2 (en) * 2015-11-11 2017-09-19 International Business Machines Corporation Selecting processor micro-threading mode
TWI597666B (zh) * 2015-12-28 2017-09-01 緯創資通股份有限公司 共享裝置的使用方法及資源共享系統
GB2558076B (en) * 2016-06-20 2019-02-20 Imagination Tech Ltd Livelock detection in a hardware design using formal verification
US10069949B2 (en) 2016-10-14 2018-09-04 Honeywell International Inc. System and method for enabling detection of messages having previously transited network devices in support of loop detection
US9798549B1 (en) 2016-10-31 2017-10-24 International Business Machines Corporation Out-of-order processor that avoids deadlock in processing queues by designating a most favored instruction
US10740102B2 (en) 2017-02-24 2020-08-11 Oracle International Corporation Hardware mechanism to mitigate stalling of a processor core
US10810086B2 (en) 2017-10-19 2020-10-20 Honeywell International Inc. System and method for emulation of enhanced application module redundancy (EAM-R)
US10783026B2 (en) 2018-02-15 2020-09-22 Honeywell International Inc. Apparatus and method for detecting network problems on redundant token bus control network using traffic sensor
EP3818440A4 (en) 2018-07-02 2021-08-18 Drivenets Ltd. SYSTEM FOR IMPLEMENTATION OF MULTIPLE APPLICATIONS
US10831563B2 (en) * 2019-03-19 2020-11-10 International Business Machines Corporation Deadlock resolution between distributed processes using process and aggregated information
CN110058931B (zh) * 2019-04-19 2022-03-22 上海兆芯集成电路有限公司 用以任务调度的处理系统及其加速方法
CN110032453B (zh) 2019-04-19 2022-05-03 上海兆芯集成电路有限公司 用以任务调度与分配的处理系统及其加速方法
CN110083387B (zh) 2019-04-19 2021-11-12 上海兆芯集成电路有限公司 使用轮询机制的处理系统及其访存方法
CN110046053B (zh) 2019-04-19 2021-11-12 上海兆芯集成电路有限公司 用以分配任务的处理系统及其访存方法
US11422849B2 (en) * 2019-08-22 2022-08-23 Intel Corporation Technology for dynamically grouping threads for energy efficiency
CN112187581B (zh) * 2020-09-29 2022-08-02 北京百度网讯科技有限公司 服务信息处理方法、装置、设备及计算机存储介质
CN115408153B (zh) * 2022-08-26 2023-06-30 海光信息技术股份有限公司 多线程处理器的指令分发方法、装置和存储介质

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US621254A (en) 1899-03-14 Track-sight
JP3760035B2 (ja) * 1996-08-27 2006-03-29 松下電器産業株式会社 複数の命令流を独立に処理し、命令流単位に処理性能を柔軟に制御するマルチスレッドプロセッサ
JPH10111828A (ja) * 1996-09-27 1998-04-28 Internatl Business Mach Corp <Ibm> メモリシステム、データ転送方法
US6658447B2 (en) * 1997-07-08 2003-12-02 Intel Corporation Priority based simultaneous multi-threading
US6343352B1 (en) * 1997-10-10 2002-01-29 Rambus Inc. Method and apparatus for two step memory write operations
US6212544B1 (en) * 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor
US6216178B1 (en) * 1998-11-16 2001-04-10 Infineon Technologies Ag Methods and apparatus for detecting the collision of data on a data bus in case of out-of-order memory accesses of different times of memory access execution
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6542921B1 (en) 1999-07-08 2003-04-01 Intel Corporation Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
US6543002B1 (en) * 1999-11-04 2003-04-01 International Business Machines Corporation Recovery from hang condition in a microprocessor
US6898617B2 (en) * 1999-11-18 2005-05-24 International Business Machines Corporation Method, system and program products for managing thread pools of a computing environment to avoid deadlock situations by dynamically altering eligible thread pools
US6618825B1 (en) * 2000-04-20 2003-09-09 Hewlett Packard Development Company, L.P. Hierarchy of fault isolation timers
US6920516B2 (en) * 2000-08-31 2005-07-19 Hewlett-Packard Development Company, L.P. Anti-starvation interrupt protocol
US6880073B2 (en) * 2000-12-28 2005-04-12 International Business Machines Corporation Speculative execution of instructions and processes before completion of preceding barrier operations
US7401211B2 (en) * 2000-12-29 2008-07-15 Intel Corporation Method for converting pipeline stalls caused by instructions with long latency memory accesses to pipeline flushes in a multithreaded processor
US6651158B2 (en) * 2001-06-22 2003-11-18 Intel Corporation Determination of approaching instruction starvation of threads based on a plurality of conditions
US7454600B2 (en) * 2001-06-22 2008-11-18 Intel Corporation Method and apparatus for assigning thread priority in a processor or the like
US7248585B2 (en) * 2001-10-22 2007-07-24 Sun Microsystems, Inc. Method and apparatus for a packet classifier
US6968431B2 (en) * 2001-11-15 2005-11-22 International Business Machines Corporation Method and apparatus for livelock prevention in a multiprocessor system
US7065596B2 (en) * 2002-09-19 2006-06-20 Intel Corporation Method and apparatus to resolve instruction starvation
US7000047B2 (en) * 2003-04-23 2006-02-14 International Business Machines Corporation Mechanism for effectively handling livelocks in a simultaneous multithreading processor
US20040216103A1 (en) * 2003-04-24 2004-10-28 International Business Machines Corporation Mechanism for detecting and handling a starvation of a thread in a multithreading processor environment
US7401207B2 (en) * 2003-04-25 2008-07-15 International Business Machines Corporation Apparatus and method for adjusting instruction thread priority in a multi-thread processor
US7748001B2 (en) 2004-09-23 2010-06-29 Intel Corporation Multi-thread processing system for detecting and handling live-lock conditions by arbitrating livelock priority of logical processors based on a predertermined amount of time
US7437539B2 (en) * 2006-04-14 2008-10-14 International Business Machines Corporation Issue unit for placing a processor into a gradual slow mode of operation in response to a detected livelock condition within a processor pipeline
US7434033B2 (en) * 2006-04-14 2008-10-07 International Business Machines Corporation Placing a processor into a gradual slow mode of operation in response to a detected livelock condition within a processor pipeline

Also Published As

Publication number Publication date
DE112005002305B4 (de) 2011-03-17
TWI298458B (en) 2008-07-01
DE112005002305T5 (de) 2007-09-06
JP2008513894A (ja) 2008-05-01
WO2006034288A2 (en) 2006-03-30
US20100229172A1 (en) 2010-09-09
CN101334721B (zh) 2013-06-19
KR100880470B1 (ko) 2009-01-28
WO2006034288A3 (en) 2006-11-23
JP4603583B2 (ja) 2010-12-22
CN101031877A (zh) 2007-09-05
US20060064695A1 (en) 2006-03-23
CN101334721A (zh) 2008-12-31
US7748001B2 (en) 2010-06-29
US8276149B2 (en) 2012-09-25
CN101031877B (zh) 2010-05-05
TW200632740A (en) 2006-09-16

Similar Documents

Publication Publication Date Title
KR100880470B1 (ko) 스레드 라이브록 유닛
JP5054665B2 (ja) スリープ‐起動機構を用いた比較および交換動作
JP6095670B2 (ja) コンピュータ・システム内のオペランド活性情報の維持
US6542921B1 (en) Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
US6651158B2 (en) Determination of approaching instruction starvation of threads based on a plurality of conditions
US9524191B2 (en) Apparatus including a stall counter to bias processing element selection, and masks to allocate reservation unit entries to one or more processing elements
EP3048527B1 (en) Sharing idled processor execution resources
JP6434791B2 (ja) マルチスレッディングを支援するための演算ユニット、それを含むプロセッサ及びプロセッサの動作方法
AU2011305091A1 (en) Apparatus, method, and system for dynamically optimizing code utilizing adjustable transaction sizes based on hardware limitations
JP2006040142A (ja) プロセッサシステムおよびスレッド切り替え制御方法
JP2006343872A (ja) マルチスレッド中央演算装置および同時マルチスレッディング制御方法
KR20100111700A (ko) 로킹된 오퍼레이션을 수행하기 위한 방법 및 시스템
US8516577B2 (en) Regulating atomic memory operations to prevent denial of service attack
JP5145936B2 (ja) マルチスレッド中央演算装置および同時マルチスレッディング制御方法
US9626194B2 (en) Thread livelock unit
JP2010061642A (ja) スレッドのスケジューリングテクニック

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

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20140103

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20141230

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20160104

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20170102

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20180103

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20190103

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20200103

Year of fee payment: 12