KR20160124267A - 가속기들의 낮은-레이턴시 인보크를 위한 장치 및 방법 - Google Patents
가속기들의 낮은-레이턴시 인보크를 위한 장치 및 방법 Download PDFInfo
- Publication number
- KR20160124267A KR20160124267A KR1020167029367A KR20167029367A KR20160124267A KR 20160124267 A KR20160124267 A KR 20160124267A KR 1020167029367 A KR1020167029367 A KR 1020167029367A KR 20167029367 A KR20167029367 A KR 20167029367A KR 20160124267 A KR20160124267 A KR 20160124267A
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- register
- accelerators
- accelerator
- execute
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 230000004044 response Effects 0.000 claims abstract description 14
- 230000015654 memory Effects 0.000 description 138
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 75
- 238000006073 displacement reaction Methods 0.000 description 41
- 238000010586 diagram Methods 0.000 description 30
- 238000012545 processing Methods 0.000 description 21
- 230000006870 function Effects 0.000 description 15
- 230000006854 communication Effects 0.000 description 14
- 238000004891 communication Methods 0.000 description 13
- 238000007667 floating Methods 0.000 description 10
- 230000008859 change Effects 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 9
- 230000001360 synchronised effect Effects 0.000 description 8
- 230000002085 persistent effect Effects 0.000 description 7
- 239000003795 chemical substances by application Substances 0.000 description 6
- 230000006835 compression Effects 0.000 description 6
- 238000007906 compression Methods 0.000 description 6
- 238000013501 data transformation Methods 0.000 description 6
- 230000033001 locomotion Effects 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000000873 masking effect Effects 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000004913 activation Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 3
- 230000003416 augmentation Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000001413 cellular effect Effects 0.000 description 3
- 230000000295 complement effect Effects 0.000 description 3
- 235000019800 disodium phosphate Nutrition 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000001629 suppression Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- JWZQBEUBJXSDPP-UHFFFAOYSA-N 5-cyclohexyl-6-methylpyrimidine-2,4-diamine Chemical compound CC1=NC(N)=NC(N)=C1C1CCCCC1 JWZQBEUBJXSDPP-UHFFFAOYSA-N 0.000 description 1
- 101100072002 Arabidopsis thaliana ICME gene Proteins 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 239000000969 carrier Substances 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 150000004770 chalcogenides Chemical class 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000005684 electric field Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000000976 ink Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/0721—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/0721—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
- G06F11/0724—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU] in a multiprocessor or a multi-core unit
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0766—Error or fault reporting or storing
- G06F11/0772—Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent 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
- G06F9/3881—Arrangements for communication of instructions and data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Advance Control (AREA)
Abstract
가속기들의 낮은-대기 시간 인보크를 제공하기 위한 장치 및 방법이 기술된다. 예를 들어, 일 실시예에 따른 프로세서는: 실행될 명령을 식별하는 명령 데이터를 저장하는 명령 레지스터; 명령의 결과 또는 명령이 실행될 수 없는 이유를 지시하는 데이터를 저장하는 결과 레지스터; 하나 이상의 가속기 명령을 인보크하기 위한 가속기 인보크 명령어를 포함하는 복수의 명령어를 실행하는 실행 로직; 및 상기 명령 레지스터로부터 명령 데이터를 판독하고 그에 응답하여 명령 데이터에 의해 식별된 명령을 실행하도록 시도하는 하나 이상 가속기를 포함한다.
Description
본 발명은 일반적으로 컴퓨터 프로세서들의 분야에 관한 것이다. 보다 상세하게는, 본 발명은 가속기들의 낮은-레이턴시 인보크를 위한 일반, 확장가능 명령어와 관련된다.
오늘날 가속기들을 인보크(invoking)하는 것은 드라이버 인터페이스를 통과하는 것을 필요로 한다. 계층적 보호 도메인이 이용되는 시스템에서, 이것은 링 0로의 스위칭 및 데이터를 상이한 어드레스 공간에 복사하는 것을 의미하며, 이것은 상당한 시간과 처리 리소스들을 소모한다. 높은 레이턴시 때문에, 그러한 가속기 인터페이스들은 또한 본래 비동기적이다. 프로그램 가능한 가속기들은 가속화된 코드가 그들 자신의 명령어 세트 아키텍처(ISA)에 구현되는 것을 필요로 한다.
어떤 현재 프로세서 아키텍처들은 이러한 관심사들 중 일부를 다루려고 시도하지만 가속화된 태스크 요청과 그것의 실행 사이에 높은 레이턴시를 갖는 대단위(coarse-grained) 비동기 메커니즘만을 제공한다. 또한, 현재 아키텍처들은 비-X86 ISA를 이용하며, 이것은 가속화된 태스크를 생성하고 메인 x86 프로그램으로 통합하기 위한 별개의 툴체인을 필요로 한다.
또한, 현재 비동기적 하드웨어 가속기들(예를 들어, GPUs)은 가속화된 태스크가 그 태스크를 트리거한 애플리케이션 스레드와 무관하게 실행하도록 허용한다. 이것은 애플리케이션 스레드가 가속화된 태스크에 영향을 미치지 않고서 예외들 및/또는 인터럽트들을 핸들링하는 것을 허용하고, 심지어 애플리케이션 스레드가 시스템에서의 가속화된 태스크 로케이션에 영향을 미치지 않고서 코어들 사이에 이동하는 것을 허용한다.
현재 동기식 하드웨어 가속기들은 인터럽트들, 예외들, 정황 전환들(context switches), 및 코어 이동들이 여전히 기능상 정확한 것을 보장하는 것, 및 전방 진행을 보장하는 것이 필요하다. 이것은 (1) 임의의 인터럽트들이 가속기가 완료될 때까지 연기되도록 가속기가 충분히 짧고 임의의 예외들을 유발하지 않도록 보장하는 것; (2) 기존의 아키텍처의 레지스터들(예를 들어, REPMOV)에서 가속기의 전방 진행을 유지하는 것; 또는 (3) 가속기 상태를 보유하기 위한 새로운 아키텍처의 레지스터들을 정의하고, 그들을 XSAVE/XRESTORE에 추가하는 것 중 어느 것에 의해 수행된다.
본 발명의 더 나은 이해는 하기의 도면과 함께 하기의 상세한 설명으로부터 구할 수 있다.
도 1a는 본 발명의 실시예들에 따른 예시적인 순차적 파이프라인 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 둘 다를 도시하는 블록도이다.
도 1b는 본 발명의 실시예들에 따른 프로세서에 포함될 예시적인 실시예의 순차적 아키텍처 코어, 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 아키텍처 코어 둘 다를 도시하는 블록도이다.
도 2는 본 발명의 실시예들에 따라 통합된 메모리 컨트롤러 및 그래픽들을 갖는 싱글 코어 프로세서 및 멀티코어 프로세서의 블록도이다.
도 3은 본 발명의 일 실시예에 따른 시스템의 블록도를 도시한다.
도 4는 본 발명의 실시예에 따른 제2 시스템의 블록도를 도시한다.
도 5는 본 발명의 실시예에 따른 제3 시스템의 블록도를 도시한다.
도 6은 본 발명의 실시예에 따른 시스템-온-칩(SoC)의 블록도를 도시한다.
도 7은 본 발명의 실시예들에 따라 소스 명령어 세트에서의 바이너리 명령어들을 타겟 명령어 세트에서의 바이너리 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도를 도시한다.
도 8a는 본 발명의 실시예들이 구현될 수 있는 프로세서 아키텍처를 도시한다.
도 8b 및 도 8c는 가속기들과 고찰 결과들을 인보크하기 위해 사용된 데이터를 저장하기 위한 레지스터들을 도시한다.
도 9a 내지 도 9c는 본 발명의 일 실시예에 따라 가속기를 인보크하기 위한 방법을 도시한다.
도 10은 종종 실패하는 복합 명령어들을 처리하기 위한 방법을 도시한다.
도 11은 가속기 상태 정보를 저장하는 스택을 사용하는 본 발명의 일 실시예를 도시한다.
도 12a 및 도 12b는 본 발명의 실시예들에 따라 일반 벡터 친화적 명령어 포맷 및 그 명령어 템플릿들을 도시하는 블록도들이다.
도 13a 내지 도 13d는 본 발명의 실시예들에 따른 예시적인 특정 벡터 친화적 명령어 포맷을 도시하는 블록도들이다.
도 14는 본 발명의 일 실시예에 따른 레지스터 아키텍처의 블록도이다.
도 15는 본 발명의 특정 실시예들에 따른 컴퓨터 시스템을 도시한다.
도 1a는 본 발명의 실시예들에 따른 예시적인 순차적 파이프라인 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 둘 다를 도시하는 블록도이다.
도 1b는 본 발명의 실시예들에 따른 프로세서에 포함될 예시적인 실시예의 순차적 아키텍처 코어, 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 아키텍처 코어 둘 다를 도시하는 블록도이다.
도 2는 본 발명의 실시예들에 따라 통합된 메모리 컨트롤러 및 그래픽들을 갖는 싱글 코어 프로세서 및 멀티코어 프로세서의 블록도이다.
도 3은 본 발명의 일 실시예에 따른 시스템의 블록도를 도시한다.
도 4는 본 발명의 실시예에 따른 제2 시스템의 블록도를 도시한다.
도 5는 본 발명의 실시예에 따른 제3 시스템의 블록도를 도시한다.
도 6은 본 발명의 실시예에 따른 시스템-온-칩(SoC)의 블록도를 도시한다.
도 7은 본 발명의 실시예들에 따라 소스 명령어 세트에서의 바이너리 명령어들을 타겟 명령어 세트에서의 바이너리 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도를 도시한다.
도 8a는 본 발명의 실시예들이 구현될 수 있는 프로세서 아키텍처를 도시한다.
도 8b 및 도 8c는 가속기들과 고찰 결과들을 인보크하기 위해 사용된 데이터를 저장하기 위한 레지스터들을 도시한다.
도 9a 내지 도 9c는 본 발명의 일 실시예에 따라 가속기를 인보크하기 위한 방법을 도시한다.
도 10은 종종 실패하는 복합 명령어들을 처리하기 위한 방법을 도시한다.
도 11은 가속기 상태 정보를 저장하는 스택을 사용하는 본 발명의 일 실시예를 도시한다.
도 12a 및 도 12b는 본 발명의 실시예들에 따라 일반 벡터 친화적 명령어 포맷 및 그 명령어 템플릿들을 도시하는 블록도들이다.
도 13a 내지 도 13d는 본 발명의 실시예들에 따른 예시적인 특정 벡터 친화적 명령어 포맷을 도시하는 블록도들이다.
도 14는 본 발명의 일 실시예에 따른 레지스터 아키텍처의 블록도이다.
도 15는 본 발명의 특정 실시예들에 따른 컴퓨터 시스템을 도시한다.
하기의 기재에서는, 설명의 목적상, 이하 기재되는 본 발명의 실시예들의 충분한 이해를 제공하기 위해 복수의 특정 상세들이 제시된다. 그러나, 이 분야에서 통상의 기술자에게는 본 발명의 실시예들이 이러한 특정 상세들 중 일부 없이도 실시될 수 있다는 점이 명백할 것이다. 다른 경우들에서는, 주지의 구조들 및 디바이스들은 본 발명의 실시예들의 근본 원리들을 모호하게 하는 것을 회피하기 위해 블록도로 도시된다.
예시적인 프로세서 아키텍처들 및 데이터 유형들
도 1a는 본 발명의 실시예들에 따른, 예시적인 순차 파이프라인 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 파이프라인 둘 다를 도시하는 블록도이다. 도 1b는 본 발명의 실시예들에 따른, 프로세서에 포함될 순차 아키텍처 코어의 예시적 실시예 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 아키텍처 코어 둘 다를 도시하는 블록도이다. 도 1a 및 도 1b에서의 실선 박스들은 순차적 파이프라인 및 순차적 코어를 도시하고, 점선 박스들의 옵션적인 추가는 레지스터 리네이밍, 비순차 발행/실행 파이프라인 및 코어를 도시한다. 순차적 양태가 비순차적 양태의 서브세트인 경우에, 비순차적 양태가 설명될 것이다.
도 1a에서, 프로세서 파이프라인(100)은 페치 스테이지(102), 길이 디코드 스테이지(104), 디코드 스테이지(106), 할당 스테이지(108), 리네이밍 스테이지(110), (디스패치 또는 발행으로도 알려진) 스케줄링 스테이지(112), 레지스터 판독/메모리 판독 스테이지(114), 실행 스테이지(116), 라이트 백(write back)/메모리 기입 스테이지(118), 예외 처리 스테이지(122), 및 커미트(commit) 스테이지(124)를 포함한다.
도 1b는 실행 엔진 유닛(150)에 연결되는 프론트 엔드 유닛(130)을 포함하는 프로세서 코어(190)를 도시하며, 이들 두 개의 유닛 모두는 메모리 유닛(170)에 연결된다. 코어(190)는 RISC(Reduced Instruction Set Computing) 코어, CISC(Complex Instruction Set Computing) 코어, VLIW(Very Long Instruction Word) 코어, 또는 하이브리드 또는 대안적인 코어 유형일 수 있다. 또 다른 옵션으로서, 코어(190)는, 예를 들어 네트워크 또는 통신 코어, 압축 엔진, 보조프로세서 코어, GPGPU(General Purpose computing Graphics Processing Unit) 코어, 그래픽 코어 또는 이와 유사한 것 등의 특수 목적 코어일 수 있다.
프론트 엔드 유닛(130)은 명령어 캐시 유닛(134)에 연결되는 브랜치 예측 유닛(132)을 포함하고, 명령어 캐시 유닛은 명령어 TLB(Translation Lookaside Buffer: 변환 색인 버퍼)(136)에 연결되고, 명령어 변환 색인 버퍼는 명령어 페치 유닛(138)에 연결되고, 명령어 페치 유닛은 디코드 유닛(140)에 연결된다. 디코드 유닛(140)(또는 디코더)은 명령어들을 디코딩할 수 있으며, 원래의 명령어들로부터 디코딩되거나, 또는 그렇지 않으면 원래의 명령어들을 반영하거나, 또는 이들로부터 유도되는, 하나 이상의 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들, 또는 다른 제어 신호들을 출력으로서 생성할 수 있다. 디코드 유닛(140)은 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다. 적절한 메커니즘들의 예들은 룩업 테이블들, 하드웨어 구현들, 프로그램 가능한 로직 어레이(PLAs), 마이크로코드 판독 전용 메모리들(ROMs) 등을 포함하지만, 이것들로 제한되지 않는다. 일 실시예에서, 코어(190)는 특정 매크로명령들을 위한 마이크로코드를 저장하는 마이크로코드 ROM 또는 다른 매체를 포함한다(예를 들어, 디코드 유닛(140) 내에 또는 그렇지 않다면 전단부 유닛(130) 내에). 디코드 유닛(140)은 실행 엔진 유닛(150)에서의 리네이밍/할당기 유닛(152)에 연결된다.
실행 엔진 유닛(150)은 리타이어먼트 유닛(154) 및 하나 이상의 스케줄러 유닛(들)(156)의 세트에 연결되는 리네이밍/할당기 유닛(152)을 포함한다. 스케줄러 유닛(들)(156)은 예약들 스테이션들, 중심 명령어 윈도우 등을 포함한, 임의의 개수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(156)은 물리적 레지스터 파일(들) 유닛(들)(158)에 결합된다. 물리적 레지스터 파일(들) 유닛들(158)의 각각은 하나 이상의 물리적 레지스터 파일들을 나타내고, 이들 중 상이한 것들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(status)(예를 들어, 실행될 다음 차례의 명령어의 주소인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 유형들을 저장한다. 일 실시예에서, 물리적 레지스터 파일(들) 유닛(158)은 벡터 레지스터들 유닛, 기입 마스크 레지스터들 유닛, 및 스칼라 레지스터들 유닛을 포함한다. 이러한 레지스터 유닛들은 아키텍처의 벡터 레지스터들, 벡터 마스크 레지스터들, 및 범용 레지스터들을 제공할 수 있다. 물리적 레지스터 파일(들) 유닛(들)(158)은, 레지스터 리네이밍 및 비순차적 실행이(예를 들어, 재배열 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 사용하여; 미래 파일(들), 이력 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 사용하여; 레지스터 맵들 및 레지스터들의 풀(pool)을 사용하여; 등등) 구현될 수 있는 다양한 방식들을 도시하도록 리타이어먼트 유닛(154)에 의해 오버랩된다. 리타이어먼트 유닛(154) 및 물리적 레지스터 파일(들) 유닛(들)(158)은 실행 클러스터(들)(160)에 연결된다. 실행 클러스터(들)(160)는 하나 이상의 실행 유닛들(162)의 세트 및 하나 이상의 메모리 액세스 유닛들(164)의 세트를 포함한다. 실행 유닛들(162)은 다양한 유형들의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예를 들어, 시프트, 가산, 감산, 승산)을 수행할 수 있다. 어떤 실시예들은 특정 기능들이나 기능들의 세트들에 전용인 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 단 하나의 실행 유닛, 또는 모두가 모든 기능들을 수행하는 복수의 실행 유닛을 포함할 수 있다. 스케줄러 유닛(들)(156), 물리적 레지스터 파일(들) 유닛(들)(158), 및 실행 클러스터(들)(160)는 복수 개일 수 있는 것으로 도시되는데, 그 이유는 특정 실시예들이 특정 유형들의 데이터/연산들에 대해 개별 파이프라인들(예를 들어, 각각 자신들의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 각각 갖는 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인 - 및 개별 메모리 액세스 파이프라인의 경우에, 이러한 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(164)을 갖는 특정 실시예들이 구현됨)을 생성하기 때문이다. 개별 파이프라인들이 사용되는 경우에, 이들 파이프라인들 중 하나 이상은 비순차적 발행/실행일 수 있고 나머지는 순차적일 수 있다는 점도 이해해야 한다.
메모리 액세스 유닛들(164)의 세트는, 레벨 2(L2) 캐시 유닛(176)에 연결되는 데이터 캐시 유닛(174)에 연결되는 데이터 TLB 유닛(172)을 포함하는 메모리 유닛(170)에 연결된다. 예시적인 일 실시예에서, 메모리 액세스 유닛들(164)은 로드 유닛, 저장 어드레스 유닛, 및 저장 데이터 유닛을 포함할 수 있으며, 이들 각각은 메모리 유닛(170) 내의 데이터 TLB 유닛(172)에 연결된다. 명령어 캐시 유닛(134)은 메모리 유닛(170) 내의 레벨 2(L2) 캐시 유닛(176)에 더 연결된다. L2 캐시 유닛(176)은 하나 이상의 다른 레벨의 캐시에 및 궁극적으로 메인 메모리에 연결된다.
예를 들어, 예시적인 레지스터 리네이밍, 비순차적 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(100)을 구현할 수 있다: 1) 명령어 페치(138)는 페치 및 길이 디코딩 스테이지들(102, 104)을 수행하고; 2) 디코드 유닛(140)은 디코드 스테이지(106)를 수행하고; 3) 리네이밍/할당기 유닛(152)은 할당 스테이지(108) 및 리네이밍 스테이지(110)를 수행하고; 4) 스케줄러 유닛(들)(156)은 스케줄 스테이지(112)를 수행하고; 5) 물리적 레지스터 파일(들) 유닛(들)(158) 및 메모리 유닛(170)은 레지스터 판독/메모리 판독 스테이지(114)를 수행하고; 실행 클러스터(160)는 실행 스테이지(116)를 수행하고; 6) 메모리 유닛(170) 및 물리적 레지스터 파일(들) 유닛(들)(158)은 라이트 백/메모리 기입 스테이지(118)를 수행하고; 7) 다양한 유닛들이 예외 처리 스테이지(122)에 관련될 수 있고; 8) 리타이어먼트 유닛(154) 및 물리적 레지스터 파일(들) 유닛(들)(158)은 커미트 스테이지(124)를 수행한다.
코어(190)는, 본 명세서에서 기술되는 명령어(들)를 포함한, 하나 이상의 명령어 세트들(예를 들어, (보다 새로운 버전들로 추가된 일부 확장들을 갖는) x86 명령어 세트; 캘리포니아 서니베일의 MIPS 테크놀로지스의 MIPS 명령어 세트; 캘리포니아 서니베일의 ARM 홀딩스의 (NEON 등의 옵션적 추가 확장들을 갖는) ARM 명령어 세트)을 지원할 수 있다. 일 실시예에서, 코어(190)는 패킹된 데이터 명령어 세트 확장(예를 들어, 하기에서 기술되는, AVX1, AVX2, 및/또는 어떤 형태의 일반 벡터 친화적 명령여 포맷(U=0 및/또는 U=1))을 지원하는 로직을 포함하며, 따라서 많은 멀티미디어 애플리케이션들에 의해 사용되는 연산들이 패킹된 데이터를 사용하여 수행되는 것을 허용한다.
코어는 (두 개 이상의 병렬 세트들의 연산들 또는 스레드들을 실행하는) 멀티스레딩을 지원할 수 있고, 시분할 멀티스레딩(time sliced multithreading), (단일의 물리적 코어가, 물리적 코어가 동시에 멀티스레딩하고 있는 스레드들 각각에 대해 논리적 코어를 제공하는) 동시 멀티스레딩, 또는 이들의 조합(예를 들어, Intel® 하이퍼스레딩(Hyperthreading) 기술에서 등의 시분할 페칭 및 디코딩과 그 이후의 동시 멀티스레딩)을 포함하는 다양한 방식으로 멀티스레딩을 지원할 수 있다는 점을 이해해야 한다.
레지스터 리네이밍이 비순차적 실행의 정황에서 설명되었지만, 레지스터 리네이밍은 순차적 아키텍처에서 사용될 수도 있다는 점을 이해해야 한다. 프로세서의 예시된 실시예는 또한 별개의 명령어 및 데이터 캐시 유닛들(134/174) 및 공유된 L2 캐시 유닛(176)을 포함하지만, 대안적 실시예들은 명령어와 데이터 모두에 대해 단일의 내부 캐시, 예를 들어, 레벨 1(L1) 내부 캐시 또는 복수 레벨의 내부 캐시를 가질 수 있다. 어떤 실시예들에서, 시스템은 코어 및/또는 프로세서의 외부에 대해 외부에 있을 수 있는 외부 캐시, 및 내부 캐시의 조합을 포함할 수 있다. 대안적으로, 모든 캐시는 코어 및/또는 프로세서 외부에 있을 수 있다.
도 2는, 본 발명의 실시예들에 따라, 하나 초과의 코어를 가질 수 있고, 통합 메모리 컨트롤러를 가질 수 있고, 통합 그래픽을 가질 수 있는 프로세서(200)의 블록도이다. 도 2의 실선 박스들은 싱글 코어(202A), 시스템 에이전트(210), 하나 이상의 버스 컨트롤러 유닛들(216)의 세트를 갖는 프로세서(200)를 도시하는 한편, 점선 박스들의 옵션적 추가는 복수의 코어(202A-N), 시스템 에이전트 유닛(210) 내의 하나 이상의 통합 메모리 컨트롤러 유닛(들)(214)의 세트, 및 특수 목적 로직(208)을 갖는 대안적인 프로세서(200)를 도시한다.
그러므로, 프로세서(200)의 상이한 구현들은 다음을 포함할 수 있다: 1) 통합 그래픽 및/또는 과학적(스루풋) 로직(하나 이상의 코어들을 포함할 수 있음)인 특수 목적 로직(208) 및 하나 이상의 범용 코어들(예를 들어, 범용 순차적 코어들, 범용 비순차적 코어들, 이 두 가지의 조합)인 코어들(202A-N)을 갖는 CPU; 2) 그래픽 및/또는 과학적(스루풋) 컴퓨팅을 주로 대상으로 하는 다수의 특수 목적 코어들인 코어들(202A-N)을 갖는 보조프로세서; 및 3) 다수의 범용 순차적 코어들인 코어들(202A-N)을 갖는 보조프로세서를 포함할 수 있다. 따라서, 프로세서(200)는 범용 프로세서, 보조프로세서 또는 특수 목적 프로세서, 예를 들어 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(General Purpose Graphics Processing Unit), 하이-스루풋 MIC(Many Integrated Core) 보조프로세서(30개 이상의 코어를 포함함), 임베디드 프로세서, 또는 이와 유사한 것 등일 수 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(200)는 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세스 기술 중 임의의 것을 이용하여 하나 이상의 기판의 일부가 될 수 있으며 그리고/또는 이들 기판상에 구현될 수 있다.
메모리 계층구조는 코어들 내의 하나 이상의 레벨들의 캐시, 하나 이상의 공유 캐시 유닛들(206)의 세트, 및 통합 메모리 컨트롤러 유닛들(214)의 세트에 연결되는 외부 메모리(도시되지 않음)를 포함한다. 공유 캐시 유닛들(206)의 세트는, 예를 들어 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 다른 레벨들의 캐시 등의 하나 이상의 중간 레벨 캐시, 최종 레벨 캐시(LLC), 및/또는 이들의 조합들을 포함할 수 있다. 일 실시예에서는 링 기반 상호접속 유닛(212)이 통합 그래픽 로직(208), 공유 캐시 유닛들(206)의 세트, 및 시스템 에이전트 유닛(210)/통합 메모리 컨트롤러 유닛(들)(214)을 상호접속하지만, 대안 실시예들은 이러한 유닛들을 상호접속하는 임의 개수의 주지의 기술들을 이용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛(206)과 코어들(202A-N) 사이에는 코히어런시가 유지된다.
일부 실시예들에서, 코어들(202A-N) 중 하나 이상은 멀티-스레딩이 가능하다. 시스템 에이전트(210)는 코어들(202A-N)을 조정 및 조작하는 컴포넌트들을 포함한다. 시스템 에이전트 유닛(210)은 예를 들어, PCU(Power Control Unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(202A-N) 및 통합 그래픽 로직(208)의 전력 상태를 조절하는 데 필요한 로직 및 컴포넌트들일 수 있거나 또는 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속되는 디스플레이들을 구동하기 위한 것이다.
코어들(202A-N)은 아키텍처 명령어 세트와 관련하여 동종 또는 이종일 수 있다; 즉, 코어들(202A-N) 중 두 개 이상은 동일 명령어 세트를 실행할 수 있는 반면, 다른 코어들은 그 명령어 세트의 서브세트 또는 상이한 명령어 세트만을 실행할 수 있다.
도 3 내지 도 6은 예시적인 컴퓨터 아키텍처들의 블록도들이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 퍼스널 디지털 어시스턴트들, 엔지니어링 워크스테이션들, 서버들, 네트워크 디바이스들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, 디지털 신호 프로세서들(DSPs), 그래픽 디바이스들, 비디오 게임 디바이스들, 셋톱박스들, 마이크로 컨트롤러들, 셀 폰들, 휴대용 미디어 플레이어들, 핸드헬드 디바이스들, 및 다양한 다른 전자 디바이스들에 대해 이 기술분야에 알려진 다른 시스템 설계들 및 구성들도 적합하다. 일반적으로, 본 명세서에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 광범위하게 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적합하다.
이제 도 3을 참조하면, 본 발명의 일 실시예에 따른 시스템(300)의 블록도가 도시된다. 시스템(300)은 하나 이상 프로세서(310, 315)를 포함할 수 있고 이러한 프로세서는 제어기 허브(320)에 결합된다. 일 실시예에서, 컨트롤러 허브(320)는 GMCH(Graphics Memory Controller Hub: 그래픽 메모리 컨트롤러 허브)(390) 및 IOH(Input/Ouput Hub: 입력/출력 허브)(350)(개별 칩들 상에 존재할 수 있음)를 포함하고; GMCH(390)는 메모리(340) 및 보조프로세서(345)에 연결되는 그래픽 컨트롤러들 및 메모리를 포함하고; IOH(350)는 I/O(Input/Output) 디바이스들(360)을 GMCH(390)에 연결한다. 대안적으로, 메모리 및 그래픽 컨트롤러들 중 하나 또는 양자 모두는 (본 명세서에서 개시되는 바와 같이) 프로세서 내에 통합되고, 메모리(340) 및 보조프로세서(345)는 프로세서(310), 및 IOH(350)와 단일 칩에 있는 컨트롤러 허브(320)에 직접 연결된다.
추가적인 프로세서들(315)의 옵션적 속성이 도 3에 파선들로 표시된다. 각각의 프로세서(310, 315)는 본 명세서에 기술된 하나 이상의 처리 코어들을 포함할 수 있고, 프로세서(200)의 어떤 버전일 수 있다.
메모리(340)는 예를 들어, DRAM(Dynamic Random Access Memory), PCM(Phase Change Memory), 또는 이 둘의 조합일 수 있다. 적어도 하나의 실시예에 대해, 컨트롤러 허브(320)는 FSB(Front Side Bus), QPI(QuickPath Interconnect) 등의 점-대-점 인터페이스, 또는 유사한 접속(395) 등의 멀티-드롭 버스를 통해 프로세서(들)(310, 315)와 통신한다.
일 실시예에서, 보조프로세서(345)는 예를 들어 하이-스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 또는 임베디드 프로세서 등의 특수 목적 프로세서이다. 일 실시예에서, 컨트롤러 허브(320)는 통합 그래픽 가속기를 포함할 수 있다.
아키텍처, 마이크로아키텍처, 열, 전력 소비 특성들 등을 포함하는 장점의 다양한 메트릭들과 관련하여 물리적 리소스들(310, 315) 사이에는 다양한 차이점들이 존재할 수 있다.
일 실시예에서, 프로세서(310)는 일반적인 유형의 데이터 처리 연산들을 제어하는 명령어들을 실행한다. 명령어들 내에는 보조프로세서 명령어들이 내장될 수 있다. 프로세서(310)는 이러한 보조프로세서 명령어들을 부속된 보조프로세서(345)에 의해 실행되어야 하는 유형의 것으로 인식한다. 따라서, 프로세서(310)는 이러한 보조프로세서 명령어들(또는 보조프로세서 명령어들을 나타내는 제어 신호들)을 보조프로세서 버스 또는 다른 상호접속부 상에서 보조프로세서(345)에 발행한다. 보조프로세서(들)(345)는 수신된 보조프로세서 명령어들을 수락 및 실행한다.
이제, 도 4을 참조하면, 본 발명의 일 실시예에 따른 제1의 보다 구체적인 예시적인 시스템(400)의 블록도가 도시된다. 도 4에 도시된 바와 같이, 멀티프로세서 시스템(400)은 점-대-점 상호접속 시스템이며, 점-대-점 상호접속부(450)를 통해 연결되는 제1 프로세서(470) 및 제2 프로세서(480)를 포함한다. 프로세서들(470, 480) 각각은 어떤 버전의 프로세서(200)일 수 있다. 본 발명의 일 실시예에서, 프로세서들(470, 480)은 각각 프로세서들(310, 315)이고, 보조프로세서(438)는 보조프로세서(345)이다. 다른 실시예에서는, 프로세서들(470, 480)이 각각 프로세서(310) 및 보조프로세서(345)이다.
프로세서들(470, 480)은 각각 IMC(Integrated Memory Controller: 통합 메모리 컨트롤러) 유닛들(472, 482)을 포함하는 것으로 도시된다. 프로세서(470)는 또한 그의 버스 컨트롤러 유닛들의 일부로서 점-대-점(P-P) 인터페이스들(476, 478)을 포함한다; 유사하게 제2 프로세서(480)는 P-P 인터페이스들(486, 488)을 포함한다. 프로세서들(470, 480)은 점-대-점(P-P) 인터페이스 회로들(478, 488)을 이용하여 P-P 인터페이스(450)를 통해 정보를 교환할 수 있다. 도 4에 도시된 바와 같이, IMC들(472, 482)은 프로세서들을 각각의 메모리, 즉 메모리(432) 및 메모리(434)에 연결하며, 이 메모리들은 각 프로세서들에 국부적으로 부속되는 메인 메모리의 일부들일 수 있다.
프로세서들(470, 480) 각각은 점 대 점 인터페이스 회로들(476, 494, 486, 498)을 사용하여 개별 P-P 인터페이스들(452, 454)을 통해 칩셋(490)과 정보를 교환할 수 있다. 칩셋(490)은 고-성능 인터페이스(439)를 통해 보조프로세서(438)와 정보를 옵션적으로 교환할 수 있다. 일 실시예에서, 보조프로세서(438)는 예를 들어, 하이-스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 또는 임베디드 프로세서 등 특수 목적 프로세서이다.
공유된 캐시(도시되지 않음)는 어느 한 프로세서에 포함될 수 있거나, 양자 모두의 프로세서들의 외부에 있을 수 있지만, 여전히 P-P 상호접속부를 통해 프로세서들과 접속될 수 있어서, 프로세서가 저 전력 모드에 놓이는 경우 어느 한쪽 또는 양자 모두의 프로세서의 로컬 캐시 정보가 공유된 캐시에 저장될 수 있다.
칩셋(490)은 인터페이스(496)를 통해 제1 버스(416)에 연결될 수 있다. 일 실시예에서, 제1 버스(416)는 PCI(Peripheral Component Interconnect: 주변 장치 상호접속부) 버스일 수 있거나, 또는 PCI 익스프레스 버스 또는 다른 제3 세대 I/O 상호접속 버스 등의 버스일 수 있지만, 본 발명의 범위가 이에 제한되는 것은 아니다.
도 4에 도시된 바와 같이, 다양한 I/O 디바이스들(414)이 제1 버스(416)에 연결될 수 있으며, 이와 함께 버스 브릿지(418)가 제1 버스(416)를 제2 버스(420)에 연결한다. 일 실시예에서, 보조프로세서들, 하이-스루풋 MIC 프로세서들, GPGPU들, 가속기들(예를 들어, 그래픽 가속기들 또는 디지털 신호 처리(DSP) 유닛들과 같은 것), 필드 프로그램 가능한 게이트 어레이들(field programmable gate arrays), 또는 임의의 다른 프로세서와 같은 하나 이상의 추가 프로세서(들)(415)가 제1 버스(416)에 결합된다. 일 실시예에서, 제2 버스(420)는 LPC(Low Pin Count) 버스일 수 있다. 예를 들어, 일 실시예에서, 명령어/코드와 데이터(430)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 디바이스와 같은 저장소 유닛(428), 통신 디바이스들(427), 및 키보드 및/또는 마우스(422)를 포함한 다양한 디바이스들이 제2 버스(420)에 결합될 수 있다. 또한, 오디오 I/O(424)가 제2 버스(420)에 연결될 수 있다. 다른 구조들도 가능하다는 점에 유의한다. 예를 들어, 도 4의 점-대-점 구조 대신에, 시스템은 멀티 드롭 버스 또는 다른 그러한 구조를 구현할 수 있다.
이제, 도 5를 참조하면, 본 발명의 실시예에 따른 제2의 보다 구체적인 예시적인 시스템(500)의 블록도가 도시된다. 도 4 및 도 5에서 동일한 엘리먼트들은 동일한 참조 번호들을 가지며, 도 4의 특정 양태들은 도 5의 다른 양태들을 모호하게 하는 것을 회피하기 위해 도 5로부터 생략되었다.
도 5는 프로세서들(470, 480)이 각각 통합 메모리 및 I/O 제어 로직("CL")(472, 482)을 포함할 수 있다는 것을 도시한다. 따라서, CL(472, 482)은 통합 메모리 컨트롤러 유닛들을 포함하며, I/O 제어 로직을 포함한다. 도 5는 메모리들(432, 434)이 CL(472, 482)에 연결될 뿐만 아니라, I/O 디바이스들(514) 또한 제어 로직(472, 482)에 연결된다는 것을 도시한다. 레거시 I/O 디바이스들(515)은 칩셋(490)에 연결된다.
이제, 도 6를 참조하면, 본 발명의 실시예에 따른 SoC(600)의 블록도가 도시된다. 도 2에 있는 유사한 요소들은 동일한 참조 부호를 갖는다. 또한, 점선 박스들은 더욱 향상된 SoC들에 관한 옵션적 특징들이다. 도 6에서, 상호접속부 유닛(들)(602)은 하나 이상의 코어(202A-N)의 세트 및 공유 캐시 유닛(들)(206)을 포함하는 애플리케이션 프로세서(610); 시스템 에이전트 유닛(210); 버스 컨트롤러 유닛(들)(216); 통합 메모리 컨트롤러 유닛(들)(214); 통합 그래픽 로직, 이미지 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나 이상의 보조프로세서(620)의 세트; SRAM(Static Random Access Memory) 유닛(630); DMA(Direct Memory Access) 유닛(632); 및 하나 이상의 외부 디스플레이들에 연결하기 위한 디스플레이 유닛(640)에 연결된다. 일 실시예에서, 보조프로세서(들)(620)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 하이-스루풋 MIC 프로세서, 또는 임베디드 프로세서 등의 특수 목적 프로세서를 포함한다.
본 명세서에 설명된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, (휘발성 및/또는 비휘발성 메모리 및/또는 저장소 구성요소들을 포함하는) 저장소 시스템, 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램 가능한 시스템상에서 실행되는 컴퓨터 프로그램 또는 프로그램 코드로서 구현될 수 있다.
도 4에 도시된 코드(430) 등과 같은 프로그램 코드는, 본 명세서에서 기술된 기능들을 수행하고 출력 정보를 생성하기 위한 명령어를 입력하기 위해 적용될 수 있다. 출력 정보는 공지 방식으로 하나 이상의 출력 디바이스에 적용될 수 있다. 본 출원의 목적상, 처리 시스템은 예를 들어, 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 주문형 집적 회로(ASIC), 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 처리 시스템과 통신하기 위해 고레벨 절차 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는 또한, 요구되는 경우, 어셈블리 또는 기계 언어로 구현될 수 있다. 사실상, 본 명세서에 설명된 메커니즘들은 임의의 특정 프로그래밍 언어로 범위가 한정되지 않는다. 어느 경우에나, 언어는 컴파일되거나 해석되는 언어일 수 있다.
적어도 일 실시예의 하나 이상의 양태는 기계에 의해 판독될 때 기계로 하여금 본 명세서에서 설명되는 기술들을 수행하기 위한 논리를 제조하게 하는, 프로세서 내의 다양한 논리를 표현하는, 기계 판독 가능 매체 상에 저장된 전형적인 명령어들에 의해 구현될 수 있다. "IP 코어들"로서 알려져 있는 그러한 표현들은 실체의, 기계 판독가능 매체상에 저장될 수 있고 실제로 로직 또는 프로세서를 만드는 제조 기계들에 로딩하기 위해 다양한 고객들 또는 제조 설비들에 공급될 수 있다.
이러한 머신 판독가능 저장 매체는 하드 디스크, 플로피 디스크, 광 디스크, CD-ROM(compact disk read-only memory), CD-RW(compact disk rewritable), 및 광자기 디스크를 포함하는 임의의 다른 유형의 디스크, 판독 전용 메모리(ROM), DRAM(dynamic random access memory), SRAM(static random access memory)와 같은 랜덤 액세스 메모리(RAM), EPROM(erasable programmable read-only memory), 플래시 메모리, EEPROM(electrically erasable programmable read-only memory), PCM(phase change memory)과 같은 반도체 디바이스들, 자기 또는 광 카드, 또는 전자 명령어들을 저장하는 데 적합한 임의의 다른 유형의 매체와 같은 저장 매체를 포함하는, 머신 또는 디바이스에 의해 제조 또는 형성되는 물품들의 비일시적, 실체의(tangible) 구성들을 포함할 수 있지만, 이들로 제한되지 않는다.
따라서, 본 발명의 실시예들은, 또한, 명령어들을 포함하거나, 또는 본 명세서에 개시되는 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 특징들을 정의하는, HDL(Hardware Description Language: 하드웨어 기술 언어) 등의 설계 데이터를 포함하는 비-일시적이고 실체적인 머신 판독가능 매체를 포함한다. 이러한 실시예들은 프로그램 제품들로도 참조될 수 있다.
어떤 경우들에는, 명령어 변환기가 소스 명령어 세트로부터 타겟 명령어 세트로 명령어를 변환하기 위해 사용될 수 있다. 예를 들어, 명령어 변환기는 코어에 의해 처리될 하나 이상의 다른 명령어들로 명령어를(예를 들어, 정적 바이너리 해석, 동적 컴파일을 포함하는 동적 바이너리 해석을 이용하여) 해석하거나, 모프하거나, 에뮬레이트하거나, 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 그의 조합으로 구현될 수 있다. 명령어 변환기는 프로세서에(on processor), 프로세서 밖에(off processor), 또는 일부는 프로세서에 일부는 프로세서 밖에 있을 수 있다.
도 7은 본 발명의 실시예들에 따라 소스 명령어 세트 내의 바이너리 명령어들을 타겟 명령어 세트 내의 바이너리 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기가 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합들로 구현될 수 있다. 도 7은 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(716)에 의해 선천적으로 실행될 수 있는 x86 바이너리 코드(706)를 생성하기 위해, 하이 레벨 언어(702)의 프로그램을 x86 컴파일러(704)를 사용하여 컴파일할 수 있다는 것을 도시한다. 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(716)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 달성하기 위해서, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당 부분 또는(2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서 상에서 실행되는 것을 목적으로 하는 오브젝트 코드 버전들의 애플리케이션들 또는 다른 소프트웨어를 호환가능하게 실행하거나 또는 다른 방식으로 처리함으로써, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(704)는 추가적인 링크 처리(linkage processing)를 갖거나 갖지 않고서 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(716) 상에서 실행될 수 있는 x86 바이너리 코드(706)(예를 들어, 오브젝트 코드)를 생성하도록 작동될 수 있는 컴파일러를 나타낸다. 유사하게, 도 7은 적어도 하나의 x86 명령어 세트 코어를 갖지 않는 프로세서(714)(예를 들어, 캘리포니아주 서니베일의 MIPS 테크놀로지스의 MIPS 명령어 세트를 실행하고/실행하거나 캘리포니아주 서니베일의 ARM 홀딩스의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 선천적으로 실행될 수 있는 대안적인 명령어 세트 바이너리 코드(710)를 생성하기 위해, 하이 레벨 언어(702)의 프로그램을 대안적인 명령어 세트 컴파일러(708)를 사용하여 컴파일할 수 있다는 점을 도시한다. 명령어 변환기(712)는 x86 바이너리 코드(706)를, x86 명령어 세트 코어(714)를 갖지 않는 프로세서에 의해 선천적으로 실행될 수 있는 코드로 변환하기 위해 사용된다. 이러한 변환된 코드는 대안적인 명령어 세트 바이너리 코드(710)와 동일할 가능성이 없는데, 그 이유는 이를 행할 수 있는 명령어 변환기를 제조하기 어렵기 때문이다; 그러나, 변환된 코드는 일반적인 연산을 달성할 것이며, 대안적인 명령어 세트로부터의 명령어들로 이루어질 것이다. 따라서, 명령어 변환기(712)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해 x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스가 x86 바이너리 코드(706)를 실행하는 것을 허용하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
효율적으로 가속기들을 인보크하기 위한 장치와 방법
본 발명의 일 실시예는 동기식(예를 들어, 고정된 기능 또는 프로그램 가능한) 가속기들(예를 들어, 보조프로세서들, 기능 유닛들)의 낮은-레이턴시 인보크를 위한 일반, 확장 가능한 명령어를 제공하고, 이는 본 명세서에서 "XCALL" 명령어로서 지칭된다. 일 실시예에서, 명령어는 x86 명령어이다. 그러나, 본 발명의 기본적인 원리는 임의의 명령어 세트 아키텍처(ISA)로 제한되지 않는다.
일 실시예에 따른 명령어 포맷은 다음과 같다: XCALL 결과-레지스터(result-register), 커맨드-레지스터(command-register), 파라미터-레지스터(param-register)로서, 이들은 각각, 명령어의 실행에 뒤따르는 결과들을 저장하기 위한 결과 레지스터, 명령어에 응답하여 가속기에 의해 실행될 특정 커맨드 및 연관된 정보를 저장하기 위한 커맨드 레지스터, 및 인보크된 명령어와 연관된 파라미터들을 저장하기 위한 파라미터 레지스터를 나타낸다. 본 발명의 일 실시예에 따른 각각의 레지스터에 저장된 특정 정보는 하기에 설명된다.
도 8a는 하나 이상의 프로세서 클러스터(804)가 범용 처리 연산들을 수행하고 하나 이상의 가속기 클러스터(801)가 가속기-특정 연산들을 수행하는 고레벨 흐름을 도시한다. 예를 들어, 범용 프로세서 클러스터들(804)은 가속기 클러스터들(801)에서 커맨드들을 인보크하는 명령어들을 포함하는 명령어(예를 들어, x86 명령어와 같은 범용 명령어들)를 실행하기 위한 프로세서 코어 내에 실행 로직을 포함할 수 있다. 일 실시예에서, 가속기 클러스터들(801)의 가속기들은 데이터 처리 연산들(예를 들어, 벡터/SIMD 연산들, 그래픽 연산들, 소트 및 루프 연산들, 기타 등등)을 수행하기 위한 코-프로세서들 또는 기능 유닛들이다. 그러나, 본 발명의 기본적인 원리는 범용 코어들 또는 가속기 코어들의 임의의 특정 유형으로 제한되지 않는다.
프로세서 클러스터들(804)과 가속기 클러스터들(801)은 동일 프로세서 칩 또는 코어 내의 논리 유닛들일 수 있다. 대안적으로, 프로세서 클러스터들(804)은 하나의 칩에 있을 수 있고 가속기 클러스터들(801)은 상이한 칩들(동일 반도체 패키지에 또는 상이한 패키지들에)에 있을 수 있고, (예를 들어, PCI 익스프레스, 직접 미디어 인터페이스(DMS), 또는 다른 유형의 통신 버스와 같은) 통신 버스를 통해 연결될 수 있다. 또 다른 실시예에서, 가속기 클러스터들(801) 중 일부는 프로세서 클러스터들(804)과 동일 칩 또는 코어에 있을 수 있는 반면, 다른 가속기 클러스터들(801)은 상이한 칩 또는 코어에 있을 수 있다. 본 명세서에서 기술된 본 발명의 실시예들은 임의의 특정 칩/패키징 구성에 한정되지 않고 복수의 상이한 유형들의 가속기 클러스터들을 갖는 구현들을 지원한다.
도 8a에 도시된 바와 같이, 본 명세서에서 기술된 바와 같이 범용 프로세서 클러스터들(804)과 가속기 클러스터들(801) 사이의 커맨드들, 파라미터들, 및 결과들의 통신을 가능하게 하기 위해 레지스터들의 세트(830)가 제공된다. 특히, 일 실시예에서, 레지스터 세트(830)는 XCALL 명령어에 의해 특정되는 파라미터 레지스터들, 결과 레지스터들, 및 커맨드 레지스터들을 포함한다. 레지스터 세트(830)는 하기에 특정된 (예를 들어, XCALL 명령어의 실행에 응답하여 커맨드들, 파라미터 데이터, 및 결과 데이터를 저장하는) 목적들을 위해 사용되는 범용 레지스터(GPR)들일 수 있다. 대안 실시예에서, 이들은 전용의 애플리케이션 특정적 레지스터들이다.
일 실시예에서, 클러스터들은 하나 이상의 가속기들이 인보크되도록 유발할 수 있는 XCALL 명령어(808)를 포함하는 프로그램 코드(806-807, 809-810)를 실행한다. 응답으로, 수행될 연산을 특정하는 제어 정보가 레지스터 세트(830) 내의 파라미터 레지스터 및/또는 (도 8b에 대하여 하기에 기술되는) 커맨드 레지스터를 통해 가속기(801)에 제공된다. 응답으로, 가속기는 커맨드를 실행하기 위해 하나 이상의 고정된 기능 유닛들(802) 및/또는 프로그램가능 기능 유닛들(803)을 사용할 수 있다. 대안적으로, 가속기 클러스터(801)는 비지 지시, 예외, 또는 충돌로 응답할 수 있다. 그 후 결과들은 (도 8c에 대하여 하기에 기술되는) 레지스터 세트(830) 내의 결과 레지스터를 통해 프로세서 클러스터들(804)에 제공된다. 커맨드가 성공적으로 실행되면, 그 결과의 데이터는 결과 레지스터에 저장될 수 있다. 대조적으로, 커맨드가 성공적으로 실행되지 않는다면, 실패의 이유를 지시하는 데이터가 결과 레지스터에 저장될 수 있다(그리고 예를 들어, 커맨드를 실행하기 위해 재시도할지 여부를 결정하기 위해 사용된다).
도 8a에 지시된 바와 같이, 하나 이상의 핸들러들(805, 806)이 프로세서 클러스터들에서 실행될 수 있다. 일 실시예에서, 핸들러에 의해 생성되는 인터럽트들은 예시된 바와 같이, 가속기 클러스터들의 인보크를 유발할 수 있다.
도 8b는 커맨드 레지스터 구조의 일 실시예를 도시한다. 도시된 바와 같이, 커맨드 레지스터(필드들(811 내지 815)로서 식별됨)의 상위 16 비트들은 특정 비트수로 인코딩된 하기의 데이터 필드들을 포함한다:
예약됨(Reserved)(811): 2 비트
계속(Continue)(812): 1 비트
티클(Tickle)(813): 1 비트
프라이빗(Private)(814): 1 비트
Id(815): 11 비트들
일 실시예에서, id는 인보크하기 위한 가속기를 유일하게 식별한다. 예를 들어, 전술한 바와 같이, 복수의 가속기들은 가속기 클러스터(801) 내에 포함될 수 있고, 이러한 가속기들 각각은 유일하게 가속기 id 코드에 의해 유일하게 식별될 수 있다.
일 실시예에서, "프라이빗" 비트는 가속기가 알려진 가속기들의 특정 그룹에 속하는지를 지시한다. 예를 들어, 프라이빗 비트가 0으로 설정되면, id는 동일 id가 모든 컴퓨터 시스템들/프로세서들에 걸쳐 동일 가속기를 지칭하도록 (본 특허 출원의 양수인에 의해 정의된 바와 같은) 범용 세트의 가속기들 중 하나를 식별할 수 있다. 프라이빗 비트가 1로 설정되면, id는 독점적인 또는 재고-관리 유닛(SKU)-특정 가속기를 식별한다. 그러므로, 프라이빗 비트가 1로 설정되면, 동일 id는 상이한 시스템들의 상이한 가속기들을 지칭할 수 있다.
일 실시예에서, (도 8b의 필드(816)로서 식별된) 커맨드 레지스터의 하위 48 비트, 및 모든 파라미터 레지스터(도시 생략)는 특정 인보크된 가속기에 의해 정의된 특정 주문형 데이터를 포함한다.
일 실시예에서, 리타이어(retire)될 때, XCALL 명령어는 다음과 같이 EFLAGS의 Z-비트를 세트한다. 본 분야의 통상의 기술자에 의해 이해되는 바와 같이, EFLAGS는 프로세서의 현재 상태를 포함하는 x86 구현들에서의 상태 레지스터이다. XCALL이 요청된 가속기의 실행을 완료하면, Z 비트는 1로 설정된다. 이 경우에, 티클 비트가 1로 설정되면, 결과 레지스터는 수정되지 않고, 어떤 실제 작업도 행해지지 않는다. 티클 비트가 0으로 설정되면, 결과 레지스터는 가속기-특정 값으로 설정된다. XCALL이 어떤 작업도 행하지 않으면, Z 비트는 0으로 설정된다. 이 실시예에서 Z-비트는 XCALL 명령어가 성공했는지를 지시하기 위해 사용되지만, 상이한 비트가 본 발명의 기본적인 원리를 여전히 준수하면서 세트될 수 있다.
도 8c에 설명되는 일 실시예에서, 결과 레지스터는 하기 데이터 필드들을 포함한다:
예약됨(817): 2 비트들(일 실시예에서 항상 0으로 설정됨)
영구적(Perminent)(818): 1 비트
프라이빗(819): 1 비트
실패 상세(Failure Details)(820): 60 비트
일 실시예에서, 영구적 비트(818)는 동일 XCALL에의 후속의 호출이 성공할 것일지를 지시하기 위해 사용된다. 예를 들어, 0으로 설정되는 영구적 비트는 동일한 XCALL의 미래의 호출이 성공할 수도 있음을 지시한다(예를 들어, 가속기가 다른 HW 스레드를 서빙하기에 바쁘다면). 대조적으로, 동일 XCALL을 재시도시에 어떤 포인트도 없다면(예를 들어, 특정 가속기가 현재 SKU에 존재하지 않으면, 또는 요구된 특정 커맨드 및/또는 파라미터 조합이 이 SKU에서 가속기에 의해 지원되지 않으면) 영구적 비트가 1로 설정된다.
일 실시예에서, 결과 레지스터의 하위 60 비트는 XCALL 실패의 이유에 대한 추가적 데이터를 제공하기 위해 설정된다. 일 실시예에서, 가속기 클러스터(801)는 전술한 바와 같이 결과 레지스터를 갱신하는 데 필요한 정보를 제공한다.
일 실시예에서, 결과 레지스터(819)의 프라이빗 비트가 1로 설정되면, 이러한 상세는 가속기-특정 포맷을 갖는다. 프라이빗 비트가 0으로 설정되면, 이러한 상세는 (예를 들어, 본 특허 출원의 양수인에 의해 지정된 포맷과 같은) 미리 정해진 범용 포맷으로 제공된다. 본 발명의 일 실시예에 채택된 예시적인 실패 결과 코드들은 다음을 포함한다:
커맨드 레지스터의 예약 비트들은 0이 아니었음
가속기는 존재하지 않음
가속기는 다른 스레드를 서빙하기에 바쁨
도 9a 내지 도 9c에 기재된 흐름도는 본 발명의 일 실시예에 의해 수행되는 연산들을 도시한다. 901에서, XCALL 명령어가 디코딩된다. 그 결과, 902에서, 가속기에 의해 실행될 커맨드와 관련된 데이터가 커맨드 레지스터에 보내지고 임의의 필요한 파라미터들이 파라미터 레지스터에 보내진다. 903에서, 프라이빗 비트가 가속기가 (전술한 바와 같이) 가속기들의 알려진 그룹 또는 독점적 가속기에 속하는지에 의존하여 커맨드 레지스터에 설정된다. 또한, 903에서, ID 코드는 커맨드를 실행할 특정 가속기를 식별하기 위해 커맨드 레지스터에서 갱신된다.
904에서, 식별된 가속기는 XCALL 명령어에 의해 지정된 커맨드를 수신하고, 그것이 실행될 수 있는지 결정한다. 예를 들어, 가속기가 현재 다른 하드웨어 스레드를 서빙하기에 바쁠 수 있고 그래서 현재 커맨드를 실행할 수 없을 수 있다. 또한, 요구된 현재 커맨드 및/또는 파라미터 조합이 가속기에 의해 지원되지 않으면, 가속기는 성공적으로 커맨드를 실행할 수 없을 것이다. 대안적으로, 가속기는 904에서 명령을 성공적으로 실행할 수 있다.
명령이 성공적으로 실행되면, 프로세스는 도 9b로 진행하여, 906에서, EFLAGS Z-비트가 (전술한 바와 같이) 커맨드의 성공적 실행을 지시하기 위해 0과 같게 설정된다. 명령 레지스터의 티클 비트가 이전에 1로 설정된 것으로(예를 들어, 도 9a의 연산(902)에서), 907에서 판정되면, 908에서, 결과 레지스터가 수정되지 않은 채 남겨진다. 티클 비트가 이전에 0으로 설정된다면, 909에서, 티클 비트는 가속기-특정 값으로 설정된다.
XCALL 명령어에 의해 지정된 커맨드가 가속기에 의해 성공적으로 실행되지 않는다면(도 9a의 905에서 판정됨), 도 9c의 910에서, EFLAGS의 Z 비트는 (커맨드를 실행하는 것의 실패를 지시하기 위해) 1과 같게 설정된다. XCALL 명령어를 실행하기 위한 미래의 시도가 성공할 것이라고 예측된다면(911), 913에서, 결과 레지스터의 영구적 비트(도 8c의 818)는 0으로 설정된다. 실패의 이유를 특정하는 부가적 데이터가 또한 결과 레지스터의 실패 상세 필드(820)에 설정될 수 있다.
911에서 XCALL 명령어를 실행하기 위한 미래의 시도가 성공하지 못할 것이라고 예측되면, 912에서, 영구적 비트가 (결과의 영구성을 지시하기 위해) 1과 같게 설정되고 XCALL 명령어의 실행의 실패와 관련된 부가적 데이터가 결과 레지스터의 상세 필드(820)에 설정된다. 상기의 어느 경우이든, 상세 필드(820)의 데이터는 실패의 근본 원인의 결정 및/또는 명령어 실행을 수정하기 위한 조치들을 행하기 위해 분석될 수 있다.
전술한 바와 같이, 제어 레지스터 및/또는 파라미터 레지스터는 XCALL 명령어에 의해 수정될 수 있다. 또한, 일반 호출과 마찬가지로, XCALL은 프로세서 내의 스택 영역을 소모할 수 있다. x86 아키텍처를 이용하는 일 실시예에서, XCALL 동안 (예를 들어, 예외 핸들러에 의해 검사될 때), 64 비트 스택 포인터 레지스터(RSP)가 스택 사용을 반영하기 위해 갱신되어야 한다. 리타이어먼트 시에, RSP 레지스터는 사용된 스택 영역의 해방을 반영하기 위해 그것의 원래 값으로 복원된다. 사용된 스택의 양은 사용중인 특정 가속기에 의존한다.
본 명세서에서 기술된 연산들의 시퀀스들 동안 인보크된 가속기는 추가의 레지스터들 및/또는 메모리 로케이션들의 값을 검사 및/또는 수정할 수 있다. 특정 구문들이 상이한 가속기들에 대해 상이할 수 있지만, 본 발명의 기본적인 원리들은 동일하게 유지된다.
일 실시예에서, 가속기들은 다음의 규칙들의 세트를 준수하도록 구성된다:
(1) 인터럽트들 및/또는 예외들이 XCALL 동안 허용된다면, 계속 비트가 1로 설정되고 일단 핸들러가 완료하고 실행이 계속되면 XCALL이 재발행된다.
(2) 가속기는 인터럽트들 및/또는 예외들의 존재시에 전방 진행을 보장해야 한다.
(3) 인터럽트들 및/또는 예외들의 존재시에 전방 진행을 구현하기 위해 가속기에 의해 요구되는 임의의 상태는 기록된 가속기-특정 로케이션(들)에서 갱신될 수 있다 - 이러한 로케이션은 (a) 커맨드 및/또는 파라미터 레지스터들; (b) 다른 아키텍처의 레지스터들; (c) 스택 영역; (d) 추가적 메모리 로케이션들 중 하나 이상에 있을 수 있다. 상기의 모든 경우들에서, 그러한 상태는 예를 들어 정황 스위치(예를 들어, XSAVE/정황-스위치/XRESTORE)로부터 세이브와 복원 연산들을 생존시켜야 한다.
(4) "무효" 커맨드 및/또는 파라미터 레지스터들이 주어진다면(예를 들어, 지원되지 않는 특징, 하드웨어 한계들을 초과하는 값들, ... 기타 등등), 가속기는 인보크를 영구적으로 거절하도록 선택할 수 있다. 그러나, 가속기가 인보크를 받아들였으면, 요청을 완료하고 결과들을 제공할 책임이 있다.
(5) 프로그램 가능한 가속기들은 사용자 코드를 인보크하는데, 이는 가속기-특정 방법들로 제한될 수 있다(도 8a에서 프로그램 가능한 기능 유닛(803)에 의해 표현됨). 예를 들어, "소트" 가속기는 비교 기능을 인보크할 수 있고, "루프" 가속기는 루프 본체를 인보크할 수 있다. 사용자 코드가 예상된 제한들을 준수하지 않는다면(예를 들어, 링 기반 계층적 보호 도메인이 사용될 때 링 0을 입력하려고 시도한다), 가속기는 평소처럼 그것의 상태를 세이브시킨 후, 예외(특히, UD)를 트리거할 것이다.
(6) 예외 핸들러는 (a) 세이브된 상태에 기초하여, 가속화되지 않은 소프트웨어에서 부분적으로-평가된 가속기를 완료하기; (b) 지원되지 않는 명령어를 에뮬레이트하고 XCALL을 재발행하기(지원되지 않는 연산이 재시도되지 않도록 세이브된 상태를 미세 조정하는 것을 필요로 함); 또는 (c) 실행을 종료하기를 선택할 수 있다. 어떤 수정도 없이 XCALL을 재발행하기 위해 단순히 시도하는 것은 (UD에 대해 예상된 바와 같이) 단순히 예외를 다시 트리거할 것이다.
본 명세서에서 기술된 본 발명의 실시예들은 가속기들을 인보크하기 위한 x86 ISA 등과 같은 명령어 세트 아키텍처(ISA)에 통합될 수 있는 표준 메커니즘을 제공한다. 본 특허 출원의 배경기술에서 기술된 기법들과 달리, 본 명세서에서 기술된 가속기 인보크 기법들은 미세 단위(fine-grained), 낮은 레이턴시 동기화 가속기들을 허용하며, 이러한 가속기들은 당연히 메모리 해석, 레지스터들, 캐시들 등과 같은 코어의 자원들을 같은 정도로 많이(또는 적게) 공유한다. 프로그램 가능한 XCALL 가속기들은 사용자가 보통 x86 코드(예를 들어, 루프들 및 소팅)를 가속하도록 허용하고, 이것은 메인 x86 프로그램의 통합 부분이고, 별도의 툴체인을 요구하지 않는다.
또한, 현재 가속기 인터페이스들은 특정 가속기를 위해 설계되는데 반해, 본 명세서에서 기술된 본 발명의 실시예들은 확장 가능하여, 특정 마켓 부문들을 위한 특정 가속기들뿐만 아니라 모든 마켓 부문들을 가로질러 "보편적" 가속기들의 능률적인 제공을 허용한다. 가속기 인보크는 낮은 레이턴시들에서, 그리고 데이터 복사 오버헤드들 없이 수행될 수 있어서, 그러한 가속기들의 생태계가 이전에는 제공하는 것이 비현실적었던 기능성을 커버하게 허용한다. 또한, x86과 같은 기존의 ISA들과의 긴밀한 통합을 유지하면서, 특정 마켓들(임베디드 시스템들, 이미지 프로세싱, HPC 서버, 기타 등등)을 위한 가속기들을 가진 SKU들을 맞춤화하는 것이 가능하게 된다.
또한 본 명세서에서 기술된 XCALL 인터페이스는 CPU ISA와 툴체인(본 특허 출원의 양수인에 의해 설계된 프로세서들을 위한 x86 ISA)의 밖으로 나가는 일 없이 이전에 접근 가능하지 않았던 기능성을 커버하기 위해 CPU들을 확장하기 위한 능력을 가능하게 한다. 예를 들어, 본 명세서에 기술된 기법을 이용하여 프로그램 가능한 루프 가속기들(SKMD) 및 소트 가속기들과 같은 프로그램 가능한 가속기들(803)이 제공될 수 있을 뿐만 아니라, 고속-푸리에 변환(FFT), 텍스처 샘플링, 및 다양한 다른 기능들을 수행하는 것들과 같은 고정 기능 가속기들(802)도 제공될 수 있다.
복합적 ISA 명령어들의 고속 실패 핸들링
현재, 명령어들을 실패하는 것은 일반적으로 예외 핸들러들에 사용하기 위한 전용 레지스터들 및/또는 전용 플래그 비트들에 의한 것을 제외하고, 실패에 관하여 추가적인 상세를 제공할 방법이 없다. 후술하는 본 발명의 실시예들은 명령어들에 대한 신규의 "고속 실패" 거동을 제공한다. 이 신규의 거동에서, 명령어는 (예를 들어, EFLAGS와 같은 플래그들 레지스터 또는 몇몇 다른 레지스터 내부에) 성공/실패 지시를 리턴할 수 있다. 또한 일 실시예에서, 실패의 검출시에 명령어는 보통 데스티네이션 레지스터에 추가적인 실패 상세를 기입한다. 이것은 애플리케이션 코드가 명령어 성공/실패를 테스트하게 해주고, 계층적 보호 도메인들(예를 들어, 링 0)를 채택한 시스템상의 로우 레벨 도메인으로의 스위칭 또는 예외 핸들러의 인보크로부터 유발될 시간 및 프로세싱 리소스들의 소모 없이 특정 실패 모드들에 응답하게 해준다.
명령어 실패 핸들링에 대한 제안된 신규의 절충점은, 실패하기 쉽고 또한 복잡한 실패 모드들을 갖는, 전술한 XCALL 명령어와 같은 명령어들의 특정 분류에 대해 선택된다. 그러나, 이것은 실패의 가능성이 높지 않은 0으로 나누기(DIV)와 같은 연산들의 다른 부류들에 대해, 또는 단순한 실패 모드를 갖는 로크들과 같은 실패의 가능성이 높은 연산에 대해 적절하지 않다.
본 발명의 일 실시예는 명령어들을 다음의 그룹들 중 하나로 분류한다:
(1) 항상 성공. 예를 들어, 2개 레지스터들의 값들을 더하는 명령어의 모든 인스턴스는 성공할 것으로 예상된다. 본 발명의 일 실시예에서, 어떤 실패 핸들링도 이 카테고리의 명령어들에 대해 제공되지 않는다.
(2) 대부분 성공할 것으로 예상. 예를 들어, 2개 레지스터들에 저장된 값들을 나누는 명령어는 통상적으로 성공할 것이다. 이것은 단지 영으로 나누는 에러의 결과로서 실패할 것이다. 본 발명의 일 실시예에서, 이 클래스의 명령어들은 실패에 대한 예외 핸들러를 트리거할 것이다. 그 후 예외 핸들러는 정확한 방책(예를 들어, 페이지 오류들에 대한 CR2)을 결정하기 위해 추가적 실패 정보를 포함하는 x86 제어 레지스터들(CR)과 같은 전용 레지스터들을 검사할 수 있다. 예외 핸들러는 실패-핸들링 논리에 의해 애플리케이션 코드를 깨끗하고 비오염된 채로 유지하면서, 통상의 애플리케이션 코드와는 분리된다.
(3) 단순한 실패 모드로 "종종" 실패할 것으로 예상. 일 실시예에서, 이러한 유형의 명령어들에 대해, 플래그들 및/또는 데스티네이션 레지스터(들)에서의 비트(들)가 실패를 지시하도록 설정되지만, 상세는 제공되지 않는다. 일 예는 로크들 데이터를 설정하기 위해 시도하는 명령어이다. 이러한 단순한 실패 모드들에 대해, 애플리케이션 코드 자체는 복원을 명시적으로 처리한다(예외 핸들러를 요구할 필요 없이).
(4) 복잡한 실패 모드로 "종종" 실패할 것으로 예상. 이 클래스의 명령어들에 대해, 처리 시스템들은 현재 실패 상세를 검사하기 위해 전용 레지스터들에 액세스하기 위해 예외 핸들러에 의존할 필요가 있다. "종종" 실패하고 복합적 실패 모드들을 갖는 명령어들에 대해, 본 발명의 실시예들은 플래그들 및/또는 데스티네이션 레지스터(들)의 설정 비트(들)를 설정하는 것을 허용하고, 또한 실패의 상세를 지정하기 위해 데스티네이션 레지스터(들)의 추가적 비트(들)를 설정하는 것을 허용함으로써, 애플리케이션 코드가 예외 핸들러에 의지하지 않고 정확한 작용들을 수행하게 해준다.
이것은 실패의 비용을 최소로 (각각의 명령어의 결과를 테스트해야 하는 비용으로) 줄인다. 이것은 또한 변경하기 어려운 범용 예외 핸들러를 사용하는 것(임의의 인보크 포인트에서 이러한 논리를 명시적으로 인보크해야 하는 비용으로)과는 반대로, 애플리케이션이 이것의 실패-핸들링 논리를 현재의 정황에 맞게 사소하게 맞추는 것을 허용한다.
예를 들어, 이 거동은 XCALL 명령어에 대해 상기에서 설명된다. 도 9a 내지 도 9c에 제공된 예에서, XCALL 명령어는 특정 가속기에 의해 실행될 커맨드를 특정한다. 응답으로, 가속기는 커맨드를 실행할 수 있고 그 결과들을 결과 레지스터(논의된 바와 같이, 범용 레지스터일 수 있음)에 제공할 수 있다. 대안적으로, 가속기는 여러 가지 이유로 커맨드를 실행하는 것을 실패할 수 있고 실패의 이유들에 의해 결과 레지스터를 갱신할 수 있다. 예를 들어, 가속기는 현재 다른 하드웨어 스레드를 서비스하기에 바쁠 수 있고 그래서 현재 커맨드를 실행할 수 없을 수 있다. 이 경우에, XCALL 명령어는 가속기가 더 이상 바쁘지 않을 때인 나중에 성공적으로 실행될 수 있다. 따라서, 실패 지시에 응답하여, XCALL 명령어를 실행하기 위해 제2 시도가 행해질 수 있음을 지시하기 위해 결과 레지스터에서 영구적 비트(818)가 0으로 설정된다.
이와 대조적으로, 요구된 현재 커맨드 및/또는 파라미터 조합이 가속기에 의해 지원되지 않으면, 가속기는 그 커맨드를 결코 성공적으로 실행할 수 없을 것이다. 따라서, 실패 지시에 응답하여, 제2 시도가 XCALL 명령어의 성공적 실행으로 이어지지 않을 것임을 지시하기 위해 결과 레지스터에서 영구적 비트(818)가 1로 설정된다.
그 후 연속적 프로그램 코드는 진행 방법을 결정하기 위해 결과 레지스터를 판독할 수 있다. 예를 들어, 영구적 비트가 0으로 설정되면, 그것은 XCALL 명령어를 실행하려고 다시 시도할 수 있는 데 반해, 영구적 비트가 1로 설정되면, 그것이 XCALL 명령어를 실행하려고 시도하지 않을 수 있다.
도 10은 이 모드의 연산을 구현하기 위한 본 발명의 일 실시예를 도시하는 흐름도이다. 흐름도에 특정된 동작들은 실행 유닛 내의 로직에 의해 구현될 수 있다. 1001에서, 제1 명령어를 실행하기 위해 시도되고, 1002에서, 제2 명령어를 실행하기 위해 시도될 수 있다. 1003에서 결정된 바와 같이, 제1 명령어가 성공적으로 실행된다면, 1004에서, 제2 명령어도 또한 성공적으로 실행된다. 예를 들어, 제2 명령어는 (전술한 결과 레지스터와 같은) 레지스터에 기입된 제1 명령어의 결과들에 의존할 수 있다.
제1 명령어가 성공적으로 실행되지 않는다면, 1005에서, 제2 명령어가 또한 실행하는 데 실패한다. 이전 구현들과는 대조적으로, 예외 핸들러를 인보크하는 것 없이 1006에서 복합적 실패 상세들이 검사되어, 실패 평가가 애플리케이션 프로그램 코드에 의해 수행될 수 있다. 특히, 결과 레지스터로부터 결과들을 판독하기 위해 후속 명령어가 실행될 수 있고, 제1 명령어를 실행하기 위해 새로운 시도가 행해져야 할지 결정한다. 실패의 결과들이 제2 시도가 유효하지 않을 것임을 지시하면, 제2 시도가 방지될 수 있어서, 시간 및 프로세서 리소스들을 절약한다. 결과들이 제2 시도가 성공할 수 있음을 지시하면, 제1 명령어를 실행하기 위한 제2 시도가 행해질 수 있다. 이러한 특정 예들이 설명의 편의상 제공되지만, 본 발명의 기본적인 원리들은 이러한 상세 사항들로 제한되지 않는다는 것을 유의해야 한다.
그러므로, 본 명세서에 기술된 본 발명의 실시예들에서, 명령어의 보통 데스티네이션 레지스터들은 이중 역할에 사용될 수 있다; 그들은 정상적인 실행의 경우에 결과들을 보유하고, 명령어가 실패하면, 실패 상세를 보유한다. 이것은, 계산 결과들을 위한 그리고 실패 결과들을 위한 전용 레지스터들이 있는, 그리고/또는 예외 핸들러가 인보크되어야 하는 현재의 구현들과는 상이하다. 이러한 기법들은 프로그램 가능한 프로세서들(CPU들, DSP들, GPU들...)의 모든 공급자들에 적용될 수 있다.
복합적 명령어들의 고속 실패 핸들링의 사용은 XCALL과 같은 명령어들을 구현할 가능성을 여는데, 그렇지 않다면 효율적인 명령어로서 정의하기가 어려울 것이다. 그러한 효율적인 명령어들을 이용하는 프로세서들은 향상된 성능 및 감소된 개발 비용들을 실현할 것이다.
태스크 전환 가능한 동기식 HW 가속기들
동기식 하드웨어 가속기들은 예외들의 경우에는 전방 진행을 보장할 필요가 있다; 이것을 위해 그들은 (x86 아키텍처들에서 XSAVE/XRESTORE와 같은) 세이브 및 복원 연산들을 생존시키는 로케이션에 그들의 상태를 세이브할 필요가 있다. 본 발명의 일 실시예는 (상기에서 설명되고 도 8a에 도시된 것들과 같은) 새로운 하드웨어 가속기들을 지원하기 위해 세이브/복원 영역을 확장함으로써 이 연산을 가능하게 한다.
발명의 일 실시예는 운영 체계(OS) 활성화 없이, 처리 태스크 전환과 코어 이동을 포함한, 강건한 예외 모델을 허용하기 위해 동기식 하드웨어 가속기들의 중간 상태를 저장하기 위해 메모리 내의 스택 영역을 사용한다. 특히, 본 발명의 실시예들은 동기식 하드웨어 가속기들과 같은 가속기들이 그들의 상태를 메모리 스택에 세이브하게 해주고, (예를 들어, 후술되는 바와 같이 예외 핸들러에 의해 다루어지는 예외들과 같은) 다양한 유형의 프로세서 이벤트들을 뒤따라 그들의 상태를 안전하게 복원한다.
일 실시예에서, 하드웨어 가속기 인보크는, 가속기가 그의 상태를 유지하기 위해 사용자의 스택의 영역을 소모할 수 있는 호출 명령어로서 취급된다. 예외 및/또는 인터럽트가 가속기를 강제로 중단시킬 때, 이 상태는 자동적으로 지속되고, 예외 핸들러, 정황 전환, 및/또는 코어 이동을 뒤따라 가속기가 재개될 때 이용 가능하다. 후자의 경우, 계산을 재개하는 하드웨어 가속기는 (새로운 코어와 연관된) 다른 것일 수 있다. 이러한 경우에, 새로운 코어는 (예를 들어, 메모리 또는 공유 캐시로부터) 스택 내에 보존된 상태에 액세스할 수 있다.
일 실시예에서, 동기식 가속기는 인보크되고, 인보크에 이어서 스택을 사용하고, 그 후 완료시 스택의 이 일부를 해제하는(함수 호출처럼 거동하여) 라이브러리 함수처럼 취급된다. 일 실시예에서, 가속기가 인보크될 때, 스택 포인터는 인보크된 가속기의 로컬 변수들과 함께 작업하기 위해 이동된다. 인보크가 완료될 때, 호출자가 호출이 발생했을 때 그것이 떠났던 곳에서 시작할 수 있도록 스택 포인터는 그것이 원래 있었던 곳으로 리턴된다. 일 실시예에서, 예외 핸들러가 인보크되는 경우에, 프로그램의 스택 포인터는 가속기의 스택 사용을 반영하기 위해 조절되며, 그에 의해 예외 핸들러가 가속기의 세이브 영역을 수정하지 않도록 보장한다.
본 발명의 일 실시예는 메모리의 하드웨어 스택(1150), 애플리케이션 하드웨어 스레드(1151), 및 가속기 스레드(1152)를 도시하는 도 11에 도시된다. 도 11에 도시된 특정 스택(1150)은 애플리케이션 하드웨어 스레드(1151)의 실행과 연관된 데이터를 저장하는 호출자 스택 영역(1120); 가속기 스레드(1152)의 실행과 연관된 데이터를 저장하는 가속기 저장 영역(1130); 및 예외 핸들러(1105)의 실행과 연관된 데이터를 저장하는 예외 핸들러 스택 영역(1140)을 포함한다.
일 실시예에서, 애플리케이션 하드웨어 스레드의 실행 동안, 가속기 함수가 인보크된다. 응답으로, 스택 포인터는 가속기 세이브 영역(1130)의 상단을 가리키도록 조절되고 가속기 세이브 영역(1130)과 연관된 변환 색인 버퍼(TLB)의 엔트리들은 1101에서 로크된다. 그렇게 하는 한가지 이유는 예외가 발생하고 가속기가 그의 상태를 (스택에 또는 다른 데스티네이션 메모리 영역에 있도록) 세이브하면, 원래의 예외를 두 배의 것으로 변환할 추가적 페이지 오류를 회피하는 것이 바람직하다. 이것을 회피하기 위한 하나의 방법은 가속기가 작업을 시작할 때 가속기 세이브 영역(1130)에 대한 TLB 페이지 엔트리(또는 엔트리들을) 로크하는 것이며, 그에 의해 어떤 그와 같은 페이지 오류가 생성되지 않도록 보장한다. OS는 여전히 페이지를 가용적이지 않은 것으로서 마크할 수 있지만, 다음의 정황 전환 때까지 (스레드가 전혀 실행하고 있지 않고, 가속기 상태가 안전하게 세이브될 때) 그것을 물리적으로 퇴거시키는 것을 연기하도록 강제된다. 정황 전환으로부터의 리턴시에, 가속기는 (상이한 물리적 로케이션들을 가리킬 수 있는) TLB 페이지 엔트리들을 재획득하고, 상태를 로딩하고 계속한다. 큰 가속기 세이브 영역은 복수의 TLB 페이지들(극단적인 경우들에서, 수십 개의 4k 페이지들)에 걸칠 수 있다. 로크될 필요가 있는 TLB 엔트리들의 개수는 큰 페이지들(예를 들어, 64k 페이지들)을 이용함으로써 감소될 수 있다.
1102에서, 가속기는 그것이 실행하고 있는 커맨드에 기초된 연산들을 수행하고, 1103에서, 그것의 현재 상태를 스택(1150) 내의 가속기 세이브 영역(1130)에 세이브한다. 그 후 가속기는 (전술한 바와 같이 추가적 페이지 오류를 회피하기 위해 1101에서 로크되었던) TLB를 1104에서 언로크한다. 예시된 바와 같이, 예외 이벤트가 검출되고, 이것은 애플리케이션 하드웨어 스레드(1151) 내에서 실행된 예외 핸들러(1105)에 전달된다. 실행 동안, 실행 핸들러는 스택(1150)의 일부(1140)를 사용하여 판독/기입을 행할 수 있다(즉, 이것은 예외 조건의 처리 동안 중간 상태 정보를 저장하기 위해 예외 핸들러 스택(1140)을 이용한다). 일단 예외 핸들러가 그의 연산을 완료하면, 그것은 가속기 스레드(1152)가 재개하도록 허용한다.
1106에서 가속기는 TLB를 다시 로크하고(전술한 것과 동일한 이유들로), 1107에서, 이전에 가속기 세이브 영역(1130)에 저장되었던 상태를 로딩한다. 이 단계에서, 가속기 스레드(1152)는 실제로 가속기 스레드의 제1 부분(연산들 1101-1104)과는 상이한 코어 또는 프로세서상에서 실행될 수 있다는 것을 유의한다. 이러한 경우에, 그것은 단순히 공유된 메모리 또는 캐시에 물리적으로 로케이트될 수 있는 가속기 세이브 영역(1130)으로부터 세이브된 가속기 상태를 단순히 로딩할 수 있다. 그것은 그 후 1108에서 그의 실행의 스레드를 완료하고, 1109에서 TLB를 언로크하고, 1110에서 완료한다. 그 후 제어는 애플리케이션 하드웨어 스레드(1151)로 다시 전달되어, 스택 포인터를 가속기 세이브 영역(1130)의 상단(즉, 그것이 가속기 스레드(1152)의 실행을 시작할 때 떠났던 곳)으로 리셋한다.
상기에 제공된 특정 상세에 대해 다양한 수정들이 본 발명의 기본적인 원리들을 여전히 준수하면서 구현될 수 있다는 것을 이해할 것이다. 예를 들어, 일 실시예에서, 특정 메모리 영역이 가속기가 (스택을 사용하기보다는) 그의 상태를 그 내부에 보유하도록 설계될 수 있다. 이 경우에, 예외 핸들러를 위해 프로그램의 스택 포인터를 수정할 필요가 없다.
어느 실시예에서든, 본 명세서에 기술된 기법들은 인보크하는 스레드가 (대칭적인) 코어들 사이에 이동할 때 가속기들이 투명하게 작업하게 허용하고; 하나의 코어상의 가속기는 그의 상태를 메모리에 세이브하고, 스레드가 다른 코어상에서 스케줄링될 때, 가속기는 거기서 메모리로부터의 데이터를 (예를 들어, 효율을 위한 공유된 공통 캐시를 통해) 로딩한다. 그러므로, 본 명세서에서 기술된 본 발명의 실시예들은 가속기가 OS 활성화 없이(예를 들어, XSAVE/XRESTORE의 수정 및/또는 아키텍처의 레지스터들을 추가하는 일 없이), 예외들, 정황 전환들, 및/또는 코어 이동들의 존재 하에 투명하게 그의 상태를 세이브하고 전방 진행을 보장하도록 허용한다. 따라서, 이것은 수정된 XSAVE를 통해 OS의 활성화 및 새로운 아키텍처의 레지스터들의 추가를 이전에 필요로 했던 가속기 포맷들의 사용을 허용한다. 그러한 가속기들을 이용하는 프로세서들은 향상된 성능과 감소된 개발 비용들을 실현한다.
예시적인 명령어 포맷들
본 명세서에 개시되는 명령어(들)의 실시예들은 상이한 포맷들로 구현될 수 있다. 또한, 예시적인 시스템들, 아키텍처들, 및 파이프라인들이 하기에서 상세히 설명된다. 명령어(들)의 실시예들은 이러한 시스템들, 아키텍처들 및 파이프라인들에서 실행될 수 있지만, 상세히 설명되는 것들로 제한되는 것은 아니다.
벡터 친화적 명령어 포맷은 벡터 명령어들에 대해 적절한 명령어 포맷이다(예를 들어, 벡터 연산들에 특정한 특정 필드들이 존재한다). 벡터 및 스칼라 연산들 양자 모두가 벡터 친화적 명령어 포맷을 통해 지원되는 실시예들이 설명되지만, 대안적인 실시예들은 벡터 친화적 명령어 포맷을 통한 벡터 연산들만을 이용한다.
도 12a 내지 도 12b는 본 발명의 실시예들에 따른 일반 벡터 친화적 명령어 포맷 및 그의 명령어 템플릿들을 도시하는 블록도들이다. 도 12a는 본 발명의 실시예들에 따른, 일반적인 벡터 친화적 명령어 포맷 및 그의 클래스 A 명령어 템플릿들을 도시하는 블록도인 반면; 도 12b는 본 발명의 실시예들에 따른, 일반적인 벡터 친화적 명령어 포맷 및 그의 클래스 B 명령어 템플릿들을 도시하는 블록도이다. 구체적으로는, 클래스 A 및 클래스 B 명령어 템플릿들이 정의되는 일반 벡터 친화적 명령어 포맷(1100)은 양쪽 모두 메모리 액세스 없음(1105) 명령어 템플릿 및 메모리 액세스(1120) 명령어 템플릿을 포함한다. 벡터 친화적 명령어 포맷의 정황에서 일반이라는 용어는 임의의 특정 명령어 세트에 얽매이지 않는 명령어 포맷을 일컫는다.
벡터 친화적 명령어 포맷이 하기의 것을 지원하는 본 발명의 실시예들이 기술될 것이지만: 32 비트(4 바이트) 또는 64 비트(8 바이트) 데이터 성분 폭(또는 크기)을 갖는 64 바이트 벡터 피연산자 길이(또는 크기)(그리고 그에 따라, 64 바이트 벡터는 16개의 더블워드-크기 요소 또는 대안으로서 8개의 쿼드워드-크기 요소 중 어느 것으로 구성된다); 16 비트(2 바이트) 또는 8 비트(1 바이트) 데이터 성분 폭(또는 크기)을 갖는 64 바이트 벡터 피연산자 길이(또는 크기); 32 비트(4 바이트), 64 비트(8 바이트), 16 비트(2 바이트), 또는 8 비트(1 바이트) 데이터 성분 폭(또는 크기)을 갖는 32 바이트 벡터 피연산자 길이(또는 크기); 및 32 비트(4 바이트), 64 비트(8 바이트), 16 비트(2 바이트) 또는 8 비트(1 바이트) 데이터 성분 폭(또는 크기)을 갖는 16 바이트 벡터 피연산자 길이(또는 크기); 대안적 실시예들은 더 많거나, 더 작거나 또는 상이한 데이터 성분 폭(예를 들어, 128 비트(16 바이트) 데이터 성분 폭)을 갖는 더 많거나, 더 작거나, 및/또는 상이한 벡터 피연산자 크기(예를 들어, 256 바이트 벡터 피연산자)를 지원할 수도 있다.
도 12a의 클래스 A 명령어 템플릿들은 다음을 포함한다: 1) 메모리 액세스 없음(1105) 명령어 템플릿들 내에서, 도시되어 있는, 메모리 액세스 없음, 풀 라운드 제어 유형 연산(1110) 명령어 템플릿, 및 메모리 액세스 없음, 데이터 변환 유형 연산(1115) 명령어 템플릿; 및 2) 메모리 액세스(1120) 명령어 템플릿들 내에서, 도시되어 있는, 메모리 액세스, 임시(1125) 명령어 템플릿과 메모리 액세스, 비임시(1130) 명령어 템플릿을 포함한다. 도 12b의 클래스 B 명령어 템플릿들은 다음을 포함한다: 1) 메모리 액세스 없음(1105) 명령어 템플릿 내에서, 도시되어 있는, 메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어 유형 연산(1112) 명령어 템플릿, 및 메모리 액세스 없음, 기입 마스크 제어, vsize 유형 연산(1117) 명령어 템플릿; 및 2) 메모리 액세스(1120) 명령어 템플릿 내에서, 도시되어 있는, 메모리 액세스, 기입 마스크 제어(1127) 명령어 템플릿을 포함한다.
일반 벡터 친화적 명령어 포맷(1100)은 도 12a 및 도 12b에 도시된 순서대로 하기에 열거된 다음의 필드들을 포함한다.
포맷 필드(1140) - 이 필드 내의 특정 값(명령어 포맷 식별자 값)은, 벡터 친화적 명령어 포맷, 및 그에 따라 명령어 스트림들 내에서 벡터 친화적 명령어 포맷의 명령어들의 출현을 유일하게 식별한다. 이와 같이, 이 필드는 일반 벡터 친화적 명령어 포맷만을 갖는 명령어 세트에 대해 필요하지 않다는 점에서 옵션적이다.
베이스 연산 필드(1142) - 그 콘텐츠는 상이한 베이스 연산들을 구분한다.
레지스터 인덱스 필드(1144) - 그 콘텐츠는 직접 또는 어드레스 생성을 통해, 레지스터들에 있거나 메모리에 있는, 소스 및 데스티네이션 피연산자의 로케이션들을 명시한다. 이들은 PxQ(예를 들어, 32x512, 16x128, 32x1024, 64x1024) 레지스터 파일로부터 N개의 레지스터들을 선택하기에 충분한 개수의 비트들을 포함한다. 일 실시예에서 N이 세 개 소스들과 하나의 데스티네이션 레지스터까지일 수 있지만, 대안적 실시예들은 소스들을 더 많거나 더 적은 소스들 및 데스티네이션들을 지원할 수 있다(예를 들어, 두 개의 소스까지 지원할 수 있는데 이러한 소스들 중 하나는 데스티네이션으로서도 작용함, 세 개의 소스까지 지원할 수 있는데 이러한 소스들 중 하나는 데스티네이션으로서도 작용함, 두 개 소스들과 하나의 데스티네이션 레지스터까지 지원할 수 있음).
변경자 필드(1146) - 그 콘텐츠는 메모리 액세스를 특정하는 일반 벡터 명령어 포맷의 명령어들의 출현을 그렇지 않은 명령어들로부터 구분한다; 즉, 메모리 액세스 없음(1105) 명령어 템플릿과 메모리 액세스(1120) 명령어 템플릿 간을 구분한다. 메모리 액세스 연산들은 메모리 계층구조에 대해 판독 및/또는 기입하는(어떤 경우들에서는 레지스터들 내의 값들을 이용하여 소스 및/또는 데스티네이션 어드레스들을 특정함) 데 반해, 메모리 액세스 없음 연산들은 그렇게 하지 않는다(예를 들어, 소스 및 데스티네이션들이 레지스터들이다). 일 실시예에서, 이 필드는 또한 메모리 어드레스 계산들을 수행하는 세 개의 상이한 방법들 중에서 선택하지만, 대안적 실시예들은 메모리 어드레스 계산들을 수행하는 더 많거나, 더 적거나, 또는 상이한 방법들을 지원할 수 있다.
증강 연산 필드(1150) - 그 콘텐츠는 베이스 연산 외에 다양한 상이한 연산들 중 어느 것이 수행될지를 구분한다. 이 필드는 정황 특정적(context specific)이다. 본 발명의 일 실시예에서, 이 필드는 클래스 필드(1168), 알파 필드(1152), 및 베타 필드(1154)로 분할된다. 증강 연산 필드(1150)는 2, 3, 또는 4개의 명령어들보다는 단일 명령어에서 연산들의 공통 그룹들이 수행되도록 허용한다.
스케일 필드(1160) - 이 콘텐츠는 메모리 어드레스 생성의 일부로서 사용된다(예를 들어, 2scale*인덱스+베이스를 사용하는 어드레스 생성을 위해).
변위 필드(1162A)- 그 콘텐츠는 메모리 어드레스 생성의 일부로서 사용된다(예를 들어, 2scale*인덱스+베이스+변위를 사용하는 어드레스 생성을 위해).
변위 인자 필드(1162B)(변위 인자 필드(1162B) 바로 위의 변위 필드(1162A)의 병치(juxtaposition)는 하나 또는 나머지 것이 사용됨을 지시한다는 것을 유의한다) - 그 콘텐츠는 어드레스 생성의 일부로서 사용된다; 이것은 메모리 액세스의 사이즈(N)에 의해 스케일링될 변위 인자를 특정한다 - 여기서 N은 메모리 액세스에서 바이트들의 개수이다(예를 들어, 2scale*인덱스+베이스+스케일링된 변위를 사용하는 어드레스 생성을 위해). 잉여 하위 비트들은 무시되고, 따라서, 변위 인자 필드의 콘텐츠는 유효 어드레스를 계산하는 데 사용될 최종 변위를 생성하기 위해 메모리 피연산자 총 사이즈(N)로 승산된다. N의 값은 (본 명세서에서 설명되는) 전체 오피코드 필드(1174)와 데이터 조작 필드(1154C)에 기초하여 런타임시에 프로세서 하드웨어에 의해 결정된다. 변위 필드(1162A) 및 변위 인자 필드(1162B)는, 이들이 메모리 액세스 없음(1105) 명령어 템플릿에 사용되지 않으며 그리고/또는 상이한 실시예들이 둘 중 하나만 구현하거나 아무것도 구현하지 않는다는 점에서 옵션적이다.
데이터 성분 폭 필드(1164) - 그 콘텐츠는 다수의 데이터 성분 폭들 중 어떤 것을 사용될 것인지를 구분한다(어떤 실시예들에서는 모든 명령어들에 대해; 다른 실시예들에서는 명령어들 중 일부만에 대해). 이 필드는 오직 하나의 데이터 성분 폭이 지원되며 그리고/또는 데이터 성분 폭들이 오피코드들의 일부 양태을 이용하여 지원되는 경우에 필요하지 않다는 점에서 옵션적이다.
기입 마스크 필드(1170) - 그 콘텐츠는, 데이터 성분 위치당 단위로, 데스티네이션 벡터 피연산자 내의 데이터 성분 위치가 베이스 연산과 증강 연산의 결과를 반영하는지를 제어한다. 클래스 A 명령어 템플릿들은 병합-기입마스킹(merging-writemasking)을 지원하는 데 반해, 클래스 B 명령어 템플릿들은 병합- 및 제로화-기입마스킹 양자 모두를 지원한다. 병합할 때, 벡터 마스크들은 데스티네이션 내의 임의의 세트의 요소들이 (베이스 연산 및 증강 연산에 의해 특정된) 임의의 연산의 실행 중에 갱신들로부터 보호될 수 있게 해주고; 다른 일 실시예에서는, 대응하는 마스크 비트가 0을 갖는 데스티네이션의 각 요소의 이전의 값을 보존하게 해준다. 대조적으로, 제로화할 때, 벡터 마스크들은 데스티네이션 내의 임의의 세트의 요소들이 (베이스 연산 및 증강 연산에 의해 특정된) 임의의 연산의 실행 중에 제로화되게 해주고; 일 실시예에서, 대응하는 마스크 비트가 0 값을 가질 때 데스티네이션의 요소가 0으로 설정된다. 이러한 기능의 서브세트는 수행되고 있는 연산의 벡터 길이를 제어하는 능력이지만(즉, 수정되고 있는 요소들의 첫 번째 것부터 마지막 것까지의 스팬(span)); 수정되는 요소들이 연속적일 필요는 없다. 따라서, 기입 마스크 필드(1170)는 로딩, 저장, 산술, 논리 등을 포함한, 부분 벡터 연산들을 허용한다. 기입 마스크 필드(1170)의 콘텐츠가 사용될 기입 마스크를 포함하는 다수의 기입 마스크 레지스터들 중 하나를 선택하는 (그리고 기입 마스크 필드(1170)의 콘텐츠가 마스킹이 수행될 것임을 간접적으로 식별하는) 본 발명의 실시예들이 기술되지만, 대안적 실시예는 그 대신에 또는 추가로 마스크 기입 필드(1170)의 콘텐츠가 수행될 마스킹을 직접적으로 특정하는 것을 허용한다.
즉치 필드(1172) - 그 콘텐츠는 즉치(immediate)의 명시를 허용한다. 이 필드는 즉치를 지원하지 않는 일반 벡터 친화적 포맷의 구현에는 존재하지 않고, 즉치를 사용하지 않는 명령어들에 존재하지 않는다는 점에서 옵션적이다.
클래스 필드(1168) - 그 콘텐츠는 명령어들의 상이한 클래스들 간을 구분한다. 도 12a 및 도 12b를 참조하면, 이 필드의 콘텐츠는 클래스 A와 클래스 B 명령어들 중에 선택한다. 도 12a 및 도 12b에서, 필드에 특정 값이 존재한다는 것을 지시하기 위해 둥근 코너 사각형들이 사용된다(예를 들어, 도 12a 및 도 12b에서 각각 클래스 필드(1168)에 대한 클래스 A(1168A) 및 클래스 B(1168B)).
클래스 A의 명령어 템플릿들
클래스 A의 메모리 액세스 없음(1105) 명령어 템플릿들의 경우에, 알파 필드(1152)는 RS 필드(1152A)로서 해석되고, 그것의 콘텐츠는 상이한 증강 연산 유형들 중 어느 것이 수행될지를 구분하는 한편(예를 들어, 라운드(1152A.1) 및 데이터 변환(1152A.2)이 각각 메모리 액세스 없음, 라운드 유형 연산(1110), 및 메모리 액세스 없음, 데이터 변환 유형 연산(1115) 명령어 템플릿들에 대해 지정된다), 베타 필드(1154)는 지정된 유형의 연산들 중 어느 것이 수행될지를 구분한다. 메모리 액세스 없음(1105) 명령어 템플릿들에서, 스케일 필드(1160), 변위 필드(1162A), 및 변위 스케일 필드(1162B)는 존재하지 않는다.
메모리 액세스 없음 명령어 템플릿들 - 풀 라운드 제어 유형 연산
메모리 액세스 없음 풀 라운드 제어 유형 연산(1110) 명령어 템플릿에서, 베타 필드(1154)는 라운드 제어 필드(1154A)로서 해석되고, 그것의 콘텐츠(들)는 정적 라운딩을 제공한다. 본 발명의 설명된 실시예에서, 라운드 제어 필드(1154A)는 모든 부동 소수점 예외 억제(SAE: suppress all floating point exception) 필드(1156) 및 라운드 연산 제어 필드(1158)를 포함하지만, 대안적 실시예들은 이들 개념들 양쪽 모두를 동일한 필드 내에 인코딩하도록 지원할 수 있거나, 또는 이들 개념들/필드들 중 하나 또는 다른 하나만을 갖도록 지원할 수 있다(예를 들어, 라운드 연산 제어 필드(1158)만을 가질 수 있다).
SAE 필드(1156) - 그 콘텐츠는 예외 이벤트 보고를 비활성화할지의 여부를 구분한다; SAE 필드(1156)의 콘텐츠가, 억제가 활성화되어 있음을 지시할 때, 주어진 명령어는 임의의 종류의 부동 소수점 예외 플래그도 보고하지 않고 임의의 부동 소수점 예외 핸들러도 야기하지 않는다.
라운드 연산 제어 필드(1158) - 그 콘텐츠는 어느 그룹의 라운딩 연산들이 수행할지 구분한다(예를 들어, 라운드 업(Round-up), 라운드 다운(Round-down), 제로를 향한 라운드(Round-towards-zero), 및 최근접한 것에의 라운드(Round-to-nearest)). 따라서, 라운드 연산 제어 필드(1158)는 명령어당 단위로 라운딩 모드의 변경을 허용한다. 프로세서가 라운딩 모드들을 특정하기 위한 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 라운드 연산 제어 필드(1150)의 콘텐츠는 해당 레지스터 값을 오버라이딩한다.
메모리 액세스 없음 명령어 템플릿들 - 데이터 변환 유형 연산
메모리 액세스 없음 데이터 변환 유형 연산(1115) 명령어 템플릿에서, 베타 필드(1154)는 데이터 변환 필드(1154B)로서 해석되고, 그 콘텐츠는 다수의 데이터 변환들(예를 들어, 데이터 변환 없음, 스위즐, 브로드캐스트) 중 어느 것이 수행될 것인지를 구분한다.
클래스 A의 메모리 액세스(1120) 명령어 템플릿의 경우, 알파 필드(1152)는 축출 힌트 필드(eviction hint field, 1152B)로서 해석되고, 그 콘텐츠는 축출 힌트들 중 어느 것이 사용될지를 구분하는(도 12a에서, 메모리 액세스, 임시(1125) 명령어 템플릿과, 메모리 액세스, 비임시(1130) 명령어 템플릿에 대해 임시(1152B.1) 및 비임시(1152B.2)가 각각 특정된다) 반면, 베타 필드(1154)는 데이터 조작 필드(1154C)로서 해석되고, 그 콘텐츠는 (프리미티브라고도 알려진) 다수의 데이터 조작 연산들 중 어느 것이 수행될지를 구분한다(예를 들어, 데이터 조작 없음; 브로드캐스트; 소스의 업 컨버전; 및 데스티네이션의 다운 컨버전). 메모리 액세스(1120) 명령어 템플릿들은 스케일 필드(1160), 및 옵션적으로 변위 필드(1162A) 또는 변위 스케일 필드(1162B)를 포함한다.
벡터 메모리 명령어들은 메모리로부터 벡터 로드들 및 메모리로의 벡터 저장들을 수행하고, 변환이 지원된다. 정규 벡터 명령어들과 관련하여, 벡터 메모리 명령어들은 데이터 성분와 관련한 방식으로 메모리로부터/메모리로 데이터를 전송하고, 실제로 전송되는 요소들은 기입 마스크로서 선택되는 벡터 마스크의 콘텐츠에 의해 지시된다.
메모리 액세스 명령어 템플릿들 - 임시
임시 데이터는 캐싱으로부터 이득을 얻기에 충분히 곧 재사용될 가능성이 있는 데이터이다. 그러나, 이것은 힌트이고, 상이한 프로세서들은 힌트 전체를 무시하는 것을 포함한, 상이한 방법들로 이것을 구현할 수 있다.
메모리 액세스 명령어 템플릿들 - 비-임시
비 임시 데이터는 제1 레벨 캐시에서의 캐싱으로부터 이득을 얻기에 충분하도록 곧 재사용될 가능성이 없는 데이터이고, 축출의 우선순위가 주어져야 한다. 그러나, 이것은 힌트이고, 상이한 프로세서들은 힌트 전체를 무시하는 것을 포함한, 상이한 방법들로 이것을 구현할 수 있다.
클래스 B의 명령어 템플릿들
클래스 B의 명령어 템플릿들의 경우에, 알파 필드(1152)는 기입 마스크 제어(Z) 필드(1152C)로서 해석되고, 그 콘텐츠는 기입 마스크 필드(1170)에 의해 제어되는 기입 마스킹이 병합이어야 하는지 또는 제로화이어야 하는지를 구분한다.
클래스 B의 메모리 액세스 없음(1105) 명령어 템플릿의 경우, 베타 필드(1154)의 일부는 RL 필드(1157A)로서 해석되고, 그 콘텐츠는 상이한 증강 연산 유형들 중 어느 것이 수행될지를 구분하는(예를 들어, 메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어 유형 연산(1112) 명령어 템플릿, 및 메모리 액세스 없음, 기입 마스크 제어, VSIZE 유형 연산(1117) 명령어 템플릿에 대해 라운드(1157A.1) 및 벡터 길이(VSIZE)(1157A.2)가 각각 명시된다) 반면, 베타 필드(1154)의 나머지는 지정된 유형의 연산들 중 어느 것이 수행될 것인지를 구분한다. 메모리 액세스 없음(1105) 명령어 템플릿에서, 스케일 필드(1160), 변위 필드(1162A), 및 변위 스케일 필드(1162B)는 존재하지 않는다.
메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어 유형 연산(1112) 명령어 템플릿에서, 베타 필드(1154)의 나머지는 라운드 연산 필드(1159A)로서 해석되고, 예외 이벤트 보고는 디스에이블링된다(주어진 명령어는 임의의 종류의 부동 소수점 예외 플래그도 보고하지 않고, 임의의 부동 소수점 예외 핸들러도 일으키지 않는다).
라운드 연산 제어 필드(1159A) - 라운드 연산 제어 필드(1158)와 마찬가지로, 그 내용은 한 그룹의 라운딩 연산들 중 어느 것을 수행할 것인지를 구분한다(예를 들어, 라운드-업, 라운드-다운, 제로를 향한 라운드 및 최근접치로의 라운드). 따라서, 라운드 연산 제어 필드(1159A)는 명령어당 단위로 라운딩 모드의 변경을 허용한다. 프로세서가 라운딩 모드들을 특정하기 위한 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 라운드 연산 제어 필드(1150)의 내용은 해당 레지스터 값을 오버라이딩한다.
메모리 액세스 없음, 기입 마스크 제어, VSIZE 유형 연산(1117) 명령어 템플릿에서, 베타 필드(1154)의 나머지는 벡터 길이 필드(1159B)로서 해석되고, 그 콘텐츠는 다수의 데이터 벡터 길이(예를 들어, 128, 256, 또는 512 바이트) 중 어느 것에 대해 수행될지를 구분한다.
클래스 B의 메모리 액세스(1120) 명령어 템플릿의 경우, 베타 필드(1154)의 일부는 브로드캐스트 필드(1157B)로서 해석되고, 그 콘텐츠는 브로드캐스트 유형 데이터 조작 연산이 수행될지의 여부를 구분하는 반면, 베타 필드(1154)의 나머지는 벡터 길이 필드(1159B)로서 해석된다. 메모리 액세스(1120) 명령어 템플릿은, 스케일 필드(1160), 및 옵션적으로 변위 필드(1162A) 또는 변위 스케일 필드(1162B)를 포함한다.
일반 벡터 친화적 명령어 포맷(1100)에 관하여, 포맷 필드(1140), 베이스 연산 필드(1142), 및 데이터 성분 폭 필드(1164)를 포함하는 전체 오피코드 필드(1174)가 도시되어 있다. 전체 오피코드 필드(1174)가 이들 필드들 모두를 포함하는 일 실시예가 도시되지만, 이들 모두를 지원하지는 않는 실시예들에서, 전체 오피코드 필드(1174)는 이들 필드들 모두보다 적은 필드들을 포함한다. 전체 오피코드 필드(1174)는 연산 코드(오피코드)를 제공한다.
증강 연산 필드(1150), 데이터 성분 폭 필드(1164), 및 기입 마스크 필드(1170)는, 일반 벡터 친화적 명령어 포맷에서 이들 특징들이 명령어당 단위로 특정되도록 허용한다.
기입 마스크 필드와 데이터 성분 폭 필드의 조합은 그것들이 마스크가 상이한 데이터 성분 폭들에 기초하여 적용되도록 허용한다는 점에서 유형 명령어들(typed instructions)을 생성한다.
클래스 A 및 클래스 B 내에서 발견되는 다양한 명령어 템플릿들은 상이한 상황들에서 유익하다. 본 발명의 어떤 실시예들에서, 상이한 프로세서들 또는 프로세서 내의 상이한 코어들은 오직 클래스 A, 오직 클래스 B, 또는 양자의 클래스들을 지원할 수 있다. 예를 들어, 범용 컴퓨팅에 대해 의도된 고성능 범용 비순차적 코어는 오직 클래스 B를 지원할 수 있고, 그래픽 및/또는 과학적(스루풋) 컴퓨팅에 대해 주로 의도된 코어는 오직 클래스 A를 지원할 수 있고, 양자 모두에 대해 의도된 코어는 양자 모두를 지원할 수 있다(물론, 양자의 클래스들로부터의 템플릿들 및 명령어들의 일부 혼합을 갖지만 양자의 클래스들로부터의 템플릿들 및 명령어들 전부를 갖지는 않는 코어가 본 발명의 범위 내에 있다). 또한, 단일 프로세서가 복수의 코어를 포함할 수 있고, 여기서, 코어들 전부가 동일한 클래스를 지원하거나 또는 상이한 코어들이 상이한 클래스를 지원한다. 예를 들어, 별개의 그래픽 및 범용 코어들을 갖는 프로세서에서, 그래픽 및/또는 과학적 컴퓨팅에 대해 주로 의도된 그래픽 코어들 중 하나가 오직 클래스 A를 지원할 수 있는 반면, 범용 코어들 중 하나 이상이 오직 클래스 B를 지원하는 범용 컴퓨팅에 대해 의도된 비순차적 실행 및 레지스터 리네이밍을 갖는 고성능 범용 코어들일 수 있다. 별개의 그래픽 코어를 갖지 않는 다른 프로세서는 클래스 A 및 클래스 B 양자를 지원하는 하나 이상의 범용 순차적 또는 비순차적 코어들을 포함할 수 있다. 물론, 한 클래스로부터의 특징들은 또한 본 발명의 상이한 실시예들에서 다른 클래스에 구현될 수 있다. 고급 언어로 작성된 프로그램들은 다음을 포함한, 다양한 상이한 실행가능포맷들로(예를 들어, 제때에 바로 컴파일되거나 정적으로 컴파일되는) 놓여질 것이다: 1) 실행을 위한 타겟 프로세서에 의해 지원되는 클래스(들)의 명령어들을 오직 갖는 포맷; 또는 2) 현재 코드를 실행하고 있는 프로세서에 의해 지원된 명령어들에 기초하여 실행하기 위한 루틴들을 선택하는 제어 흐름 코드를 갖고, 모든 클래스들의 명령어들의 상이한 조합들을 이용하여 작성된 대안적 루틴들을 갖는 형태.
도 13a는 본 발명의 실시예들에 따른 예시적 특정 벡터 친화적 명령어 포맷을 도시하는 블록도이다. 도 13a는, 위치, 크기, 해석, 및 필드 순서 뿐만 아니라 이들 필드들의 일부에 대한 값을 특정한다는 점에서 특정적인, 특정 벡터 친화적 명령어 포맷(1200)을 도시한다. 특정 벡터 친화적 명령어 포맷(1200)은 x86 명령어 세트를 확장하기 위해 이용될 수 있으므로, 필드들 중 일부는 기존의 x86 명령어 세트 및 그 확장판(예를 들어, AVX)에서 이용되는 것들과 유사하거나 동일하다. 이 포맷은 확장들을 갖는 기존의 x86 명령어 세트의 프리픽스 인코딩 필드, 실제 오피코드 바이트 필드, MOD R/M 필드, SIB 필드, 변위 필드, 및 즉치 필드들과의 일관성을 유지한다. 도 12로부터의 필드들에 맵핑되는 도 13의 필드들이 도시된다.
본 발명의 실시예들은 예시의 목적으로 일반 벡터 친화적 명령어 포맷(1100)의 정황에서 특정 벡터 친화적 명령어 포맷(1200)을 참조하여 설명되지만, 본 발명은 청구되는 경우를 제외하고 특정 벡터 친화적 명령어 포맷(1200)으로 한정되지 않는다. 예를 들어, 일반 벡터 친화적 명령어 포맷(1100)은 다양한 필드들에 대한 다양한 가능한 크기들을 고려하는 반면, 특정 벡터 친화적 명령어 포맷(1200)은 특정 크기들의 필드들을 갖는 것으로 도시되어 있다. 구체적인 예로서, 데이터 성분 폭 필드(1164)는 특정 벡터 친화적 명령어 포맷(1200)에서는 1 비트 필드로서 예시되지만, 본 발명은 그렇게 제한되는 것은 아니다(즉, 일반 벡터 친화적 명령어 포맷(1100)은 데이터 성분 폭 필드(1164)의 다른 크기들을 고려한다).
일반 벡터 친화적 명령어 포맷(1100)은 도 13a에 도시된 순서대로 하기에 열거된 다음의 필드들을 포함한다.
EVEX 프리픽스(바이트들 0-3)(1202) - 4 바이트 형태로 인코딩된다.
포맷 필드(1140)(EVEX 바이트 0, 비트 [7:0]) - 첫 번째 바이트(EVEX 바이트 0)는 포맷 필드(1140)이고 0x62(본 발명의 일 실시예에서 벡터 친화적 명령어 포맷을 구분하기 위해 이용되는 고유한 값)를 포함한다.
제2 내지 제4 바이트들(EVEX 바이트들 1-3)은 특정 능력을 제공하는 다수의 비트 필드들을 포함한다.
REX 필드(1205)(EVEX 바이트 1, 비트 [7-5]) - EVEX.R 비트 필드(EVEX 바이트 1, 비트 [7] - R), EVEX.X 비트 필드(EVEX 바이트 1, 비트 [6] - X), 및 1157BEX 바이트 1, 비트[5] - B)로 구성된다. EVEX.R, EVEX.X, 및 EVEX.B 비트 필드들은 대응하는 VEX 비트 필드들과 동일한 기능을 제공하고, 1의 보수 형태를 사용하여 인코딩되며 즉, ZMM0은 1111B로서 인코딩되고, ZMM15는 0000B로서 인코딩된다. 명령어들의 다른 필드들은 본 기술 분야에 알려진 대로 레지스터 인덱스들의 하위 3개의 비트(rrr, xxx, 및 bbb)를 인코딩하여, Rrrr, Xxxx, 및 Bbbb가 EVEX.R, EVEX.X, 및 EVEX.B를 더함으로써 형성될 수 있도록 한다.
REX' 필드(1110) - 이것은 REX' 필드(1110)의 제1 부분이고, 확장된 32개의 레지스터 세트의 상위 16 또는 하위 16 중 어느 것을 인코딩하는 데 이용되는 EVEX.R' 비트 필드(EVEX 바이트 1, 비트 [4] - R')이다. 본 발명의 일 실시예에서, 이 비트는 하기에 지시된 다른 것들과 함께, (공지된 x86 32-비트 모드에서) BOUND 명령어로부터 구별하기 위해 비트 반전된 포맷으로 저장되고, 그의 실제 오피코드 바이트가 62이지만, (하기에 설명된) MOD R/M 필드에서 MOD 필드의 11의 값을 수락하지 않으며; 본 발명의 대안적인 실시예들은 반전된 포맷으로 이것 및 하기에 지시된 다른 비트들을 저장하지 않는다. 1의 값을 이용하여 하위 16개의 레지스터를 인코딩한다. 달리 말하면, R'Rrrr은 다른 필드들로부터의 EVEX.R', EVEX.R, 및 다른 RRR을 조합함으로써 형성된다.
오피코드 맵 필드(1215)(EVEX 바이트 1, 비트 [3:0] - mmmm) - 그 콘텐츠는 내포된 선두 오피코드 바이트(0F, 0F 38, 또는 0F 3)를 인코딩한다.
데이터 성분 폭 필드(1164)(EVEX 바이트 2, 비트 [7] - W) - 표기법 EVEX.W에 의해 표현된다. EVEX.W는 데이터형(32 비트 데이터 성분들 또는 64 비트 데이터 성분들 중 어느 것)의 단위 크기(사이즈)를 정의하기 위해 이용된다.
EVEX.vvvv(1220)(EVEX 바이트 2, 비트들 [6:3] - vvvv) - EVEX.vvvv의 역할은 다음을 포함할 수 있다: 1) EVEX.vvvv는 반전된(1들 보수) 형태로 특정된 제1 소스 레지스터 피연산자를 인코딩하고 또한 2개 이상의 소스 피연산자를 갖는 명령어들에 대해 유효하다; 2) EVEX.vvvv는 특정 벡터 시프트들에 대해 1들 보수 형태로 특정된 데스티네이션 레지스터 피연산자를 인코딩한다; 또는 3) EVEX.vvvv는 어떤 피연산자도 인코딩하지 않으며, 이 필드는 예약되고 1111b를 포함해야 한다. 따라서, EVEX.vvvv 필드(1220)는 반전된(1의 보수) 형태로 저장된 제1 소스 레지스터 특정자(specifier)의 4개의 하위 비트들을 인코딩한다. 명령어에 따라, 여분의 상이한 EVEX 비트 필드가 특정자 사이즈를 32개의 레지스터로 확장하기 위해 사용된다.
EVEX.U(1168) 클래스 필드(EVEX 바이트 2, 비트 [2]-U) - EVEX.U = 0이면, 이것은 클래스 A 또는 EVEX.U0을 지시한다; EVEX.U = 1이면, 이것은 클래스 B 또는 EVEX.U1을 지시한다.
프리픽스 인코딩 필드(1225)(EVEX 바이트 2, 비트 [1:0]-pp) - 베이스 연산 필드에 대해 추가 비트들을 제공한다. EVEX 프리픽스 포맷의 레거시 SSE 명령어들에 대한 지원을 제공하는 것 이외에, 이것은 또한 SIMD 프리픽스를 콤팩팅하는 이득을 갖는다(SIMD 프리픽스를 표현하기 위한 바이트를 요구하기보다는, EVEX 프리픽스는 2 비트만을 요구한다). 일 실시예에서, 레거시 포맷 및 EVEX 프리픽스 포맷 모두에서 SIMD 프리픽스(66H, F2H, F3H)를 이용하는 레거시 SSE 명령어들을 지원하기 위해, 이들 레거시 SIMD 프리픽스들은 SIMD 프리픽스 인코딩 필드로 인코딩되고; 런타임에 디코더의 PLA에 제공되기 전에 레거시 SIMD 프리픽스 내로 확장된다(그래서 PLA는 수정 없이 이들 레거시 명령어들의 레거시 및 EVEX 포맷 모두를 실행할 수 있다). 더 새로운 명령어들이 오피코드 확장으로서 직접 EVEX 프리픽스 인코딩 필드의 콘텐츠를 사용할 수 있더라도, 특정 실시예들은 일관성을 위해 유사한 방식으로 확장하지만, 이들 레거시 SIMD 프리픽스들에 의해 상이한 의미들이 특정되도록 허용한다. 대안적 실시예는 2 비트 SIMD 프리픽스 인코딩들을 지원하도록 PLA를 재설계할 수 있고, 따라서 확장을 요구하지 않는다.
알파 필드(1152)(EVEX 바이트 3, 비트 [7] - EH; 또한 EVEX.EH, EVEX.rs, EVEX.RL, EVEX.기입 마스크 제어, 및 EVEX.N이라고도 알려짐; 또한 α로 예시됨) -앞서 설명된 바와 같이, 이 필드는 정황 특정적이다.
베타 필드(1154)(EVEX 바이트 3, 비트들 [6:4]-SSS, 또한 EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB라고도 알려짐; 또한 βββ로 예시됨) - 앞서 설명된 바와 같이, 이 필드는 정황 특정적이다.
REX' 필드(1110) - 이것은 REX' 필드의 나머지이고, 확장된 32개의 레지스터 세트의 상위 16 또는 하위 16 중 어느 것을 인코딩하기 위해 이용될 수 있는 EVEX.V' 비트 필드(EVEX 바이트 3, 비트 [3] - V')이다. 이 비트는 비트 반전된 포맷으로 저장된다. 1의 값을 이용하여 하위 16개의 레지스터를 인코딩한다. 즉, V'VVVV는 EVEX.V', EVEX.vvvv를 조합하여 형성된다.
기입 마스크 필드(1170)(EVEX 바이트 3, 비트 [2:0]-kkk) - 그 콘텐츠는 앞서 설명된 바와 같이 기입 마스크 레지스터들에서 레지스터의 인덱스를 특정한다. 본 발명의 일 실시예에서, 특정 값 EVEX.kkk=000은 특정 명령어에 대해 임의의 기입 마스크도 이용되지 않음을 암시하는 특수 거동을 갖는다(이것은 모두 1로 하드와이어드된(hardwired) 기입 마스크 또는 마스킹 하드웨어를 바이패스하는 하드웨어의 사용을 포함하는 다양한 방법들로 구현될 수 있다).
실제 오피코드 필드(1230)(바이트 4)는 또한 오피코드 바이트로 알려져 있다. 오피코드의 일부분이 이 필드에서 특정된다.
MOD R/M 필드(1240)(바이트 5)는 MOD 필드(1242), Reg 필드(1244), 및 R/M 필드(1246)를 포함한다. 전술한 바와 같이, MOD 필드(1242)의 콘텐츠는 메모리 액세스와 메모리 액세스 없음 연산들 간을 구분한다. Reg 필드(1244)의 역할은 2가지 상황들에 요약될 수 있다: 데스티네이션 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 것을 인코딩하거나, 또는 오피코드 확장으로서 취급되고 임의의 명령어 피연산자를 암호화하기 위해 사용되지 않는다. R/M 필드(1246)의 역할은 다음을 포함할 수 있다: 메모리 어드레스를 참조하는 명령어 피연산자를 인코딩하거나, 또는 데스티네이션 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 것을 인코딩한다.
SIB(스케일(Scale), 인덱스(Index), 베이스(Base)) 바이트(바이트 6) - 앞서 설명된 바와 같이, 스케일 필드(1150)의 콘텐츠는 메모리 어드레스 생성을 위해 사용된다. SIB.xxx(1254) 및 SIB.bbb(1256) -이들 필드들의 콘텐츠는 레지스터 인덱스들 Xxxx 및 Bbbb에 대하여 앞서 언급하였다.
변위 필드(1162A)(바이트 7-10) - MOD 필드(1242)가 10을 포함할 때, 바이트들 7-10은 변위 필드(1162A)이고, 레거시 32-비트 변위(disp32)와 동일하게 작용하며 바이트 입도에서 작용한다.
변위 인자 필드(1162B)(바이트 7) - MOD 필드(1242)가 01을 포함할 때, 바이트 7은 변위 인자 필드(1162B)이다. 이 필드의 로케이션은 바이트 입도로 작용하는 레거시 x86 명령어 세트 8-비트 변위(disp8)와 동일한 것이다. disp8은 부호 확장되기 때문에, 오직 -128과 127 바이트 오프셋들 간을 어드레스할 수 있고; 64 바이트 캐시 라인들에 대하여, disp8은 오직 4개의 실제 유용한 값들 -128, -64, 0, 64로 설정될 수 있는 8 비트를 사용하며; 더 큰 범위가 종종 필요하기 때문에, disp32가 사용된다; 그러나, disp32는 4 바이트를 요구한다. disp8 및 disp32와 대조적으로, 변위 인자 필드(1162B)는 disp8의 재해석이다; 변위 인자 필드(1162B)를 이용할 때, 실제의 변위는 메모리 피연산자 액세스의 크기(N)와 승산된 변위 인자 필드의 콘텐츠에 의해 결정된다. 이러한 유형의 변위를 disp8*N이라고 일컫는다. 이것은 평균 명령어 길이를 감소시킨다(훨씬 더 큰 범위를 갖는 변위에 대해 사용되는 단일 바이트). 그러한 압축된 변위는 유효 변위가 메모리 액세스의 입도의 배수라는 가정에 기초하고, 따라서 어드레스 오프셋의 잉여 하위 비트들이 인코딩될 필요가 없다. 즉, 변위 인자 필드(1162B)는 레거시 x86 명령어 세트 8-비트 변위를 대체한다. 따라서, 변위 인자 필드(1162B)는 x86 명령어 세트 8-비트 변위와 동일한 방식으로 인코딩되고(따라서 ModRM/SIB 인코딩 규칙들의 변화가 없음), 유일한 예외는 disp8이 disp8*N으로 오버로드(overload)된다는 것이다. 다시 말해, 인코딩 규칙들 또는 인코딩 길이들에 있어서 어떤 변경도 존재하지 않지만 오직 하드웨어에 의한 변위 값의 해석에 있어서 변경이 존재한다(이것은 바이트-방식 어드레스 오프셋(byte-wise address offset)을 획득하기 위해 메모리 피연산자의 사이즈에 의해 변위를 스케일링할 필요가 있다).
즉치 필드(1172)는 앞서 설명된 바와 같이 동작한다.
전체 오피코드 필드
도 13b는 본 발명의 일 실시예에 따른, 전체 오피코드 필드(1174)를 구성하는 특정 벡터 친화적 명령어 포맷(1200)의 필드들을 도시한 블록도이다. 구체적으로는, 전체 오피코드 필드(1174)는 포맷 필드(1140), 베이스 연산 필드(1142), 및 데이터 성분 폭(W) 필드(1164)를 포함한다. 베이스 연산 필드(1142)는 프리픽스 인코딩 필드(1225), 오피코드 맵 필드(1215), 및 실제 오피코드 필드(1230)를 포함한다.
레지스터 인덱스 필드
도 13c는 본 발명의 일 실시예에 따른 레지스터 인덱스 필드(1144)를 구성하는 특정 벡터 친화적 명령어 포맷(1200)의 필드들을 도시하는 블록도이다. 구체적으로, 레지스터 인덱스 필드(1144)는 REX 필드(1205), REX' 필드(1210), MODR/M.reg 필드(1244), MODR/M.r/m 필드(1246), VVVV 필드(1220), xxx 필드(1254), 및 bbb 필드(1256)를 포함한다.
증강 연산 필드
도 13d는 본 발명의 일 실시예에 따른 증강 연산 필드(1150)를 구성하는 특정 벡터 친화적 명령어 포맷(1200)의 필드들을 도시하는 블록도이다. 클래스(U) 필드(1168)가 0을 포함할 때, 이것은 EVEX.U0(클래스 A(1168A))을 의미하고; 그것이 1을 포함할 때, 이것은 EVEX.U1(클래스 B(1168B))를 의미한다. U=0이고 MOD 필드(1242)가 11을 포함할 때(메모리 액세스 없음 연산을 의미함), 알파 필드(1152)(EVEX 바이트 3, 비트 [7] - EH)는 rs 필드(1152A)로서 해석된다. rs 필드(1152A)가 1을 포함할 때(라운드 1152A.1), 베타 필드(1154)(EVEX 바이트 3, 비트 [6:4] - SSS)는 라운드 제어 필드(1154A)로서 해석된다. 라운드 제어 필드(1154A)는 1 비트 SAE 필드(1156) 및 2 비트 라운드 연산 필드(1158)를 포함한다. rs 필드(1152A)가 0을 포함할 때(데이터 변환 1152A.2), 베타 필드(1154)(EVEX 바이트 3, 비트들 [6:4]- SSS)는 3 비트 데이터 변환 필드(1154B)로서 해석된다. U=0이고 MOD 필드(1242)가 00, 01, 또는 10을 포함하면(메모리 액세스 연산을 의미함), 알파 필드(1152)(EVEX 바이트 3, 비트 [7] - EH)는 축출 힌트(Eviction Hint)(EH) 필드(1152B)로서 해석되고, 베타 필드(1154)(EVEX 바이트 3, 비트들[6:4]- SSS)는 3 비트 데이터 조작 필드(1154C)로서 해석된다.
U=1일 때, 알파 필드(1152)(EVEX 바이트 3, 비트 [7] - EH)는 기입 마스크 제어(Z) 필드(1152C)로서 해석된다. U=1이고 MOD 필드(1242)가 11을 포함할 때(메모리 액세스 없음 연산을 의미함), 베타 필드(1154)의 일부(EVEX 바이트 3, 비트 [4]-S0)는 RL 필드(1157A)로서 해석되고; 그것이 1을 포함할 때(라운드 1157A.1), 베타 필드(1154)의 나머지(EVEX 바이트 3, 비트 [6-5]- S2- 1)는 라운드 연산 분야(1159A)로서 해석되는 반면, RL 필드(1157A)가 0를 포함할 때(VSIZE 1157.A2), 베타 필드(1154)의 나머지(EVEX 바이트 3, 비트 [6-5]- S2- 1)는 벡터 길이 필드(1159B)(EVEX 바이트 3, 비트 [6-5]- L1- 0)로서 해석된다. U=1이고 MOD 필드(1242)가 00, 01, 또는 10을 포함할 때(메모리 액세스 연산을 의미함), 베타 필드(1154)(EVEX 바이트 3, 비트 [6:4] - SSS)는 벡터 길이 필드(1159B)(EVEX 바이트 3, 비트 [6-5] - L1-0) 및 브로드캐스트 필드(1157B)(EVEX 바이트 3, 비트 [4]- B)로서 해석된다.
도 14는 본 발명의 일 실시예에 따른 레지스터 아키텍처(1300)의 블록도이다. 예시된 실시예에서, 폭이 512 비트인 32개의 벡터 레지스터(1310)가 존재하고; 이들 레지스터들은 zmm0 내지 zmm31로서 참조된다. 하위 16개의 zmm 레지스터의 하위 256 비트들은 레지스터들 ymm0-16 상에 중첩된다. 하위 16개의 zmm 레지스터들의 하위 128 비트들(ymm 레지스터들의 하위 128 비트들)은 레지스터들 xmm0-15에 중첩된다. 특정 벡터 친화적 명령어 포맷(1200)은 하기의 표에 예시된 바와 같이 이들 중첩된 레지스터 파일에 작용한다.
[표]
즉, 벡터 길이 필드(1159B)는 최대 길이와 하나 이상의 다른 더 짧은 길이 중에 선택하며, 여기서 각각의 이러한 더 짧은 길이는 선행 길이의 절반 길이이다; 그리고, 벡터 길이 필드(1159B)가 없는 명령어 템플릿들은 최대 벡터 길이에 작용한다. 또한, 일 실시예에서, 특정 벡터 친화적 명령어 포맷(1200)의 클래스 B 명령어 템플릿들은 패킹된 또는 스칼라의 단정도/배정도 부동 소수점 데이터, 및 패킹된 또는 스칼라의 정수 데이터에 작용한다. 스칼라 연산들은 zmm/ymm/xmm 레지스터에서 최하위 데이터 성분 위치에서 수행ㄴ되는 연산들이고; 상위 데이터 성분 위치들은 실시예에 따라 그것들이 명령어 이전과 동일하게 두거나 또는 제로화된다.
기입 마스크 레지스터들(1315) - 예시된 실시예에서, 8개의 기입 마스크 레지스터(k0 내지 k7)가 있고, 각각은 크기가 64 비트이다. 대안적 실시예에서, 기입 마스크 레지스터들(1315)은 그 크기가 16 비트이다. 전술한 바와 같이, 본 발명의 일 실시예에서, 벡터 마스크 레지스터(k0)는 기입 마스크로서 이용될 수 없고; 보통 k0을 지시하는 인코딩이 기입 마스크에 대해 이용될 때, 이것은 0xFFFF의 하드와이어드 기입 마스크를 선택하여, 해당 명령어에 대한 기입 마스킹을 유효하게 비활성화한다.
범용 레지스터들(1325) - 예시된 실시예에서, 메모리 피연산자들을 어드레싱하기 위해 기존의 x86 어드레싱 모드와 함께 이용되는 16개의 64-비트 범용 레지스터가 있다. 이러한 레지스터들은 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15라는 이름들로 참조된다.
MMX 패킹 정수 플랫 레지스터 파일(1350)이라고 에일리어싱되는 스칼라 부동 소수점 스택 레지스터 파일(x87 스택)(1345) - 예시된 실시예에서, x87 스택은 x87 명령어 세트 확장을 이용하여 32/64/80 비트 부동 소수점 데이터에 대해 스칼라 부동 소수점 연산들을 수행하기 위해 사용되는 8-요소 스택인 반면, MMX 레지스터들은 64 비트 패킹 정수 데이터에 대해 연산들을 수행하기 위해뿐만 아니라, MMX와 XMM 레지스터들 사이에서 수행되는 어떤 연산들에 대한 피연산자들을 보유하기 위해 사용된다.
본 발명의 대안적인 실시예들은 더 넓거나 더 좁은 레지스터들을 이용할 수 있다. 부가적으로, 본 발명의 대안적인 실시예들은 더 많거나, 더 적거나, 상이한 레지스터 파일들 및 레지스터들을 사용할 수 있다.
예시적 컴퓨터 시스템
도 15는 본 발명의 몇몇 실시예들에 사용될 수 있는 예시적 클라이언트들과 서버들을 도시하는 블록도이다. 도 15는 컴퓨터 시스템(1500)의 다양한 컴포넌트들을 도시하지만, 컴포넌트들을 상호접속하는 임의의 특정 아키텍쳐나 방식과 같은 세부사항은 본 발명과 관련이 없기 때문에 나타낼 의도가 없다는 점을 이해하여야 한다. 더 적은 컴포넌트들 또는 더 많은 컴포넌트들을 갖는 다른 컴퓨터 시스템들이 또한 발명의 실시예들과 함께 사용될 수 있다는 것을 이해할 것이다.
도 15에 도시된 바와 같이, 컴퓨터 시스템(1500)은 데이터 처리 시스템의 형태이고, 프로세서 클러스터(들)(804)를 다양한 다른 시스템 컴포넌트들에 통신 가능하게 연결하는 상호접속부(들)/버스(들)(1501)를 포함한다. 상호접속부들/버스들은 본 기술에 주지된 바와 같이 다양한 브리지들, 컨트롤러들, 및/또는 어댑터들을 통해 서로에 접속될 수 있는 상호접속부의 다양한 레벨들을 포함한다. 예를 들어, 상호접속부(들)(1501)는 빠른 경로 상호접속부(QPI) 컴포넌트, 주변 장치 상호접속부 익스프레스("PCI 익스프레스") 컴포넌트, 또는 다양한 컴포넌트들을 프로세서 클러스터(들)(804)에 상호접속하기 위한 다른 기술들을 포함할 수 있다. 본 발명의 기본 원리들은 임의의 특정 상호접속부들 또는 버스들로 제한되지 않는다.
도 15에서 별도의 컴포넌트로서 도시되지만, 가속기(들)(801)는 프로세서 클러스터(들)(804) 내에 통합될 수 있다. 대안적으로, 어떤 가속기(들)는 프로세서 클러스터(들) 내에 통합될 수 있고, 일부는 상호접속부(들)/버스(들)를 통해 컴퓨터 시스템에 접속될 수 있다. 앞서 상세히 설명한 바와 같이, 가속기들은 특정 유형들의 프로그램 코드(예를 들어, 벡터/SIMD 연산들, 그래픽 연산들, 소트와 루프 연산들, 기타 등등)를 효율적으로 실행하도록 적응된다. 예를 들어, 범용 프로세서 클러스터들(804)은 가속기 클러스터들(801)상에서 커맨드들을 인보크하는 명령어들을 포함하는 x86 명령어들과 같은 범용 명령어들을 실행하기 위한 프로세서 코어 내에 실행 로직을 포함할 수 있다. 그러나, 본 발명의 기본적인 원리들은 임의의 특정 유형의 범용 클러스터들 또는 가속기 클러스터들로 제한되지 않는다.
도 15에 도시된 실시예는 또한 메모리 모듈들(1525) 컴퓨터 시스템을 연결하기 위한 메모리 인터페이스(1520)를 포함한다. 일 실시예에서, 메모리 모듈들(1525)은 랜덤 액세스 메모리(RAM) 모듈들과 같은 듀얼 인라인 메모리 모듈들(DIMMs)이고, 메모리 인터페이스는 메모리 모듈들(1525)에 액세스하도록 요구된 전기적 시그널링을 생성할 수 있다(예를 들어, 컬럼 어드레스 스트로브(CAS), 로우 어드레스 스트로브(RAS), 기입 활성화(WE), 및 출력 활성화(OE) 신호들 등).
일 실시예에서, 메모리 인터페이스(1520)는 RAM과 같은 휘발성 메모리 모듈들, 및 또한 종종 상 변화 랜덤 액세스 메모리(PRAM 또는 PCRAM), PCME, 오보닉 통합 메모리, 또는 칼코게나이드 RAM(C-RAM)이라고 지칭되는 상-변화 메모리(PCM)와 같은 비휘발성 메모리 모듈들을 포함한 상이한 유형들의 메모리 모듈들과 인터페이싱하기 위한 로직 및 회로를 포함한다. 예를 들어, 컴퓨터 시스템(1500)의 일 실시예는 RAM과 같은 휘발성 메모리일 수 있는 "가까운 메모리" 부분, 및 상-변화 메모리(PCM)로서 구현될 수 있는 "먼 메모리" 부분을 포함하는 2 레벨(2L) 메모리 계층구조를 구현한다. 그러한 경우에, 메모리 인터페이스는 양쪽 메모리 유형들에 액세스할 필요가 있는 로직 및 회로를 포함할 수 있다.
예시된 실시예(1500)는 또한 하드 드라이브들 또는 다른 비활성 저장 디바이스들과 같은 저장 디바이스들과 인터페이싱하기 위한 하나 이상의 저장소 인터페이스(1518)를 포함한다. 일 실시예에서, 저장 인터페이스(1518)는 직렬 ATA 저장 인터페이스를 포함하고 하드 드라이브는 솔리드 스테이트 드라이브(SSD) 또는 자기 저장소 디바이스를 포함한다. (전술한 바와 같이) 2LM 메모리를 사용하는 본 발명의 실시예에서, 저장소 디바이스(1519)의 저장소의 일부는 "먼 메모리"(또는 "먼 메모리"의 일부)를 위해 사용될 수 있다.
예시된 실시예(1500)는 또한 하나 이상의 그래픽 처리 유닛들(1503)과 인터페이싱하기 위한 그래픽 인터페이스(1502)를 포함한다. GPU들은 컴퓨터 시스템의 마더보드상에 또는 마더보드에 삽입된 별도의 카드상에 내장될 수 있다(예를 들어, PCI 익스프레스 그래픽 인터페이스 또는 다른 고속 그래픽 인터페이스를 통해). 디지털 비디오 인터페이스(DVI), 고해상도 멀티미디어 인터페이스(HDMI), 또는 디스플레이포트(DisplayPort) 비디오 출력 인터페이스와 같은 비디오 출력 인터페이스(1504)는 최종 사용자를 위해 비디오를 렌더링하는 모니터(1505)에 비디오 스트림을 출력한다. 전술한 바와 같이, GPU들은 본 명세서에서 기술된 실시예들 중 임의의 것을 이용하여 그래픽 프로그램 코드를 실행하는 가속기 컴포넌트들로서 구현될 수 있다.
예시된 실시예(1500)는 또한 다중 디지털 및 아날로그 오디오 입력들을 수신하는 오디오 입력 인터페이스(1516)를 포함한다. 예를 들어, 마이크로폰은 사용자의 음성(예를 들어, 웹 채팅, 전화 통화, 또는 오디오 녹음 동안)을 캡처하기 위해 오디오 입력 인터페이스들 중 하나에 결합될 수 있다. 또한, 토스링크(Toslink) 인터페이스와 같은 디지털 오디오 입력이 이용될 수 있다.
예시된 실시예(1500)는 또한 다양한 상이한 시스템 센서들(1509)로부터 데이터를 수집하는 센서 허브(1515)를 포함한다. 예를 들어, 센서들(1509)은 컴퓨터 시스템(1500)의 위치와 배향을 검출하기 위해 기계적 센서들, 모션 센서들, 및 로케이션 센서들을 포함할 수 있다. 예를 들어, 일 실시예에서, 센서들은 X, Y, Z축들을 따라 가속도 값들을 검출하고 데이터를 센서 허브에 보고하는 다중-축 가속도계들을 포함할 수 있다. 그 후 센서 허브는 컴퓨터 시스템(1500)의 현재 배향을 결정하기 위해 계산들을 수행할 수 있다. 예를 들어, 컴퓨터 시스템이 노트북 컴퓨터이면, 센서 허브는 컴퓨터 모니터의 현재 위치를 검출할 수 있다. 센서들(1509)은 또한 참조 로케이션으로부터의 변위들을 검출하기 위한 관성 센서들 및/또는 사용자 또는 다른 장치에의 근접도를 검출하기 위해 근접 센서들을 포함할 수 있다. 일 실시예에서, 센서들(1509)은 또한 컴퓨터 시스템의 현재 글로벌 위치를 결정하기 위해 글로벌 위치결정 시스템(GPS) 센서 또는 다른 센서를 포함한다. 센서들(1509)은 또한 지구의 전계의 배향을 검출하기 위한 자력계를 포함할 수 있다(즉, 북쪽과 관련하여 컴퓨팅 시스템의 현재 위치를 결정하기 위해). 센서들(1509)은 또한 배향의 변화를 검출하는 자이로, 및 현재 조명 조건들을 검출하는 주위 광 센서를 포함할 수 있다(예를 들어, 그에 의해, 센서 허브 또는 다른 시스템 컴포넌트가 그에 응답하여 모니터(1505)의 밝기를 조절할 수 있다).
다양한 센서들(1509)로부터 수집된 모든 데이터는 연산의 현재 모드를 결정하고 그에 응답하여 컴퓨팅 디바이스(1500)의 연산을 조절하기 위해 사용될 수 있다. 예를 들어, 센서들(1509)로부터의 신호들에 응답하여 컴퓨팅 디바이스는 본 명세서에서 기술된 가속기 인보크들이 활성화되는 동작의 제1 모드로 진입할 수 있고, 본 명세서에서 기술된 가속기 인보크들이 활성화되는 동작의 제2 모드로 진입할 수 있다.
예시된 실시예(1500)는 또한 모션 비디오와 정지 화상들을 캡처하기 위해 사용 가능한 비디오 카메라에 연결하기 위한 카메라 인터페이스(1514)를 포함한다. 예를 들어, 일 실시예에서, 카메라 인터페이스(1514)는 본 명세서에서 기술된 가속기 인보크 기법이 사용될 수 있는 비디오 회의 애플리케이션들을 위해 모션 비디오를 모은다. 예를 들어, 하나 가속기는 비디오 스트림들을 H.264/MPEG-4 AVC 포맷으로 효율적으로 인코딩하도록 구성될 수 있다. 그러나, 본 발명의 기본적인 원리들은 임의의 특정 비디오 압축 포맷으로 제한되지 않는다는 것을 유의해야 한다.
예시된 실시예(1500)은 또한 연결된 디바이스들(예를 들어, 이동 전화기들, 태블릿들, 프린터들, 외부 카메라들, MIDI 디바이스들, 기타 등등)과의 직렬 데이터 통신을 확립하는 직렬 버스 인터페이스를 포함한다. 이 실시예는 또한 이더넷 네트워크를 통해 네트워크 접속들을 확립하는 이더넷 인터페이스(1512), 및 셀룰러 통신 프로토콜들을 사용하여 셀룰러 네트워크를 통해 음성과 데이터 연결들을 확립하는 셀룰러 인터페이스(1511)를 포함한다. 제3 세대 파트너십 프로젝트 기술(예를 들어, 3GPP2) 코드 분할 다중 액세스 기술들(예를 들어, 1xRTT/EVDO/eHRPD를 사용하는 CDMA2000 기술); 롱 텀 에볼루션(LTE) 기술 및/또는 LTE-어드밴스드(LTE-A) 기술; 및 WCDMA/TDSCDMA와 같은 유니버설 모바일 원격통신 시스템(UMTS) 기술을 포함한 다양한 셀룰러 기술들이 채택될 수 있지만, 이것들로 제한되지 않는다. 게다가, 도시된 실시예는 또한 WiFi 채널들(예를 들어, 802.11 채널들) 및/또는 블루투스 채널들을 통해 각각 통신을 확립하는 WiFi 및/또는 블루투스 인터페이스(1510)를 포함한다. 이더넷, 셀룰러, 및 WiFi 통신 인터페이스들 각각은 적절한 기술을 이용하여 아날로그 전송 신호들을 생성하는 송수신기 및 다른 회로를 포함한다. 일 실시예에서, 가속기는 또한 (예를 들어, 데이터 인코딩과 같은 네트워크 기저대역 기능들을 수행하기 위한) 네트워크 통신 프로세스를 지원하기 위해 또한 인보크될 수 있다.
예시된 실시예(1500)는 또한 컴퓨터 시스템 내의 현재 조건들(예를 들어, 열, 전력 사용량, 배터리 수명, 기타 등등)을 검출하고, 그에 응답하여 상이한 시스템 컴포넌트들에의 전력 사용량을 조절하는 전력 관리 인터페이스(1517)를 포함한다. 예를 들어, 특정 조건들에서, 전력 관리 인터페이스(1517)는 본 명세서에서 기술된 가속기 기능들을 전력을 절약하기 위해 끌 수 있다(예를 들어, 배터리가 임계값 아래로 떨어질 때).
예시된 실시예(1500)는 또한 전력 관리 인터페이스(1517)를 포함하고 또한 사용자 입력을 수신하기 위한 키보드, 기타 등등, 및 커서 제어(예를 들어, 마우스, 터치스크린, 터치패드, 기타 등등)와 같은 다양한 상이한 유형들의 입력/출력 디바이스들을 포함할 수 있다.
본 발명의 특정 실시예들에서는 도 15에 도시되지 않은 추가의 컴포넌트들이 데이터 처리 시스템(1500)의 일부분일 수 있으며, 본 발명의 특정 실시예들에서는 도 15에 도시된 것보다 더 적은 컴포넌트들이 사용될 수 있음을 이해할 것이다. 또한, 도 15에 도시되지 않은 하나 이상의 버스 및/또는 상호접속부가 본 기술분야에 잘 알려진 다양한 컴포넌트들을 상호접속하기 위해 사용될 수 있음을 이해할 것이다.
본 발명의 실시예들은 전술한?愎毛聆? 단계들을 포함할 수 있다. 이 단계들은 범용 또는 특수 목적 프로세서로 하여금 그 단계들을 수행하게 하기 위해 사용될 수 있는 머신-실행가능 명령어들로 구현될 수 있다. 대안적으로, 이러한 단계들은 단계들을 수행하기 위한 하드와이어드 로직을 포함하는 특정 하드웨어 컴포넌트들에 의해, 또는 프로그래밍된 컴퓨터 컴포넌트들과 커스텀 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수 있다.
본 명세서에서 기술된 바와 같이, 명령들은 비일시적 컴퓨터 판독가능 매체에 구현된 메모리에 저장된 미리 정해진 기능 또는 소프트웨어 명령어들을 갖거나, 또는 특정 동작들을 수행하도록 구성된 주문형 집적 회로(ASIC)들과 같은 하드웨어의 특정 구성들을 지칭할 수도 있다. 그러므로, 도면들에 도시된 기법들은 하나 이상의 전자 장치들(예를 들어, 엔드 스테이션, 네트워크 요소, 기타 등등)에 저장되고 실행되는 코드 및 데이터를 사용하여 구현될 수 있다. 이러한 전자 디바이스들은 비일시적 컴퓨터 머신-판독가능 저장소 매체(예를 들어, 자기 디스크들; 광 디스크들; 랜덤 액세스 메모리; 판독 전용 메모리; 플래시 메모리 디바이스들; 상 변화 메모리), 및 일시적 컴퓨터 머신-판독가능 통신 매체(예를 들어, 전기, 광, 음향, 또는 다른 형태의 전파 신호들 - 예를 들어, 반송파들, 적외선 신호들, 디지털 신호들, 기타 등등)와 같은 컴퓨터 머신-판독가능 매체를 사용하여 코드 및 데이터를 저장하고 (내부적으로 및/또는 네트워크를 통해 다른 전자 디바이스들과) 통신한다. 또한, 이러한 전자 디바이스들은 통상적으로, 하나 이상의 저장소 디바이스들(비일시적 머신 판독가능 저장소 매체), 사용자 입/출력 디바이스들(예를 들어, 키보드, 터치스크린, 및/또는 디스플레이), 및 네트워크 접속들과 같은 하나 이상의 다른 컴포넌트에 결합된 하나 이상의 프로세서의 세트를 포함한다. 프로세서들의 세트와 다른 컴포넌트들의 결합은 통상적으로 하나 이상의 버스 및 브리지(버스 컨트롤러라고도 지칭됨)를 통해 이루어진다. 저장 디바이스 및 네트워크 트래픽을 전달하는 신호들은 각각 하나 이상의 머신 판독 가능 저장 매체 및 머신 판독 가능 통신 매체를 나타낸다. 그러므로, 소정의 전자 디바이스의 저장소 디바이스는 일반적으로 그 전자 디바이스의 하나 이상의 프로세서의 세트상에서의 실행을 위한 코드 및/또는 데이터를 저장한다. 당연히, 본 발명의 실시예의 하나 이상의 부분은 소프트웨어, 펌웨어, 및/또는 하드웨어의 상이한 조합들을 사용하여 구현될 수 있다. 이 상세한 설명 전체에 걸쳐서, 설명의 목적을 위해, 수많은 특정 상세 사항들이 본 발명의 충분한 이해를 제공하기 위해 기재되었다. 그러나, 본 발명은 이들 특정 상세 사항들 중 일부가 없이도 실시될 수 있다는 것을 통상의 기술자라면 명백히 알 것이다. 특정 예들에서, 주지의 구조들 및 기능들은 본 발명의 요지를 모호하게 하는 것을 회피하기 위해 자세하게 상세히 기술되지는 않았다. 따라서, 본 발명의 범위 및 사상은 하기의 청구항과 관련하여 판단되어야 한다.
Claims (23)
- 프로세서로서,
실행될 명령을 식별하는 명령 데이터를 저장하는 명령 레지스터;
상기 명령의 결과 또는 상기 명령이 실행될 수 없는 이유를 지시하는 데이터를 저장하는 결과 레지스터;
하나 이상의 가속기 명령을 인보크하기 위한 가속기 인보크 명령어(accelerator invocation instruction)를 포함하는 복수의 명령어를 실행하는 실행 로직 - 상기 가속기 인보크 명령어는 상기 명령 레지스터 내에 상기 명령을 특정하는 명령 데이터를 저장함 -;
상기 명령 레지스터로부터 상기 명령 데이터를 판독하고 그에 응답하여 상기 명령 데이터에 의해 식별된 상기 명령을 실행하도록 시도하는 하나 이상 가속기
를 포함하고,
상기 하나 이상의 가속기가 상기 명령을 성공적으로 실행하면, 상기 하나 이상의 가속기는 상기 명령의 결과들을 포함하는 결과 데이터를 상기 결과 레지스터에 저장하고,
상기 하나 이상의 가속기가 상기 명령을 성공적으로 실행할 수 없으면, 상기 하나 이상의 가속기는 상기 명령이 실행될 수 없는 이유를 지시하는 결과 데이터를 저장하고,
상기 실행 로직은 상기 가속기가 실행을 완료하거나 또는 인터럽트될 때까지 일시적으로 실행을 정지시키고, 상기 가속기는 인터럽트된다면 나중에 실행을 계속할 수 있도록 그의 상태를 저장하는 로직을 포함하며,
상기 하나 이상의 가속기가 상기 명령을 성공적으로 실행할 수 없으면, 상기 하나 이상의 가속기는 동일 명령을 실행하기 위한 후속의 시도가 성공하지 못할 것인지의 여부를 지시하는 결과 데이터를 저장하는, 프로세서. - 제1항에 있어서,
상기 명령 레지스터 및 상기 결과 레지스터는 프로세서 코어의 GPR(general purpose register) 파일 내의 범용 레지스터(GPR)들인, 프로세서. - 제1항에 있어서,
상기 실행 로직은 x86 실행 로직을 포함하는, 프로세서. - 제1항에 있어서,
상기 실행 로직 및 상기 하나 이상의 가속기는 단일 프로세서 코어 내에 포함되는, 프로세서. - 제1항에 있어서,
상기 결과 데이터는 비트를 포함하고, 상기 비트의 제1 값은 상기 동일 명령을 실행하기 위한 후속의 시도가 성공하지 못할 것임을 지시하고, 상기 비트의 제2 값은 상기 동일 명령을 실행하기 위한 후속의 시도가 성공할 수 있을 것임을 지시하는, 프로세서. - 제5항에 있어서, 후속 명령어는 상기 동일 명령을 실행하도록 시도할지의 여부를 결정하기 위해 상기 비트를 판독하는, 프로세서.
- 제5항에 있어서, 상기 결과 데이터는 상기 명령을 실행하는데 실패한 특정 이유를 지시하는 결과 코드를 포함하는, 프로세서.
- 제1항에 있어서,
상기 명령과 연관되는 파라미터들을 저장하는 파라미터 레지스터를 더 포함하고, 상기 하나 이상의 가속기는 상기 명령을 실행하기 위해 상기 파라미터들을 판독하는, 프로세서. - 제1항에 있어서,
상기 가속기들 중 적어도 하나의 가속기는 고정된 기능 가속기를 포함하는, 프로세서. - 제1항에 있어서,
상기 가속기들 중 적어도 하나의 가속기는 프로그램 가능한 기능 가속기를 포함하는, 프로세서. - 제1항에 있어서,
상기 명령 레지스터는 상기 가속기들 중 상기 명령을 실행할 하나의 가속기를 식별하기 위한 식별 코드를 저장하는, 프로세서. - 컴퓨터-구현된 방법으로서,
실행될 명령을 식별하기 위한 명령 데이터를 명령 레지스터에 저장하는 단계;
상기 명령의 결과 또는 상기 명령이 실행될 수 없는 이유를 지시하는 데이터를 결과 레지스터에 저장하는 단계;
하나 이상의 가속기 명령을 인보크하기 위한 가속기 인보크 명령어를 포함하는 복수의 명령어를 실행하는 단계 - 상기 가속기 인보크 명령어는 상기 명령 레지스터 내에 상기 명령을 특정하는 명령 데이터를 저장함 -;
상기 명령 레지스터로부터 상기 명령 데이터를 판독하는 단계 - 하나 이상 가속기는 그에 응답하여 상기 명령 데이터에 의해 식별된 상기 명령을 실행하도록 시도함 -
를 포함하고,
상기 하나 이상의 가속기가 상기 명령을 성공적으로 실행하면, 상기 하나 이상의 가속기는 상기 명령의 결과들을 포함하는 결과 데이터를 상기 결과 레지스터에 저장하고,
상기 하나 이상의 가속기가 상기 명령을 성공적으로 실행할 수 없으면, 상기 하나 이상의 가속기는 상기 명령이 실행될 수 없는 이유를 지시하는 결과 데이터를 저장하고,
복수의 명령어를 실행하는 단계는 상기 가속기가 상기 실행을 완료하거나 또는 인터럽트될 때까지 일시적으로 정지되고, 상기 가속기는 인터럽트된다면 나중에 실행을 계속할 수 있도록 그의 상태를 저장하는 로직을 포함하며,
상기 하나 이상의 가속기가 상기 명령을 성공적으로 실행할 수 없으면, 상기 하나 이상의 가속기는 동일 명령을 실행하기 위한 후속의 시도가 성공하지 못할 것인지의 여부를 지시하는 결과 데이터를 저장하는, 컴퓨터-구현된 방법. - 제12항에 있어서,
상기 명령 레지스터 및 상기 결과 레지스터는 프로세서 코어의 GPR 파일 내의 범용 레지스터(GPR)들인, 컴퓨터-구현된 방법. - 제12항에 있어서,
상기 하나 이상의 가속기는 단일 프로세서 코어 내에 포함되는, 컴퓨터-구현된 방법. - 제12항에 있어서,
상기 결과 데이터는 비트를 포함하고, 상기 비트의 제1 값은 상기 동일 명령을 실행하기 위한 후속의 시도가 성공하지 못할 것임을 지시하고, 상기 비트의 제2 값은 상기 동일 명령을 실행하기 위한 후속의 시도가 성공할 수 있을 것임을 지시하는, 컴퓨터-구현된 방법. - 제15항에 있어서, 후속 명령어는 상기 동일 명령을 실행하도록 시도할지의 여부를 결정하기 위해 상기 비트를 판독하는, 컴퓨터-구현된 방법.
- 제15항에 있어서, 상기 결과 데이터는 상기 명령을 실행하는데 실패한 특정 이유를 지시하는 결과 코드를 포함하는, 컴퓨터-구현된 방법.
- 제12항에 있어서,
상기 명령과 연관되는 파라미터들을 파라미터 레지스터에 저장하는 단계를 더 포함하고, 상기 하나 이상의 가속기는 상기 명령을 실행하기 위해 상기 파라미터들을 판독하는, 컴퓨터-구현된 방법. - 제12항에 있어서,
상기 가속기들 중 적어도 하나의 가속기는 고정된 기능 가속기를 포함하는, 컴퓨터-구현된 방법. - 제12항에 있어서,
상기 가속기들 중 적어도 하나의 가속기는 프로그램 가능한 기능 가속기를 포함하는, 컴퓨터-구현된 방법. - 제12항에 있어서,
상기 명령 레지스터는 상기 가속기들 중 상기 명령을 실행할 하나의 가속기를 식별하기 위한 식별 코드를 저장하는, 컴퓨터-구현된 방법. - 프로세서로서,
실행될 명령을 식별하는 명령 데이터를 저장하는 제1 레지스터;
상기 명령의 결과 또는 상기 명령이 실행될 수 없는 이유를 지시하는 데이터를 저장하는 제2 레지스터;
하나 이상의 명령을 인보크하기 위한 제1 명령어를 포함하는 복수의 명령어를 실행하는 실행 로직 - 상기 제1 명령어는 상기 제1 레지스터 내에 상기 명령을 특정하는 명령 데이터를 저장함 -;
상기 제1 레지스터로부터 상기 명령 데이터를 판독하고 그에 응답하여 상기 명령 데이터에 의해 식별된 상기 명령을 실행하도록 시도하는 하나 이상 가속기
를 포함하고,
상기 하나 이상의 가속기가 상기 명령을 성공적으로 실행하면, 상기 하나 이상의 가속기는 상기 명령의 결과들을 포함하는 결과 데이터를 상기 제2 레지스터에 저장하고,
상기 하나 이상의 가속기가 상기 명령을 성공적으로 실행할 수 없으면, 상기 하나 이상의 가속기는 상기 명령이 실행될 수 없는 이유를 지시하는 결과 데이터를 저장하고,
상기 실행 로직은 상기 가속기가 실행을 완료하거나 또는 인터럽트될 때까지 일시적으로 실행을 정지시키고, 상기 가속기는 인터럽트된다면 나중에 실행을 계속할 수 있도록 그의 상태를 저장하는 로직을 포함하며,
상기 하나 이상의 가속기가 상기 명령을 성공적으로 실행할 수 없으면, 상기 하나 이상의 가속기는 동일 명령을 실행하기 위한 후속의 시도가 성공하지 못할 것인지의 여부를 지시하는 결과 데이터를 저장하는, 프로세서. - 제22항에 있어서,
상기 제1 레지스터 및 상기 제2 레지스터는 프로세서 코어의 GPR(general purpose register) 파일 내의 범용 레지스터(GPR)들인, 프로세서.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/729,915 | 2012-12-28 | ||
US13/729,915 US9361116B2 (en) | 2012-12-28 | 2012-12-28 | Apparatus and method for low-latency invocation of accelerators |
PCT/US2013/046863 WO2014105148A1 (en) | 2012-12-28 | 2013-06-20 | Apparatus and method for low-latency invocation of accelerators |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157012995A Division KR20150076198A (ko) | 2012-12-28 | 2013-06-20 | 가속기들의 낮은-레이턴시 인보크를 위한 장치 및 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160124267A true KR20160124267A (ko) | 2016-10-26 |
KR101764187B1 KR101764187B1 (ko) | 2017-08-02 |
Family
ID=51018707
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167029367A KR101764187B1 (ko) | 2012-12-28 | 2013-06-20 | 가속기들의 낮은-레이턴시 인보크를 위한 장치 및 방법 |
KR1020167029366A KR101791811B1 (ko) | 2012-12-28 | 2013-06-20 | 가속기들의 낮은-레이턴시 인보크를 위한 장치 및 방법 |
KR1020157012995A KR20150076198A (ko) | 2012-12-28 | 2013-06-20 | 가속기들의 낮은-레이턴시 인보크를 위한 장치 및 방법 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167029366A KR101791811B1 (ko) | 2012-12-28 | 2013-06-20 | 가속기들의 낮은-레이턴시 인보크를 위한 장치 및 방법 |
KR1020157012995A KR20150076198A (ko) | 2012-12-28 | 2013-06-20 | 가속기들의 낮은-레이턴시 인보크를 위한 장치 및 방법 |
Country Status (5)
Country | Link |
---|---|
US (4) | US9361116B2 (ko) |
KR (3) | KR101764187B1 (ko) |
CN (2) | CN104813280B (ko) |
DE (1) | DE112013005338T5 (ko) |
WO (1) | WO2014105148A1 (ko) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013147885A1 (en) | 2012-03-30 | 2013-10-03 | Intel Corporation | Apparatus and method for accelerating operations in a processor which uses shared virtual memory |
US10140129B2 (en) | 2012-12-28 | 2018-11-27 | Intel Corporation | Processing core having shared front end unit |
US9417873B2 (en) | 2012-12-28 | 2016-08-16 | Intel Corporation | Apparatus and method for a hybrid latency-throughput processor |
US9361116B2 (en) | 2012-12-28 | 2016-06-07 | Intel Corporation | Apparatus and method for low-latency invocation of accelerators |
US9542193B2 (en) | 2012-12-28 | 2017-01-10 | Intel Corporation | Memory address collision detection of ordered parallel threads with bloom filters |
US10346195B2 (en) | 2012-12-29 | 2019-07-09 | Intel Corporation | Apparatus and method for invocation of a multi threaded accelerator |
US9465618B2 (en) * | 2014-01-08 | 2016-10-11 | Oracle International Corporation | Methods and systems for optimally selecting an assist unit |
US10031770B2 (en) * | 2014-04-30 | 2018-07-24 | Intel Corporation | System and method of delayed context switching in processor registers |
JP6329318B2 (ja) * | 2015-02-25 | 2018-05-23 | 株式会社日立製作所 | 情報処理装置 |
US9747108B2 (en) | 2015-03-27 | 2017-08-29 | Intel Corporation | User-level fork and join processors, methods, systems, and instructions |
US10275853B2 (en) * | 2015-04-15 | 2019-04-30 | Intel Corporation | Media hub device and cache |
US9703603B1 (en) * | 2016-04-25 | 2017-07-11 | Nxp Usa, Inc. | System and method for executing accelerator call |
US10929059B2 (en) | 2016-07-26 | 2021-02-23 | MemRay Corporation | Resistance switching memory-based accelerator |
US20180069767A1 (en) * | 2016-09-06 | 2018-03-08 | Advanced Micro Devices, Inc. | Preserving quality of service constraints in heterogeneous processing systems |
US10210032B2 (en) * | 2017-03-30 | 2019-02-19 | Intel Corporation | Processing commands via dedicated register pairs for each thread of a plurality of threads |
US10437739B2 (en) * | 2017-09-26 | 2019-10-08 | Intel Corporation | Low-latency accelerator |
CN110300132A (zh) * | 2018-03-22 | 2019-10-01 | 贵州白山云科技股份有限公司 | 服务器数据缓存方法、装置和系统 |
US10795713B2 (en) | 2018-05-25 | 2020-10-06 | Vmware, Inc. | Live migration of a virtualized compute accelerator workload |
US10684887B2 (en) * | 2018-05-25 | 2020-06-16 | Vmware, Inc. | Live migration of a virtualized compute accelerator workload |
GB2575294B8 (en) * | 2018-07-04 | 2022-07-20 | Graphcore Ltd | Host Proxy On Gateway |
KR102587648B1 (ko) * | 2018-07-23 | 2023-10-11 | 삼성전자주식회사 | 적층형 메모리 장치, 이를 포함하는 메모리 시스템 및 적층형 메모리 장치의 테스트 방법 |
US11243817B2 (en) * | 2019-03-29 | 2022-02-08 | Intel Corporation | Technologies for data migration between edge accelerators hosted on different edge locations |
US11263122B2 (en) * | 2019-04-09 | 2022-03-01 | Vmware, Inc. | Implementing fine grain data coherency of a shared memory region |
US11372711B2 (en) | 2019-06-29 | 2022-06-28 | Intel Corporation | Apparatus and method for fault handling of an offload transaction |
US10983796B2 (en) | 2019-06-29 | 2021-04-20 | Intel Corporation | Core-to-core end “offload” instruction(s) |
US11321144B2 (en) | 2019-06-29 | 2022-05-03 | Intel Corporation | Method and apparatus for efficiently managing offload work between processing units |
US10929129B2 (en) * | 2019-06-29 | 2021-02-23 | Intel Corporation | Apparatus and method for modifying addresses, data, or program code associated with offloaded instructions |
US11182208B2 (en) | 2019-06-29 | 2021-11-23 | Intel Corporation | Core-to-core start “offload” instruction(s) |
US11016766B2 (en) | 2019-06-29 | 2021-05-25 | Intel Corporation | Apparatus and method for compiler hints for inter-core offload |
US11030000B2 (en) | 2019-06-29 | 2021-06-08 | Intel Corporation | Core advertisement of availability |
US10789094B1 (en) * | 2019-08-22 | 2020-09-29 | Micron Technology, Inc. | Hierarchical memory apparatus |
US11409572B2 (en) | 2019-09-27 | 2022-08-09 | Intel Corporation | Methods of hardware and software coordinated opt-in to advanced features on hetero ISA platforms |
US11231930B2 (en) * | 2019-11-25 | 2022-01-25 | Alibaba Group Holding Limited | Methods and systems for fetching data for an accelerator |
KR102418794B1 (ko) * | 2020-06-02 | 2022-07-08 | 오픈엣지테크놀로지 주식회사 | 하드웨어 가속기를 위한 파라미터를 메모리로부터 액세스하는 방법 및 이를 이용한 장치 |
US11893419B2 (en) * | 2020-08-28 | 2024-02-06 | Apple Inc. | Hardware accelerators using shared interface registers |
KR20220031776A (ko) | 2020-09-03 | 2022-03-14 | 삼성전자주식회사 | 반도체 메모리 장치 및 그것의 동작 방법 |
KR102650569B1 (ko) * | 2020-11-12 | 2024-03-26 | 한국전자통신연구원 | 범용 연산 가속기 및 그것의 동작 방법 |
US11775303B2 (en) | 2020-11-12 | 2023-10-03 | Electronics And Telecommunications Research Institute | Computing accelerator for processing multiple-type instruction and operation method thereof |
WO2022133718A1 (en) * | 2020-12-22 | 2022-06-30 | Alibaba Group Holding Limited | Processing system with integrated domain specific accelerators |
Family Cites Families (131)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4943915A (en) * | 1987-09-29 | 1990-07-24 | Digital Equipment Corporation | Apparatus and method for synchronization of a coprocessor unit in a pipelined central processing unit |
US4982402A (en) | 1989-02-03 | 1991-01-01 | Digital Equipment Corporation | Method and apparatus for detecting and correcting errors in a pipelined computer system |
US5276798A (en) | 1990-09-14 | 1994-01-04 | Hughes Aircraft Company | Multifunction high performance graphics rendering processor |
US5329615A (en) | 1990-09-14 | 1994-07-12 | Hughes Aircraft Company | Concurrent general purpose and DMA processing in a graphics rendering processor |
CA2050658C (en) * | 1990-09-14 | 1997-01-28 | John M. Peaslee | Dual hardware channels and hardware context switching in a graphics rendering processor |
US5444853A (en) * | 1992-03-31 | 1995-08-22 | Seiko Epson Corporation | System and method for transferring data between a plurality of virtual FIFO's and a peripheral via a hardware FIFO and selectively updating control information associated with the virtual FIFO's |
US5423025A (en) | 1992-09-29 | 1995-06-06 | Amdahl Corporation | Error handling mechanism for a controller having a plurality of servers |
US5430841A (en) * | 1992-10-29 | 1995-07-04 | International Business Machines Corporation | Context management in a graphics system |
JPH07219774A (ja) * | 1994-02-07 | 1995-08-18 | Fujitsu Ltd | データ処理装置および例外処理方法 |
US5550988A (en) | 1994-03-01 | 1996-08-27 | Intel Corporation | Apparatus and method for performing error correction in a multi-processor system |
US6341324B1 (en) | 1995-10-06 | 2002-01-22 | Lsi Logic Corporation | Exception processing in superscalar microprocessor |
US5778211A (en) | 1996-02-15 | 1998-07-07 | Sun Microsystems, Inc. | Emulating a delayed exception on a digital computer having a corresponding precise exception mechanism |
US6061711A (en) | 1996-08-19 | 2000-05-09 | Samsung Electronics, Inc. | Efficient context saving and restoring in a multi-tasking computing system environment |
CN100373331C (zh) | 1996-08-27 | 2008-03-05 | 松下电器产业株式会社 | 独立处理多个指令流、软式控制各指令流的处理功能的多线程处理器 |
US6247040B1 (en) | 1996-09-30 | 2001-06-12 | Lsi Logic Corporation | Method and structure for automated switching between multiple contexts in a storage subsystem target device |
US6148326A (en) | 1996-09-30 | 2000-11-14 | Lsi Logic Corporation | Method and structure for independent disk and host transfer in a storage subsystem target device |
US6081849A (en) | 1996-10-01 | 2000-06-27 | Lsi Logic Corporation | Method and structure for switching multiple contexts in storage subsystem target device |
US6275497B1 (en) | 1997-02-10 | 2001-08-14 | Hybrid Networks, Inc. | Method and apparatus for controlling communication channels using contention and polling schemes |
US6075546A (en) * | 1997-11-10 | 2000-06-13 | Silicon Grahphics, Inc. | Packetized command interface to graphics processor |
US6397240B1 (en) * | 1999-02-18 | 2002-05-28 | Agere Systems Guardian Corp. | Programmable accelerator for a programmable processor system |
GB2352066B (en) | 1999-07-14 | 2003-11-05 | Element 14 Ltd | An instruction set for a computer |
US6543026B1 (en) | 1999-09-10 | 2003-04-01 | Lsi Logic Corporation | Forward error correction apparatus and methods |
JP3621315B2 (ja) * | 1999-11-22 | 2005-02-16 | Necエレクトロニクス株式会社 | マイクロプロセッサシステム |
US6691143B2 (en) * | 2000-05-11 | 2004-02-10 | Cyberguard Corporation | Accelerated montgomery multiplication using plural multipliers |
EP1182569B8 (en) * | 2000-08-21 | 2011-07-06 | Texas Instruments Incorporated | TLB lock and unlock operation |
EP1182568A3 (en) * | 2000-08-21 | 2004-07-21 | Texas Instruments Incorporated | TLB operation based on task-id |
US6742104B2 (en) | 2000-08-21 | 2004-05-25 | Texas Instruments Incorporated | Master/slave processing system with shared translation lookaside buffer |
JP3729087B2 (ja) | 2001-05-23 | 2005-12-21 | 日本電気株式会社 | マルチプロセッサシステム、データ依存投機実行制御装置およびその方法 |
JP2003015900A (ja) | 2001-06-28 | 2003-01-17 | Hitachi Ltd | 追走型多重化システム、及び追走により信頼性を高めるデータ処理方法 |
US20030028751A1 (en) | 2001-08-03 | 2003-02-06 | Mcdonald Robert G. | Modular accelerator framework |
US7209996B2 (en) | 2001-10-22 | 2007-04-24 | Sun Microsystems, Inc. | Multi-core multi-thread processor |
US7228401B2 (en) | 2001-11-13 | 2007-06-05 | Freescale Semiconductor, Inc. | Interfacing a processor to a coprocessor in which the processor selectively broadcasts to or selectively alters an execution mode of the coprocessor |
US20030126416A1 (en) | 2001-12-31 | 2003-07-03 | Marr Deborah T. | Suspending execution of a thread in a multi-threaded processor |
US7313734B2 (en) * | 2002-01-14 | 2007-12-25 | International Business Machines Corporation | Method and system for instruction tracing with enhanced interrupt avoidance |
US20030135718A1 (en) * | 2002-01-14 | 2003-07-17 | International Business Machines Corporation | Method and system using hardware assistance for instruction tracing by revealing executed opcode or instruction |
US20030135719A1 (en) * | 2002-01-14 | 2003-07-17 | International Business Machines Corporation | Method and system using hardware assistance for tracing instruction disposition information |
US20040215444A1 (en) | 2002-03-25 | 2004-10-28 | Patel Mukesh K. | Hardware-translator-based custom method invocation system and method |
US6944746B2 (en) * | 2002-04-01 | 2005-09-13 | Broadcom Corporation | RISC processor supporting one or more uninterruptible co-processors |
US7200735B2 (en) | 2002-04-10 | 2007-04-03 | Tensilica, Inc. | High-performance hybrid processor with configurable execution units |
GB2388447B (en) * | 2002-05-09 | 2005-07-27 | Sun Microsystems Inc | A computer system method and program product for performing a data access from low-level code |
US6952214B2 (en) | 2002-07-12 | 2005-10-04 | Sun Microsystems, Inc. | Method for context switching a graphics accelerator comprising multiple rendering pipelines |
US7313797B2 (en) | 2002-09-18 | 2007-12-25 | Wind River Systems, Inc. | Uniprocessor operating system design facilitating fast context switching |
US20040111594A1 (en) | 2002-12-05 | 2004-06-10 | International Business Machines Corporation | Multithreading recycle and dispatch mechanism |
US7673304B2 (en) | 2003-02-18 | 2010-03-02 | Microsoft Corporation | Multithreaded kernel for graphics processing unit |
US7079147B2 (en) * | 2003-05-14 | 2006-07-18 | Lsi Logic Corporation | System and method for cooperative operation of a processor and coprocessor |
US7714870B2 (en) * | 2003-06-23 | 2010-05-11 | Intel Corporation | Apparatus and method for selectable hardware accelerators in a data driven architecture |
US7082508B2 (en) * | 2003-06-24 | 2006-07-25 | Intel Corporation | Dynamic TLB locking based on page usage metric |
US7765388B2 (en) * | 2003-09-17 | 2010-07-27 | Broadcom Corporation | Interrupt verification support mechanism |
US8566828B2 (en) | 2003-12-19 | 2013-10-22 | Stmicroelectronics, Inc. | Accelerator for multi-processing system and method |
US7302627B1 (en) | 2004-04-05 | 2007-11-27 | Mimar Tibet | Apparatus for efficient LFSR calculation in a SIMD processor |
US20050257186A1 (en) | 2004-05-13 | 2005-11-17 | Michael Zilbershlag | Operation system for programmable hardware |
US7370243B1 (en) | 2004-06-30 | 2008-05-06 | Sun Microsystems, Inc. | Precise error handling in a fine grain multithreaded multicore processor |
US8190863B2 (en) | 2004-07-02 | 2012-05-29 | Intel Corporation | Apparatus and method for heterogeneous chip multiprocessors via resource allocation and restriction |
US7388588B2 (en) * | 2004-09-09 | 2008-06-17 | International Business Machines Corporation | Programmable graphics processing engine |
US7437581B2 (en) | 2004-09-28 | 2008-10-14 | Intel Corporation | Method and apparatus for varying energy per instruction according to the amount of available parallelism |
US7676649B2 (en) * | 2004-10-01 | 2010-03-09 | Lockheed Martin Corporation | Computing machine with redundancy and related systems and methods |
US7350055B2 (en) | 2004-10-20 | 2008-03-25 | Arm Limited | Tightly coupled accelerator |
US7598958B1 (en) * | 2004-11-17 | 2009-10-06 | Nvidia Corporation | Multi-chip graphics processing unit apparatus, system, and method |
US8788787B2 (en) | 2005-03-02 | 2014-07-22 | The Boeing Company | Systems, methods and architecture for facilitating software access to acceleration technology |
US20060288193A1 (en) * | 2005-06-03 | 2006-12-21 | Silicon Integrated System Corp. | Register-collecting mechanism for multi-threaded processors and method using the same |
US7426626B2 (en) | 2005-08-23 | 2008-09-16 | Qualcomm Incorporated | TLB lock indicator |
US7583268B2 (en) | 2005-11-10 | 2009-09-01 | Via Technologies, Inc. | Graphics pipeline precise interrupt method and apparatus |
US7545381B2 (en) | 2005-11-10 | 2009-06-09 | Via Technologies, Inc. | Interruptible GPU and method for context saving and restoring |
US8212824B1 (en) * | 2005-12-19 | 2012-07-03 | Nvidia Corporation | Apparatus and method for serial save and restore of graphics processing unit state information |
US7725624B2 (en) | 2005-12-30 | 2010-05-25 | Intel Corporation | System and method for cryptography processing units and multiplier |
US7509481B2 (en) | 2006-03-03 | 2009-03-24 | Sun Microsystems, Inc. | Patchable and/or programmable pre-decode |
US7480838B1 (en) | 2006-03-23 | 2009-01-20 | Intel Corporation | Method, system and apparatus for detecting and recovering from timing errors |
US7746350B1 (en) * | 2006-06-15 | 2010-06-29 | Nvidia Corporation | Cryptographic computations on general purpose graphics processing units |
US7487341B2 (en) | 2006-06-29 | 2009-02-03 | Intel Corporation | Handling address translations and exceptions of a heterogeneous resource of a processor using another processor resource |
US8959311B2 (en) | 2006-08-25 | 2015-02-17 | Texas Instruments Incorporated | Methods and systems involving secure RAM |
US9478062B2 (en) * | 2006-09-19 | 2016-10-25 | Imagination Technologies Limited | Memory allocation in distributed memories for multiprocessing |
US7949887B2 (en) | 2006-11-01 | 2011-05-24 | Intel Corporation | Independent power control of processing cores |
US8127113B1 (en) | 2006-12-01 | 2012-02-28 | Synopsys, Inc. | Generating hardware accelerators and processor offloads |
US7827383B2 (en) | 2007-03-09 | 2010-11-02 | Oracle America, Inc. | Efficient on-chip accelerator interfaces to reduce software overhead |
US7937568B2 (en) | 2007-07-11 | 2011-05-03 | International Business Machines Corporation | Adaptive execution cycle control method for enhanced instruction throughput |
US7743232B2 (en) | 2007-07-18 | 2010-06-22 | Advanced Micro Devices, Inc. | Multiple-core processor with hierarchical microcode store |
US8345052B1 (en) | 2007-11-08 | 2013-01-01 | Nvidia Corporation | Method and system for using a GPU frame buffer in a multi-GPU system as cache memory |
US8339404B2 (en) | 2007-11-29 | 2012-12-25 | Accelereyes, Llc | System for improving utilization of GPU resources |
US8140823B2 (en) * | 2007-12-03 | 2012-03-20 | Qualcomm Incorporated | Multithreaded processor with lock indicator |
US7865675B2 (en) | 2007-12-06 | 2011-01-04 | Arm Limited | Controlling cleaning of data values within a hardware accelerator |
GB2455344B (en) * | 2007-12-06 | 2012-06-13 | Advanced Risc Mach Ltd | Recovering from control path errors |
US8780123B2 (en) | 2007-12-17 | 2014-07-15 | Nvidia Corporation | Interrupt handling techniques in the rasterizer of a GPU |
US7793080B2 (en) | 2007-12-31 | 2010-09-07 | Globalfoundries Inc. | Processing pipeline having parallel dispatch and method thereof |
US7877582B2 (en) | 2008-01-31 | 2011-01-25 | International Business Machines Corporation | Multi-addressable register file |
US8055872B2 (en) * | 2008-02-21 | 2011-11-08 | Arm Limited | Data processor with hardware accelerator, accelerator interface and shared memory management unit |
US8776077B2 (en) | 2008-04-02 | 2014-07-08 | Oracle America, Inc. | Method for multithreading an application using partitioning to allocate work to threads |
US8776030B2 (en) | 2008-04-09 | 2014-07-08 | Nvidia Corporation | Partitioning CUDA code for execution by a general purpose processor |
US8141102B2 (en) * | 2008-09-04 | 2012-03-20 | International Business Machines Corporation | Data processing in a hybrid computing environment |
US8230442B2 (en) * | 2008-09-05 | 2012-07-24 | International Business Machines Corporation | Executing an accelerator application program in a hybrid computing environment |
US8082426B2 (en) * | 2008-11-06 | 2011-12-20 | Via Technologies, Inc. | Support of a plurality of graphic processing units |
US20100274972A1 (en) | 2008-11-24 | 2010-10-28 | Boris Babayan | Systems, methods, and apparatuses for parallel computing |
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 |
US8281185B2 (en) * | 2009-06-30 | 2012-10-02 | Oracle America, Inc. | Advice-based feedback for transactional execution |
US20110040924A1 (en) * | 2009-08-11 | 2011-02-17 | Selinger Robert D | Controller and Method for Detecting a Transmission Error Over a NAND Interface Using Error Detection Code |
US8458677B2 (en) | 2009-08-20 | 2013-06-04 | International Business Machines Corporation | Generating code adapted for interlinking legacy scalar code and extended vector code |
US8719547B2 (en) | 2009-09-18 | 2014-05-06 | Intel Corporation | Providing hardware support for shared virtual memory between local and remote physical memory |
US8405666B2 (en) * | 2009-10-08 | 2013-03-26 | Advanced Micro Devices, Inc. | Saving, transferring and recreating GPU context information across heterogeneous GPUs during hot migration of a virtual machine |
US8244946B2 (en) | 2009-10-16 | 2012-08-14 | Brocade Communications Systems, Inc. | Interrupt moderation |
US8316194B2 (en) * | 2009-12-15 | 2012-11-20 | Intel Corporation | Mechanisms to accelerate transactions using buffered stores |
US8166437B2 (en) | 2009-12-15 | 2012-04-24 | Apple Inc. | Automated pad ring generation for programmable logic device implementation of integrated circuit design |
US8095824B2 (en) * | 2009-12-15 | 2012-01-10 | Intel Corporation | Performing mode switching in an unbounded transactional memory (UTM) system |
US8970608B2 (en) | 2010-04-05 | 2015-03-03 | Nvidia Corporation | State objects for specifying dynamic state |
US9015443B2 (en) * | 2010-04-30 | 2015-04-21 | International Business Machines Corporation | Reducing remote reads of memory in a hybrid computing environment |
JP4818450B1 (ja) * | 2010-06-30 | 2011-11-16 | 株式会社東芝 | グラフィクスプロセッシングユニットおよび情報処理装置 |
US20120023314A1 (en) | 2010-07-21 | 2012-01-26 | Crum Matthew M | Paired execution scheduling of dependent micro-operations |
US8667253B2 (en) | 2010-08-04 | 2014-03-04 | International Business Machines Corporation | Initiating assist thread upon asynchronous event for processing simultaneously with controlling thread and updating its running status in status register |
US9552206B2 (en) * | 2010-11-18 | 2017-01-24 | Texas Instruments Incorporated | Integrated circuit with control node circuitry and processing circuitry |
US20120159090A1 (en) * | 2010-12-16 | 2012-06-21 | Microsoft Corporation | Scalable multimedia computer system architecture with qos guarantees |
US20120166777A1 (en) | 2010-12-22 | 2012-06-28 | Advanced Micro Devices, Inc. | Method and apparatus for switching threads |
CN102567556A (zh) * | 2010-12-27 | 2012-07-11 | 北京国睿中数科技股份有限公司 | 一种面向调试的处理器验证方法及验证设备 |
CN102270166A (zh) * | 2011-02-22 | 2011-12-07 | 清华大学 | 基于模拟器的处理器故障注入及跟踪方法及模拟器 |
US8683175B2 (en) * | 2011-03-15 | 2014-03-25 | International Business Machines Corporation | Seamless interface for multi-threaded core accelerators |
US8892924B2 (en) | 2011-05-31 | 2014-11-18 | Intel Corporation | Reducing power consumption of uncore circuitry of a processor |
US8793515B2 (en) | 2011-06-27 | 2014-07-29 | Intel Corporation | Increasing power efficiency of turbo mode operation in a processor |
US9003102B2 (en) * | 2011-08-26 | 2015-04-07 | Sandisk Technologies Inc. | Controller with extended status register and method of use therewith |
CN104011705A (zh) | 2011-12-01 | 2014-08-27 | 新加坡国立大学 | 多形异构性多核架构 |
US20130159630A1 (en) | 2011-12-20 | 2013-06-20 | Ati Technologies Ulc | Selective cache for inter-operations in a processor-based environment |
US9436512B2 (en) | 2011-12-22 | 2016-09-06 | Board Of Supervisors Of Louisana State University And Agricultural And Mechanical College | Energy efficient job scheduling in heterogeneous chip multiprocessors based on dynamic program behavior using prim model |
US9268596B2 (en) * | 2012-02-02 | 2016-02-23 | Intel Corparation | Instruction and logic to test transactional execution status |
US9396020B2 (en) * | 2012-03-30 | 2016-07-19 | Intel Corporation | Context switching mechanism for a processing core having a general purpose CPU core and a tightly coupled accelerator |
WO2013147885A1 (en) * | 2012-03-30 | 2013-10-03 | Intel Corporation | Apparatus and method for accelerating operations in a processor which uses shared virtual memory |
US20130332937A1 (en) | 2012-05-29 | 2013-12-12 | Advanced Micro Devices, Inc. | Heterogeneous Parallel Primitives Programming Model |
US9753778B2 (en) | 2012-07-20 | 2017-09-05 | Microsoft Technology Licensing, Llc | Domain-agnostic resource allocation framework |
US9123128B2 (en) * | 2012-12-21 | 2015-09-01 | Nvidia Corporation | Graphics processing unit employing a standard processing unit and a method of constructing a graphics processing unit |
US9417873B2 (en) | 2012-12-28 | 2016-08-16 | Intel Corporation | Apparatus and method for a hybrid latency-throughput processor |
US20140189333A1 (en) * | 2012-12-28 | 2014-07-03 | Oren Ben-Kiki | Apparatus and method for task-switchable synchronous hardware accelerators |
US9053025B2 (en) * | 2012-12-28 | 2015-06-09 | Intel Corporation | Apparatus and method for fast failure handling of instructions |
US9361116B2 (en) | 2012-12-28 | 2016-06-07 | Intel Corporation | Apparatus and method for low-latency invocation of accelerators |
US9086813B2 (en) | 2013-03-15 | 2015-07-21 | Qualcomm Incorporated | Method and apparatus to save and restore system memory management unit (MMU) contexts |
US10031770B2 (en) | 2014-04-30 | 2018-07-24 | Intel Corporation | System and method of delayed context switching in processor registers |
US9703603B1 (en) | 2016-04-25 | 2017-07-11 | Nxp Usa, Inc. | System and method for executing accelerator call |
-
2012
- 2012-12-28 US US13/729,915 patent/US9361116B2/en active Active
-
2013
- 2013-06-20 WO PCT/US2013/046863 patent/WO2014105148A1/en active Application Filing
- 2013-06-20 CN CN201380059921.9A patent/CN104813280B/zh active Active
- 2013-06-20 CN CN201611088838.6A patent/CN106547518B/zh active Active
- 2013-06-20 KR KR1020167029367A patent/KR101764187B1/ko active IP Right Grant
- 2013-06-20 DE DE112013005338.1T patent/DE112013005338T5/de active Pending
- 2013-06-20 KR KR1020167029366A patent/KR101791811B1/ko active IP Right Grant
- 2013-06-20 KR KR1020157012995A patent/KR20150076198A/ko active Application Filing
-
2016
- 2016-05-03 US US15/145,748 patent/US10095521B2/en active Active
- 2016-09-30 US US15/282,082 patent/US10089113B2/en active Active
- 2016-09-30 US US15/281,944 patent/US10083037B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
KR20150076198A (ko) | 2015-07-06 |
WO2014105148A1 (en) | 2014-07-03 |
DE112013005338T5 (de) | 2015-07-23 |
KR101791811B1 (ko) | 2017-10-30 |
US10089113B2 (en) | 2018-10-02 |
US10083037B2 (en) | 2018-09-25 |
US20140189332A1 (en) | 2014-07-03 |
CN104813280B (zh) | 2018-11-09 |
KR101764187B1 (ko) | 2017-08-02 |
US9361116B2 (en) | 2016-06-07 |
CN104813280A (zh) | 2015-07-29 |
KR20160127156A (ko) | 2016-11-02 |
US10095521B2 (en) | 2018-10-09 |
US20170017492A1 (en) | 2017-01-19 |
US20160246597A1 (en) | 2016-08-25 |
US20170017491A1 (en) | 2017-01-19 |
CN106547518A (zh) | 2017-03-29 |
CN106547518B (zh) | 2019-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101764187B1 (ko) | 가속기들의 낮은-레이턴시 인보크를 위한 장치 및 방법 | |
KR101636836B1 (ko) | 명령어들의 고속 실패 핸들링을 위한 장치 및 방법 | |
US10664284B2 (en) | Apparatus and method for a hybrid latency-throughput processor | |
KR101854520B1 (ko) | 타이트하게 커플링된 이종 컴퓨팅을 위한 하드웨어 프로세서스들 및 방법들 | |
KR102595640B1 (ko) | 벡터 캐시 라인 라이트 백 프로세서, 방법, 시스템, 및 명령어 | |
CN104813294B (zh) | 用于任务可切换的同步硬件加速器的装置和方法 | |
KR20170097633A (ko) | 융합된 단일 사이클 증가-비교-점프를 수행하기 위한 명령어 및 로직 | |
JP6778375B2 (ja) | ベクトルビット反転を実行するためのプロセッサ、方法、およびシステム | |
KR20170097015A (ko) | 마스크를 마스크 값들의 벡터로 확장하기 위한 방법 및 장치 | |
CN114675883A (zh) | 用于对齐矩阵操作加速器瓦片的指令的装置、方法和系统 | |
KR20170099860A (ko) | 벡터 포화된 더블워드/쿼드워드 덧셈을 수행하기 위한 명령어 및 로직 | |
CN108255520B (zh) | N路监测器 | |
CN114675888A (zh) | 用于加载矩阵操作加速器瓦片的指令的装置、方法和系统 | |
CN113849221A (zh) | 用于操作系统透明指令状态管理的装置、方法和系统 | |
KR20170098806A (ko) | 벡터 비트 수집을 수행하기 위한 방법 및 장치 |
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 |