KR20150030274A - 사용자-레벨 스레딩을 위한 즉각적 컨텍스트 전환을 가능하게 하는 새로운 명령어 및 고효율적인 마이크로-아키텍처 - Google Patents

사용자-레벨 스레딩을 위한 즉각적 컨텍스트 전환을 가능하게 하는 새로운 명령어 및 고효율적인 마이크로-아키텍처 Download PDF

Info

Publication number
KR20150030274A
KR20150030274A KR20157003710A KR20157003710A KR20150030274A KR 20150030274 A KR20150030274 A KR 20150030274A KR 20157003710 A KR20157003710 A KR 20157003710A KR 20157003710 A KR20157003710 A KR 20157003710A KR 20150030274 A KR20150030274 A KR 20150030274A
Authority
KR
South Korea
Prior art keywords
bank
instruction
thread
context
processor
Prior art date
Application number
KR20157003710A
Other languages
English (en)
Other versions
KR101771825B1 (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 KR20150030274A publication Critical patent/KR20150030274A/ko
Application granted granted Critical
Publication of KR101771825B1 publication Critical patent/KR101771825B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Abstract

프로세서는 다수의 사용자-레벨 스레드들의 컨텍스트들을 저장하기 위해 확장된 레지스터 세트의 다수의 뱅크들을 이용한다. 현재 뱅크 레지스터는 현재 활성인 뱅크에 대한 포인터를 제공한다. 제1 스레드는 그의 컨텍스트(제1 컨텍스트)를 확장된 레지스터 세트의 제1 뱅크에 저장하고 제2 스레드는 그의 컨텍스트(제2 컨텍스트)를 확장된 레지스터 세트의 제2 뱅크에 저장한다. 프로세서가 제1 스레드와 제2 스레드 간에 컨텍스트들을 교환하기 위한 명령어를 수신하는 경우, 프로세서는 포인터를 제1 뱅크에서 제2 뱅크로 변경하고, 제2 뱅크에 저장된 제2 컨텍스트를 이용하여 제2 스레드를 실행한다.

Description

사용자-레벨 스레딩을 위한 즉각적 컨텍스트 전환을 가능하게 하는 새로운 명령어 및 고효율적인 마이크로-아키텍처{A NEW INSTRUCTION AND HIGHLY EFFICIENT MICRO-ARCHITECTURE TO ENABLE INSTANT CONTEXT SWITCH FOR USER-LEVEL THREADING}
본 개시 내용은 프로세싱 로직, 마이크로프로세서, 및 프로세서 또는 다른 프로세싱 로직에 의해 실행되는 경우, 논리적, 수학적, 다른 기능적 연산들을 수행하는 관련 명령어 세트 아키텍처의 분야에 관한 것이다.
명령어 세트, 또는 명령어 세트 아키텍처(ISA)는 프로그래밍에 관련된 컴퓨터 아키텍처의 일부이고, 네이티브(native) 데이터 유형, 명령어, 레지스터 아키텍처, 어드레싱 모드, 메모리 아키텍처, 인터럽트 및 예외 프로세싱, 및 외부 입력 및 출력(I/O)을 포함할 수 있다. 명령어라는 용어는 일반적으로 본 명세서에서 매크로-명령어들을 디코딩하는 프로세서의 디코더의 결과인 마이크로-명령어들 또는 마이크로-연산들(micro-ops)과는 대조적으로, 실행을 위해 프로세서(또는 명령어를 프로세서에 의해 프로세싱되는 하나 이상의 다른 명령어로 트랜스레이트(translate)하거나(예컨대, 정적 이진 트랜스레이션(translation), 동적 컴파일을 포함하는 동적 이진 트랜스레이션을 이용하여), 모핑하거나(morph), 에뮬레이팅하거나, 달리 변환하는 명령어 변환기)에 제공되는 명령어들인 매크로-명령어들을 말한다.
ISA는 명령어 세트를 구현하는 프로세서의 내부 설계인 마이크로-아키텍처와 구별된다. 상이한 마이크로-아키텍처들을 갖는 프로세서들이 공통 명령어 세트를 공유할 수 있다. 예를 들어, Intel® Core™ 프로세서들 및 캘리포니아주, 서니베일의 Advanced Micro Devices, Inc.로부터의 프로세서들은 x86 명령어 세트의 거의 동일한 버전들을 구현하지만(더 새로운 버전들과 함께 부가된 일부 확장들을 가짐), 상이한 내부 설계들을 가질 수 있다. 예를 들어, ISA의 동일한 레지스터 아키텍처는, 전용 물리적 레지스터들, 레지스터 재명명 메커니즘을 이용하는 하나 이상의 동적으로 할당된 물리적 레지스터들, 등을 포함하는, 공지된 기법들을 이용하여 상이한 마이크로-아키텍처들에서 상이한 방식들로 구현될 수 있다.
현대의 프로세서 코어들은 일반적으로 그의 성능 효율을 개선하기 위해 멀티스레딩을 지원한다. 예를 들어, Intel® Xeon™ 코어들은 현재 2-방향 SMT(simultaneous multithreading)를 제공한다. 코어당 스레드의 수를 증가시키는 것은 중요한 서버 애플리케이션들에 더 높은 성능을 가져올 수 있다. 그러나, SMT 스레드의 수를 (2개에서 4개 이상으로) 증가시키는 것은 매우 복잡하고, 많은 비용이 들고, 오류가 발생하기 쉽다.
대안적인 멀티스레딩 접근법은 애플리케이션 소프트웨어에 의해 관리되는 사용자-레벨 스레드들을 구현하는 것이다. 예를 들어, Microsoft® 시스템들은 소프트웨어 메커니즘들을 이용하여 파이버(fibers)라고 하는 사용자-레벨 스레드들을 관리한다. 파이버 또는 유사 접근법을 이용하여, 애플리케이션은 제1 파이버가 긴 레이턴시 이벤트(예컨대, I/O, 비-사용자 이벤트, 세마포어 대기(wait-for-semaphore), 등)에 직면하는 경우 제1 파이버에서 제2 파이버로 전환할 수 있다. 파이버들의 관리 및 실행은 애플리케이션에 의해 완전히 프로세싱되고 신중하게 조정될 수 있다. 그러나, 많은 비용이 드는 파이버들 간의 전환 페널티(예컨대, 저장(save), 복원(restore), 분기(branch) 연산들)로 인해, 그리고 짧은 레이턴시 및 긴 레이턴시 하드웨어 스톨(stall) 이벤트들 양쪽 모두에 대해 전환하는 경우를 효율적으로 계산해 내는 데 있어 소프트웨어의 한계로 인해 파이버 접근법에 의한 성능 개선은 상당히 제한된다.
실시예들은 첨부 도면들의 그림들에서 제한이 아니라 예로서 도시된다.
도 1a는 일 실시예에 따른 확장된 레지스터 세트를 갖는 명령어 프로세싱 장치의 블록도이다.
도 1b는 일 실시예에 따른 확장된 레지스터 세트를 갖는 레지스터 아키텍처의 블록도이다.
도 2a는 일 실시예에 따른 복수의 하이버(hiber) 컨텍스트를 저장하기 위한 메모리 영역들의 예를 예시한다.
도 2b는 일 실시예에 따른 복수의 하이버 컨텍스트를 저장하기 위한 뱅크들을 포함하는 확장된 레지스터 세트의 예를 예시한다.
도 2c는 일 실시예에 따른 복수의 하이버 컨텍스트를 저장하기 위한 뱅크들을 포함하는 확장된 레지스터 세트의 다른 예를 예시한다.
도 3은 일 실시예에 따른 복수의 하이버 컨텍스트를 저장하기 위한 파티션들로 나누어진 벡터 레지스터들의 예를 예시한다.
도 4a는 캐시 미스를 야기할 가능성이 있는 명령어를 포함하는 프로그램의 예를 예시한다.
도 4b는 복수의 하이버를 실행하기 위한 상태 교환 명령어들을 이용하는 예를 예시한다.
도 5는 일 실시예에 따라 수행될 연산들을 보여주는 흐름도이다.
도 6은 일 실시예에 따른 소스 명령어 세트 중의 이진 명령어들을 타겟 명령어 세트 중의 이진 명령어들로 변환하기 위한 소프트웨어 명령어 변환기의 사용을 보여주는 블록도이다.
도 7a는 일 실시예에 따른 순차 및 비순차 파이프라인의 블록도이다.
도 7b는 일 실시예에 따른 순차 및 비순차 코어의 블록도이다.
도 8a 및 도 8b는 일 실시예에 따른 더 구체적인 예시적인 순차 코어 아키텍처의 블록도들이다.
도 9는 일 실시예에 따른 프로세서의 블록도이다.
도 10은 일 실시예에 따른 시스템의 블록도이다.
도 11은 일 실시예에 따른 제2 시스템의 블록도이다.
도 12는 본 발명의 일 실시예에 따른 제3 시스템의 블록도이다.
도 13은 일 실시예에 따른 시스템-온-칩(SoC)의 블록도이다.
이하의 설명에서는, 다수의 구체적인 상세들이 기술된다. 그러나, 본 발명의 실시예들은 이러한 구체적인 세부 사항들 없이도 실시될 수 있다는 것이 이해될 것이다. 다른 경우에, 이 설명을 모호하게 하지 않기 위해 공지된 회로들, 구조들 및 기법들은 상세히 제시되지 않았다.
본 명세서에 기술된 실시예들은 프로세서로 하여금 사용자-레벨 스레드들 간에 (거의 제로 사이클 페널티를 갖는) 즉각적 전환을 수행하게 하는, 적절한 마이크로-아키텍처 지원을 갖는, 상태 교환 명령어들의 세트(예컨대, SXCHG, SXCHGL 및 이들의 변형들)를 제공한다. ISA에 대한 어떤 추가적인 변경들도 필요하지 않다. 이러한 사용자-레벨 스레드들을 이하에서는, 하드웨어 지원되는 파이버들인, "하이버들(hibers)"이라고 한다. 이 명령어들의 세트는 레지스터 콘텐츠("레지스터 상태"라고도 함)를 N개 뱅크의 사용자-모드(링-3) 레지스터들에 저장하고 복원함으로써 소프트웨어가 N개 하이버들 사이에서 신속히 전환할 수 있게 한다. 이러한 전환은 운영 체제의 개입 없이 애플리케이션들에 의해 제어될 수 있다. 이러한 N개 뱅크의 사용자-모드 레지스터들을 본 명세서에서는 확장된 레지스터 세트라고 한다. 수 N은 2, 4, 8, 또는 마이크로-아키텍처에 의해 지원되는 임의의 수일 수 있다.
도 1a는 명령어들을 실행하도록 동작가능한 실행 유닛(140)을 갖는 명령어 프로세싱 장치(115)의 실시예의 블록도이다. 일부 실시예들에서, 명령어 프로세싱 장치(115)는 프로세서, 멀티-코어 프로세서의 프로세서 코어, 또는 전자 시스템의 프로세싱 요소일 수 있다.
디코더(130)가 상위 레벨 머신 명령어들 또는 매크로명령어들의 형태로 인입하는 명령어들을 수신하고, 이들을 디코딩하여, 원래의 상위 레벨 명령어를 반영하고/하거나 원래의 상위 레벨 명령어로부터 도출되는, 하위 레벨 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 또는 다른 하위 레벨 명령어들 또는 제어 신호들을 생성한다. 이 하위 레벨 명령어들 또는 제어 신호들은 하위 레벨(예컨대, 회로 레벨 또는 하드웨어 레벨) 연산들을 통하여 상위 레벨 명령어의 연산을 구현할 수 있다. 디코더(130)는 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다. 적합한 메커니즘들의 예들은, 마이크로코드, 룩업(look-up) 테이블, 하드웨어 구현, PLA(programmable logic arrays), 관련 기술분야에 공지된 디코더들을 구현하는 데 이용되는 다른 메커니즘들, 등을 포함하지만, 이것으로 제한되지는 않는다.
실행 유닛(140)은 디코더(130)에 결합된다. 실행 유닛(140)은 수신된 명령어들을 반영하거나, 수신된 명령어들로부터 도출되는, 하나 이상의 마이크로-연산, 마이크로-코드 엔트리 포인트, 마이크로명령어, 다른 명령어, 또는 다른 제어 신호를 디코더(130)로부터 수신할 수 있다. 실행 유닛(140)은 또한 레지스터 파일(170) 또는 메모리(120)로부터 입력을 수신하고 이들에 대한 출력을 생성한다.
설명을 모호하게 하는 것을 피하기 위해, 비교적 간단한 명령어 프로세싱 장치(115)가 도시되고 설명되었다. 다른 실시예들은 둘 이상의 실행 유닛을 가질 수 있다는 것을 이해해야 한다. 예를 들어, 장치(115)는, 예를 들어, 산술 유닛, 산술 논리 유닛(ALU)(arithmetic logic units), 정수 유닛, 부동 소수점 유닛 등과 같은 다수의 상이한 유형의 실행 유닛들을 포함할 수 있다. 명령어 프로세싱 장치 또는 프로세서들의 또 다른 실시예들은 다수의 코어, 논리 프로세서, 또는 실행 엔진을 가질 수 있다. 명령어 프로세싱 장치(115)의 다수의 실시예들이 도 7 내지 도 13에 관련하여 뒤에 제공될 것이다.
일 실시예에 따르면, 메모리(120)는 복수의 하이버의 컨텍스트들을 저장한다. 저장되는 하이버 컨텍스트들은 복수의 하이버의 레지스터 상태를 포함한다. 컴퓨터 시스템(예컨대, 컴파일러 또는 다른 최적화 코드를 실행하는 프로세서, 예측 또는 최적화 회로, 등) 또는 프로그래머가 애플리케이션의 특정 명령어가 그의 하이버들 중 하나에 스톨을 야기할 수 있다고 예측하는 경우, 실행 유닛(140)이 하나의 하이버에서 다른 하이버로 실행을 전환하게 하는 명령어가 애플리케이션에 삽입된다.
프로세싱 성능을 향상시키기 위해, 하이버 컨텍스트가 하이버 전환이 있을 때마다 반드시 메모리(120)에 저장되고 메모리(120)로부터 복원되는 것은 아니다. 일 실시예에서, 명령어 프로세싱 장치(115)는 메모리 액세스의 빈도를 줄이기 위해 확장된 레지스터 세트(175)를 하이버 컨텍스트를 일시적으로 저장하기 위한 "라이트-백 캐시(write-back cache)"로서 이용할 수 있다. 확장된 레지스터 세트(175)로부터 하이버 컨텍스트에 액세스하는 것은 메모리(120)로부터 하이버 컨텍스트에 액세스하는 것보다 훨씬 더 빠르다. 따라서, 하이버들 간의 컨텍스트 전환 속도가 상당히 증가될 수 있다.
그러나, 하이버 컨텍스트들을 끊임없이 메모리(120)에 저장하고 복원하지 않음으로써, 메모리(120)는 최신의(up-to-date) 하이버 컨텍스트를 갖지 않을 수 있다. (명령어 프로세싱 장치(115)의 코어들 또는 프로세서들에서 동시에 실행되는) 임의의 애플리케이션들 또는 스레드들에 의해 메모리(120) 내의 오래된(out-dated) 정보가 액세스되는 것을 피하기 위해, 명령어 프로세싱 장치(115)는 하이버 컨텍스트가 저장되어 있는 메모리 영역들에 대한 액세스를 추적하기 위해 스누프 회로(180)를 이용한다. 이러한 메모리 영역들 중 임의의 것의 콘텐츠가 현재의 레지스터 콘텐츠와 일관성이 없게(즉, 상이하게) 될 때마다, 대응하는 메모리 주소들은 마킹 영역(marked area)으로서 스누프 회로(180)에 마킹된다. 마킹된 영역과 확장된 레지스터 세트(175) 사이에서 저장된 컨텍스트들을 동기화시키기 위하여 마킹된 영역이 판독되거나 기입되는 경우 라이트-백(write-back) 이벤트(예컨대, 마이크로코드 트랩)가 트리거된다(triggered). 이 마이크로코드 트랩은 현재의 레지스터 상태(즉, 갱신된 하이버 컨텍스트)가 마킹된 영역에 기입되게 하거나(임의의 애플리케이션 또는 스레드가 영역으로부터 판독하려고 하고 있는 경우), 또는 마킹된 영역으로부터 레지스터들을 리로드(re-load)한다(또 다른 애플리케이션 또는 스레드가 그 영역에 기입한 경우).
일 실시예에서, 명령어 프로세싱 장치(115)는 SXCHG(State Exchange) 명령어 및 그의 변형들과 같은 하이버 전환 명령어들의 세트를 지원한다. 하이버 전환 명령어들의 세트는, 하이버[I]의 컨텍스트가 메모리(120)에 저장되고 하이버[J]의 컨텍스트가 메모리(120)로부터 복원되고 클리어되는, 기본 SXCHG(I, J)를 포함한다. 하이버 전환 명령어들의 세트는 또한 SXCHG(피연산자 없음), SXCHGL(SXCHG의 라이트 버전(light version)), SXCHG.u(무조건(unconditional) SXCHG), SXCHG.c(조건(conditional) SXCHG) 및 < SXCHG.start―SXCHG.end> (블록 SXCHG) 등을 포함한다. 이 명령어들은 아래에 상세히 설명될 것이다.
하이버 전환 명령어들에 대해 기술하기 전에, 이 명령어들을 지원하는 기본 레지스터 아키텍어의 실시예를 보여주는 것이 유익하다. 도 1b에 관련하여 기술될 레지스터 아키텍처는 x86, MMX™, 스트리밍 SIMD 확장(SSE)(Streaming SIMD Extensions), SSE2, SSE3, SSE4.1, 및 SSE4.2 명령어들을 포함하는 명령어 세트뿐만 아니라, 진보된 벡터 확장(AVX)(Advanced Vector Extensions)(AVX1 및 AVX2)이라고 불리는, SIMD 확장들의 부가적인 세트를 구현하는 Intel® Core™ 프로세서들을 기초로 한다. 그러나, 상이한 레지스터 길이들, 상이한 레지스터 유형들 및/또는 상이한 개수의 레지스터들을 지원하는 상이한 레지스터 아키텍처가 이용될 수 있다는 것이 이해될 것이다.
도 1b는 본 발명의 일 실시예에 따른 레지스터 아키텍처(100)의 블록도이다. 도시된 실시예에서는, 폭이 512 비트인 32개 벡터 레지스터들(110)이 존재하며; 이 레지스터들은 zmm0 내지 zmm31이라고 언급된다. 하위 16개 zmm 레지스터들의 하위 256개 비트는 레지스터들 ymm0-16에 오버레이된다. 하위 16개 zmm 레지스터들의 하위 128 비트(ymm 레지스터들의 하위 128 비트)는 레지스터들 xmm0-15에 오버레이된다. 도시된 실시예에서는, 각각이 크기가 64 비트인, 8개의 기입 마스크 레지스터(112)(k0 내지 k7)가 존재한다. 대안의 실시예에서, 기입 마스크 레지스터들(112)은 크기가 16 비트이다.
도시된 실시예에서는, 확장된 레지스터 세트(175)는 본 명세서에서 확장된 GP 레지스터들(125)로서 언급되는, 16개 64 비트 범용(general-purpose, GP) 레지스터들의 4개 뱅크를 포함한다. 실시예에서 이것들은 기존 x86 어드레싱 모드들과 함께 메모리 피연산자들을 어드레싱하는 데 이용된다. (각각의 뱅크 내의) 이 레지스터들은 명칭들 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15에 의해 언급된다. 실시예는 또한 확장된 레지스터 세트(175)가 확장된 RFLAGS 레지스터들(126), 확장된 RIP 레지스터들(127) 및 확장된 MXCSR 레지스터들(128)을 포함하고, 이들 모두가 4개 뱅크를 포함하는 것을 도시하고 있다.
실시예는 또한 스칼라 부동 소수점(FP) 스택 레지스터 파일(x87 스택)(145)을 예시하고 있는데, 그 위에는 MMX 팩형(packed) 정수 플랫(flat) 레지스터 파일(150)이 에일리어싱되어 있다. 도시된 실시예에서, x87 스택은 x87 명령어 세트 확장을 이용하여 32/64/80-비트 부동 소수점 데이터에 대한 스칼라 부동 소수점 연산들을 수행하는 데 이용되는 8-엘리먼트 스택인 반면; MMX 레지스터들은 64-비트 팩형 정수 데이터에 대한 연산들을 수행하고, 또한 MMX 레지스터와 XMM 레지스터 간에 수행되는 일부 연산들에 대한 피연산자들을 보유하는 데 이용된다.
일 실시예에서, 확장된 레지스터 세트(175)는 FP 레지스터 상태 및/또는 벡터 레지스터 상태에 관하여 하이버 4개까지에 대해 임시 저장을 제공하기 위해 FP 스택 레지스터 파일(145)의 4개 뱅크 및/또는 벡터 레지스터들(110)의 4개 뱅크를 더 포함할 수 있다.
본 발명의 대안의 실시예들은 더 넓은 또는 더 좁은 레지스터들 및/또는 더 많은 또는 더 적은 레지스터 뱅크들을 이용할 수 있다. 추가로, 본 발명의 대안의 실시예들은 더 많은, 더 적은, 또는 상이한 레지스터 파일들 및 레지스터들을 이용할 수 있다.
도 2a는 일 실시예에 따른 기본 SXCHG(I,J) 명령어에 응답하여 프로세서(예컨대, 명령어 프로세싱 장치(115))에 의해 수행되는 연산을 보여주는 도면이다. 이 실시예에서, 메모리(120)는 4개 영역을 포함하도록 구성되어 있는데, 상이한 영역들이 상이한 하이버들의 컨텍스트들을 저장하도록 지정된다. 기본 SXCHG(I,J)는 2개의 피연산자 - 어느 하이버 컨텍스트가 저장되어야 하는지를 나타내는 소스(I), 및 어느 하이버 컨텍스트가 복원되어야 하는지를 나타내는 데스티네이션(J) - 를 갖는다. 이 명령어에 응답하여, 프로세서는 레지스터들의 현재 콘텐츠를 메모리(120)에 저장한다. 일 실시예에서, 이 레지스터들은 GP 레지스터들(예컨대, RAX, RBX..., R15), 벡터 레지스터들(예컨대, zmm0-31), 플래그 레지스터들(예컨대, RFLAGS), 명령어 포인터(예컨대, RIP), MXCSR, 및 이들의 임의의 조합들 중 하나 이상을 포함한다. 이 레지스터들의 현재 콘텐츠는 메모리 포인터 레지스터(210)(SMEM[I])가 가리키는 지정된 메모리 영역(영역[I])에 저장된다. 현재 레지스터 콘텐츠를 저장한 후, 프로세서는 메모리 포인터 레지스터 SMEM[J]가 가리키는 다른 메모리 영역(영역[J])으로부터 상기 레지스터들을 로딩하고, 이 메모리 영역(영역[J])을 클리어한다(즉, 0으로 설정한다(zero out)). 이 연산의 결과로, 프로세서는 하나의 명령어 흐름 하이버[I]로부터 전환하여 다른 명령어 흐름 하이버[J]를 실행한다.
하나의 시나리오에서, 하이버[J]는 명령어 SXCHG(J,I)를 포함할 수 있는데, 이 명령어는 프로세서로 하여금 다시 전환하여 메모리 영역[I]에 저장된 레지스터 콘텐츠를 이용해 이전 명령어 흐름(즉, 하이버[I])을 실행하게 한다. SXCHG(J,I)에 응답하여, 프로세서는 SMEM[J]가 가리키는 메모리 영역(영역[J])에 레지스터 상태를 저장하고, SMEM[I]가 가리키는 메모리 영역(영역[I])으로부터 위의 레지스터들을 로딩하고 이 메모리 영역(영역[I])을 클리어한다(즉, 0으로 설정한다).
도 2a의 예는 메모리 영역[0], 영역[1], 영역[2] 및 영역[3]을 예시한다. SXCHG(0,2)를 실행하면 (SMEM[0]이 가리키는) 영역[0]에 레지스터 콘텐츠가 저장되고 (SMEM[2]가 가리키는) 영역[2]로부터 레지스터 콘텐츠가 복원된다.
사용자-레벨 컨텍스트 전환의 속도를 향상시키기 위해, 레지스터 상태가 메모리 대신에 확장된 레지스터 세트(예컨대, 도 1a 및 도 1b의 확장된 레지스터 세트(175))에 저장되고 이로부터 복원될 수 있다. 메모리 로케이션들을 물리적 레지스터들로 매핑하는 것을 때때로 메모리 재명명(memory renaming)이라고 한다.
도 2b는 확장된 레지스터 세트(175)의 실시예를 예시한다. 이 실시예에서, 세트(175) 내의 각 레지스터는 4개의 뱅크: 뱅크 0, 뱅크 1, 뱅크 2 및 뱅크 3을 갖는다. 향상된 성능을 갖는 SXCHG 명령어들을 지원하는 마이크로-아키텍처는 다수의 뱅크; 예컨대, 4개의 뱅크를 가질 수 있고, 각 뱅크 내의 GP 레지스터들은 폭이 64 비트이다. 도 2b의 실시예에서, 주어진 뱅크 내의 레지스터는 그의 원래의 이름에 뱅크 인덱스가 부가되어 재명명된다; 예컨대, RAX.0, RAX.1, RAX.2 및 RAX.3. 프로세서가 2개의 하이버 컨텍스트 사이에서 전환하는 경우, 메모리 저장 및 메모리 복원 연산들의 긴 시퀀스 대신에, 프로세서는 포인터(예컨대, 현재 뱅크(CB) 레지스터(220)의 콘텐츠)를 하나의 레지스터 뱅크에서 다른 것으로 변경하기만 하면 된다. 일 실시예에서, 디코더는 컨텍스트 전환시 명령어들이 언급하는 레지스터 이름을 변경할 수 있다(예컨대, RAX.O에서 RAX.3으로). 레지스터 재명명을 이용하는 진보된 비순차 프로세서는 재명명 포인터를 쉽게 전환할 수 있다. 그 결과, 프로세서 프런트 엔드가 SXCHG를 예측한다면, 하이버 전환이 거의 제로 사이클로 신속히 수행될 수 있다.
SXCHG 명령어의 일 실시예는 어떤 피연산자도 갖지 않는다. 소스 인덱스(예컨대, 인덱스 I)를 공급하는 대신에, 명령어는 CB 레지스터(220)를 이용하여 프로세서가 실행하고 있는 현재 활성인 하이버의 뱅크를 식별한다. SXCHG 명령어에 이어서(예컨대, 라이트-백 이벤트가 발생하는 경우), 프로세서는 현재 레지스터 상태를 SMEM[CB]가 가리키는 메모리 영역에 저장한다. 도 2b의 예에서, CB=0이고, 이는 프로세서가 레지스터 상태를 SMEM[0]에 저장함을 의미한다. 확장된 레지스터 세트(175)의 뱅크 0 내의 레지스터 상태는 차후 사용을 위해; 예컨대 실행이 다시 하이버[0]로 전환하는 경우를 위해, 뱅크 0에 머물러야 한다.
더욱이, SXCHG 명령어는 데스티네이션 인덱스를 필요로 하지 않는다. 대신에, 프로세서는 하이버들 각각에 대한 마스크 비트를 포함하는 마스크 레지스터(230)를 이용한다. 도 2b의 예에서, 각 하이버는 연관된 마스크 비트를 갖는다. 연관된 마스크 비트가 미리 정해진 값(예컨대, 0)을 갖는다면, 대응하는 하이버는 비활성화되고(deactivated) 이 하이버로 어떤 전환도 행해지지 않을 것이다. 그렇지 않다면(예컨대, 마스크 비트 값이 1일 때), 대응하는 하이버는 활성(현재 실행중)이거나 휴면중(실행 대기중)이다. SXCHG 실행시, 프로세서는 라운드-로빈(round-robin) 또는 유사 정책을 이용하여, 휴면중인 다음 하이버로 전환하거나 다음 하이버를 활성화시킬 것이다. 도 2b의 예에서, 프로세서는 하이버[1]의 마스크가 0이기 때문에 CB=0에서 CB=2로 전환한다.
도 2c는 확장된 레지스터 세트(175)의 일 실시예를 더 상세히 예시한다. 이 실시예에서, 확장된 레지스터 세트(175)는 4개의 뱅크를 포함하고, 각각의 뱅크는 zmm0-31, GP 레지스터들, RFLAGS, 및 RIP를 포함한다. 전술한 바와 같이, 마스크 레지스터(230)는 대응하는 것이 비활성되어 있는지, CB 레지스터(220)가 현재 활성인 뱅크를 가리키는지를 나타내도록 각각의 뱅크에 대한 마스크 비트를 포함한다. 동일한 뱅크 내의 레지스터들의 폭들은 도 2c에서 동일한 것처럼 보이지만, 동일한 뱅크 내의 상이한 레지스터들은 동일한 폭을 가질 수도 있고 갖지 않을 수도 있다는 것이 이해된다. 이 대안의 실시예들에서, 확장된 레지스터 세트(175)는 더 많은 또는 더 적은 레지스터들, 그리고/또는 더 많은 또는 더 적은 수의 뱅크들을 포함할 수 있다.
일 실시예에서, SXCHG 명령어는 다수의 변형들을 갖는다. SXCHG.u는 다음 하이버로의 무조건 전환을 야기하는 명령어이다. SXCHG.c는 마이크로-아키텍처의 런타임 판정(runtime decision)에 기초하여 다음 하이버로의 전환을 야기하는 명령어이다. 일 실시예에서, 결정-수행(decision-making) 마이크로-아키텍처는 자주 미스되는 로드들(frequently missed loads)에 대한 명령어 포인터를 추적하는, 프런트 엔드 회로(예컨대, 분기 예측 유닛)일 수 있다. 하드웨어 파라미터들에 기초하여, 마이크로-아키텍처는 전환을 수행하기 위한 조건이 충족되는지를 판정하고, 전환이 수행되어야 한다면, 실행의 어느 지점에서 전환을 수행할지를 판정할 수 있다. 예를 들어, 마이크로-아키텍처는 프리페치 캐시 미스(prefetch cache miss) 또는 다른 긴 레이턴시 이벤트들에 따라 전환하도록 결정할 수 있다. SXCHG.start 및 SXCHG.end는 모든 명령어가 SXCHG 컨텍스트 전환을 가질 후보일 수 있는 명령어들의 블록의 경계를 마킹하는 명령어들의 쌍이다. 이것은 그 명령어 블록 내의 모든 명령어 이전에 SXCHG.c를 갖는 것과 동일한 효과를 갖는다. SXCHG.start 및 SXCHG.end는 각각 명령어 블록의 시작과 끝을 마킹한다. 이러한 마킹을 이용함으로써, 마이크로-아키텍처는 상이한 하이버들을 실행하는 명령어들 사이에서 자유로이 선택할 수 있다.
일 실시예에서, SXCHG 명령어 및 그의 변형들은 SXCHGL이라고 하는 "라이트" 버전을 갖는다. SXCHGL 명령어에 응답하여, 프로세서는 하이버 컨텍스트를 메모리에 저장하고 복원하지 않는다. 대신에, 프로세서는 하이버 컨텍스트를 벡터 레지스터들 및/또는 부동 소수점 레지스터들과 같은, 다이 상의(on-die) 미활용 레지스터들에 저장하고 복원한다. 일 실시예에서, 이러한 미활용 레지스터들은 벡터 레지스터들(예컨대, zmm0-31, zmm16-31, 또는 zmm 레지스터들의 임의의 미활용 부분)이다. 일 실시예에서, zmm 레지스터들의 일부분이 여전히 벡터 저장을 위해 이용될 수 있고(예컨대, xmm0-15) zmm 레지스터들의 나머지는 하이버 컨텍스트를 저장하는 데 이용될 수 있다. 이러한 미활용 레지스터들(또는 그의 일부분)은 다수의 하이버들의 컨텍스트를 저장하기 위해 다수의 파티션들(예컨대, SXCHG 내의 4개의 메모리 영역에 대응하는 4개의 파티션)로 나누어질 수 있다. 게다가, SXCHG와 유사하게, SXCHGL 명령어도 다수의 변형들: SXCHGL.u, SXCHGL.c, SXCHGL.start 및 SXCHGL.end를 가지며; 이들의 사용은 이들의 SXCHG 대응물들과 유사하다.
일 실시예에서, SXCHG 명령어들에 응답하여 저장된 컨텍스트는 zmm 레지스터 상태를 포함하는 반면; SXCHGL 명령어들에 응답하여 저장된 컨텍스트는 (zmm 레지스터 상태가 아니라) xmm 레지스터 상태를 포함한다. 따라서, SXCHGL 명령어들에 대해, zmm0-15는 4개의 하이버의 xmm 상태를 저장하는 데 이용될 수 있고, zmm16-31은 동일한 4개의 하이버의 다른 레지스터들의 상태(예컨대, GP 레지스터들, 플래그(flags) 레지스터들, 명령어 포인터 등)를 저장하는 데 이용될 수 있다. 도 3은 4개의 하이버의 컨텍스트들을 저장하기 위해 4개의 파티션으로 나누어진 벡터 레지스터들의 일부분(310)(zmm16-31)의 일 실시예를 예시한다; 각각의 파티션은 확장된 레지스터 세트(175)의 뱅크에 대응한다. CB 레지스터들(220)은 확장된 레지스터 세트(175)의 현재 활성인 뱅크는 물론 벡터 레지스터들의 일부분(310)의 대응 파티션에 대한 포인터를 제공한다.
레지스터들을 zmm 레지스터들로부터/로 직접 저장/복원하는 것에 의해 SXCHGL 명령어를 실행하는 것은 느릴 수 있다. 효율적인 구현을 가능하게 하기 위해, zmm 레지스터들로부터/로 저장하고 복원하는 대신에, 다수의 뱅크들을 포함하는 확장된 레지스터 세트(예컨대, 도 1a 및 도 1b의 확장된 레지스터 세트(175))가 SXCHG와 유사한 방식으로 "기입후 캐시"로서 이용될 수 있다. SXCHG와 유사하게, CB 레지스터가 현재 활성인 뱅크를 가리키기 위해 SXCHGL에 의해 이용될 수 있으며, 마스크 비트들을 포함하는 마스크 레지스터는 대응하는 뱅크가 더 이상 이용되지 않는지(즉, 비활성화되어 있는지)를 나타내기 위해 이용될 수 있다. 모든 하이버들이 마스킹되어 있다면(예컨대, 0의 대응 마스크 비트들을 갖는다면), SXCHGL은 no-op 연산이 된다.
그 결과, 프로세서는 다수의 하이버들로부터의 코드를 효율적으로 실행할 수 있다. 프런트 엔드가 SXCHGL을 정확히 예측한다면, 프로세서는 파이프라인 플러시 없이 매우 빠르게 하이버들 사이에서 전환할 수 있다.
일 실시예에서, 도 1a의 스누프 회로(180)와 유사한 스누프 메커니즘이 하이버 컨텍스트들이 저장되어 있는 zmm 레지스터들로의 액세스를 추적하기 위해 이용될 수 있다. zmm 레지스터에 저장된 하이버 컨텍스트가 확장된 레지스터 세트(175)의 대응 콘텐츠와 일관성이 없게(즉, 상이하게) 될 때마다, zmm 레지스터가 마킹된다. 일 실시예에서, 이 스누프 메커니즘은 zmm 레지스터의 각각의 전역(global) 상태와 연관된 상태 비트로서 구현될 수 있다. 이 상태 비트는 가장 최근에 갱신된 하이버 컨텍스트가 있는 곳을 나타낸다. 가장 최근의 갱신이 zmm 레지스터들에 있다면(예컨대, XRESTORE 연산 후에), 첫 번째 SXCHGL 명령어 실행은 마이크로-코드 시퀀스가 실행되게 하는 기입후 이벤트를 트리거할 것이다. 마이크로-코드 시퀀스는 가장 최근의 갱신을 zmm 공간으로부터 확장된 레지스터 세트(175)로 복사할 것이다. 가장 최근의 갱신이 확장된 레지스터 세트(175)에 있고 프로세서가 벡터 명령어를 실행하기 시작한다면(예컨대, XSAVE 연산 후에), 마이크로-코드는 최근 갱신을 확장된 레지스터 세트(175)로부터 zmm 공간으로 복사할 것이다.
다음의 설명에서, SXCHG 또는 "상태 교환 명령어"가 언급되는 경우에는 언제나, 그 설명은 SXCHG와 SXCHGL 둘 다에 적용된다고 생각된다.
도 4a는 SXCHG 명령어 또는 전술한 그의 변형들 중 하나를 이용할 수 있는 코드 세그먼트(410)의 예를 예시한다. 코드 세그먼트(410)는 이진 검색(binary search)("Bsearch"라고 불림)을 구현한다. 이진 검색 동안, 많은 수의 캐시 미스들이 명령어(420)(temp = A[mid])에서 발생할 것으로 예상된다. 도 4b는 각각이 하이버를 나타내는 2개의 코드 세그먼트 foo0 및 foo1를 이용해 동일한 이진 검색을 수행하는 예를 예시한다. 이 코드 세그먼트들 각각은, 많은 캐시 미스들이 발생할 것으로 예상되는, (temp = A[mid]) 명령어(430 또는 431) 후에 SXCHG.u 명령어를 포함한다. 따라서, 프로세서가 foo0에서 명령어(430)를 수행한 직후, 프로세서는 예상되는 캐시 미스 이벤트 동안 foo1로의 무조건 전환을 실행한다. 캐시 미스가 실제로 명령어(430)에 대해 발생하면, 컨텍스트 전환은 프로세서가 foo1에서 다른 유용한 작업에 관여하게 해준다. 유사하게, 캐시 미스가 실제로 명령어(431)에 대해 발생하면, 컨텍스트 전환은 프로세서가 foo0에서 다른 유용한 작업에 관여하게 해준다. 캐시 미스가 발생하지 않으면, 컨텍스트 전환의 패널티는 최소이다. 이것은 foo0 및 foo1의 컨텍스트들이 둘 다 확장된 레지스터 세트에 저장(store)되고 빠르게 저장(save) 및 복원(restore)될 수 있기 때문이다.
일 실시예에서, SXCHG 명령어(예컨대, 도 4b의 SXCHG.u 명령어)는 프로그래머에 의해 부가될 수 있다. 대안의 실시예에서, SXCHG 명령어는 컴파일러에 의해 부가될 수 있다. 컴파일러는 정적 컴파일러 또는 저스트 인 타임(just-in-time) 컴파일러일 수 있다. 컴파일러는 SXCHG 명령어를 실행하는 프로세서와 동일한 하드웨어 플랫폼에, 또는 상이한 하드웨어 플랫폼에 위치할 수 있다. SXCHG의 배치 및 SXCHG의 실행은 운영 체제 개입이 없다는 것에 유의한다.
도 5는 일 실시예에 따른 2개의 하이버 컨텍스트를 교환하는 방법(500)의 블록 흐름도이다. 이 방법(500)은 프로세서(예컨대, 도 1a의 명령어 프로세싱 장치(115))가 확장된 레지스터 세트의 제1 뱅크에 저장된 제1 컨텍스트를 이용하여 제1 사용자-레벨 스레드(예컨대, 하이버)를 실행하는 것(블록 510)으로 시작된다. 제1 스레드의 실행 동안, 프로세서는 제1 스레드와 제2 스레드의 컨텍스트들을 교환하기 위한 명령어를 수신하고(블록 520), 여기서 제2 스레드는 다른 사용자-레벨 스레드(예컨대, 하이버)이고 확장된 레지스터 세트의 제2 뱅크에 저장된 제2 컨텍스트를 갖는다. 이 명령어에 응답하여, 프로세서는 현재 제1 뱅크를 현재 활성인 뱅크로서 가리키는 레지스터 포인터를 제2 뱅크로 변경한다(블록 530). 그 후 프로세서는 제2 뱅크에 저장된 제2 컨텍스트를 이용하여 제2 스레드를 실행한다(블록 540).
다양한 실시예들에서, 도 5의 방법은 범용 프로세서, 특수 목적 프로세서(예컨대, 그래픽 프로세서 또는 디지털 신호 프로세서), 또는 다른 유형의 디지털 로직 디바이스 또는 명령어 프로세싱 장치에 의해 수행될 수 있다. 일부 실시예들에서, 도 5의 방법은 도 1a의 명령어 프로세싱 장치(115), 또는 도 7-13에 도시된 실시예들과 같은, 유사 프로세서, 장치, 또는 시스템에 의해 수행될 수 있다. 더욱이, 도 1a의 명령어 프로세싱 장치(115)는 물론, 도 7-13의 프로세서, 장치, 또는 시스템은 도 5의 방법과 동일하거나, 유사하거나, 상이한 방법들 및 동작들의 실시예들을 수행할 수 있다.
일부 실시예들에서, 도 1의 명령어 프로세싱 장치(115)는 소스 명령어 세트로부터 타겟 명령어 세트로 명령어를 변환하는 명령어 변환기와 함께 동작할 수 있다. 예를 들어, 명령어 변환기는 명령어를 코어에 의해 프로세싱될 하나 이상의 다른 명령어로 트랜스레이트하거나(예컨대, 정적 이진 트랜스레이션, 동적 컴파일을 포함하는 동적 이진 트랜스레이션을 이용하여), 모핑하거나(morph), 에뮬레이팅하거나, 달리 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 프로세서 상에 있거나, 프로세서에서 떨어져 있거나, 또는 일부는 프로세서 상에 일부는 프로세서에서 떨어져 있을 수 있다.
도 6은 본 발명의 실시예들에 따른 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합으로 구현될 수 있다. 도 6은 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(616)에 의해 기본적으로 실행될 수 있는 x86 이진 코드(606)를 생성하기 위해 고수준 언어(602)의 프로그램이 x86 컴파일러(604)를 이용하여 컴파일될 수 있음을 예시한다. 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(616)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 성취하기 위하여, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당한 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서에서 실행되도록 타겟팅된 애플리케이션 또는 기타 소프트웨어의 오브젝트 코드 버전들을 호환성 있게 실행하거나 달리 프로세싱함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(604)는 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(616)에서, 부가적인 연결(linkage) 프로세싱와 함께 또는 부가적인 결합 프로세싱 없이, 실행될 수 있는 x86 이진 코드(606)(예컨대, 오브젝트 코드)를 생성하도록 동작하는 컴파일러를 나타낸다. 유사하게, 도 6은 적어도 하나의 x86 명령어 세트 코어가 없는 프로세서(614)(예컨대, 캘리포니아주, 서니베일의 MIPS Technologies의 MIPS 명령어 세트를 실행하고/하거나 캘리포니아주, 서니베일의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 기본적으로 실행될 수 있는 대안적인 명령어 세트 이진 코드(610)를 생성하기 위해 고수준 언어(602)의 프로그램이 대안적인 명령어 세트 컴파일러(608)를 이용하여 컴파일될 수 있다는 것을 예시한다. 명령어 변환기(612)는 x86 이진 코드(606)를 x86 명령어 세트 코어가 없는 프로세서(614)에 의해 기본적으로 실행될 수 있는 코드로 변환하기 위해 이용된다. 이 변환된 코드는 대안적인 명령어 세트 이진 코드(610)와 동일하지 않을 가능성이 있는데, 그 이유는 이것이 가능한 명령어 변환기는 만들기 어렵기 때문이며; 하지만, 변환된 코드는 일반적인 연산을 달성하고 대안적인 명령어 세트로부터의 명령어들로 구성될 것이다. 따라서, 명령어 변환기(612)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통하여, x86 명령어 세트 프로세서 또는 코어를 가지고 있지 않은 프로세서 또는 다른 전자 디바이스가 x86 이진 코드(606)를 실행하게 해주는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
예시적인 코어 아키텍처들
순차 및 비순차 코어 블록도
도 7a는 본 발명의 실시예들에 따른 예시적인 순차 파이프라인 및 예시적인 레지스터 재명명, 비순차 발행/실행 파이프라인 둘 다를 보여주는 블록도이다. 도 7b는 본 발명의 실시예들에 따른 프로세서에 포함될 순차 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 재명명, 비순차 발행/실행 아키텍처 코어 둘 다를 보여주는 블록도이다. 도 7a 및 도 7b에서의 실선 박스들은 순차 파이프라인 및 순차 코어를 나타내는 반면, 파선 박스들의 선택적인 부가는 레지스터 재명명, 비순차 발행/실행 파이프라인 및 코어를 나타낸다. 순차 측면이 비순차 측면의 서브셋인 것을 고려하여, 비순차 측면이 기술될 것이다.
도 7a에서, 프로세서 파이프라인(700)은 페치(fetch) 스테이지(702), 길이 디코드 스테이지(704), 디코드 스테이지(706), 할당 스테이지(708), 재명명 스테이지(710), 스케줄링(디스패치(dispatch) 또는 발행이라고도 함) 스테이지(712), 레지스터 판독/메모리 판독 스테이지(714), 실행 스테이지(716), 재기입(write back)/메모리 기입 스테이지(718), 예외 프로세싱 스테이지(722), 및 커밋(commit) 스테이지(724)를 포함한다.
도 7b는 실행 엔진 유닛(750)에 결합된 프런트 엔드 유닛(front end unit)(730) - 둘 다는 메모리 유닛(770)에 결합되어 있음 - 을 포함하는 프로세서 코어(790)를 나타낸 것이다. 코어(790)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 혼성체 또는 대안의 코어 유형일 수 있다. 또 다른 옵션으로서, 코어(790)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, GPGPU(general purpose computing graphics processing unit) 코어,그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프런트 엔드 유닛(730)은 명령어 캐시 유닛(734)에 결합된 분기 예측 유닛(732)을 포함하고, 명령어 캐시 유닛(734)은 명령어 TLB(translation lookaside buffer)(736)에 결합되고, 명령어 TLB(736)는 명령어 페치 유닛(738)에 결합되고, 및 명령어 페치 유닛(738)은 디코드 유닛(740)에 결합된다. 디코드 유닛(740)(또는 디코더)은 명령어들을 디코딩하고, 원래의 명령어들로부터 디코딩되거나, 원래의 명령어들을 다른 방식으로 반영하거나, 원래의 명령어들로부터 도출되는 하나 이상의 마이크로연산들, 마이크로코드 진입점들, 마이크로명령어들, 기타 명령어들, 또는 기타 제어 신호들을 출력으로서 발생시킬 수 있다. 디코드 유닛(740)은 각종의 상이한 메커니즘들을 사용하여 구현될 수 있다. 적당한 메커니즘들의 예들은 룩업 테이블(look-up table), 하드웨어 구현, PLA(programmable logic array), 마이크로코드 ROM(read only memory) 등을 포함하지만, 이들로 제한되지 않는다. 일 실시예에서, 코어(790)는 (예컨대, 디코드 유닛(740) 내의 또는 그렇지 않고 프런트 엔드 유닛(730) 내의) 특정의 마이크로명령어들에 대한 마이크로코드를 저장하는 마이크로코드 ROM, 또는 다른 매체를 포함한다. 디코드 유닛(740)은 실행 엔진 유닛(750) 내의 재명명/할당기 유닛(752)에 결합되어 있다.
실행 엔진 유닛(750)은 회수 유닛(retirement unit)(754) 및 하나 이상의 스케줄러 유닛(들)의 세트(756)에 결합되어 있는 재명명/할당기 유닛(752)을 포함하고 있다. 스케줄러 유닛(들)(756)은 예약 스테이션(reservations station), 중앙 명령어 윈도우(central instruction window) 등을 포함하는 임의의 수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(756)은 물리 레지스터 파일(들) 유닛(들)(758)에 결합되어 있다. 물리 레지스터 파일(들) 유닛(들)(758) 각각은 하나 이상의 물리 레지스터 파일들을 나타내고, 그 중 상이한 물리 레지스터 파일들은 스칼라 정수, 스칼라 부동 소수점, 압축 정수(packed integer), 압축 부동 소수점(packed floating point), 벡터 정수, 벡터 부동 소수점, 상태(예컨대, 실행될 다음 명령어의 주소인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 유형들을 저장한다. 일 실시예에서, 물리 레지스터 파일(들) 유닛(758)은 벡터 레지스터 유닛(vector registers unit), 기입 마스크 레지스터 유닛(write mask registers unit), 및 스칼라 레지스터 유닛(scalar registers unit)을 포함한다. 이들 레지스터 유닛은 아키텍처 벡터 레지스터들, 벡터 마스크 레지스터들, 및 범용 레지스터들을 제공할 수 있다. 레지스터 재명명 및 비순차 실행이 구현될 수 있는 다양한 방식들(예컨대, 재정렬 버퍼(들) 및 회수 레지스터 파일(들)을 사용하는 것; 장래 파일(future file)(들), 이력 버퍼(history buffer)(들), 및 회수 레지스터 파일(들)을 사용하는 것; 레지스터 맵 및 레지스터들의 풀(pool)을 사용하는 것 등)을 나타내기 위해, 물리 레지스터 파일(들) 유닛(들)(758)이 회수 유닛(754)과 중복되어 있다(overlapped). 회수 유닛(754) 및 물리 레지스터 파일(들) 유닛(들)(758)이 실행 클러스터(들)(760)에 결합되어 있다. 실행 클러스터(들)(760)는 하나 이상의 실행 유닛들(762)의 세트 및 하나 이상의 메모리 액세스 유닛들(764)의 세트를 포함한다. 실행 유닛들(762)은 다양한 유형의 데이터(예컨대, 스칼라 부동 소수점, 압축 정수, 압축 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예컨대, 시프트, 덧셈, 뺄셈, 곱셈)을 수행할 수 있다. 일부 실시예들이 특정의 기능들 또는 기능 세트들에 전용된 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 단지 하나의 실행 유닛 또는 모두가 모든 기능들을 수행하는 다수의 실행 유닛들을 포함할 수 있다. 스케줄러 유닛(들)(756), 물리 레지스터 파일(들) 유닛(들)(758), 및 실행 클러스터(들)(760)가 잠재적으로 복수개일 수 있는 것으로 도시되어 있는데, 그 이유는 특정의 실시예들이 특정의 유형의 데이터/연산에 대해 개별적인 파이프라인(예컨대, 각각이 그 자신의 스케줄러 유닛, 물리 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 스칼라 정수 파이프라인, 스칼라 부동 소수점/압축 정수/압축 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인; 개별적인 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(764)을 갖는 특정의 실시예들이 구현됨)을 생성하기 때문이다. 또한, 개별적인 파이프라인들이 사용되는 경우에, 이들 파이프라인 중 하나 이상은 비순차 발행/실행일 수 있고 나머지는 순차 발행/실행일 수 있다는 것을 잘 알 것이다.
메모리 액세스 유닛들(764)의 세트는 L2(level 2) 캐시 유닛(776)에 결합된 데이터 캐시 유닛(774)에 결합된 데이터 TLB 유닛(772)을 포함하는, 메모리 유닛(770)에 결합된다. 일 예시적인 실시예에서, 메모리 액세스 유닛들(764)은 로드 유닛(load unit), 주소 저장 유닛(store address unit), 및 데이터 저장 유닛(store data unit)을 포함할 수 있고, 이들 각각은 메모리 유닛(770) 내의 데이터 TLB 유닛(772)에 결합되어 있다. 명령어 캐시 유닛(734)은 또한 메모리 유닛(770) 내의 L2(level 2) 캐시 유닛(776)에 결합되어 있다. L2 캐시 유닛(776)은 하나 이상의 다른 레벨의 캐시에 그리고 궁극적으로 주 메모리(main memory)에 결합되어 있다.
예로서, 예시적인 레지스터 재명명, 비순차 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(700)을 구현할 수 있다: 1) 명령어 페치(738)는 페치 스테이지(702) 및 길이 디코딩 스테이지(704)를 수행함; 2) 디코드 유닛(740)은 디코드 스테이지(706)를 수행함; 3) 재명명/할당기 유닛(752)은 할당 스테이지(708) 및 재명명 스테이지(710)를 수행함; 4) 스케줄러 유닛(756)은 스케줄링 스테이지(712)를 수행함; 5) 물리 레지스터 파일(들) 유닛(들)(758) 및 메모리 유닛(770)은 레지스터 판독/메모리 판독 스테이지(714)를 수행하고; 실행 클러스터(760)는 실행 스테이지(716)를 수행함; 6) 메모리 유닛(770) 및 물리 레지스터 파일(들) 유닛(들)(758)은 재기입/메모리 기입 스테이지(718)를 수행함; 7) 다양한 유닛들이 예외 프로세싱 스테이지(722)에 관여되어 있을 수 있음; 및 8) 회수 유닛(754) 및 물리 레지스터 파일(들) 유닛(들)(758)은 커밋 스테이지(724)를 수행함.
코어(790)는 하나 이상의 명령어 세트들(예컨대, (보다 최신의 버전에서 추가된 어떤 확장을 갖는) x86 명령어 세트; 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트; 본 명세서에 기술된 명령어(들)를 포함하는 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 (NEON 등의 선택적인 부가의 확장을 갖는) ARM 명령어 세트)을 지원할 수 있다. 일 실시예에서, 코어(790)는 패킹된 데이터 명령어 세트 확장(예컨대, SSE, AVX1, AVX2)을 지원하는 로직을 포함하고, 그로써 많은 멀티미디어 애플리케이션들에 의해 사용되는 연산들이 패킹된 데이터를 사용하여 수행될 수 있게 한다.
코어가 (2개 이상의 병렬 연산 또는 스레드 세트들을 실행하는) 멀티스레딩을 지원할 수 있고, 시분할 멀티스레딩(time sliced) 멀티스레딩, 동시 멀티스레딩(simultaneous multithreading)(단일의 물리적 코어가 물리적 코어가 동시에 멀티스레딩하고 있는 스레드들 각각에 대한 논리적 코어를 제공하는 경우), 또는 이들의 조합(예컨대, Intel® 하이퍼스레딩(Hyperthreading) 기술에서와 같은 시분할 페칭 및 디코딩과 그 후의 동시 멀티스레딩)을 포함하는 각종의 방식으로 그렇게 할 수 있다는 것을 잘 알 것이다.
레지스터 재명명이 비순차 실행과 관련하여 기술되어 있지만, 레지스터 재명명이 순차 아키텍처에서 사용될 수 있다는 것을 잘 알 것이다. 프로세서의 예시된 실시예가 또한 개별적인 명령어 캐시 유닛(734) 및 데이터 캐시 유닛(774)과 공유 L2 캐시 유닛(776)을 포함하고 있지만, 대안의 실시예들은, 예를 들어, L1(Level 1) 내부 캐시 또는 다수의 레벨의 내부 캐시와 같이, 명령어들 및 데이터 둘 다에 대한 단일의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 본 시스템은 내부 캐시와 코어 및/또는 프로세서의 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 다른 대안으로서, 모든 캐시가 코어 및/또는 프로세서의 외부에 있을 수 있다.
특정의 예시적인 순차 아키텍처 코어
도 8a 및 도 8b는 보다 구체적인 예시적인 순차 코어 아키텍처의 블록도를 나타낸 것이고, 이 코어는 칩에 있는 몇개의 로직 블록들(동일한 유형 및/또는 상이한 유형들의 다른 코어들을 포함함) 중 하나일 것이다. 로직 블록들은, 애플리케이션에 따라, 고대역폭 상호접속 네트워크(예컨대, 링 네트워크)를 통해 일부 고정 기능 로직, 메모리 I/O 인터페이스들, 및 다른 필요한 I/O 로직과 통신한다.
도 8a는 본 발명의 실시예들에 따른, 단일 프로세서 코어를, 온다이 상호접속 네트워크(802)에의 그의 접속 및 레벨 2(L2) 캐시의 그의 로컬 서브셋(804)과 함께, 나타낸 블록도이다. 일 실시예에서, 명령어 디코더(800)는 패킹된 데이터 명령어 세트 확장을 갖는 x86 명령어 세트를 지원한다. L1 캐시(806)는 스칼라 및 벡터 유닛들 내의 캐시 메모리에의 저 지연시간 액세스를 가능하게 한다. 일 실시예에서, (설계를 단순화하기 위해) 스칼라 유닛(808) 및 벡터 유닛(810)이 개별적인 레지스터 세트들(각각, 스칼라 레지스터들(812) 및 벡터 레지스터들(814))을 사용하고 이들 사이에서 전달되는 데이터가 메모리에 기입된 다음에 L1(level 1) 캐시(806)로부터 다시 판독되지만, 본 발명의 대안의 실시예들은 상이한 접근 방법을 사용할 수 있다(예컨대, 단일의 레지스터 세트를 사용하거나, 기입 및 다시 판독되는 일 없이 2개의 레지스터 파일들 간에 데이터가 전달될 수 있게 하는 통신 경로를 포함함).
L2 캐시의 로컬 서브셋(804)은, 프로세서 코어당 하나씩, 개별적인 로컬 서브셋들로 나누어져 있는 전역 L2 캐시의 일부이다. 각각의 프로세서 코어는 L2 캐시의 그 자신의 로컬 서브셋(804)에의 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독된 데이터는 그의 L2 캐시 서브셋(804)에 저장되고, 그 자신의 로컬 L2 캐시 서브셋들에 액세스하는 다른 프로세서 코어들과 병렬로 빠르게 액세스될 수 있다. 프로세서 코어에 의해 기입된 데이터는 그 자신의 L2 캐시 서브셋(804)에 저장되고, 필요한 경우, 다른 서브셋들부터 플러시된다(flushed). 링 네트워크는 공유 데이터에 대한 일관성을 보장해준다. 프로세서 코어들, L2 캐시들 및 다른 로직 블록들과 같은 에이전트들이 칩 내에서 서로 통신할 수 있게 하기 위해, 링 네트워크는 양방향이다. 각각의 링 데이터-경로는 방향당 1012-비트 폭이다.
도 8b는 본 발명의 실시예들에 따른, 도 8a에서의 프로세서 코어의 일부의 확대도이다. 도 8b는 L1 캐시(804)의 L1 데이터 캐시(806A) 부분은 물론, 벡터 유닛(810) 및 벡터 레지스터들(814)에 관한 부가 상세를 포함하고 있다. 구체적으로는, 벡터 유닛(810)은 정수, 단정도 부동 소수점, 및 배정도 부동 소수점 명령어들 중 하나 이상을 실행하는 16-와이드(16-wide) 벡터 프로세싱 유닛(VPU)(16-와이드 ALU(828)를 참조)이다. VPU는 스위즐 유닛(swizzle unit)(820)에 의해 레지스터 입력들을 뒤섞는 것, 숫자 변환 유닛들(822A 및 822B)에 의한 숫자 변환, 및 메모리 입력에 대한 복제 유닛(824)에 의한 복제를 지원한다. 기입 마스크 레지스터들(826)은 얻어지는 벡터 기입들을 예측하는 것을 가능하게 한다.
통합된 메모리 제어기 및 그래픽을 갖는 프로세서
도 9는 본 발명의 실시예들에 따른, 2개 이상의 코어를 가질 수 있고, 통합된 메모리 제어기를 가질 수 있고, 통합된 그래픽을 가질 수 있는 프로세서(900)의 블록도이다. 도 9에서의 실선 박스들은 단일의 코어(902A), 시스템 에이전트(910), 및 하나 이상의 버스 제어기 유닛들(916)의 세트를 갖는 프로세서(900)를 나타낸 것인 반면, 파선 박스들의 선택적인 부가는 다수의 코어들(902A 내지 902N), 시스템 에이전트 유닛(910) 내의 하나 이상의 통합된 메모리 제어기 유닛(들)(914)의 세트, 및 특수 목적 로직(908)을 갖는 대안의 프로세서(900)를 나타낸 것이다.
따라서, 프로세서(900)의 상이한 구현들은 다음과 같은 것들을 포함할 수 있다: 1) (하나 이상의 코어들을 포함할 수 있는) 통합된 그래픽 및/또는 과학(처리율) 로직인 특수 목적 로직(908), 그리고 하나 이상의 범용 코어들(예컨대, 범용 순차 코어들, 범용 비순차 코어들, 이 둘의 조합)인 코어들(902A 내지 902N)을 갖는 CPU; 2) 주로 그래픽 및/또는 과학(처리율)을 위한 다수의 특수 목적 코어들인 코어들(902A 내지 902N)을 갖는 코프로세서; 및 3) 많은 수의 범용 순차 코어들인 코어들(902A 내지 902N)을 갖는 코프로세서. 따라서, 프로세서(900)는 범용 프로세서, 코프로세서, 또는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(general purpose graphics processing unit), 고처리율 MIC(many integrated core) 코프로세서(30개 이상의 코어들을 포함함), 임베디드 프로세서 등과 같은 특수 목적 프로세서일 수 있다. 프로세서는 하나 이상의 칩들 상에 구현될 수 있다. 프로세서(900)는, 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은 다수의 공정 기술들 중 임의의 것을 사용하여 하나 이상의 기판들 상에 구현될 수 있고 그리고/또는 그의 일부일 수 있다.
메모리 계층구조는 코어들 내의 하나 이상의 레벨들의 캐시, 하나 이상의 공유 캐시 유닛들(906)의 세트, 및 통합된 메모리 제어기 유닛들(914)의 세트에 결합되어 있는 외부 메모리(도시 생략)를 포함한다. 공유 캐시 유닛들(906)의 세트는 L2(level 2), L3(level 3), L4(level 4), 또는 기타 레벨들의 캐시 등의 하나 이상의 중간 레벨 캐시들, LLC(last level cache), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서, 링 기반 상호접속 유닛(ring based interconnect unit)(912)은 통합된 그래픽 로직(908), 공유 캐시 유닛들(906)의 세트, 및 시스템 에이전트 유닛(910)/통합된 메모리 제어기 유닛(들)(914)을 상호접속시키는 반면, 대안의 실시예들은 이러한 유닛들을 상호접속시키는 데 임의의 수의 공지된 기법들을 사용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛들(906)과 코어들(902A 내지 902N) 사이에 일관성이 유지된다.
일부 실시예들에서, 코어들(902A 내지 902N) 중 하나 이상은 멀티스레딩을 할 수 있다. 시스템 에이전트(910)는 코어들(902A 내지 902N)을 조정하고 동작시키는 그 구성요소들을 포함한다. 시스템 에이전트 유닛(910)은, 예를 들어, PCU(power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(902A 내지 902N) 및 통합된 그래픽 로직(908)의 전력 상태를 조절하는 데 필요한 로직 및 구성요소들이거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속 디스플레이들을 구동하기 위한 것이다.
코어들(902A 내지 902N)은 아키텍처 명령어 세트의 관점에서 동종(homogenous)이거나 이종(heterogeneous)일 수 있다; 즉, 코어들(902A 내지 902N) 중 2개 이상은 동일한 명령어 세트를 실행할 수 있는 반면, 다른 것들은 그 명령어 세트의 서브셋만 또는 다른 명령어 세트를 실행할 수 있다.
예시적인 컴퓨터 아키텍처들
도 10 내지 도 13는 예시적인 컴퓨터 아키텍처들의 블록도들이다. 랩톱, 데스크톱, 핸드헬드 PC, PDA(personal digital assistant), 엔지니어링 워크스테이션, 서버, 네트워크 디바이스, 네트워크 허브, 스위치, 임베디드 프로세서, DSP(digital signal processor), 그래픽 디바이스, 비디오 게임 디바이스, 셋톱 박스, 마이크로 컨트롤러, 셀폰, 휴대용 미디어 플레이어, 핸드헬드 디바이스, 및 다양한 다른 전자 디바이스들에 대한 기술 분야에 공지된 다른 시스템 설계들 및 구성들도 역시 적합하다. 일반적으로, 본 명세서에 개시되어 있는 것과 같은 프로세서 및/또는 기타 실행 로직을 포함할 수 있는 아주 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적합하다.
이제 도 10을 참조하면, 본 발명의 일 실시예에 따른 시스템(1000)의 블록도가 도시되어 있다. 시스템(1000)은 제어기 허브(1020)에 결합되어 있는 하나 이상의 프로세서들(1010, 1015)을 포함할 수 있다. 일 실시예에서, 제어기 허브(1020)는 GMCH(graphics memory controller hub)(1090) 및 IOH(Input/Output Hub)(1050)(개별적인 칩들 상에 있을 수 있음)를 포함하고; GMCH(1090)는 메모리(1040) 및 코프로세서(1045)에 결합되어 있는 메모리 및 그래픽 제어기들을 포함하며; IOH(1050)는 I/O(input/output) 디바이스들(1060)을 GMCH(1090)에 결합시킨다. 다른 대안으로서, 메모리 및 그래픽 제어기들 중 하나 또는 둘 다는 (본 명세서에 기술된 바와 같이) 프로세서 내에 통합되어 있고, 메모리(1040) 및 코프로세서(1045)는 프로세서(1010), 및 IOH(1050)를 갖는 단일 칩 내의 제어기 허브(1020)에 직접 결합되어 있다.
부가의 프로세서들(1015)의 선택적인 특성은 도 10에서 파선들로 나타내어져 있다. 각각의 프로세서(1010, 1015)는 본 명세서에 기술된 프로세싱 코어들 중 하나 이상을 포함할 수 있고, 프로세서(900)의 어떤 버전일 수 있다.
메모리(1040)는, 예를 들어, DRAM(dynamic random access memory), PCM(phase change memory), 또는 이 둘의 조합일 수 있다. 적어도 일 실시예에서, 제어기 허브(1020)는 FSB(frontside bus)와 같은 멀티-드롭 버스(multi-drop bus), QPI(QuickPath Interconnect)와 같은 점-대-점 인터페이스, 또는 유사한 접속(1095)을 통해 프로세서(들)(1010, 1015)와 통신한다.
일 실시예에서, 코프로세서(1045)는, 예를 들어, 고처리율 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 일 실시예에서, 제어기 허브(1020)는 통합된 그래픽 가속기를 포함할 수 있다.
아키텍처, 마이크로-아키텍처, 열, 전력 소모 특성 등을 포함하는 다양한 성능 척도(metric of merit)들의 관점에서 물리적 자원들(1010, 1015) 간에 다양한 차이점들이 있을 수 있다.
일 실시예에서, 프로세서(1010)는 일반 유형의 데이터 프로세싱 동작들을 제어하는 명령어들을 실행한다. 코프로세서 명령어들은 명령어들 내에 삽입되어 있을 수 있다. 프로세서(1010)는 이들 코프로세서 명령어를 부착된(attached) 코프로세서(1045)에 의해 실행되어야만 하는 유형인 것으로 인식한다. 그에 따라, 프로세서(1010)는 이 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서 버스 또는 다른 상호접속을 통해 코프로세서(1045)로 발행한다. 코프로세서(들)(1045)는 수신된 코프로세서 명령어들을 접수하고 실행한다.
이제 도 11을 참조하면, 도 11은 본 발명의 일 실시예에 따른, 제1 보다 구체적이고 예시적인 시스템(1100)의 블록도가 도시된다. 도 11에 도시된 바와 같이, 멀티프로세서 시스템(1100)은 점대점 상호접속 시스템이고, 점대점 상호접속(1150)을 통해 결합된 제1 프로세서(1170) 및 제2 프로세서(1180)를 포함한다. 프로세서들(1170 및 1180) 각각은 프로세서(900)의 어떤 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(1170 및 1180)은, 각각, 프로세서들(1010 및 1015)인 반면, 코프로세서(1138)는 코프로세서(1045)이다. 다른 실시예에서, 프로세서들(1170 및 1180)은, 각각, 프로세서(1010) 및 코프로세서(1045)이다.
프로세서들(1170 및 1180)은, 각각, 통합된 메모리 제어기(integrated memory controller)(IMC) 유닛들(1172 및 1182)을 포함하는 것으로 도시되어 있다. 프로세서(1170)는 또한, 그의 버스 제어기 유닛들의 일부로서, P-P(point-to-point) 인터페이스들(1176 및 1178)을 포함하고; 이와 유사하게, 제2 프로세서(1180)는 P-P 인터페이스들(1186 및 1188)을 포함하고 있다. 프로세서들(1170, 1180)은 P-P(point-to-point) 인터페이스 회로들(1178, 1188)을 사용하여 P-P 인터페이스(1150)를 통해 정보를 교환할 수 있다. 도 11에 도시된 바와 같이, IMC들(1172 및 1182)은 프로세서들을 각자의 메모리들, 즉 각자의 프로세서들에 로컬로 부착되어 있는 주 메모리의 일부분들일 수 있는 메모리(1132) 및 메모리(1134)에 결합시킨다.
프로세서들(1170, 1180) 각각은 점대점 인터페이스 회로들(1176, 1194, 1186, 1198)을 사용하여 개개의 P-P 인터페이스들(1152, 1154)을 통해 칩셋(1190)과 정보를 교환할 수 있다. 칩셋(1190)은 선택적으로 고성능 인터페이스(1139)를 통해 코프로세서(1138)와 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(1138)는, 예를 들어, 고처리율 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유 캐시(도시 생략)가 어느 하나의 프로세서 내에 또는 양 프로세서들의 외부에 포함되어 있을 수 있지만, P-P 상호접속을 통해 프로세서들과 접속되어 있으며, 따라서 프로세서가 저전력 모드에 있는 경우, 어느 하나의 프로세서 또는 양 프로세서들의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(1190)은 인터페이스(1196)를 통해 제1 버스(1116)에 결합될 수 있다. 일 실시예에서, 제1 버스(1116)는 PCI(Peripheral Component Interconnect) 버스일 수 있거나, PCI Express 버스 또는 다른 3세대 I/O 상호접속 버스 등의 버스일 수 있지만, 본 발명의 범주가 그것으로 제한되지 않는다.
도 11에 도시된 바와 같이, 제1 버스(1116)를 제2 버스(1120)에 결합시키는 버스 브리지(1118)와 함께, 다양한 I/O 디바이스들(1114)이 제1 버스(1116)에 결합될 수 있다. 일 실시예에서, 코프로세서들, 고처리율 MIC 프로세서들, GPGPU들, 가속기들(예컨대, 그래픽 가속기들 또는 DSP(digital signal processing) 유닛들 등), 필드 프로그램가능 게이트 어레이들, 또는 임의의 다른 프로세서와 같은 하나 이상의 부가의 프로세서(들)(1115)이 제1 버스(1116)에 결합되어 있다. 일 실시예에서, 제2 버스(1120)는 LPC(low pin count) 버스일 수 있다. 예를 들어, 일 실시예에서, 키보드 및/또는 마우스(1122), 통신 디바이스들(1127) 및 명령어들/코드 및 데이터(1130)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 디바이스와 같은 저장 유닛(1128)을 포함하는 다양한 디바이스들이 제2 버스(1120)에 결합될 수 있다. 또한, 오디오 I/O(1124)가 제2 버스(1120)에 결합될 수 있다. 다른 아키텍처들이 가능하다는 것에 유의한다. 예를 들어, 도 11의 점-대-점 아키텍처 대신에, 시스템은 멀티-드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
이제 도 12를 참조하면, 본 발명의 일 실시예에 따른, 제2 보다 구체적이고 예시적인 시스템(1200)의 블록도가 도시되어 있다. 도 11 및 도 12에서의 유사한 요소들은 유사한 참조 번호들을 지니고 있으며, 도 12의 다른 측면들을 불명료하게 하는 것을 피하기 위해 도 11의 특정의 측면들이 도 12로부터 생략되어 있다.
도 12는 프로세서들(1170, 1180)이, 각각, 통합된 메모리 및 I/O 제어 로직("CL")(1172 및 1182)을 포함할 수 있다는 것을 나타내고 있다. 따라서, CL(1172, 1182)은 통합된 메모리 제어기 유닛들을 포함하고 I/O 제어 로직을 포함한다. 도 12는 메모리들(1132, 1134)이 CL(1172, 1182)에 결합되어 있을 뿐만 아니라 I/O 디바이스들(1214)이 또한 제어 로직(1172, 1182)에 결합되어 있는 것을 나타내고 있다. 레거시 I/O 디바이스들(1215)이 칩셋(1190)에 결합되어 있다.
이제 도 13을 참조하면, 본 발명의 일 실시예에 따른 SoC(1300)의 블록도가 도시되어 있다. 도 9에서의 유사한 요소들은 유사한 참조 번호를 지니고 있다. 또한, 파선 박스들은 보다 진보된 SoC들 상의 선택적인 특징들이다. 도 13에서, 상호접속 유닛(들)(1302)은 하나 이상의 코어들(902A 내지 902N)의 세트 및 공유 캐시 유닛(들)(906)을 포함하는 애플리케이션 프로세서(1310); 시스템 에이전트 유닛(910); 버스 제어기 유닛(들)(916); 통합된 메모리 제어기 유닛(들)(914); 통합된 그래픽 로직, 영상 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나 이상의 코프로세서들(1320)의 세트; SRAM(static random access memory) 유닛(1330); DMA(direct memory access) 유닛(1332); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(1340)에 결합되어 있다. 일 실시예에서, 코프로세서(들)(1320)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 고처리율 MIC 프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서를 포함한다.
본 명세서에 개시되어 있는 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 방식들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 저장 요소들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능 시스템들 상에서 실행되는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 11에 예시되어 있는 코드(1130)와 같은 프로그램 코드는 본 명세서에 기술된 기능들을 수행하여 출력 정보를 발생시키기 위해 입력 명령어들에 적용될 수 있다. 출력 정보가 공지된 방식으로 하나 이상의 출력 디바이스들에 적용될 수 있다. 본 출원의 목적상, 처리 시스템은, 예를 들어; DSP(digital signal processor), 마이크로컨트롤러, ASIC(application specific integrated circuit), 또는 마이크로프로세서 등과 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 처리 시스템과 통신하기 위해 고수준의 절차적 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는 또는, 원하는 경우, 어셈블리어 또는 기계어로 구현될 수 있다. 사실, 본 명세서에 기술된 메커니즘들은 범주가 임의의 특정의 프로그래밍 언어로 제한되지 않는다. 어느 경우든지, 이 언어는 컴파일되거나 인터프리트되는 언어일 수 있다.
적어도 일 실시예의 하나 이상의 양태들은 프로세서 내의 다양한 로직을 나타내는 머신 판독가능 매체 상에 저장되어 있는 대표적인 명령어들에 의해 구현될 수 있고, 이 명령어들은, 머신에 의해 판독될 때, 머신으로 하여금 본 명세서에 기술된 기법들을 수행하는 로직을 제조하게 한다. "IP 코어"라고 하는 이러한 표현은 유형의(tangible) 머신 판독가능 매체 상에 저장되고, 로직 또는 프로세서를 실제로 제조하는 제조 머신들에 로드하기 위해, 다양한 고객들 또는 제조 시설들에 공급될 수 있다.
이러한 머신 판독가능 저장 매체는 하드 디스크, 플로피 디스크, 광 디스크, CD-ROM(compact disk read-only memory), CD-RW(compact disk rewritable) 및 광자기 디스크를 포함하는 임의의 다른 유형의 디스크, DRAM(dynamic random access memory), SRAM(static random access memory), EPROM(erasable programmable read-only memory), 플래시 메모리, EEPROM(electrically erasable programmable read-only memory)과 같은 ROM(read-only memory), RAM(random access memory) 등), PCM(phase change memory)을 포함하는 반도체 디바이스, 자기 또는 광 카드, 또는 전자 명령어들을 저장하는 데 적합한 임의의 다른 유형의 매체와 같은 저장 매체를 포함하는, 머신 또는 디바이스에 의해 제조 또는 형성되는 물품들의 비일시적, 유형의(tangible) 구성들을 포함할 수 있지만, 이들로 제한되지 않는다.
그에 따라, 본 발명의 실시예들은 또한 명령어들을 포함하거나, 본 명세서에 기술된 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 특징들을 정의하는 HDL(Hardware Description Language)과 같은 설계 데이터를 포함하는 비일시적, 유형의 머신 판독가능 매체를 포함한다. 이러한 실시예들은 또한 프로그램 제품이라고 할 수 있다.
특정의 예시적인 실시예들이 설명되고 첨부 도면들에 도시되었지만, 이러한 실시예들은 전반적인 발명을 제한하는 것이 아니라 단지 예시하는 것에 불과하고, 통상의 기술자는 본 개시내용을 학습할 경우 다양한 다른 변경들을 떠올릴 수 있으므로, 본 발명은 도시되고 설명된 특정 구성들 및 배열들로 한정되지 않는다는 것을 이해해야 한다. 성장이 빠르고 추가 발전들이 쉽게 예견되지 않는 이와 같은 기술 분야에서, 개시된 실시예들은 본 개시 내용의 원리들 또는 첨부된 특허청구범위의 범주에서 벗어나지 않고 기술 발전을 가능하게 함으로써 구성 및 상세에 있어서 쉽게 변경 가능할 수 있다.

