KR20150102967A - 히스토그램을 결정하기 위한 명령어 - Google Patents

히스토그램을 결정하기 위한 명령어 Download PDF

Info

Publication number
KR20150102967A
KR20150102967A KR1020157013957A KR20157013957A KR20150102967A KR 20150102967 A KR20150102967 A KR 20150102967A KR 1020157013957 A KR1020157013957 A KR 1020157013957A KR 20157013957 A KR20157013957 A KR 20157013957A KR 20150102967 A KR20150102967 A KR 20150102967A
Authority
KR
South Korea
Prior art keywords
instruction
vector
input vector
field
elements
Prior art date
Application number
KR1020157013957A
Other languages
English (en)
Other versions
KR101794802B1 (ko
Inventor
시흐 시그종 쿠오
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20150102967A publication Critical patent/KR20150102967A/ko
Application granted granted Critical
Publication of KR101794802B1 publication Critical patent/KR101794802B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask

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 Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

명령어 실행 파이프라인의 기능 유닛을 갖는 프로세서가 설명된다. 기능 유닛은 비교 뱅크 회로와 가산기 회로를 갖는다. 비교 뱅크 회로는 제2 입력 벡터의 요소와 대조하여 제1 입력 벡터의 하나 이상의 요소들을 비교하기 위한 것이다. 가산기 회로는 비교 뱅크 회로에 결합되어, 제1 입력 벡터의 요소별로 제1 입력 벡터의 값에 매칭되는 제2 입력 벡터의 요소들의 수를 가산하기 위한 것이다.

Description

히스토그램을 결정하기 위한 명령어{INSTRUCTION FOR DETERMINING HISTOGRAMS}
본 발명은 일반적으로 컴퓨팅 시스템에 관한 것으로, 특히 히스토그램을 결정하기 위한 명령어에 관한 것이다.
도 1은 반도체칩 상에서 로직 회로로 구현되는 프로세싱 코어(100)의 하이 레벨 도를 도시한다. 프로세싱 코어는 파이프라인(101)을 포함한다. 파이프라인은 각각이 프로그램 코드 명령어를 완전히 실행하는데 필요한 다단계 프로세스에서 특정 단계를 수행하도록 설계되는 다수의 스테이지로 이루어져 있다. 이들은 전형적으로 적어도 다음의 스테이지들을 포함한다: (1) 명령어 페치 및 디코드; (2) 데이터 페치; (3) 실행; (4) 후기입(write-back). 실행 스테이지는 동일한 명령어에 의해 식별되고 이전의 스테이지(예컨대, 상기 단계(2))에서 페치된 데이터에 대해 다른 이전의 스테이지(들)(예컨대, 상기 단계(1))에서 페치되고 디코딩된 명령어에 의해 식별된 특정 연산을 수행한다. 연산되는 데이터는 전형적으로(범용) 레지스터 저장 공간(102)으로부터 페치된다. 연산의 완료시에 생성되는 새로운 데이터는 또한 전형적으로(예컨대, 상기 스테이지(4))에서) 레지스터 저장 공간에 "후기입"된다.
실행 스테이지와 연관된 로직 회로는 전형적으로 다수의 "실행 유닛" 또는 "기능 유닛"(103_1 내지 103_N)으로 이루어져 있고, 이들 각각은 그 자신의 고유한 연산들의 서브세트를 수행하도록 설계된다(예컨대, 제1 기능 유닛은 정수 수학 연산을 수행하고, 제2 기능 유닛은 부동 소수점 명령어를 수행하며, 제3 기능 유닛은 캐시/메모리로부터/로 로드/저장 연산을 수행하고, 기타 등등). 모든 기능 유닛들에 의해 수행되는 모든 연산들의 모음은 프로세싱 코어(100)에 의해 지원되는 "명령어 세트"에 대응한다.
프로세서 아키텍처들의 2가지 유형들이 컴퓨터 과학 분야에서 널리 인지된다: "스칼라" 및 "벡터". 스칼라 프로세서는 단일 데이터 세트에 대해 연산을 수행하는 명령어를 실행하도록 설계되고, 반면에, 벡터 프로세서는 다수의 데이터 세트에 대해 연산을 수행하는 명령어를 실행하도록 설계된다. 도 2a 및 2b는 스칼라 프로세서와 벡터 프로세서 사이의 기본적인 차이를 입증하는 비교예를 나타낸다.
도 2a는 단일 피연산자 세트 A 및 B가 함께 AND 연산되어, 단일(또는 "스칼라") 결과 C(즉, AB=C)를 생성하는 스칼라 AND 명령어의 일례를 나타낸다. 이와 달리, 도 2b는 2개의 피연산자 세트 A/B 및 D/E가 각각 AND 연산되어, 벡터 결과 C, F(즉, A.AND.B=C 및 D.AND.E=F)를 생성하는 벡터 AND 명령어의 일례를 나타낸다. 용어로서, "벡터"는 다수의 "요소"를 갖는 데이터 요소이다. 예를 들어, 벡터 V = Q, R, S, T, U는 5개의 상이한 요소: Q, R, S, T 및 U를 갖는다. 예시적인 벡터 V의 "사이즈"는 5이다(이는, 5개의 요소를 갖기 때문임).
도 1은 또한, 범용 레지스터 공간(102)과는 다른 벡터 레지스터 공간(104)의 존재를 나타낸다. 구체적으로, 범용 레지스터 공간(102)은 명목상 스칼라 값을 저장하는데 사용된다. 이에 따라, 실행 유닛들 중 임의의 유닛이 스칼라 연산을 수행할 때, 이들은 명목상 범용 레지스터 저장 공간(102)으로부터 호출되는 피연산자를 사용한다(그리고 결과를 여기에 후기입한다). 이와 달리, 실행 유닛들 중 임의의 유닛이 벡터 연산을 수행할 때, 이들은 명목상 벡터 레지스터 공간(107)으로부터 호출되는 피연산자를 사용한다(그리고 결과를 여기에 후기입한다). 메모리의 상이한 영역들이 마찬가지로 스칼라 값 및 벡터 값의 저장을 위해 할당될 수 있다.
또한, 기능 유닛(103_1 내지 103_N)으로의 각자의 입력 및 그로부터의 출력에 마스킹 로직(104_1 내지 104_N 및 105_1 내지 105_N)이 존재하는 것에 유의한다. 상이한 구현에서, 이들 계층 중 하나만이 실제로 구현된다 - 비록 이것은 엄격한 요건은 아니지만. 마스킹을 이용하는 임의의 명령어에 대해, 입력 마스킹 로직(104_1 내지 104_N) 및/또는 출력 마스킹 로직(105_1 내지 105_N)은 어느 요소들이 벡터 명령어에 대해 효과적으로 연산되는 지를 제어하기 위해 사용될 수 있다. 여기서, 마스크 벡터는(예컨대, 벡터 레지스터 저장 공간(107)으로부터 판독된 입력 데이터 벡터와 함께) 마스크 레지스터 공간(106)으로부터 판독되고, 마스킹 로직(104, 105) 계층들 중 적어도 하나에 제시된다.
벡터 프로그램 코드를 실행하는 동안, 각각의 벡터 명령어는 전체 데이터 워드를 요구할 필요가 없다. 예를 들어, 일부 명령어를 위한 입력 벡터들은 단지 8개 요소일 수 있고, 다른 명령어를 위한 입력 벡터들은 16개 요소일 수 있으며, 다른 명령어를 위한 입력 벡터들은 32개 요소일 수 있고, 이하 등등. 따라서, 마스킹 계층(104/105)은, 명령어들에 걸쳐 상이한 벡터 사이즈들에 영향을 미치도록 특정 명령어에 적용되는 전체 벡터 데이터 워드의 요소들의 세트를 식별하는데 사용된다. 통상적으로, 각각의 벡터 명령어마다, 특정 벡터 연산에 대한 올바른 요소들의 세트를 "인에이블"시키기 위해, 마스크 레지스터 공간(106)에 유지되는 특정 마스크 패턴이 명령어에 의해 호출되고, 마스크 레지스터 공간으로부터 페치되며, 마스크 계층(104/105)들 중 어느 하나 또는 둘 다에 제공된다.
현재 이용 가능한 벡터 명령어 PCMPxESTy는 다른 입력 벡터의 요소와 대조하여 제1 입력 벡터의 요소에 대한 상이한 비교 "집계" 기능을 수행할 수 있다. PCMPxESTy 명령어의 출력 결과는 명령어에 의해 실행된 비교들의 결과를 보여주는 마스크 벡터이다. 특별한 PCMPxESTy 명령어에 의해 실행될 특별한 집계 기능은 PCMPxESTy 명령어 포맷 내에 즉시 피연산자(immediate operand)의 값에 의해 지정된다. 지원된 집계 기능은 "Equal each", "Equal any", "Ranges" 및 "Equal ordered"을 포함하고, 바로 아래에 기술된다. 수치상 비교들을 수행할 수 있을지라도, PCMPxESTy 명령어는 텍스트 정보의 처리를 지원하기 위해 부분적으로 개발되었다. 이에 따라, 입력 "vectors"은 종종 텍스트 문자 "strings"으로 지정된다.
Equal each(imm[3:2] = 10). 이 연산은 2개의 문자열의 동일한 위치에 지정된 요소를 비교한다. 비교의 결과는 1 비트 마스크이다(대응하는 바이트가 동일하면 1, 동일하지 않으면 0). 예를 들면:
operand1 = "UseFlatAssembler"
operand2 = "UsingAnAssembler"
Intermediate Result(IntRes1) = 1100000111111111
Equal any(imm[3:2] = 00). 제1 피연산자는 문자 세트이고, 제2 피연산자는 문자열이다. 비트 마스크는, 문자가 세트에 속하면 1을, 속하지 않으면 0을 포함한다:
operand2 = "You Drive Me Mad", operand1 = "aeiouy"
IntResl = 0110001010010010
Equal Range(imm[3:2] = 01). 제1 피연산자는 범위로 구성되는데, 예를 들어, "azAZ"는 "a부터 z까지의 모든 문자와 A부터 Z까지의 모든 문자"를 의미한다:
operand2 = "I'm here because", operand1 = "azAZ"
IntResl = 1010111101111111
Equal ordered(imm[3:2] = 11). 하위 문자열 검색. 제1 피연산자는 검색할 문자열(a string to search for)을 포함하고, 제2 피연산자는 검색 대상 문자열(a string to search in)을 포함한다. 비트 마스크는, 하위 문자열이 해당 위치에서 발견되면, 1을 포함한다:
operand2 = "WhenWeWillBeWed!", operand1 = "We"
IntResl = 000010000000100
집계 기능을 계산한 후, IntResl는 보충되고 바이트 마스크로 확장되거나 비트 마스크로서 제시될 수 있다. 결과는 벡터 레지스터 공간에 기입된다.
예시적인 히스토그램은 도 3에서 관찰된다. 도 3에서 관찰된 바와 같이, 수평축은 세그먼트((301_1 내지 301_N)로 분할되는데, 여기서 각 세그먼트는 수치 범위 또는 "빈(bin)"에 해당한다. 예를 들어, 각 세그먼트는 상이한 중량 범위에 해당할 수 있다(예를 들어, 빈 301_1 = 90 파운드 미만; 301_2 = 91 파운드 내지 110 파운드; 301_3 = 111 파운드 내지 130 파운드 등). 수평축은 각각의 빈 내에 인구 수에 대응한다. 예를 들어, 100명의 성인 남성의 체중이 수평축의 빈 내에 맵핑되었다면, 100명의 남성 중 각각의 빈의 범위 내에 있는 남성의 수를 나타내는 히스토그램 형상(300)이 나타날 것이다(예를 들어, 빈 301_1에는 0명의 남성; 빈 301_2에는 1명의 남성; 빈 301_3에는 2명의 남성, 등).
본 발명은 예로서 설명되는 것이고, 유사한 참조번호는 유사한 요소를 지칭하는 첨부된 도면들에 한정되는 것이 아니다.
도 1은 명령어 실행 파이프라인을 도시한다;
도 2a 및 2b는 벡터 처리와 관한 것이다;
도 3은 히스토그램을 도시한다;
도 4a, 4b 및 4c는 PRNGCMP 명령어의 상이한 측면들을 도시한다;
도 5a-d는 PRGNCMP 명령어를 위한 상이한 기능 유닛 디자인들을 도시한다;
도 6a는 본 발명의 실시 형태에 따른 일반 친벡터 명령어 포맷 및 이의 클래스 A 명령어 템플릿을 예시하는 블록도이다.
도 6b는 본 발명의 실시 형태에 따른 일반 친벡터 명령어 포맷 및 이의 클래스 B 명령어 템플릿을 나타내는 블록도이다.
도 7a-c는 본 발명의 실시 형태에 따른 예시적 특정한 친벡터 명령어 포맷을 설명하는 블록도이다.
도 8은 본 발명의 한 실시 형태에 따른 레지스터 아키텍처의 블록도이다.
도 9a는 본 발명의 실시 형태에 따른, 온-다이 상호 접속 네트워크로의 접속 및 레벨 2(L2) 캐시의 그 로컬 서브세트와 함께, 단일 CPU 코어를 도시하는 블록도이다.
도 9b는 본 발명의 실시 형태에 따른 도 9a의 CPU 코어의 일부의 확대도이다.
도 10은 본 발명의 실시 형태에 따른 예시적 비순차 아키텍처를 설명하는 블록도이다.
도 11은 본 발명의 한 실시 형태에 따른 시스템의 블록도이다.
도 12는 본 발명의 한 실시 형태에 따른 제2 시스템의 블록도이다.
도 13은 본 발명의 한 실시 형태에 따른 제3 시스템의 블록도이다.
도 14는 본 발명의 한 실시 형태에 따른 SoC의 블록도이다.
도 15는 본 발명의 실시 형태에 따른 통합 메모리 컨트롤러 및 그래픽을 갖는 싱글 코어 프로세서 및 멀티코어 프로세서의 블럭도이다.
도 16은 본 발명의 실시 형태에 따라, 소스 명령어 세트 내의 바이너리 명령어들을 타겟 명령어 세트 내의 바이너리 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블럭도이다.
도 4a는 히스토그램을 생성하기 위해 이용될 수 있는 새로운 명령어 PRNGCMP에 의해 실행되는 프로세스를 도시한다. PRNGCMP 명령어의 연산은 PCMPxESTy 명령어를 기반으로 한다. 그러나, PRNGCMP 명령어는 구성 요소들이 마스크보다 오히려 빈 내의 카운트들에 해당하는 벡터 결과를 제공한다. 도 4a에서 관찰된 바와 같이, 명령어는, 구성 요소들이 빈 범위에 해당하는 벡터를 제1 입력 피연산자로서 수용하고(401), 빈될(binned) 각각 모집단 유닛들에 대한 복수의 값들에 해당하는 벡터를 제2 피연산자로서 수용한다(402). 예를 들어, 도 3의 예에 이어서, 입력 벡터(401)의 상이한 요소들은 히스토그램의 상이한 빈 범위들에 해당하고(예를 들어, 제1 요소 = 0 내지 90 lbs; 제2 요소 = 91 내지 110 lbs; 제3 요소 = 111 내지 130 lbs; ... ); 그리고, 입력 벡터(402)의 상이한 요소들은 상이한 남성들 각각의 체중에 해당한다(예를 들어, 제1 요소 = 남성 #1의 체중; 제2 요소 = 남성 #2의 체중; 제3 요소 = 남성 #3의 체중; ... 기타 등등).
그 다음, 명령어는 제1 입력 벡터의 각각의 요소와 대조하여 제2 입력 벡터(402)의 각각의 요소의 비교(403)에 해당하는 집계 기능을 수행하기 시작한다. 도 4a에서 관찰된 바와 같이, 한 실시 형태에 따르면, 예를 들어, 마이크로-코드 제어하에서, 명령어는 제2 입력 벡터의 각각의 요소마다 "루프"되도록 설계된다. 그러므로, 제1 루프를 위해, 입력 벡터(402)의 제1 요소(예를 들어, 남성 #1의 체중)는, 입력 벡터(401)의 각각의 요소(히스토그램의 상이한 중량 빈)와 대조하여 비교된다. 간단한 히스토그램의 경우에는, 수평축 빈들 사이에 오버랩은 없고 기껏해야 하나의 매치(match)가 있을 것이다.
도 4a의 예시적 묘사에서, 제2 입력 벡터의 제1 요소는 제1 입력 벡터의 제3 요소에 해당하는 빈에 포함된다. 비교로부터의 결과들이 카운트를 보여주는 중간 벡터(450)는 제3 빈에 대해서는 1이고 다른 빈들에 대해서는 0이다.
각각 후속의 루프는 제2 입력 벡터에서의 다음 요소에 대해 동일한 프로세스를 수행한다. 특히, 각각의 루프의 비교의 결과는, 이전 루프들의 각각의 중간 벡터(404)에 걸쳐 합에 가산된다. 따라서, 중간 벡터합은 각각의 루프의 각각의 빈에 대한 카운트를 누산하는 누산기처럼 작용한다. 예를 들어, 입력 벡터(402)의 제2 요소 또한 제3 빈 내에 있는 경우에, 중간 벡터합(404)의 제3 요소는 제2 루프의 결말에서 2의 값을 포함할 것이다. 제2 입력 벡터(402)의 모든 요소들이 분석되면(모든 루프들이 완성되면), 누산기/중간 벡터는 전체 입력 벡터 세트(405)에 대한 각각의 빈에 대한 카운트를 보유한다. 이 시점에서, 중간 벡터합은 명령어(406)에 대한 결과로서 제공된다.
다중 PRNGCMP 명령어는, 어떤 특별한 히스토그램을 위해 분석될 모집단의 사이즈와 빈들의 수 양쪽을 스케일링하기 위해 실행될 수 있다. 예를 들어, 벡터 처리 하드웨어 로직이 단지 8의 최대 입력 벡터 피연산자 사이즈를 예상하고, 그리고, 1024의 모집단 사이즈에 대해 128 빈들을 갖는 히스토그램이 요구되면, 완전한 히스토그램은 16 x 128 = 2,048 PRNGCMP 명령어에 의해 계산될 수 있다. 여기에서, 128/8 = 16 명령어는 128로 빈들의 수를 스케일링시킬 필요가 있고, 2048/8 = 128 명령어는 2048의 사이즈로 모집단을 스케일링시킬 필요가 있다. 바꾸어 말하면, 8개의 요소의 16 벡터들 각각은 효과적으로 64 히스토그램 빈들을 형성할 필요가 있게 되고, 각각의 요소의 128 벡터들 각각은 효과적으로 사이즈 1024의 모집단을 생성할 필요가 있게 된다. 16 빈 벡터들 각각은 128 PRNGCMP 명령어(제2 입력 벡터로서 사용된 각각의 모집단 벡터에 대한 하나의 명령어)의 자체의 각 세트에 대한 제1 입력 벡터로서 사용된다.
도 4b는 좀 더 일반적으로 구조를 묘사한다. 도 4b에서 관찰된 바와 같이, 모든 바람직한 빈들을 생성하는데 X 제1 입력 벡터(411_1 내지 411_X)가 필요하고, 전체 모집단을 생성하는 데는 Y 제2 입력 벡터(412_1 내지 412_Y)가 필요하다. 바로 이전에 논의된 예에서, X = 16 및 Y = 128이다. 각각의 제1 입력 벡터(411_1, 411_2,... 411_X)는, 제1 입력 벡터 중 제1 411_1에 대한 X PRNGCMP 명령어(420_1, 420_2,... 420_X)의 세트(430)를 형성하기 위해 모든 제2 입력 벡터(412_1, 412_2... 412_Y)에 대하여 PRNGCMP 명령어에 의해 실행된다. 각각의 명령어의 결과는, 동일한 세트의 빈들에 대한 중간값 합의 누적 특성을 이월하기 위해 다음 세트에서 "동일 위치" 명령어의 중간 벡터합의 초기값으로서 이월된다.
예를 들어, 제1 세트(420_1)의 제1 명령어의 결과가 (1,0,2,3,0,0,0,2)이고, 다음 세트(420_X+1)의 제1 명령어가 제2 입력 벡터(412_2)에 대한 (0,0,1,2,1,1,0,3)의 비교 카운트를 생성하면, 명령어(420_X+1)의 결과는 2개의 벡터의 합(1,0,3,5,1,1,0,5)일 것이다. 빈들의 세트에 대한 히스토그램의 카운트가 완료되는 지점에서 모든 Y 제2 입력 벡터들이 처리될 때까지 누적의 이월은 동일한 세트의 빈들에 대해서 계속된다. 각각의 X 제1 입력 벡터들 각각에 대해 동일 프로세스를 따른다. 특히, 중간 벡터합은 공간 벡터 레지스터에 저장될 수 있고, 이후에 동일한 세트의 빈들(동일한 제1 입력 벡터)에 대한 다음 명령어에 대해 입력 중간값 합으로 사용하기 위해 판독될 수 있다. 중간 벡터합에 대한 초기값은 제1 세트(430)의 명령어에 대해 널 벡터(null vector)로 설정된다.
PRNGCMP 명령어가 중간값 합 입력 피연산자를 수용하고 가산하도록 설계되지 않으면, 바로 앞선 PRNGCMP 명령어의 결과가 2개의 PRNGCMP 명령어 사이에 위치한 벡터 ADD 명령어의 개입으로 동일한 빈 세트에 대한 바로 다음의 PRNGCMP 명령어의 결과에 가산될 수 있다는 것에 유의한다.
도 4c는 PRNGCMP 명령어에 대한 예시적 명령어 포맷(440)을 나타낸다. 특히, PRNGCMP 명령어로서 명령어를 식별하는 연산 코드(opcode) 외에, 명령어 포맷(440)은 3개의 입력 피연산자(441, 442 및 443)와 즉시 피연산자(444)를 특정한다. 필드 특정 입력 피연산자(441)는 초기 중간 벡터합이 위치한 벡터 레지스터 위치 Rl을 식별한다. 상술한 바와 같이, 초기 중간 벡터합 값은 명령어의 최종 결과를 결정하기 위해 제1 벡터와 제2 벡터 사이의 비교의 결과에 가산된다.
도 4c의 특별한 명령어 실시 형태에서, 명령어의 결과는 또한, 중간 벡터합(441)을 위해 특정된 동일 레지스터 위치 Rl에 기입된다. 다음의 입력 피연산자 필드(442)는 히스토그램에 대한 빈 정의를 포함하는 제1 입력 벡터가 위치하고 있는 벡터 레지스터 위치 R2를 식별하고, 다음의 입력 피연산자 필드(443)는 모집단 유닛들을 포함하는 제2 입력 벡터가 위치하고 있는 벡터 레지스터 또는 시스템 메모리 위치 R3/MEM을 식별한다.
실시 형태에서, 즉시 피연산자 필드(444)는 실행될 명령어의 상이한 특정 특징을 최대 4개까지 특정하기 위해 인코딩된다. 특히, 중간 피연산자(444)의 제1 필드는 수행될 비교의 유형을 특정하고(집계 동작), 제2 필드는 중간 및 제2 입력 벡터들의 치수들을 특정하고(예를 들면, 각 바이트당 16 요소 또는 2 바이트당 8 요소) 그리고 요소들이 서명되는 지의 여부를 특정하고, 제3 필드는 결과 요소들이 그들 각각의 벡터 위치에서 좌우로 정렬되는 지의 여부를 특정한다. 또 다른 실시 형태에서, 2가지 유형의 집계 기능들이 특정될 수 있다: "equal range" 또는 "equal any". "equal range"의 경우에, 2개 값들은 단일의 벡터 요소 위치에 팩킹된다. 예를 들어, 제1 입력 벡터가 8개의 상이한 빈들을 특정하기 위한 것이라면, 입력 벡터는 16개의 상이한 값들을 갖게 된다. 여기에서, 각각의 빈은 제1 입력 벡터에서의 한 쌍의 값들에 의해 규정되는데, 상기 한 쌍 중 하나는 범위의 상한을 특정하고, 상기 쌍 중 다른 하나는 하한을 특정한다. "equal any"의 경우에, 각각의 빈은 범위보다 오히려 스칼라로 규정되어서 단지 하나 값만이 빈을 특정하기 위해 제1 벡터에 필요하다. 여기에서, 예를 들어, "equal any" 모드는 "equal range"보다는 좀 더 입상화된(granularized) 히스토그램들을 만드는데 사용될 수 있다. 예를 들어, 단일 파운드 단위(120 lbs, 121 lbs, 122 lbs,... )로 빈된(binned) 히스토그램은 파운드 범위(120 - 139 lbs; 140 - 159 lbs;,.... 기타 등등)를 구현하는데 사용될 "equal range"와는 대조적으로 "equal any"으로 구현될 수 있다.
추가적 실시 형태들에서, 연산 코드 또는 중간값(444)은, 제1, 제2 및/또는 중간 벡터들의 요소(정수, 부동 소수점, 문자)들의 데이터 포맷, 및/또는, 제1 및 중간 입력 벡터들, 및 제2 입력 벡터의 각각 사이즈들을 특정할 수도 있다. 벡터 사이즈들에 관하여, 다수의 빈을 특정하는 제1 입력 벡터(및 중간 벡터)가 모집단 값들을 가지고 있는 제2 입력 벡터와 동일한 사이즈일 필요가 없다는 것에 주목한다.
대안적 실시 형태는 초기 중간 벡터합 값을 입력 피연산자로서 수용하지 않는다. 이 실시 형태에서, 필드(441)에 의해 식별된 레지스터는 바로 결과 수신지에 해당하고, 입력 피연산자를 보유하는 것으로서 고려되지 않는다.
도 5a는 PRNGCMP 명령어를 수행하도록 설계된 기능 유닛(500)에 대한 아키텍처를 도시한다. 도 5a에서 관찰된 바와 같이, 기능 유닛은 앞선 멀티플렉서(504)와 함께 비교기 회로 뱅크(505)를 가지고 있다. 비교기 뱅크의 각각의 비교기 회로의 하나의 입력은 제1 입력 벡터 레지스터(501)로부터 그 자체의 정렬된 각각의 입력을 수용한다. 이러한 입력은 레지스터(501)에 보유된 제1 입력 벡터에서 식별된 각각의 빈에 대한 빈 정의에 해당된다. "equal any"의 경우에, 각각의 입력은 하나의 값을 나르고, 각각의 비교기 회로는 각각의 빈 위치에 대한 하나의 비교 기능을 구현한다. 동일한 머신 사이클에서, 멀티플렉서 회로(504)는 레지스터(502)의 제2 입력 벡터로부터 특별한 모집단 값을 선택하여, 비교기 뱅크(505)의 각각의 비교기에 제공하도록 구성된다.
이에 따라, 한 실시 형태에 따르면, 동일한 머신 사이클에서, 단일의 모집단 값이 제1 입력 벡터에 의해 규정된 모든 빈들에 대해서 동시에 스크리닝된다. 가장 간단한 경우에서, 단지 하나의 비교기 회로만이 매치(match)를 식별하게 된다. 이에 따라, 가장 간단한 경우에서, 비교기 회로로부터의 출력 결과는, 하나를 제외하고 동일한 로직 값들을 갖는 벡터와 비슷하게 된다. 예를 들어, 모집단 값이 좌측으로부터의 제3 빈과 매칭되면, 비교기 뱅크 회로(505)는 다음과 같은 벡터를 생성할 수 있다: 0010... 0. ROM(507)에 저장된 마이크로코드는, 제1 루프에서, 레지스터(508)에 기입되는 벡터 가산기(506)로부터의 결과가 비교기 뱅크(505)로부터의 출력과 매칭되도록, 널 벡터로 레지스터(508)의 콘텐츠를 초기화한다. 그 다음, ROM(507)으로부터의 마이크로코드는 다음 루프를 초기화하고, 멀티플렉서(504)가 레지스터(502)의 제2 입력 벡터로부터 다음의 모집단 값을 선택하게 한다. 가산기(506)는 이전의 비교의 누적(합)과의 가장 최근 비교를 가산한다. 루핑은, 누적된 결과가 중간 레지스터(508)에 존재하는 지점에서 제2 입력 벡터의 각각의 요소가 처리 완료될 때까지 계속된다(ROM(507)의 마이크로코드가 또한 각각의 루프를 이용하여 레지스터(508)의 래칭을 제어한다). 그 다음, 중간값 결과는, 가산기(509)에 의해 (입력 피연산자 레지스터(503)로부터의) 초기 벡터합 입력 피연산자에 가산되어, 명령어 결과를 생성한다. 실시 형태에서, 결과는 레지스터(503)의 초기 중간 벡터합 입력 피연산자를 덮어 쓴다.
처리는 2개의 값이 레지스터(501)의 제1 입력 벡터로부터 비교기 뱅크(504)의 그들의 상응하는 빈 비교 회로로 라우팅되는 것을 제외하고, "equal range" 모드에 대해 상술한 바와 같이 동일하다. 임의의 단일 빈을 위한 비교 회로는 2개의 비교기를 포함할 수 있다: 모집단 값이 하한보다 높은지를 결정하는 제1 비교기, 및 모집단 값이 상한 이하인지를 결정하는 제2 비교기. 양쪽 비교들이 "true"을 생성하는 경우에만, 해당 빈에 대한 비교 회로가 해당 빈에 대한 매치를 나타낸다.
특히, 임의의 입력 레지스터(501, 502)와 입력/결과 레지스터(503)는, 코드에 의해 특정적으로 호출된 벡터 레지스터 공간, 또는 기능 유닛을 가지고 있는 파이프라인 내부에 있는 레지스터에 해당할 수 있다(예를 들어, 레지스터(501, 502)가, 프로그램 코드에 의해 호출된 벡터 레지스터 공간의 레지스터로부터 입력 피연산자를 수신하는 데이터 페치 스테이지 또는 기능 유닛 내의 레지스터에 해당할 수 있다).
다른 실시 형태에 있어서, 초기 중간값은 입력 피연산자로서 수용되지 않는다. 이 경우에, 레지스터(503)로부터 가산기 회로(506)의 입력으로의 배선은 존재하지 않는다.
도 5b는 PRNGCMP 명령어를 구현시키기 위한 기능 유닛(510)의 또 다른 실시 형태를 도시한다. 도 5b의 방식은 루프를 이용하지 않고, 그 대신 단일 시퀀스로 명령어의 모든 값들을 특정적으로 계산한다. 통상의 지식을 가진 자들은, 도 5b의 방식이 실리콘 표면적을 희생하여 성능을 강조하는 반면, 도 5a의 방식은 성능을 희생하여 실리콘 표면적을 살리는 것을 강조함을 인식하게 된다. 특히, 도 5b의 방식은 멀티플렉서를 필요로 하지 않고, 그의 가산 회로 스테이지는 단지 하나보다는 오히려 제2 벡터의 각각의 요소에 대한 입력을 수용하는 가산기를 갖는다.
통상의 지식을 가진 자들은 또한, 도 5a 및 5b의 방식들 간의 하이브리드 방식이, 성능과 실리콘 표면적 효율에 대한 혼합된 강점을 갖도록 설계할 수 있게 된다.
도 5c는 PRNGCMP 명령어를 실행할 수 있을 뿐만 아니라, PCMPxESTy 명령어를 실행할 수 있는 추가 대안적 기능 유닛 실시 형태들을 도시한다. 특히, 이들 대안적 기능 유닛 실시 형태들은, 데이터 흐름을 가산기 회로를 통하게 하거나, 또는, 가산기 회로 주위로 그것을 우회하게 하는 스위치 회로를 포함한다. 여기에서, 명령어의 연산 코드 필드가 PRNGCMP 명령어를 생성하도록 디코딩될 때, 스위치 회로는 가산기 회로를 통하여 데이터 흐름을 강제하도록 구성되고, 반면에, 명령어의 연산 코드 필드가 PCMPxESTy 명령어를 생성하도록 디코딩될 때, 스위치 회로는 비교기 뱅크로부터의 데이터 흐름이 가산기 회로를 우회하도록 구성된다.
상기 논의가 단일 연산에서 제1(빈 정의) 입력 벡터의 다중 요소들과 대조하여 단일의 모집단 요소를 비교하는 것에 관한 것일지라도, 다중 모집단 요소들이 단일 연산에서 단일(빈 정의) 요소와 대조하여 비교되는 대안적 방식이 취해질 수 있다. 도 5d는 이러한 방식의 기능 유닛 구조의 실시 형태를 제공한다. 여기에서, 제1 입력 벡터로부터의 단일 빈 정의 요소는 비교 회로로 팬 아웃(fanned out)되고, 그 비교의 결과는 다중 입력 가산기에 의해 합계되어, 그 결과를, 특별히 선택된 빈 요소에 대한 최종 합계 스칼라로 "팬-인(fan-in)"시킨다. 그 다음, 스칼라는 합성 벡터의 적절한 요소 위치에 라우팅된다. 마이크로코딩된 루프들이 구현되는 것이라면, 멀티플렉서들은 정확한 빈 요소를 비교 뱅크에 라우팅하고, 가산기 결과를 정확한 합성 벡터 요소 위치에 라우팅하기 위해 레벨 XXX, YYY에 배치될 수 있다. 추가적 실시 형태에 있어서, 가산기 회로는 바로 위에서 기술된 것처럼, PCMPxESTy 명령어를 수행하기 위해 우회될 수 있다.
전술된 명령어(들)의 실시 형태는 후술되는 "일반 친벡터 명령어 포맷"으로 구현될 수 있다. 다른 실시 형태들에서, 이러한 포맷은 이용되지 않고, 다른 명령어 포맷이 이용되지만, 기입 마스크 레지스터, 다양한 데이터 변환(스위즐, 브로드캐스트 등), 어드레싱 등에 관한 이하의 설명은 상기 명령어(들)의 실시 형태들의 설명에 일반적으로 적용가능하다. 추가적으로, 예시적인 시스템, 아키텍처, 및 파이프라인이 이하 상세히 설명된다. 상기 명령어(들)의 실시 형태들은 이러한 시스템, 아키텍처, 및 파이프라인에서 실행될 수 있지만, 이들에 제한되는 것은 아니다.
친벡터 명령어 포맷은 벡터 명령어들에 대해 적절한 명령어 포맷이다(예를 들어, 벡터 연산들에 특정한 특정 필드들이 존재한다). 벡터 및 스칼라 연산 양자 모두가 친벡터 명령어 포맷을 통해 지원되는 실시 형태들이 설명되지만, 대안적인 실시 형태들은 친벡터 명령어 포맷을 통한 벡터 연산들만을 이용한다.
예시적 일반 친벡터 명령어 포맷 - 도 6a-b
도 6a-b는, 본 발명의 실시 형태들에 따른, 일반 친벡터 명령어 포맷 및 그 명령어 템플릿들을 도시하는 블럭도들이다. 도 6a는 본 발명의 실시 형태에 따른, 일반 친벡터 명령어 포맷 및 그의 클래스 A 명령어 템플릿을 나타낸 블록도인 반면; 도 6b는 본 발명의 실시 형태에 따른, 일반 친벡터 명령어 포맷 및 그의 클래스 B 명령어 템플릿을 나타낸 블록도이다. 구체적으로, 양쪽 모두 비-메모리 액세스(605) 명령어 템플릿 및 메모리 액세스(620) 명령어 템플릿을 포함하는 클래스 A 및 클래스 B 명령어 템플릿이 정의되는 일반 친벡터 명령어 포맷(600). 친벡터 명령어 포맷의 정황(context)에서 일반적이라는 용어는, 임의의 특정 명령어 세트에 얽매이지 않는 명령어 포맷을 말한다. 친벡터 명령어 포맷의 명령어가 레지스터(비-메모리 액세스(605) 명령어 템플릿) 또는 레지스터/메모리(메모리 액세스(620) 명령어 템플릿)로부터 소싱되는 벡터에 대해 연산하는 실시 형태가 설명될 것이지만, 본 발명의 대안적 실시 형태는 이들 중 하나만을 지원할 수 있다. 또한, 벡터 명령어 포맷으로 된 로드 및 저장 명령어가 있는 본 발명의 실시 형태가 설명될 것이지만, 대안의 실시 형태는, 그 대신에 또는 그에 추가하여, 벡터를 레지스터 내로 및 레지스터 외부로(예컨대, 메모리로부터 레지스터로, 레지스터로부터 메모리로, 레지스터들 사이에서) 이동시키는 상이한 명령어 포맷으로 된 명령어를 갖고 있다. 게다가, 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 바이트) 데이터 요소 폭)을 갖는 더 많거나, 더 적고 및/또는 상이한 벡터 피연산자 사이즈(예를 들어, 656 바이트 벡터 피연산자)를 지원할 수 있다.
도 6a의 클래스 A 명령어 템플릿은 다음을 포함한다: 1) 비-메모리 액세스(605) 명령어 템플릿 내에는, 비-메모리 액세스, 풀 라운드 제어형 연산(610) 명령어 템플릿과 비-메모리 액세스, 데이터 변환형 연산(615) 명령어 템플릿이 도시되어 있고; 2) 메모리 액세스(620) 명령어 템플릿 내에는, 메모리 액세스, 일시(625) 명령어 템플릿과 메모리 액세스, 비 일시(630) 명령어 템플릿이 도시되어 있다. 도 6b의 클래스 B 명령어 템플릿은 다음을 포함한다: 1) 비-메모리 액세스(605) 명령어 템플릿 내에는, 비-메모리 액세스, 기입 마스크 제어, 부분 라운드(partial round) 제어형 연산(612) 명령어 템플릿과 비-메모리 액세스, 기입 마스크 제어, vsize형 연산(617) 명령어 템플릿이 도시되어 있고; 2) 메모리 액세스(620) 명령어 템플릿 내에는, 메모리 액세스, 기입 마스크 제어(627) 명령어 템플릿이 도시되어 있다.
포맷
일반적 친벡터 명령어 포맷(600)은 도 6a-b에 설명된 순서로 아래 목록화된 다음과 같은 필드들을 포함한다. 상기 논의와 관련하여, 한 실시 형태에서, 도 6a-b 및 도 7에서 하기에 제공된 포맷 세부 사항을 참조하면, 비-메모리 액세스 명령어 유형(605) 또는 메모리 액세스 명령어 유형(620)이 이용될 수 있다. 입력 벡터 피연산자(들)에 대한 어드레스, 및 수신지는 아래 기술된 레지스터 어드레스 필드(644)에서 식별될 수 있다.
포맷 필드(640) - 이러한 필드 내의 특정 값(명령어 포맷 식별자 값)은, 친벡터 명령어 포맷, 및 그에 따라 명령어 스트림 내의 친벡터 명령어 포맷의 명령어의 출현을 고유하게 식별한다. 따라서, 포맷 필드(640)의 콘텐츠는 제1 명령어 포맷의 명령어의 출현을, 다른 명령어 포맷의 명령어의 출현과 구별함으로써, 다른 명령어 포맷을 갖는 명령어 세트 내로의 친벡터 명령어 포맷의 도입을 허용한다. 이와 같이, 이러한 필드는 일반 친벡터 명령어 포맷만을 갖는 명령어 세트에 필요하지 않다는 점에서 선택적이다.
베이스 연산 필드(642) - 그의 콘텐츠는 상이한 베이스 연산을 구별한다. 여기에서 후술하는 바와 같이, 베이스 연산 필드(642)는 연산 코드 필드의 포함하고 및/또는 그의 일부일 수 있다.
레지스터 인덱스 필드(644) - 그의 콘텐츠는, 직접 또는 어드레스 생성을 통해, 레지스터에 있거나 메모리에 있는, 소스 및 수신지 피연산자의 위치를 특정한다. 이들은, PxQ(예를 들어, 32x1012) 레지스터 파일로부터 N 레지스터를 선택하기에 충분한 수의 비트를 포함한다. 한 실시 형태에서, N은 최대 3개의 소스들 및 1개의 수신지 레지스터일 수 있으며, 대안적인 실시 형태들은 더 많거나 더 적은 소스 및 수신지 레지스터를 지원할 수 있다(예를 들어, 이들 소스들 중 하나가 수신지로서도 작용하는 최대 2개의 소스를 지원할 수 있고, 이들 소스들 중 하나가 수신지로서도 작용하는 최대 3개의 소스를 지원할 수 있으며, 최대 2개의 소스 및 1개의 수신지를 지원할 수 있다). 한 실시 형태에서, P=32인 반면, 대안의 실시 형태는 보다 많은 또는 보다 적은 수의 레지스터(예컨대, 16)를 지원할 수 있다. 한 실시 형태에서, Q=1012 비트인 반면, 대안의 실시 형태는 더 많거나 더 적은 비트(예컨대, 128, 1024)를 지원할 수 있다.
수식자 필드(646) - 그의 콘텐츠는 메모리 액세스를 특정하는 일반 벡터 명령어 포맷의 명령어의 출현을, 그렇지 않은 것들과 구별한다; 즉, 비-메모리 액세스(605) 명령어 템플릿과 메모리 액세스(620) 명령어 템플릿 사이를 구별한다. 메모리 액세스 연산들은 메모리 계층 구조에 대해 판독 및/또는 기입하고(일부 경우에, 레지스터 내의 값들을 이용하여 소스 및/또는 수신지 어드레스들을 특정함), 한편, 비-메모리 액세스 연산들은 그렇게 하지 않는다(예를 들어, 소스 및 수신지들은 레지스터들이다). 한 실시 형태에서, 이러한 필드는 또한, 메모리 어드레스 계산을 수행하는 3개의 상이한 방식들 사이에서 선택하지만, 대안적인 실시 형태들은 메모리 어드레스 계산을 수행하는 더 많거나, 더 적거나, 상이한 방식을 지원할 수 있다.
확장 연산 필드(650) - 그의 콘텐츠는 베이스 연산 이외에 다양한 상이한 연산들 중 어느 것을 수행할지를 구별한다. 이러한 필드는 정황(context)을 특정하기 위한 것이다. 본 발명의 한 실시 형태에서, 이러한 필드는 클래스 필드(668), 알파 필드(652), 및 베타 필드(654)로 분할된다. 확장 연산 필드는 2개, 3개 또는 4개의 명령어보다는 단일 명령어에서 공통 그룹의 연산이 수행되게 한다. 하기는, 필요한 명령어의 개수를 줄이기 위해 확장 필드(650)를 이용하는 명령어(그 명명법은 이후에 더 상세히 설명됨)의 몇 가지 예이다.
이전의 명령어 시퀀스 본 발명의 한 실시 형태에 따른 명령어 시퀀스
vaddps ymmO, ymml, ymm2 vaddps zmm0, zmml, zmm2
vpshufd ymm2, ymm2, 0x55
vaddps ymmO, ymml, ymm2
vaddps zmm0, zmml, zmm2{bbbb}
vpmovsxbd ymm2, [rax]
vcvtdq2ps ymm2, ymm2
vaddps ymmO, ymml, ymm2
vaddps zmm0, zmml, [rax]{sint8}
vpmovsxbd ymm3, [rax]
vcvtdq2ps ymm3, ymm3
vaddps ymm4, ymm2, ymm3
vblendvps ymm1, ymm5, ymm1, ymm4
vaddps zmm1{k5}, zmm2, [rax]{sint8}
vmaskmovps ymm1, ymm7, [rbx]
vbroadcastss ymm0, [rax]
vaddps ymm2, ymm0, ymm1
vblendvps ymm2, ymm2, ymm1, ymm7
vmovaps zmm1{k7}, [rbx]
vaddps zmm2{k7}{z}, zmm1,
[rax]{1 to N}
여기서, [rax]는 어드레스 생성에 이용되는 베이스 포인터(base pointer)이고, {}는 데이터 조작 필드(이후에 더 상세히 설명됨)에 의해 특정된 변환 연산을 나타낸다.
스케일 필드(660) - 그의 콘텐츠는 메모리 어드레스 생성을 위해 인덱스 필드의 콘텐츠를 스케일링하는 것을 가능하게 한다(예컨대, 2scale*인덱스+베이스를 사용하는 어드레스 생성의 경우).
변위 필드(662A) - 그의 콘텐츠는 메모리 어드레스 생성의 일부로서 사용된다(예컨대, 2scale*인덱스+베이스+변위를 사용하는 어드레스 생성의 경우).
변위 인자 필드(662B)(변위 필드(662A)를 변위 인자 필드(662B) 바로 위에 병치하는 것은 한쪽 또는 다른 쪽이 사용된다는 것을 나타낸다는 것에 유의함) - 그의 콘텐츠는 어드레스 생성의 일부로서 사용되고; 메모리 액세스의 사이즈(N)로 스케일링될 변위 인자를 특정함 - 여기서, N은 메모리 액세스에서의 바이트의 수이다(예컨대, 2scale*인덱스+베이스+스케일링된 변위를 사용하는 어드레스 생성의 경우). 잉여 하위 비트들(redundant low-order bits)은 무시되고, 따라서, 변위 인자 필드의 콘텐츠는 유효 어드레스를 계산하는 데 이용될 최종 변위를 생성하기 위하여 메모리 피연산자 총 사이즈(N)로 곱해진다. N의 값은 풀 연산 코드 필드(674)(이후에 설명됨)와 이후에 설명되는 데이터 조작 필드(654C)에 기초하여 런타임시에 프로세서 하드웨어에 의해 결정된다. 변위 필드(662A) 및 변위 인자 필드(662B)는 그것들이 비-메모리 액세스(605) 명령어 템플릿에 이용되지 않고 및/또는 상이한 실시 형태들은 둘 중 하나만 구현하거나 또는 아무것도 구현하지 않을 수 있다는 점에서 선택적이다.
데이터 요소 폭 필드(664) - 그의 콘텐츠는 다수의 데이터 요소 폭 중 어느 것이 사용될 것인지를 구별한다(일부 실시 형태들에서, 모든 명령어들에 대해; 다른 실시 형태들에서는, 일부 명령어들에 대해서만). 이러한 필드는 오직 하나의 데이터 요소 폭이 지원되고 및/또는 데이터 요소 폭들이 연산 코드들의 일부 양상을 이용하여 지원되는 경우에는 필요하지 않다는 점에서 선택적이다.
기입 마스크 필드(670) - 그의 콘텐츠는, 각 데이터 요소 위치마다, 수신지 벡터 피연산자 내의 데이터 요소 위치가 베이스 연산과 확장 연산의 결과를 반영하는지를 제어한다. 클래스 A 명령어 템플릿은 병합-기입 마스킹(merging-writemasking)을 지원하는 한편, 클래스 B 명령어 템플릿은 병합- 및 제로화-기입 마스킹 양자 모두를 지원한다. 병합할 때, 벡터 마스크들은 수신지 내의 임의의 세트의 요소들이(베이스 연산 및 증대 연산에 의해 특정된) 임의의 연산의 실행 중에 업데이트로부터 보호될 수 있게 하고; 다른 한 실시 형태에서, 대응하는 마스크 비트가 0을 갖는 경우에 수신지의 각 요소의 이전의 값을 보존할 수 있게 한다. 이와 대조적으로, 제로화할 때, 벡터 마스크들은 수신지 내의 임의의 세트의 요소들이 (베이스 연산 및 증대 연산에 의해 특정된) 임의의 연산의 실행 중에 제로화될 수 있게 하고; 한 실시 형태에서, 수신지의 요소는 대응하는 마스크 비트가 0 값을 가질 때 0으로 설정된다. 이러한 기능의 서브세트는 수행되는 연산의 벡터 길이를 제어하는 능력이지만(즉, 요소들의 스팬(span)은 첫번째 것부터 마지막 것까지 수정됨); 수정되는 요소들이 연속적일 필요는 없다. 그러므로, 기입 마스크 필드(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-b를 참조하면, 이러한 필드의 콘텐츠는 클래스 A 및 클래스 B 명령어 중에서 선택한다. 도 6a-b에서, 모서리가 라운딩된 정사각형들(rounded corner squares)을 이용하여 특정 값이 필드에 존재함을 나타낸다(예를 들어, 도 6a-b에서 클래스 필드(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)로서 해석되고, 그의 콘텐츠(들)는 정적 라운딩을 제공한다. 본 발명의 설명된 실시 형태에서, 라운드 제어 필드(654A)는 모든 부동 소수점 예외 억제(SAE; suppress all floating point exception) 필드(656) 및 라운드 연산 제어 필드(658)를 포함하지만, 대안적 실시 형태가 이들 개념 양쪽 모두를 동일한 필드 내에 인코딩하거나 이들 개념/필드 중 하나 또는 다른 하나만을 가질 수 있다(예를 들어, 라운드 연산 제어 필드(658)만을 가질 수 있다).
SAE 필드(656) - 그의 콘텐츠는 예외 이벤트 보고를 디스에이블할 것인지 여부를 구별하고; SAE 필드(656)의 콘텐츠가 억제가 인에이블됨을 나타낼 때, 주어진 명령어는 임의의 종류의 부동 소수점 예외 플래그를 보고하지 않고, 임의의 부동 소수점 예외 핸들러를 발생시키지 않는다.
라운드 연산 제어 필드(658) - 그의 콘텐츠는 수행할 라운딩 연산들(예를 들어, 라운드-업, 라운드-다운, 0으로의 라운드(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)로서 해석되고, 그의 콘텐츠는 다수의 데이터 조작 연산(기초 요소(primitives)로도 알려짐) 중 어느 것이 수행될지를 구별한다(예를 들어, 비 조작; 브로드캐스트; 소스의 상향 변환; 및 수신지의 하향 변환). 메모리 액세스(620) 명령어 템플릿은, 스케일 필드(660)를 포함하고, 선택적으로는 변위 필드(662A) 또는 변위 스케일 필드(662B)를 포함한다.
벡터 메모리 명령어는, 변환이 지원되어, 메모리로부터 벡터 로드하고 메모리에 벡터를 저장한다. 정규의 벡터 명령어에서와 같이, 벡터 메모리 명령어는 데이터 요소별 단위 형태로(in a data element-wise fashion) 데이터를 메모리로부터/메모리로 전달하고, 실제로 전달되는 요소는 기입 마스크로서 선택되는 벡터 마스크의 콘텐츠에 의해 좌우된다. 도 6a에서, 모서리가 라운딩된 정사각형은 특정의 값이 필드에 존재한다는 것을 나타내는 데 사용된다(예컨대, 수식자 필드(646)에 대한 메모리 액세스(646B); 알파 필드(652)/축출 힌트 필드(652B)에 대한 일시(652B.1) 및 비-일시(652B.2)).
메모리 액세스 명령어 템플릿 - 일시적
일시적 데이터는 캐싱으로부터 이득을 얻기에 충분히 빨리 재이용될 가능성이 있는 데이터이다. 그러나, 즉, 힌트, 및 상이한 프로세서들은 힌트를 전체적으로 무시하는 것을 포함하여, 상이한 방식으로 그것을 구현할 수 있다.
메모리 액세스 명령어 템플릿 - 비-일시적
비-일시적 데이터는 제1 레벨 캐시에서 캐싱으로부터 이득을 얻기에 충분히 빨리 재이용될 가능성이 없는 데이터이고, 축출을 위해 우선순위가 주어져야 한다. 그러나, 즉, 힌트, 및 상이한 프로세서들은 힌트를 전체적으로 무시하는 것을 포함하여, 상이한 방식으로 그것을 구현할 수 있다.
클래스 B의 명령어 템플릿
클래스 B의 명령어 템플릿의 경우에, 알파 필드(652)는 기입 마스크 제어(Z) 필드(652C)로서 해석되고, 그의 콘텐츠는 기입 마스크 필드(670)에 의해 제어된 기입 마스킹이 병합 또는 제로화되어야 하는지를 구별한다.
클래스 B의 비-메모리 액세스 명령어 템플릿
클래스 B의 비-메모리 액세스(605) 명령어 템플릿의 경우, 베타 필드(654)의 일부는 RL 필드(657A)로서 해석되고, 그의 콘텐츠는 상이한 확장 연산 유형들 중 어느 것이 수행될 것인지를 구별하고(예를 들어, 비-메모리 액세스, 기입 마스크 제어, 부분 라운드 제어형 연산(612) 명령어 템플릿과, 비-메모리 액세스, 기입 마스크 제어, VSIZE형 연산(617) 명령어 템플릿에 대해, 각각 라운드(657A.1)과 벡터 길이(VSIZE)(657A.2)가 특정됨), 반면에, 베타 필드(654)의 나머지는 특정된 유형의 연산들 중 어느 것이 수행될 것인지를 구별한다. 도 6에서, 코너가 라운딩된 블록들은 특정 값이 존재한다는 것을 나타내는데 이용된다(예를 들어, 수식자 필드(646) 내의 비-메모리 액세스(646A); RL 필드(657A)에 대한 라운드(657A.1) 및 VSIZE(657A.2)). 비-메모리 액세스(605) 명령어 템플릿에서, 스케일 필드(660), 변위 필드(662A), 및 변위 스케일 필드(662B)는 존재하지 않는다.
비-메모리 액세스 명령어 템플릿 - 기입 마스크 제어, 부분 라운드 제어형 연산
비-메모리 액세스, 기입 마스크 제어, 부분 라운드 제어형 연산(610) 명령어 템플릿에서, 베타 필드(654)의 나머지는 라운드 연산 필드(659A)로서 해석되고, 예외 이벤트 보고는 디스에이블된다(주어진 명령어는 어떠한 종류의 부동 소수점 예외 플래그도 보고하지 않고 어떠한 부동 소수점 예외 핸들러도 야기하지 않는다).
라운드 연산 제어 필드(659A)는 - 라운드 연산 제어 필드(658)와 같이, 그의 콘텐츠는 한 그룹의 라운드 연산들 중 어느 것을 수행할지를 구별해준다(예컨대, 상향 라운드(Round-up), 하향 라운드(Round-down), 0으로의 라운드(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)에 관하여, 포맷 필드(640), 베이스 연산 필드(642), 및 데이터 요소 폭 필드(664)를 포함하는 풀 연산 코드 필드(674)가 도시되어 있다. 풀 연산 코드 필드(674)가 이들 필드 모두를 포함하는 한 실시 형태가 도시되어 있지만, 풀 연산 코드 필드(674)는 이들 필드 전부를 지원하지 않는 실시 형태에서는 이들 필드 전부보다 적게 포함하고 있다. 풀 연산 코드 필드(674)는 연산 코드(operation code)를 제공한다.
확장 연산 필드(650), 데이터 요소 폭 필드(664), 및 기입 마스크 필드(670)는, 이들 특징들이 명령어 단위로 일반 친벡터 명령어 포맷으로 특정되게 한다.
기입 마스크 필드와 데이터 요소 폭 필드의 조합은, 이들이 마스크가 상이한 데이터 요소 폭에 기초하여 적용되게 하는 유형의 명령어(typed instructions)를 생성한다.
명령어 포맷은, 다른 필드의 콘텐츠에 기초하여 상이한 목적을 위해 상이한 필드를 재사용하기 때문에, 비교적 적은 수의 비트를 필요로 한다. 예를 들어, 하나의 관점은, 수식자 필드의 콘텐츠가 도 6a-b의 비-메모리 액세스(605) 명령어 템플릿과 도 6a-b의 메모리 액세스(620) 명령어 템플릿 사이에서 선택하고; 클래스 필드(668)의 콘텐츠가 도 6a의 명령어 템플릿(610/615)과 도 6b의 명령어 템플릿(612/617) 사이의 비-메모리 액세스(605) 명령어 템플릿 내에서 선택하며; 클래스 필드(668)의 콘텐츠가 도 6a의 명령어 템플릿(625/630)과 도 6b의 명령어 템플릿(627) 사이의 메모리 액세스(620) 명령어 템플릿 내에서 선택하는 것이다. 다른 관점에서 보면, 클래스 필드(668)의 콘텐츠는 도 6a 및 6b 각각의 클래스 A 명령어 템플릿과 클래스 B 명령어 템플릿 사이에서 선택하고; 수식자 필드의 콘텐츠는 도 6a의 명령어 템플릿(605 및 620)들 사이의 클래스 A 명령어 템플릿 내에서 선택하며; 수식자 필드의 콘텐츠는 도 6b의 명령어 템플릿(605 및 620)들 사이의 클래스 B 명령어 템플릿 내에서 선택한다. 클래스 필드의 콘텐츠가 클래스 A 명령어 템플릿을 나타내는 경우, 수식자 필드(646)의 콘텐츠는 알파 필드(652)의 해석을 선택한다(rs 필드(652A)와 EH 필드(652B) 사이에서). 관련 방식에 있어서, 수식자 필드(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) 그래픽 데이터 유형에 대해 연산을 하는 것. 예를 들어, 상향 변환, 스위즐링(swizzling), 스왑(swap), 하향 변환, 및 그래픽 데이터 유형은, 상이한 포맷으로 소스들을 작업할 때 요구되는 명령어의 수를 감소시키고; 또 다른 예로서, 예외를 허용하는 능력은 라운딩-모드가 규제된 풀 IEEE 컴플라이언스를 제공한다.
예시적인 특정 친벡터 명령어 포맷
도 7a-c는 본 발명의 실시 형태들에 따른 예시적인 특정 친벡터 명령어 포맷을 설명하는 블록도이다. 도 7a 내지 7c는, 위치, 사이즈, 해석, 및 필드 순서뿐만 아니라 이들 필드들의 일부에 대한 값을 특정한다는 점에서 특정적인, 특정 친벡터 명령어 포맷(700)을 도시한다. 특정 친벡터 명령어 포맷(700)은 x86 명령어 세트를 확장하는 데 이용될 수 있고, 따라서 필드들 중 일부는 기존의 x86 명령어 세트 및 그의 확장(예를 들어, AVX)에서 이용된 것들과 유사하거나 동일하다. 이러한 포맷은 확장과 함께 기존의 x86 명령어 세트의 프리픽스 인코딩 필드, 실제 연산 코드 바이트 필드, MOD R/M 필드, SIB 필드, 변위 필드, 및 즉시 필드들과의 일관성을 유지한다. 도 7a-c로부터의 필드들이 맵핑되는 도 6으로부터의 필드들이 예시된다.
본 발명의 실시 형태들이 예시의 목적을 위해 일반 친벡터 명령어 포맷(600)의 정황에서 특정 친벡터 명령어 포맷(700)을 참조하여 설명되지만, 본 발명은 청구되는 경우를 제외하고는 특정 친벡터 명령어 포맷(700)에 한정되지 않는다는 것을 이해하여야 한다. 예를 들어, 일반 친벡터 명령어 포맷(600)은 다양한 필드들에 대한 다양한 가능 사이즈를 고려하는 반면, 특정 친벡터 명령어 포맷(700)은 특정 사이즈의 필드들을 갖는 것으로 도시되어 있다. 구체적인 예로서, 데이터 요소 폭 필드(664)는 특정 친벡터 명령어 포맷(700)에서는 1 비트 필드로서 예시되어 있지만, 본 발명은 이와 같이 한정되는 것은 아니다(즉, 일반 친벡터 명령어 포맷(600)은 데이터 요소 폭 필드(664)의 다른 사이즈를 고려한다).
포맷 - 도 7a-c
일반 친벡터 명령어 포맷(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의 보수 형태(1s complement form)를 이용하여 인코딩되고, 즉 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-비트 데이터 요소)의 단위(사이즈)를 규정하는데 사용된다.
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 프리픽스 포맷의 레거시(legacy) 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.rrl, 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)
이것은 연산 코드 바이트(opcode byte)라고도 알려져 있다. 연산 코드의 부분은 이러한 필드에서 특정된다.
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)을 획득하기 위해 메모리 피연산자의 사이즈만큼 변위를 스케일링할 필요가 있다).
즉시 값
즉시 필드(672)는 앞서 설명된 바와 같이 연산된다.
예시적 레지스터 아키텍처 - 도 8
도 8은 본 발명의 한 실시 형태에 따른 레지스터 아키텍처(800)의 블록도이다. 레지스터 아키텍처의 레지스터 파일 및 레지스터가 이하에 열거되어 있다:
벡터 레지스터 파일(810) - 예시되어 있는 실시 형태에서, 812 비트 폭인 32개의 벡터 레지스터가 있고; 이들 레지스터는 zmm0 내지 zmm31로서 참조된다. 하위 16개의 zmm 레지스터들의 하위 656 비트들은 레지스터 ymm0-16 위에 중첩된다. 하위 16개의 zmm 레지스터들의 하위 128 비트들(ymm 레지스터들의 하위 128 비트들)은 레지스터 xmm0-15 위에 중첩된다. 특정 친벡터 명령어 포맷(700)은 아래 표에 예시된 바와 같이 이들 중첩된 레지스터 파일에 대해 연산된다.
조정가능한 벡터 길이 클래스 연산 레지스터
벡터 길이 필드(659B)를 포함하지 않는 명령어 템플릿
A(도 6a; U=0) 810, 615, 625, 630 zmm 레지스터(벡터 길이는 64 바이트)
B(도 6b; U=1)
812 zmm 레지스터(벡터 길이는 64 바이트)
벡터 길이 필드(659B)를 포함하는 명령어 템플릿 B(도 6b; U=1) 817, 627 벡터 길이 필드(659B)에 따른 zmm, ymm, 또는 xmm 레지스터(벡터 길이는 64 바이트, 32 바이트, 또는 16 바이트)
즉, 벡터 길이 필드(659B)는 최대 길이와 하나 이상의 다른 더 짧은 길이 중에서 선택을 하고, 여기서 각각의 이러한 더 짧은 길이는 이전의 길이의 1/2 길이이며; 벡터 길이 필드(659B)를 갖지 않는 명령어 템플릿은 최대 벡터 길이에 대해 연산을 한다. 또한, 한 실시 형태에서, 특정 친벡터 명령어 포맷(700)의 클래스 B 명령어 템플릿은 패킹된 또는 스칼라의 단정도/배정도(single/double-precision) 부동 소수점 데이터와 패킹된 또는 스칼라의 정수 데이터에 대해 연산한다. 스칼라 연산들은 zmm/ymm/xmm 레지스터에서 최하위 데이터 요소 위치에 대해서 수행되는 연산들이고; 상위 데이터 요소 위치들은 실시 형태에 따라 그것들이 명령어 이전과 동일하게 두거나 또는 제로화된다.
기입 마스크 레지스터(815) - 예시된 실시 형태에서, 각각이 사이즈가 64 비트인 8개의 기입 마스크 레지스터(k0 내지 k7)가 있다. 전술한 바와 같이, 본 발명의 한 실시 형태에서, 벡터 마스크 레지스터(k0)는 기입 마스크로서 이용될 수 없고; 보통 k0을 표시하는 인코딩이 기입 마스크에 대해 이용될 때, 이것은 0xFFFF의 하드와이어된 기입 마스크를 선택하여, 해당 명령어에 대한 기입 마스킹을 효율적으로 디스에이블링한다.
멀티미디어 확장 제어 상태 레지스터(MXCSR)(820) - 예시되어 있는 실시 형태에서, 이러한 32-비트 레지스터는 부동 소수점 연산에서 사용되는 상태 및 제어 비트를 제공한다.
범용 레지스터(825) - 예시된 실시 형태에서, 메모리 피연산자에 어드레싱하기 위해 기존의 x86 어드레싱 모드들과 함께 사용되는 16개의 64-비트 범용 레지스터들이 존재한다. 이러한 레지스터들은 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15라는 이름으로 참조된다.
확장된 플래그(EFLAGS) 레지스터(830) - 예시된 실시 형태에서, 이러한 32 비트 레지스터는 많은 명령어들의 결과를 기록하는데 이용된다.
부동 소수점 제어 워드(FCW) 레지스터(835) 및 부동 소수점 상태 워드(FSW) 레지스터(840) - 예시된 실시 형태에서, 이들 레지스터는 FCW의 경우에 라운딩 모드, 예외 마스크 및 플래그를 설정하기 위해 그리고 FSW의 경우에 예외를 추적하기 위해 x87 명령어 세트 확장에 의해 사용된다.
MMX 팩형(packed) 정수 평면 레지스터 파일(850) 상에 앨리어싱되어 있는(aliased) 스칼라 부동 소수점 스택 레지스터 파일(x87 스택)(845) - 예시된 실시 형태에서, x87 스택은 x87 명령어 세트 확장을 이용하여 32/64/80-비트 부동 소수점 데이터에 대해 스칼라 부동 소수점 연산을 수행하기 위해 사용된 8-요소 스택이며; MMX 레지스터들은 MMX 레지스터와 XMM 레지스터 사이에서 수행된 소정의 연산을 위한 피연산자들을 보유하기 위해서뿐만 아니라, 64-비트 팩형 정수 데이터에 대해 연산을 수행하기 위해 사용된다.
세그먼트 레지스터(855) - 예시된 실시 형태에서, 세그먼트된 어드레스 생성에 사용된 데이터를 저장하는데 사용된 6개의 16비트 레지스터가 있다.
RIP 레지스터(865) - 예시된 실시 형태에서, 이러한 64-비트 레지스터는 명령어 포인터를 저장한다.
본 발명의 대안적인 실시 형태들은 더 넓거나 더 좁은 레지스터들을 이용할 수 있다. 추가적으로, 본 발명의 대안적인 실시 형태들은 더 많거나, 더 적거나, 상이한 레지스터 파일들 및 레지스터들을 이용할 수 있다.
예시적 순차 프로세서 아키텍처 - 도 9a-9b
도 9a-b는 예시적 순차 프로세서 아키텍처의 블록도를 도시한다. 이들 예시적인 실시 형태들은 와이드 벡터(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)는 스칼라 및 벡터 유닛들 내의 캐시 메모리에의 저 지연시간 액세스를 가능하게 한다. 친벡터 명령어 포맷의 로드 연산(load-op) 명령어와 함께, 이것은 L1 캐시(906)는 확장된 레지스터 파일과 어느 정도 유사하게 취급될 수 있다는 것을 의미한다. 이것은, 특히 축출 힌트 필드(652B)에 의해, 많은 알고리즘의 성능을 상당히 향상시킨다.
L2 캐시(904)의 로컬 서브세트는, CPU 코어당 하나씩, 별개의 로컬 서브세트들로 분할되는 글로벌 L2 캐시의 일부이다. 각각의 CPU는 L2 캐시(904)의 그 자신의 로컬 서브세트로의 직접 액세스 경로를 갖는다. CPU 코어에 의해 판독된 데이터는 L2 캐시 서브세트(904)에 저장되고, 그들 자신의 로컬 L2 캐시 서브세트에 액세스하는 다른 CPU들과 병렬로 신속하게 액세스될 수 있다. CPU 코어에 의해 기입된 데이터는 그 자신의 L2 캐시 서브세트(904)에 저장되고, 필요한 경우, 다른 서브세트들부터 플러시된다(flushed). 링 네트워크는 공유 데이터에 대한 일관성(coherency)을 보장한다.
도 9b는 본 발명의 실시 형태에 따른 도 9a의 CPU 코어의 일부의 확대도이다. 도 9b는 L1 캐시(904)의 L1 데이터 캐시(906A) 부분은 물론, 벡터 유닛(910) 및 벡터 레지스터(914)에 관한 부가 상세를 포함하고 있다. 구체적으로는, 벡터 유닛(910)은 정수, 단정도 플로트(float), 및 배정도 플로트 명령어들을 실행하는 16-와이드 벡터 처리 유닛(VPU)(16-와이드 ALU(928) 참조)이다. VPU는 스위즐 유닛(swizzle unit)(920)에 의해 레지스터 입력들의 스위즐링, 수치 변환 유닛들(922A-B)에 의한 수치 변환, 및 메모리 입력에 대한 복제 유닛(924)에 의한 복제를 지원한다. 기입 마스크 레지스터(926)는 최종 벡터 기입을 예측하는 것을 가능하게 한다.
예컨대, 행렬 곱셈을 지원하기 위해, 레지스터 데이터는 각종 방식으로 스위즐링될 수 있다. 메모리로부터의 데이터는 VPU 레인(VPU lanes)에 걸쳐 복제될 수 있다. 이것은, 그래픽 및 비-그래픽 병렬 데이터 처리 둘 다에서 공통의 연산이며, 이는 캐시 효율성을 상당히 향상시킨다.
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)은, 명령어 페치 및 프리디코드 유닛(1028)에 더 결합되어 있는 명령어 변환 색인 버퍼(TLB; translation lookaside buffer)(1026)에 결합된다. 명령어 페치 및 프리디코드 유닛(1028)은 디코드 유닛(1032)에 더 결합되어 있는 명령어 큐(instruction queue) 유닛(1030)에 결합된다. 디코드 유닛(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)은 리타이어먼트 유닛(retirement unit: 1074) 및 통합 스케줄러 유닛(1058)에 결합되는 리네임/할당기 유닛(1056)을 포함한다. 리타이어먼트 유닛(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)은 후기입(write back)/메모리 기입 스테이지(1960)를 수행하고; 7) 리타이어먼트 유닛(1074)은 ROB 판독 스테이지를 수행하며; 8) 다양한 유닛들은 예외 핸들링 스테이지에 관여될 수 있고; 9) 리타이어먼트 유닛(1074) 및 물리적 레지스터 파일 유닛(1076)은 커밋(commit) 스테이지를 수행한다.
예시적 단일 코어 및 멀티코어 프로세서 - 도 15
도 15는 본 발명의 실시 형태들에 따른, 통합형 메모리 컨트롤러 및 그래픽을 갖는 단일 코어 프로세서 및 멀티코어 프로세서(1500)의 블록도이다. 도 15에서의 실선 박스는 단일 코어(1502A)를 갖는 프로세서(1500), 시스템 에이전트(1510), 하나 이상의 버스 컨트롤러 유닛(1516)의 세트를 나타내는 반면, 선택적인 추가의 파선 박스는 다수의 코어(1502A-N)를 갖는 대안의 프로세서(1500), 시스템 에이전트 유닛(1510) 내의 하나 이상의 통합형 메모리 컨트롤러 유닛(들)(1514)의 세트, 및 통합형 그래픽 로직(1508)을 나타내고 있다.
메모리 계층 구조는 코어들 내의 하나 이상의 레벨의 캐시, 하나 이상의 공유 캐시 유닛들(1506)의 세트, 및 통합형 메모리 컨트롤러 유닛들(1514)의 세트에 결합되어 있는 외부 메모리(도시 생략)를 포함하고 있다. 공유 캐시 유닛들(1506)의 세트는, 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 기타 레벨들의 캐시 등 하나 이상의 중간 레벨 캐시들, 최종 레벨 캐시(LLC), 및/또는 이들의 조합을 포함할 수 있다. 한 실시 형태에서, 링 기반 상호 접속 유닛(ring based interconnect unit)(1512)은 통합형 그래픽 로직(1508), 공유 캐시 유닛들(1506)의 세트, 및 시스템 에이전트 유닛(1510)을 상호 접속시키는 반면, 대안의 실시 형태들은 이러한 유닛들을 상호 접속시키기 위한 임의의 수의 공지된 기술들을 사용할 수 있다.
몇몇 실시 형태들에서, 코어들(1502A-N) 중 하나 이상은 멀티-스레딩을 할 수 있다. 시스템 에이전트(1510)는 코어들(1502A-N)을 조정하고 연산하는 그들 구성 요소들을 포함하고 있다. 시스템 에이전트 유닛(1510)은, 예를 들어, 전력 제어 유닛(PCU) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1502A-N) 및 통합형 그래픽 로직(1508)의 전력 상태를 조절하는 데 필요한 로직 및 구성 요소이거나 이를 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속되는 디스플레이들을 구동하기 위한 것이다.
코어(1502A-N)들은 아키텍처 및/또는 명령어 세트의 관점에서 동종 또는 이종일 수 있다. 예를 들어, 코어들(1502A-N) 중 일부는 순차 상태(예컨대, 도 9a 및 도 9b에 도시된 것과 유사함) 일 수 있는 반면, 다른 것들은 비순차 상태(예컨대, 도 10에 도시된 것과 유사함)일 수 있다. 다른 일례로서, 코어들(1502A-N) 중 2개의 이상은 동일한 명령어 세트를 실행할 수 있지만, 다른 코어들은 해당 명령어 세트 또는 상이한 명령어 세트의 서브세트만을 실행할 수 있다. 코어들 중 적어도 하나는 본 명세서에 기술된 친벡터 명령어 포맷을 실행할 수 있다.
프로세서는 미국 캘리포니아주 산타 클라라 소재의 Intel Corporation으로부터 입수 가능한 Core™ i3, i5, i7, 2 Duo 및 Quad, Xeon™ 또는 Itanium™ 프로세서 등의 범용 프로세서일 수 있다. 대안적으로, 프로세서는 다른 회사 제품일 수 있다. 프로세서는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, 코-프로세서, 임베디드 프로세서 등 특정-목적의 프로세서일 수도 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(1500)는, 예를 들어, BiCMOS, CMOS, 또는 NMOS 등, 다수의 프로세스 기술들 중 임의의 기술을 사용하여 하나 이상의 기판들의 일부가 될 수 있고 및/또는 이들 기판 상에서 구현될 수 있다.
예시적 컴퓨터 시스템 및 프로세서 - 도 11-13
도 11-13은 프로세서(1500)를 포함하기에 적합한 예시적인 시스템인 반면, 도 15는 코어들(1502) 중 하나 이상을 포함할 수 있는 예시적인 시스템 온 칩(SoC: system on a chip)이다. 랩톱, 데스크톱, 핸드헬드 PC, 개인 휴대 정보 단말기, 엔지니어링 워크스테이션, 서버, 네트워크 장치, 네트워크 허브, 스위치, 임베디드 프로세서, 디지털 신호 프로세서(DSP), 그래픽 장치, 비디오 게임 장치, 셋톱박스, 마이크로 컨트롤러, 휴대 전화, 휴대용 미디어 플레이어, 핸드헬드 장치, 및 다양한 다른 전자 장치들을 위해 본 기술 분야에 알려진 다른 시스템 설계 및 구성도 적합하다. 일반적으로, 본원에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 매우 다양한 시스템들 또는 전자 장치들이 일반적으로 적합하다.
이제, 도 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) 유닛), 필드 프로그래머블 게이트 어레이, 또는 기타 임의의 프로세서를 포함할 수 있다. 아키텍처, 마이크로아키텍처, 열, 전력 소모 특성 등을 포함하는 성능 척도(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) 중 하나 이상은, 가속기 또는 필드 프로그래머블 게이트 어레이와 같은, 프로세서 이외의 요소일 수 있다.
단지 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에 도시된 바와 같이, 다양한 I/O 디바이스들(1214)은, 제1 버스(1216)를 제2 버스(1220)에 결합시키는 버스 브리지(1218)와 함께, 제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에서의 유사한 요소들은 유사한 참조 번호들을 가지며, 도 12의 특정 측면들은 도 13의 다른 측면들을 불명료하게 하는 것을 피하기 위해 도 13으로부터 생략되었다.
도 13은 처리 요소들(1270, 1280)이, 각각, 통합형 메모리 및 I/O 제어 로직("CL")(1272 및 1282)을 포함할 수 있다는 것을 나타내고 있다. 적어도 한 실시 형태에 있어서, CL(1272, 1282)은 도 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-N)의 세트 및 공유 캐시 유닛(들)(1506)을 포함하는 애플리케이션 프로세서(1410); 시스템 에이전트 유닛(1510); 버스 컨트롤러 유닛(들)(1516); 통합형 메모리 컨트롤러 유닛(들)(1514); 통합형 그래픽 로직(1508), 정지 및/또는 비디오 카메라 기능을 제공하기 위한 이미지 프로세서(1424), 하드웨어 오디오 가속을 제공하기 위한 오디오 프로세서(1426), 및 비디오 인코드/디코드 가속을 제공하기 위한 비디오 프로세서(1428)를 포함할 수 있는 하나 이상의 미디어 프로세서들(1420)의 세트; 정적 랜덤 액세스 메모리(SRAM) 유닛(1430); 직접 메모리 액세스(DMA) 유닛(1432); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(1440)에 결합된다.
여기에 개시된 메커니즘들의 실시 형태들은 하드웨어, 소프트웨어, 펌웨어 또는 이러한 구현 방식들의 조합으로 구현될 수 있다. 본 발명의 실시 형태들은, 적어도 하나의 프로세서, 저장 시스템(휘발성 및 불휘발성 메모리 및/또는 저장 요소들을 포함), 적어도 하나의 입력 장치, 및 적어도 하나의 출력 장치를 포함하는 프로그램 가능한 시스템 상에서 실행하는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
프로그램 코드는, 본 명세서에서 기술된 기능들을 수행하고 출력 정보를 생성하기 위해 입력 데이터에 적용될 수 있다. 출력 정보는 공지된 방식으로 하나 이상의 출력 장치에 적용될 수 있다. 본 출원의 목적을 위해, 처리 시스템은 예를 들어, 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 주문형 집적 회로(ASIC) 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위해 고레벨 절차 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는, 바람직하다면, 어셈블리 또는 기계 언어로 구현될 수도 있다. 사실상, 본원에 설명된 메커니즘들은 임의의 특정 프로그래밍 언어로 그 범위가 한정되지 않는다. 어느 경우에나, 언어는 컴파일되거나 해석된 언어일 수 있다.
적어도 한 실시 형태의 하나 이상의 측면은, 머신에 의해 판독될 때 머신으로 하여금, 본 명세서에서 설명된 기술들을 수행하기 위한 로직을 제조하게 하는, 프로세서 내의 다양한 로직을 표현하는 머신 판독 가능 매체에 저장된 전형적인 명령어들에 의해 구현될 수 있다. "IP 코어"로서 알려진 그러한 표현들은, 유형의 머신 판독 가능 매체에 저장될 수 있으며, 다양한 고객들 또는 제조 설비에 제공되어, 로직 또는 프로세서를 실제로 제조하는 제조 머신들 내에 로딩될 수 있다.
이러한 머신 판독 가능 저장 매체는, 하드 디스크, 플로피 디스크, 광 디스크(콤팩트 디스크 판독 전용 메모리(CD-ROM), 재기록 가능한 컴팩트 디스크(CD-RW)), 및 광자기 디스크를 포함하는 임의의 다른 유형의 디스크, 판독 전용 메모리(ROM), 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM) 등의 랜덤 액세스 메모리(RAM), 소거 가능한 프로그램 가능 판독 전용 메모리(EPROM), 플래시 메모리, 전기적으로 소거 가능한 프로그램 가능 판독 전용 메모리(EEPROM) 등의 반도체 디바이스, 자기 또는 광학 카드, 또는 전자 명령어를 저장하기에 적당한 임의의 다른 유형의 매체 등의 저장 매체를 포함하는, 머신 또는 디바이스에 의해 제조 또는 형성된 비-일시적, 유형의 물품을, 제한 없이, 포함할 수 있다.
그에 따라, 본 발명의 실시 형태는 또한, 친벡터 명령어 포맷으로 된 명령어를 포함하고 또는 본 명세서에 기술된 구조, 회로, 장치, 프로세서, 및/또는 시스템 특징을 정의하는 하드웨어 기술 언어(HDL: Hardware Description Language) 등의 설계 데이터를 포함하는 비-일시적, 유형의 머신 판독 가능 매체를 포함한다. 이러한 실시 형태들은 프로그램 제품으로 지칭될 수 있다.
일부 경우에는, 명령어 변환기가 소스 명령어 세트로부터 타겟 명령어 세트로 명령어를 변환하는데 사용될 수 있다. 예를 들어, 명령어 변환기는 코어에 의해 처리될 하나 이상의 다른 명령어들로 명령어를 (예를 들어, 정적 바이너리 변환, 동적 컴필레이션을 포함하는 동적 바이너리 변환을 이용하여) 변환하거나, 모프하거나, 에뮬레이트하거나, 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 그의 조합으로 구현될 수 있다. 명령어 변환기는 온-프로세서(on processor), 오프-프로세서(off processor), 또는 일부 온-프로세서 및 일부 오프-프로세서일 수 있다.
도 16은 본 발명의 실시 형태들에 따라, 소스 명령어 세트 내의 바이너리 명령어들을 타겟 명령어 세트 내의 바이너리 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블럭도이다. 예시된 실시 형태에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기가 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 상이한 조합들로 구현될 수 있다. 도 16은, 하이 레벨 언어(1602)로 된 프로그램이 x86 컴파일러(1604)를 이용하여 컴파일되어, 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1616)에 의해 자연스럽게 실행될 수 있는 x86 2진 코드(1606)를 생성할 수 있다는 것을 도시하고 있다(컴파일된 명령어들 중 일부는 친벡터 명령어 포맷인 것으로 가정됨). 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1616)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 실질적인 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서 상에서 실행되도록 되어 있는 애플리케이션 또는 다른 소프트웨어의 오브젝트 코드 버전들을 호환가능하게 실행하거나 다르게 처리함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1604)는, 추가적인 링크 처리(Linkage processing)를 갖거나 갖지 않고서도, 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1616) 상에서 실행될 수 있는 x86 바이너리 코드(1606)(예를 들어, 오브젝트 코드)를 생성하도록 작동될 수 있는 컴파일러를 나타낸다. 유사하게, 도 16은 하이 레벨 언어(1602)의 프로그램이, 대안적인 명령어 세트 컴파일러(1608)를 사용하여 컴파일됨으로써, 적어도 하나의 x86 명령어 세트 코어를 갖지 않는 프로세서(1614)(예를 들어, 캘리포니아주 서니베일의 MIPS 테크놀로지스의 MIPS 명령어 세트를 실행하고 및/또는 캘리포니아주 서니베일의 ARM 홀딩스의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 기본적으로 실행될 수 있는 대안적인 명령어 세트 바이너리 코드(1610)를 생성할 수 있다는 점을 도시한다. 명령어 변환기(1612)는 x86 바이너리 코드(1606)를, x86 명령어 세트 코어를 갖지 않는 프로세서(1614)에 의해 기본적으로 실행될 수 있는 코드로 변환하는데 사용된다. 이러한 변환된 코드는 대안적인 명령어 세트 바이너리 코드(1610)와 동일할 가능성이 없는데, 그 이유는 이를 행할 수 있는 명령어 변환기를 제조하기 어렵기 때문이다; 그러나, 변환된 코드는 일반적인 연산을 달성할 것이며, 대안적인 명령어 세트로부터의 명령어들로 이루어질 것이다. 따라서, 명령어 변환기(1612)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스가 x86 바이너리 코드(1606)를 실행하는 것을 허용하는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합을 나타낸다.
본 명세서에 개시된 친벡터 명령어 포맷으로 된 명령어(들)의 특정 동작이 하드웨어 구성 요소에 의해 수행될 수 있고, 회로 또는 다른 하드웨어 구성 요소가 연산을 수행하는 명령어로 프로그램되게 하거나, 또는 적어도 그렇게 하는 데 사용되는 머신-실행가능 명령어로 구현될 수 있다. 회로는 몇가지 예로서, 범용 또는 특수 목적 프로세서, 또는 로직 회로를 포함할 수 있다. 연산들은 선택적으로 하드웨어와 소프트웨어의 결합에 의해 수행될 수도 있다. 실행 로직 및/또는 프로세서는 명령어 특정 결과 피연산자를 저장하기 위해, 기계 명령어 또는 이 기계 명령어로부터 도출된 하나 이상의 제어 신호들에 응답하는 구체적 또는 특정한 회로 또는 다른 로직을 포함할 수 있다. 예를 들어, 여기서 설명된 명령어(들)의 실시 형태는 도 11-16의 하나 이상의 시스템에서 실행될 수 있고, 친벡터 명령어 포맷의 명령어(들)의 실시 형태들은 시스템에서 실행될 프로그램 코드에 저장될 수 있다. 추가적으로, 이들 도면의 처리 요소는 본 명세서에 상세히 기술된 상세한 파이프라인들 및/또는 아키텍처들(예컨대, 순차 아키텍처 및 비순차 아키텍처) 중 하나를 이용할 수 있다. 예를 들어, 순차 아키텍처의 디코드 유닛은 명령어(들)를 디코딩하고, 디코딩된 명령어를 벡터 또는 스칼라 유닛 등으로 전달할 수 있다.
위의 설명은 본 발명의 바람직한 실시 형태들을 예시하기 위한 것이다. 전술한 논의로부터, 성장이 빠르고 추가적인 진보가 쉽게 예견되지 않는 이러한 기술 분야에서 특히, 본 발명은 첨부된 특허청구범위 및 그의 등가물들의 범위 내에서 본 발명의 원리들로부터 벗어나지 않고 본 분야의 숙련자에 의해 구성 및 상세가 변경될 수 있다는 것이 또한 명백해야 한다. 예를 들어, 방법의 하나 이상의 연산들은 결합될 수 있거나 더 분리될 수 있다.
대안적 실시 형태
본질적으로 친벡터 명령어 포맷을 실행하게 될 실시 형태들이 기술되어 있지만, 본 발명의 대안의 실시 형태는 상이한 명령어 세트를 실행하는 프로세서(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 프로세서, 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트를 실행하는 프로세서) 상에서 실행 중인 에뮬레이션 계층(emulation layer)을 통해 친벡터 명령어 포맷을 실행할 수 있다. 또한, 도면들 내의 흐름도들은 본 발명의 특정 실시 형태들에 의해 수행되는 동작들의 특정 순서를 도시하지만, 그러한 순서는 예시임을 이해해야 한다(예를 들어, 대안적인 실시 형태들은 상이한 순서로 동작들을 수행할 수 있고, 특정 동작들을 결합할 수 있고, 특정 동작들을 중첩할 수 있는 등등이다).
위의 설명에서, 설명의 목적으로, 본 발명의 실시 형태들의 철저한 이해를 제공하기 위하여 다수의 특정 상세가 설명되었다. 그러나, 하나 이상의 다른 실시 형태들이 이들 특정 상세 중 일부가 없이 실시될 수 있다는 것이 이 본 분야의 숙련자에게 명백하게 된다. 설명된 특정 실시 형태들은 본 발명을 제한하기 위해 제공된 것이 아니고, 본 발명의 실시 형태들을 예시하기 위해 제공된 것이다. 본 발명의 범위는 위에 제공된 특정 예들에 의해 결정되지 않고, 아래 청구항들에 의해서만 결정된다.

Claims (20)

  1. 프로세서로서,
    명령어 실행 파이프라인의 기능 유닛
    을 포함하고,
    상기 기능 유닛은,
    제2 입력 벡터의 요소와 대조하여 제1 입력 벡터의 하나 이상의 요소를 비교하기 위한 비교 뱅크 회로; 및
    상기 비교 뱅크 회로에 결합되어, 상기 제1 입력 벡터의 요소별로 상기 제1 입력 벡터의 값에 매칭되는 상기 제2 입력 벡터의 요소들의 수를 가산하기 위한 가산기 회로를 포함하는, 프로세서.
  2. 제1항에 있어서,
    상기 기능 유닛은, 상기 제2 입력 벡터의 각각의 요소마다 상기 비교 뱅크 및 가산기 회로를 통한 루프를 제어하는 마이크로-코드를 포함하는 ROM을 포함하는, 프로세서.
  3. 제1항에 있어서,
    상기 기능 유닛은, 제2 입력 벡터의 또 다른 요소와 대조하여 상기 제1 입력 벡터의 상기 하나 이상의 요소를 비교하는 제2 비교 뱅크 회로를 더 포함하고, 상기 제2 비교 뱅크 회로는 상기 가산기 회로에 결합되는, 프로세서.
  4. 제1항에 있어서,
    상기 가산기 회로를 우회하는 상기 비교 회로로부터의 데이터 경로를 더 포함하는, 프로세서.
  5. 제4항에 있어서,
    상기 기능 유닛은, 히스토그램을 결정하기 위한 제1 명령어와, 특정한 문자들이 문자열에서 발견되는지를 결정하기 위한 제2 명령어를 실행하기 위한 것인, 프로세서.
  6. 제1항에 있어서,
    상기 기능 유닛은, 수행될 비교의 유형을 특정하는 즉시 피연산자를 포함하는 명령어 포맷을 가진 명령어를 실행하기 위한 것인, 프로세서.
  7. 제6항에 있어서,
    상기 비교의 유형은,
    equal range; 및
    equal any
    중 임의의 것을 포함하는, 프로세서.
  8. 제7항에 있어서,
    상기 기능 유닛은, 히스토그램을 결정하기 위한 제1 명령어와, 특정한 문자들이 문자열에서 발견되는지를 결정하기 위한 제2 명령어를 실행하기 위한 것이고, 상기 명령어는 상기 equal range 또는 equal any 비교가 상기 제1 및 제2 명령어들에 대하여 실행되어야 하는지를 특정하기 위한 명령어 포맷을 갖는, 프로세서.
  9. 제1항에 있어서,
    상기 기능 유닛은, 동일한 사이클에서 상기 제2 입력 벡터의 상기 요소들과 대조하여 상기 단일 요소의 다중 비교들을 수행하기 위해, 상기 제1 벡터의 상기 요소를 상기 비교 회로의 다중 비교 회로들에 팬-아웃시키기 위한 와이어링을 포함하는, 프로세서.
  10. 제9항에 있어서,
    상기 기능 유닛은, 상기 제2 입력 벡터의 상기 요소들과 대조하여 상기 제1 입력 벡터의 상기 요소에 대한 스칼라 합 값을 생성하기 위해, 상기 다중 비교 회로들로부터의 다중의 각각의 값들을 상기 가산기 회로로 팬-인시키기 위한 와이어링을 포함하는, 프로세서.
  11. 방법으로서,
    명령어 실행 파이프라인에서 단일 명령어의 실행을 통하여 히스토그램 또는 그의 일부를 결정하는 단계
    를 포함하고,
    상기 단일 명령어의 상기 실행은,
    제2 입력 벡터의 요소와 대조하여 제1 입력 벡터의 요소들을 비교하는 단계; 및
    상기 제1 입력 벡터의 요소별로 상기 제1 입력 벡터의 값에 매칭되는 상기 제2 입력 벡터의 요소들의 수를 가산하는 단계를 포함하는, 방법.
  12. 제11항에 있어서,
    상기 비교 단계를 수행하도록 설계된 비교 회로와, 상기 제2 입력 벡터의 다중 요소들 각각에 대한 상기 가산 단계를 수행하도록 설계된 가산기 회로를 통하여 마이크로-제어형 루프들을 수행하는 단계를 더 포함하는, 방법.
  13. 제11항에 있어서,
    상기 비교 단계와 동시에,
    제2 입력 벡터의 또 다른 요소와 대조하여 상기 제1 입력 벡터의 상기 요소들을 비교하는 단계를 더 포함하는, 방법.
  14. 제11항에 있어서,
    또 다른 제2 입력 벡터의 요소와 대조하여 또 다른 제1 입력 벡터의 요소들을 비교하지만, 상기 또 다른 제1 입력 벡터의 요소별로 상기 또 다른 제1 입력 벡터의 값에 매칭되는 상기 또 다른 제2 입력 벡터의 요소들의 수를 가산하지는 않는 제2 명령어를 상기 기능 유닛으로 실행하는 단계를 더 포함하는, 방법.
  15. 제14항에 있어서,
    상기 제1 및 제2 명령어 둘 다는,
    equal range; 및
    equal any
    를 포함하는 비교 연산들의 그룹으로부터 선택된 비교 연산을 수행하는, 방법.
  16. 프로세서에 의해 처리될 때, 상기 프로세서가 방법을 수행하게 하는 프로그램 코드를 포함하는 머신 판독 가능 매체로서,
    상기 방법은,
    히스토그램의 제1 부분을 결정하는 단계
    를 포함하고,
    상기 부분은 상기 히스토그램의 빈들의 일부에 대한 최종 카운트들이고, 상기 결정 단계는 일련의 명령어를 실행하고, 각각의 명령어는 상기 최종 카운트들에 이를 때까지 상기 히스토그램의 빈들의 상기 일부와 대조하여 상기 히스토그램의 모집단(population)의 상이한 세트에 걸쳐서 비교하고 합하는, 머신 판독 가능 매체.
  17. 제16항에 있어서,
    상기 명령어들 중 바로 다음의 명령어가 상기 명령어들 중 바로 이전의 명령어의 결과 카운트들을 입력으로서 수용하는, 머신 판독 가능 매체.
  18. 제16항에 있어서,
    상기 일련의 명령어는 벡터 가산 명령어와 인터리브되는, 머신 판독 가능 매체.
  19. 제16항에 있어서,
    상기 비교는 equal range 비교인, 머신 판독 가능 매체.
  20. 제16항에 있어서,
    상기 비교는 equal any 비교인, 머신 판독 가능 매체.
KR1020157013957A 2012-12-28 2013-06-14 히스토그램을 결정하기 위한 명령어 KR101794802B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/730,647 US9804839B2 (en) 2012-12-28 2012-12-28 Instruction for determining histograms
US13/730,647 2012-12-28
PCT/US2013/045860 WO2014105126A1 (en) 2012-12-28 2013-06-14 Instruction for determining histograms

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020177031754A Division KR101938290B1 (ko) 2012-12-28 2013-06-14 히스토그램을 결정하기 위한 명령어

Publications (2)

Publication Number Publication Date
KR20150102967A true KR20150102967A (ko) 2015-09-09
KR101794802B1 KR101794802B1 (ko) 2017-11-07

Family

ID=51018699

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1020177031754A KR101938290B1 (ko) 2012-12-28 2013-06-14 히스토그램을 결정하기 위한 명령어
KR1020197000627A KR102086491B1 (ko) 2012-12-28 2013-06-14 히스토그램을 결정하기 위한 명령어
KR1020157013957A KR101794802B1 (ko) 2012-12-28 2013-06-14 히스토그램을 결정하기 위한 명령어

Family Applications Before (2)

Application Number Title Priority Date Filing Date
KR1020177031754A KR101938290B1 (ko) 2012-12-28 2013-06-14 히스토그램을 결정하기 위한 명령어
KR1020197000627A KR102086491B1 (ko) 2012-12-28 2013-06-14 히스토그램을 결정하기 위한 명령어

Country Status (5)

Country Link
US (4) US9804839B2 (ko)
KR (3) KR101938290B1 (ko)
CN (3) CN108958799B (ko)
DE (1) DE112013005372T5 (ko)
WO (1) WO2014105126A1 (ko)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9720569B2 (en) 2006-08-14 2017-08-01 Soasta, Inc. Cloud-based custom metric/timer definitions and real-time analytics of mobile applications
US10579507B1 (en) 2006-08-14 2020-03-03 Akamai Technologies, Inc. Device cloud provisioning for functional testing of mobile applications
US9990110B1 (en) 2006-08-14 2018-06-05 Akamai Technologies, Inc. Private device cloud for global testing of mobile applications
US9154611B1 (en) 2006-08-14 2015-10-06 Soasta, Inc. Functional test automation for gesture-based mobile applications
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US9436579B2 (en) 2010-07-19 2016-09-06 Soasta, Inc. Real-time, multi-tier load test results aggregation
US9251035B1 (en) 2010-07-19 2016-02-02 Soasta, Inc. Load test charts with standard deviation and percentile statistics
US9495473B2 (en) 2010-07-19 2016-11-15 Soasta, Inc. Analytic dashboard with user interface for producing a single chart statistical correlation from source and target charts during a load test
US9450834B2 (en) 2010-07-19 2016-09-20 Soasta, Inc. Animated globe showing real-time web user performance measurements
US9021362B2 (en) 2010-07-19 2015-04-28 Soasta, Inc. Real-time analytics of web performance using actual user measurements
US9229842B2 (en) * 2010-07-19 2016-01-05 Soasta, Inc. Active waterfall charts for continuous, real-time visualization of website performance data
US9785533B2 (en) 2011-10-18 2017-10-10 Soasta, Inc. Session template packages for automated load testing
US9772923B2 (en) * 2013-03-14 2017-09-26 Soasta, Inc. Fast OLAP for real user measurement of website performance
US10601674B2 (en) 2014-02-04 2020-03-24 Akamai Technologies, Inc. Virtual user ramp controller for load test analytic dashboard
DE102014106854A1 (de) * 2014-05-15 2016-01-28 Odos Imaging Ltd. Bildgebendes System und Verfahren zum Überwachen eines Sichtfeldes
EP2966475B1 (en) * 2014-07-09 2016-05-25 Softkinetic Sensors N.V. A method for binning time-of-flight data
US20160026607A1 (en) * 2014-07-25 2016-01-28 Qualcomm Incorporated Parallelization of scalar operations by vector processors using data-indexed accumulators in vector register files, and related circuits, methods, and computer-readable media
US9715432B2 (en) * 2014-12-23 2017-07-25 Intel Corporation Memory fault suppression via re-execution and hardware FSM
US10346431B1 (en) 2015-04-16 2019-07-09 Akamai Technologies, Inc. System and method for automated run-tme scaling of cloud-based data store
CN108140232B (zh) 2015-06-10 2022-05-24 无比视视觉技术有限公司 用于处理图像的图像处理器和方法
US9875213B2 (en) * 2015-06-26 2018-01-23 Intel Corporation Methods, apparatus, instructions and logic to provide vector packed histogram functionality
US10037393B1 (en) 2016-05-03 2018-07-31 Akamai Technologies, Inc. Consumer performance index scoring for websites and web-based applications
US10755386B2 (en) * 2016-06-30 2020-08-25 Intel Corporation Median filtering of images using directed search
US10891131B2 (en) * 2016-09-22 2021-01-12 Intel Corporation Processors, methods, systems, and instructions to consolidate data elements and generate index updates
US10606736B1 (en) 2017-03-03 2020-03-31 Akamai Technologies Inc. System and method for automated creation of a load test plan
US10586358B1 (en) 2017-05-10 2020-03-10 Akamai Technologies, Inc. System and method for visualization of beacon clusters on the web
US11436010B2 (en) 2017-06-30 2022-09-06 Intel Corporation Method and apparatus for vectorizing indirect update loops
US11042375B2 (en) * 2017-08-01 2021-06-22 Arm Limited Counting elements in data items in a data processing apparatus
US10678506B2 (en) 2017-08-01 2020-06-09 Arm Limited Matching consecutive values in a data processing apparatus
US10169451B1 (en) * 2018-04-20 2019-01-01 International Business Machines Corporation Rapid character substring searching
US10747819B2 (en) 2018-04-20 2020-08-18 International Business Machines Corporation Rapid partial substring matching
US10782968B2 (en) 2018-08-23 2020-09-22 International Business Machines Corporation Rapid substring detection within a data element string
US10732972B2 (en) 2018-08-23 2020-08-04 International Business Machines Corporation Non-overlapping substring detection within a data element string
US11455169B2 (en) * 2019-05-27 2022-09-27 Texas Instruments Incorporated Look-up table read
US10976709B1 (en) * 2020-03-30 2021-04-13 Stmicroelectronics (Research & Development) Limited Latched gray code for ToF applications
US11822541B2 (en) 2021-09-30 2023-11-21 Nvidia Corporation Techniques for storing sub-alignment data when accelerating Smith-Waterman sequence alignments
US11550584B1 (en) * 2021-09-30 2023-01-10 Nvidia Corporation Implementing specialized instructions for accelerating Smith-Waterman sequence alignments

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5214717A (en) * 1990-02-26 1993-05-25 Fujitsu Limited Pattern recognition data processing device using an associative matching method
US5410613A (en) 1991-07-17 1995-04-25 Matsushita Electric Industrial Co., Ltd. Pattern recognizing apparatus
US6385634B1 (en) * 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US6058465A (en) * 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
US6476810B1 (en) 1999-07-15 2002-11-05 Terarecon, Inc. Method and apparatus for generating a histogram of a volume data set
US7043465B2 (en) * 2000-02-24 2006-05-09 Holding B.E.V.S.A. Method and device for perception of an object by its shape, its size and/or its orientation
US6647349B1 (en) * 2000-03-31 2003-11-11 Intel Corporation Apparatus, method and system for counting logic events, determining logic event histograms and for identifying a logic event in a logic environment
US6591285B1 (en) * 2000-06-16 2003-07-08 Shuo-Yen Robert Li Running-sum adder networks determined by recursive construction of multi-stage networks
US20130212353A1 (en) * 2002-02-04 2013-08-15 Tibet MIMAR System for implementing vector look-up table operations in a SIMD processor
US7506135B1 (en) 2002-06-03 2009-03-17 Mimar Tibet Histogram generation with vector operations in SIMD and VLIW processor by consolidating LUTs storing parallel update incremented count values for vector data elements
US7730292B2 (en) * 2003-03-31 2010-06-01 Hewlett-Packard Development Company, L.P. Parallel subword instructions for directing results to selected subword locations of data processor result register
US7516306B2 (en) 2004-10-05 2009-04-07 International Business Machines Corporation Computer program instruction architecture, system and process using partial ordering for adaptive response to memory latencies
US8014601B2 (en) * 2005-11-29 2011-09-06 Nec Corporation Pattern recognizing apparatus, pattern recognizing method and pattern recognizing program
US7827529B2 (en) 2005-11-30 2010-11-02 Oracle America, Inc. System and method for generating a probability distribution of computer performance ratios
JP4757116B2 (ja) 2006-06-30 2011-08-24 キヤノン株式会社 パラメータ学習方法及びその装置、パターン識別方法及びその装置、プログラム
US7676647B2 (en) * 2006-08-18 2010-03-09 Qualcomm Incorporated System and method of processing data using scalar/vector instructions
US9069547B2 (en) * 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US8572354B2 (en) * 2006-09-28 2013-10-29 3Dlabs Inc., Ltd. Programmable logic unit and method for translating and processing instructions using interpretation registers
CN101201924A (zh) 2006-12-12 2008-06-18 中国电信股份有限公司 客户级别套餐收入评估方法及相关系统
US8300058B2 (en) * 2008-03-10 2012-10-30 Navon Mois P ELUT: enhanced look-up table signal processing
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US20120023308A1 (en) * 2009-02-02 2012-01-26 Renesas Electronics Corporation Parallel comparison/selection operation apparatus, processor, and parallel comparison/selection operation method
US8386545B2 (en) * 2009-10-26 2013-02-26 Via Technologies, Inc. System and method of using common adder circuitry for both a horizontal minimum instruction and a sum of absolute differences instruction
US8458547B2 (en) 2010-10-26 2013-06-04 Hewlett-Packard Development Company, L.P. Method for constructing a histogram
US9552206B2 (en) * 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
US8972698B2 (en) * 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
US9519617B2 (en) * 2011-07-14 2016-12-13 Texas Instruments Incorporated Processor with instruction variable data distribution
CN104011657B (zh) 2011-12-22 2016-10-12 英特尔公司 用于向量计算和累计的装置和方法
WO2013095600A1 (en) 2011-12-23 2013-06-27 Intel Corporation Method and apparatus for decimal floating-point data logical extraction
US9459864B2 (en) * 2012-03-15 2016-10-04 International Business Machines Corporation Vector string range compare
US20140019718A1 (en) 2012-07-10 2014-01-16 Shihjong J. Kuo Vectorized pattern searching
US9268567B2 (en) 2012-09-30 2016-02-23 Intel Corporation Instruction and logic for boyer-moore search of text strings

Also Published As

Publication number Publication date
US9804839B2 (en) 2017-10-31
KR101794802B1 (ko) 2017-11-07
WO2014105126A1 (en) 2014-07-03
KR101938290B1 (ko) 2019-01-15
US10908907B2 (en) 2021-02-02
CN108958799A (zh) 2018-12-07
CN116954720A (zh) 2023-10-27
CN104823156A (zh) 2015-08-05
US20140189320A1 (en) 2014-07-03
WO2014105126A9 (en) 2014-08-28
US20180067741A1 (en) 2018-03-08
KR102086491B1 (ko) 2020-03-09
DE112013005372T5 (de) 2015-07-23
US10908908B2 (en) 2021-02-02
CN108958799B (zh) 2023-09-01
US20190095210A1 (en) 2019-03-28
CN104823156B (zh) 2018-07-17
US20190065185A1 (en) 2019-02-28
KR20170125130A (ko) 2017-11-13
KR20190006601A (ko) 2019-01-18
US10416998B2 (en) 2019-09-17

Similar Documents

Publication Publication Date Title
KR101794802B1 (ko) 히스토그램을 결정하기 위한 명령어
KR101722346B1 (ko) 적분 이미지 계산 명령어를 위한 방법 및 장치
KR101817034B1 (ko) 반복 종속 조건을 갖는 반복들의 벡터 루프들을 구현하기 위한 명령어
JP6274672B2 (ja) 装置および方法
US20190108029A1 (en) Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
KR101776227B1 (ko) 슬라이딩 윈도 인코딩 알고리즘들을 위한 명령어들
CN107273095B (zh) 用于对齐寄存器的系统、装置和方法
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
CN112861073A (zh) 用于执行16位浮点向量点积指令的系统和方法
CN109313553B (zh) 用于跨步加载的系统、装置和方法
WO2013095619A1 (en) Super multiply add (super madd) instruction with three scalar terms
US20120254593A1 (en) Systems, apparatuses, and methods for jumps using a mask register
CN108292228B (zh) 用于基于通道的步进收集的系统、设备和方法
US10929132B1 (en) Systems and methods for ISA support for indirect loads and stores for efficiently accessing compressed lists in graph applications
TW201331831A (zh) 用以基於兩個來源寫入遮罩暫存器而產生相依向量之系統、裝置及方法
CN110383243B (zh) 具有两个存储器位置的向量压缩2指令和扩展2指令

Legal Events

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