KR20160141001A - 다수의 코어들, 공유 코어 확장 로직, 및 공유 코어 확장 이용 명령어들을 갖는 프로세서 - Google Patents

다수의 코어들, 공유 코어 확장 로직, 및 공유 코어 확장 이용 명령어들을 갖는 프로세서 Download PDF

Info

Publication number
KR20160141001A
KR20160141001A KR1020167033623A KR20167033623A KR20160141001A KR 20160141001 A KR20160141001 A KR 20160141001A KR 1020167033623 A KR1020167033623 A KR 1020167033623A KR 20167033623 A KR20167033623 A KR 20167033623A KR 20160141001 A KR20160141001 A KR 20160141001A
Authority
KR
South Korea
Prior art keywords
logic
shared
core
instruction
shared core
Prior art date
Application number
KR1020167033623A
Other languages
English (en)
Other versions
KR101783576B1 (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 KR20160141001A publication Critical patent/KR20160141001A/ko
Application granted granted Critical
Publication of KR101783576B1 publication Critical patent/KR101783576B1/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
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Hardware Redundancy (AREA)
  • Multi Processors (AREA)

Abstract

일 양태의 장치는 복수의 코어들 및 복수의 코어들 각각과 결합된 공유 코어 확장 로직을 포함한다. 공유 코어 확장 로직은 복수의 코어들 각각에 의해 공유되는 공유 데이터 처리 로직을 갖는다. 명령어 실행 로직은, 코어들 각각에 대해, 공유 코어 확장 호출 명령어에 응답하여, 공유 코어 확장 로직을 호출하기 위한 것이다. 이 호출은 대응하는 코어를 대신하여 공유 데이터 처리 로직에 의해 데이터 처리를 수행하기 위한 것이다. 다른 장치들, 방법들, 및 시스템들이 또한 개시되어 있다.

Description

다수의 코어들, 공유 코어 확장 로직, 및 공유 코어 확장 이용 명령어들을 갖는 프로세서{PROCESSOR HAVING MULTIPLE CORES, SHARED CORE EXTENSION LOGIC, AND SHARED CORE EXTENSION UTILIZATION INSTRUCTIONS}
실시예들은 프로세서에 관한 것이다. 상세하게는, 실시예들은 다수의 코어들을 갖는 프로세서에 관한 것이다.
도 1은 종래 기술의 프로세서(100)의 블록도이다. 프로세서는 다수의 코어들(101)을 갖는다. 상세하게는, 예시된 프로세서는 코어 0(101-0), 코어 1(101-1) 내지 코어 M(101-M)을 갖는다. 예로서, 2개, 4개, 7개, 10개, 16개, 또는 임의의 다른 적절한 수의 코어들이 있을 수 있다. 코어들 각각은 대응하는 SIMD(Single Instruction Multiple Data) 실행 로직(102)을 포함한다. 상세하게는, 코어 0은 SIMD 실행 로직(102-0)을 포함하고, 코어 1은 SIMD 실행 로직(102-1)을 포함하며 코어 M은 SIMD 실행 로직(102-M)을 포함한다. 즉, SIMD 실행 로직이 코어마다 복제되어 있다. 각각의 SIMD 실행 로직은 SIMD, 벡터, 또는 패킹된 데이터 피연산자(packed data operand)들을 처리하는 동작을 할 수 있다. 피연산자들 각각은 피연산자들에 함께 패킹되어 있고 SIMD 실행 로직에 의해 병렬로 처리되는 8 비트, 16 비트, 32 비트 또는 64 비트 데이터 요소들과 같은 다수의 보다 작은 데이터 요소들을 가질 수 있다.
일부 프로세서들에서, SIMD 실행 로직 각각은 비교적 많은 양의 로직을 나타낼 수 있다. 예를 들어, 이것은 SIMD 실행 로직 각각이 광폭 SIMD 피연산자(wide SIMD operand)들을 처리해야 하는 경우일 수 있다. 일부 프로세서들은, 예를 들어, 128 비트 피연산자, 256 비트 피연산자, 512 비트 피연산자, 1024 비트 피연산자 등과 같은 비교적 넓은 폭을 갖는 벡터 또는 패킹된 데이터 피연산자들을 처리할 수 있다. 통상적으로, 이러한 광폭 피연산자들을 처리하는 데 필요한 SIMD 실행 로직은 비교적 크고, 비교적 많은 양의 다이 면적을 소비하며, 프로세서를 제조하는 비용을 증가시키고, 사용 동안 비교적 많은 양의 전력을 소비하는 경향이 있다. 비교적 큰 SIMD 실행 로직을 코어마다 복제하는 것은 이러한 문제점들을 악화시키는 경향이 있다. 더욱이, 많은 응용들 또는 작업 부하 시나리오들에서, 코어마다 반복된 SIMD 실행 로직이 적어도 일부의 시간에서 충분히 이용되지 못하는 경향이 있다. 코어들의 수가 장래에 계속 증가하면, 이러한 문제점들이 훨씬 더 중대하게 될 수 있다.
게다가, 도 1의 종래 기술의 프로세서에서, 코어들 각각이 또한 종래의 흐름 제어 로직을 갖는다. 상세하게는, 코어 0은 흐름 제어 로직(103-0)을 포함하고, 코어 1은 흐름 제어 로직(103-1)을 포함하며 코어 M은 흐름 제어 로직(103-M)을 포함한다. 통상적으로, 흐름 제어 로직은, 예를 들어, 예측 실행(speculative execution)을 도입하는 광범위한 사용 모델들을 커버하도록 설계되거나 최적화될 수 있다. 그렇지만, 이것은 일반적으로 SIMD 및 다양한 다른 고처리율 계산들에 대해 비교적 작은 이점을 갖는 경향이 있지만, 비교적 높은 전력 소모를 수반하는 경향이 있다.
본 발명의 실시예를 예시하는 데 사용되는 이하의 설명 및 첨부 도면을 참조하면 본 발명이 가장 잘 이해될 수 있다.
도 1은 종래 기술의 프로세서의 블록도.
도 2는 프로세서의 일 실시예 및 메모리의 일 실시예를 갖는 시스템의 일 실시예의 블록도.
도 3은 공유 코어 확장 인터페이스 로직(shared core extension interface logic)의 일 실시예를 포함하는 코어 0을 갖는 그리고 코어 인터페이스 로직의 일 실시예를 포함하는 공유 코어 확장 로직의 일 실시예를 갖는 프로세서의 일 실시예의 블록도.
도 4는 공유 코어 확장 호출 명령어(shared core extension call instruction)의 일 실시예를 처리하는 방법의 일 실시예의 블록 흐름도.
도 5는 공유 코어 확장 명령 레지스터(shared core extension command register)의 일 예시적인 실시예의 블록도.
도 6은 공유 코어 확장 판독 명령어(shared core extension read instruction)의 일 실시예를 처리하는 방법의 일 실시예의 블록 흐름도.
도 7은 공유 코어 확장 강제 종료 명령어(shared core extension abort instruction)의 일 실시예를 처리하는 방법의 일 실시예의 블록 흐름도.
도 8a는 본 발명의 실시예들에 따른, 예시적인 순차 파이프라인(in-order pipeline) 및 예시적인 레지스터 재명명(register renaming), 비순차 발행/실행 파이프라인 모두를 나타낸 블록도.
도 8b는 본 발명의 실시예들에 따른, 프로세서에 포함될 순차 아키텍처 코어(in-order architecture core)의 예시적인 실시예 및 예시적인 레지스터 재명명, 비순차 발행/실행 아키텍처 코어 둘 다를 나타낸 블록도.
도 9a는 본 발명의 실시예들에 따른, 단일 프로세서 코어를, 온-다이 상호접속 네트워크(on-die interconnect network)에의 그의 접속 및 레벨 2(L2) 캐시의 그의 로컬 서브셋(904)과 함께, 나타낸 블록도.
도 9b는 본 발명의 실시예들에 따른, 도 9a에서의 프로세서 코어의 일부의 확대도.
도 10은 본 발명의 실시예들에 따른, 2개 이상의 코어를 가질 수 있고, 통합된 메모리 제어기를 가질 수 있고, 통합된 그래픽을 가질 수 있는 프로세서의 블록도.
도 11은 본 발명의 일 실시예에 따른 시스템의 블록도.
도 12는 본 발명의 일 실시예에 따른, 제1의 보다 구체적이고 예시적인 시스템의 블록도.
도 13은 본 발명의 일 실시예에 따른, 제2의 보다 구체적이고 예시적인 시스템의 블록도.
도 14는 본 발명의 일 실시예에 따른 SoC의 블록도.
도 15는 본 발명의 실시예들에 따른, 소스 명령어 세트에서의 바이너리 명령어들을 목표 명령어 세트에서의 바이너리 명령어들로 변환하기 위해 소프트웨어 명령어 변환기를 사용하는 것을 대비하는 블록도.
다수의 코어들 및 다수의 코어들에 의해 공유되는 공유 코어 확장 로직(예컨대, 코어들 각각에 대한 데이터 처리를 수행하도록 동작가능함)을 갖는 프로세서들의 실시예들이 본 명세서에 개시되어 있다. 공유 코어 확장 이용 명령어(shared core extension utilization instruction)들, 공유 코어 확장 이용 명령어들을 실행하는 프로세서들, 공유 코어 확장 이용 명령어들을 처리하거나 실행할 때 프로세서들에 의해 수행되는 방법들, 및 공유 코어 확장 이용 명령어들을 처리하거나 실행하는 하나 이상의 프로세서들을 포함하는 시스템들이 또한 본 명세서에 개시되어 있다.
이하의 설명에서, 특정의 마이크로 아키텍처 상세들, 특정의 명령 레지스터 포맷들, 특정의 공유 코어 확장 이용 명령어 기능들, 특정의 공유 코어 확장 이용 명령어들의 그룹들, 특정의 시스템 구성요소들의 유형들 및 상호관계들, 그리고 특정의 로직 분할/통합 상세들과 같은 수많은 구체적인 상세들이 기재되어 있다. 그렇지만, 본 발명의 실시예들이 이 구체적인 상세들 없이 실시될 수 있다는 것을 잘 알 것이다. 다른 경우들에서, 이 설명의 이해를 모호하게 하지 않기 위해 공지의 회로들, 구조들 및 기법들에 대해서는 상세히 설명하지 않고 있다.
도 2는 프로세서(210)의 실시예 및 메모리(218)의 실시예를 갖는 시스템(209)의 실시예의 블록도이다. 프로세서 및 메모리는, 하나 이상의 버스들 또는 다른 상호접속들(219)을 통해, 서로 결합되어 있거나 그렇지 않은 경우 통신하고 있다. 다양한 실시예들에서, 시스템(209)은 멀티 코어 프로세서 및 메모리를 갖는 데스크톱 컴퓨터 시스템, 랩톱 컴퓨터 시스템, 서버 컴퓨터 시스템, 네트워크 요소, 셀룰러폰, 또는 다른 유형의 전자 디바이스를 나타낼 수 있다.
프로세서(210)는 다수의 코어들(211)을 갖는다. 예시된 프로세서는 코어 0(211-0) 내지 코어 M(211-M)을 갖는다. 예로서, 2개, 4개, 7개, 10개, 16개, 32개, 64개, 128개, 또는 그 이상의 코어들, 또는 특정의 구현에 대해 요망되는 임의의 다른 타당하게 적절한 수의 코어들이 있을 수 있다. 일부 실시예들에서, 코어들 각각은 다른 코어들과 실질적으로 독립적으로 동작할 수 있을 것이다. 코어들 각각은 적어도 하나의 스레드를 처리할 수 있다. 이 예시에 도시된 바와 같이, 코어 0은 스레드 0(212-0)을 가지며, 선택적으로 스레드 P(212-P)까지 포함할 수 있다. 이와 유사하게, 코어 M은 스레드 0(212-0)을 가지며, 선택적으로 스레드 P(212-P)까지 포함할 수 있다. 스레드들의 수(P)는 임의의 타당하게 적절한 수의 스레드들일 수 있다. 본 발명의 범주는 임의의 공지된 수의 코어들 또는 그 코어들이 처리할 수 있는 임의의 공지된 수의 스레드들로 제한되지 않는다.
프로세서는 다양한 CISC(complex instruction set computing) 프로세서들, 다양한 RISC(reduced instruction set computing) 프로세서들, 다양한 VLIW(very long instruction word) 프로세서들, 이들의 다양한 혼성체(hybrid)들, 또는 다른 유형의 프로세서들 전체 중 임의의 것일 수 있다. 일부 실시예들에서, 코어들은 데스크톱, 랩톱, 서버, 및 기타 컴퓨터 시스템들에서 사용되는 유형의 범용 프로세서의 범용 코어들일 수 있다. 일부 실시예들에서, 코어들은 특수 목적 코어들일 수 있다. 적당한 특수 목적 코어들의 예들은, 단지 몇몇 예를 들자면, 그래픽 프로세서 코어들, DSP(digital signal processor) 코어들, 및 네트워크 프로세서 코어들을 포함하지만, 이들로 제한되지 않는다. 일부 실시예들에서, 프로세서는 다수의 범용 또는 특수 목적 코어들 및 코어들과 함께 칩 상에 통합되어 있는 그래픽 유닛, 미디어 블록, 시스템 메모리 중 하나 이상을 갖는 SoC(System-on-Chip)일 수 있다.
프로세서는 또한 공유 코어 확장 로직(214)의 일 실시예를 포함한다. 공유 코어 확장 로직은 코어들(211) 각각에 의해 공유된다(예컨대, 코어들 각각에 대한 데이터 처리를 수행하도록 동작가능함). 공유 코어 확장 로직은 코어들 각각에 대한 데이터 처리를 수행하도록 동작가능한 공유 데이터 처리 로직(216)을 포함한다. 공유 코어 확장 로직 및 코어들은 프로세서의 하나 이상의 버스들 또는 다른 상호접속들(217)에 의해 서로 결합되어 있다. 코어들 및 공유 코어 확장 로직은 코어들 각각 및 공유 코어 확장 로직 상의 하나 이상의 물리적 스레드(physical thread)들이 (예컨대, 코어들의 스레드들이 데이터 처리를 수행하기 위해 , 데이터 처리의 상태를 검사하기 위해, 데이터 처리를 강제 종료(abort)시키기 위해, 컨텍스트 전환(context switch) 시에 가상 메모리 속성들을 동기화시키기 위해, 데이터 처리 동안 일어나는 페이지 폴트(page fault)들을 라우팅하는 등을 위해 공유 코어 확장 로직을 호출하도록) 서로 인터페이스하거나 상호작용할 수 있게 하는 대응하는 인터페이스 로직들(213, 215)을 포함한다. 각각의 물리적 스레드를 대신하여 공유 코어 확장 로직에 의해 실행되는 계산 작업들이 그 특정의 물리적 스레드의 논리적 프로세스 하에서 수행될 수 있다. 이하에서 추가로 기술되는 바와 같이, 인터페이스에 대해 사용되는 컨텍스트가 물리적 스레드별로 제공될 수 있다.
상세하게는, 코어 0은 코어 0 상의 스레드 0에 특정적인 적어도 일부 로직 및 코어 0 상의 스레드 P에 관련된 적어도 일부 로직을 포함하는 공유 코어 확장 인터페이스 로직(213-0)의 실시예를 포함한다. 마찬가지로, 코어 M은 코어 M 상의 스레드 0에 특정적인 적어도 일부 로직 및 코어 M 상의 스레드 P에 특정적인 적어도 일부 로직을 포함하는 공유 코어 확장 인터페이스 로직(213-M)의 실시예를 포함한다. 다른 코어들(있는 경우) 각각이 이와 유사하게 이러한 공유 코어 확장 인터페이스 로직을 포함할 수 있다. 공유 코어 확장 로직(214)은 대응하는 코어 인터페이스 로직(215)의 실시예를 포함한다. 각각의 코어(211)는, 그의 대응하는 공유 코어 확장 인터페이스 로직(213)을 통해, 공유 코어 확장 로직(214)의 코어 인터페이스 로직(215)과 인터페이스하거나 상호작용할 수 있다. 일부 실시예들에서, 공유 코어 확장 인터페이스 로직(213) 및 코어 인터페이스 로직(215)은, 코어들이 공유 코어 확장 로직을 공유(예컨대, 공유 데이터 처리 로직(216)에 의한 데이터 처리를 공유)할 수 있게 하기 위해, 아키텍처 인터페이스(예컨대, 새로운 아키텍처 매크로명령어들 및 새로운 아키텍처 레지스터들)는 물론 마이크로아키텍처 인터페이스 또는 하드웨어 메커니즘(예컨대, 데이터 처리 스케줄링 로직, 메모리 관리 유닛(MMU) 동기화 로직, 페이지 폴트 라우팅 로직 등)을 제공할 수 있다. 공유 코어 확장 인터페이스 로직(213) 및 코어 인터페이스 로직(215)의 상세한 예시적인 실시예들이 이하에서 더 논의될 것이다.
공유 데이터 처리 로직(216)은 각종의 상이한 실시예들에서 상이한 유형의 데이터 처리 로직을 나타낼 수 있다. 앞서 배경 기술 섹션에서 전술한 바와 같이, 특정의 유형의 데이터 처리 로직(예컨대, 특정의 광폭 SIMD 실행 유닛들)이 종래에는 코어마다 복제되어 있었다. 전술한 바와 같이, 종종 이 복제된 로직은 비교적 큰 경향이 있다. 더욱이, 종종 이 복제된 로직은 많은 통상적인 작업 부하 시나리오들에 대해 적어도 일부의 시간에서 충분히 이용되지 못한다. 이러한 로직의 복제는 일반적으로 비교적 많은 양의 다이 면적을 소비하고, 제조 비용을 증가시키며, 비교적 많은 양의 전력을 소비하는 경향이 있다. 일부 실시예들에서, 이러한 비교적 크고 그리고/또는 통상적으로 충분히 이용되지 못하는, 종래에 코어마다 복제되어 있는 데이터 처리 로직이, 데이터 처리 로직의 단일의 공유 복제본으로서, 다수의 코어들로부터 공유 코어 확장 로직으로 추출될 수 있다. 더욱이, 공유 코어 확장 로직(214)은, 도 1의 코어들의 종래의 흐름 제어 로직에 대한 경우와 같이, 예를 들어, 추측 실행을 도입하는 광범위한 사용 모델들을 커버하기 위해 설계되거나 최적화되는 것과 달리, 고처리율을 위해 요망되거나 최적화되는 흐름 제어 로직을 이용할 수 있다. 이것은 일반적으로 처리율 지향 알고리즘들에 대한 보다 높은 레벨의 전력 성능 효율을 제공하는 경향이 있다.
다양한 실시예들에서, 공유 데이터 처리 로직은 처리율 지향 하드웨어 계산 기능 로직, 고처리율 계산 엔진, 행렬 곱셈 로직, 행렬 전치(matrix transpose) 로직, 유한 필터 로직, 절대차 합 로직, 히스토그램 계산 로직, 개더-스캐터(gather-scatter) 명령어 구현 로직, 초월 벡터(transcendental vector) 실행 로직 등을 나타낼 수 있다. 일부 실시예들에서, 공유 데이터 처리 로직은, 예를 들어, SIMD 실행 유닛들(예컨대, 잠재적으로 비교적 광폭인 SIMD 실행 유닛들)과 같은 실행 유닛들을 포함할 수 있다. 일부 실시예들에서, 공유 코어 확장 로직은, 예를 들어, 메모리(218)에 있는 공유 코어 확장 데이터 구조체들(208)(예컨대, 행렬들, 테이블들 등)과 상호작용할 수 있다.
유리하게도, 로직을 복제하는 것과 비교하여, 공유 코어 확장 로직은 로직을 구현하는 데 필요한 전체 다이 면적, 로직을 제조하는 비용, 및/또는 로직에 의해 소비되는 전력 중 하나 이상을 감소시키는 데 도움을 줄 수 있다. 즉, 공유 코어 확장 로직은, 다수의 코어들이 공통의 데이터 처리 기능 평가 하드웨어 자원들을 공유하여 그러한 자원들을 코어마다 복제하는 일반적으로 높은 통합 비용을 유발하지 않게 할 수 있다. 명확함을 위해, 비교적 큰 로직이 코어마다 복제되는 대신에 코어들에 의해 공유될 때, 크기, 비용 및 전력 감소라는 가장 큰 이점들이 종종 달성되지만, 특정의 공유 데이터 처리 로직이 클 필요는 없다는 요구된다. 더욱이, 공유 로직이 그러하지 않을 때, 코어마다 반복되고 비교적 충분히 이용되지 않는 경우 가장 큰 이점들이 종종 달성될 것인데, 그 이유는 공유가 로직의 이용을 증가시키는 경향이 있을 수 있고 그로써 충분히 이용되지 않거나 불필요한 로직이 통합되어 다이 면적 및 제조 비용을 감소시킬 수 있기 때문이다. 추가의 장점으로서, 공유 코어 확장 로직은 또한 잠재적으로 코어들이 하나의 유형의 처리에 대해(예컨대, 스칼라 작업 부하 성능, 전력 및 면적에 대해) 커스터마이즈되거나 최적화될 수 있게 하면서 공유 코어 확장 로직이 다른 유형의 처리에 대해(예컨대, 처리율 지향 작업 부하 성능, 전력 및 면적에 대해) 커스터마이즈되거나 최적화될 수 있게 하는 데 사용될 수 있다.
도 3은 공유 코어 확장 인터페이스 로직(313)의 예시적인 실시예를 포함하는 코어 0(311-0)을 갖는 그리고 코어 인터페이스 로직(315)의 예시적인 실시예를 포함하는 공유 코어 확장 로직(314)의 실시예를 갖는 프로세서(310)의 실시예의 블록도이다. 전술한 바와 같이, 프로세서는 또한 코어 M(도시 생략)까지의 하나 이상의 다른 코어들을 포함할 수 있다. 공유 코어 확장 인터페이스 로직(313)에 부가하여, 코어 0은 또한 코어들에서 종래에 발견되는 유형의 종래의 로직(334)(예컨대, 하나 이상의 실행 유닛들, 아키텍처 레지스터들, 하나 이상의 캐시들, 마이크로아키텍처 로직 등)을 갖는다. 본 발명의 범주가 임의의 공지된 이러한 종래의 로직으로 제한되지 않는다. 코어 인터페이스 로직(315)에 부가하여, 공유 코어 확장 로직(314)은 또한 공유 데이터 처리 로직(316) 및 공유 데이터 처리 로직 상의 다수의 코어들로부터의 데이터 처리 또는 작업들을 스케줄링하는 스케줄러(344)를 갖는다.
코어 0(311-0) 상에서 실행 중인 하나 이상의 물리적 스레드들 각각은 공유 코어 확장 로직(314)과 인터페이스하기 위해 공유 코어 확장 인터페이스 로직(313)을 사용할 수 있다. 공유 코어 확장 인터페이스 로직(313)은 코어 0의 명령어 세트(322)의 공유 코어 확장 이용 명령어들(323)을 포함한다. 명령어 세트는 코어의 명령어 세트 아키텍처(instruction set architecture)(ISA)의 일부이다. ISA는 프로그래밍에 관련된 코어의 아키텍처의 일부를 나타낸다. ISA는 통상적으로 프로세서의 네이티브 명령어(native instruction)들, 아키텍처 레지스터들, 데이터 유형들, 어드레싱 모드들, 메모리 아키텍처, 인터럽트 및 예외 처리 등을 포함한다. ISA는 마이크로아키텍처와 구분되며, 마이크로아키텍처는 일반적으로 ISA를 구현하기 위해 선택되는 특정의 설계 기법들을 나타낸다. 상이한 마이크로아키텍처들을 갖는 프로세서들 또는 코어들은 공통의 ISA를 공유할 수 있다. 공유 코어 확장 이용 명령어들(323)을 포함하는 명령어 세트의 명령어들은, 마이크로명령어들, 마이크로-op들, 또는 하위 레벨 명령어들(예컨대, 디코드 로직이 머신 명령어들 또는 매크로명령어들을 디코딩한 결과 얻어지는 것들)과 달리, 머신 명령어들, 매크로명령어들, 또는 상위 레벨 명령어들(예컨대, 실행을 위해 코어에 제공되는 명령어들)을 나타낸다.
공유 코어 확장 인터페이스 로직(313)은 또한 공유 코어 확장 명령 레지스터(shared core extension command register)(SCECR)들(328)의 코어 0 스레드 0 세트를 포함한다. 각각의 물리적 스레드는 그와 연관된 SCECR 레지스터들의 세트를 다른 스레드들의 진행 상황에 관계없이 저장되고 복원될 그의 컨텍스트의 일부로서 가질 수 있다. 일부 실시예들에서, 코어 0에 대해, 코어 0 상에서 실행되는 하나 이상의 물리적 스레드들 각각에 대해 스레드마다 제공되는 다수의 SCECR 세트들이 있을 수 있다. 예를 들어, 예시된 실시예에서, 코어 0, 스레드 0 SCECR들은 스레드 0에 속할 수 있다. 이와 유사하게, 코어 0에서 실행 중인 각각의 물리적 스레드는 공유 코어 확장 로직(314)과 인터페이스하기 위해 코어 0, 스레드-특정적 SCECR들의 세트를 가질 수 있다. 다른 대안으로서, 코어 0에 대해 코어 0 SCECR들의 단일의 세트가 있을 수 있다. 이러한 경우들에서, 하드웨어 레벨에서 물리적 스레드들 간에 SCECR들의 시간 공유가 있을 수 있다. 컨텍스트가 컨텍스트 전환 시에 코어 0 SCECR들 밖으로 스와핑되고 저장되며 복원될 수 있다.
이 예시에서, SCECR 0(328-0) 내지 SCECR N(328-N)이 도시되어 있다. 즉, N+1개의 레지스터들이 있다. 숫자 N+1은 2, 4, 8, 16, 32, 64, 또는 어떤 다른 수와 같은 임의의 원하는 수일 수 있다. 숫자 N+1이 2의 멱수(power)이어야 한다는 어떤 요구사항도 없지만, 이것은 일반적으로 효율적인 레지스터 어드레싱을 제공하는 경향이 있다. 이 레지스터들 중 주어진 하나는 일반적으로 SCECR x로서 나타내어져 있으며, 여기서 x는 레지스터 SCECR 0, ..., SCECR N 중 임의의 하나를 나타낼 수 있다.
일부 실시예들에서, 공유 코어 확장 명령 레지스터들은 코어 및/또는 프로세서의 ISA의 아키텍처적으로 가시적인(architecturally visible) 레지스터들일 수 있다. 아키텍처 레지스터는 일반적으로 온다이(on-die) 프로세서 저장 장소를 나타낸다. 아키텍처 레지스터는 또한 본 명세서에서 간단히 레지스터라고 지칭될 수 있다. 달리 언급하지 않거나 명백하지 않는 한, 아키텍처 레지스터 및 레지스터라는 문구들은 본 명세서에서 소프트웨어 및/또는 프로그래머에게 가시적인(예컨대, 소프트웨어 가시적) 레지스터 및/또는 매크로명령어들에 의해 특정되는 레지스터를 지칭하는 데 사용된다. 이 레지스터들은 주어진 마이크로아키텍처에서의 그외의 비아키텍처적인 또는 비아키텍처적으로 가시적인 레지스터들(예컨대, 명령어들, 재정렬 버퍼들, 회수 레지스터들 등에 의해 사용되는 임시 레지스터들)과 대조된다.
공유 코어 확장 이용 명령어들(323)은 데이터 처리가 수행되기 위해 공유 코어 확장 로직(314)에 대한 호출들을 전송, 모니터링 및 강제 종료시키는 데 사용된다. 예로서, 공유 코어 확장 이용 명령어들은 병렬 프로그래밍을 위해 사용될 수 있고, 병렬 프로그래밍 작업 부하들의 효율 및/또는 처리율을 증가시키기 위해 명령어 세트에(예컨대, 명령어 세트의 확장으로서) 포함될 수 있다. 공유 코어 확장 이용 명령어들은 코어 0 공유 코어 확장 명령 레지스터들(328)의 공유 코어 확장 명령 레지스터(SCECR x)를 (예컨대, 비트들 또는 하나 이상의 필드들을 통해) 명시적으로 지정하거나 다른 방식으로 나타낼(예컨대, 암시적으로 나타낼) 수 있다. 공유 코어 확장 레지스터들은 공유 코어 확장 로직에 프로세서의 아키텍처 하드웨어 인터페이스를 제공할 수 있다.
예시된 실시예에서, 공유 코어 확장 이용 명령어들(323)은 포맷 SCE call(SCECR x, 파라미터들)를 갖는 공유 코어 확장(shared core extension)(SCE) 호출 명령어(324)를 포함한다. SCECR x는 코어 0 공유 코어 확장 명령 레지스터들(328) 중 하나를 나타내고, 파라미터들은 호출과 연관된 하나 이상의 파라미터들을 나타내며, 이에 대해서는 이하에서 추가로 논의될 것이다. 예시된 공유 코어 확장 이용 명령어들은 또한 포맷 SCE read(SCECR x)을 갖는 SCE 판독 명령어(325)를 포함한다. 다른 공유 코어 확장 이용 명령어는 포맷 SCE abort(SCECR x)를 갖는 SCE 강제 종료 명령어(326)이다. 또 다른 공유 코어 확장 이용 명령어는 포맷 SCE wait(SCECR x)를 갖는 SCE 대기 명령어(327)이다. 이 명령어들 각각은 수행될 명령어 및/또는 동작을 식별하도록 동작가능한 연산 코드 또는 opcode(예컨대, 복수의 비트들 또는 하나 이상의 필드들)를 포함할 수 있다. 이 예시적인 공유 코어 확장 이용 명령어들 각각의 기능은 이하에서 추가로 논의될 것이다.
이것이 적당한 공유 코어 확장 이용 명령어들의 세트의 하나의 예시적인 예에 불과하다는 것을 잘 알 것이다. 예를 들어, 다른 실시예들에서, 예시된 명령어들 중 일부는 선택적으로 생략될 수 있고 및/또는 부가의 명령어들이 선택적으로 공유 코어 확장 이용 명령어들에 부가될 수 있다. 더욱이, 다른 공유 코어 확장 이용 명령어들 및 그들의 세트들이 고려되고 본 개시 내용의 이점을 갖는 본 기술분야의 통상의 기술자에게 명백할 것이다.
코어 0(311-0) 상에서 실행 중인 물리적 스레드들 중 하나는 공유 코어 확장 이용 명령어들(323) 중 하나를 발행할 수 있다. 그 스레드에 의해 발행된 공유 코어 확장 이용 명령어는 적절한 코어 0 공유 코어 확장 명령 레지스터들(328)을 나타낼 수 있다. 적절한 코어 0 공유 코어 확장 명령 레지스터들은 스레드(예컨대, 스레드 0)에 대응하고 스레드마다 컨텍스트를 제공할 수 있다.
다시 도 3을 참조하면, 코어 0는 디코드 로직(348)을 포함한다. 디코드 로직은 또한 디코더 또는 디코드 유닛이라고도 할 수 있다. 디코드 로직은 상위 레벨 머신 명령어들 또는 매크로명령어들을 수신하고 디코딩하며, 원래의 상위 레벨 명령어를 반영하고 그리고/또는 그로부터 도출되는 하나 이상의 하위 레벨 마이크로연산들, 마이크로코드 진입점들, 마이크로명령어들, 또는 다른 하위 레벨 명령어들 또는 제어 신호들을 출력할 수 있다. 하나 이상의 하위 레벨 제어 신호들은 하나 이상의 하위 레벨(예컨대, 회로 레벨 또는 하드웨어 레벨) 동작들을 통해 상위 레벨 명령어의 동작을 구현할 수 있다. 디코더는 기술 분야에 공지된 명령어 디코딩을 수행하기 위해 사용되는 마이크로코드 ROM(read only memory), 룩업 테이블(look-up table), 하드웨어 구현, PLA(programmable logic array), 및 다른 메커니즘들(이들로 제한되지 않음)을 포함하는 각종의 상이한 메커니즘들을 사용하여 구현될 수 있다. 더욱이, 일부 실시예들에서, 명령어 에뮬레이터(instruction emulator), 번역기(translator), 모퍼(morpher), 인터프리터(interpreter), 또는 다른 명령어 변환 로직이 디코드 로직 대신에 및/또는 그에 부가하여 사용될 수 있다.
SCE 명령어 실행 로직(330)은 디코드 로직(348)과 그리고 코어 0 공유 코어 확장 명령 레지스터들(328)과 결합되어 있다. 공유 코어 확장 명령어 실행 로직은 공유 코어 확장 이용 명령어들을 반영하거나 그로부터 도출되는 하나 이상의 마이크로연산들, 마이크로코드 진입점들, 마이크로명령어들, 다른 명령어들, 또는 다른 제어 신호들을 디코더로부터 수신할 수 있다. 공유 코어 확장 명령어 실행 로직은 공유 코어 확장 이용 명령어들에 응답하여 그리고/또는 그에 의해 명시된 대로(예컨대, 디코더로부터의 제어 신호들에 응답하여) 조치들을 수행하도록 동작가능하다. 일부 실시예들에서, 공유 코어 확장 명령어 실행 로직 및/또는 프로세서는 공유 코어 확장 이용 명령어들에 응답하여 그리고/또는 그에 의해 명시된 대로 공유 코어 확장 이용 명령어들을 실행 및/또는 처리하고 조치들을 수행하도록 동작가능한 구체적인 또는 특정의 로직(예컨대, 잠재적으로 소프트웨어 및/또는 펌웨어와 결합된 회로 또는 다른 하드웨어)을 포함할 수 있다.
예시된 실시예에서, 공유 코어 확장 명령어 실행 로직은 공유 코어 확장 제어 로직(329) 내에 포함되어 있다. 공유 코어 확장 제어 로직은 공유 코어 확장 명령 레지스터들(328), 디코드 로직(348), 및 메모리 관리 유닛(331)과 결합되어 있으며, 이에 대해서는 이하에서 추가로 논의될 것이다. 공유 코어 확장 제어 로직은 공유 코어 확장 인터페이스 로직(313)의 다양한 제어, 관리, 조정, 타이밍, 및 관련 구현 측면들을 도울 수 있다.
전술한 바와 같이, 코어 0의 명령어 세트는 SCE 호출 명령어(324)를 포함한다. SCE 호출 명령어는 코어를 대신하여(예컨대, 코어 상에서 실행 중인 스레드를 대신하여) 데이터 처리를 수행하기 위해 호출을 공유 코어 확장 로직(314)으로 전송하는 데 사용될 수 있다. 예로서, 코어 0 상에서 실행 중인 물리적 또는 논리적 스레드는 데이터 처리를 수행하기 위한 호출 또는 명령을 공유 코어 확장 로직으로 송신하기 위해 SCE 호출 명령어를 발행할 수 있다. 일부 실시예들에서, 호출 또는 명령은 공유 코어 확장 명령 레지스터들(328) 중 하나 이상을 통해 공유 코어 확장 로직으로 전달될 수 있다. 예를 들어, 실시예의 공유 코어 확장 호출 명령어는 코어 0 공유 코어 확장 명령 레지스터들(328) 중 하나(예컨대, SCECR x)를 명시하거나 다른 방식으로 나타낼 수 있다. 즉, 공유 코어 확장 명령 레지스터들은 새로운 SCE 호출 마이크로명령어를 사용하여 코어들 상의 스레드(들)로부터 액세스가능할 수 있다. 일부 실시예들에서, SCE 호출 명령어는 또한 수행되어야 하는 데이터 처리를 추가로 명시, 적격성 부여(qualify) 또는 정의하기 위해 하나 이상의 파라미터들을 명시하거나 다른 방식으로 표시할 수 있다. 데이터가 SCE 호출 명령어에 기초하여(예컨대, SCE 호출 명령어의 하나 이상의 파라미터들에 기초하여) 표시된 공유 코어 확장 명령 레지스터(예컨대, SCECR x)에 기입 또는 저장될 수 있다. 현재의 SCE 호출이 이전의 SCE 호출에 의해 이미 전용되어 있거나 점유되어 있는 공유 코어 확장 명령 레지스터에 대해 행해지는 경우, 현재의 SCE 호출은 점유된 공유 코어 확장 명령 레지스터가 해제될 때까지(예컨대, 연관된 호출이 완료되거나 강제 종료될 때) 차단될 수 있다. 이어서, 공유 코어 확장 로직은 그 안에 기입되거나 저장된 데이터를 포함하는 표시된 공유 코어 확장 명령 레지스터(예컨대, SCECR x)에 액세스할 수 있고, 호출 또는 명령을 구현(예컨대, 요청된 데이터 처리를 수행)할 수 있다.
도 4는 SCE 호출 명령어의 실시예를 처리하는 방법(450)의 일 실시예의 블록 흐름도이다. 실시예들에서, 이 방법은 프로세서, 코어, 또는 다른 유형의 명령어 처리 장치에 의해 수행될 수 있다. 일부 실시예들에서, 방법(450)은 도 2의 프로세서(210), 또는 도 3의 코어 0(311-0), 또는 유사한 프로세서 또는 코어에 의해 수행될 수 있다. 다른 대안으로서, 방법(450)은 완전히 다른 프로세서, 코어, 또는 명령어 처리 장치에 의해 수행될 수 있다. 더욱이, 프로세서(210), 및 코어(311-0)는 방법(450)과 동일하거나, 유사하거나, 상이한 동작들 및 방법들의 실시예들을 수행할 수 있다.
블록(451)에서, SCE 호출 명령어가 복수의 코어들을 갖는 프로세서의 코어 내에서 수신된다. 다양한 양태들에서, SCE 호출 명령어가 오프코어 소스(off-core source)로부터(예컨대, 메인 메모리, 디스크, 또는 버스 또는 상호접속으로부터) 코어에 수신될 수 있거나, 코어 내의 다른 로직(예컨대, 명령어 캐시, 큐, 스케줄링 로직 등)으로부터 코어의 일부분에서(예컨대, 디코드 로직, 스케줄링 로직 등에서) 수신될 수 있다. SCE 호출 명령어는 데이터 처리를 수행하기 위해 코어로 하여금 공유 코어 확장 로직을 호출하게 하는 것이다. 공유 코어 확장 로직이 복수의 코어들에 의해 공유된다. SCE 호출 명령어는 공유 코어 확장 명령 레지스터를 표시하고, 또한 하나 이상의 파라미터들을 표시한다. 하나 이상의 파라미터들은 공유 코어 확장 로직에 의해 수행되어야 하는 데이터 처리를 명시한다.
일부 실시예들에서, 하나 이상의 파라미터들은 호출과 연관된 명령 속성들을 갖는 메모리 내의 명령 속성 데이터 구조체에 대한 포인터(예컨대, 명시적 가상 메모리 포인터들), 데이터 처리가 수행되어야 하는 메모리 내의 하나 이상의 입력 데이터 피연산자들에 대한 하나 이상의 포인터들(예컨대, 하나 이상의 명시적 가상 메모리 포인터들), 및 데이터 처리의 결과들이 저장되는 메모리 내의 하나 이상의 출력 데이터 피연산자들에 대한 하나 이상의 포인터들(예컨대, 하나 이상의 명시적 가상 메모리 포인터들) 중 하나 이상을 제공할 수 있다. 예를 들어, 일부 실시예들에서, 하나 이상의 파라미터들은 도 5에 도시된 필드들을 도출하기 위해 사용될 및/또는 저장될 정보를 제공할 수 있고, 이에 대해서는 이하에서 더 논의될 것이다. 다른 대안으로서, 다른 실시예들에서, 하나 이상의 필드들은 메모리 포인터들 대신에 opcode들 및 인수(argument)들의 직접 인코딩(direct encoding)을 가질 수 있다.
블록(452)에서, 데이터 처리를 수행하기 위해, SCE 호출 명령어에 응답하여, 공유 코어 확장 로직이 호출된다. 일부 실시예들에서, 공유 코어 확장 로직을 호출하는 것은 명령어에 의해 표시된 하나 이상의 파라미터들에 기초하여 명령어에 의해 표시된 공유 코어 확장 명령 레지스터에 데이터를 기입하거나 다른 방식으로 저장하는 것을 포함할 수 있다.
도 5는 공유 코어 확장 명령 레지스터(528)의 일 예시적인 실시예의 블록도이다. 공유 코어 확장 명령 레지스터는 다수의 필드들을 갖는다. 예시된 실시예에서, 이 필드들은, 좌에서 우로, 상태 필드(553), 진행 상황(progress) 필드(554), 명령 포인터 필드(555), 입력 데이터 피연산자(들) 포인터(들) 필드(556), 및 출력 데이터 피연산자(들) 포인터(들) 필드(557)를 포함한다. 이 필드들 각각은 특정의 구현에 대해 요망되는 정보를 전달하는 데 충분한 다수의 비트들을 포함할 수 있다.
상태 필드(553)는 공유 코어 확장 명령 레지스터에 대응하는 호출의 상태를 제공하는 데 사용될 수 있다. 이러한 상태의 예들은 호출이 유효함(예컨대, 진행 중임), 호출이 완료되었음, 호출이 오류를 가짐, 등을 포함하지만, 이들로 제한되지 않는다. 예로서, 전술한 3개의 상태 조건들 중 임의의 것을 명시하기 위해 2 비트가 사용될 수 있다. 다른 예에서, 유효함(valid) 및 유효하지 않음(invalid)과 같은 2개의 상태 조건들 중 어느 하나를 인코딩하기 위해 단일의 비트가 사용될 수 있다. 유효함은 호출이 현재 진행 중임을 나타낼 수 있다. 유효하지 않음은 오류가 발생했다는 것을 나타낼 수 있다.
진행 상황 필드(554)는 공유 코어 확장 명령 레지스터에 대응하는 호출의 진행 상황을 제공하는 데 사용될 수 있다. 진행 상황은 완료 진행 상황의 레벨, 또는 호출 또는 명령이 완료를 향해 얼마나 진행되었는지를 나타낼 수 있다. 진행 상황 필드는 호출을 실행함에 있어서 지금까지 완료된 작업의 양을 카운트하는 일종의 카운터를 효과적으로 구현할 수 있다. 일부 실시예들에서, 진행 상황은 원자적 커밋 시점(atomic commit point)들에 의해 표현될 수 있다. 예를 들어, 원자적 서브동작(atomic sub-operation)이 SCE 로직에 의해 완료될 때마다 카운터가 증분될 수 있다. 원자적 서브동작은 데이터 처리의 유형마다 달라질 수 있다(예컨대, 하나의 예에서, 특정의 수의 캐시 라인들의 데이터가 처리될 때). 일부 실시예들에서, 공유 코어 확장 로직의 데이터 처리 및 공유 코어 확장 로직 상에서의 실행 중인 명령을 선점(pre-empt)하고 재스케줄링(re-schedule)하는 능력과 관련하여 진행 상황 원자성(progress atomicity)을 제공하기 위해 진행 상황 필드가 사용될 수 있다. 호출의 실행이 중단될 때(예컨대, 하나의 스레드로부터 다른 스레드로의 컨텍스트 전환 시에 또는 폴트 시에), 진행 상황 필드가 저장될 수 있다. 나중에, 진행 상황 필드가 복원될 수 있고, 호출과 연관된 데이터 처리가 재개될 수 있다(예컨대, 스레드가 다시 제출(resubmit)될 때). 진행 상황 필드를 복원하는 것은 데이터 처리가 중단된 곳에서 재개될 수 있게 할 수 있다. 이것은 유용하며, SCE 로직에 의해 수행될 데이터 처리의 양이 비교적 많고 그리고/또는 완료하는 데 비교적 많은 양의 시간이 걸릴 때 특히 그렇다.
명령 포인터 필드(555)는 공유 코어 확장 명령 레지스터에 대응하는 호출의 호출 또는 명령 속성 정보(558)를 가리키는 포인터를 제공하기 위해 사용될 수 있다. 일부 실시예들에서, 호출 속성 정보는 호출 속성 데이터 구조체에 포함되어 있을 수 있다. 일부 실시예들에서, 호출 속성 정보는 메모리(518) 내의 하나 이상의 메모리 장소들에 저장될 수 있다. 일부 실시예들에서, 포인터는 명시적 가상 메모리 포인터일 수 있다. 호출 속성 정보는 호출의 속성들을 추가로 명시, 적격성 부여, 정의 또는 특성화할 수 있다. 예를 들어, 호출 속성 정보는 공유 코어 확장 로직에 의해 수행되어야 하는 데이터 처리의 정확한 유형을 추가로 명시, 적격성 부여, 정의 또는 특성화할 수 있다. 일부 실시예들에서, 명령 속성들은, 예를 들어, 행렬을 전치시키는 연산들, 히스토그램을 발생시키는 연산들, 필터를 수행하는 연산들 등과 같은 비교적 간단하거나 짧은 처리 루틴들 또는 함수들을 나타내는 처리를 기술할 수 있다. 명령 속성들은 하나 이상의 출력 데이터 피연산자들(예컨대, 하나 이상의 출력 데이터 구조체들)을 생성하기 위해 하나 이상의 입력 데이터 피연산자들(예컨대, 하나 이상의 입력 데이터 구조체들)에 대해 수행할 연산들의 시퀀스를 기술할 수 있다. 일부 실시예들에서, 이들은 전형적으로 하드웨어 가속기들 또는 그래픽 처리 유닛들 등에서 수행되는 각종의 이러한 비교적 간단한 알고리즘들 또는 루틴들 중 임의의 것일 수 있다.
입력 데이터 피연산자(들) 포인터(들) 필드(556)는 하나 이상의 입력 데이터 피연산자들을 가리키는 하나 이상의 포인터들을 제공하기 위해 사용될 수 있다. 입력 데이터 피연산자들은 공유 코어 확장 로직에 의해 데이터 처리가 수행되어야 하는 것들이다. 일부 실시예들에서, 하나 이상의 입력 데이터 피연산자들은, 예를 들어, 행렬, 테이블 등과 같은 하나 이상의 데이터 구조체들을 나타낼 수 있다. 도시된 바와 같이, 일부 실시예들에서, 포인터(들)는 메모리(518) 내의 메모리 장소(들)에 있는 입력 데이터 피연산자(들)를 가리킬 수 있다. 일부 실시예들에서, 포인터(들)는 명시적 가상 메모리 포인터(들)일 수 있다. 다른 실시예들에서, 포인터들은 하나 이상의 레지스터들 또는 다른 저장 장소들에 있는 하나 이상의 입력 데이터 피연산자들을 가리킬 수 있다.
출력 데이터 피연산자(들) 포인터(들) 필드(557)는 하나 이상의 출력 데이터 피연산자들을 가리키는 하나 이상의 포인터들을 제공하기 위해 사용될 수 있다. 출력 데이터 피연산자들은 호출의 완료 시에 공유 코어 확장 로직에 의해 수행된 데이터 처리의 결과들을 전달하기 위해 사용되는 것들이다. 일부 실시예들에서, 하나 이상의 출력 데이터 피연산자들은, 예를 들어, 행렬, 테이블 등과 같은 하나 이상의 데이터 구조체들을 나타낼 수 있다. 도시된 바와 같이, 일부 실시예들에서, 포인터(들)는 메모리 내의 메모리 장소(들)에 있는 출력 데이터 피연산자(들)를 가리킬 수 있다. 일부 실시예들에서, 포인터(들)는 명시적 가상 메모리 포인터(들)일 수 있다. 다른 실시예들에서, 포인터들은 하나 이상의 레지스터들 또는 다른 저장 장소들에 있는 하나 이상의 출력 데이터 피연산자들을 가리킬 수 있다.
이것이 공유 코어 확장 명령 레지스터에 대한 적당한 포맷의 하나의 예시적인 실시예에 불과하다는 것을 잘 알 것이다. 대안의 실시예들은 예시된 필드들 중 일부를 생략할 수 있거나 부가의 필드들을 부가할 수 있다. 예를 들어, 필드들 중 하나 이상이 공유 코어 확장 명령 레지스터에 명시적으로 지정될 필요가 없는 암시적 장소를 통해 제공될 수 있다. 다른 예로서, 입력 데이터 피연산자 저장 장소는 출력 데이터 피연산자 저장 장소로서 재사용될 수 있고, 따라서 그것이 두번 명시될 필요가 없고 명시들 중 하나는 암시적일 수 있다. 또 다른 예로서, 하나 이상의 필드들은 메모리 포인터들 대신에 opcode들 및 인수들의 직접 인코딩을 가질 수 있다. 더욱이, 필드들의 예시된 순서/배열이 요구되는 것은 아니나, 오히려 필드들이 재배열될 수 있다. 게다가, 필드들은 (예시에서 암시된 바와 같이) 연속적인 비트 시퀀스들을 포함할 필요가 없고 오히려 비연속적이거나 분리된 비트들로 이루어져 있을 수 있다.
다시 도 3을 참조하면, SCE 호출 명령어의 실행 후에, SCE 호출 명령어에 의해 표시된 공유 코어 확장 명령 레지스터(예컨대, SCECR x)는 SCE 호출 명령어에 대응하는 데이터를 저장할 수 있다. 스레드 또는 코어가 작업 또는 호출을 제출한 후에, 스레드 또는 코어는 이전에 제출된 호출들 또는 작업들이 완료되기 전에 계속하여 부가의 호출들 또는 작업들을 준비하여 공유 코어 확장 로직으로 제출하도록 진행할 수 있다. 그에 부가하여, 스레드 또는 코어는 이전에 제출된 호출들 또는 작업들이 완료되는 동안 다른 처리를 수행하도록 진행할 수 있다. 공유 코어 확장 명령 레지스터들은, 스케줄러(이하에서 추가로 논의될 것임)와 함께, 다수의 스레드들 및/또는 다수의 코어들로 하여금 작업들 또는 호출들을 제출할 수 있게 하고 이어서, 작업들 또는 호출들이 공유 코어 확장 로직 상에서 완료되는 동안 그리고 그 때까지, 계속하여 다른 작업들 또는 호출들을 제출하거나 다른 처리를 수행할 수 있게 할 수 있는 미세한 제어 흐름을 제공하는 데 도움을 줄 수 있다.
공유 코어 확장 로직(314)은 코어 0 공유 코어 확장 명령 레지스터들(328)에 액세스하기 위해 코어 인터페이스 로직(315)을 포함한다. 코어 인터페이스 로직은 또한 코어 M 공유 코어 확장 명령 레지스터들(340)에 액세스하기 위해 사용될 수 있음은 물론, 임의의 다른 코어들(있는 경우)에 대해서도 마찬가지이다. 즉, 일부 실시예들에서, 공유 코어 확장 로직 및/또는 코어 인터페이스 로직은 코어들 각각에 대한 공유 코어 확장 명령 레지스터들의 개별적인 세트에 액세스할 수 있다.
공유 코어 확장 로직은 공유 코어 확장 명령 레지스터들(328)을 사용할 수 있다. 예를 들어, 공유 코어 확장 로직은 명령 필드(예컨대, 필드(555))가 가리키는 명령 속성 정보에 액세스할 수 있고, 입력 데이터 피연산자들 필드(예컨대, 필드(556))가 가리키는 입력 데이터 피연산자들에 액세스할 수 있으며, 진행 상황 필드(예컨대, 필드(554))에 있는 데이터 처리의 결과로서의 진행 상황을 업데이트할 수 있고, 동작이 행해지거나 오류를 만날 때, 완료 또는 오류를 반영하기 위해 상태 필드(예컨대, 필드(553))를 업데이트할 수 있으며, 오류 없이 완료된 경우에, 출력 데이터 피연산자들 필드(예컨대, 필드(557))에 있는 포인터를 통해 출력 데이터 피연산자들에 액세스할 수 있다.
설명을 용이하게 하기 위해, 공유 코어 확장 로직이 코어 0, 스레드 0 공유 코어 확장 명령 레지스터들의 복제본을 갖는 것으로 도시되어 있다. 그렇지만, 공유 코어 확장 로직의 공유 코어 확장 명령 레지스터들은 코어 0, 스레드 0 공유 코어 확장 명령 레지스터들의 2개의 세트가 실제로는 있을 수 없다는 것을 나타내기 위해 파선들로 도시되어 있다. 오히려, 코어 0 및 공유 코어 확장 로직 둘 다가 논리적으로 코어 0, 스레드 0 공유 코어 확장 명령 레지스터들의 동일한 세트를 볼 수 있다. 이와 유사하게, 공유 코어 확장 로직은 잠재적으로 코어 M, 스레드 P 세트(340)를 통해 다른 프로세서들의 다른 스레드들의 대응하는 공유 코어 확장 명령 레지스터들을 볼 수 있다. 또한, 명확함을 위해, 물리적 코어 0, 스레드 0 공유 코어 확장 명령 레지스터들이 코어 0에, 공유 코어 확장 로직에, 코어 0 밖에 있고 공유 코어 확장 로직 밖에 있는 장소에, 또는 상이한 장소들의 조합에 위치해 있을 수 있다.
공유 코어 확장 로직(314)은 스케줄러(344)의 실시예를 포함한다. 스케줄러는 하드웨어, 소프트웨어, 펌웨어, 또는 어떤 조합으로 구현될 수 있다. 일 양태에서, 스케줄러는 하드웨어 스케줄러일 수 있다. 스케줄러는 코어 0 공유 코어 확장 명령 레지스터들(328) 내지 코어 M 공유 코어 확장 명령 레지스터들(340)에 액세스하고, 공유 데이터 처리 로직(316) 상에서 이 레지스터들을 통해 전달된 호출들과 연관된 데이터 처리를 스케줄링하도록 동작가능하다. 일부 실시예들에서, 스케줄러는 프로그램가능 스케줄링 알고리즘 또는 목적에 따라 코어들에 대한 데이터 처리를 스케줄링하는 프로그램가능 하드웨어 스케줄러 또는 프로그램가능 하드웨어 스케줄링 로직을 나타낼 수 있다. 일부 실시예들에서, 하드웨어 스케줄러는 명령 레지스터들 간에 그리고 물리적 스레드들 간에 회전(rotate)하도록 동작가능한 상태 머신으로서 구현될 수 있다. 중재 정책들(arbitration policies)이 잠재적으로 MSR(machine specific register)들의 세트를 통해 소프트웨어에 노출될 수 있다. 다른 실시예들에서, 하드웨어 스케줄러는, 예를 들어, 고정된(fixed) ROM(read only memory) 도메인 및 패치가능한(patchable) RAM(random access memory) 도메인 둘 다를 포함하는 펌웨어 블록으로서 구현될 수 있다. 이것은 잠재적으로 하드웨어 스케줄러가 운영 체제 디렉티브들(directives), API(application programming interface)들, 런타임 컴파일러 디렉티브들, 실시간 하드웨어 신호들, 또는 이러한 제어들의 조합에 의존할 수 있는 보다 정교한 스케줄링 알고리즘들을 사용할 수 있게 할 수 있다. 예로서, 스케줄링은 공정 스케줄링 알고리즘(fair scheduling algorithm), (예컨대, 코어 부하, 처리되는 스레드 또는 데이터의 시간 임계성(time criticality), 스레드 우선순위에 기초하여, 또는 다른 목적들에 따라) 다른 것들보다 코어들 중 일부에 대한 가중된 스케줄링 알고리즘일 수 있다. 기술 분야에 공지된 많은 상이한 유형의 스케줄링 알고리즘들이 그 구현들의 특정의 목적에 따라 상이한 구현들에 적당하다. 스케줄러는 또한 공유 데이터 처리 로직 상에 스케줄링되어 있는 호출들 또는 작업들의 완료를 모니터링할 수 있다.
공유 코어 확장 로직(314)은 또한 상태 및/또는 진행 상황 업데이트 로직(349)을 포함한다. 상태 및/또는 진행 상황 업데이트 로직은 공유 데이터 처리 로직(316)에 의해 처리되고 있는 호출들의 상태 및/또는 진행 상황을 모니터링할 수 있다. 상태 및/또는 진행 상황 업데이트 로직은 또한 모니터링된 상태 및/또는 진행 상황에 기초하여 호출들에 대응하는 공유 코어 확장 명령 레지스터들을 업데이트할 수 있다. 예를 들어, 도 5의 상태 필드(553) 및 진행 상황 필드(554)는 업데이트될 수 있다. 예로서, 공유 코어 확장 로직 상에서 호출이 완료될 때, 완료되었음을 반영하기 위해 상태가 업데이트될 수 있거나, 공유 코어 확장 로직 상에서의 호출의 처리가 오류를 만날 때, 오류 조건을 반영하기 위해 상태가 업데이트될 수 있다. 다른 예로서, 호출과 연관된 데이터 처리 전체에 걸쳐, 상태 및/또는 진행 상황 업데이트 로직은 호출의 완료의 진행 상황을 업데이트할 수 있다(예컨대, 진행 상황 필드(554)에서 원자적 커밋 시점들을 업데이트할 수 있다).
일부 실시예들에서, 운영 체제는 컨텍스트 전환 시에 공유 코어 확장 명령 레지스터들의 상태를 관리하기 위해 상태 저장/상태 복원 기능(예컨대, 인텔 아키텍처에서의 xsave/xrestore)을 사용할 수 있다. 공유 코어 확장 로직에 의해 아직 완료되지 않은 호출들 또는 명령들이 컨텍스트 전환 시에 물리적 스레드에 의해 저장되고 이어서 복원되며 재시작(re-launch)될 수 있다. 일부 실시예들에서, 컨텍스트 전환 및 운영 체제 선점을 지원하기 위해, 공유 코어 확장 명령 레지스터들은 공유 코어 확장 로직에 의해 처리되고 있는 데이터 처리 작업의 기록(예컨대, 원자적 진행 상황)에 대한 앞서 언급한 진행 상황 필드를 가질 수 있다. 진행 상황 필드는 컨텍스트 전환 시에 스레드 컨텍스트의 일부로서 저장되고, 운영 체제가 스레드를 재스케줄링할 때, 작업 재개를 위해 사용될 수 있다.
공유 코어 확장 로직(315)은 또한 공유 코어 확장 제어 로직(343)을 포함한다. 공유 코어 확장 제어 로직은 스케줄러(344), 공유 데이터 처리 로직(316), 상태/진행 상황 업데이트 로직(349), 코어 0-M 공유 코어 확장 명령 레지스터들(328, 340), 및 공유 코어 확장 MMU(memory management unit)(341)와 결합되어 있고, 이에 대해서는 이하에서 추가로 논의될 것이다. 공유 코어 확장 제어 로직은 공유 코어 확장 로직(314)의 다양한 제어, 관리, 조정, 타이밍, 및 관련 구현 측면들을 도울 수 있다.
도 3의 SCE 호출 명령어(324) 및/또는 도 4의 방법의 SCE 호출 명령어를 다시 참조하면, 일부 실시예들에서, SCE 호출 명령어는 비-차단 SCE 호출 명령어일 수 있다. 일부 실시예들에서, 비-차단 SCE 호출 명령어는 스레드(예컨대, 물리적 스레드)로부터 비-추측적(non-speculatively)으로 송신될 수 있고, 비-차단 SCE 호출 명령어가 실행을 위해 공유 코어 확장 로직에 접수(예컨대, SCE 명령 레지스터에 저장)된 후에, 발행 스레드(issuing thread)가 실행 중인 코어에서 회수될 수 있다.
다른 실시예들에서, SCE 호출 명령어는 차단 SCE 호출 명령어일 수 있다. 일부 실시예들에서, 차단 SCE 호출 명령어는 스레드(예컨대, 물리적 스레드)로부터 비-추측적으로 송신될 수 있고, 호출 또는 작업의 실행이 공유 코어 확장 로직에서 완료된 후에(예컨대, 공유 코어 확장 명령 레지스터의 상태 필드가 완료되었음을 반영하도록 업데이트될 때), 발행 스레드가 실행 중인 코어에서 회수될 수 있다. 일부 실시예들에서, SCE 호출 명령어들의 비-차단 변형 및 차단 변형 둘 다가 명령어 세트에 포함될 수 있다.
일부 실시예들에서, 차단 SCE 호출 명령어는 공유 코어 확장 명령 레지스터 해제를 기다릴 타임아웃 값(예컨대, 사이클들의 수)을 명시하거나 다른 방식으로 표시할 수 있다. 예를 들어, 이 사이클들의 수 또는 다른 타임아웃 값이 SCE 호출 명령어의 파라미터들 중 하나에 명시될 수 있다. 일부 실시예들에서, 공유 코어 확장 명령 레지스터가 해제됨이 없이 타임아웃 값에 도달된 경우, 호출에 응답하여 실패, 폴트, 오류 등이 반환될 수 있다.
SCE 호출 명령어의 회수 후에, 공유 코어 확장 로직은 할당된 작업 또는 호출에 따라 메모리 상태를 수정할 수 있다. 멀티-스레드(multi-threaded) 환경에서, 공유 코어 확장을 사용하고 공유 피연산자들을 가질 수 있는 논리적 스레드들 간의 캐시 일관성 및 메모리 순서 부여(memory ordering)를 유지하기 위해 소프트웨어 동기화가 수행될 수 있다. 다른 대안으로서, 하드웨어 동기화가 또한 선택적으로 수행될 수 있다.
도 6은 SCE 판독 명령어의 실시예를 처리하는 방법(662)의 일 실시예의 블록 흐름도이다. 실시예들에서, 이 방법은 프로세서, 코어, 또는 다른 유형의 명령어 처리 장치에 의해 수행될 수 있다. 일부 실시예들에서, 방법(662)은 도 2의 프로세서(210), 또는 도 3의 코어 0(311-0), 또는 유사한 프로세서 또는 코어에 의해 수행될 수 있다. 다른 대안으로서, 방법(662)은 완전히 다른 프로세서, 코어, 또는 명령어 처리 장치에 의해 수행될 수 있다. 더욱이, 프로세서(210), 및 코어(311-0)는 방법(662)과 동일하거나, 유사하거나, 상이한 동작들 및 방법들의 실시예들을 수행할 수 있다.
블록(663)에서, 공유 코어 확장(shared core extension)(SCE) 판독 명령어가 복수의 코어들을 갖는 프로세서의 코어 내에서 수신된다. 다양한 양태들에서, SCE 판독 명령어가 오프코어 소스로부터(예컨대, 메인 메모리, 디스크 또는 버스 또는 상호접속으로부터) 코어에서 수신될 수 있거나, 코어 내의 다른 로직(예컨대, 명령어 캐시, 큐, 스케줄링 로직 등)으로부터 코어의 일부분에서(예컨대, 디코드 로직, 스케줄링 로직 등에서) 수신될 수 있다. SCE 판독 명령어는 코어로 하여금 공유 코어 확장 로직에 대해 이전에 행해진 호출의 상태를 판독하게 하기 위한 것이다. 공유 코어 확장 로직이 복수의 코어들에 의해 공유된다. SCE 판독 명령어는 공유 코어 확장 명령 레지스터를 표시한다.
블록(664)에서, SCE 판독 명령어에 응답하여, 공유 코어 확장 로직에 대해 이전에 행해진 호출의 상태가 판독된다. 일부 실시예들에서, 상태를 판독하는 것은 명령어에 의해 표시된 공유 코어 확장 명령 레지스터로부터 데이터를 판독하는 것을 포함한다. 일부 실시예들에서, 상태는 완료 상태를 포함할 수 있다. 예를 들어, 상태 필드(예컨대, 도 5의 상태 필드(553))가 판독될 수 있다. 일부 실시예들에서, 판독된 상태는 완료됨, 오류, 유효함 중에서 선택될 수 있지만, 본 발명의 범주가 그것으로 제한되지 않는다.
다른 실시예들에서, SCE 판독 명령어는 표시된 공유 코어 확장 명령 레지스터로부터 다른 정보를 판독할 수 있다. 이러한 정보의 예들은 (예컨대, 도 5의 진행 상황 필드(554)로부터의) 진행 상황, 출력 데이터 피연산자 또는 그의 일부분(예컨대, 필드(557)에 의해 표시됨), 및 명령 속성 정보(예컨대, 필드(555)에 의해 표시됨)를 포함하지만, 이들로 제한되지 않는다. 일부 실시예들에서, 공유 코어 확장 명령 레지스터는 SCE 판독 명령어를 수신하는 코어를 대신하여 데이터 처리를 수행하기 위한 공유 코어 확장 로직에 대한 이전의 호출에 대응한다.
도 7은 SCE 강제 종료 명령어의 실시예를 처리하는 방법(766)의 일 실시예의 블록 흐름도이다. 실시예들에서, 이 방법은 프로세서, 코어, 또는 다른 유형의 명령어 처리 장치에 의해 수행될 수 있다. 일부 실시예들에서, 방법(766)은 도 2의 프로세서(210), 또는 도 3의 코어 0(311-0), 또는 유사한 프로세서 또는 코어에 의해 수행될 수 있다. 다른 대안으로서, 방법(766)은 완전히 다른 프로세서, 코어, 또는 명령어 처리 장치에 의해 수행될 수 있다. 더욱이, 프로세서(210), 및 코어(311-0)는 방법(766)과 동일하거나, 유사하거나, 상이한 동작들 및 방법들의 실시예들을 수행할 수 있다.
블록(767)에서, 공유 코어 확장(shared core extension)(SCE) 강제 종료 명령어가 복수의 코어들을 갖는 프로세서의 코어 내에서 수신된다. 다양한 양태들에서, SCE 강제 종료 명령어가 오프코어 소스로부터(예컨대, 메인 메모리, 디스크 또는 버스 또는 상호접속으로부터) 코어에 수신될 수 있거나, 코어 내의 다른 로직(예컨대, 명령어 캐시, 큐, 스케줄링 로직 등)으로부터 코어의 일부분에(예컨대, 디코드 로직, 스케줄링 로직 등에) 수신될 수 있다. SCE 강제 종료 명령어는 코어로 하여금 공유 코어 확장 로직에 대해 이전에 행해진 호출을 강제 종료시키게 하기 위한 것이다. 공유 코어 확장 로직이 복수의 코어들에 의해 공유된다. SCE 강제 종료 명령어는 공유 코어 확장 명령 레지스터를 표시한다.
블록(768)에서, SCE 강제 종료 명령어에 응답하여, 공유 코어 확장 로직에 대해 이전에 행해진 호출이 강제 종료된다. 일부 실시예들에서, 호출을 강제 종료시키는 것은 이전에 행해진 호출에 대응하는 그리고/또는 표시된 공유 코어 확장 명령 레지스터에 대응하는 공유 코어 확장 로직에 의한 데이터 처리를 중단시키는 것을 포함할 수 있다. 일부 실시예들에서, 호출을 강제 종료시키는 것은 또한 SCE 강제 종료 명령어에 의해 표시되어 있는 점유된 공유 코어 확장 명령 레지스터를 해제시키는 것을 포함할 수 있다.
일부 실시예들에서, 차단 SCE 호출 명령어는 SCECR 해제를 기다릴 타임아웃 값(예컨대, 사이클들의 수)을 명시하거나 다른 방식으로 표시할 수 있고, 호출은 타임아웃이 경과하면 실패를 반환할 수 있다. 해제 없이 타임아웃에 도달되는 경우 및/또는 타임아웃의 만료 이전에 완료되지 않은 진행 중인 명령 실행 동안 타임아웃에 도달되는 경우 실패가 일어날 수 있다. 비-차단 호출의 경우, 공유 코어 확장 실행을 차단하기 위해 SCE 대기 명령어가 사용될 수 있다. SCE 대기 명령어도 마찬가지로 공유 코어 확장 명령 레지스터 해제를 기다릴 타임아웃 값(예컨대, 사이클들의 수)을 포함할 수 있다. 공유 코어 확장 명령 레지스터 해제 없이 타임아웃이 만료되는 경우, 실패, 오류 등이 반환될 수 있다. 일부 실시예들에서, 차단 SCE 호출 명령어 및/또는 SCE 대기 명령어의 타임아웃 값은 명령어가 명시할 수 있는 가변 파라미터로서 인코딩될 수 있다. 다른 실시예들에서, 타임아웃은 고정된 암시적인 값일 수 있다. 일부 실시예들에서, SCE 대기 명령어는 전력 소모를 감소시키기 위해 비-차단 SCE 호출 명령어와 관련하여 사용될 수 있다. 예를 들어, 차단 SCE 호출 명령어가 차단될 때 및/또는 SCE 대기 명령어가 차단될 때, 물리적 스레드는, 관련 SCE 호출이 완료될 시에 공유 코어 확장 로직이 그를 깨울 때까지, 선택적으로 일시 정지되고 슬립 상태로 될 수 있다(행해지도록 요망되는 다른 작업이 없는 것으로 가정함). 그렇지만, 이것은 선택적이고 요구되는 것은 아니다. 더욱이, 차단 SCE 호출 명령어 및/또는 SCE 대기 명령어를 통해 타임아웃 값을 표시하는 전술한 접근 방법 이외에, 예상되지 않은 또는 원하지 않는 오랜 기간 동안 실행되는 호출 또는 명령을 강제 종료시키는 다른 방법들이 또한 생각된다.
일부 실시예들에서, SCE 로직은 코어 0과 동일한 가상 메모리 상에서 동작할 수 있다. 다시 도 3을 참조하면, 코어 0(311-0)은 메모리 관리 유닛(MMU)(331)을 갖는다. MMU는 공유 코어 확장 MMU 인터페이스 로직(332)을 포함한다. MMU(331)는 공유 코어 확장 MMU 인터페이스 로직(332)을 제외하고는 실질적으로 종래의 것일 수 있다. 공유 코어 확장 로직(314)은 또한 공유 코어 확장 MMU(341)를 갖는다. SCE MMU는 코어 0의 페이지 매핑을 유지할 수 있다(예를 들어, 코어 0에 의해 캐싱 또는 보존되는 가상 또는 선형 메모리로부터 시스템 메모리로의 변환을 캐싱하거나 보존함). 코어 0의 TLB의 엔트리들에 대응하는 TLB 엔트리들을 유지하는 것에 부가하여, SCE MMU는 또한 코어들 각각에 대한 TLB 엔트리들을 유지할 수 있다. 공유 코어 확장 MMU는 코어 MMU 인터페이스 로직(342)을 갖는다. 공유 코어 확장 MMU 인터페이스 로직(332) 및 코어 MMU 인터페이스 로직(342)은 MMU(331)와 공유 코어 확장 MMU(341) 사이의 동기화(346)를 수행하기 위해 서로 인터페이스한다. 일부 실시예들에서, 공유 코어 확장 MMU 인터페이스 로직(332) 및 코어 MMU 인터페이스 로직(342)은 MMU(331)와 공유 코어 확장 MMU(341)의 동기화를 위한 하드웨어 메커니즘 또는 하드웨어 지원을 나타낼 수 있다.
일부 실시예들에서, MMU와 SCE MMU 사이의 동기화는 이 페이지 매핑에서의 일관성을 유지하기 위해 수행될 수 있다. 예를 들어, 페이지가 코어 0에 의해 무효화될 때, 코어 0은 코어 0 MMU의 대응하는 TLB 엔트리를 무효화시킬 수 있다. 일부 실시예들에서, 동기화가 또한 코어 0과 SCE 로직 사이에서 수행될 수 있고, 이 때 SCE 로직의 SCE MMU 상의 대응하는 TLB 엔트리가 또한 그에 대응하여 무효화될 수 있다. 예로서, 코어 0 상에서 실행 중인 물리적 스레드는, 프로세서 상의 버스 사이클들을 통해 SCE MMU의 대응하는 TLB를 무효화시키라고 SCE 로직에 신호하기 위해, 공유 코어 확장 MMU 인터페이스 로직(332) 및 코어 MMU 인터페이스 로직(342)에 의해 제공되는 하드웨어 인터페이스를 사용할 수 있다. 즉, 일부 실시예들에서, 공유 코어 확장 MMU(341)의 동기화는 코어 0 상에서 실행 중인 물리적 스레드 내로부터 하드웨어에 의해 수행될 수 있다. 다른 예로서, 스레드가 운영 체제에 의해 스와핑되는 경우(예컨대, 컨텍스트 전환), 스레드와 연관된 컨텍스트가 저장되고 따라서 나중에 복원될 수 있도록, SCE 로직은 컨텍스트 전환을 신호받고 및/또는 통지받을 수 있다. 일부 실시예들에서, 이러한 동기화 시그널링은 하드웨어 레벨에서 있을 수 있다(예컨대, 하드웨어 메커니즘을 통한 버스 사이클들 또는 버스 트랜잭션들을 통할 수 있음). 즉, 동기화가 소프트웨어 개입을 통하기보다는(운영 체제의 개입 없이) 하드웨어 레벨에서(예컨대, MMU 및 SCE MMU 그리고 버스 트랜잭션들의 하드웨어를 통해) 수행될 수 있다.
일부 실시예들에서, MMU(331) 및 공유 코어 확장 MMU(341)는 또한 공유 코어 확장 로직이 코어 0에 대한 호출들을 처리하고 있을 때 일어나는 페이지 폴트들을 라우팅하거나 전달하기 위해 인터페이스 로직(332, 342)을 통해 상호작용할 수 있다. 일부 실시예들에서, 공유 코어 확장 MMU는 코어 0으로부터의 호출을 처리하는 동안 일어난 페이지 폴트를 운영 체제에 통지하기 위해 코어 0을 사용할 수 있다. 이와 유사하게, 공유 코어 확장 MMU는 다른 코어들로부터의 호출들을 처리하는 동안 일어나는 페이지 폴트들을 이 다른 코어들에 통지할 수 있다. 코어들은 페이지 폴트들을 운영 체제에 통지할 수 있다. 운영 체제는 페이지 폴트가 페이지 폴트를 제공한 코어에서보다 오히려 SCE 로직에서 실제로 유래되었는지를 알고 있을 이유가 없을 수 있다. 일부 실시예들에서, 비-차단 SCE 호출 명령어에 대해, 폴트를 명시하는 코어 상에서의 명령어 포인터는 임의적일 수 있다. 일부 실시예들에서, 차단 SCE 호출 명령어에 대해, 장애가 있는 공유 코어 확장 로직에 대한 명령어 포인터는 호출 스레드(calling thread) 상에서 장애가 일어난 호출에 대응하는 SCE 호출 명령어를 가리킬 수 있다.
공유 코어 확장 로직은 기술 분야에 공지된 처리를 오프로딩(offloading)하는 다른 접근 방법들보다 다수의 장점들을 제공한다. 종래에는, 하드웨어 가속기(예컨대, 그래픽 처리 유닛) 등에 있어서, 소프트웨어 기반 패러다임이 하드웨어 가속기와 상호작용하기 위해 사용된다. 하드웨어 가속기는 흔히 소프트웨어 디바이스 드라이버에 의해 관리된다. 하드웨어 가속기의 처리를 이용하기 위해 애플리케이션에 의해 시스템 호출이 사용된다. 코어들 상에서 실행 중인 상이한 스레드들에 의한 하드웨어 가속기의 공정한 이용을 제공하기 위해 소프트웨어(예컨대, 운영 체제)의 개입이 종종 필요하다. 이러한 하드웨어 가속기와 비교하여, 공유 코어 확장 로직은 코어들의 종래의 프로그래밍 패러다임이 드라이버 기반 하드웨어 가속기 액세스의 소프트웨어 패러다임으로 전환하는 일 없이 공유 코어 확장 로직(예컨대, 범용 코어)을 이용하는 것을 가능하게 할 수 있다. 더욱이, 연관된 물리적 스레드들과 동일한 가상 메모리 상에서 SCE 로직이 동작하는 실시예들에서, 이는 데이터 복사 및/또는 데이터 마샬링(data marshaling)의 동반하는 오버헤드 없이 이용될 수 있다. 게다가, 하드웨어 가속기와 비교하여, 공유 코어 확장 로직은 일반적으로 전방으로 진행하기 위해 보다 적은 양의 열린 페이지(open page)들을 수반한다. 그에 부가하여, 하드웨어 가속기와 비교하여, 공유 코어 확장 로직은 일반적으로 명령을 제출하는 것의 지연 시간(latency) 오버헤드를 실질적으로 대략 비-추측적 코어 버스 사이클의 지연 시간으로 감소시키는 경향이 있다. 또한, SCE 로직은, 소프트웨어(예컨대, 운영 체제)의 개입을 통하기보다는, 코어들 상에서 실행 중인 상이한 스레드들 간의 공정한 또는 분산된 이용을 제공하기 위해 하드웨어 또는 다른 온프로세서(on-processor) 로직으로 된 스케줄링 유닛을 사용할 수 있다.
이상의 설명에서, 예시 및 설명의 간단함을 위해, 실시예들은 공유 코어 확장 로직(예컨대, 로직(214), 로직(314) 등)의 단일의 인스턴스를 도시하고 기술하였다. 그렇지만, 일부 실시예들에서, 2개 이상의 공유 코어 확장 로직이 있을 수 있다. 공유 코어 확장 로직 각각은 동일한 코어들 또는 상이한 코어들일 수 있거나 코어들 전부 또는 코어들 중 일부일 수 있는 다수의 코어들에 의해 공유될 수 있다. 일부 실시예들에서, (예컨대, 상이한 유형의 데이터 처리를 수행하기 위해) 상이한 유형의 공유 코어 확장 로직이 포함되고 코어들 간에 공유될 수 있다. 다른 경우에, 동일한 일반 유형의 공유 코어 확장 로직의 다수의 인스턴스들이 포함되고 코어들(예컨대, 그들의 스레드들) 모두 간에 공유될 수 있거나, 공유 코어 확장 로직 각각이 코어들의 총수의 서브셋(예컨대, 상이한 서브셋)에 의해 공유될 수 있다. 본 개시 내용의 이점을 갖는 본 기술분야의 통상의 기술자라면 잘 알 수 있듯이 다양한 구성들이 생각되고 있다.
도 5에 대해 기술된 구성요소들, 특징들, 및 구체적인 상세들이 도 3, 도 4 또는 도 6의 것들과 선택적으로 사용될 수 있다. 장치에 대해 본 명세서에 기술된 특징들 및/또는 상세들이 또한 장치에 의해 및/또는 장치에서 수행되는 본 명세서에 기술된 방법들에 선택적으로 적용된다. 예를 들어, 도 3에 대해 기술된 구성요소들, 특징들, 및 구체적인 상세들이 도 4 또는 도 6의 것들과 선택적으로 사용될 수 있다.
예시적인 코어 아키텍처들, 프로세서들, 및 컴퓨터 아키텍처들
프로세서 코어들이 상이한 방식들로, 상이한 목적들을 위해, 그리고 상이한 프로세서들에서 구현될 수 있다. 예를 들면, 이러한 코어들의 구현들은 다음과 같은 것들을 포함할 수 있다: 1) 범용 컴퓨팅을 위한 범용 순차 코어; 2) 범용 컴퓨팅을 위한 고성능 범용 비순차 코어; 3) 주로 그래픽 및/또는 과학(처리율) 컴퓨팅을 위한 특수 목적 코어. 상이한 프로세서들의 구현들은 다음과 같은 것들을 포함할 수 있다: 1) 범용 컴퓨팅을 위한 하나 이상의 범용 순차 코어들 및/또는 범용 컴퓨팅을 위한 하나 이상의 범용 비순차 코어들을 포함하는 CPU; 및 2) 주로 그래픽 및/또는 과학(처리율)을 위한 하나 이상의 특수 목적 코어들을 포함하는 코프로세서. 이러한 상이한 프로세서들은 다음과 같은 것들을 포함할 수 있는 상이한 컴퓨터 시스템 아키텍처들로 이끈다: 1) CPU와 별도의 칩 상의 코프로세서; 2) CPU와 동일한 패키지 내의 별도의 다이 상의 코프로세서; 3) CPU와 동일한 다이 상의 코프로세서(이 경우에, 이러한 코프로세서는 때때로 통합된 그래픽 및/또는 과학(처리율) 로직과 같은 특수 목적 로직이라고 하거나 특수 목적 코어라고 함); 및 4) 기술된 CPU(때때로 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)이라고 함), 전술한 코프로세서, 및 부가의 기능을 동일한 다이 상에 포함할 수 있는 시스템 온 칩(system on a chip). 예시적인 코어 아키텍처들이 다음에 기술되고, 이어서 예시적인 프로세서들 및 컴퓨터 아키텍처들에 대해 설명한다.
예시적인 코어 아키텍처들
순차 및 비순차 코어 블록도
도 8a는 본 발명의 실시예들에 따른, 예시적인 순차 파이프라인 및 예시적인 레지스터 재명명, 비순차 발행/실행 파이프라인 모두를 나타낸 블록도이다. 도 8b는 본 발명의 실시예들에 따른, 프로세서에 포함될 순차 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 재명명, 비순차 발행/실행 아키텍처 코어 모두를 나타낸 블록도이다. 도 8a 및 도 8b에서의 실선 박스들은 순차 파이프라인 및 순차 코어를 나타내는 반면, 파선 박스들의 선택적인 부가는 레지스터 재명명, 비순차 발행/실행 파이프라인 및 코어를 나타낸다. 순차 측면이 비순차 측면의 서브셋인 것을 고려하여, 비순차 측면이 기술될 것이다.
도 8a에서, 프로세서 파이프라인(800)은 페치(fetch) 스테이지(802), 길이 디코드 스테이지(804), 디코드 스테이지(806), 할당 스테이지(808), 재명명 스테이지(810), 스케줄링(디스패치(dispatch) 또는 발행이라고도 함) 스테이지(812), 레지스터 판독/메모리 판독 스테이지(814), 실행 스테이지(816), 재기입(write back)/메모리 기입 스테이지(818), 예외 처리 스테이지(822), 및 커밋(commit) 스테이지(824)를 포함한다.
도 8b는 실행 엔진 유닛(850)에 결합된 프런트 엔드 유닛(front end unit)(830) - 둘 다는 메모리 유닛(870)에 결합되어 있음 - 을 포함하는 프로세서 코어(890)를 나타낸 것이다. 코어(890)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 혼성체 또는 대안의 코어 유형일 수 있다. 또 다른 옵션으로서, 코어(890)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, GPGPU(general purpose computing graphics processing unit) 코어,그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프런트 엔드 유닛(830)은 명령어 캐시 유닛(834)에 결합된 분기 예측 유닛(832)을 포함하고, 명령어 캐시 유닛(834)은 명령어 TLB(translation lookaside buffer)(836)에 결합되고, 명령어 TLB(836)는 명령어 페치 유닛(838)에 결합되고, 및 명령어 페치 유닛(838)은 디코드 유닛(840)에 결합된다. 디코드 유닛(840)(또는 디코더)은 명령어들을 디코딩하고, 원래의 명령어들로부터 디코딩되거나, 원래의 명령어들을 다른 방식으로 반영하거나, 원래의 명령어들로부터 도출되는 하나 이상의 마이크로연산들, 마이크로코드 진입점들, 마이크로명령어들, 기타 명령어들, 또는 기타 제어 신호들을 출력으로서 발생시킬 수 있다. 디코드 유닛(840)은 각종의 상이한 메커니즘들을 사용하여 구현될 수 있다. 적당한 메커니즘들의 예들은 룩업 테이블(look-up table), 하드웨어 구현, PLA(programmable logic array), 마이크로코드 ROM(read only memory) 등을 포함하지만, 이들로 제한되지 않는다. 일 실시예에서, 코어(890)는 (예컨대, 디코드 유닛(840) 내의 또는 그렇지 않고 프런트 엔드 유닛(830) 내의) 특정의 마이크로명령어들에 대한 마이크로코드를 저장하는 마이크로코드 ROM, 또는 다른 매체를 포함한다. 디코드 유닛(840)은 실행 엔진 유닛(850) 내의 재명명/할당기 유닛(852)에 결합되어 있다.
실행 엔진 유닛(850)은 회수 유닛(retirement unit)(854) 및 하나 이상의 스케줄러 유닛(들)의 세트(856)에 결합되어 있는 재명명/할당기 유닛(852)을 포함하고 있다. 스케줄러 유닛(들)(856)은 예약 스테이션(reservations station), 중앙 명령어 윈도우(central instruction window) 등을 포함하는 임의의 수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(856)은 물리 레지스터 파일(들) 유닛(들)(858)에 결합되어 있다. 물리 레지스터 파일(들) 유닛(들)(858) 각각은 하나 이상의 물리 레지스터 파일들을 나타내고, 그 중 상이한 물리 레지스터 파일들은 스칼라 정수, 스칼라 부동 소수점, 압축 정수(packed integer), 압축 부동 소수점(packed floating point), 벡터 정수, 벡터 부동 소수점, 상태(예컨대, 실행될 다음 명령어의 주소인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 유형들을 저장한다. 일 실시예에서, 물리 레지스터 파일(들) 유닛(858)은 벡터 레지스터 유닛(vector registers unit), 기입 마스크 레지스터 유닛(write mask registers unit), 및 스칼라 레지스터 유닛(scalar registers unit)을 포함한다. 이들 레지스터 유닛은 아키텍처 벡터 레지스터들, 벡터 마스크 레지스터들, 및 범용 레지스터들을 제공할 수 있다. 레지스터 재명명 및 비순차 실행이 구현될 수 있는 다양한 방식들(예컨대, 재정렬 버퍼(들) 및 회수 레지스터 파일(들)을 사용하는 것; 장래 파일(future file)(들), 이력 버퍼(history buffer)(들), 및 회수 레지스터 파일(들)을 사용하는 것; 레지스터 맵 및 레지스터들의 풀(pool)을 사용하는 것 등)을 나타내기 위해, 물리 레지스터 파일(들) 유닛(들)(858)이 회수 유닛(854)과 중복되어 있다(overlapped). 회수 유닛(854) 및 물리 레지스터 파일(들) 유닛(들)(858)이 실행 클러스터(들)(860)에 결합되어 있다. 실행 클러스터(들)(860)는 하나 이상의 실행 유닛들(862)의 세트 및 하나 이상의 메모리 액세스 유닛들(864)의 세트를 포함한다. 실행 유닛들(862)은 다양한 유형의 데이터(예컨대, 스칼라 부동 소수점, 압축 정수, 압축 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예컨대, 시프트, 덧셈, 뺄셈, 곱셈)을 수행할 수 있다. 일부 실시예들이 특정의 기능들 또는 기능 세트들에 전용된 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 단지 하나의 실행 유닛 또는 모두가 모든 기능들을 수행하는 다수의 실행 유닛들을 포함할 수 있다. 스케줄러 유닛(들)(856), 물리 레지스터 파일(들) 유닛(들)(858), 및 실행 클러스터(들)(860)가 잠재적으로 복수개일 수 있는 것으로 도시되어 있는데, 그 이유는 특정의 실시예들이 특정의 유형의 데이터/연산에 대해 개별적인 파이프라인(예컨대, 각각이 그 자신의 스케줄러 유닛, 물리 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 스칼라 정수 파이프라인, 스칼라 부동 소수점/압축 정수/압축 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인; 개별적인 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(864)을 갖는 특정의 실시예들이 구현됨)을 생성하기 때문이다. 또한, 개별적인 파이프라인들이 사용되는 경우에, 이들 파이프라인 중 하나 이상은 비순차 발행/실행일 수 있고 나머지는 순차 발행/실행일 수 있다는 것을 잘 알 것이다.
메모리 액세스 유닛들(864)의 세트는 L2(level 2) 캐시 유닛(876)에 결합된 데이터 캐시 유닛(874)에 결합된 데이터 TLB 유닛(872)을 포함하는, 메모리 유닛(870)에 결합된다. 일 예시적인 실시예에서, 메모리 액세스 유닛들(864)은 로드 유닛(load unit), 주소 저장 유닛(store address unit), 및 데이터 저장 유닛(store data unit)을 포함할 수 있고, 이들 각각은 메모리 유닛(870) 내의 데이터 TLB 유닛(872)에 결합되어 있다. 명령어 캐시 유닛(834)은 또한 메모리 유닛(870) 내의 L2(level 2) 캐시 유닛(876)에 결합되어 있다. L2 캐시 유닛(876)은 하나 이상의 다른 레벨의 캐시에 그리고 궁극적으로 주 메모리(main memory)에 결합되어 있다.
예로서, 예시적인 레지스터 재명명, 비순차 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(800)을 구현할 수 있다: 1) 명령어 페치(838)는 페치 스테이지(802) 및 길이 디코딩 스테이지(804)를 수행함; 2) 디코드 유닛(840)은 디코드 스테이지(806)를 수행함; 3) 재명명/할당기 유닛(852)은 할당 스테이지(808) 및 재명명 스테이지(810)를 수행함; 4) 스케줄러 유닛(856)은 스케줄링 스테이지(812)를 수행함; 5) 물리 레지스터 파일(들) 유닛(들)(858) 및 메모리 유닛(870)은 레지스터 판독/메모리 판독 스테이지(814)를 수행하고; 실행 클러스터(860)는 실행 스테이지(816)를 수행함; 6) 메모리 유닛(870) 및 물리 레지스터 파일(들) 유닛(들)(858)은 재기입/메모리 기입 스테이지(818)를 수행함; 7) 다양한 유닛들이 예외 처리 스테이지(822)에 관여되어 있을 수 있음; 및 8) 회수 유닛(854) 및 물리 레지스터 파일(들) 유닛(들)(858)은 커밋 스테이지(824)를 수행함.
코어(890)는 하나 이상의 명령어 세트들(예컨대, (보다 최신의 버전에서 추가된 어떤 확장을 갖는) x86 명령어 세트; 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트; 본 명세서에 기술된 명령어(들)를 포함하는 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 (NEON 등의 선택적인 부가의 확장을 갖는) ARM 명령어 세트)을 지원할 수 있다. 일 실시예에서, 코어(890)는 패킹된 데이터 명령어 세트 확장(예컨대, AVX1, AVX2)을 지원하는 로직을 포함하고, 그로써 많은 멀티미디어 애플리케이션들에 의해 사용되는 연산들이 패킹된 데이터를 사용하여 수행될 수 있게 한다.
코어가 (2개 이상의 병렬 연산 또는 스레드 세트들을 실행하는) 멀티스레딩을 지원할 수 있고, 시분할 멀티스레딩(time sliced) 멀티스레딩, 동시 멀티스레딩(simultaneous multithreading)(단일의 물리적 코어가 물리적 코어가 동시에 멀티스레딩하고 있는 스레드들 각각에 대한 논리적 코어를 제공하는 경우), 또는 이들의 조합(예컨대, Intel® 하이퍼스레딩(Hyperthreading) 기술에서와 같은 시분할 페칭 및 디코딩과 그 후의 동시 멀티스레딩)을 포함하는 각종의 방식으로 그렇게 할 수 있다는 것을 잘 알 것이다.
레지스터 재명명이 비순차 실행과 관련하여 기술되어 있지만, 레지스터 재명명이 순차 아키텍처에서 사용될 수 있다는 것을 잘 알 것이다. 프로세서의 예시된 실시예가 또한 개별적인 명령어 캐시 유닛(834) 및 데이터 캐시 유닛(874)과 공유 L2 캐시 유닛(876)을 포함하고 있지만, 대안의 실시예들은, 예를 들어, L1(Level 1) 내부 캐시 또는 다수의 레벨의 내부 캐시와 같이, 명령어들 및 데이터 둘 다에 대한 단일의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 본 시스템은 내부 캐시와 코어 및/또는 프로세서의 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 다른 대안으로서, 모든 캐시가 코어 및/또는 프로세서의 외부에 있을 수 있다.
특정의 예시적인 순차 아키텍처 코어
도 9a 및 도 9b는 보다 구체적인 예시적인 순차 코어 아키텍처의 블록도를 나타낸 것이고, 이 코어는 칩에 있는 몇개의 로직 블록들(동일한 유형 및/또는 상이한 유형들의 다른 코어들을 포함함) 중 하나일 것이다. 로직 블록들은, 애플리케이션에 따라, 고대역폭 상호접속 네트워크(예컨대, 링 네트워크)를 통해 일부 고정 기능 로직, 메모리 I/O 인터페이스들, 및 다른 필요한 I/O 로직과 통신한다.
도 9a는 본 발명의 실시예들에 따른, 단일 프로세서 코어를, 온다이 상호접속 네트워크(902)에의 그의 접속 및 레벨 2(L2) 캐시의 그의 로컬 서브셋(904)과 함께, 나타낸 블록도이다. 일 실시예에서, 명령어 디코더(900)는 패킹된 데이터 명령어 세트 확장을 갖는 x86 명령어 세트를 지원한다. L1 캐시(906)는 스칼라 및 벡터 유닛들 내의 캐시 메모리에의 저 지연시간 액세스를 가능하게 한다. 일 실시예에서, (설계를 단순화하기 위해) 스칼라 유닛(908) 및 벡터 유닛(910)이 개별적인 레지스터 세트들(각각, 스칼라 레지스터들(912) 및 벡터 레지스터들(914))을 사용하고 이들 사이에서 전달되는 데이터가 메모리에 기입된 다음에 L1(level 1) 캐시(906)로부터 다시 판독되지만, 본 발명의 대안의 실시예들은 상이한 접근 방법을 사용할 수 있다(예컨대, 단일의 레지스터 세트를 사용하거나, 기입 및 다시 판독되는 일 없이 2개의 레지스터 파일들 간에 데이터가 전달될 수 있게 하는 통신 경로를 포함함).
L2 캐시의 로컬 서브셋(904)은, 프로세서 코어당 하나씩, 개별적인 로컬 서브셋들로 나누어져 있는 전역 L2 캐시의 일부이다. 각각의 프로세서 코어는 L2 캐시의 그 자신의 로컬 서브셋(904)에의 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독된 데이터는 그의 L2 캐시 서브셋(904)에 저장되고, 그 자신의 로컬 L2 캐시 서브셋들에 액세스하는 다른 프로세서 코어들과 병렬로 빠르게 액세스될 수 있다. 프로세서 코어에 의해 기입된 데이터는 그 자신의 L2 캐시 서브셋(904)에 저장되고, 필요한 경우, 다른 서브셋들부터 플러시된다(flushed). 링 네트워크는 공유 데이터에 대한 일관성을 보장해준다. 프로세서 코어들, L2 캐시들 및 다른 로직 블록들과 같은 에이전트들이 칩 내에서 서로 통신할 수 있게 하기 위해, 링 네트워크는 양방향이다. 각각의 링 데이터 경로는 방향당 1012 비트 폭이다.
도 9b는 본 발명의 실시예들에 따른, 도 9a에서의 프로세서 코어의 일부의 확대도이다. 도 9b는 L1 캐시(904)의 L1 데이터 캐시(906A) 부분은 물론, 벡터 유닛(910) 및 벡터 레지스터들(914)에 관한 부가 상세를 포함하고 있다. 구체적으로는, 벡터 유닛(910)은 정수, 단정도 부동 소수점, 및 배정도 부동 소수점 명령어들 중 하나 이상을 실행하는 16-와이드(16-wide) 벡터 처리 유닛(VPU)(16-와이드 ALU(928)를 참조)이다. VPU는 뒤섞기 유닛(swizzle unit)(920)에 의해 레지스터 입력들을 뒤섞는 것, 숫자 변환 유닛들(922A 및 922B)에 의한 숫자 변환, 및 메모리 입력에 대한 복제 유닛(924)에 의한 복제를 지원한다. 기입 마스크 레지스터들(926)은 얻어지는 벡터 기입들을 예측하는 것을 가능하게 한다.
통합된 메모리 제어기 및 그래픽을 갖는 프로세서
도 10은 본 발명의 실시예들에 따른, 2개 이상의 코어를 가질 수 있고, 통합된 메모리 제어기를 가질 수 있고, 통합된 그래픽을 가질 수 있는 프로세서(1000)의 블록도이다. 도 10에서의 실선 박스들은 단일의 코어(1002A), 시스템 에이전트(1010), 및 하나 이상의 버스 제어기 유닛들(1016)의 세트를 갖는 프로세서(1000)를 나타낸 것인 반면, 파선 박스들의 선택적인 부가는 다수의 코어들(1002A 내지 1002N), 시스템 에이전트 유닛(1010) 내의 하나 이상의 통합된 메모리 제어기 유닛(들)(1014)의 세트, 및 특수 목적 로직(1008)을 갖는 대안의 프로세서(1000)를 나타낸 것이다.
따라서, 프로세서(1000)의 상이한 구현들은 다음과 같은 것들을 포함할 수 있다: 1) (하나 이상의 코어들을 포함할 수 있는) 통합된 그래픽 및/또는 과학(처리율) 로직인 특수 목적 로직(1008), 그리고 하나 이상의 범용 코어들(예컨대, 범용 순차 코어들, 범용 비순차 코어들, 이 둘의 조합)인 코어들(1002A 내지 1002N)을 갖는 CPU; 2) 주로 그래픽 및/또는 과학(처리율)을 위한 다수의 특수 목적 코어들인 코어들(1002A 내지 1002N)을 갖는 코프로세서; 및 3) 많은 수의 범용 순차 코어들인 코어들(1002A 내지 1002N)을 갖는 코프로세서. 따라서, 프로세서(1000)는 범용 프로세서, 코프로세서, 또는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(general purpose graphics processing unit), 고처리율 MIC(many integrated core) 코프로세서(30개 이상의 코어들을 포함함), 임베디드 프로세서 등과 같은 특수 목적 프로세서일 수 있다. 프로세서는 하나 이상의 칩들 상에 구현될 수 있다. 프로세서(1000)는, 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은 다수의 공정 기술들 중 임의의 것을 사용하여 하나 이상의 기판들 상에 구현될 수 있고 그리고/또는 그의 일부일 수 있다.
메모리 계층구조는 코어들 내의 하나 이상의 레벨들의 캐시, 하나 이상의 공유 캐시 유닛들(1006)의 세트, 및 통합된 메모리 제어기 유닛들(1014)의 세트에 결합되어 있는 외부 메모리(도시 생략)를 포함한다. 공유 캐시 유닛들(1006)의 세트는 L2(level 2), L3(level 3), L4(level 4), 또는 기타 레벨들의 캐시 등의 하나 이상의 중간 레벨 캐시들, LLC(last level cache), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서, 링 기반 상호접속 유닛(ring based interconnect unit)(1012)은 통합된 그래픽 로직(1008), 공유 캐시 유닛들(1006)의 세트, 및 시스템 에이전트 유닛(1010)/통합된 메모리 제어기 유닛(들)(1014)을 상호접속시키는 반면, 대안의 실시예들은 이러한 유닛들을 상호접속시키는 데 임의의 수의 공지된 기법들을 사용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛들(1006)과 코어들(1002A 내지 1002N) 사이에 일관성이 유지된다.
일부 실시예들에서, 코어들(1002A 내지 1002N) 중 하나 이상은 멀티스레딩을 할 수 있다. 시스템 에이전트(1010)는 코어들(1002A 내지 1002N)을 조정하고 동작시키는 그 구성요소들을 포함한다. 시스템 에이전트 유닛(1010)은, 예를 들어, PCU(power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1002A 내지 1002N) 및 통합된 그래픽 로직(1008)의 전력 상태를 조절하는 데 필요한 로직 및 구성요소들이거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속 디스플레이들을 구동하기 위한 것이다.
코어들(1002A 내지 1002N)은 아키텍처 명령어 세트의 관점에서 동종(homogenous)이거나 이종(heterogeneous)일 수 있다; 즉, 코어들(1002A 내지 1002N) 중 2개 이상은 동일한 명령어 세트를 실행할 수 있는 반면, 다른 것들은 그 명령어 세트의 서브셋만 또는 다른 명령어 세트를 실행할 수 있다.
예시적인 컴퓨터 아키텍처들
도 11 내지 도 14는 예시적인 컴퓨터 아키텍처들의 블록도들이다. 랩톱, 데스크톱, 핸드헬드 PC, PDA(personal digital assistant), 엔지니어링 워크스테이션, 서버, 네트워크 디바이스, 네트워크 허브, 스위치, 임베디드 프로세서, DSP(digital signal processor), 그래픽 디바이스, 비디오 게임 디바이스, 셋톱 박스, 마이크로 컨트롤러, 셀폰, 휴대용 미디어 플레이어, 핸드헬드 디바이스, 및 다양한 다른 전자 디바이스들에 대한 기술 분야에 공지된 다른 시스템 설계들 및 구성들도 역시 적합하다. 일반적으로, 본 명세서에 개시되어 있는 것과 같은 프로세서 및/또는 기타 실행 로직을 포함할 수 있는 아주 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적합하다.
이제 도 11을 참조하면, 본 발명의 일 실시예에 따른 시스템(1100)의 블록도가 도시되어 있다. 시스템(1100)은 제어기 허브(1120)에 결합되어 있는 하나 이상의 프로세서들(1110, 1115)을 포함할 수 있다. 일 실시예에서, 제어기 허브(1120)는 GMCH(graphics memory controller hub)(1190) 및 IOH(Input/Output Hub)(1150)(개별적인 칩들 상에 있을 수 있음)를 포함하고; GMCH(1190)는 메모리(1140) 및 코프로세서(1145)에 결합되어 있는 메모리 및 그래픽 제어기들을 포함하며; IOH(1150)는 I/O(input/output) 디바이스들(1160)을 GMCH(1190)에 결합시킨다. 다른 대안으로서, 메모리 및 그래픽 제어기들 중 하나 또는 둘 다는 (본 명세서에 기술된 바와 같이) 프로세서 내에 통합되어 있고, 메모리(1140) 및 코프로세서(1145)는 프로세서(1110), 및 IOH(1150)를 갖는 단일 칩 내의 제어기 허브(1120)에 직접 결합되어 있다.
부가의 프로세서들(1115)의 선택적인 특성은 도 11에서 파선들로 나타내어져 있다. 각각의 프로세서(1110, 1115)는 본 명세서에 기술된 처리 코어들 중 하나 이상을 포함할 수 있고, 프로세서(1000)의 어떤 버전일 수 있다.
메모리(1140)는, 예를 들어, DRAM(dynamic random access memory), PCM(phase change memory), 또는 이 둘의 조합일 수 있다. 적어도 일 실시예에서, 제어기 허브(1120)는 FSB(frontside bus)와 같은 멀티-드롭 버스(multi-drop bus), QPI(QuickPath Interconnect)와 같은 점대점 인터페이스, 또는 유사한 접속(1195)을 통해 프로세서(들)(1110, 1115)와 통신한다.
일 실시예에서, 코프로세서(1145)는, 예를 들어, 고처리율 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 일 실시예에서, 제어기 허브(1120)는 통합된 그래픽 가속기를 포함할 수 있다.
아키텍처, 마이크로아키텍처, 열, 전력 소모 특성 등을 포함하는 다양한 성능 척도(metric of merit)들의 관점에서 물리적 자원들(1110, 1115) 간에 다양한 차이점들이 있을 수 있다.
일 실시예에서, 프로세서(1110)는 일반 유형의 데이터 처리 동작들을 제어하는 명령어들을 실행한다. 코프로세서 명령어들은 명령어들 내에 삽입되어 있을 수 있다. 프로세서(1110)는 이들 코프로세서 명령어를 부착된(attached) 코프로세서(1145)에 의해 실행되어야만 하는 유형인 것으로 인식한다. 그에 따라, 프로세서(1110)는 이 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서 버스 또는 다른 상호접속을 통해 코프로세서(1145)로 발행한다. 코프로세서(들)(1145)는 수신된 코프로세서 명령어들을 접수하고 실행한다.
이제 도 12를 참조하면, 도 12는 본 발명의 일 실시예에 따른, 제1 보다 구체적이고 예시적인 시스템(1200)의 블록도가 도시된다. 도 12에 도시된 바와 같이, 멀티프로세서 시스템(1200)은 점대점 상호접속 시스템이고, 점대점 상호접속(1250)을 통해 결합되어 있는 제1 프로세서(1270) 및 제2 프로세서(1280)를 포함하고 있다. 프로세서들(1270 및 1280) 각각은 프로세서(1000)의 어떤 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(1270 및 1280)은, 각각, 프로세서들(1110 및 1115)인 반면, 코프로세서(1238)는 코프로세서(1145)이다. 다른 실시예에서, 프로세서들(1270 및 1280)은, 각각, 프로세서(1110) 및 코프로세서(1145)이다.
프로세서들(1270 및 1280)은, 각각, 통합된 메모리 제어기(integrated memory controller)(IMC) 유닛들(1272 및 1282)을 포함하는 것으로 도시되어 있다. 프로세서(1270)는 또한, 그의 버스 제어기 유닛들의 일부로서, P-P(point-to-point) 인터페이스들(1276 및 1278)을 포함하고; 이와 유사하게, 제2 프로세서(1280)는 P-P 인터페이스들(1286 및 1288)을 포함하고 있다. 프로세서들(1270, 1280)은 P-P(point-to-point) 인터페이스 회로들(1278, 1288)을 사용하여 P-P 인터페이스(1250)를 통해 정보를 교환할 수 있다. 도 12에 도시된 바와 같이, IMC들(1272 및 1282)은 프로세서들을 각자의 메모리들, 즉 각자의 프로세서들에 로컬로 부착되어 있는 주 메모리의 일부분들일 수 있는 메모리(1232) 및 메모리(1234)에 결합시킨다.
프로세서들(1270, 1280) 각각은 점대점 인터페이스 회로들(1276, 1294, 1286, 1298)을 사용하여 개개의 P-P 인터페이스들(1252, 1254)을 통해 칩셋(1290)과 정보를 교환할 수 있다. 칩셋(1290)은 선택적으로 고성능 인터페이스(1239)를 통해 코프로세서(1238)와 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(1238)는, 예를 들어, 고처리율 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유 캐시(도시 생략)가 어느 하나의 프로세서 내에 또는 양 프로세서들의 외부에 포함되어 있을 수 있지만, P-P 상호접속을 통해 프로세서들과 접속되어 있으며, 따라서 프로세서가 저전력 모드에 있는 경우, 어느 하나의 프로세서 또는 양 프로세서들의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(1290)은 인터페이스(1296)를 통해 제1 버스(1216)에 결합될 수 있다. 일 실시예에서, 제1 버스(1216)는 PCI(Peripheral Component Interconnect) 버스일 수 있거나, PCI Express 버스 또는 다른 3세대 I/O 상호접속 버스 등의 버스일 수 있지만, 본 발명의 범주가 그것으로 제한되지 않는다.
도 12에 도시된 바와 같이, 제1 버스(1216)를 제2 버스(1220)에 결합시키는 버스 브리지(1218)와 함께, 다양한 I/O 디바이스들(1214)이 제1 버스(1216)에 결합될 수 있다. 일 실시예에서, 코프로세서들, 고처리율 MIC 프로세서들, GPGPU들, 가속기들(예컨대, 그래픽 가속기들 또는 DSP(digital signal processing) 유닛들 등), 필드 프로그램가능 게이트 어레이들, 또는 임의의 다른 프로세서와 같은 하나 이상의 부가의 프로세서(들)(1215)이 제1 버스(1216)에 결합되어 있다. 일 실시예에서, 제2 버스(1220)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(1222), 통신 디바이스들(1227), 그리고 명령어들/코드 및 데이터(1230)를 포함할 수 있는 디스크 드라이브 또는 기타 대용량 저장 디바이스와 같은 저장 유닛(1228)을 포함하는 다양한 디바이스들이 제2 버스(1220)에 결합될 수 있다. 게다가, 오디오 I/O(1224)가 제2 버스(1220)에 결합될 수 있다. 유의할 점은, 다른 아키텍처들이 가능하다는 것이다. 예를 들어, 도 12의 점대점 아키텍처 대신에, 시스템은 멀티-드롭 버스 또는 다른 이러한 아키텍처를 구현할 수 있다.
이제 도 13을 참조하면, 본 발명의 일 실시예에 따른, 제2 보다 구체적이고 예시적인 시스템(1300)의 블록도가 도시되어 있다. 도 12 및 도 13에서의 유사한 요소들은 유사한 참조 번호들을 지니고 있으며, 도 13의 다른 측면들을 불명료하게 하는 것을 피하기 위해 도 12의 특정의 측면들이 도 13으로부터 생략되어 있다.
도 13은 프로세서들(1270, 1280)이, 각각, 통합된 메모리 및 I/O 제어 로직("CL")(1272 및 1282)을 포함할 수 있다는 것을 나타내고 있다. 따라서, CL(1272, 1282)은 통합된 메모리 제어기 유닛들을 포함하고 I/O 제어 로직을 포함한다. 도 13은 메모리들(1232, 1234)이 CL(1272, 1282)에 결합되어 있을 뿐만 아니라 I/O 디바이스들(1314)이 또한 제어 로직(1272, 1282)에 결합되어 있는 것을 나타내고 있다. 레거시 I/O 디바이스들(1315)이 칩셋(1290)에 결합되어 있다.
이제 도 14를 참조하면, 본 발명의 일 실시예에 따른 SoC(1400)의 블록도가 도시되어 있다. 도 10에서의 유사한 요소들은 유사한 참조 번호를 지니고 있다. 또한, 파선 박스들은 보다 진보된 SoC들 상의 선택적인 특징들이다. 도 14에서, 상호접속 유닛(들)(1402)은 하나 이상의 코어들(1002A 내지 1002N)의 세트 및 공유 캐시 유닛(들)(1006)을 포함하는 애플리케이션 프로세서(1410); 시스템 에이전트 유닛(1010); 버스 제어기 유닛(들)(1016); 통합된 메모리 제어기 유닛(들)(1014); 통합된 그래픽 로직, 영상 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나 이상의 코프로세서들(1420)의 세트; SRAM(static random access memory) 유닛(1430); DMA(direct memory access) 유닛(1432); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(1440)에 결합되어 있다. 일 실시예에서, 코프로세서(들)(1420)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 고처리율 MIC 프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서를 포함한다.
본 명세서에 개시되어 있는 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 방식들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 저장 요소들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능 시스템들 상에서 실행되는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 12에 예시되어 있는 코드(1230)와 같은 프로그램 코드는 본 명세서에 기술된 기능들을 수행하여 출력 정보를 발생시키기 위해 입력 명령어들에 적용될 수 있다. 출력 정보가 공지된 방식으로 하나 이상의 출력 디바이스들에 적용될 수 있다. 본 출원의 목적상, 처리 시스템은, 예를 들어; 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)과 같은 설계 데이터를 포함하는 비일시적, 유형의 머신 판독가능 매체를 포함한다. 이러한 실시예들은 또한 프로그램 제품이라고 할 수 있다.
에뮬레이션(바이너리 변환, 코드 모핑 등을 포함함)
어떤 경우들에서, 명령어 변환기는 소스 명령어 세트로부터 목표 명령어 세트로 명령어를 변환하는 데 사용될 수 있다. 예를 들어, 명령어 변환기는 명령어를 코어에 의해 처리될 하나 이상의 다른 명령어들로 변환(예컨대, 정적 바이너리 변환, 동적 컴파일을 포함하는 동적 바이너리 변환을 사용함), 모핑, 에뮬레이트 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 온프로세서(on processor)에, 오프프로세서(off processor)에, 또는 일부는 온프로세서에 일부는 오프프로세서에 있을 수 있다.
도 15는 본 발명의 실시예들에 따른, 소스 명령어 세트에서의 바이너리 명령어들을 목표 명령어 세트에서의 바이너리 명령어들로 변환하기 위해 소프트웨어 명령어 변환기를 사용하는 것을 대비하는 블록도이다. 예시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 다른 대안으로서, 명령어 변환기가 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합들로 구현될 수 있다. 도 15는 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1516)에 의해 기본적으로 실행될 수 있는 x86 바이너리 코드(1506)를 발생시키기 위해 고수준 언어(1502)로 된 프로그램이 x86 컴파일러(1504)를 사용하여 컴파일될 수 있다는 것을 나타낸 것이다. 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1516)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) Intel x86 명령어 세트 코어의 명령어 세트의 상당 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서 상에서 실행되도록 되어 있는 애플리케이션들 또는 다른 소프트웨어의 오브젝트 코드 버전들을 호환가능하게 실행하거나 다른 방식으로 처리함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1504)는, 부가의 링크(linkage) 처리에 의해 또는 부가의 링크 처리 없이, 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1516) 상에서 실행될 수 있는 x86 바이너리 코드(1506)(예컨대, 오브젝트 코드)를 발생시키도록 동작가능한 컴파일러를 나타낸다. 이와 유사하게, 도 15는 적어도 하나의 x86 명령어 세트 코어를 갖지 않는 프로세서(1514)(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 그리고/또는 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 기본적으로 실행될 수 있는 대안의 명령어 세트 바이너리 코드(1510)를 발생시키기 위해 고수준 언어(1502)로 된 프로그램이 대안의 명령어 세트 컴파일러(1508)를 사용하여 컴파일될 수 있다는 것을 나타낸 것이다. 명령어 변환기(1512)는 x86 바이너리 코드(1506)를 x86 명령어 세트 코어를 갖지 않는 프로세서(1514)에 의해 기본적으로 실행될 수 있는 코드로 변환하는 데 사용된다. 이것을 할 수 있는 명령어 변환기를 만드는 것이 어렵기 때문에 변환된 코드가 대안의 명령어 세트 바이너리 코드(1510)와 동일하지 않을 가능성이 있지만; 변환된 코드는 일반적인 연산을 달성할 것이고 대안의 명령어 세트로부터의 명령어들로 이루어져 있을 것이다. 이와 같이, 명령어 변환기(1512)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스가 x86 바이너리 코드(1506)를 실행할 수 있게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
설명 및 특허청구범위에서, "결합된" 및/또는 "접속된"이라는 용어들이, 그의 파생어들과 함께, 사용되고 있다. 이들 용어가 서로에 대해 동의어로서 의도되어 있지 않다는 것을 잘 알 것이다. 오히려, 특정 실시예들에서, 2개 이상의 요소들이 서로 물리적 또는 전기적으로 직접 접촉하고 있음을 나타내기 위해, "접속된"이 사용될 수 있다. "결합된"은 2개 이상의 요소들이 물리적 또는 전기적으로 직접 접촉하고 있다는 것을 의미할 수 있다. 그렇지만, "결합된"은 또한 2개 이상의 요소들이 서로 직접 접촉하고 있지는 않지만 여전히 서로 협력하거나 상호작용하는 것도 의미할 수 있다. 예를 들어, 실행 유닛은 하나 이상의 개재된 구성요소들을 통해 레지스터 또는 디코더와 결합될 수 있다. 도면들에서, 화살표들은 결합 및/또는 접속을 나타내기 위해 사용되고 있다.
설명 및 특허청구범위에서, "로직"이라는 용어가 사용되었을 수 있다. 본 명세서에서 사용되는 바와 같이, 로직이라는 용어는 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 다양한 조합들을 포함할 수 있다. 로직의 예들은 집적 회로, ASIC(application specific integrated circuit), 아날로그 회로, 디지털 회로, PLD(programmed logic device), 명령어들을 포함하는 메모리 디바이스 등을 포함한다. 일부 실시예들에서, 로직은 트랜지스터들 및/또는 게이트들을, 잠재적으로 (예컨대, 반도체 물질로 내장되어 있는) 다른 회로 구성요소들과 함께, 포함할 수 있다.
이상의 설명에서, 실시예들의 완전한 이해를 제공하기 위해 구체적인 상세들이 기재되어 있다. 그렇지만, 다른 실시예들은 이들 구체적인 상세 없이 실시될 수 있다. 본 발명의 범주는 이상에 제공된 특정의 예들에 의해서가 아니라 이하의 특허청구범위에 의해서만 결정되어야 한다. 도면들에 예시되고 명세서에 기술된 것들에 대한 모든 등가적 관계들이 실시예들 내에 포함된다. 다른 경우들에서, 설명의 이해를 모호하게 하는 것을 피하기 위해, 공지된 회로, 구조물, 디바이스, 및 동작은 블록도 형태로 또는 상세 없이 도시되어 있다. 다수의 구성요소들이 도시되어 있지만, 어떤 경우들에서, 이들이 단일의 구성요소에 통합되어 있을 수 있다. 단일의 구성요소가 도시되고 기술되어 있지만, 어떤 경우들에서, 이 단일의 구성요소가 2개 이상의 구성요소들로 분리될 수 있다.
본 명세서에 개시된 특정의 방법들이 기본 형태로 도시되고 기술되어 있지만, 동작들이 선택적으로 방법들에 추가 및/또는 그로부터 제거될 수 있다. 그에 부가하여, 동작들의 특정의 순서가 도시되고 그리고/또는 기술되어 있을 수 있지만, 대안의 실시예들은 특정의 동작들을 상이한 순서로 수행하거나, 특정의 동작들을 결합하거나, 특정의 동작들을 중복시키거나 기타를 할 수 있다.
특정의 동작들이 하드웨어 구성요소들에 의해 수행될 수 있고 그리고/또는 명령어로 프로그램되어 있는 하드웨어 구성요소(예컨대, 프로세서, 프로세서의 일부분 등)가 동작들을 수행하게 하고 그리고/또는 초래하도록 사용될 수 있는 머신 실행가능 명령어로 구현될 수 있다. 하드웨어 구성요소는 범용 또는 특수 목적 하드웨어 구성요소를 포함할 수 있다. 동작들은 하드웨어, 소프트웨어 및/또는 펌웨어의 조합에 의해 수행될 수 있다. 하드웨어 구성요소는 명령어를 실행 및/또는 처리하고 명령어에 응답하여(예컨대, 명령어로부터 도출되는 하나 이상의 마이크로명령어들 또는 다른 제어 신호들에 응답하여) 동작을 수행도록 동작가능한 구체적인 또는 특정의 로직(예컨대, 소프트웨어 및/또는 펌웨어와 잠재적으로 결합되어 있는 회로)을 포함할 수 있다.
본 명세서 전체에 걸쳐, 예를 들어, "일 실시예", "일 실시예", "하나 이상의 실시예들", "일부 실시예들"라고 언급하는 것은 특정의 특징이 본 발명의 실시에 포함될 수 있지만, 반드시 그러할 필요는 없다는 것을 나타낸다. 이와 유사하게, 설명에서, 다양한 특징들이 때때로 개시를 간소화하기 위해 그리고 다양한 발명 양태들의 이해를 돕기 위해 단일의 실시예, 도면 또는 그의 설명에 서로 그룹화되어 있다. 그렇지만, 이러한 개시 방법이 본 발명이 각각의 청구항에 명시적으로 기재되어 있는 것보다 더 많은 특징들을 필요로 한다는 의사를 반영하는 것으로 해석되어서는 안된다. 오히려, 이하의 특허청구범위가 반영하고 있는 바와 같이, 발명의 양태들이 단일의 개시된 실시예의 모든 특징들보다 적은 특징들에 있다. 따라서, 상세한 설명 이후의 특허청구범위는 이로써 이 상세한 설명에 명확히 포함되고, 각각의 청구항은 그 자체로 본 발명의 개별적인 실시예이다.
이하의 조항들 및/또는 예들은 추가적인 실시예들에 관한 것이다. 조항들 및/또는 예들에서의 세부 사항들은 하나 이상의 실시예들에서 어디에나 사용될 수 있다.
일 실시예에서, 제1 장치는 복수의 코어들 및 복수의 코어들 각각과 결합된 공유 코어 확장 로직을 포함한다. 공유 코어 확장 로직은 복수의 코어들 각각에 의해 공유되는 공유 데이터 처리 로직을 갖는다. 제1 장치는 또한, 코어들 각각에 대해, 공유 코어 확장 호출 명령어에 응답하여, 공유 코어 확장 로직을 호출하기 위한 것인 명령어 실행 로직을 포함한다. 호출은 대응하는 코어를 대신하여 공유 데이터 처리 로직에 의해 데이터 처리를 수행하기 위한 것이다.
실시예들은 명령어 실행 로직 및 공유 코어 확장 로직과 결합된 복수의 공유 코어 확장 명령 레지스터들을 더 포함하는 제1 장치를 포함하고, 공유 코어 확장 호출 명령어는 공유 코어 확장 명령 레지스터들 중 하나 및 복수의 파라미터들을 표시하기 위한 것이다.
실시예들은 명령어 실행 로직이, 공유 코어 확장 호출 명령어에 응답하여, 표시된 파라미터들에 기초하여 표시된 공유 코어 확장 명령 레지스터에 데이터를 저장하기 위한 것인 상기 제1 장치들 중 임의의 것을 포함한다.
실시예들은 명령어 실행 로직이, 공유 코어 확장 호출 명령어에 응답하여, 표시된 공유 코어 확장 명령 레지스터에: 호출 속성 정보를 가리키는 호출 속성 포인터 필드 내의 포인터를; 입력 데이터 피연산자를 가리키는 입력 데이터 피연산자 포인터 필드 내의 포인터를; 및 출력 데이터 피연산자를 가리키는 출력 데이터 피연산자 포인터 필드 내의 포인터를 저장하기 위한 것인 상기 제1 장치들 중 임의의 것을 포함한다.
실시예들은 공유 코어 확장 로직이, 호출과 연관된 데이터 처리에 기초하여, 표시된 공유 코어 확장 명령 레지스터에: 호출의 상태를 제공하는 상태 필드를; 및 호출의 진행 상황을 제공하는 진행 상황 필드를 저장하기 위한 것인 상기 제1 장치들 중 임의의 것을 포함한다.
실시예들은 공유 코어 확장 호출 명령어가 코어들의 명령어 세트의 매크로명령어를 포함하는 상기 제1 장치들 중 임의의 것을 포함한다.
실시예들은 공유 데이터 처리 로직이 적어도 하나의 벡터 실행 유닛을 포함하는 상기 제1 장치들 중 임의의 것을 포함한다.
실시예들은 공유 데이터 처리 로직이 복수의 코어들에서 발견되지 않는 데이터 처리 로직을 포함하는 상기 제1 장치들 중 임의의 것을 포함한다.
실시예들은 명령어 실행 로직이, 공유 코어 확장 호출 명령어에 응답하여, 메모리에 적어도 하나의 출력 데이터 구조체를 생성하기 위해 루틴에 따라 메모리 내의 적어도 하나의 입력 데이터 구조체에 대해 데이터 처리를 수행하기 위해 공유 코어 확장 로직을 호출하기 위한 것인 상기 제1 장치들 중 임의의 것을 포함한다.
실시예들은 복수의 코어들 중 제1 코어의 메모리 관리 유닛(MMU); 공유 코어 확장 로직의 공유 코어 확장 MMU; 및 제1 코어의 MMU와 공유 코어 확장 MMU를 동기화시키기 위해 하드웨어로 동기화 신호들을 교환하기 위한 제1 코어의 MMU와 공유 코어 확장 MMU 사이의 하드웨어 인터페이스를 더 포함하는 상기 제1 장치들 중 임의의 것을 포함한다.
실시예들은 복수의 코어들 중 제1 코어의 메모리 관리 유닛(MMU); 공유 코어 확장 로직의 공유 코어 확장 MMU; 및 제1 코어로부터의 호출에 대응하는 페이지 폴트를 공유 코어 확장 MMU로부터 제1 코어의 MMU로 라우팅하기 위한 제1 코어의 MMU와 공유 코어 확장 MMU 사이의 인터페이스를 더 포함하는 상기 제1 장치들 중 임의의 것을 포함한다.
실시예들은 공유 데이터 처리 로직 상의 복수의 코어들로부터의 호출들을 스케줄링하기 위한 공유 코어 확장 로직을 갖는 다이 상의 하드웨어 스케줄링 로직을 더 포함하는 상기 제1 장치들 중 임의의 것을 포함한다.
일 실시예에서, 제1 방법은 복수의 코어들을 갖는 프로세서의 코어 내에서, 공유 코어 확장 호출 명령어를 수신하는 단계를 포함한다. 공유 코어 확장 호출 명령어는 코어로 하여금 복수의 코어들에 의해 공유되는 공유 코어 확장 로직을 호출하게 한다. 호출은 데이터 처리를 수행하기 위한 것이다. 공유 코어 확장 호출 명령어는 공유 코어 확장 명령 레지스터를 표시하고 수행될 데이터 처리를 명시하는 복수의 파라미터들을 표시한다. 데이터 처리를 수행하기 위해, 공유 코어 확장 호출 명령어에 응답하여, 공유 코어 확장 로직이 호출된다. 공유 코어 확장 로직을 호출하는 단계는 명령어에 의해 표시된 파라미터들에 기초하여 명령어에 의해 표시된 공유 코어 확장 명령 레지스터에 데이터를 저장하는 단계를 포함한다.
실시예들은 명령어를 수신하는 단계가 비-차단(non-blocking) 공유 코어 확장 호출 명령어를 수신하는 단계를 포함하고, 공유 코어 확장 로직이 수행될 데이터 처리를 접수한 후에 코어에서 비-차단 공유 코어 확장 호출 명령어를 회수(retiring)하는 단계를 더 포함하는 제1 방법을 포함한다.
실시예들은 명령어를 수신하는 단계가 차단(blocking) 공유 코어 확장 호출 명령어를 수신하는 단계를 포함하고, 공유 코어 확장 로직이 데이터 처리를 완료한 후에 코어에서 차단 공유 코어 확장 호출 명령어를 회수하는 단계를 더 포함하는 제1 방법을 포함한다.
실시예들은 명령어를 수신하는 단계가 차단 공유 코어 확장 호출 명령어를 수신하는 단계를 포함하고, 차단 공유 코어 확장 호출 명령어는 표시된 공유 코어 확장 명령 레지스터의 해제를 위한 타임아웃 값을 표시하는 제1 방법을 포함한다.
실시예들은 공유 코어 확장 호출 명령어가 코어의 명령어 세트의 매크로명령어를 포함하고, 공유 코어 확장 명령 레지스터가 아키텍처 레지스터를 포함하는 상기 제1 방법들 중 임의의 것을 포함한다.
실시예들은 파라미터들에 기초하여 표시된 공유 코어 확장 명령 레지스터에 데이터를 저장하는 단계가: 호출 속성 정보를 가리키는 호출 속성 포인터 필드 내의 포인터를 저장하는 단계; 입력 데이터 피연산자를 가리키는 입력 데이터 피연산자 포인터 필드 내의 포인터를 저장하는 단계; 및 출력 데이터 피연산자를 가리키는 출력 데이터 피연산자 포인터 필드 내의 포인터를 저장하는 단계를 포함하는 상기 제1 방법들 중 임의의 것을 포함한다.
실시예들은 공유 코어 확장 로직이 호출과 연관된 데이터 처리에 기초하여 표시된 공유 코어 확장 레지스터에 데이터를 저장하는 단계를 더 포함하고, 데이터를 저장하는 단계는: 호출의 상태를 제공하는 표시된 레지스터의 상태 필드 내의 상태를 저장하는 단계; 및 호출의 진행 상황을 제공하는 표시된 레지스터의 진행 상황 필드 내의 진행 상황을 저장하는 단계를 포함하는 상기 제1 방법들 중 임의의 것을 포함한다.
실시예들은 호출하는 단계가 메모리에 적어도 하나의 출력 데이터 구조체를 생성하기 위해 루틴에 따라 메모리 내의 적어도 하나의 입력 데이터 구조체에 대해 데이터 처리를 수행하기 위해 공유 코어 확장 로직을 호출하는 단계를 포함하는 상기 제1 방법들 중 임의의 것을 포함한다.
실시예들은 코어의 메모리 관리 유닛(MMU)과 공유 코어 확장 로직의 공유 코어 확장 MMU 사이에서 하드웨어로 동기화 신호들을 교환하는 것에 의해 MMU와 공유 코어 확장 MMU를 동기화시키는 단계를 더 포함하는 상기 제1 방법들 중 임의의 것을 포함한다.
실시예들은 호출에 대응하는 페이지 폴트를 공유 코어 확장 메모리 관리 유닛(MMU)으로부터 코어의 MMU로 라우팅하는 단계를 더 포함하는 상기 제1 방법들 중 임의의 것을 포함한다.
실시예들은 공유 코어 확장 호출 명령어를 수신하기 전에: 공유 코어 확장 명령 레지스터를 표시하는 공유 코어 확장 강제 종료 명령어를 수신하는 단계; 및 공유 코어 확장 강제 종료 명령어에 응답하여, 공유 코어 확장 강제 종료 명령어에 의해 표시된 공유 코어 확장 명령 레지스터에 대응하는 데이터 처리를 중단시키고, 공유 코어 확장 명령 레지스터를 해제시키는 단계를 더 포함하는 상기 제1 방법들 중 임의의 것을 포함한다.
실시예들은 공유 코어 확장 호출 명령어를 수신한 후에: 공유 코어 확장 명령 레지스터를 표시하는 공유 코어 확장 판독 명령어를 수신하는 단계; 및 공유 코어 확장 판독 명령어에 응답하여 공유 코어 확장 판독 명령어에 의해 표시된 공유 코어 확장 명령 레지스터로부터 데이터 처리 완료 상태를 판독하는 단계를 더 포함하는 상기 제1 방법들 중 임의의 것을 포함한다.
일 실시예에서, 머신 판독가능 저장 매체는, 머신에 의해 실행되는 경우, 머신으로 하여금 상기 제1 방법들 중 임의의 것을 수행하게 하는 하나 이상의 명령어를 저장한다.
일 실시예에서, 장치는 상기 제1 방법들 중 임의의 것을 수행하도록 구성되어 있거나 동작가능하다.
실시예들은 프로세서 및 프로세서와 결합된 동적 랜덤 액세스 메모리(DRAM)를 포함하는 제1 시스템을 포함한다. 이 프로세서는 복수의 코어들 및 복수의 코어들 각각과 결합된 공유 코어 확장 로직을 포함한다. 공유 코어 확장 로직은 복수의 코어들 각각에 의해 공유되는 공유 데이터 처리 로직을 갖는다. 프로세서는 또한, 코어들 각각에 대해, 공유 코어 확장 호출 명령어에 응답하여, 공유 코어 확장 로직을 호출하기 위한 것인 명령어 실행 로직을 포함한다. 호출은 대응하는 코어를 대신하여 공유 데이터 처리 로직에 의해 데이터 처리를 수행하기 위한 것이다.
실시예들은 공유 코어 확장 호출 명령어가 코어들의 명령어 세트의 매크로명령어를 포함하는 제1 시스템을 포함한다.
실시예들은 명령어 실행 로직 및 공유 코어 확장 로직과 결합된 복수의 아키텍처 공유 코어 확장 명령 레지스터들을 더 포함하고, 공유 코어 확장 호출 명령어는 공유 코어 확장 명령 레지스터들 중 하나 및 복수의 파라미터들을 표시하기 위한 것인 상기 제1 시스템들 중 임의의 것을 포함한다.

Claims (31)

  1. 장치로서,
    복수의 코어;
    상기 복수의 코어 각각과 결합되는 공유 코어 확장 로직 - 상기 공유 코어 확장 로직은 주어진 시점에 상기 복수의 코어 각각에 의해 공유되도록 동작되는 공유 데이터 처리 로직을 가짐 -; 및
    상기 코어들 각각에 대해, 공유 코어 확장 호출 명령어에 응답하여, 대응하는 코어를 대신하여 상기 공유 데이터 처리 로직에 의해 데이터 처리가 수행되도록 하기 위해 상기 공유 코어 확장 로직을 호출하는 명령어 실행 로직
    을 포함하는 장치.
  2. 제1항에 있어서, 상기 공유 코어 확장 호출 명령어는 상기 코어들의 명령어 세트의 매크로명령어를 포함하는 장치.
  3. 제1항에 있어서, 상기 명령어 실행 로직 및 상기 공유 코어 확장 로직과 결합되는 복수의 공유 코어 확장 명령 레지스터를 더 포함하고, 상기 공유 코어 확장 호출 명령어는 상기 공유 코어 확장 명령 레지스터들 중 하나 및 복수의 파라미터를 표시하는 장치.
  4. 제3항에 있어서, 상기 명령어 실행 로직은, 상기 공유 코어 확장 호출 명령어에 응답하여, 상기 표시된 파라미터들에 기초하여 상기 표시된 공유 코어 확장 명령 레지스터에 데이터를 저장하는 장치.
  5. 제4항에 있어서, 상기 명령어 실행 로직은, 상기 공유 코어 확장 호출 명령어에 응답하여, 상기 표시된 공유 코어 확장 명령 레지스터에,
    호출 속성 정보를 가리키는 호출 속성 포인터 필드 내의 포인터;
    입력 데이터 피연산자를 가리키는 입력 데이터 피연산자 포인터 필드 내의 포인터; 및
    출력 데이터 피연산자를 가리키는 출력 데이터 피연산자 포인터 필드 내의 포인터
    를 저장하는 장치.
  6. 제4항에 있어서, 상기 공유 코어 확장 로직은, 상기 호출과 연관되는 데이터 처리에 기초하여, 상기 표시된 공유 코어 확장 명령 레지스터에,
    상기 호출의 상태를 제공하는 상태 필드; 및
    상기 호출의 진행 상황을 제공하는 진행 상황 필드
    를 저장하는 장치.
  7. 제1항에 있어서, 상기 공유 데이터 처리 로직은 적어도 하나의 벡터 실행 유닛을 포함하는 장치.
  8. 제1항에 있어서, 상기 공유 데이터 처리 로직은 상기 복수의 코어에 갖춰지지 않은 데이터 처리 로직을 포함하는 장치.
  9. 제1항에 있어서, 상기 명령어 실행 로직은, 상기 공유 코어 확장 호출 명령어에 응답하여, 메모리에 적어도 하나의 출력 데이터 구조체를 생성하기 위한 루틴에 따라 메모리 내의 적어도 하나의 입력 데이터 구조체에 대해 데이터 처리가 수행되도록 하기 위해 상기 공유 코어 확장 로직을 호출하는 장치.
  10. 제1항에 있어서, 상기 복수의 코어 중 제1 코어의 메모리 관리 유닛(MMU);
    상기 공유 코어 확장 로직의 공유 코어 확장 MMU; 및
    상기 제1 코어의 상기 MMU와 상기 공유 코어 확장 MMU를 동기화시키기 위해 하드웨어로 동기화 신호들을 교환하기 위한 상기 제1 코어의 상기 MMU와 상기 공유 코어 확장 MMU 사이의 하드웨어 인터페이스
    를 더 포함하는 장치.
  11. 제1항에 있어서, 상기 복수의 코어들 중 제1 코어의 메모리 관리 유닛(MMU);
    상기 공유 코어 확장 로직의 공유 코어 확장 MMU; 및
    상기 제1 코어로부터의 호출에 대응하는 페이지 폴트(page fault)를 상기 공유 코어 확장 MMU로부터 상기 제1 코어의 상기 MMU로 라우팅하기 위한 상기 제1 코어의 상기 MMU와 상기 공유 코어 확장 MMU 사이의 인터페이스
    를 더 포함하는 장치.
  12. 제1항 내지 제11항 중 어느 한 항에 있어서, 상기 공유 데이터 처리 로직 상의 복수의 코어로부터의 호출들을 스케줄링하기 위한 상기 공유 코어 확장 로직을 갖는 다이 상의 하드웨어 스케줄링 로직을 더 포함하는 장치.
  13. 방법으로서,
    복수의 코어를 갖는 프로세서의 코어에서, 상기 코어 상에서 실행되고 있는 주어진 스레드로부터 공유 코어 확장 호출 명령어를 수신하는 단계 - 상기 공유 코어 확장 호출 명령어는, 공유 코어 확장 로직에 의해 데이터 처리가 수행되도록 하기 위해, 상기 복수의 코어에 의해 동시에 공유되도록 동작되는 상기 공유 코어 확장 로직을 상기 코어로 하여금 호출하게 하고, 상기 공유 코어 확장 호출 명령어는 공유 코어 확장 명령 레지스터를 표시하고 수행될 데이터 처리를 명시하는 복수의 파라미터들을 표시함 -; 및
    상기 주어진 스레드가 상기 코어 상에서 계속해서 실행되는 동안, 상기 데이터 처리가 수행되도록 하기 위해, 상기 공유 코어 확장 호출 명령어에 응답하여, 상기 공유 코어 확장 로직을 호출하는 단계 - 상기 공유 코어 확장 로직을 호출하는 단계는 상기 공유 코어 확장 호출 명령어에 의해 표시된 상기 파라미터들에 기초하여 상기 공유 코어 확장 호출 명령어에 의해 표시된 상기 공유 코어 확장 명령 레지스터에 데이터를 저장하는 단계를 포함함 -
    를 포함하는 방법.
  14. 제13항에 있어서, 상기 공유 코어 확장 호출 명령어는 상기 코어의 명령어 세트의 매크로명령어를 포함하고, 상기 공유 코어 확장 명령 레지스터는 아키텍처 레지스터를 포함하는 방법.
  15. 제13항에 있어서, 상기 파라미터들에 기초하여 상기 표시된 공유 코어 확장 명령 레지스터에 상기 데이터를 저장하는 단계는,
    호출 속성 정보를 가리키는 호출 속성 포인터 필드 내의 포인터를 저장하는 단계;
    입력 데이터 피연산자를 가리키는 입력 데이터 피연산자 포인터 필드 내의 포인터를 저장하는 단계; 및
    출력 데이터 피연산자를 가리키는 출력 데이터 피연산자 포인터 필드 내의 포인터를 저장하는 단계
    를 포함하는 방법.
  16. 제13항에 있어서, 상기 공유 코어 확장 로직이 상기 호출과 연관되는 데이터 처리에 기초하여 상기 표시된 공유 코어 확장 명령 레지스터에 데이터를 저장하는 단계를 더 포함하고, 상기 데이터를 저장하는 단계는,
    상기 호출의 상태를 제공하는 상기 표시된 공유 코어 확장 명령 레지스터의 상태 필드 내의 상태를 저장하는 단계; 및
    상기 호출의 진행 상황을 제공하는 상기 표시된 공유 코어 확장 명령 레지스터의 진행 상황 필드 내의 진행 상황을 저장하는 단계
    를 포함하는 방법.
  17. 제13항에 있어서, 상기 명령어를 수신하는 단계는 비-차단(non-blocking) 공유 코어 확장 호출 명령어를 수신하는 단계를 포함하고, 상기 공유 코어 확장 로직이 상기 수행될 데이터 처리를 접수한 후에 상기 코어에서 상기 비-차단 공유 코어 확장 호출 명령어를 회수(retiring)하는 단계를 더 포함하는 방법.
  18. 제13항에 있어서, 상기 명령어를 수신하는 단계는 차단(blocking) 공유 코어 확장 호출 명령어를 수신하는 단계를 포함하고, 상기 공유 코어 확장 로직이 상기 데이터 처리를 완료한 후에 상기 코어에서 상기 차단 공유 코어 확장 호출 명령어를 회수하는 단계를 더 포함하는 방법.
  19. 제13항에 있어서, 상기 명령어를 수신하는 단계는 차단 공유 코어 확장 호출 명령어를 수신하는 단계를 포함하고, 상기 차단 공유 코어 확장 호출 명령어는 상기 표시된 공유 코어 확장 명령 레지스터의 해제를 위한 타임아웃 값을 표시하는 방법.
  20. 제13항에 있어서, 호출하는 단계는 메모리에 적어도 하나의 출력 데이터 구조체를 생성하기 위한 루틴에 따라 메모리 내의 적어도 하나의 입력 데이터 구조체에 대해 데이터 처리가 수행되도록 하기 위해 상기 공유 코어 확장 로직을 호출하는 단계를 포함하는 방법.
  21. 제13항에 있어서, 상기 코어의 메모리 관리 유닛(MMU)과 상기 공유 코어 확장 로직의 공유 코어 확장 MMU 사이에서 하드웨어로 동기화 신호들을 교환하는 것에 의해 상기 MMU와 상기 공유 코어 확장 MMU를 동기화시키는 단계를 더 포함하는 방법.
  22. 제13항에 있어서, 상기 호출에 대응하는 페이지 폴트를 공유 코어 확장 메모리 관리 유닛(MMU)으로부터 상기 코어의 MMU로 라우팅하는 단계를 더 포함하는 방법.
  23. 시스템으로서,
    프로세서; 및
    상기 프로세서와 결합되는 동적 랜덤 액세스 메모리(DRAM)
    를 포함하고,
    상기 프로세서는,
    복수의 코어;
    상기 복수의 코어 각각과 결합되는 공유 코어 확장 로직 - 상기 공유 코어 확장 로직은 주어진 시점에 상기 복수의 코어 각각에 의해 공유되도록 동작되는 공유 데이터 처리 로직을 가짐 -; 및
    상기 코어들 각각에 대해, 대응하는 코어 상에서 실행되고 있을 스레드로부터 수신되는 공유 코어 확장 호출 명령어에 응답하여, 상기 스레드가 상기 대응하는 코어 상에서 계속해서 실행되는 동안 상기 대응하는 코어를 대신하여 상기 공유 데이터 처리 로직에 의해 데이터 처리가 수행되도록 하기 위해 상기 공유 코어 확장 로직을 호출하는 명령어 실행 로직을 포함하는 시스템.
  24. 제23항에 있어서, 상기 공유 코어 확장 호출 명령어는 상기 코어들의 명령어 세트의 매크로명령어를 포함하는 시스템.
  25. 제23항에 있어서, 상기 명령어 실행 로직 및 상기 공유 코어 확장 로직과 결합되는 복수의 아키텍처 공유 코어 확장 명령 레지스터를 더 포함하고, 상기 공유 코어 확장 호출 명령어는 상기 공유 코어 확장 명령 레지스터들 중 하나 및 복수의 파라미터들을 표시하는 시스템.
  26. 제1항에 있어서, 코어와 상기 공유 코어 확장 로직 사이의 컨텍스트 전환들을 트리거하는 코어 예외 조건들 및 운영 체제 선점을 라우팅하는 하드웨어 인터페이스를 더 포함하는 장치.
  27. 제1항 내지 제11항 중 어느 한 항에 있어서, 상기 공유 코어 확장 호출 명령어를 제공하였을 스레드는 상기 데이터 처리가 상기 대응하는 코어를 대신하여 상기 공유 데이터 처리 로직에 의해 수행되는 동안 상기 대응하는 코어 상에서 계속해서 실행되도록 허용되고, 상기 공유 코어 확장 로직은 예측 실행(speculative execution)에 대한 지원을 제공하지 않지만 상기 코어들 각각은 예측 실행에 대한 지원을 제공하는, 장치.
  28. 장치로서,
    복수의 코어;
    상기 복수의 코어 각각과 결합되는 공유 코어 확장 로직 - 상기 공유 코어 확장 로직은 상기 복수의 코어 내에 갖춰지지 않고 상기 복수의 코어 각각에 의해 동시에 공유되도록 동작되는 공유 데이터 처리 로직을 가지고, 상기 공유 코어 확장 로직은 예측 실행에 대한 지원을 제공하지 않지만 상기 코어들 각각은 예측 실행에 대한 지원을 제공함 -;
    상기 코어들 각각 및 상기 공유 코어 확장 로직과 결합되고 아키텍처 레지스터인 적어도 하나의 공유 코어 확장 명령 레지스터; 및
    상기 코어들 각각에 대해, 대응하는 코어 상에서 실행되고 있을 주어진 스레드로부터 수신되는 상기 코어들 각각의 명령어 세트의 공유 코어 확장 호출 명령어에 응답하여, 상기 주어진 스레드가 상기 대응하는 코어 상에서 계속해서 실행되는 동안 대응하는 코어를 대신하여 상기 공유 데이터 처리 로직에 의해 데이터 처리가 수행되도록 하기 위해 상기 공유 코어 확장 호출 명령어에 의해 표시되는 상기 적어도 하나의 공유 코어 확장 명령 레지스터를 통해 상기 공유 코어 확장 로직을 호출하는 명령어 실행 로직
    을 포함하는 장치.
  29. 장치로서,
    복수의 코어;
    주어진 시점에 상기 복수의 코어 각각과 데이터 처리 로직을 공유하는 공유 코어 확장 수단; 및
    공유 코어 확장 호출 명령어에 응답하여, 대응하는 코어를 대신하여 상기 데이터 처리 로직에 의해 데이터 처리가 수행되도록 하기 위해 상기 공유 코어 확장 수단을 호출하기 위한, 상기 코어들 각각 내의, 명령어 실행 수단
    을 포함하는 장치.
  30. 장치로서,
    복수의 코어;
    상기 복수의 코어 각각과 결합되는 제1 로직 - 상기 제1 로직은 주어진 시점에 상기 복수의 코어 각각에 의해 공유되도록 동작되는 제2 로직을 가짐 -; 및
    상기 코어들 각각에 대해, 명령어에 응답하여, 대응하는 코어를 대신하여 상기 제2 로직에 의해 데이터 처리가 수행되도록 하기 위해 상기 제1 로직을 호출하는 제3 로직
    을 포함하는 장치.
  31. 제30항에 있어서, 상기 명령어는 상기 코어들의 명령어 세트의 매크로명령어를 포함하는 장치.
KR1020167033623A 2012-09-27 2013-06-12 다수의 코어들, 공유 코어 확장 로직, 및 공유 코어 확장 이용 명령어들을 갖는 프로세서 KR101783576B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/629,460 US9582287B2 (en) 2012-09-27 2012-09-27 Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
US13/629,460 2012-09-27
PCT/US2013/045501 WO2014051736A1 (en) 2012-09-27 2013-06-12 Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020157001680A Division KR20150023852A (ko) 2012-09-27 2013-06-12 다수의 코어들, 공유 코어 확장 로직, 및 공유 코어 확장 이용 명령어들을 갖는 프로세서

Publications (2)

Publication Number Publication Date
KR20160141001A true KR20160141001A (ko) 2016-12-07
KR101783576B1 KR101783576B1 (ko) 2017-09-29

Family

ID=50340107

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020167033623A KR101783576B1 (ko) 2012-09-27 2013-06-12 다수의 코어들, 공유 코어 확장 로직, 및 공유 코어 확장 이용 명령어들을 갖는 프로세서
KR1020157001680A KR20150023852A (ko) 2012-09-27 2013-06-12 다수의 코어들, 공유 코어 확장 로직, 및 공유 코어 확장 이용 명령어들을 갖는 프로세서

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020157001680A KR20150023852A (ko) 2012-09-27 2013-06-12 다수의 코어들, 공유 코어 확장 로직, 및 공유 코어 확장 이용 명령어들을 갖는 프로세서

Country Status (7)

Country Link
US (6) US9582287B2 (ko)
JP (3) JP6240964B2 (ko)
KR (2) KR101783576B1 (ko)
CN (3) CN115858017A (ko)
DE (1) DE112013004751T5 (ko)
GB (2) GB2568816B8 (ko)
WO (1) WO2014051736A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102644719B1 (ko) * 2023-04-07 2024-03-08 메티스엑스 주식회사 다중 스레드의 비동기적인 실행이 가능한 매니코어 시스템

Families Citing this family (75)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US9448847B2 (en) 2011-07-15 2016-09-20 Throughputer, Inc. Concurrent program execution optimization
US9582287B2 (en) * 2012-09-27 2017-02-28 Intel Corporation Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
US9483263B2 (en) * 2013-03-26 2016-11-01 Via Technologies, Inc. Uncore microcode ROM
US9552205B2 (en) * 2013-09-27 2017-01-24 Intel Corporation Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions
WO2015185071A1 (en) * 2014-06-04 2015-12-10 Giesecke & Devrient Gmbh Method for enhanced security of computational device with multiple cores
US20160170767A1 (en) * 2014-12-12 2016-06-16 Intel Corporation Temporary transfer of a multithreaded ip core to single or reduced thread configuration during thread offload to co-processor
US10088881B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude I/O-dependent load replays in an out-of-order processor
US10108420B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor
US10114794B2 (en) 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
WO2016097792A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude load replays dependent on write combining memory space access in out-of-order processor
US10209996B2 (en) 2014-12-14 2019-02-19 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
US10095514B2 (en) 2014-12-14 2018-10-09 Via Alliance Semiconductor Co., Ltd Mechanism to preclude I/O-dependent load replays in an out-of-order processor
US10228944B2 (en) 2014-12-14 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
EP3055768B1 (en) 2014-12-14 2018-10-31 VIA Alliance Semiconductor Co., Ltd. Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
US10127046B2 (en) 2014-12-14 2018-11-13 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
WO2016097793A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on off-die control element access in out-of-order processor
WO2016097811A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on fuse array access in out-of-order processor
US10146539B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
WO2016097815A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude x86 special bus cycle load replays in out-of-order processor
US9703359B2 (en) 2014-12-14 2017-07-11 Via Alliance Semiconductor Co., Ltd. Power saving mechanism to reduce load replays in out-of-order processor
US10175984B2 (en) * 2014-12-14 2019-01-08 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
WO2016097790A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude non-core cache-dependent load replays in out-of-order processor
US10114646B2 (en) 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
US10120689B2 (en) 2014-12-14 2018-11-06 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US10108421B2 (en) * 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared ram-dependent load replays in an out-of-order processor
US9645827B2 (en) 2014-12-14 2017-05-09 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on page walks in an out-of-order processor
US10089112B2 (en) * 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
US9804845B2 (en) 2014-12-14 2017-10-31 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor
US10108429B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared RAM-dependent load replays in an out-of-order processor
US10083038B2 (en) 2014-12-14 2018-09-25 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on page walks in an out-of-order processor
US10146540B2 (en) * 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor
WO2016097797A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10108428B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor
US9569267B2 (en) 2015-03-16 2017-02-14 Intel Corporation Hardware-based inter-device resource sharing
US9747108B2 (en) 2015-03-27 2017-08-29 Intel Corporation User-level fork and join processors, methods, systems, and instructions
US10417248B2 (en) * 2015-09-01 2019-09-17 Sap Se Field extension in database system
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10019380B2 (en) 2015-09-25 2018-07-10 Qualcomm Incorporated Providing memory management functionality using aggregated memory management units (MMUs)
US20170262291A1 (en) * 2016-03-09 2017-09-14 Mediatek Inc. Heterogeneous computing system with a shared computing unit and separate memory controls
US10901940B2 (en) 2016-04-02 2021-01-26 Intel Corporation Processors, methods, systems, and instructions to atomically store to memory data wider than a natively supported data width
US20170371662A1 (en) * 2016-06-23 2017-12-28 Intel Corporation Extension of register files for local processing of data in computing environments
US10628352B2 (en) * 2016-07-19 2020-04-21 Nxp Usa, Inc. Heterogeneous multi-processor device and method of enabling coherent data access within a heterogeneous multi-processor device
CN106371807B (zh) * 2016-08-30 2019-03-19 华为技术有限公司 一种扩展处理器指令集的方法及装置
US10565670B2 (en) * 2016-09-30 2020-02-18 Intel Corporation Graphics processor register renaming mechanism
US11531552B2 (en) 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US10489877B2 (en) * 2017-04-24 2019-11-26 Intel Corporation Compute optimization mechanism
US10474458B2 (en) * 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
KR102277728B1 (ko) * 2017-07-31 2021-07-14 삼성전자주식회사 데이터 저장 시스템, 데이터 저장 시스템의 데이터 저장 방법, 및 솔리드 스테이트 드라이브의 제조 방법
RU2653301C1 (ru) * 2017-10-02 2018-05-07 федеральное государственное бюджетное образовательное учреждение высшего образования "Пермский национальный исследовательский политехнический университет" Программируемое логическое устройство
KR102498582B1 (ko) * 2018-02-26 2023-02-14 에스케이하이닉스 주식회사 파티션 패턴들을 가진 이미지 센서
WO2019202371A1 (en) * 2018-04-16 2019-10-24 Badenhorst Emile A processor and a method of operating a processor
JP7103556B2 (ja) 2018-05-15 2022-07-20 ホアウェイ・テクノロジーズ・カンパニー・リミテッド アンテナシステム及び端末デバイス
CN110825436B (zh) * 2018-08-10 2022-04-29 昆仑芯(北京)科技有限公司 应用于人工智能芯片的计算方法和人工智能芯片
GB2579617B (en) * 2018-12-06 2021-01-27 Advanced Risc Mach Ltd An apparatus and method for handling exception causing events
KR101996842B1 (ko) 2018-12-26 2019-07-08 (주)자람테크놀로지 사용자 정의 명령어 셋을 지원하는 하드웨어 고속 연산 결합형 risc-v 기반 연산 장치 및 그 방법
KR20210003370A (ko) 2019-07-02 2021-01-12 삼성전자주식회사 하드웨어 로직을 이용하여 통신 오버헤드를 감소시킨 스토리지 장치
US11169862B2 (en) * 2019-08-09 2021-11-09 Ciena Corporation Normalizing messaging flows in a microservice architecture
US10910048B1 (en) * 2020-01-16 2021-02-02 Micron Technology, Inc. Extended memory communication
US11586439B2 (en) 2020-10-20 2023-02-21 Micron Technology, Inc. Detecting infinite loops in a programmable atomic transaction
US11693690B2 (en) 2020-10-20 2023-07-04 Micron Technology, Inc. Method of completing a programmable atomic transaction by ensuring memory locks are cleared
US11740929B2 (en) 2020-10-20 2023-08-29 Micron Technology, Inc. Registering a custom atomic operation with the operating system
US11403023B2 (en) 2020-10-20 2022-08-02 Micron Technology, Inc. Method of organizing a programmable atomic unit instruction memory
US11436187B2 (en) * 2020-10-20 2022-09-06 Micron Technology, Inc. Method of notifying a process or programmable atomic operation traps
CN112015522B (zh) * 2020-11-02 2021-02-05 鹏城实验室 系统功能扩展方法、装置及计算机可读存储介质
US20220276914A1 (en) * 2021-03-01 2022-09-01 Nvidia Corporation Interface for multiple processors
CN115080158A (zh) * 2021-03-12 2022-09-20 Oppo广东移动通信有限公司 界面显示方法、装置、终端设备及计算机可读存储介质
CN115344244A (zh) * 2021-05-14 2022-11-15 瑞昱半导体股份有限公司 处理程序语言函数的装置及方法
US20230102584A1 (en) * 2021-09-24 2023-03-30 Apple Inc. Systems and Methods for Multi-Core Image Encoding
US20230127793A1 (en) * 2021-10-27 2023-04-27 SambaNova Systems, Inc. Force Quit of Reconfigurable Processor
CN116049035B (zh) * 2022-12-27 2024-02-09 合芯科技有限公司 一种缓存一致性的验证和调试的实现方法
CN117171266B (zh) * 2023-08-28 2024-05-14 北京逐风科技有限公司 一种数据同步方法、装置、设备和存储介质
CN117311817B (zh) * 2023-11-30 2024-03-08 上海芯联芯智能科技有限公司 一种协处理器控制方法、装置、设备及存储介质

Family Cites Families (80)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5840214B2 (ja) * 1979-06-26 1983-09-03 株式会社東芝 計算機システム
JPS6435647A (en) * 1987-07-31 1989-02-06 Hitachi Ltd Data processing system
JPH0564862A (ja) 1991-02-27 1993-03-19 Oji Yuka Synthetic Paper Co Ltd 鉛筆筆記性及び印刷性に優れた合成紙
US5530881A (en) 1991-06-06 1996-06-25 Hitachi, Ltd. Vector processing apparatus for processing different instruction set architectures corresponding to mingled-type programs and separate-type programs
JPH05197743A (ja) 1991-06-06 1993-08-06 Hitachi Ltd ベクトル処理装置
JP3147727B2 (ja) * 1995-08-31 2001-03-19 松下電器産業株式会社 情報処理装置及びその制御方法
US6148395A (en) 1996-05-17 2000-11-14 Texas Instruments Incorporated Shared floating-point unit in a single chip multiprocessor
US6542645B1 (en) 1997-07-15 2003-04-01 Silverbrook Research Pty Ltd Adaptive tracking of dots in optical storage system using ink dots
US6704871B1 (en) * 1997-09-16 2004-03-09 Safenet, Inc. Cryptographic co-processor
US6226734B1 (en) * 1998-06-10 2001-05-01 Compaq Computer Corporation Method and apparatus for processor migration from different processor states in a multi-processor computer system
DE69919059T2 (de) * 1998-02-04 2005-01-27 Texas Instruments Inc., Dallas Datenverarbeitungssytem mit einem digitalen Signalprozessor und einem Koprozessor und Datenverarbeitungsverfahren
US6526430B1 (en) * 1999-10-04 2003-02-25 Texas Instruments Incorporated Reconfigurable SIMD coprocessor architecture for sum of absolute differences and symmetric filtering (scalable MAC engine for image processing)
US6785765B1 (en) * 2000-06-30 2004-08-31 Micron Technology, Inc. Status register to improve initialization of a synchronous memory
JP2002073332A (ja) 2000-08-25 2002-03-12 Sanyo Electric Co Ltd 演算実行装置及び方法
US6829697B1 (en) 2000-09-06 2004-12-07 International Business Machines Corporation Multiple logical interfaces to a shared coprocessor resource
JP2002278753A (ja) 2001-03-21 2002-09-27 Rohm Co Ltd データ処理システム
US6898691B2 (en) * 2001-06-06 2005-05-24 Intrinsity, Inc. Rearranging data between vector and matrix forms in a SIMD matrix processor
US6922716B2 (en) * 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US6900803B2 (en) * 2002-03-12 2005-05-31 Sun Microsystems, Inc. Method for rasterizing graphics for optimal tiling performance
GB2392742B (en) * 2002-09-04 2005-10-19 Advanced Risc Mach Ltd Synchronisation between pipelines in a data processing apparatus
JP2004234420A (ja) 2003-01-31 2004-08-19 Mitsubishi Electric Corp 割り込み制御方式及び割り込み制御方法
US20040202326A1 (en) * 2003-04-10 2004-10-14 Guanrong Chen System and methods for real-time encryption of digital images based on 2D and 3D multi-parametric chaotic maps
US20040268093A1 (en) * 2003-06-26 2004-12-30 Samra Nicholas G Cross-thread register sharing technique
CA2443347A1 (en) * 2003-09-29 2005-03-29 Pleora Technologies Inc. Massively reduced instruction set processor
US7174469B2 (en) * 2003-09-30 2007-02-06 International Business Machines Corporation Processor power and energy management
US8006074B1 (en) * 2003-12-24 2011-08-23 Altera Corporation Methods and apparatus for executing extended custom instructions
US8984517B2 (en) * 2004-02-04 2015-03-17 Intel Corporation Sharing idled processor execution resources
US7328230B2 (en) * 2004-03-26 2008-02-05 Intel Corporation SIMD four-data element average instruction
JP2006048661A (ja) * 2004-07-06 2006-02-16 Matsushita Electric Ind Co Ltd プロセッサとコプロセッサとの間でのデータ転送を制御する演算処理装置
US7395410B2 (en) * 2004-07-06 2008-07-01 Matsushita Electric Industrial Co., Ltd. Processor system with an improved instruction decode control unit that controls data transfer between processor and coprocessor
US7929518B2 (en) 2004-07-15 2011-04-19 Broadcom Corporation Method and system for a gigabit Ethernet IP telephone chip with integrated DDR interface
US20060179273A1 (en) 2005-02-09 2006-08-10 Advanced Micro Devices, Inc. Data processor adapted for efficient digital signal processing and method therefor
US7543119B2 (en) * 2005-02-10 2009-06-02 Richard Edward Hessel Vector processor
US7996659B2 (en) * 2005-06-06 2011-08-09 Atmel Corporation Microprocessor instruction that allows system routine calls and returns from all contexts
JP2007156824A (ja) 2005-12-05 2007-06-21 Nec Electronics Corp プロセッサシステム、タスク制御方法
US9189291B2 (en) * 2005-12-12 2015-11-17 International Business Machines Corporation Sharing a kernel of an operating system among logical partitions
US20070139424A1 (en) * 2005-12-19 2007-06-21 Ivo Tousek DSP System With Multi-Tier Accelerator Architecture and Method for Operating The Same
DE102005062810B4 (de) * 2005-12-28 2019-06-06 Siemens Aktiengesellschaft Verfahren zum Ansteuern einer Geräte- und Maschinenbaugruppenanordnung
US20080177979A1 (en) * 2006-03-01 2008-07-24 Gheorghe Stefan Hardware multi-core processor optimized for object oriented computing
US8595744B2 (en) * 2006-05-18 2013-11-26 Oracle America, Inc. Anticipatory helper thread based code execution
US7647475B2 (en) * 2006-09-06 2010-01-12 Mips Technologies, Inc. System for synchronizing an in-order co-processor with an out-of-order processor using a co-processor interface store data queue
JP4476267B2 (ja) 2006-10-06 2010-06-09 株式会社日立製作所 プロセッサ及びデータ転送ユニット
US8447957B1 (en) * 2006-11-14 2013-05-21 Xilinx, Inc. Coprocessor interface architecture and methods of operating the same
US7512723B2 (en) * 2006-12-29 2009-03-31 Freescale Semiconductor, Inc. Queued interface devices, multi-core peripheral systems, and methods for sharing a peripheral in a multi-core system
US20080163183A1 (en) * 2006-12-29 2008-07-03 Zhiyuan Li Methods and apparatus to provide parameterized offloading on multiprocessor architectures
US8161482B1 (en) * 2007-04-13 2012-04-17 Marvell International Ltd. Power optimization for multi-core devices
EP2015174B1 (en) * 2007-06-21 2018-03-14 Imsys AB Microprogrammed processor having multiple processor cores using time-shared access to a microprogram control store
US8122229B2 (en) * 2007-09-12 2012-02-21 Convey Computer Dispatch mechanism for dispatching instructions from a host processor to a co-processor
US8095735B2 (en) * 2008-08-05 2012-01-10 Convey Computer Memory interleave for heterogeneous computing
KR101360191B1 (ko) * 2007-08-24 2014-02-07 삼성전자주식회사 코어스 그레인 어레이를 공유하는 방법 및 그 방법을이용한 프로세서
US8694758B2 (en) * 2007-12-27 2014-04-08 Intel Corporation Mixing instructions with different register sizes
CN102067088A (zh) 2008-06-19 2011-05-18 松下电器产业株式会社 多处理器
US7930519B2 (en) * 2008-12-17 2011-04-19 Advanced Micro Devices, Inc. Processor with coprocessor interfacing functional unit for forwarding result from coprocessor to retirement unit
US8307367B2 (en) * 2009-03-05 2012-11-06 International Business Machines Corporation Smart scheduling of automatic partition migration by the use of timers
WO2010123765A2 (en) 2009-04-20 2010-10-28 Henkel Corporation Thin bond line semiconductor packages
US9208084B2 (en) * 2009-06-29 2015-12-08 Oracle America, Inc. Extended main memory hierarchy having flash memory for page fault handling
JP2011034189A (ja) 2009-07-30 2011-02-17 Renesas Electronics Corp ストリームプロセッサ及びそのタスク管理方法
US8452926B2 (en) * 2009-09-02 2013-05-28 Texas Instruments Incorporated Memory sharing arrangement
US8566836B2 (en) * 2009-11-13 2013-10-22 Freescale Semiconductor, Inc. Multi-core system on chip
US9367462B2 (en) * 2009-12-29 2016-06-14 Empire Technology Development Llc Shared memories for energy efficient multi-core processors
JP2011148920A (ja) 2010-01-22 2011-08-04 Sumitomo Chemical Co Ltd ポリプロピレン樹脂組成物及びポリプロピレン樹脂製フィルム
US8615644B2 (en) * 2010-02-19 2013-12-24 International Business Machines Corporation Processor with hardware thread control logic indicating disable status when instructions accessing shared resources are completed for safe shared resource condition
US9047079B2 (en) 2010-02-19 2015-06-02 International Business Machines Corporation Indicating disabled thread to other threads when contending instructions complete execution to ensure safe shared resource condition
US8533719B2 (en) 2010-04-05 2013-09-10 Oracle International Corporation Cache-aware thread scheduling in multi-threaded systems
US20110249744A1 (en) * 2010-04-12 2011-10-13 Neil Bailey Method and System for Video Processing Utilizing N Scalar Cores and a Single Vector Core
WO2011130604A1 (en) * 2010-04-16 2011-10-20 Massachusetts Institute Of Technology Execution migration
US8751833B2 (en) * 2010-04-30 2014-06-10 Arm Limited Data processing system
CN102934102A (zh) * 2010-05-26 2013-02-13 日本电气株式会社 多处理器系统、执行控制方法和执行控制程序
US8612730B2 (en) * 2010-06-08 2013-12-17 International Business Machines Corporation Hardware assist thread for dynamic performance profiling
US8359453B2 (en) * 2010-09-13 2013-01-22 International Business Machines Corporation Real address accessing in a coprocessor executing on behalf of an unprivileged process
US8904115B2 (en) * 2010-09-28 2014-12-02 Texas Instruments Incorporated Cache with multiple access pipelines
US9176794B2 (en) 2010-12-13 2015-11-03 Advanced Micro Devices, Inc. Graphics compute process scheduling
US8917279B2 (en) 2011-01-24 2014-12-23 Nec Laboratories America, Inc. Method and system to dynamically bind and unbind applications on a general purpose graphics processing unit
US8839057B2 (en) * 2011-02-03 2014-09-16 Arm Limited Integrated circuit and method for testing memory on the integrated circuit
US9471532B2 (en) * 2011-02-11 2016-10-18 Microsoft Technology Licensing, Llc Remote core operations in a multi-core computer
JP5870994B2 (ja) 2011-03-04 2016-03-01 日本電気株式会社 デッドロック回避方法、デッドロック回避機構
US8683175B2 (en) * 2011-03-15 2014-03-25 International Business Machines Corporation Seamless interface for multi-threaded core accelerators
US9141166B2 (en) * 2011-12-13 2015-09-22 Intel Corporation Method, apparatus, and system for energy efficiency and energy conservation including dynamic control of energy consumption in power domains
WO2013147828A1 (en) 2012-03-30 2013-10-03 Intel Corporation Preempting fixed function media devices
US9582287B2 (en) 2012-09-27 2017-02-28 Intel Corporation Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102644719B1 (ko) * 2023-04-07 2024-03-08 메티스엑스 주식회사 다중 스레드의 비동기적인 실행이 가능한 매니코어 시스템

Also Published As

Publication number Publication date
US11494194B2 (en) 2022-11-08
US10901748B2 (en) 2021-01-26
CN115858017A (zh) 2023-03-28
GB2568816A8 (en) 2019-06-19
GB201816776D0 (en) 2018-11-28
GB201500450D0 (en) 2015-02-25
GB2568816B8 (en) 2020-07-08
GB2568816A (en) 2019-05-29
WO2014051736A1 (en) 2014-04-03
KR101783576B1 (ko) 2017-09-29
GB2568816B (en) 2020-05-13
US20220004391A1 (en) 2022-01-06
US10061593B2 (en) 2018-08-28
JP2017224342A (ja) 2017-12-21
GB2520852B (en) 2020-05-13
JP2019050033A (ja) 2019-03-28
CN109375949B (zh) 2023-05-16
JP7052170B2 (ja) 2022-04-12
US20140089635A1 (en) 2014-03-27
CN109375949A (zh) 2019-02-22
KR20150023852A (ko) 2015-03-05
US20230052630A1 (en) 2023-02-16
CN104603748A (zh) 2015-05-06
US20170147353A1 (en) 2017-05-25
US10963263B2 (en) 2021-03-30
GB2520852A (en) 2015-06-03
DE112013004751T5 (de) 2015-09-03
US9582287B2 (en) 2017-02-28
JP6240964B2 (ja) 2017-12-06
JP2015532990A (ja) 2015-11-16
US20190012178A1 (en) 2019-01-10
US20190114176A1 (en) 2019-04-18
CN104603748B (zh) 2018-10-02

Similar Documents

Publication Publication Date Title
US11494194B2 (en) Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
JP6708335B2 (ja) ユーザレベルの分岐及び結合を行うプロセッサ、方法、システム、及び命令
US20210326131A1 (en) Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
CN106648843B (zh) 用于改善连续的事务性存储器区的吞吐量的系统、方法和装置
JP6143872B2 (ja) 装置、方法、およびシステム
CN114003288A (zh) 用于将比原生支持的数据宽度更宽的数据原子地存储到存储器的处理器、方法、系统和指令
CN106293626B (zh) 持久性提交处理器、方法、装置、制品和电子设备
CN108885586B (zh) 用于以有保证的完成将数据取出到所指示的高速缓存层级的处理器、方法、系统和指令
JP5985526B2 (ja) システムコールのためのロバスト且つ高性能な命令
US20150134932A1 (en) Structure access processors, methods, systems, and instructions
CN110554887A (zh) 间接存储器提取器
WO2018005095A1 (en) Apparatuses, methods, and systems for granular and adaptive hardware transactional synchronization

Legal Events

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