Claims (22)

  1. 장치로서,
    복수의 뱅크로 분할된(partitioned) 확장된 레지스터 세트;
    상기 뱅크들 중 현재 활성인 뱅크에 대한 포인터를 제공하는 현재 뱅크 레지스터; 및
    상기 확장된 레지스터 세트와 상기 현재 뱅크 레지스터에 결합된 실행 회로
    를 포함하고,
    상기 실행 회로는,
    제1 스레드 및 제2 스레드를 포함하는 2개의 사용자-레벨 스레드의 컨텍스트들을 교환하기 위한 명령어를 수신하고 - 상기 제1 스레드는 상기 뱅크들 중 제1 뱅크에 저장된 제1 컨텍스트를 갖고 상기 제2 스레드는 상기 뱅크들 중 제2 뱅크에 저장된 제2 컨텍스트를 가짐 -,
    상기 명령어에 응답하여 상기 제1 뱅크로부터 상기 제2 뱅크로 상기 포인터를 변경하고,
    상기 제2 뱅크에 저장된 상기 제2 컨텍스트를 이용하여 상기 제2 스레드를 실행하는 장치.
  2. 제1항에 있어서, 상기 컨텍스트들의 사본이 상기 확장된 레지스터 세트의 상기 복수의 뱅크에 대응하는 복수의 메모리 영역에 저장되는 장치.
  3. 제2항에 있어서, 상기 메모리 영역들에 대한 액세스를 추적하고, 상기 액세스가 검출되는 경우 상기 메모리 영역들의 구역(area)과 상기 확장된 레지스터 세트의 대응하는 뱅크 사이에서 상기 컨텍스트들을 동기화시키기 위한 이벤트를 트리거하는 스누프 회로(snoop circuitry)를 더 포함하는 장치.
  4. 제1항에 있어서, 복수의 파티션으로 나누어진 복수의 벡터 레지스터를 더 포함하고, 상기 컨텍스트들의 사본은 상기 확장된 레지스터 세트의 상기 복수의 뱅크에 대응하는 상기 복수의 파티션에 저장되는 장치.
  5. 제4항에 있어서, 상기 벡터 레지스터들의 각각은 그와 연관된, 주어진 컨텍스트의 가장 최근의 사본이 상기 벡터 레지스터들에 저장되어 있는지 또는 상기 확장된 레지스터 세트에 저장되어 있는지를 나타내는 하나 이상의 상태 비트를 갖는 장치.
  6. 제1항에 있어서, 상기 실행 회로에 결합되어, 주어진 사용자-레벨 스레드에 의해 참조되는 레지스터를 상기 확장된 레지스터 세트의 대응하는 뱅크에 매핑하는 디코더 회로를 더 포함하는 장치.
  7. 제1항에 있어서, 상기 실행 회로는 상기 명령어에 응답하여 무조건적으로 상기 제2 컨텍스트로 전환하는 장치.
  8. 제1항에 있어서, 상기 실행 회로에 결합되어, 상기 제2 컨텍스트로 전환하기 위한 조건이 충족되는지를 판정하는 프런트 엔드 회로를 더 포함하는 장치.
  9. 제1항에 있어서, 상기 명령어는 복수의 명령어를 포함하는 명령어 블록의 경계를 마킹하는 한 쌍의 명령어 중 하나이고, 상기 명령어 블록 내의 각각의 명령어는 컨텍스트 전환을 위한 후보인 장치.
  10. 제1항에 있어서, 상기 실행 회로에 결합된 마스크 레지스터를 더 포함하고, 상기 마스크 레지스터는 복수의 마스크 비트를 포함하고, 각각의 마스크 비트는 상기 뱅크들 중 하나와 연관되며 상기 뱅크들 중 상기 하나가 컨텍스트 전환에 대해 비활성화되었는지(deactivated)를 나타내는 장치.
  11. 방법으로서,
    확장된 레지스터 세트의 뱅크들 중 제1 뱅크에 저장된 제1 컨텍스트를 이용하여 제1 스레드를 프로세서에 의해 실행하는 단계 - 상기 제1 스레드는 사용자-레벨 스레드임 -;
    상기 제1 스레드와 제2 스레드의 컨텍스트들을 교환하기 위한 명령어를 상기 프로세서에 의해 수신하는 단계 - 상기 제2 스레드는 상기 확장된 레지스터 세트의 상기 뱅크들 중 제2 뱅크에 저장된 제2 컨텍스트를 갖는 다른 사용자-레벨 스레드임 -;
    상기 명령어에 응답하여 현재 활성인 뱅크로서 상기 제1 뱅크를 가리키는 레지스터 포인터를 상기 제2 뱅크로 변경하는 단계; 및
    상기 제2 뱅크에 저장된 상기 제2 컨텍스트를 이용하여 상기 제2 스레드를 상기 프로세서에 의해 실행하는 단계
    를 포함하는 방법.
  12. 제11항에 있어서, 상기 컨텍스트들의 사본이 상기 확장된 레지스터 세트의 상기 복수의 뱅크에 대응하는 복수의 메모리 영역에 저장되는 방법.
  13. 제12항에 있어서,
    상기 메모리 영역들에 대한 액세스를 추적하는 단계; 및
    상기 액세스가 검출되는 경우 상기 메모리 영역들의 구역과 상기 확장된 레지스터 세트의 대응하는 뱅크 사이에서 상기 컨텍스트들을 동기화시키기 위한 이벤트를 트리거하는 단계를 더 포함하는 방법.
  14. 제11항에 있어서, 상기 컨텍스트들의 사본이 상기 확장된 레지스터 세트의 상기 복수의 뱅크에 대응하는 벡터 레지스터들의 복수의 파티션에 저장되는 방법.
  15. 제14항에 있어서, 상기 벡터 레지스터들의 각각은 그와 연관된, 주어진 컨텍스트의 가장 최근의 사본이 상기 벡터 레지스터들에 저장되어 있는지 또는 상기 확장된 레지스터 세트에 저장되어 있는지를 나타내는 하나 이상의 상태 비트를 갖는 방법.
  16. 제11항에 있어서, 상기 명령어를 실행하는 단계는 무조건적으로 상기 제2 컨텍스트로의 전환을 야기하는 방법.
  17. 제11항에 있어서, 상기 명령어를 실행하는 단계는 상기 제2 컨텍스트로 전환하기 위한 조건이 충족되는지를 판정하는 것을 야기하는 방법.
  18. 제11항에 있어서, 상기 명령어는 복수의 명령어를 포함하는 명령어 블록의 경계를 마킹하는 한 쌍의 명령어 중 하나이고, 상기 명령어 블록 내의 각각의 명령어는 컨텍스트 전환을 위한 후보인 방법.
  19. 제11항에 있어서, 운영 체제의 개입 없이 상기 명령어를 실행하는 단계를 더 포함하는 방법.
  20. 시스템으로서,
    메모리; 및
    상기 메모리에 결합된 프로세서
    를 포함하고,
    상기 프로세서는
    복수의 뱅크들로 분할된 확장된 레지스터 세트;
    상기 뱅크들 중 현재 활성인 뱅크에 대한 포인터를 제공하는 현재 뱅크 레지스터; 및
    상기 확장된 레지스터 세트와 상기 현재 뱅크 레지스터에 결합된 실행 회로 - 상기 실행 회로는, 제1 스레드 및 제2 스레드를 포함하는 2개의 사용자-레벨 스레드의 컨텍스트들을 교환하기 위한 명령어를 수신하고, 상기 명령어에 응답하여 상기 제1 뱅크로부터 상기 제2 뱅크로 상기 포인터를 변경하고, 상기 제2 뱅크에 저장된 제2 컨텍스트를 이용하여 상기 제2 스레드를 실행하며, 상기 제1 스레드는 상기 뱅크들 중 제1 뱅크에 저장된 제1 컨텍스트를 갖고 상기 제2 스레드는 상기 뱅크들 중 제2 뱅크에 저장된 제2 컨텍스트를 가짐 -
    를 포함하는 시스템.
  21. 제20항에 있어서, 상기 컨텍스트들의 사본이 상기 확장된 레지스터 세트의 상기 복수의 뱅크에 대응하는 상기 메모리의 복수의 메모리 영역에 저장되는 시스템.
  22. 제20항에 있어서, 복수의 파티션으로 나누어진 복수의 벡터 레지스터를 더 포함하고, 상기 컨텍스트들의 사본이 상기 확장된 레지스터 세트의 상기 복수의 뱅크에 대응하는 상기 복수의 파티션에 저장되는 시스템.
