KR101814356B1 - 적분 이미지 계산 명령어를 위한 방법 및 장치 - Google Patents
적분 이미지 계산 명령어를 위한 방법 및 장치 Download PDFInfo
- Publication number
- KR101814356B1 KR101814356B1 KR1020177008223A KR20177008223A KR101814356B1 KR 101814356 B1 KR101814356 B1 KR 101814356B1 KR 1020177008223 A KR1020177008223 A KR 1020177008223A KR 20177008223 A KR20177008223 A KR 20177008223A KR 101814356 B1 KR101814356 B1 KR 101814356B1
- Authority
- KR
- South Korea
- Prior art keywords
- vector
- instruction
- elements
- field
- execution
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 34
- 239000013598 vector Substances 0.000 claims abstract description 213
- 238000004364 calculation method Methods 0.000 claims abstract description 9
- 230000015654 memory Effects 0.000 claims description 127
- 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 59
- 238000006073 displacement reaction Methods 0.000 description 41
- 238000010586 diagram Methods 0.000 description 30
- 238000006243 chemical reaction Methods 0.000 description 17
- 230000000873 masking effect Effects 0.000 description 16
- 239000003607 modifier Substances 0.000 description 14
- 238000012545 processing Methods 0.000 description 14
- 238000007667 floating Methods 0.000 description 9
- 230000003416 augmentation Effects 0.000 description 8
- 239000003795 chemical substances by application Substances 0.000 description 7
- 238000013461 design Methods 0.000 description 6
- 238000007792 addition Methods 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000000295 complement effect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000001629 suppression Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013501 data transformation Methods 0.000 description 2
- 235000019800 disodium phosphate Nutrition 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000010367 cloning Methods 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000002789 length control Methods 0.000 description 1
- 230000005291 magnetic effect Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000005039 memory span Effects 0.000 description 1
- 239000000758 substrate Substances 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- 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/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- 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/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/355—Indexed addressing
- G06F9/3555—Indexed addressing using scaling, e.g. multiplication of index
-
- 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/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- 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/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
제2 벡터를 생성하고 제3 벡터를 생성함으로써 이미지 적분 계산을 수행하는 방법이 개시되어 있다. 제2 벡터는 제1 벡터의 교번 엘리먼트들을 제1 벡터의 각각의 인접하는 엘리먼트들에 가산하고 합산 결과를 상기 제2 벡터에 제공하는 제1 명령어를 실행함으로써 생성된다. 제1 명령어는 또한 각각의 인접하는 엘리먼트들을 제2 벡터에 패스시킨다. 제3 벡터는 제2 벡터의 한 변의 엘리먼트들을 제2 벡터의 다른 변의 엘리먼트에 가산하고 제2 벡터의 다른 변의 엘리먼트를 패스하는 제2 명령어를 실행함으로써 생성된다.
Description
본 발명의 분야는 컴퓨터 처리 시스템들에 관한 것으로, 특히 적분 이미지 연산 명령어에 관한 것이다.
도 1은 반도체 칩상의 논리 회로에 의해 구현되는 처리 코어(100)의 하이 레벨 도면을 나타낸다. 처리 코어는 파이프라인(101)을 포함한다. 파이프라인은 각각이 프로그램 코드 명령어를 완전히 실행하는데 필요한 다단계 프로세스에서 특정 단계를 수행하도록 설계되는 복수의 스테이지로 이루어져 있다. 이것들은 일반적으로 적어도 다음을 포함한다: 1) 명령어 페치 및 디코드; 2) 데이터 페치; 3) 실행; 4) 라이트 백. 실행 스테이지는 동일한 명령어에 의해 식별되고 다른 이전의 스테이지에서(예컨대, 상기 단계 2)에서) 페치된 데이터에 대해, 이전의 스테이지(들)에서(예컨대, 상기 단계 1)에서) 페치되고 디코딩된 명령어에 의해 식별된 특정의 동작을 수행한다. 구동되는 데이터는 통상적으로 (범용) 레지스터 저장 공간(102)으로부터 페치된다. 동작의 완료 시에 생성되는 새로운 데이터는 또한 통상적으로(예컨대, 상기 스테이지 4)에서) 레지스터 저장 공간에 "라이트 백"된다.
실행 스테이지와 연관된 논리 회로는 통상적으로 복수의 "실행 유닛" 또는 "기능 유닛"(103_1 내지 103_N)으로 이루어져 있고, 각각은 그 자신의 고유의 서브셋의 동작들을 수행하도록 설계된다(예컨대, 제1 기능 유닛은 정수 수학 연산을 수행하고, 제2 기능 유닛은 부동 소수점 명령어를 수행하며, 제3 기능 유닛은 캐시/메모리로부터/로의 로드/저장 연산을 수행하는 등이다). 모든 기능 유닛들에 의해 수행되는 모든 동작들의 통합은 처리 코어(100)에 의해 지원되는 "명령어 세트(instruction set)"에 대응한다.
2가지 유형의 프로세서 아키텍처는 컴퓨터 과학의 분야에서 널리 인식되고 있다: "스칼라" 및 "벡터". 스칼라 프로세서는 단일 세트의 데이터에 대한 연산을 수행하는 명령어들을 실행하도록 설계되는 반면, 벡터 프로세서는 다수 세트의 데이터에 대한 연산을 수행하는 명령어들을 실행하도록 설계된다. 도 2a 및 도 2b는 스칼라 프로세서와 벡터 프로세서간의 기본적인 차이를 증명하는 비교 실시예를 나타낸다.
도 2a는 단일의 피연산자 세트 A 및 B가 함께 AND되어 단일의(또는 "스칼라") 결과 C를 생성하는 스칼라 AND 명령어(즉, AB=C)의 예를 나타낸다. 이와 달리, 도 2b는 2개의 피연산자 세트 A/B 및 D/E가, 각각, 함께 병렬로 AND되어 벡터 결과 C, F를 동시에 생성하는 벡터 AND 명령어(즉, A.AND.B=C 및 D.AND.E=F)의 예를 나타낸다. 용어로서, "벡터"는 복수의 "엘리먼트들"을 갖는 데이터 엘리먼트이다. 예를 들어, 벡터 V=Q, R, S, T, U는 5개의 상이한 엘리먼트들: Q, R, S, T 및 U를 갖는다. 예시적인 벡터 V의 "사이즈"는 5이다(왜냐하면 5개의 엘리먼트를 갖기 때문임).
도 1은 또한 범용 레지스터 공간(102)과 상이한 벡터 레지스터 공간(107)의 존재를 나타낸다. 구체적으로, 범용 레지스터 공간(102)은 공칭상 스칼라 값을 저장하는데 사용된다. 그에 따라, 실행 유닛들 중 임의의 것이 스칼라 연산을 수행할 때, 이들은 공칭상 범용 레지스터 저장 공간(102)으로부터 호출되는(그리고 그에 결과를 라이트 백하는) 피연산자를 사용한다. 이와 달리, 실행 유닛들 중 임의의 것이 벡터 연산을 수행할 때, 이들은 공칭상 벡터 레지스터 공간(107)으로부터 호출되는(그리고 그에 결과를 라이트 백하는) 피연산자를 사용한다. 메모리의 상이한 영역이 마찬가지로 스칼라 값 및 벡터 값의 저장을 위해 할당될 수 있다.
또한 기능 유닛(103_1 내지 103_N)으로의 각자의 입력 및 그로부터의 출력에 마스킹 논리(104_1 내지 104_N 및 105_1 내지 105_N)가 존재하는 것에 유의해야 한다. 다양한 구현들에서, 벡터 연산을 위해, -엄격한 요구사항이 아니지만(도 1에 도시되지는 않았지만, 상상컨대, 단지 스칼라를 수행하지만 벡터 연산을 하지 않는 실행 유닛들은 임의의 마스킹 계층을 구비할 필요가 없다), 이들 계층들 중 단 하나만이 실제적으로 수행된다. 마스킹을 이용하는 임의의 벡터 명령어의 경우, 벡터 명령어에 대해 어느 엘리먼트들이 효과적으로 연산되는지를 제어하기 위해 입력 마스킹 논리(104_1 내지 104_N) 및/또는 출력 마스킹 논리(105_1 내지 105_N)가 사용될 수 있다. 여기서, (예컨대, 벡터 레지스터 저장 공간(107)으로부터 판독된 입력 피연산자 벡터와 함께) 마스크 벡터가 마스크 레지스터 공간(106)으로부터 판독되고, 마스킹 논리(104, 105) 계층들 중 적어도 하나에 제공된다.
벡터 프로그램 코드를 실행하는 동안, 각각의 벡터 명령어는 전체 데이터 워드를 요구할 필요가 없다. 예를 들어, 일부 명령어에 대한 입력 벡터는 단지 8개의 엘리먼트일 수 있고, 다른 명령어에 대한 입력 벡터는 16개의 엘리먼트일 수 있으며, 다른 명령어에 대한 입력 벡터는 32개의 엘리먼트일 수 있는 등이다. 마스킹 계층(104/105)은 따라서 명령어들에 걸쳐 상이한 벡터 사이즈를 실시하기 위해 특정의 명령어에 대해 적용되는 전체 벡터 데이터 워드의 한 세트의 엘리먼트를 식별하는데 사용된다. 통상적으로, 각각의 벡터 명령어에 대해, 특정의 벡터 연산에 대한 올바른 세트의 엘리먼트들을 "인에이블"시키기 위해, 마스크 레지스터 공간(106)에 유지되는 특정의 마스크 패턴이 명령어에 의해 호출되고, 마스크 레지스터 공간으로부터 페치되며, 마스크 계층들(104/105) 중 어느 하나 또는 둘 다에 제공된다.
도 3a는 "적분 이미지" 계산을 나타낸다. 적분 이미지 계산은 (예를 들어, 모서리 좌표들(0,0) 및(x', y')을 갖는 직사각형 영역에 의해 정의된 바와 같은)이미지 표면적(301)위의 모든 화소값들을 합산한다. 이미지 표면적(301) 위의 화소값들의 합산은, 화소 값들이 표면적에 걸쳐서 통합되는 이산 함수에 대응하는 이산 적분의 계산에 기본적으로 대응한다.
한가지 기술은 제2 차원을 따르는 각각의 이산 위치에 대해 면적(301)의 제1 차원을 따르는 모든 값들을 합산하는 것이다. 예를 들어, 도 3a에서 관찰되는 바와 같이, 표면적(301)내의 x축을 따르는 모든 화소값들은 표면적(301) 내의 y축상의 특정 위치에 대해 합산된다(302). 표면적(301) 내의 각각의 y축 위치에 대한 이러한 연산을 수행함으로써, 각각의 y축 위치에 대한 합산값을 구한다. 다음으로, 이들 합산값을 합산하여(기본적으로 제2(y)축에 걸쳐서) 전체 표면적(301)에 대한 최종 합산값을 생성한다.
문제는 -특히 화소값들이 중첩된 다수의 표면적이 계산될 경우- 적분 이미지가 결정되는 효율성이다. 현재 벡터 수열(vector sequence)에 상반되는 스칼라가 활용되고 있다. 도 3b는 상이한 표면적 폭들에 대한 합산들을 계산하기 위해 이용되는 스칼라 명령어 실행 수열의 일례를 나타낸다. 예를 들어, 최종값(311)은 2개의 표면적 폭에 대응하는 한편, 최종값(312)은 4개의 표면적 폭에 대응한다. 여기서, ADD 연산의 엄격한 직렬 및 스칼라 본질은 단지 4개의 상이한 폭들에 대한 합산들의 계산에 3개의 머신 사이클들이 필요하게 한다. 다른 방식으로 말하자면, 도 3b에서 관찰되는 바와 같이, 폭 합산의 다음 진전은 더 작은 폭(들)에 대한 이전 가산(들)을 기다릴 필요가 있다.
이미지 적분의 계산과 관련된 비효율성을 다루기 위해서, 대안적인 접근법은 실제 계산을 "근사(approximate)"하는 알고리즘들을 이용하는 프로그램 코드 수열을 이용했다. 근사치들은 정확도를 원할 경우에는 불충분할 수 있다.
본 발명은 일례로서 도시된 것이고, 유사한 참조번호는 유사한 구성요소를 지칭하는 첨부된 도면들의 도면들에 한정되지 않는다.
도 1은 명령어 실행 파이프라인을 나타낸다.
도 2a 및 2b는 벡터 프로세싱에 관한 것이다.
도 3a 및 도 3b는 적분 이미지 계산에 관한 것이다.
도 4는 적분 이미지 계산을 위한 2개의 명령어의 연산을 나타낸다.
도 5a는 도 4의 명령어들을 구현하기 위한 기능 유닛 로직 설계를 나타낸다.
도 5b는 도 4의 명령어들에 대한 흐름도를 나타낸다.
도 5c는 2개의 상이한 명령어에 대한 각각의 흐름도를 나타낸다.
도 6a는 본 발명의 실시예들에 따른 일반적인 벡터 친화적 명령어 포맷 및 그의 클래스 A 명령어 템플릿들을 나타낸 블록도이다.
도 6b는 본 발명의 실시예들에 따른 일반적인 벡터 친화적 명령어 포맷 및 그의 클래스 B 명령어 템플릿들을 나타낸 블록도이다.
도 7a 내지 도 7c는 본 발명의 실시예들에 따른 예시적인 특정의 벡터 친화적 명령어 포맷을 나타낸 블록도이다.
도 8은 본 발명의 일 실시예에 따른 레지스터 아키텍처의 블록도이다.
도 9a는 본 발명의 실시예들에 따른, 온-다이 상호접속 네트워크로의 그 접속 및 레벨 2(L2) 캐시의 그 로컬 서브셋과 함께, 단일 CPU 코어의 블록도이다.
도 9b는 본 발명의 실시예들에 따른, 도 9a에서의 CPU 코어의 일부의 분해도이다.
도 10은 본 발명의 실시예들에 따른 예시적인 비순차적 아키텍처를 나타낸 블록도이다.
도 11은 본 발명의 일 실시예에 따른 시스템의 블록도이다.
도 12는 본 발명의 일 실시예에 따른 제2 시스템의 블록도이다.
도 13은 본 발명의 일 실시예에 따른 제3 시스템의 블록도이다.
도 14는 본 발명의 일 실시예에 따른 SoC의 블록도이다.
도 15는 본 발명의 실시예들에 따른 통합 메모리 컨트롤러 및 그래픽들을 갖는 싱글 코어 프로세서 및 멀티코어 프로세서의 블록도이다.
도 16은 본 발명의 실시예들에 따라 소스 명령어 세트 내의 이진 명령어들을 타겟 명령어 세트 내의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다.
도 1은 명령어 실행 파이프라인을 나타낸다.
도 2a 및 2b는 벡터 프로세싱에 관한 것이다.
도 3a 및 도 3b는 적분 이미지 계산에 관한 것이다.
도 4는 적분 이미지 계산을 위한 2개의 명령어의 연산을 나타낸다.
도 5a는 도 4의 명령어들을 구현하기 위한 기능 유닛 로직 설계를 나타낸다.
도 5b는 도 4의 명령어들에 대한 흐름도를 나타낸다.
도 5c는 2개의 상이한 명령어에 대한 각각의 흐름도를 나타낸다.
도 6a는 본 발명의 실시예들에 따른 일반적인 벡터 친화적 명령어 포맷 및 그의 클래스 A 명령어 템플릿들을 나타낸 블록도이다.
도 6b는 본 발명의 실시예들에 따른 일반적인 벡터 친화적 명령어 포맷 및 그의 클래스 B 명령어 템플릿들을 나타낸 블록도이다.
도 7a 내지 도 7c는 본 발명의 실시예들에 따른 예시적인 특정의 벡터 친화적 명령어 포맷을 나타낸 블록도이다.
도 8은 본 발명의 일 실시예에 따른 레지스터 아키텍처의 블록도이다.
도 9a는 본 발명의 실시예들에 따른, 온-다이 상호접속 네트워크로의 그 접속 및 레벨 2(L2) 캐시의 그 로컬 서브셋과 함께, 단일 CPU 코어의 블록도이다.
도 9b는 본 발명의 실시예들에 따른, 도 9a에서의 CPU 코어의 일부의 분해도이다.
도 10은 본 발명의 실시예들에 따른 예시적인 비순차적 아키텍처를 나타낸 블록도이다.
도 11은 본 발명의 일 실시예에 따른 시스템의 블록도이다.
도 12는 본 발명의 일 실시예에 따른 제2 시스템의 블록도이다.
도 13은 본 발명의 일 실시예에 따른 제3 시스템의 블록도이다.
도 14는 본 발명의 일 실시예에 따른 SoC의 블록도이다.
도 15는 본 발명의 실시예들에 따른 통합 메모리 컨트롤러 및 그래픽들을 갖는 싱글 코어 프로세서 및 멀티코어 프로세서의 블록도이다.
도 16은 본 발명의 실시예들에 따라 소스 명령어 세트 내의 이진 명령어들을 타겟 명령어 세트 내의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다.
도 4는 엄격한 직렬, 스칼라 ADD 명령들에 좌우되는 비효율성을 향상시키기 위해 벡터 접근법을 이용하는 2개의 새로운 명령어(401, 402)에 대한 프로그램 흐름을 나타낸다. 도 4에서 관찰되는 바와 같이, 명령어들(401, 402) 양측 모두는 특정 입력 벡터 엘리먼트들에 대해서는 병렬 ADD 연산을 행하고 특정 입력 벡터 엘리먼트들은 패스한다. 어느 벡터 엘리먼트들이 가산되고 어느 벡터 엘리먼트들이 패스되는지에 대한 조합은 2개의 명령어들 사이에서와 같이 상이하다.
보다 구체적으로, 제1 명령어(401)는 모든 다른 엘리먼트를 그의 가장 오른쪽에 인접한 것에 가산하고, 그러한 가장 오른쪽에 인접한 것은 패스시킨다. 입력 벡터(409)의 엘리먼트들(410, 411)을 그들의 각각의 가장 오른쪽에 인접한 것(412, 413)에 가산하여 최종 엘리먼트들(414, 415)을 생성하고 가장 오른쪽에 인접한 것(412, 413)은 또한 최종값(416)으로 패스되어 패스된 항들(terms)(412, 413)이 인터리브(interleave)되는 합산 항들(414, 415)을 갖는 최종값을 생성한다. 대조적으로, 제2 명령어(402)는 입력 벡터(416) 엘리먼트들의 오른쪽(순서가 최하위인) 세트(417)로부터 입력 벡터 엘리먼트들의 왼쪽(순서가 최상위인) 세트(419)의 각각의 엘리먼트로 동일(순서가 최상위인) 입력 엘리먼트(414)를 가산하고, 입력 엘리먼트들의 오른쪽 세트(417)을 패스시킨다.
이와 같이, 도 4에서 관찰되는 바와 같이, 제2 명령어(402)의 최종값치(420)은 그의 좌변(421)에 합산 항들을 포함하지만 그 우변(422)의 항들은 패스시킨다. 제2 명령어(402)가 제1 명령어(401)의 최종값에 대해 연산하는, 2개의 명령어의 최종값(420)은 이미지 사이즈가 오른쪽에서 왼쪽으로 증가하여 (상술한 특정 실시예에 대해) 지향되는 상이한 폭 이미지 면적에 대한 합산(예를 들어, x축과 같은 동일한 축을 따라)을 생성한다. 이들 또는 통상의 기술은 왼쪽 대 오른쪽 지향(orientation)은 설계자 선택의 문제이며 대안적인 실시예들에서 바로 뒤집을 수 있다는 것을 알 수 있을 것이다.
따라서, 도 3b의 명령어 수열을 도 4의 명령어 수열과 비교하면, 하나의 전체 머신 사이클이 계산으로부터 제거된다는 것에 주목해야 한다.
도 5a는 도 4에 대해 상술한 명령어들 양측 모두를 구현할 수 있는 기능 유닛에 대한 로직 설계를 나타낸다. 도 5a에서 관찰된 바와 같이, 입력 벡터(501)의 엘리먼트들은 가산기 멀티플렉서 뱅크(502) 및 통과 멀티플렉서 뱅크(503)에 라우팅된다. 가산기 멀티플렉서 뱅크(502)의 출력 노드들은 가산기 뱅크(504)의 입력 노드들에 전달된다. 통과 멀티플렉서 뱅크(503)의 제어 입력들은 최종 벡터(505)에 대한 대응 엘리먼트가 입력 벡터(501)로부터의 통과 항 또는 가산기 뱅크(504)로부터의 가산기 항이 될 것인지를 결정한다. 가산기 멀티플렉서 뱅크(502)의 제어 입력들은 입력 벡터 엘리먼드들이 특정의 출력 벡터(505) 엘리먼트 위치에 대해 가산되는지를 결정한다.
가산기 뱅크(504)의 가산기들은 이들에 제공된 입력 항들을 가산하고 대응하는 합산 항들을 통과 멀티플렉서 뱅크(503)에 전달한다. 여기서, 예를 들어, ROM(506)에 저장된 마이크로코드는 수행될 특정의 명령어에 대한 적당한 제어 입력들을 다양한 멀티플렉서들에 제공할 수 있다. 2개의 명령어는 상이한 오피코드로 특정될 수 있거나, 어느 특정 명령어가 수행될 것인지를 지시하는 상이한 즉치 피연산자들을 갖는 동일한 오피코드로 특정될 수 있다. 마이크로코드가 사용되지 않는 경우, 적절한 제어 신호들은 예를 들어, 오피코드/즉치 피연산자를 적절한 멀티플렉서 제어 입력값들로 디코딩하는 하드와이어된 디코더 회로를 생성할 수 있다. 입력 벡터 블록(501)과 출력 벡터 블록(505)은 명령어 실행 파이프라인과 연관된(예를 들어, 이에 결합된) 벡터 레지스터들, 또는 명령어 실행 파이프라인내의 특정 레지스터들의 레지스터 공간에 대응될 수 있다는 것에 유의해야 한다.
보다 일반적으로, 가산기 및 통과 멀티플렉서 뱅크들은 가산기 선택 회로 및 통과 선택 회로에 대해, 각각 실시예의 한가지 유형으로서 보여질 수 있다는 것에 유의해야 한다.
도 5a에서 관찰되는 특정의 배선 루트들은, 예시의 용이성을 위해, 도 4에서 관찰되는 특정 연산과 "정렬(lined up)"되어 있다. 다시, 이들 또는 통상의 기술은 결과들을 상이하게 지향(orient) 및/또는 패턴화할 수 있을 것이며, 및/또는 내부 연산들을 상이하게 지향 및/또는 패턴화할 수 있을 것이다. 도 5b는 임의의 가산기로, 임의의 2개의 입력 벡터 엘리먼트들을 가산하고, 임의의 입력 벡터 엘리먼트를 패스할 수 있는 보다 일반적인 기능 유닛 설계를 나타낸다.
도 5c는 2개의 상이한 명령어에 대한 각각의 흐름도들(550, 560)을 나타낸다. 제1 명령어(550)의 경우, 가산용으로 선택된 입력 벡터 엘리먼트들과 패스용으로 선택된 입력 벡터 엘리먼트들은 대안적인 방식(551)에서 선택된다. 가산용으로 선택된 입력 벡터 엘리먼드들은 패스(552)용으로 또한 선택되었던 인접하는 벡터 엘리먼트에 가산된다. 최종값은 대안적인 방식에서 패스된 항들이 인터리브된 가산치로부터 합산 항들로서 제공된다. 제2 명령어(560)의 경우, 입력 벡터의 제1 변으로부터의 입력 엘리먼트는 입력 벡터(561)의 나머지 변들 상의 (예를 들어, 모든) 입력 엘리먼트들에 가산하기 위해 선택된다. 제1 변의 엘리먼트들은 최종값(562)으로 통과되고 나머지 변의 항들을 포함하는 가산으로부터의 합산 항들은 최종값(563)으로 전달된다.
상술한 명령어 수열들은 명령어들을 실행하는 명령어 실행 파이프라인을 갖는 컴퓨터에 의해 실행하기 위한 프로그램 코드로서 기계 판독가능 매체상에서 구현될 수 있다는 것에 유의해야 한다. 프로그램 코드의 명령어 수열은 예를 들어, 상위 레벨 프로그램 흐름 설명으로부터 목적 코드(object code)를 생성하도록 설계된 컴파일러에 의해 생성될 수 있다.
일반적 벡터 친화적 명령어 포맷
전술된 명령어(들)의 실시예들는 후술되는 "일반적 벡터 친화적 명령어 포맷"으로 구현될 수 있다. 다른 실시예들에서, 이러한 포맷은 이용되지 않고 다른 명령어 포맷이 이용되지만, 기입마스크 레지스터, 다양한 데이터 변환(스위즐, 브로드캐스트 등), 어드레싱 등에 관한 이하의 설명은 상기 명령어(들)의 실시예들의 설명에 일반적으로 적용가능하다. 또한, 예시적인 시스템들, 아키텍처들, 및 파이프라인들이 이하 상세히 설명된다. 상술한 명령어(들)의 실시예들은 이러한 시스템, 아키텍처, 및 파이프라인에서 실행될 수 있지만, 상술한 것들에 제한되는 것은 아니다.
벡터 친화적 명령어 포맷은 벡터 명령어들에 대해 적절한 명령어 포맷이다(예를 들어, 벡터 연산들에 특정한 특정 필드들이 존재한다). 벡터 및 스칼라 연산들 양자 모두가 벡터 친화적 명령어 포맷을 통해 지원되는 실시예들이 설명되지만, 대안적인 실시예들은 벡터 친화적 명령어 포맷을 통한 벡터 연산들만을 이용한다.
예시적인 일반적 벡터 친화적 명령어 포맷 - 도 6a 및 도 6b
도 6a 및 도 6b는 본 발명의 실시예들에 따라, 일반적 벡터 친화적 명령어 포맷 및 그 명령어 템플릿들을 도시하는 블록도들이다. 도 6a는 본 발명의 실시예들에 따른 일반적 벡터 친화적 명령어 포맷 및 이것의 클래스 A 명령어 템플릿들을 도시하는 블록도인 한편; 도 6b는 본 발명의 실시예들에 따른 일반적 벡터 친화적 명령어 포맷 및 이것의 클래스 B 명령어 템플릿들을 도시하는 블록도이다. 구체적으로는, 클래스 A 및 클래스 B 명령어 템플릿들이 그에 대해 정의되는 일반적 벡터 친화적 명령어 포맷(600)이 있는데, 이들 둘 모두는 메모리 액세스 없음(605) 명령어 템플릿들 및 메모리 액세스(620) 명령어 템플릿들을 포함한다. 벡터 친화적 명령어 포맷의 문맥에서 일반적이라는 용어는 임의의 특정 명령어 세트에 얽매이지 않는 명령어 포맷을 말한다. 벡터 친화적 명령어 포맷의 명령어가 레지스터로부터 소싱되는(메모리 액세스 없음(605) 명령어 템플릿들) 벡터 또는 레지스터/메모리로부터 소싱되는(메모리 액세스(620) 명령어 템플릿들) 벡터에 대해 동작하는 실시예가 설명될 것이지만, 본 발명의 대안적 실시예들은 이들 중 하나만을 지원할 수도 있다. 또한, 벡터 명령어 포맷으로 된 로드(load) 명령어 및 저장(store) 명령어가 있는 본 발명의 실시예가 기술될 것이지만, 대안적 실시예는, 그 대신에 또는 그에 부가하여, 벡터를 레지스터 내로 및 레지스터 밖으로(예컨대, 메모리로부터 레지스터로, 레지스터로부터 메모리로, 레지스터들 사이에서) 이동시키는 상이한 명령어 포맷으로 된 명령어를 갖는다. 게다가, 2가지 클래스의 명령어 템플릿들을 지원하는 본 발명의 실시예가 기술될 것이지만, 대안적 실시예는 이들 또는 3개 이상 중 하나만을 지원할 수 있다.
벡터 친화적 명령어 포맷이, 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 바이트 벡터 피연산자들)을 지원할 수 있다.
도 6a의 클래스 A 명령어 템플릿들은 다음을 포함한다: 1) 메모리 액세스 없음(605) 명령어 템플릿들 내에 메모리 액세스 없음, 풀 라운드 제어형 연산(610) 명령어 템플릿 및 메모리 액세스 없음, 데이터 변환형 연산(615) 명령어 템플릿이 보여지고; 및 2) 메모리 액세스(620) 명령어 템플릿들 내에 메모리 액세스, 일시적(625) 명령어 템플릿 및 메모리 액세스, 비일시적(630) 명령어 템플릿이 도시된다. 도 6b의 클래스 B 명령어 템플릿들은 다음을 포함한다: 1) 메모리 액세스 없음(605) 명령어 템플릿들 내에 메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어형 연산(612) 명령어 템플릿 및 메모리 액세스 없음, 기입 마스크 제어, vsize형 연산(617) 명령어 템플릿이 보여지고; 및 2) 메모리 액세스(620) 명령어 템플릿들 내에 메모리 액세스, 기입 마스크 제어(627) 명령어 템플릿이 도시된다.
포맷
일반적 벡터 친화적 명령어 포맷(600)은 도 6a 및 도 6b에 나타낸 순서로 하기에서 열거되는 하기 필드들을 포함한다. 상술한 논의에 연계하여, 본 실시예에서, 도 6a 및 도 6b와 도 7a 내지 도 7c에서 이하에 제공된 포맷 상세를 참조하면, 메모리 액세스 없음 명령어 유형(605) 또는 메모리 액세스 명령어 유형(620) 중 어느 하나가 활용될 수 있다. 입력 벡터 피연산자 및 목적지(destination)에 대한 어드레스는 후술되는 레지스터 어드레스 필드(644)에서 식별될 수 있다.
포맷 필드(640) - 이 필드 내의 특정한 값(명령어 포맷 식별자 값)은 벡터 친화적 명령어 포맷, 및 그에 따라 명령어 스트림들에서의 벡터 친화적 명령어 포맷으로의 명령어들의 출현들을 고유하게 식별한다. 따라서, 포맷 필드(640)의 내용은 제1 명령어 포맷의 명령어의 출현을 다른 명령어 포맷의 명령어의 출현과 구분함으로써, 다른 명령어 포맷을 갖는 명령어 세트 내로의 벡터 친화적 명령어 포맷의 도입을 허용한다. 이와 같이, 이 필드는 오직 일반적 벡터 친화적 명령어 포맷을 갖는 명령어 세트에 대해 필요하지 않다는 점에서 선택적이다.
베이스 연산 필드(642) -이것의 내용은 상이한 베이스 연산들을 구별해 준다. 본 명세서에서 후술되는 바와 같이, 베이스 연산 필드(642)는 오피코드 필드를 포함할 수 있고 및/또는 그 일부일 수 있다.
레지스터 인덱스 필드(644) -이것의 내용은, 직접적으로 또는 어드레스 발생을 통해, 이들이 레지스터들에 있든지 메모리에 있든지, 소스 및 목적지 피연산자들의 위치들을 특정한다. 이들은 PxQ(예를 들어, 32x1012) 레지스터 파일로부터 N개의 레지스터들을 선택하기에 충분한 수의 비트들을 포함한다. 일 실시예에서, N은 최대 3개의 소스들 및 1개의 목적지 레지스터일 수 있고, 대안적인 실시예들은 더 많거나 더 적은 소스들 및 목적지 레지스터들을 지원할 수 있다(예를 들어, 소스들 중 하나가 목적지로도 작용하는 최대 2개의 소스를 지원할 수 있고, 소스들 중 하나가 목적지로도 작용하는 최대 3개의 소스를 지원할 수 있고, 최대 2개의 소스 및 1개의 목적지를 지원할 수 있다). 일 실시예에서 P=32인 한편, 대안적인 실시예들은 더 많거나 더 적은 레지스터들(예를 들어, 16)을 지원할 수 있다. 일 실시예에서 Q=1012 비트인 한편, 대안적인 실시예들은 더 많거나 더 적은 비트(예를 들어, 128, 1024)를 지원할 수 있다.
변경자(modifier) 필드(646) -이것의 내용은 메모리 액세스를 특정하는 일반적 벡터 명령어 포맷으로 된 명령어들의 출현들을 그렇지 않은 것들과 구별해 준다; 즉, 메모리 액세스 없음(605) 명령어 템플릿과 메모리 액세스(620) 명령어 템플릿들 간에서 구별해 준다. 메모리 액세스 연산들은 메모리 계층 구조에 대해 판독 및/또는 기입하고(일부 경우에 레지스터들 내의 값들을 이용하여 소스 및/또는 목적지 어드레스들을 특정함) 한편, 메모리 액세스 없음 연산들은 하지 않는다(예를 들어, 소스 및 목적지들은 레지스터들이다). 일 실시예에서, 이 필드는 또한 메모리 어드레스 계산들을 수행하는 3개의 상이한 방식들 사이에서 선택하지만, 대안적인 실시예들은 메모리 어드레스 계산들을 수행하는 더 많거나, 더 적거나, 상이한 방식을 지원할 수 있다.
증강 연산 필드(augmentation operation field)(650) - 이것의 내용은 다양한 상이한 연산들 중 어느 것이 베이스 연산에 부가하여 실행되어야 하는지를 구별해 준다. 이 필드는 문맥 특정(context specific)이다. 본 발명의 일 실시예에서, 이 필드는 클래스 필드(668), 알파(alpha) 필드(652), 및 베타(beta) 필드(654)로 나누어진다. 증강 연산 필드는 연산들의 공통 그룹들이 2, 3, 또는 4개의 명령어가 아니라 단일 명령어로 실행되는 것을 허용한다. 아래에는, 필요한 명령어의 개수를 줄이기 위해 증강 필드(650)를 이용하는 명령어들(그 명명법은 이후에 더 상세히 설명된다)의 몇 가지 예가 있다.
여기서, [rax]는 어드레스 생성에 이용되는 베이스 포인터(base pointer)이고, {}는 (이후에 더 상세히 설명되는) 데이터 조작 필드에 의해 특정된 변환 연산을 나타낸다.
스케일 필드(660) - 이것의 내용은 메모리 어드레스 발생을 위한(예를 들어, 2scale*인덱스+베이스를 이용하는 어드레스 발생을 위한) 인덱스 필드의 내용의 스케일링(scaling)을 고려한다.
변위 필드(662A) - 이것의 내용은 (예를 들어, 2scale*인덱스+베이스+변위를 이용하는 어드레스 발생을 위한) 메모리 어드레스 생성의 일부로서 이용된다.
변위 인자 필드(Displacement Factor Field)(662B)(변위 인자 필드(662B) 바로 위의 변위 필드(662A)의 병치(juxtaposition)는 어느 하나 또는 다른 것이 이용되는 것을 표시한다는 것에 유의하라) - 이것의 내용은 어드레스 발생의 일부로서 이용되고; 이것은 메모리 액세스의 사이즈(N)에 의해 스케일링될 변위 인자를 특정하며, 여기서 N은 (예를 들어, 2scale*인덱스+베이스+스케일링된 변위를 이용하는 어드레스 발생을 위한) 메모리 액세스에서의 바이트들의 수이다. 잉여 하위 비트들(redundant low-order bits)은 무시되고, 따라서, 변위 인자 필드의 내용은 유효 어드레스를 계산하는 데 이용될 최종 변위를 생성하기 위하여 메모리 피연산자 총 사이즈(N)로 곱해진다. N의 값은 풀 오피코드 필드(674)(이하 후술됨) 및 데이터 조작 필드(654C)에 기초하여 실시 시간에 프로세서 하드웨어에 의해 결정된다. 변위 필드(662A) 및 변위 인자 필드(662B)는 이들이 메모리 액세스 없음(605) 명령어 템플릿들에 대해 사용되지 않고/또는 상이한 실시예들이 둘 중 하나만을 구현하거나 어느 것도 구현하지 않는다는 점에서 선택 사항이다.
데이터 엘리먼트 폭 필드(664) - 이것의 내용은 (일부 실시예들에서 모든 명령어들에 대해; 다른 실시예들에서, 명령어들 중 일부에 대해서만) 복수의 데이터 엘리먼트 폭 중 어느 것이 사용될 것인지를 구별해 준다. 이 필드는 오직 하나의 데이터 엘리먼트 폭이 지원되고/또는 데이터 엘리먼트 폭들이 오피코드들의 일부 양상을 이용하여 지원되는 경우에 필요하지 않다는 점에서 선택적이다.
기입 마스크 필드(670) -이것의 내용은 데이터 엘리먼트 위치당 기준으로, 목적지 벡터 피연산자에서의 해당 데이터 엘리먼트 위치가 베이스 연산 및 증강 연산의 결과를 반영하는지를 제어한다. 클래스 A 명령어 템플릿들은 통합-기입마스킹(merging-writemasking)을 지원하는 한편, 클래스 B 명령어 템플릿들은 통합- 및 제로화-기입마스킹 양자 모두를 지원한다. 통합할 때, 벡터 마스크들은 목적지 내의 임의의 세트의 엘리먼트들이(베이스 연산 및 증대 연산에 의해 특정된) 임의의 연산의 실행 중에 업데이트들로부터 보호될 수 있게 하고; 다른 일 실시예에서, 대응하는 마스크 비트가 0을 갖는 목적지의 각 엘리먼트의 이전의 값을 보존할 수 있게 한다. 대조적으로, 제로화할 때, 벡터 마스크들은 목적지 내의 임의의 세트의 엘리먼트들이(베이스 연산 및 증대 연산에 의해 특정된) 임의의 연산의 실행 중에 제로화될 수 있게 하고; 일 실시예에서, 목적지의 엘리먼트는 대응하는 마스크 비트가 0 값을 가질 때 0으로 설정된다. 이러한 기능성의 서브세트는 수행되는 연산의 벡터 길이를 제어하는 능력이지만(즉, 엘리먼트들의 스팬(span)은 제1 것에서 마지막 것까지 수정된다); 수정되는 엘리먼트들이 연속적인 것은 필요하지 않다. 따라서, 기입 마스크 필드(670)는 부분적 벡터 연산이, 로드, 저장, 산술, 로직 등을 포함하는 것을 허용한다. 또한, 이 마스킹은 폴트 억압(fault suppression)에 대해 사용될 수 있다(즉, 폴트를 야기할지도 모르는/폴트를 야기할 임의의 연산의 결과의 수신을 방지하기 위해 목적지의 데이터 엘리먼트 위치를 마스킹하는 것에 의해 - 예컨대, 메모리에 있는 벡터가 페이지 경계에 걸쳐 있다는 것 및 제2 페이지가 아니라 제1 페이지가 페이지 폴트(page fault)를 야기할 것이고, 제1 페이지 상에 있는 벡터의 모든 데이터 엘리먼트가 기입 마스크에 의해 마스킹되는 경우, 페이지 폴트가 무시될 수 있다는 것을 가정함). 게다가, 기입 마스크는 특정 유형의 조건문(conditional statement)을 포함하는 "벡터화 루프(vectorizing loops)"를 가능하게 해준다. 기입 마스크 필드(670)의 내용이 이용될 기입 마스크를 포함하는 복수의 기입 마스크 레지스터 중 하나를 선택하는(및 그러므로 기입 마스크 필드(670)의 내용이 실행될 해당 마스킹을 간접적으로 식별하는) 본 발명의 실시예들이 기술되었지만, 대안 실시예들은 그 대신에 또는 추가적으로 마스크 기입 필드(670)의 내용이 실행될 마스킹을 직접적으로 특정하는 것을 허용한다. 또한, 1) 레지스터 리네이밍 파이프라인 스테이지 동안, 목적지가 더 이상 암시적 소스(implicit source)가 아니기 때문에, 목적지 피연산자가 또한 소스가 아닌 명령어[비삼항 명령어(non-ternary instruction)라고도 함]에 대해 레지스터 리네이밍(register renaming)이 사용될 때 [연산의 결과가 아닌 임의의 데이터 엘리먼트(임의의 마스킹된 데이터 엘리먼트)가 제로화될 것이기 때문에, 현재의 목적지 레지스터로부터의 어떤 데이터 엘리먼트도 리네이밍된 목적지 레지스터로 복사될 필요가 없거나 연산과 함께 어떻게든 전달될 필요가 없음]; 및 2) 제로가 기입되기 때문에 라이트 백(write back) 스테이지 동안 제로화는 성능 향상을 가능하게 해준다.
즉치 필드(672) -이것의 내용은 즉치의 특정을 허용한다. 이 필드는 즉치를 지원하지 않는 일반적 벡터 친화적 포맷의 구현에 존재하지 않고, 즉치를 사용하지 않는 명령어들에 존재하지 않는다는 점에서 선택적이다.
명령어 템플릿 클래스 선택
클래스 필드(668) -이것의 내용은 상이한 명령어들의 클래스 간에서 구별해 준다. 도 2a 및 도 2b를 참조하면, 이 필드의 내용은 클래스 A 및 클래스 B 명령어 중에서 선택을 한다. 도 6a 및 도 6b에서, 모서리가 둥근 정사각형들은 구체적인 값이 필드에 존재한다는 것을 나타내는 데 사용된다(예를 들어, 도 6a 및 도 6b에서 각각 클래스 필드(668)에 대해 클래스 A(668A)와 클래스 B(668B)).
클래스 A의 메모리 액세스 없음 명령어 템플릿들
클래스 A의 메모리 액세스 없음(605) 명령어 템플릿들의 경우에, 알파 필드(652)는 RS 필드(652A)로서 해석되고, 이것의 내용은 상이한 증강 연산 유형들 중 어느 것이 실행되어야 하는지를 구별해주는 한편[예컨대, 라운드(652A.1) 및 데이터 변환(652A.2)은 제각기 메모리 액세스 없음, 라운드 유형 연산(610) 및 메모리 액세스 없음, 데이터 변환형 연산(615) 명령어 템플릿들에 대해 특정됨], 베타 필드(654)는 특정된 유형의 연산들 중 어느 것이 실행되어야 하는지를 구별해 준다. 도 6에서, 모서리가 둥근 블록은 특정의 값이 존재한다는 것을 나타내는 데 사용된다[예컨대, 번경자 필드(646) 내의 메모리 액세스 없음(646A); 알파 필드(652)/rs 필드(652A)에 대한 라운드(652A.1) 및 데이터 변환(652A.2)]. 메모리 액세스 없음(605) 명령어 템플릿들에서, 스케일 필드(660), 변위 필드(662A), 및 변위 스케일 필드(662B)는 존재하지 않는다.
메모리 액세스 없음 명령어 템플릿들 - 풀 라운드 제어형 연산
메모리 액세스 없음 풀 라운드 제어형 연산(610) 명령어 템플릿에서, 베타 필드(654)는 라운드 제어 필드(654A)로서 해석되고, 이것의 내용(들)은 정적 라운딩(static rounding)을 제공한다. 본 발명의 기술된 실시예들에서, 라운드 제어 필드(654A)는 모든 부동 소수점 예외 억제(SAE: suppress all floating point exceptions) 필드(656) 및 라운드 연산 제어 필드(658)를 포함하지만, 대안적 실시예들은 이들 개념들 모두를 동일한 필드로 지원하거나 인코딩할 수 있고 또는 이들 개념들/필드들 중 어느 하나 또는 다른 것만을 가질 수 있다(예를 들어, 라운드 연산 제어 필드(658)만을 가질 수 있다).
SAE 필드(656) -이것의 내용은 예외 이벤트 보고를 디스에이블링할 것인지의 여부를 구별하고; SAE 필드(656)의 내용이 억제가 인에이블링된 것을 표시할 때, 주어진 명령어는 임의의 종류의 부동 소수점 예외 플래그도 보고하지 않고, 임의의 부동 소수점 예외 핸들러도 일으키지 않는다.
라운드 연산 제어 필드(658) -이것의 내용은 한 그룹의 라운드 연산들 중 어느 것을 실행할지를 구별해 준다(예컨대, 라운드 업(Round-up), 라운드 다운(Round-down), 제로를 향한 라운드(Round-towards-zero) 및 최근접한 것에게의 라운드(Round-to-nearest)). 따라서, 라운드 연산 제어 필드(658)는 명령어당 기준으로 라운딩 모드의 변경을 가능하게 해주고 따라서 이것이 필요할 때 특히 유용하다. 프로세서가 라운딩 모드들을 특정하기 위한 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 라운드 연산 제어 필드(650)의 내용은 해당 레지스터 값을 오버라이딩한다(이러한 제어 레지스터 상에서 저장-변경-복구를 수행해야만 하지 않고 라운딩 모드를 선택할 수 있는 것은 유익하다).
메모리 액세스 없음 템플릿들 - 데이터 변환형 연산
메모리 액세스 없음 데이터 변환형 연산(615) 명령어 템플릿에서, 베타 필드(654)는 데이터 변환 필드(654B)로서 해석되고, 이것의 내용은 복수의 데이터 변환 중 어느 것이 실행되어야 하는지를 구별해 준다(예컨대, 데이터 변환 없음, 스위즐링(swizzle), 브로드캐스트).
클래스 A의 메모리 액세스 명령어 템플릿들
클래스 A의 메모리 액세스(620) 명령어 템플릿의 경우에, 알파 필드(652)는 축출 힌트 필드(652B)로서 해석되고, 이것의 내용은 축출 힌트들 중 어느 것이 사용되어야 하는지를 구별해주는 한편[도 6a에서, 일시적(652B.1) 및 비일시적(652B.2)은 제각기 메모리 액세스, 일시적(625) 명령어 템플릿 및 메모리 액세스, 비일시적 (630) 명령어 템플릿에 대해 특정됨], 베타 필드(654)는 데이터 조작 필드(654C)로서 해석되고, 이것의 내용은 다수의 데이터 조작 연산들(또는 프리미티브(primitive)로서 알려짐) 중 어느 것이 실행되어야 하는지를 구별해 준다(예를 들어, 조작 없음; 브로드캐스트; 소스의 상향 변환(up conversion); 및 목적지의 하향 변환(down conversion). 메모리 액세스(620) 명령어 템플릿들은 스케일 필드(660), 및 선택 사항으로 변위 필드(662A) 또는 변위 인자 필드(662B)를 포함한다.
벡터 메모리 명령어들은 메모리로부터 벡터 로드들 및 메모리로의 벡터 저장들을 수행하고, 변환이 지원된다. 정규의 벡터 명령어에서와 같이, 벡터 메모리 명령어는 데이터 엘리먼트 관련한 방식으로 데이터를 메모리로부터/메모리로 전달하고, 실제로 전달되는 엘리먼트는 기입 마스크로서 선택되는 벡터 마스크의 내용에 의해 결정된다. 도 6a에서, 모서리가 둥근 정사각형은 특정의 값이 필드에 존재한다는 것을 나타내는 데 사용된다[예컨대, 변경자 필드(646)에 대한 메모리 액세스(646B); 알파 필드(652)/축출 힌트 필드(652B)에 대한 일시적(652B.1) 및 비일시적(652B.2)].
메모리 액세스 명령어 템플릿들 - 일시적
일시적 데이터는 캐싱으로부터 이득을 얻기에 충분히 빨리 재이용될 가능성이 있는 데이터이다. 그러나, 즉, 힌트 및 상이한 프로세서들은 힌트 전체를 무시하는 것을 포함하는, 상이한 방식들로 그것을 구현할 수 있다.
메모리 액세스 명령어 템플릿들 - 비일시적
비일시적 데이터는 제1 레벨 캐시에서의 캐싱으로부터 이득을 얻기에 충분하도록 곧 재이용될 것 같지 않은 데이터이고, 축출을 위한 우선순위가 주어져야 한다. 그러나, 즉, 힌트 및 상이한 프로세서들은 힌트 전체를 무시하는 것을 포함하는, 상이한 방식들로 그것을 구현할 수 있다.
클래스 B의 명령어 템플릿
클래스 B의 명령어 템플릿들의 경우에, 알파 필드(652)는 기입 마스크 제어(Z) 필드(652C)로서 해석되고, 이것의 내용은 기입 마스크 필드(670)에 의해 제어되는 기입 마스킹이 통합이어야 하는지 제로화되어야 하는지를 구별해 준다.
클래스 B의 메모리 액세스 없음 명령어 템플릿들
클래스 B의 메모리 액세스 없음(605) 명령어 템플릿들의 경우에, 베타 필드(654)의 일부는 RL 필드(657A)로서 해석되고, 이것의 내용은 상이한 증강 연산 유형들 중 어느 것이 실행되어야 하는지를 구별해주는 한편[예컨대, 라운드(657A.1) 및 벡터 길이(VSIZE)(657A.2)는 제각기 메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어형 연산(612) 명령어 템플릿 및 메모리 액세스 없음, 기입 마스크 제어, VSIZE형 연산(617) 명령어 템플릿에 대해 특정됨], 베타 필드(654)의 나머지는 특정된 유형의 연산들 중 어느 것이 실행되어야 하는지를 구별해 준다. 도 6에서, 둥근 코너 블록들은 특정한 값이 존재한다는 것을 나타내는데 이용된다(예를 들어, 변경자 필드(646) 내의 메모리 액세스 없음(646A); RL 필드(657A)에 대한 라운드(657A.1) 및 VSIZE(657A.2)). 메모리 액세스 없음(605) 명령어 템플릿들에서, 스케일 필드(660), 변위 필드(662A), 및 변위 인자 필드(662B)는 존재하지 않는다.
메모리 액세스 없음 명령어 템플릿들 - 기입 마스크 제어, 부분적 라운드 제어형 연산
메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어형 연산(610) 명령어 템플릿에서, 베타 필드(654)의 나머지는 라운드 연산 필드(659A)로서 해석되고, 예외 이벤트 보고가 디스에이블되어 있다(주어진 명령어는 어떤 종류의 부동 소수점 예외 플래그도 보고하지 않고, 어떤 부동 소수점 예외 핸들러도 야기하지 않는다).
라운드 연산 제어 필드(659A)는 -라운드 연산 제어 필드(658)처럼, 이것의 내용은 한 그룹의 라운드 연산들 중 어느 것을 실행할지를 구별해 준다(예컨대, 라운드 업(Round-up), 라운드 다운(Round-down), 제로를 향한 라운드(Round-towards-zero) 및 최근접한 것에게의 라운드(Round-to-nearest)). 따라서, 라운드 연산 제어 필드(659A)는 명령어당 기준으로 라운딩 모드의 변경을 허용하며, 따라서 이것이 필요할 때 특히 유용하다. 프로세서가 라운딩 모드들을 특정하기 위한 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 라운드 연산 제어 필드(650)의 내용은 해당 레지스터 값을 오버라이딩한다(이러한 제어 레지스터 상에서 저장-변경-복구를 수행해야만 하지 않고 라운딩 모드를 선택할 수 있는 것은 유익하다).
메모리 액세스 없음 명령어 템플릿들 - 기입 마스크 제어, VSIZE형 연산
메모리 액세스 없음, 기입 마스크 제어, VSIZE형 연산(617) 명령어 템플릿에서, 베타 필드(654)의 나머지는 벡터 길이 필드(659B)로서 해석되고, 이것의 내용은 복수의 데이터 벡터 길이 중 어느 것이 실행되어야 하는지를 구별해 준다(예컨대, 128, 856, 또는 1012 바이트).
클래스 B의 메모리 액세스 명령어 템플릿들
클래스 A의 메모리 액세스(620) 명령어 템플릿의 경우에, 베타 필드(654)의 일부는 브로드캐스트 필드(657B)로서 해석되고, 이것의 내용은 브로드캐스트 유형 데이터 조작 연산이 실행되어야 하는지의 여부를 구별해 주는 한편, 베타 필드(654)의 나머지는 벡터 길이 필드(659B)로서 해석된다. 메모리 액세스(620) 명령어 템플릿들은 스케일 필드(660), 및 선택 사항으로 변위 필드(662A) 또는 변위 스케일 필드(662B)를 포함한다.
필드들에 관한 부가 설명
일반적 벡터 친화적 명령어 포맷(600)에 대하여, 풀 오피코드 필드(674)는 포맷 필드(640), 베이스 연산 필드(642), 및 데이터 엘리먼트 폭 필드(664)를 포함하는 것으로 나타나 있다. 풀 오피코드 필드(674)가 이들 필드 모두를 포함하는 일 실시예가 나타나 있지만, 풀 오피코드 필드(674)는 이들 필드 전부를 지원하지 않는 실시예들에서 이들 필드 전부보다 적은 것을 포함한다. 풀 오피코드 필드(674)는 연산 코드를 제공한다.
증강 연산 필드(650), 데이터 엘리먼트 폭 필드(664), 및 기입 마스크 필드(670)는 이들의 특징들이 일반적 벡터 친화적 명령어 포맷으로 명령어당 기준으로 특정되도록 허용한다.
기입 마스크 필드와 데이터 엘리먼트 폭 필드의 조합은 그것들이 마스크가 상이한 데이터 엘리먼트 폭들에 기초하여 적용될 수 있게 한다는 점에서 유형 명령어들(typed instructions)을 생성한다.
명령어 포맷은 다른 필드의 내용에 기초하여 상이한 목적에 대해 상이한 필드를 재사용하기 때문에, 비교적 적은 수의 비트를 필요로 한다. 예를 들어, 하나의 관점은 변경자 필드의 내용은 도 6a 및 도 6b의 메모리 액세스 없음(605) 명령어 템플릿들과 도 6a 및 도 6b의 메모리 액세스(6250) 명령어 템플릿들 사이에서 선택하는 한편; 클래스 필드(668)의 내용은 메모리 액세스 없음(605) 명령어 템플릿들내에서 도 6a의 명령어 템플릿들(610/615)과 도 6b의 명령어 템플릿들(612/617) 사이에서 선택하고; 클래스 필드(668)의 내용은 메모리 액세스(620) 명령어 템플릿들내에서 도 6a의 명령어 템플릿들(625/830)과 도 6b의 명령어 템플릿(627) 사이에서 선택한다는 것이다. 다른 관점에서, 클래스 필드(668)의 내용은 각각 도 6a 및 도 6b의 클래스 A와 클래스 B 명령어 템플릿들 사이에서 선택하는 한편; 변경자 필드의 내용은 이들 클래스 A 명령어 템플릿들 내에서 도 6a의 명령어 탬플릿들(605 및 620) 사이에서 선택하는 한편; 변경자 필드의 내용은 이들 클래스 B 명령어 템플릿들 내에서 도 6b의 명령어 템플릿들(605 및 620) 사이에서 선택한다. 클래스 필드의 내용이 클래스 A 명령어 템플릿을 나타내는 경우, 변경자 필드(646)의 내용은(rs 필드(652A)와 EH 필드(652B) 사이에서) 알파 필드(652)의 해석을 선택한다. 유사한 방식으로, 변경자 필드(646) 및 클래스 필드(668)의 내용은 알파 필드가 rs 필드(652A)로서 해석될지, EH 필드(652B)로서 해석될지, 또는 기입 마스크 제어(Z) 필드(652C)로서 해석될지를 선택한다. 클래스 필드 및 수정자 필드가 클래스 A 메모리 액세스 없음 연산을 나타내는 경우, 증강 필드의 베타 필드의 해석은 rs 필드의 내용에 기초하여 변하는 반면; 클래스 필드 및 변경자 필드가 클래스 B 메모리 액세스 없음 연산을 나타내는 경우, 베타 필드의 해석은 RL 필드의 내용에 따라 좌우된다. 클래스 및 변경자 필드가 클래스 A 메모리 액세스 연산을 나타내는 경우, 증강 필드의 베타 필드의 해석은 베이스 연산 필드의 내용에 기초하여 변하는 반면; 클래스 및 변경자 필드가 클래스 B 메모리 액세스 연산을 나타내는 경우, 증강 필드의 베타 필드의 브로드캐스트 필드(657B)의 해석은 베이스 연산 필드의 내용에 기초하여 변한다. 따라서, 베이스 연산 필드, 변경자 필드 및 증강 연산 필드의 조합은 매우 다양한 증강 연산이 지정될 수 있게 해준다.
클래스 A 및 클래스 B 내에서 발견되는 다양한 명령어 템플릿들은 상이한 상황들에서 유익하다. 클래스 A는 성능상의 이유로 제로화-기입마스킹 또는 더 작은 벡터 길이들이 바람직할 때 유용하다. 예를 들어, 제로화는 더 이상 목적지와 인위적으로 병합할 필요가 없기 때문에, 리네이밍이 사용될 때 거짓 의존(fake dependence)을 피하는 것을 가능하게 해주고; 다른 예로서, 벡터 길이 제어는 벡터 마스크로 보다 짧은 벡터 사이즈를 에뮬레이트할 때 저장-로드 전달(store-load forwarding) 문제를 쉽게 해준다. 클래스 B는 다음과 같이 하기에 바람직할 때 유용하다: 1) 동시에 라운딩-모드 제어를 사용하는 동안 부동 소수점 예외들을 허용한다(즉, SAE 필드의 내용들이 아니오를 가리킬 경우); 2) 상향 변환, 스위즐링(swizzling), 스왑(swap) 및/또는 하향 변환을 사용할 수 있다; 3) 그래픽 데이터 유형에 대해 연산한다. 예를 들어, 상향 변환, 스위즐링, 스왑, 하향 변환 및 그래픽 데이터 유형은 상이한 포맷으로 소스들과 함께 작동할 때 요구되는 명령어들의 개수를 감소시키고; 다른 예로서, 예외가 허용되는 능력은 풀 IEEE 컴플라이언스에게 지시된 라운딩 모드들을 제공한다.
예시적인 특정 벡터 친화적 명령어 포맷
도 7a 내지 도 7c는 본 발명의 실시예들에 따른 예시적 특정의 벡터 친화적 명령어 포맷을 나타낸 블록도이다. 도 7a 내지 도 7c는 이것이 필드들의 위치, 사이즈, 해석 및 순서 뿐만이 아니라 이런 필드들 중 일부 값들을 특정한다는 점에서 특정의 벡터 친화적 명령어 포맷(700)을 나타낸다. 특정의 벡터 친화적 명령어 포맷(700)은 x86 명령어 세트를 확장하는 데 사용될 수 있고, 따라서 필드들 중 일부는 기존의 x86 명령어 세트 및 이것의 확장(예컨대, AVX)에서 사용되는 것들과 유사하거나 동일하다. 이 포맷은 확장들을 갖는 기존의 x86 명령어 세트의 프리픽스 인코딩 필드, 실제 오피코드 바이트 필드, MOD R/M 필드, SIB 필드, 변위 필드, 및 즉치 필드들과의 일관성을 유지한다. 도 7a 내지 도 7c로부터의 필드들이 맵핑되는 도 6의 필드들이 나타나 있다.
비록 본 발명의 실시예들이 예시적 목적을 위해 일반적 벡터 친화적 명령어 포맷(600)의 문맥에서 특정의 벡터 친화적 명령어 포맷(700)을 참조하여 기술되어 있지만, 본 발명은 청구되는 경우를 제외하고는, 특정의 벡터 친화적 명령어 포맷(700)에 제한되지 않는다는 것을 알 수 있을 것이다. 예를 들어, 일반적 벡터 친화적 명령어 포맷(600)은 다양한 필드에 대해 다양한 가능한 사이즈를 상정하는 반면, 특정의 벡터 친화적 명령어 포맷(700)은 특정 사이즈들의 필드들을 가지는 것으로 나타나 있다. 특정의 예로서, 데이터 엘리먼트 폭 필드(664)가 특정의 벡터 친화적 명령어 포맷(700)으로 1 비트 필드로서 나타나 있지만, 본 발명은 이것에 제한되지 않는다(즉, 일반적 벡터 친화적 명령어 포맷(600)은 데이터 엘리먼트 폭 필드(664)의 다른 사이즈들을 상정한다).
포맷 - 도 7a 내지 도 7c
일반적 벡터 친화적 명령어 포맷(600)은 도 7a 내지 도 7c에 나타낸 순서로 하기에서 열거되는 하기 필드들을 포함한다.
EVEX 프리픽스(바이트들 0-3)
EVEX 프리픽스(702)는 - 4 바이트 형태로 인코딩된다.
포맷 필드(640)(EVEX 바이트 0, 비트들 [7:0])은 - 제1 바이트(EVEX 바이트 0)는 포맷 필드(640)이고, 이것은 0x62(본 발명의 일 실시예에서 벡터 친화적 명령어 포맷을 구별하는데 사용되는 고유값)를 포함한다.
제2-제4 바이트들(EVEX 바이트들 1-3)은 특정 능력을 제공하는 복수의 비트 필드들을 포함한다.
REX 필드(705)(EVEX 바이트 1, 비트들 [7-5])은 -EVEX.R 비트 필드(EVEX 바이트 1, 비트 [7]-R), EVEX.X 비트 필드(EVEX 바이트 1, 비트 [6]-X), 및 657BEX 바이트 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' 필드(710) -이것은 REX' 필드(710)의 제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을 조합함으로써 형성된다.
오피코드 맵 필드(715)(EVEX 바이트 1, 비트 [3:0]-mmmm) -이것의 내용은 내포된 선두 오피코드 바이트(0F, 0F 38, 또는 0F 3)를 인코딩한다.
데이터 엘리먼트 폭 필드(664)(EVEX 바이트 2, 비트 [7]-W)는 -표기법 EVEX.W로 표시된다. EVEX.W는 데이터형(32-비트 데이터 엘리먼트들 또는 64-비트 데이터 엘리먼트들 중 어느 하나)의 그래뉼래리티(granularity)(사이즈)를 정의하는 데 사용된다.
EVEX.vvvv(720)(EVEX 바이트 2, 비트들 [6:3]-vvvv) -EVEX.vvvv의 역할은 다음을 포함할 수 있다: 1) EVEX.vvvv는 반전된(1의 보수) 형태로 특정된 제1 소스 레지스터 피연산자를 인코딩하고 또한 2개 이상의 소스 피연산자를 갖는 명령어들에 대해 유효하다; 2) EVEX.vvvv는 임의의 벡터 시프트들에 대해 1의 보수 형태로 특정된 목적지 레지스터 피연산자를 인코딩한다; 또는 3) EVEX.vvvv는 어떤 피연산자도 인코딩하지 않으며, 이 필드는 유보되고 1111b를 포함해야 한다. 따라서, EVEX.vvvv 필드(720)는 반전된(1의 보수) 형태로 저장되는 제1 소스 레지스터 특정자의 4개의 하위 비트를 인코딩한다. 명령어에 따라, 여분의 상이한 EVEX 비트 필드는 특정자 사이즈를 32개의 레지스터로 확장하는데 사용된다.
EVEX.U 클래스 필드(668)(EVEX 바이트 2, 비트 [2]-U) - EVEX.U=0인 경우, 이는 클래스 A 또는 EVEX.U0를 나타내고; EVEX.U=1인 경우, 이는 클래스 B 또는 EVEX.U1을 나타낸다.
프리픽스 인코딩 필드(725)(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를 재설계할 수 있고, 따라서 확장을 요구하지 않는다.
알파 필드(652)(EVEX 바이트 3, 비트 [7] - EH; EVEX.EH, EVEX.rs, EVEX.RL, EVEX.기입 마스크 제어, 및 EVEX.N이라고도 알려짐; 또한 α로 예시됨) -앞서 설명된 바와 같이, 이 필드는 문맥 특정적이다. 추가적인 설명은 본 명세서에서 나중에 제공된다.
베타 필드(654)(EVEX 바이트 3, 비트들 [6:4] - SSS, EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB라고도 함; 또한 βββ로 예시되어 있음) - 앞서 기술된 바와 같이, 이 필드는 문맥 특정적이다. 추가적인 설명은 본 명세서에서 나중에 제공된다.
REX' 필드(710) - 이것은 REX' 필드의 나머지이고, 확장된 32개의 레지스터 세트의 상위 16 또는 하위 16 중 어느 하나를 인코딩하는 데 이용될 수 있는 EVEX.V' 비트 필드(EVEX 바이트 3, 비트 [3]-V')이다. 이 비트는 비트 반전된 포맷으로 저장된다. 1의 값을 이용하여 하위 16개의 레지스터를 인코딩한다. 즉, V'VVVV는 EVEX.V', EVEX.vvvv를 결합하여 형성된다.
기입 마스크 필드(670)(EVEX 바이트 3, 비트 [2:0]-kkk) -이것의 내용은 앞서 설명된 바와 같이 기입 마스크 레지스터들에서의 레지스터의 인덱스를 특정한다. 본 발명의 일 실시예에서, 특정값 EVEX.kkk=000은 특정 명령어에 대해 임의의 기입 마스크도 이용되지 않음을 내재하는 특수 거동을 갖는다(이것은 모두 1로 하드와이어드된(hardwired) 기입 마스크 또는 마스킹 하드웨어를 바이패스하는 하드웨어의 사용을 포함하는 다양한 방식으로 구현될 수 있다).
실제 오피코드 필드(730)(바이트 4)
이것은 오피코드 바이트라고도 한다. 오피코드의 부분은 이 필드에서 특정된다.
MOD R/M 필드(740)(바이트 5)
변경자 필드(646)(MODR/M.MOD, 비트 [7-6] - MOD 필드(742)) - 앞서 설명된 바와 같이, MOD 필드(742)의 내용은 메모리 액세스와 메모리 액세스 없음 연산 사이를 구별해 준다. 이 필드는 본 명세서에서 이후에 더 기술될 것이다.
MODR/M.reg 필드(744), 비트들 [5-3] - ModR/M.reg 필드의 역할은 2가지 상황들로 요약될 수 있다: ModR/M.reg는 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 하나를 인코딩하거나, ModR/M.reg는 오프코드 확장으로서 취듭하고 임의의 명령어 피연산자를 인코딩하는데 사용하지 않는다.
MODR/M.r/m 필드(746), 비트들 [2-0] - ModR/M.r/m 필드의 역할은 다음을 포함할 수 있다: ModR/M.r/m은 메모리 어드레스를 참조하는 명령어 피연산자를 인코딩하거나, ModR/M.r/m은 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 하나를 인코딩한다.
스케일, 인덱스, 베이스(SIB) 바이트(바이트 6)
스케일 필드(660)(SIB.SS, 비트 [7-6] - 앞서 기술된 바와 같이, 스케일 필드(660)의 내용은 메모리 주소 발생에 대해 사용된다. 이 필드는 본 명세서에서 이후에 더 기술될 것이다.
SIB.xxx(754)(비트 [5-3] 및 SIB.bbb(756)(비트 [2-0]) - 이들 필드들의 내용은 레지스터 인덱스들 Xxxx 및 Bbbb에 관하여 앞서 언급되었다.
변위 바이트(들)(바이트 7 또는 바이트 7-10)
변위 필드(662A)(바이트들 7-10) -MOD 필드(742)가 10을 포함할 때, 바이트들 7-10은 변위 필드(662A)이고, 이는 레거시 32-비트 변위(disp32)와 동일하게 작업하고 바이트 그래뉼래리티(byte granularity)로 작업한다.
변위 인자 필드(662B)(바이트 7) -MOD 필드(742)가 01을 포함할 때, 바이트 7은 변위 인자 필드(662B)이다. 이 필드의 위치는 바이트 그래뉼래리티에서 작업하는 레거시 x86 명령어 세트 8-비트 변위(disp8)와 동일하다. disp8은 부호 확장되기 때문에, 오직 -128 바이트들 오프셋들과 127 바이트들 오프셋들 사이를 어드레스할 수 있고; 64 바이트 캐시 라인들에 대하여, disp8은 오직 4개의 실제 유용한 값들 -128, -64, 0, 64로 설정될 수 있는 8 비트를 사용하며; 더 큰 범위가 종종 필요하기 때문에, disp32가 사용되고; 그러나, disp32는 4 바이트를 요구한다. disp8 및 disp32와 달리, 변위 인자 필드(662B)는 disp8의 재해석이고; 변위 인자 필드(662B)를 사용할 때, 변위 인자 필드의 내용과 메모리 피연산자 액세스의 사이즈(N)를 곱한 것에 의해 실제 변위가 결정된다. 이러한 유형의 변위를 disp8*N이라고 한다. 이것은 평균 명령어 길이를 감소시킨다(훨씬 더 큰 범위를 갖는 변위에 대해 사용되는 단일 바이트). 그러한 압축된 변위는 유효 변위가 메모리 액세스의 그래뉼래리티의 배수이고, 따라서 어드레스 오프셋의 잉여 하위 비트들이 인코딩될 필요가 없다는 가정에 기초한다. 즉, 변위 인자 필드(662B)는 레거시 x86 명령어 세트 8-비트 변위를 대체한다. 따라서, 변위 인자 필드(662B)는 x86 명령어 세트 8-비트 변위와 동일한 방식으로 인코딩되고(따라서 ModRM/SIB 인코딩 규칙의 변화가 없음), 유일한 예외는 disp8이 disp8*N으로 오버로드(overload)된다는 것이다. 즉, 인코딩 규칙들 또는 인코딩 길이에 있어서 임의의 변경도 존재하지 않지만 오직 하드웨어에 의한 변위값의 해석에 있어서 변경이 존재한다(이것은 바이트-와이즈 어드레스 오프셋(byte-wise address offset)을 획득하기 위해 메모리 피연산자의 사이즈에 의해 변위를 스케일링할 필요가 있다).
즉치(immediate)
즉치 필드(672)는 앞서 기술한 바와 같이 연산한다.
예시적 레지스터 아키텍처 - 도 8
도 8은 본 발명의 일 실시예에 따른 레지스터 아키텍처(800)의 블록도이다. 레지스터 아키텍처의 레지스터 파일 및 레지스터가 이하에 열거되어 있다:
벡터 레지스터 파일(810) - 예시된 실시예에서, 812 비트 폭의 32개의 벡터 레지스터들이 있다; 이들 레지스터들은 zmm0 내지 zmm31로서 참조된다. 하위 16개의 zmm 레지스터들의 하위 656 비트는 레지스터들 ymm0-16 상에 중첩된다. 하위 16개의 zmm 레지스터들의 하위 128 비트들(ymm 레지스터들의 하위 128 비트들)은 레지스터들 xmm0-15에 중첩된다. 특정의 벡터 친화적 명령어 포맷(700)은 아래 표에 예시된 바와 같이 이들 중첩된 레지스터 파일에 대해 동작한다.
즉, 벡터 길이 필드(659B)는 최대 길이와 하나 이상의 다른 보다 짧은 길이 중에서 선택을 하고, 여기서 각각의 이러한 보다 짧은 길이는 이전의 길이의 1/2 길이이며; 벡터 길이 필드(659B)를 갖지 않는 명령어 템플릿은 최대 벡터 길이에 대해 연산을 한다. 또한, 일 실시예에서, 특정의 벡터 친화적 명령어 포맷(700)의 클래스 B 명령어 템플릿은 패킹된 또는 스칼라의 싱글/더블 정밀도 부동 소수점 데이터와 패킹된 또는 스칼라의 정수 데이터에 동작한다. 스칼라 연산들은 zmm/ymm/xmm 레지스터에서 최하위 데이터 엘리먼트 위치에서 수행되는 연산들이고; 상위 데이터 엘리먼트 위치들은 실시예에 따라 그것들이 명령어 이전과 동일하게 두거나 또는 제로화된다.
기입 마스크 레지스터들(815) -예시된 실시예에서, 각각이 그 사이즈가 64 비트인 8개의 기입 마스크 레지스터(k0 내지 k7)가 있다. 상술한 바와 같이, 본 발명의 일 실시예에서, 벡터 마스크 레지스터 k0는 기입 마스크로서 이용될 수 없고; 통상적으로 k0를 표시하는 인코딩이 기입 마스크에 대해 이용될 때, 이것은 0xFFFF의 하드와이어된 기입 마스크를 선택하여, 해당 명령어에 대한 기입 마스킹을 효율적으로 디스에이블링한다.
MXCSR(Multimedia Extensions Control Status Register)(820) - 예시되어 있는 실시예에서, 이 32-비트 레지스터는 부동 소수점 연산에서 사용되는 상태 및 제어 비트를 제공한다.
범용 레지스터들(825) - 도시된 실시예에서, 메모리 피연산자들에 어드레싱하기 위해 기존의 x86 어드레싱 모드들과 함께 사용되는 16개의 64비트 범용 레지스터들이 존재한다. 이러한 레지스터들은 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15라는 이름으로 참조된다.
EFLAGS(Extended flags) 레지스터(830) - 예시되어 있는 실시예에서, 이 32-비트 레지스터는 많은 명령어의 결과를 기록하는 데 사용된다.
FCW(Floating Point Control Word) 레지스터(835) 및 FSW(Floating Point Status Word) 레지스터(840) - 예시되어 있는 실시예에서, 이들 레지스터는 FCW의 경우에 라운딩 모드, 예외 마스크 및 플래그를 설정하기 위해 그리고 FSW의 경우에 예외를 추적하기 위해 x87 명령어 세트 확장에 의해 사용된다.
MMX 패킹 정수 플랫 레지스터 파일(850)이라는 에일리어싱된 스칼라 부동 소수점 스택 레지스터 파일(x87 스택)(845) - 도시된 실시예에서, x87 스택은 x87 명령어 세트 확장을 이용하여 32/64/80비트 부동 소수점 데이터에 대해 스칼라 부동 소수점 연산들을 수행하는 데 사용되는 8-엘리먼트 스택인 반면, MMX 레지스터들은 64-비트 패킹 정수 데이터에 대해 연산들을 수행하는 것은 물론, MMX 및 XMM 레지스터들 사이에서 수행되는 일부 연산들에 대한 피연산자들을 유지하는 데 사용된다.
세그먼트 레지스터(855) - 도시된 실시예에서, 세그먼트화된 어드레스 생성에 이용되는 데이터를 저장하는데 이용되는 6개의 16비트 레지스터가 있다.
RIP 레지스터(865) - 도시된 실시예에서, 이 64 비트 레지스터는 명령어 포인터를 저장한다.
본 발명의 대안적인 실시예들은 더 넓거나 더 좁은 레지스터들을 이용할 수 있다. 부가적으로, 본 발명의 대안적인 실시예들은 더 많거나, 더 적거나, 상이한 레지스터 파일들 및 레지스터들을 이용할 수 있다.
예시적 순차적 프로세서 아키텍처 - 도 9a 및 도 9b
도 9a 및 도 9b는 예시적인 순차적 프로세서 아키텍처의 블록도를 나타낸다. 이들 예시적 실시예들은 와이드 벡터(wide vector) 프로세서(VPU)로 증강된 순차적 CPU 코어의 복수 인스턴스화에 관해 설계된 것이다. 코어들은, e13t 애플리케이션에 따라, 몇 가지 고정된 함수 로직, 메모리 I/O 인터페이스, 및 기타의 필요한 I/O 로직을 갖는 높은-대역폭의 상호접속 네트워크를 통해 통신한다. 예를 들어, 이 실시예를 독립형 GPU로서 구현하는 것은 통상적으로 PCIe 버스를 포함할 것이다.
도 9a는 본 발명의 실시예들에 따른, 단일 CPU 코어를, 온-다이 상호접속 네트워크(902)에의 그의 접속 및 레벨 2(L2) 캐시의 그의 로컬 서브셋(904)과 함께, 나타낸 블록도이다. 명령어 디코더(900)는 특정의 벡터 명령어 포맷(700)을 포함하는 확장을 갖는 x86 명령어 집합을 지원한다. 본 발명의 일 실시예에서, (설계를 단순화하기 위해) 스칼라 유닛(908) 및 벡터 유닛(910)이 개별적인 레지스터 세트들(각각, 스칼라 레지스터들(912) 및 벡터 레지스터들(914))을 사용하고 이들 사이에서 전달되는 데이터가 메모리에 기입된 다음에 레벨 1(L1) 캐시(906)로부터 다시 판독되지만, 본 발명의 대안적인 실시예들은 상이한 접근 방법을 사용할 수 있다(예컨대, 단일의 레지스터 세트를 사용하거나, 기입 및 다시 판독되는 일 없이 2개의 레지스터 파일들 간에 데이터가 전달될 수 있게 하는 통신 경로를 포함함).
L1 캐시(906)는 스칼라 및 벡터 유닛들 내의 캐시 메모리에의 낮은 레이턴시 액세스를 가능하게 한다. 벡터 친화적 명령어 포맷의 로드-op 명령어와 함께, 이것은 L1 캐시(906)가 어느 정도 확장된 레지스터 파일처럼 취급될 수 있다는 것을 의미한다. 이것은, 특히 축출 힌트 필드(652B)에 의해, 많은 알고리즘의 성능을 상당히 향상시킨다.
L2 캐시의 로컬 서브셋(904)은 CPU 코어당 하나씩 별개의 로컬 서브셋들로 분할되는 글로벌 L2 캐시의 일부이다. 각각의 CPU는 L2 캐시의 그 자신의 로컬 서브셋(904)으로의 다이렉트 액세스 경로를 갖는다. CPU 코어에 의해 판독된 데이터는 그 L2 캐시 서브셋(904)에 저장되고, 다른 CPU들이 그들 자신의 로컬 L2 캐시 서브셋에 액세스하는 것과 병렬로 신속하게 액세스될 수 있다. CPU 코어에 의해 기입된 데이터는 그 자신의 L2 캐시 서브셋(904)에 저장되고, 필요한 경우, 다른 서브셋들부터 플러시된다(flushed). 링 네트워크는 공유 데이터에 대한 코히어런시(coherency)를 보장한다.
도 9b는 본 발명의 실시예에 따른, 도 9a에서의 CPU 코어의 일부의 분해도이다. 도 9b는 L1 캐시(904)의 L1 데이터 캐시(906A) 부분은 물론, 벡터 유닛(910) 및 벡터 레지스터들(914)에 관한 부가 상세를 포함한다. 구체적으로는, 벡터 유닛(910)은 정수, 싱글 정밀도 부동 소수점, 및 더블 정밀도 부동 소수점 명령어들 중 하나 이상을 실행하는 16-와이드(16-wide) 벡터 처리 유닛(VPU)(16-와이드 ALU(928)를 참조)이다. VPU는 스위즐 유닛(swizzle unit)(920)에 의해 레지스터 입력들을 스위즐링하는 것, 숫자 변환 유닛들(922A 및 922B)에 의한 숫자 변환, 및 메모리 입력에 대한 복제 유닛(924)에 의한 복제를 지원한다. 기입 마스크 레지스터들(926)은 얻어지는 벡터 기입들을 예측하는 것을 가능하게 한다.
예컨대, 매트릭스 곱셈을 지원하기 위해, 레지스터 데이터가 각종의 방식으로 스위즐링될 수 있다. 메모리로부터의 데이터가 VPU 레인(VPU lane)을 통해 복제될 수 있다. 이것은 그래픽과 비그래픽 병렬 데이터 처리 양측 모두에서 공통된 연산이며, 캐시 효율을 현저하게 높인다.
CPU 코어, L2 캐시 및 다른 논리 블록과 같은 에이전트들이 칩 내에서 서로 통신할 수 있게 해주기 위해, 링 네트워크는 양방향이다. 각각의 링 데이터-경로는 방향 당 812-비트 폭이다.
예시적 비순차적 아키텍처 - 도 10
도 10은 본 발명의 실시예들에 따른 예시적인 비순차적 아키텍처를 나타낸 블록도이며 도 1에서 상술한 파이프라인과 같은 파이프라인의 보다 구체적인 설명으로서 보여질 수 있다. 구체적으로는, 도 10은 벡터 친화적 명령어 포맷 및 그의 실행을 포함시키기 위해 수정된 공지된 예시적인 비순차적 아키텍처를 나타낸 것이다. 도 10에서, 화살표는 2개 이상의 유닛들 간의 결합을 나타내고, 화살표의 방향은 이들 유닛들 간의 데이터 흐름의 방향을 나타낸다. 도 10은 실행 엔진 유닛(1010)과 메모리 유닛(1015)에 결합된 프론트 엔드 유닛(1005)을 포함한다; 실행 엔진 유닛(1010)은 또한 메모리 유닛(1015)에도 연결된다.
프론트 엔드 유닛(1005)은 레벨 2(L2) 브랜치 예측 유닛(1022)에 결합된 레벨 1(L1) 브랜치 예측 유닛(1020)을 포함한다. L1 및 L2 브랜치 예측 유닛들(1020과 1022)은 L1 명령어 캐시 유닛(1024)에 결합된다. L1 명령어 캐시 유닛(1024)은 명령어 변환 색인 버퍼(TLB; translation lookaside buffer)(1026)에 결합되고, 명령어 변환 색인 버퍼(1026)는 또한 명령어 페치 및 프리디코드 유닛(1028)에 결합된다. 명령어 페치 및 프리디코드 유닛(1028)은 명령어 큐 유닛(1030)에 결합되고, 명령어 큐 유닛(1030)은 또한 디코드 유닛(1032)에 결합된다. 디코드 유닛(1032)은 복잡한 디코더 유닛(1034)과 3개의 간단한 디코더 유닛들(1036, 1038, 1040)을 포함한다. 디코드 유닛(1032)은 마이크로-코드 ROM 유닛(1042)을 포함한다. 디코드 유닛(1032)은 디코드 스테이지 섹션에서 상술한 바와 같이 동작할 수 있다. L1 명령어 캐시 유닛(1024)은 또한 메모리 유닛(1015)내의 L2 캐시 유닛(1048)에도 결합된다. 명령어 TLB 유닛(1026)은 또한 메모리 유닛(1015)내의 제2 레벨 TLB 유닛(1046)에도 결합된다. 디코드 유닛(1032), 마이크로-코드 ROM 유닛(1042), 및 루프 스트림 검출기 유닛(1044) 각각은 실행 엔진 유닛(1010) 내의 리네임/할당기 유닛(1056)에 결합된다.
실행 엔진 유닛(1010)은 리타이어먼트 유닛(1074)에 결합되는 리네임/할당기 유닛(1056) 및 통합 스케줄러 유닛(1058)을 포함한다. 리타이어먼트 유닛(1074)은 또한 실행 유닛들(1060)에 결합되고, 재정렬 버퍼 유닛(1078)을 포함한다. 통합 스케줄러 유닛(1058)은 또한 실행 유닛들(1060)에 결합되는 물리적 레지스터 파일 유닛(1076)에 결합된다. 물리적 레지스터 파일 유닛(1076)은 벡터 레지스터 유닛(1077A), 기입 마스크 레지스터 유닛(1077B), 및 스칼라 레지스터 유닛(1077C)을 포함하고 있고; 이들 레지스터 유닛은 벡터 레지스터(810), 벡터 마스크 레지스터(815), 및 범용 레지스터(825)를 제공할 수 있고; 물리적 레지스터 파일 유닛(1076)은 도시되지 않은 부가의 레지스터 파일[예컨대, MMX 패킹된 정수 플랫 레지스터 파일(850) 상에 에일리어싱되어 있는 스칼라 부동 소수점 스택 레지스터 파일(845)]을 포함할 수 있다. 실행 유닛(1060)은 3개의 혼합된 스칼라 및 벡터 유닛들(1062, 1064 및 1072); 로딩 유닛(1066); 저장 어드레스 유닛(1068); 저장 데이터 유닛(1070)을 포함한다. 로딩 유닛(1066), 저장 어드레스 유닛(1068), 및 저장 데이터 유닛(1070) 각각은 또한 메모리 유닛(1015) 내의 데이터 TLB 유닛(1052)에 결합된다.
메모리 유닛(1015)은 데이터 TLB 유닛(1052)에 결합된 제2 레벨 TLB 유닛(1046)을 포함한다. 데이터 TLB 유닛(1052)은 L1 데이터 캐시 유닛(1054)에 결합된다. L1 데이터 캐시 유닛(1054)은 또한 L2 캐시 유닛(1048)에도 연결된다. 일부 실시예에서, L2 캐시 유닛(1048)은 또한 메모리 유닛(1015) 내부 및/또는 외부에 L3 및 더 높은 캐시 유닛들(1050)에 결합된다.
일례로서, 예시적인 비순차적 아키텍처는 다음과 같이 프로세스 파이프라인(8200)을 구현할 수 있다: 1) 명령어 페치 및 프리디코드 유닛(1028)은 페치 및 길이 디코딩 스테이지를 수행한다; 2) 디코드 유닛(1032)은 디코드 스테이지를 수행한다; 3) 리네임/할당기 유닛(1056)은 할당 스테이지와 리네이밍 스테이지를 수행한다; 4) 통합된 스케줄러(1058)는 스케줄 스테이지를 수행한다; 5) 물리적 레지스터 파일들 유닛(1076), 재정렬 버퍼 유닛(1078), 및 메모리 유닛(1015)은 레지스터 판독/메모리 판독 스테이지를 수행한다; 실행 유닛들(1060)은 실행/데이터 변형 스테이지를 수행한다; 6) 메모리 유닛(1015)과 재정렬 버퍼 유닛(1078)은 라이트 백/메모리 기입 스테이지(1960)를 수행한다; 7) 리타이어먼트 유닛(1074)은 ROB 판독 스테이지를 수행한다; 8) 다양한 유닛들이 예외 처리 스테이지에 관여될 수 있다; 9) 리타이어먼트 유닛(1074)과 물리적 레지스터 파일들 유닛(1076)은 커밋(commit) 스테이지를 수행한다.
예시적인 단일 코어 및 멀티코어 프로세서들 - 도 15
도 15는 본 발명의 실시예들에 따른, 통합된 메모리 제어기 및 그래픽을 갖는 단일 코어 프로세서 및 멀티코어 프로세서(1500)의 블록도이다. 도 15에서의 실선 박스들은 단일 코어(1502A)를 갖는 프로세서(1500), 시스템 에이전트(1510), 하나 이상의 버스 컨트롤러 유닛(1516)의 세트를 나타내는 반면, 선택적인 부가인 파선 박스들은 복수의 코어(1502A 내지 1502N)를 갖는 대안의 프로세서(1500), 시스템 에이전트 유닛(1510) 내의 하나 이상의 통합된 메모리 컨트롤러 유닛(들)(1514)의 세트, 및 통합된 그래픽 로직(1508)를 나타내고 있다.
메모리 계층 구조는 코어들 내의 하나 이상의 레벨의 캐시, 하나 이상의 공유 캐시 유닛들(1506)의 세트, 및 통합된 메모리 컨트롤러 유닛들(1514)의 세트에 결합되어 있는 외부 메모리(도시 생략)를 포함한다. 공유 캐시 유닛들(1506)의 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 기타 레벨들의 캐시와 같은 하나 이상의 중간 레벨 캐시들, LLC(last level cache), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서, 링 기반 상호연결 유닛(ring based interconnect unit)(1512)은 통합된 그래픽 로직(1508), 공유 캐시 유닛들(1506)의 세트, 및 시스템 에이전트 유닛(1510)을 상호연결시키는 반면, 대안의 실시예들은 이러한 유닛들을 상호연결시키는 데 임의의 수의 공지된 기술들을 사용할 수 있다.
몇몇 실시예들에서, 코어들(1502A 내지 1502N) 중 하나 이상은 멀티스레딩을 할 수 있다. 시스템 에이전트(1510)는 코어들(1502A 내지 1502N)을 조정하고 동작시키는 그 컴포넌트들을 포함한다. 시스템 에이전트 유닛(1510)은 예를 들어, PCU(power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1502A 내지 1502N) 및 통합된 그래픽 로직(1508)의 전력 상태를 조절하는 데 필요한 로직 및 컴포넌트들이거나 이를 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속되는 디스플레이들을 구동하기 위한 것이다.
코어들(1502A 내지 1502N)은 아키텍처 및/또는 명령어 세트의 관점에서 동종 또는 이종일 수 있다. 예를 들어, 코어들(1502A 내지 1502N) 중 일부는 (예를 들어, 도 9a 및 도 9b에 도시된 것과 같은) 순차일 수 있는 반면 다른 것들은(예를 들어, 도 10에 도시된 것과 같은) 비순차이다. 다른 일례로서, 코어들(1502A 내지 1502N) 중 2개의 또는 그 이상은 동일한 명령어 세트를 실행할 수 있지만, 다른 코어들은 해당 명령어 세트의 서브셋만을 또는 상이한 명령어 세트를 실행할 수 있다. 코어들 중 적어도 하나는 본 명세서에 기술된 벡터 친화적 명령어 포맷을 실행할 수 있다.
프로세서는 미국 캘리포니아주 산타 클라라 소재의 인텔사(Intel Corporation)로부터 입수가능한 CoreTM i3, i5, i7, 2 Duo 및 Quad, XeonTM 또는 ItaniumTM 프로세서와 같은 범용 프로세서일 수 있다. 대안적으로, 프로세서는 다른 회사로부터의 것일 수도 있다. 프로세서는 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, 코프로세서, 임베디드 프로세서 등과 같은 특별 목적 프로세서일 수도 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(1500)는 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은 복수의 프로세스 기술 중 어느 하나를 이용하여 하나 이상의 기판들의 일부가 될 수 있고/또는 이들 기판상에 구현될 수 있다.
예시적인 컴퓨터 시스템과 프로세서들 - 도 11 내지 도 13
도 11 내지 도 13은 프로세서(1500)를 포함하기에 적합한 예시적인 시스템들인 반면, 도 8은 코어들(1502) 중 하나 이상을 포함할 수 있는 예시적인 SoC(system on a chip)이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 퍼스널 디지털 어시스턴트들, 엔지니어링 워크스테이션들, 서버들, 네트워크 장치들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, 디지털 신호 프로세서들(DSPs), 그래픽 장치들, 비디오 게임 장치들, 셋톱 박스들, 마이크로 컨트롤러들, 휴대 전화들, 휴대용 미디어 플레이어들, 핸드헬드 장치들, 및 다양한 다른 전자 장치들에 대해 이 기술분야에 알려진 다른 시스템 설계들 및 구성들도 적합하다. 일반적으로, 본원에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 매우 다양한 시스템들 또는 전자 장치들이 일반적으로 적합하다.
이제 도 11을 참조하면, 본 발명의 일 실시예에 따른 시스템(1100)의 블록도가 도시되어 있다. 시스템(1100)은 GMCH(graphics memory controller hub)(1120)에 결합되어 있는 하나 이상의 프로세서들(1110, 1115)을 포함할 수 있다. 부가의 프로세서들(1115)의 선택적인 특성은 도 11에서 파선들로 나타내어져 있다.
각각의 프로세서들(1110, 1115)은 프로세서(1500)의 일부 버전일 수 있다. 그러나, 통합된 그래픽 로직 및 통합된 메모리 제어 유닛들이 프로세서들(1110, 1115)에 존재할 가능성이 없다는 것에 유의해야 한다.
도 11은 GMCH(1120)가 예를 들어, 동적 랜덤 액세스 메모리(DRAM)일 수 있는 메모리(1140)에 결합될 수 있음을 나타낸다. DRAM은 적어도 일 실시예의 경우, 비휘발성 캐시와 연관될 수도 있다.
GMCH(1120)는 칩셋 또는 칩셋의 일부일 수 있다. GMCH(1120)는 프로세서(들)(1110, 1115)와 통신하고, 프로세서(들)(1110, 1115)와 메모리(1140) 사이의 상호작용을 제어할 수 있다. GMCH(1120)는 시스템(1100)의 프로세서(들)(1110, 1115)와 다른 요소들 간의 가속 버스 인터페이스로서도 동작할 수 있다. 적어도 일 실시예에서, GMCH(1120)는 프론트사이드 버스(FSB)(1195)와 같은 멀티드롭 버스를 통해 프로세서(들)(1110, 1115)와 통신한다.
더욱이, GMCH(1120)는 (평판 디스플레이와 같은) 디스플레이(1145)에 결합된다. GMCH(1120)는 통합 그래픽 가속기를 포함할 수 있다. GMCH(1120)는 또한 다양한 주변 장치들을 시스템(1100)에 결합하는 데 사용될 수 있는 입출력(I/O) 제어기 허브(ICH)(1150)에 결합된다. 예를 들어, 도 11의 실시예에는 다른 주변 장치(1170)와 함께 ICH(1150)에 결합되는 개별 그래픽 장치일 수 있는 외부 그래픽 장치(1160)가 도시되어 있다.
대안적으로, 추가적이거나 상이한 프로세서들은 또한 시스템(1100)에 존재하는 수 있다. 예를 들어, 추가적 프로세서(들)(1115)는 프로세서(1110)와 동일한 추가적 프로세서(들), 프로세서(1110)에 이종이거나 비대칭인 추가적 프로세서(들), 가속기들(예를 들어, 그래픽 가속기들 또는 DSP 유닛들), FPGA들 또는 임의의 다른 프로세서를 포함할 수 있다. 아키텍처, 마이크로아키텍처, 열, 전력 소모 특성 등을 포함하는 다양한 성능 척도(metric of merit)들의 관점에서 물리적 소스들(1110, 1115) 간에 다양한 차이점들이 있을 수 있다. 이러한 차이들은 그들 자신을 프로세싱 엘리먼트들(1110, 1115) 사이의 비대칭성 및 이종성으로서 효과적으로 표현할 수 있다. 적어도 하나의 실시예의 경우, 다양한 프로세싱 엘리먼트들(1110, 1115)은 동일한 다이 패키지에 존재할 수 있다.
도 12를 참조하면, 본 발명의 일 실시예에 따른 제2 시스템(1200)의 블록도가 나타나 있다. 도 12에 나타낸 바와 같이, 멀티프로세서 시스템(1200)은 포인트 투 포인트 시스템이고, 포인트 투 포인트 상호접속(1250)을 통해 결합되어 있는 제1 프로세서(1270) 및 제2 프로세서(1280)를 포함한다. 도 12에 나타낸 바와 같이, 각각의 프로세서들(1270, 1280)은 프로세서(1500)의 일부 버전일 수 있다.
대안적으로, 프로세서들(1270, 1280) 중 하나 이상은 가속기 또는 FPGA와 같은, 프로세서 이외의 엘리먼트일 수 있다.
단 2개의 프로세서들(1270, 1280)만이 도시되어 있지만, 본 발명의 범위는 이것으로 제한되지 않는다는 것을 이해할 것이다. 다른 실시예들에서는, 하나 이상의 추가 처리 엘리먼트가 주어진 프로세서 내에 존재할 수 있다.
프로세서(1270)는 통합된 메모리 제어기 허브(IMC)(1272)와 포인트 투 포인트(P-P) 인터페이스들(1276, 1278)을 추가로 포함할 수 있다. 유사하게, 제2 프로세서(1280)은 IMC(1282)와 P-P 인터페이스들(1286, 1288)을 포함할 수 있다. 프로세서들(1270, 1280)은 P-P 인터페이스 회로들(1278, 1288)을 사용하여 P-P 인터페이스(1250)를 통해 데이터를 교환할 수 있다. 도 12에 나타낸 바와 같이, IMC들( 1272, 1282)은 프로세서들을 각자의 메모리들, 즉 각자의 프로세서들에 로컬로 부속된 주 메모리의 일부분들일 수 있는 메모리(1242) 및 메모리(1244)에 결합시킨다.
프로세서들(1270, 1280)은 각각 포인트 투 포인트 인터페이스 회로들(1276, 1294, 1286, 1298)을 사용하여 개개의 P-P 인터페이스들(1252, 1254)을 통해 칩셋(1290)과 데이터를 교환할 수 있다. 칩셋(1290)은 또한 고성능 그래픽 인터페이스(1239)를 통해 고성능 그래픽 회로(1238)와 데이터를 교환할 수 있다.
공유 캐시(도시 생략)는 양쪽 프로세서 중 어느 한 프로세서에 포함될 수 있지만, P-P 상호연결부를 통해 프로세서들과 연결될 수 있으며, 따라서, 프로세서가 저전력 모드에 들어가는 경우, 어느 한 프로세서 또는 양쪽 프로세서의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(1290)은 인터페이스(1296)를 통해 제1 버스(1216)에 결합될 수 있다. 일 실시예에서, 제1 버스(1216)는 주변 컴포넌트 상호접속(PCI) 버스, 또는 PCI 익스프레스 버스 또는 다른 3세대 I/O 상호접속 버스와 같은 버스일 수 있지만, 본 발명의 범위는 이에 한정되지 않는다.
도 12에 나타낸 바와 같이, 제1 버스(1216)를 제2 버스(1220)에 결합시키는 버스 브리지(1218)와 함께, 다양한 I/O 장치들(1214)이 제1 버스(1216)에 결합될 수 있다. 일 실시예에서, 제2 버스(1220)는 LPC(low pin count) 버스일 수 있다. 다양한 장치들은 일 실시예에서, 예를 들어, 키보드/마우스(1222), 통신 장치(1226), 및 코드(1230)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 기억 장치와 같은 데이터 기억 장치 유닛(1228)을 포함하는 제2 버스(1220)에 결합될 수 있다. 또한, 오디오 I/O(1224)는 제2 버스(1220)에 결합될 수 있다. 다른 아키텍처들도 가능하다는 점에 유의해야 한다. 예를 들어, 도 12의 포인트 투 포인트 아키텍처 대신에, 시스템은 멀티드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
이제 도 13을 참조하면, 본 발명의 일 실시예에 따른 제3 시스템(1300)의 블록도가 나타나 있다. 도 12 및 도 13에서의 유사한 엘리먼트들은 유사한 참조 번호들을 지니고 있으며, 도 13의 다른 양상들을 불명료하게 하는 것을 피하기 위해 도 12의 특정의 양상들이 도 13으로부터 생략되어 있다.
도 13은 프로세서들(1270, 1280)이 각각, 통합된 메모리 및 I/O 제어 로직("CL")(1272, 1282)을 포함할 수 있다는 것을 나타내고 있다. 적어도 일 실시예의 경우, CL(1272, 1282)은 도 8 및 도 12와 관련하여 상술한 바와 같은 메모리 컨트롤러 허브 로직(IMC)을 포함할 수 있다. 또한, CL(1272, 1282)은 또한 I/O 제어 로직을 포함할 수 있다. 도 13은 메모리들(1242, 1244)이 CL(1272, 1282)에 결합되어 있을 뿐만 아니라, I/O 장치들(1314)이 또한 제어 로직(1272, 1282)에 결합되어 있는 것을 나타내고 있다. 레거시 I/O 장치들(1315)은 칩셋(1290)에 결합되어 있다.
이제 도 14를 참조하면, 본 발명의 일 실시예에 따른 SoC(1400)의 블록도가 나타나 있다. 도 15에서의 유사한 엘리먼트들은 유사한 참조 부호들을 지니고 있다. 또한, 점선 박스들은 더욱 향상된 SoC들에 관한 선택적 특징들이다. 도 14에서, 상호접속 유닛(들)(1402)은 하나 이상의 코어들(1502A 내지 1502N)의 세트 및 공유 캐시 유닛(들)(1506)을 포함하는 애플리케이션 프로세서(1410); 시스템 에이전트 유닛(1510); 버스 컨트롤러 유닛(들)(1516); 통합된 메모리 컨트롤러 유닛(들)(1514); 통합된 그래픽 로직(1508), 스틸 및/또는 비디오 카메라 기능을 제공하기 위한 이미지 프로세서(1424), 하드웨어 오디오 가속을 제공하기 위한 오디오 프로세서(1426), 및 비디오 인코딩/디코딩 가속을 제공하기 위한 비디오 프로세서(1428)를 포함할 수 있는 한 세트의 또는 하나 이상의 미디어 프로세서(1420); SRAM(static random access memory) 유닛(1430); DMA(direct memory access) 유닛(1432); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(1440)에 결합되어 있다.
본 명세서에서 설명된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, (휘발성 및/또는 비휘발성 메모리 및/또는 저장소 엘리먼트들을 포함하는) 저장소 시스템, 적어도 하나의 입력 장치, 및 적어도 하나의 출력 장치를 포함하는 프로그램가능한 시스템상에서 실행되는 컴퓨터 프로그램 또는 프로그램 코드로서 구현될 수 있다.
프로그램 코드는 본 명세서에서 기술된 기능들을 수행하고 출력 정보를 생성하기 위해 데이터를 입력하기 위해 적용될 수 있다. 출력 정보는 공지된 방식으로, 하나 이상의 출력에 적용될 수 있다. 이 애플리케이션을 달성하기 위해, 프로세싱 시스템은 예를 들어, 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 주문형 집적 회로(ASIC) 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위해 고레벨 절차 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는 또한, 요구되는 경우, 어셈블리 또는 기계 언어로 구현될 수 있다. 사실상, 본 명세서에서 설명된 메커니즘들은 임의의 특정 프로그래밍 언어로 범위가 한정되지 않는다. 어느 경우에나, 언어는 컴파일되거나 해석되는 언어일 수 있다.
적어도 일 실시예의 하나 이상의 양상은 기계에 의해 판독될 때 기계로 하여금 본 명세서에서 설명되는 기술들을 수행하기 위한 로직을 제조하게 하는, 프로세서 내의 다양한 로직을 표현하는, 기계 판독가능 매체 상에 저장된 전형적인 명령어들에 의해 구현될 수 있다. "IP 코어들"로서 알려진 그러한 표현들은 유형의 기계 판독가능 매체 상에 저장될 수 있으며, 다양한 고객들 또는 제조 설비에 제공되어, 로직 또는 프로세서를 실제로 제조하는 제조 기계들 내에 로딩될 수 있다.
이러한 기계 판독가능 저장 매체는 하드 디스크, 임의의 다른 유형의 디스크 -플로피 디스크, 광 디스크(CD-ROM(compact disk read-only memory), CD-RW(compact disk rewritable)), 및 광자기 디스크를 포함함-, ROM(read-only memory), DRAM(dynamic random access memory) 등의 RAM(random access memory), SRAM(static random access memory), EPROM(erasable programmable read-only memory), 플래시 메모리, EEPROM(electrically erasable programmable read-only memory) 등의 반도체 장치, 자기 또는 광 카드, 또는 전자 명령어를 저장하기에 적당한 임의의 다른 유형의 매체 등의 저장 매체를 비롯한 기계 또는 장치에 의해 제조 또는 형성되는 비일시적, 유형의 물품의 배열을 포함할 수 있지만, 이들로 제한되지 않는다.
따라서, 본 발명의 실시예는 또한 벡터 친화적 명령어 포맷으로 된 명령어들을 포함하는 또는 본 명세서에서 기술된 구조, 회로, 장치, 프로세서, 및/또는 시스템 특징을 정의하는 HDL(Hardware Description Language)와 같은 설계 데이터를 포함하는 비일시적, 유형의 기계 판독가능 매체를 포함한다. 이러한 실시예들은 프로그램 제품들로도 참조될 수 있다.
일부 경우에는, 명령어 변환기가 소스 명령어 세트로부터 타겟 명령어 세트로 명령어를 변환하는데 사용될 수 있다. 예를 들어, 명령어 변환기는 코어에 의해 처리될 하나 이상의 다른 명령어들로 명령어를 (예를 들어, 정적 이진 해석, 동적 컴필레이션을 포함하는 동적 이진 해석을 이용하여) 해석하거나, 모프하거나, 에뮬레이트하거나, 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 온 프로세서(on processor)에, 오프 프로세서(off processor)에, 또는 일부는 온 프로세서에 일부는 오프 프로세서에 있을 수 있다.
도 16은 본 발명의 실시예들에 따라 소스 명령어 세트 내의 이진 명령어들을 타겟 명령어 세트 내의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기가 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합들로 구현될 수 있다. 도 16은 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1616)에 의해 선천적으로 실행될 수 있는 x86 이진 코드(1606)를 생성하기 위해 고급 언어(1602)로 된 프로그램이 x86 컴파일러(1604)를 이용하여 컴파일링될 수 있는 것을 보여준다(명령어들 중 일부는 벡터 친화적 명령어 포맷으로 컴파일된 것으로 상정). 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1616)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과들을 달성하기 위하여, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 실질적인 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서상에서 실행되는 것을 목표로 하는 애플리케이션들 또는 기타의 소프트웨어의 목적 코드 버전들을 호환 가능하게 실행하거나 기타 방식으로 처리함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능들을 실행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1604)는 추가 연계 처리(linkage processing)를 수반하거나 수반하지 않고서 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1616)상에서 실행될 수 있는 x86 이진 코드(1606)(예를 들어, 목적 코드)를 생성하도록 연산할 수 있는 컴파일러를 나타낸다. 유사하게, 도 16은 적어도 하나의 x86 명령어 세트 코어를 갖지 않는 프로세서(1614)(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS 테크놀리지(Technologies)의 MIPS 명령어 세트를 실행하는 및/또는 미국 캘리포니아주 서니베일 소재의 ARM 홀딩스(Holdings)의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 선천적으로 실행될 수 있는 대안의 명령어 세트 이진 코드(1610)를 발생하기 위해 고급 언어(1602)로 된 프로그램이 대안의 명령어 세트 컴파일러(1608)를 사용하여 컴파일링될 수 있는 것을 보여준다. 명령어 변환기(1612)는 x86 이진 코드(1606)를 x86 명령어 세트 코어를 갖지 않는 프로세서(1614)에 의해 선천적으로 실행될 수 있는 코드로 변환하는데 사용된다. 이 변환된 코드는 대안의 명령어 세트 이진 코드(1610)와 동일할 가능성이 별로 없지만 -그 이유는 이것을 할 수 있는 명령어 변환기를 만들기가 어렵기 때문임 -; 변환된 코드는 일반 연산을 달성할 것이고 대안의 명령어 세트로부터의 명령어들로 구성될 것이다. 따라서, 명령어 변환기(1612)는 에뮬레이션, 시뮬레이션, 또는 임의의 다른 처리를 통해 x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 장치로 하여금 x86 이진 코드(1606)를 실행하게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
본 명세서에 개시된 벡터 친화적 명령어 포맷으로 된 명령어(들)의 특정 동작들은 하드웨어 컴포넌트들에 의해 수행될 수 있고 회로 또는 기타 하드웨어 컴포넌트가 동작을 수행하는 명령어들로 프로그램되게 하거나 적어도 그렇게 하는 데 사용되는 기계-실행가능 명령어들로 구현될 수 있다. 회로는 몇가지 예들에서와 같이, 범용 또는 특수 목적 프로세서, 또는 논리 회로를 포함할 수 있다. 동작들은 옵션으로 하드웨어와 소프트웨어의 결합에 의해 수행될 수도 있다. 실행 로직 및/또는 프로세서는 명령어 특정 결과 오퍼랜드를 저장하기 위해 머신 명령어 또는 머신 명령어로부터 도출된 하나 이상의 제어 신호들에 응답하는 구체적 또는 특정 회로 또는 다른 로직을 포함할 수 있다. 예를 들어, 본 명세서에서 설명된 명령어(들)의 실시예들은 도 11 내지 도 16의 하나 이상의 시스템에서 실행될 수 있고, 벡터 친화적 명령어 포맷의 명령어(들)의 실시예들이 시스템에서 실행될 프로그램 코드에 저장될 수 있다. 그에 부가하여, 이들 도면의 프로세싱 엘리먼트들은 본 명세서에 상세히 기술된 상세한 파이프라인들 및/또는 아키텍처들(예컨대, 순차적 아키텍처 및 비순차적 아키텍처) 중 하나를 이용할 수 있다. 예를 들어, 순차적 아키텍처의 디코딩 유닛은 명령어(들)를 디코딩하고, 디코딩된 명령어를 벡터 또는 스칼라 유닛으로 전달하는 등을 할 수 있다.
상술한 설명은 본 발명의 바람직일 실시예들을 예시하는 것을 의도한다. 상술한 논의로부터, 성장이 빠르고 추가적인 진보가 쉽게 예견되지 않는 이러한 기술 분야에서 특히, 본 발명은 첨부된 특허청구범위 및 그의 등가물들의 범위 내에서 본 발명의 원리들로부터 벗어나지 않고 본 분야의 숙련된 자들에 의해 배열 및 상세가 변경될 수 있다는 것이 또한 명백해야 한다. 예를 들어, 방법의 하나 이상의 동작들은 결합될 수 있거나 더 쪼개질 수 있다.
대안 실시예
벡터 친화적 명령어 포맷을 선천적으로 실행하게 될 실시예들이 기술되어 있지만, 본 발명의 대안의 실시예는 상이한 명령어 세트를 실행하는 프로세서(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 프로세서, 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트를 실행하는 프로세서) 상에서 실행 중인 에뮬레이션 계층(emulation layer)을 통해 벡터 친화적 명령어 포맷을 실행할 수 있다. 또한, 도면들 내의 흐름도들은 본 발명의 특정 실시예들에 의해 수행되는 동작들의 특정 순서를 도시하지만, 그러한 순서는 예시임을 이해해야 한다(예를 들어, 대안적인 실시예들은 상이한 순서로 동작들을 수행할 수 있고, 특정 동작들을 결합할 수 있고, 특정 동작들을 중첩할 수 있는 등등이다).
위의 설명에서, 설명의 목적으로, 본 발명의 실시예들의 철저한 이해를 제공하기 위하여 복수의 특정 상세가 설명되었다. 그러나, 하나 이상의 다른 실시예들이 이들 특정 상세 중 일부가 없이 실시될 수 있다는 것이 이 기술분야의 숙련된 자에게 명백할 것이다. 설명된 특정 실시예들은 본 발명을 제한하기 위해 제공된 것이 아니고, 본 발명의 실시예들을 예시하기 위해 제공된 것이다. 본 발명의 범위는 위에 제공된 특정예들에 의해 결정되지 않고, 아래 청구항들에 의해서만 결정된다.
Claims (20)
- 적분 이미지 계산 명령어를 위한 장치로서,
제1 명령어를 실행하는 동안 교번하는 엘리먼트들을 제1 입력 벡터의 이웃하는 엘리먼트들에 가산하고, 제2 명령어를 실행하는 동안 제2 입력 벡터의 제1 변(side)의 엘리먼트들을 상기 제2 입력 벡터의 제2 변의 동일한 엘리먼트 위치에 있는 상응하는 엘리먼트들에 가산하는 제1 회로; 및
상기 제1 명령어의 최종값에 패스하기 위한 상기 교번하는 엘리먼트들을 선택하고, 상기 제2 명령어의 최종값에 패스하기 위한 상기 제2 입력 벡터의 상기 제1 변의 엘리먼트들을 선택하는 제2 회로
를 포함하는, 적분 이미지 계산 명령어를 위한 장치. - 제1항에 있어서,
상기 제1 회로에 선행하는 제3 회로를 포함하고,
상기 제3 회로는 상기 제1 회로 내에서 가산되기 위한 상기 제1 및 제2 입력 벡터들의 각각의 엘리먼트들을 선택하는, 적분 이미지 계산 명령어를 위한 장치. - 제2항에 있어서,
상기 제3 회로는 제1 멀티플렉서 뱅크를 포함하는, 적분 이미지 계산 명령어를 위한 장치. - 제3항에 있어서,
상기 제2 회로는 제2 멀티플렉서 뱅크를 포함하는, 적분 이미지 계산 명령어를 위한 장치. - 제4항에 있어서,
상기 제1 멀티플렉서 뱅크 및 상기 제2 멀티플렉서 뱅크는 제어 입력들을 수신하기 위하여 판독 전용 메모리(ROM) 회로에 결합되는, 적분 이미지 계산 명령어를 위한 장치. - 제1항에 있어서,
상기 제2 입력 벡터의 상기 제2 변은 상기 제2 입력 벡터의 최상위(highest ordered) 변인, 적분 이미지 계산 명령어를 위한 장치. - 제1항에 있어서,
상기 제1 명령어의 최종값은 상기 제2 회로에 의하여 상기 제2 입력 벡터로서 저장되는, 적분 이미지 계산 명령어를 위한 장치. - 적분 이미지 계산 명령어를 위한 방법으로서,
제1 벡터의 교번하는 엘리먼트들을 상기 제1 벡터의 이웃하는 엘리먼트들에 가산하고, 합산 결과를 제2 벡터에 제공하고, 상기 교번하는 엘리먼트들을 상기 제2 벡터에 패스하는 제1 명령어를 실행함으로써 상기 제2 벡터를 생성하는 단계; 및
상기 제2 벡터의 제1 변의 엘리먼트들을 상기 제2 벡터의 제2 변의 동일한 엘리먼트 위치에 있는 상응하는 엘리먼트들에 가산하고, 상기 제2 벡터의 상기 제1 변을 패스하는 제2 명령어를 실행함으로써 제3 벡터를 생성하는 단계
를 포함하는, 적분 이미지 계산 명령어를 위한 방법. - 제8항에 있어서,
상기 방법은 상기 제1 명령어의 실행에 있어서, 제1 제어 입력들을 판독 전용 메모리(ROM)로부터 선택 회로에 패스하는 단계와, 상기 제2 명령어의 실행에 있어서, 제2 제어 입력들을 상기 ROM으로부터 상기 선택 회로에 패스하는 단계를 포함하는, 적분 이미지 계산 명령어를 위한 방법. - 제9항에 있어서,
상기 제어 입력들은 상기 제1 벡터의 어느 엘리먼트들이 상기 제2 벡터에 패스되는지와, 상기 제2 벡터의 어느 엘리먼트들이 상기 제3 벡터에 패스되는지를 결정하는, 적분 이미지 계산 명령어를 위한 방법. - 제8항에 있어서,
상기 제2 벡터의 상기 제2 변은 상기 제2 벡터의 최상위 변인, 적분 이미지 계산 명령어를 위한 방법. - 제8항에 있어서,
상기 제1 명령어의 상기 실행과 상기 제2 명령어의 상기 실행은 총 2개의 머신 사이클인, 적분 이미지 계산 명령어를 위한 방법. - 제8항에 있어서,
상기 제1 및 제2 명령어들은 동일한 기능 유닛에 의하여 실행되는, 적분 이미지 계산 명령어를 위한 방법. - 비일시적(non-transitory) 기계 판독가능 매체로서,
컴퓨터에 의해 처리될 때, 상기 컴퓨터로 하여금 방법을 실행하게 하는 프로그램 코드를 포함하고, 상기 방법은:
제1 벡터의 교번하는 엘리먼트들을 상기 제1 벡터의 이웃하는 엘리먼트들에 가산하고, 합산 결과를 제2 벡터에 제공하고, 상기 교번하는 엘리먼트들을 상기 제2 벡터에 패스하는 제1 명령어를 실행함으로써 상기 제2 벡터를 생성하는 단계; 및
상기 제2 벡터의 제1 변의 엘리먼트들을 상기 제2 벡터의 제2 변의 동일한 엘리먼트 위치에 있는 상응하는 엘리먼트들에 가산하고, 상기 제2 벡터의 상기 제1 변을 패스하는 제2 명령어를 실행함으로써 제3 벡터를 생성하는 단계
를 포함하는, 비일시적 기계 판독가능 매체. - 제14항에 있어서,
상기 방법은 상기 제1 명령어의 실행에 있어서, 제1 제어 입력들을 판독 전용 메모리(ROM)로부터 선택 회로에 패스하는 단계와, 상기 제2 명령어의 실행에 있어서, 제2 제어 입력들을 상기 ROM으로부터 상기 선택 회로에 패스하는 단계를 포함하는, 비일시적 기계 판독가능 매체. - 제15항에 있어서,
상기 제어 입력들은 상기 제1 벡터의 어느 엘리먼트들이 상기 제2 벡터에 패스되는지와, 상기 제2 벡터의 어느 엘리먼트들이 상기 제3 벡터에 패스되는지를 결정하는, 비일시적 기계 판독가능 매체. - 제14항에 있어서,
상기 제2 벡터의 상기 제2 변은 상기 제2 벡터의 최상위 변인, 비일시적 기계 판독가능 매체. - 제14항에 있어서,
상기 제1 명령어의 상기 실행과 상기 제2 명령어의 상기 실행은 총 2개의 머신 사이클인, 비일시적 기계 판독가능 매체. - 비일시적 기계 판독가능 매체로서,
컴퓨터에 의해 처리될 때, 상기 컴퓨터로 하여금 방법을 실행하게 하는 프로그램 코드를 포함하고, 상기 방법은
제1 벡터의 교번하는 엘리먼트들을 상기 제1 벡터의 이웃하는 엘리먼트들에 가산하고, 합산 결과를 제2 벡터에 제공하고, 상기 교번하는 엘리먼트들을 상기 제2 벡터에 패스함으로써 상기 제2 벡터를 생성하는 제1 명령어를 생성하는 단계; 및
상기 제2 벡터의 제1 변의 엘리먼트들을 상기 제2 벡터의 제2 변의 동일한 엘리먼트 위치에 있는 상응하는 엘리먼트들에 가산하고, 합산 결과를 상기 제2 벡터에 제공하고, 상기 제2 벡터의 상기 제1 변을 상기 제2 벡터에 패스함으로써 제3 벡터를 생성하는 제2 명령어를 생성하는 단계
를 실행함으로써 목적 코드를 생성하는 단계
를 포함하는, 비일시적 기계 판독가능 매체. - 제19항에 있어서,
상기 제1 명령어의 실행과 상기 제2 명령어의 실행은 총 2개의 머신 사이클이 되는, 비일시적 기계 판독가능 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/730,665 US9442723B2 (en) | 2012-12-28 | 2012-12-28 | Method and apparatus for integral image computation instructions |
US13/730,665 | 2012-12-28 | ||
PCT/US2013/046412 WO2014105137A1 (en) | 2012-12-28 | 2013-06-18 | Method and apparatus for integral image computation instructions |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157013891A Division KR101722346B1 (ko) | 2012-12-28 | 2013-06-18 | 적분 이미지 계산 명령어를 위한 방법 및 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170037685A KR20170037685A (ko) | 2017-04-04 |
KR101814356B1 true KR101814356B1 (ko) | 2018-01-04 |
Family
ID=51018674
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020177008223A KR101814356B1 (ko) | 2012-12-28 | 2013-06-18 | 적분 이미지 계산 명령어를 위한 방법 및 장치 |
KR1020157013891A KR101722346B1 (ko) | 2012-12-28 | 2013-06-18 | 적분 이미지 계산 명령어를 위한 방법 및 장치 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157013891A KR101722346B1 (ko) | 2012-12-28 | 2013-06-18 | 적분 이미지 계산 명령어를 위한 방법 및 장치 |
Country Status (5)
Country | Link |
---|---|
US (2) | US9442723B2 (ko) |
KR (2) | KR101814356B1 (ko) |
CN (1) | CN105359052B (ko) |
DE (1) | DE112013005236T5 (ko) |
WO (1) | WO2014105137A1 (ko) |
Families Citing this family (44)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9442723B2 (en) * | 2012-12-28 | 2016-09-13 | Intel Corporation | Method and apparatus for integral image computation instructions |
DE102014214711B4 (de) | 2014-07-25 | 2023-01-05 | Continental Autonomous Mobility Germany GmbH | Verfahren zum Betrieb eines Assistenzsystems eines Kraftfahrzeugs sowie Assistenzsystem |
US9715432B2 (en) * | 2014-12-23 | 2017-07-25 | Intel Corporation | Memory fault suppression via re-execution and hardware FSM |
US10248876B2 (en) | 2016-06-27 | 2019-04-02 | Texas Instruments Incorporated | Method and apparatus for avoiding non-aligned loads using multiple copies of input data |
US10275243B2 (en) | 2016-07-02 | 2019-04-30 | Intel Corporation | Interruptible and restartable matrix multiplication instructions, processors, methods, and systems |
JP2018022339A (ja) * | 2016-08-03 | 2018-02-08 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
CN110337635B (zh) | 2017-03-20 | 2023-09-19 | 英特尔公司 | 用于点积操作的系统、方法和装置 |
US10372456B2 (en) * | 2017-05-24 | 2019-08-06 | Microsoft Technology Licensing, Llc | Tensor processor instruction set architecture |
WO2019009870A1 (en) | 2017-07-01 | 2019-01-10 | Intel Corporation | SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE |
CN107861757B (zh) * | 2017-11-30 | 2020-08-25 | 上海寒武纪信息科技有限公司 | 运算装置以及相关产品 |
US11789729B2 (en) | 2017-12-29 | 2023-10-17 | Intel Corporation | Systems and methods for computing dot products of nibbles in two tile operands |
US11669326B2 (en) | 2017-12-29 | 2023-06-06 | Intel Corporation | Systems, methods, and apparatuses for dot product operations |
US11023235B2 (en) | 2017-12-29 | 2021-06-01 | Intel Corporation | Systems and methods to zero a tile register pair |
US11809869B2 (en) | 2017-12-29 | 2023-11-07 | Intel Corporation | Systems and methods to store a tile register pair to memory |
US11093247B2 (en) | 2017-12-29 | 2021-08-17 | Intel Corporation | Systems and methods to load a tile register pair |
US11816483B2 (en) | 2017-12-29 | 2023-11-14 | Intel Corporation | Systems, methods, and apparatuses for matrix operations |
US10664287B2 (en) | 2018-03-30 | 2020-05-26 | Intel Corporation | Systems and methods for implementing chained tile operations |
US11093579B2 (en) | 2018-09-05 | 2021-08-17 | Intel Corporation | FP16-S7E8 mixed precision for deep learning and other algorithms |
US11579883B2 (en) | 2018-09-14 | 2023-02-14 | Intel Corporation | Systems and methods for performing horizontal tile operations |
US10970076B2 (en) | 2018-09-14 | 2021-04-06 | Intel Corporation | Systems and methods for performing instructions specifying ternary tile logic operations |
US10719323B2 (en) | 2018-09-27 | 2020-07-21 | Intel Corporation | Systems and methods for performing matrix compress and decompress instructions |
US10990396B2 (en) | 2018-09-27 | 2021-04-27 | Intel Corporation | Systems for performing instructions to quickly convert and use tiles as 1D vectors |
US10866786B2 (en) | 2018-09-27 | 2020-12-15 | Intel Corporation | Systems and methods for performing instructions to transpose rectangular tiles |
US10929143B2 (en) | 2018-09-28 | 2021-02-23 | Intel Corporation | Method and apparatus for efficient matrix alignment in a systolic array |
US10963256B2 (en) | 2018-09-28 | 2021-03-30 | Intel Corporation | Systems and methods for performing instructions to transform matrices into row-interleaved format |
US10896043B2 (en) | 2018-09-28 | 2021-01-19 | Intel Corporation | Systems for performing instructions for fast element unpacking into 2-dimensional registers |
US10963246B2 (en) | 2018-11-09 | 2021-03-30 | Intel Corporation | Systems and methods for performing 16-bit floating-point matrix dot product instructions |
US10929503B2 (en) | 2018-12-21 | 2021-02-23 | Intel Corporation | Apparatus and method for a masked multiply instruction to support neural network pruning operations |
US11294671B2 (en) | 2018-12-26 | 2022-04-05 | Intel Corporation | Systems and methods for performing duplicate detection instructions on 2D data |
US11886875B2 (en) | 2018-12-26 | 2024-01-30 | Intel Corporation | Systems and methods for performing nibble-sized operations on matrix elements |
US20200210517A1 (en) | 2018-12-27 | 2020-07-02 | Intel Corporation | Systems and methods to accelerate multiplication of sparse matrices |
US10942985B2 (en) | 2018-12-29 | 2021-03-09 | Intel Corporation | Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions |
US10922077B2 (en) | 2018-12-29 | 2021-02-16 | Intel Corporation | Apparatuses, methods, and systems for stencil configuration and computation instructions |
US11269630B2 (en) | 2019-03-29 | 2022-03-08 | Intel Corporation | Interleaved pipeline of floating-point adders |
US11016731B2 (en) | 2019-03-29 | 2021-05-25 | Intel Corporation | Using Fuzzy-Jbit location of floating-point multiply-accumulate results |
US10990397B2 (en) | 2019-03-30 | 2021-04-27 | Intel Corporation | Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator |
US11175891B2 (en) | 2019-03-30 | 2021-11-16 | Intel Corporation | Systems and methods to perform floating-point addition with selected rounding |
US11403097B2 (en) | 2019-06-26 | 2022-08-02 | Intel Corporation | Systems and methods to skip inconsequential matrix operations |
US11334647B2 (en) | 2019-06-29 | 2022-05-17 | Intel Corporation | Apparatuses, methods, and systems for enhanced matrix multiplier architecture |
US11714875B2 (en) | 2019-12-28 | 2023-08-01 | Intel Corporation | Apparatuses, methods, and systems for instructions of a matrix operations accelerator |
US11972230B2 (en) | 2020-06-27 | 2024-04-30 | Intel Corporation | Matrix transpose and multiply |
US11941395B2 (en) | 2020-09-26 | 2024-03-26 | Intel Corporation | Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions |
US12001887B2 (en) | 2020-12-24 | 2024-06-04 | Intel Corporation | Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator |
US12001385B2 (en) | 2020-12-24 | 2024-06-04 | Intel Corporation | Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080252717A1 (en) * | 2007-04-12 | 2008-10-16 | Samsung Electronics Co., Ltd. | Method for photographing panoramic image |
US7565019B2 (en) * | 2005-03-29 | 2009-07-21 | Shenzhen Mindray Bio-Medical Electronics Co., Ltd. | Method of volume-panorama imaging processing |
US20120166761A1 (en) * | 2010-12-22 | 2012-06-28 | Hughes Christopher J | Vector conflict instructions |
US20120260061A1 (en) * | 2011-04-04 | 2012-10-11 | Arm Limited | Data processing apparatus and method for performing vector operations |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011180792A (ja) | 2010-03-01 | 2011-09-15 | Sony Corp | 画像処理装置及び画像処理方法、並びにコンピューター・プログラム |
CN102147866B (zh) * | 2011-04-20 | 2012-11-28 | 上海交通大学 | 基于训练自适应增强和支持矢量机的目标识别方法 |
US9442723B2 (en) * | 2012-12-28 | 2016-09-13 | Intel Corporation | Method and apparatus for integral image computation instructions |
-
2012
- 2012-12-28 US US13/730,665 patent/US9442723B2/en active Active
-
2013
- 2013-06-18 CN CN201380062173.XA patent/CN105359052B/zh not_active Expired - Fee Related
- 2013-06-18 KR KR1020177008223A patent/KR101814356B1/ko active IP Right Grant
- 2013-06-18 KR KR1020157013891A patent/KR101722346B1/ko active IP Right Grant
- 2013-06-18 WO PCT/US2013/046412 patent/WO2014105137A1/en active Application Filing
- 2013-06-18 DE DE112013005236.9T patent/DE112013005236T5/de not_active Withdrawn
-
2016
- 2016-09-13 US US15/264,572 patent/US9766897B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7565019B2 (en) * | 2005-03-29 | 2009-07-21 | Shenzhen Mindray Bio-Medical Electronics Co., Ltd. | Method of volume-panorama imaging processing |
US20080252717A1 (en) * | 2007-04-12 | 2008-10-16 | Samsung Electronics Co., Ltd. | Method for photographing panoramic image |
US20120166761A1 (en) * | 2010-12-22 | 2012-06-28 | Hughes Christopher J | Vector conflict instructions |
US20120260061A1 (en) * | 2011-04-04 | 2012-10-11 | Arm Limited | Data processing apparatus and method for performing vector operations |
Also Published As
Publication number | Publication date |
---|---|
CN105359052A (zh) | 2016-02-24 |
US20140189291A1 (en) | 2014-07-03 |
DE112013005236T5 (de) | 2015-08-06 |
KR101722346B1 (ko) | 2017-03-31 |
WO2014105137A1 (en) | 2014-07-03 |
KR20170037685A (ko) | 2017-04-04 |
US20170132012A1 (en) | 2017-05-11 |
CN105359052B (zh) | 2018-06-12 |
KR20150101994A (ko) | 2015-09-04 |
US9442723B2 (en) | 2016-09-13 |
US9766897B2 (en) | 2017-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101814356B1 (ko) | 적분 이미지 계산 명령어를 위한 방법 및 장치 | |
KR101817034B1 (ko) | 반복 종속 조건을 갖는 반복들의 벡터 루프들을 구현하기 위한 명령어 | |
KR101938290B1 (ko) | 히스토그램을 결정하기 위한 명령어 | |
JP6274672B2 (ja) | 装置および方法 | |
CN109471659B (zh) | 使用写掩码将两个源操作数混合进单个目的地的系统、装置和方法 | |
KR101776227B1 (ko) | 슬라이딩 윈도 인코딩 알고리즘들을 위한 명령어들 | |
CN107273095B (zh) | 用于对齐寄存器的系统、装置和方法 | |
US9792115B2 (en) | Super multiply add (super MADD) instructions with three scalar terms | |
CN107111489B (zh) | 莫顿坐标调整处理器、方法、系统和指令 | |
KR101818985B1 (ko) | 마스킹된 결과 요소들로의 전파를 이용하여 소스 요소들을 대응하는 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어 | |
WO2012134558A1 (en) | Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location | |
KR20170097626A (ko) | 벡터 인덱스 로드 및 저장을 위한 방법 및 장치 | |
CN109313553B (zh) | 用于跨步加载的系统、装置和方法 | |
KR20170065585A (ko) | 사차원 모턴 좌표 변환 프로세서, 방법, 시스템 및 명령어 | |
JP2018506094A (ja) | 多倍長整数(big integer)の算術演算を実行するための方法および装置 | |
KR101826707B1 (ko) | 마스킹된 결과 요소들로의 전파를 이용하여 연속 소스 요소들을 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어 | |
CN109643235B (zh) | 用于多源混合操作的装置、方法和系统 | |
KR20170059477A (ko) | 3d 좌표들로부터 3d z-곡선 인덱스를 계산하는 머신 레벨 명령어들 | |
CN114721624A (zh) | 用于处理矩阵的处理器、方法和系统 | |
KR20170097613A (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 |