KR1020157003710A 2012-09-28 2013-06-24 사용자-레벨 스레딩을 위한 즉각적 컨텍스트 전환을 가능하게 하는 새로운 명령어 및 고효율적인 마이크로-아키텍처 KR101771825B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/630,124 2012-09-28
US13/630,124 US20140095847A1 (en) 2012-09-28 2012-09-28 Instruction and highly efficient micro-architecture to enable instant context switch for user-level threading
PCT/US2013/047401 WO2014051771A1 (en) 2012-09-28 2013-06-24 A new instruction and highly efficient micro-architecture to enable instant context switch for user-level threading

Publications (2)

Publication Number Publication Date
KR20150030274A true KR20150030274A (ko) 2015-03-19
KR101771825B1 KR101771825B1 (ko) 2017-08-25

Family

ID=50386392

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157003710A KR101771825B1 (ko) 2012-09-28 2013-06-24 사용자-레벨 스레딩을 위한 즉각적 컨텍스트 전환을 가능하게 하는 새로운 명령어 및 고효율적인 마이크로-아키텍처

Country Status (7)

Country Link
US (1) US20140095847A1 (ko)
JP (1) JP6143872B2 (ko)
KR (1) KR101771825B1 (ko)
CN (1) CN104603795B (ko)
DE (1) DE112013003731T5 (ko)
GB (1) GB2519254A (ko)
WO (1) WO2014051771A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170015232A (ko) * 2015-07-30 2017-02-08 에이알엠 리미티드 그래픽 처리 시스템

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9336180B2 (en) * 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US9292470B2 (en) * 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
CN104461758B (zh) * 2014-11-10 2017-08-25 中国航天科技集团公司第九研究院第七七一研究所 一种容忍cache缺失快速清空流水线的异常处理方法及其处理结构
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US9952867B2 (en) * 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US9946566B2 (en) * 2015-09-28 2018-04-17 Intel Corporation Method and apparatus for light-weight virtualization contexts
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
US10761983B2 (en) * 2017-11-14 2020-09-01 International Business Machines Corporation Memory based configuration state registers
US10558366B2 (en) 2017-11-14 2020-02-11 International Business Machines Corporation Automatic pinning of units of memory
US10642757B2 (en) 2017-11-14 2020-05-05 International Business Machines Corporation Single call to perform pin and unpin operations
US10761751B2 (en) 2017-11-14 2020-09-01 International Business Machines Corporation Configuration state registers grouped based on functional affinity
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
US10901738B2 (en) 2017-11-14 2021-01-26 International Business Machines Corporation Bulk store and load operations of configuration state registers
US10698686B2 (en) * 2017-11-14 2020-06-30 International Business Machines Corporation Configurable architectural placement control
US10664181B2 (en) 2017-11-14 2020-05-26 International Business Machines Corporation Protecting in-memory configuration state registers
US10592164B2 (en) 2017-11-14 2020-03-17 International Business Machines Corporation Portions of configuration state registers in-memory
JP7423755B2 (ja) 2019-08-14 2024-01-29 グーグル エルエルシー 特定用途向け集積回路のデュアルモード動作
CN111857831B (zh) * 2020-06-11 2021-07-20 成都海光微电子技术有限公司 一种存储体冲突优化方法、并行处理器及电子设备
CN112463327B (zh) * 2020-11-25 2023-01-31 海光信息技术股份有限公司 逻辑线程快速切换的方法、装置、cpu芯片及服务器
US11545209B2 (en) * 2021-05-28 2023-01-03 Micron Technology, Inc. Power savings mode toggling to prevent bias temperature instability

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3644042B2 (ja) * 1993-11-15 2005-04-27 ソニー株式会社 マルチタスク処理装置
JPH09212371A (ja) * 1996-02-07 1997-08-15 Nec Corp レジスタ退避及び復元システム
US5920710A (en) * 1996-11-18 1999-07-06 Advanced Micro Devices, Inc. Apparatus and method for modifying status bits in a reorder buffer with a large speculative state
US6401155B1 (en) * 1998-12-22 2002-06-04 Philips Electronics North America Corporation Interrupt/software-controlled thread processing
US20020103847A1 (en) * 2001-02-01 2002-08-01 Hanan Potash Efficient mechanism for inter-thread communication within a multi-threaded computer system
US7853778B2 (en) * 2001-12-20 2010-12-14 Intel Corporation Load/move and duplicate instructions for a processor
JP2004220070A (ja) * 2003-01-09 2004-08-05 Japan Science & Technology Agency コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
US9189230B2 (en) * 2004-03-31 2015-11-17 Intel Corporation Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution
JP2006092042A (ja) * 2004-09-21 2006-04-06 Sanyo Electric Co Ltd 情報処理装置及びコンテキスト切り替え方法
US7827551B2 (en) * 2005-09-21 2010-11-02 Intel Corporation Real-time threading service for partitioned multiprocessor systems
US7461275B2 (en) * 2005-09-30 2008-12-02 Intel Corporation Dynamic core swapping
US8689215B2 (en) * 2006-12-19 2014-04-01 Intel Corporation Structured exception handling for application-managed thread units
US7933759B2 (en) * 2008-03-28 2011-04-26 Microsoft Corporation Predicate checking for distributed systems
US20100312991A1 (en) * 2008-05-08 2010-12-09 Mips Technologies, Inc. Microprocessor with Compact Instruction Set Architecture
US20110055495A1 (en) * 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
US8490113B2 (en) * 2011-06-24 2013-07-16 International Business Machines Corporation Messaging in a parallel computer using remote direct memory access (‘RDMA’)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170015232A (ko) * 2015-07-30 2017-02-08 에이알엠 리미티드 그래픽 처리 시스템

Also Published As

Publication number Publication date
WO2014051771A1 (en) 2014-04-03
CN104603795B (zh) 2018-11-06
JP6143872B2 (ja) 2017-06-07
DE112013003731T5 (de) 2015-05-21
US20140095847A1 (en) 2014-04-03
GB2519254A (en) 2015-04-15
JP2015534188A (ja) 2015-11-26
GB201500863D0 (en) 2015-03-04
CN104603795A (zh) 2015-05-06
KR101771825B1 (ko) 2017-08-25

Similar Documents

Publication Publication Date Title
KR101771825B1 (ko) 사용자-레벨 스레딩을 위한 즉각적 컨텍스트 전환을 가능하게 하는 새로운 명령어 및 고효율적인 마이크로-아키텍처
US10503505B2 (en) Read and write masks update instruction for vectorization of recursive computations over independent data
US11243768B2 (en) Mechanism for saving and retrieving micro-architecture context
KR101783576B1 (ko) 다수의 코어들, 공유 코어 확장 로직, 및 공유 코어 확장 이용 명령어들을 갖는 프로세서
CN108292215B (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
KR101723121B1 (ko) 판독 및 기입 마스크들에 의해 제어되는 벡터 이동 명령어
US20160179542A1 (en) Instruction and logic to perform a fused single cycle increment-compare-jump
US10127039B2 (en) Extension of CPU context-state management for micro-architecture state
JP5985526B2 (ja) システムコールのためのロバスト且つ高性能な命令
KR20220151134A (ko) 이종 처리 자원들에 대한 작업을 적응적으로 스케줄링하기 위한 장치 및 방법
CN110554887A (zh) 间接存储器提取器
US10310978B2 (en) Apparatus and method for multi-level cache request tracking
US9880839B2 (en) Instruction that performs a scatter write
US20160170767A1 (en) Temporary transfer of a multithreaded ip core to single or reduced thread configuration during thread offload to co-processor
US10824496B2 (en) Apparatus and method for vectored machine check bank reporting
US20230418757A1 (en) Selective provisioning of supplementary micro-operation cache resources
CN115858022A (zh) 集群化解码管线的可缩放切换点控制电路系统

Legal Events

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