KR101610691B1 - 기입 마스크를 이용하여 2개 소스 피연산자를 하나의 목적지 내에 블렌딩하기 위한 시스템, 장치, 및 방법 - Google Patents

기입 마스크를 이용하여 2개 소스 피연산자를 하나의 목적지 내에 블렌딩하기 위한 시스템, 장치, 및 방법 Download PDF

Info

Publication number
KR101610691B1
KR101610691B1 KR1020137028981A KR20137028981A KR101610691B1 KR 101610691 B1 KR101610691 B1 KR 101610691B1 KR 1020137028981 A KR1020137028981 A KR 1020137028981A KR 20137028981 A KR20137028981 A KR 20137028981A KR 101610691 B1 KR101610691 B1 KR 101610691B1
Authority
KR
South Korea
Prior art keywords
operand
write mask
instruction
register
field
Prior art date
Application number
KR1020137028981A
Other languages
English (en)
Other versions
KR20130140160A (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 KR20130140160A publication Critical patent/KR20130140160A/ko
Application granted granted Critical
Publication of KR101610691B1 publication Critical patent/KR101610691B1/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/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • 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
    • 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/30018Bit or string 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/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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

컴퓨터 프로세서에서 블렌드 명령어를 수행하기 위한 시스템, 장치, 및 방법의 실시예들이 설명된다. 일부 실시예에서, 블렌드 명령어의 실행은, 제1 피연산자와 제2 피연산자 간의 선택기로서 기입 마스크의 대응하는 비트 위치들을 이용하여 제1 및 제2 소스 피연산자의 데이터 요소들의 데이터 요소별 선택과, 선택된 데이터 요소의 목적지 내에 목적지에서의 대응하는 위치에의 저장을 야기한다.

Description

기입 마스크를 이용하여 2개 소스 피연산자를 하나의 목적지 내에 블렌딩하기 위한 시스템, 장치, 및 방법{SYSTEMS, APPARATUSES, AND METHODS FOR BLENDING TWO SOURCE OPERANDS INTO A SINGLE DESTINATION USING A WRITEMASK}
본 발명의 분야는 대체로 컴퓨터 프로세서 아키텍처에 관한 것으로, 더 구체적으로는, 실행될 때 특정한 결과를 야기하는 명령어에 관한 것이다.
제어-흐름 정보에 기초한 벡터 소스로부터의 데이터 병합은 벡터 기반의 아키텍처의 공통된 문제이다. 예를 들어, 다음과 같은 코드를 벡터화하기 위해 다음과 같은 것이 필요하다: 1) a[i]>0이 참인지를 나타내는 부울(Boolean) 벡터를 생성하는 방법 및 2) 그 부울 벡터에 기초하여 2개의 소스로부터 어느 한 값 (A[i] 또는 B[i])을 선택하고 그 내용을 상이한 목적지 (C[i])에 기입하는 방식.
For (i=0; i<N; i++)
{
C[i] = (a[i]>0? A[i] : B[i];
}
본 발명이, 유사한 참조부호는 유사한 요소들을 가리키는 첨부된 도면들에서 제한이 아닌 예로서 설명되며, 도면들에서:
도 1은 블렌드 명령어(blend instruction)의 실행예를 나타낸다.
도 2는 블렌드 명령어의 실행의 또 다른 예를 나타낸다.
도 3은 블렌드 명령어의 의사 코드(pseudo code)의 예를 나타낸다.
도 4는 프로세서에서 블렌드 명령어의 이용의 실시예를 나타낸다.
도 5는 블렌드 명령어를 처리하기 위한 방법의 실시예를 나타낸다.
도 6은 블렌드 명령어를 처리하기 위한 방법의 실시예를 나타낸다.
도 7a는 본 발명의 실시예에 따른 일반 친벡터 명령어 포맷(generic vector friendly instruction format) 및 그 클래스 A 명령어 템플릿을 나타내는 블록도이다.
도 7b는 본 발명의 실시예에 따른 일반 친벡터 명령어 포맷 및 그 클래스 B 명령어 템플릿을 나타내는 블록도이다.
도 8a 내지 도 8c는 본 발명의 실시예에 따른 예시적인 특정의 친벡터 명령어 포맷을 나타낸다.
도 9는 본 발명의 한 실시예에 따른 레지스터 아키텍처의 블록도이다.
도 10a는 본 발명의 실시예에 따른, 온-다이 상호접속 네트워크로의 그 접속 및 레벨 2(L2) 캐시의 그 국지적 서브셋과 함께, 단일 CPU 코어의 블록도이다.
도 10b는 본 발명의 실시예에 따른 도 10a의 CPU 코어의 일부의 확대도이다.
도 11은 본 발명의 일부 실시예에 따른 예시적 비순차 아키텍처(out-of-order architecture)를 나타내는 블록도이다.
도 12는 본 발명의 한 실시예에 따른 시스템의 블록도이다.
도 13은 본 발명의 실시예에 따른 제2 시스템의 블록도이다.
도 14는 본 발명의 실시예에 따른 제3 시스템의 블록도이다.
도 15는 본 발명의 실시예에 따른 SoC의 블록도이다.
도 16은 본 발명의 실시예에 따른 통합된 메모리 제어기와 그래픽스(graphics)를 갖춘 싱글 코어 프로세서 및 멀티코어 프로세서의 블록도이다.
도 17은 본 발명의 실시예에 따른 소스 명령어 세트의 2진 명령어들을 타겟 명령어 세트의 2진 명령어들로 변환하는 소프트웨어 명령어 컨버터의 이용을 대비하는 블록도이다.
이하의 설명에서, 다양한 구체적인 세부사항이 개시된다. 그러나, 본 발명의 실시예들은 이들 구체적인 세부사항 없이도 실시될 수 있다는 것을 이해할 것이다. 다른 예들에서, 공지된 회로, 구조, 및 기술은 본 설명의 이해를 흐리게 하지 않기 위하여 상세히 도시되지 않았다.
명세서에서 "하나의 실시예", "실시예", "예시적 실시예" 등의 언급은, 설명되는 실시예가 특정한 특징, 구조, 또는 특성을 포함할 수 있지만, 모든 실시예가 반드시 그 특정한 특징, 구조, 또는 특성을 포함하는 것은 아님을 나타낸다. 게다가, 이와 같은 문구는 반드시 동일한 실시예를 가리키는 것은 아니다. 또한, 특정한 특징, 구조, 또는 특성이 실시예와 연계하여 설명될 때, 명시적으로 설명되든 아니든 다른 실시예들과 관련하여 이러한 특징, 구조, 또는 특성에 영향을 미치는 것은 당업자의 지식의 범위 내라고 말할 수 있다.
블렌드(blend)
이하에는, 일반적으로 "블렌드"라 불리는 명령어의 실시예와, 이러한 명령어를 실행하는데 이용될 수 있고 배경 부분에서 설명된 것을 포함하는 몇 가지 상이한 분야에서 유익한 시스템, 아키텍처, 및 명령어 포맷 등의 실시예가 제시된다. 블렌드 명령어의 실행은, 앞서 언급한 문제의 두 번째 부분을 효율적으로 처리할 수 있는데, 이것은 블렌드 명령어의 실행은, 말하자면, 요소들의 벡터의 비교의 결과로부터 참/거짓 비트를 포함하는 하나의 마스크 레지스터를 취하고, 이들 비트들에 기초하여 2개의 별개의 벡터 소스들의 요소들 사이에서 선택할 수 있기 때문이다. 즉, 블렌드 명령어의 실행은 프로세서로 하여금 2개의 소스들 간의 요소별 블렌딩을 이들 소스들 간의 선택기로서 기입 마스크를 이용하여 수행하게 한다. 그 결과는 목적지 레지스터에 기입된다. 일부 실시예에서, 소스들 중 적어도 하나는 128-, 256-, 512-비트 벡터 레지스터 등과 같은 레지스터이다. 일부 실시예에서, 소스 피연산자(operand)들 중 적어도 하나는 시작 메모리 위치와 연관된 데이터 요소들의 집합(collection)이다. 추가로, 일부 실시예에서 한쪽 또는 양쪽 소스들의 데이터 요소들은 임의의 블렌딩에 앞서 스위즐(swizzle), 브로드캐스트(broadcast), 컨버전(conversion) 등(예들이 여기서 상세히 설명될 것이다)과 같은 데이터 변환(data transformation)을 겪는다. 기입 마스크 레지스터의 예가 이후에 설명된다.
이 명령어의 예시적 포맷은 “VBLENDPS zmm1 {k1}, zmm2, zmm3/m512, 오프셋,”이고, 여기서, 피연산자 zmm1, zmm2, 및 zmm3은 (128-, 256-, 512-비트 레지스터 등과 같은) 벡터 레지스터이며, k1은 (이후에 설명되는 바와 같은 16-비트 레지스터와 같은) 기입 마스크 피연산자이고, m512는 레지스터에 저장된 또는 즉석값(immediate)으로서의 메모리 피연산자이다. ZMM1은 목적지 피연산자이고, ZMM2 및 ZMM3/m512는 소스 피연산자이다. 오프셋은, 있다면, 레지스터 내의 값 또는 즉석값으로부터 메모리 주소를 결정하는데 이용된다. 메모리로부터 검색되는 것은 무엇이라도 그 메모리 주소로부터 시작하는 연속된 비트 집합이고, 목적지 레지스터의 크기에 따라 수 개의 크기(128-, 256-, 512-비트 등) ― 이 크기는 일반적으로 목적지 레지스터의 크기와 동일하다 ― 중 하나일 수 있다. 일부 실시예에서, 기입 마스크는 또한 상이한 크기(8 비트, 32 비트 등)이다. 추가로, 일부 실시예에서, 이하에서 설명되는 바와 같이 기입 마스크의 모든 비트들이 명령어에 의해 이용되는 것은 아니다. VBLENDMPS는 명령어의 연산코드(opcode)이다. 통상적으로, 각 피연산자는 명령어에서 명시적으로 정의된다. 데이터 요소들의 크기는, 명령어의 "프레픽스"에서 예를 들어 이하에서 설명되는 "W"와 같은 데이터 입도(data granularity) 비트의 표시를 이용하여 정의될 수 있다. 대부분의 실시예에서, W는 각 데이터 요소가 32 비트 또는 64 비트임을 표시할 것이다. 데이터 요소들이 크기가 32 비트이고, 소스들이 크기가 512 비트이면, 소스당 열여섯(16)개의 데이터 요소가 있다.
블렌드 명령어의 실행의 예가 도 1에 도시되어 있다. 이 예에서, 각각이 16개 데이터 요소를 갖는 2개의 소스가 있다. 대부분의 경우, 이들 소스들 중 하나는 레지스터이다(이 예에서, 소스 1은 16개의 32-비트 데이터 요소를 갖는 ZMM 레지스터와 같은 512-비트 레지스터인 것으로서 취급되지만, XMM 및 YMM 레지스터와 16- 또는 64-비트 데이터 요소와 같은 다른 데이터 요소 및 레지스터 크기가 이용될 수도 있다). 다른 소스는 레지스터 또는 메모리 위치이다(이 예에서는 소스 2가 다른 소스이다). 제2 소스가 메모리 위치이면, 대부분의 실시예에서 제2 소스는 소스들의 블렌딩 이전에 임시 레지스터 내에 놓인다. 추가로, 메모리 위치의 데이터 요소들은 임시 레지스터 내로의 배치 이전에 데이터 변환을 겪을 수 있다. 도시된 마스크 패턴은 0x5555이다.
이 예에서, 값 "1"을 갖는 기입 마스크의 각 비트 위치는, 제1 소스(소스 1)의 대응하는 데이터 요소는 목적지 레지스터의 대응하는 데이터 요소 위치에 기입되어야 한다는 표시이다. 따라서, 소스 1의 제1, 제3, 제5 등의 비트 위치(A0, A2, A4 등)는 목적지의 제1, 제3, 제5 등의 데이터 요소 위치 내에 기입된다. 기입 마스크가 값 "0"을 갖는 경우, 제2 소스의 데이터 요소가 목적지의 대응하는 데이터 요소 위치 내에 기입된다. 물론, "1" 및 "0"의 사용은 구현에 따라 반전될 수 있다. 추가로, 이 도면 및 상기 설명은 각각의 첫 번째 위치들이 최하위 위치인 것으로 간주하지만, 일부 실시예에서 첫 번째 위치들은 최상위 위치이다.
도 2는 블렌드 명령어의 실행의 또 다른 예를 나타낸다. 이 도면과 도 1 사이의 차이점은, 각 소스는 8개의 데이터 요소들만을 가진다는 것이다(예를 들어, 소스들은 8개의 64-비트 데이터 요소들을 각각 갖는 512-비트 레지스터들이다). 이 시나리오에서, 16-비트 기입 마스크에서, 기입 마스크의 모든 비트들이 이용되는 것은 아니다. 이 경우 병합할 각 소스의 데이터 요소들이 16개가 아니므로 최하위 비트들만이 이용된다.
도 3은 블렌드 명령어의 의사 코드의 예를 나타낸다.
도 4는 프로세서에서 블렌드 명령어의 이용의 실시예를 나타낸다. 401에서, 목적지 피연산자, 2개의 소스 피연산자, (있다면) 오프셋, 및 기입 마스크를 갖는 블렌드 명령어가 인출(fetch)된다. 일부 실시예에서, 목적지 피연산자는 (ZMM1과 같은) 512-비트 벡터 레지스터이고, 기입 마스크는 (이후에 설명되는 "k" 기입 마스크 레지스터와 같은) 16-비트 레지스터이다. 소스 피연산자들 중 적어도 하나는 메모리 소스 피연산자일 수 있다.
403에서 블렌드 명령어가 디코딩된다. 명령어의 포맷에 따라, 이 스테이지에서, 데이터 변환이 있을지, 어느 레지스터에 기입하고 어느 레지스터에서 검색할지, 어떤 메모리 주소에 액세스할지 등과 같은, 다양한 데이터가 해석될 수 있다.
405에서 소스 피연산자 값들이 검색/판독된다. 양쪽 소스 모두가 레지스터이면, 이들 레지스터가 판독된다. 소스 피연산자들 중 하나 또는 양쪽 모두가 메모리 피연산자이면, 그 피연산자와 연관된 데이터 요소들이 검색된다. 일부 실시예에서, 메모리로부터의 데이터 요소들은 임시 레지스터에 기억된다.
(이후에 설명되는 업컨버전, 브로드캐스트, 스위즐 등과 같은) 수행될 임의의 데이터 요소 변환이 있다면, 이것은 407에서 수행될 수 있다. 예를 들어, 메모리로부터의 16-비트 데이터 요소가 32-비트 데이터 요소로 업컨버전되거나 데이터 요소가 하나의 패턴으로부터 또 다른 패턴으로 스위즐될 수 있다(예를 들어, XYZW XYZW XYZW ... XYZW에서 XXXXXXXX YYYYYYYY ZZZZZZZZZZ WWWWWWWW로).
409에서 블렌드 명령(또는 마이크로연산 등의 명령어를 포함하는 연산)이 실행 리소스에 의해 실행된다. 이 실행은 이들 소스들 사이의 선택기로서 기입 마스크를 이용한 2개 소스들 사이의 요소별 블렌딩을 야기한다. 예를 들어, 제1 및 제2 소스의 데이터 요소들이 기입 마스크의 대응하는 비트값에 기초하여 선택된다. 이러한 블렌딩의 예가 도 1 및 도 2에 도시되어 있다.
411에서 소스 피연산자들의 적절한 데이터 요소들이 목적지 레지스터에 저장된다. 다시 한번, 이에 대한 예가 도 1 및 도 2에 도시되어 있다. 409 및 411은 별개로 도시되어 있지만, 일부 실시예에서, 이들은 명령어의 실행의 일부로서 함께 수행된다.
상기 사항이 한 타입의 실행 환경에서 예시되었지만, 이것은 상세히 설명될 순차 환경 및 비순차 환경과 같은 다른 환경에 맞도록 용이하게 수정된다.
도 5는 블렌드 명령어를 처리하기 위한 방법의 실시예를 나타낸다. 이 실시예에서, 동작들(401-407)의 전부는 아니더라도 일부가 먼저 실행되었으나, 이들은 이하에서 제시되는 상세한 설명을 흐리게 하지 않기 위해 도시되어 있지 않다고 가정한다. 예를 들어, 인출 및 디코딩은 도시되어 있지 않고 피연산자(소스 및 기입 마스크) 검색도 도시되어 있지 않다.
501에서, 기입 마스크의 첫 비트 위치의 값이 평가된다. 예를 들어, 기입 마스크 k1[0]에서의 값이 결정된다. 일부 실시예에서, 첫 번째 비트 위치는 최하위 비트이고, 다른 실시예에서는 첫 번째 비트 위치는 최상위 비트 위치이다. 나머지 논의에서는 최하위 비트인 첫 번째 비트 위치의 이용을 설명하지만, 당업자라면 첫 번째 비트 위치가 최상위 비트인 경우에 이루어질 변경사항을 용이하게 이해할 것이다.
503에서, 기입 마스크의 이 비트 위치에서의 값이, 제1 소스의 대응하는 데이터 요소(첫 번째 데이터 요소)가 목적지의 대응하는 위치에 저장되어야 한다는 것을 나타내는지에 관한 결정이 이루어진다. 첫 번째 비트 위치가, 제1 소스의 첫 번째 위치에서의 데이터 요소가 목적지 레지스터의 첫 번째 위치에 저장되어야 한다는 것을 나타낸다면, 507에서 그 데이터 요소가 저장된다. 도 1을 다시 참조하면, 마스크는 이것이 해당 경우일 것이고 제1 소스의 첫 번째 데이터 요소가 목적지 레지스터의 첫 번째 데이터 요소 위치에 저장되었다고 나타내었다.
첫 번째 비트 위치가, 제1 소스의 첫 번째 위치에서의 데이터 요소가 목적지 레지스터의 첫 번째 위치에 저장되지 않아야 한다고 나타낸다면, 507에서 제2 소스의 첫 번째 위치에서의 데이터 요소가 저장된다. 도 1을 다시 참조하면, 마스크는 이것이 해당 경우가 아니었을 것이라고 표시했다.
평가된 기입 마스크 위치가 기입 마스크의 마지막이거나 목적지의 데이터 요소 위치들 모두가 채워졌는지의 결정이 509에서 이루어진다. 참이라면, 동작이 종료한다. 참이 아니라면, 511에서 기입 마스크의 다음 비트 위치를 평가하여 그 값을 결정한다.
503에서, 기입 마스크의 이 후속 비트 위치에서의 값이, 제1 소스의 대응하는 데이터 요소(두 번째 데이터 요소)가 목적지의 대응하는 위치에 저장되어야 한다는 것을 나타내는지에 관한 결정이 이루어진다. 이것은 마스크 내의 모든 비트들이 소진되거나 목적지의 데이터 요소들 모두가 채워질 때까지 반복된다. 예를 들어, 후자의 경우는, 데이터 요소 크기가 64 비트이고, 목적지가 512 비트이고, 기입 마스크가 16 비트를 가질 때, 발생할 수 있다. 그 경우, 기입 마스크의 8 비트만이 필요할 것이지만, 블렌드 명령어는 완료되었을 것이다. 바꿔 말하면, 사용할 기입 마스크의 비트수는 기입 마스크 크기와 각 소스의 데이터 요소들의 개수에 의존한다.
도 6은 블렌드 명령어를 처리하기 위한 방법의 실시예를 나타낸다. 이 실시예에서, 동작(401-407)의 전부는 아니더라도 일부가 601 이전에 수행되었다고 가정된다. 601에서, 이용될 기입 마스크의 각 비트 위치에 대해, 그 비트 위치에서의 값이 제1 소스의 대응하는 데이터 요소가 목적지 레지스터의 대응하는 위치에 저장되어야 한다는 것을 나타내는지의 결정이 이루어진다.
제1 소스의 데이터 요소가 목적지 레지스터에 저장되어야 한다는 것을 나타내는 기입 마스크의 각 비트 위치에 대해, 605에서 그 데이터 요소가 적절한 위치에 기입된다. 제2 소스의 데이터 요소가 목적지 레지스터에 저장되어야 한다는 것을 나타내는 기입 마스크의 각 비트 위치에 대해, 603에서 그 데이터 요소가 적절한 위치에 기입된다. 일부 실시예에서, 603 및 605는 병렬로 수행된다.
도 5 및 도 6은 제1 소스에 기초하여 결정하는 것을 논의했지만, 결정을 위해 어느 소스라도 이용될 수 있다. 추가로, 한 소스의 데이터 요소가 기입되지 않아야 할 때 다른 소스의 대응하는 데이터 요소가 목적지 레지스터에 기입되어야 한다는 것을 명확하게 이해해야 한다.
인텔사의 AVX는 즉석값들(VBLENDPS)에 기초하여 또는 제3 벡터 소스의 요소들의 부호 비트들(VBLENDVPS)에 기초하여 BLEND 벡터 명령어의 다른 버전들을 도입했다. 첫 번째는 블렌딩 정보가 정적(static)이라는 단점이 있는 반면 두 번째는 동적 블렌딩 정보가 다른 벡터 레지스터로부터 나오므로, 추가의 레지스터 판독 압박, 스토리지 낭비(부울 표현을 위해 실제로는 매 32비트당 1비트만이 유용하다), 및 추가의 오버헤드(서술 정보(predication information)가 참-데이터 벡터 레지스터 내로 매핑될 필요가 있으므로)를 야기한다는 단점이 있다. VBLENDMPS는 참 마스크 레지스터(true mask register)에 포함된 서술 정보를 이용하여 2개의 소스로부터의 값들을 블렌딩하는 개념을 도입하고 있다. 이것은 다음과 같은 이점을 가진다: 가변 블렌딩을 허용하고, 디커플링된 연산 및 서술 로직 컴포넌트(predicated logic component)를 허용하며(벡터들에 대해 연산이 수행되고, 마스크에 대해 서술이 수행되고; 마스크는 제어-흐름 정보에 기초하여 연산 데이터를 블렌딩하는데 이용됨), 벡터 레지스터 파일에 관한 판독 압박을 경감하고(마스크 판독이 더 싸고, 별개의 레지스터 파일에 관해 이루어짐), 스토리지 낭비를 피한다(32비트/64비트 중에서 요소당 1비트만이 실제로 필요하므로, 벡터에 관한 부울 저장은 대단히 비효율적임).
전술된 명령어(들)의 실시예들은 후술되는 "일반 친벡터 명령어 포맷"으로 구현될 수 있다. 다른 실시예들에서, 이러한 포맷은 이용되지 않고 또 다른 명령어 포맷이 이용되지만, 기입 마스크 레지스터, 다양한 데이터 변환(스위즐, 브로드캐스트 등), 어드레싱 등에 관한 이하의 설명은 상기 명령어(들)의 실시예들의 설명에 일반적으로 적용가능하다. 추가로, 예시적 시스템, 아키텍처, 및 파이프라인들이 후술된다. 상기 명령어(들)의 실시예들은 이러한 시스템, 아키텍처, 및 파이프라인에서 실행될 수 있지만, 열거한 것들로 제한되는 것은 아니다.
친벡터 명령어 포맷은, 벡터 명령어에 적합한 명령어 포맷이다(예를 들어, 벡터 연산 특유의 소정 필드들이 존재). 친벡터 명령어 포맷을 통해 벡터 및 스칼라 연산 양쪽 모두가 지원되는 실시예들이 설명되지만, 대안적 실시예들은 친벡터 명령어 포맷의 벡터 연산만을 이용한다.
예시적인 일반 친벡터 명령어 포맷 ― 도 7a 및 도 7b
도 7a 및 도 7b는 본 발명의 실시예에 따른 일반 친벡터 명령어 포맷 및 그 명령어 템플릿을 나타내는 블록도이다. 도 7a는 본 발명의 실시예에 따른 일반 친벡터 명령어 포맷 및 그 클래스 A 명령어 템플릿을 나타내는 블록도인 반면; 도 7b는 본 발명의 실시예에 따른 일반 친벡터 명령어 포맷 및 그 클래스 B 명령어 템플릿을 나타내는 블록도이다. 구체적으로는, 클래스 A 및 클래스 B 명령어 템플릿이 정의되는 일반 친벡터 명령어 포맷(700)은 양쪽 모두 비 메모리 액세스(705) 명령어 템플릿 및 메모리 액세스(720) 명령어 템플릿을 포함한다. 친벡터 명령어 포맷의 맥락에서 용어 "일반"이란 임의의 특정한 명령어 세트에 구속되지 않는 명령어 포맷을 말한다. 친벡터 명령어 포맷의 명령어가 레지스터로부터 소싱되는(비메모리 액세스(705) 명령어 템플릿) 벡터 또는 레지스터/메모리로부터 소싱되는(메모리 액세스(720) 명령어 템플릿) 벡터에 대해 동작하는 실시예가 설명될 것이지만, 본 발명의 대안적 실시예는 이들 중 하나만을 지원할 수도 있다. 또한, 벡터 명령어 포맷의 로딩 및 저장 명령어가 존재하는 본 발명의 실시예들이 설명되지만, 대안적 실시예는 그 대신에 또는 추가로 레지스터 내외로(예를 들어, 메모리로부터 레지스터 내로, 레지스터로부터 메모리 내로, 레지스터들 간에) 벡터를 이동시키는 상이한 명령어 포맷의 명령어를 가진다. 또한, 2개 클래스의 명령어 템플릿을 지원하는 본 발명의 실시예들이 설명될 것이지만, 대안적 실시예는 이들 중 단 하나 또는 2개보다 많이 지원할 수도 있다.
친벡터 명령어 포맷이 다음과 같은 것을 지원하는 본 발명의 실시예가 설명될 것이다: 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 바이트) 데이터 요소 폭)을 갖는 더 많거나, 더 작거나, 및/또는 상이한 벡터 피연산자 크기(예를 들어, 756 바이트 벡터 피연산자)를 지원할 수도 있다.
도 7a의 클래스 A 명령어 템플릿은 : 1) 비 메모리 액세스(705) 명령어 템플릿 내에서, 도시되어 있는, 비 메모리 액세스, 풀 라운드 제어 타입 연산(710) 명령어 템플릿, 및 비 메모리 액세스, 데이터 변환 타입 연산(715) 명령어 템플릿과; 2) 메모리 액세스(720) 명령어 템플릿 내에서, 도시되어 있는, 메모리 액세스, 임시(725) 명령어 템플릿과 메모리 액세스, 비임시(730) 명령어 템플릿을 포함한다. 도 7b의 클래스 B 명령어 템플릿은 : 1) 비 메모리 액세스(705) 명령어 템플릿 내에서, 도시되어 있는, 비 메모리 액세스, 기입 마스크 제어, 부분 라운드 제어 타입 연산(712) 명령어 템플릿, 및 비 메모리 액세스, 기입 마스크 제어, vsize 타입 연산(717) 명령어 템플릿과; 2) 메모리 액세스(720) 명령어 템플릿 내에서, 도시되어 있는, 메모리 액세스, 기입 마스크 제어(727) 명령어 템플릿을 포함한다.
포맷
일반 친벡터 명령어 포맷(700)은 도 7a 및 도 7b에 나타낸 순서대로 아래에 열거된 다음과 같은 필드들을 포함한다.
포맷 필드(740) ― 이 필드 내의 특정한 값(명령어 포맷 식별자 값)은, 친벡터 명령어 포맷, 및 그에 따라 명령어 스트림 내에서 친벡터 명령어 포맷의 명령어들의 출현을 고유하게 식별한다. 따라서, 포맷 필드(740)의 내용은 제1 명령어 포맷의 명령어의 출현을 다른 명령어 포맷의 명령어의 출현과 구분함으로써, 다른 명령어 포맷을 갖는 명령어 세트 내로의 친벡터 명령어 포맷의 도입을 허용한다. 이와 같이, 이 필드는 일반 친벡터 명령어 포맷만을 갖는 명령어 세트에 대해서는 필요하지 않다는 점에서 선택사항이다.
베이스 연산 필드(742) ― 그 내용은 상이한 베이스 연산들을 구분한다. 여기서 후술되는 바와 같이, 베이스 연산 필드(742)는 연산코드(opcode) 필드를 포함하거나 및/또는 그 일부일 수 있다.
레지스터 인덱스 필드(744) ― 그 내용은, 직접 또는 주소 생성을 통해, 레지스터에 있거나 메모리에 있는, 소스 및 목적지 피연산자의 위치를 명시한다. 이들은, PxQ(예를 들어, 32x912)개의 레지스터 파일로부터 N개의 레지스터를 선택하기에 충분한 개수의 비트를 포함한다. 한 실시예에서 N은 최대 3개의 소스와 하나의 목적지 레지스터일 수 있지만, 대안적 실시예는 더 많거나 더 적은 소스 및 목적지 레지스터를 지원할 수 있다(예를 들어, 최대 2개의 소스를 지원하고 이들 소스들 중 하나가 목적지로서 역할할 수 있거나, 최대 3개의 소스를 지원하고 이들 소스들 중 하나가 목적지로서 역할할 수 있거나, 최대 2개의 소스와 하나의 목적지를 지원할 수도 있다). 한 실시예에서 P=32이지만, 대안적 실시예는 더 많거나 더 적은 레지스터(예를 들어, 16개)를 지원할 수도 있다. 한 실시예에서 Q=912 비트이지만, 대안적 실시예는 더 많거나 더 적은 비트를 지원할 수도 있다(예를 들어, 128, 1024).
수식자 필드(746) ― 그 내용은 메모리 액세스를 명시하는 일반 벡터 명령어 포맷의 명령어의 출현을 그렇지 않는 명령어와 구분한다; 즉, 비 메모리 액세스(705) 명령어 템플릿과 메모리 액세스(720) 명령어 템플릿 간을 구분한다. 메모리 액세스 연산은 메모리 계층 구조를 판독 및/또는 이에 기입하는(일부 경우에는 레지스터 내의 값을 이용하여 소스 및/또는 목적지 주소를 명시하는) 반면, 비 메모리 액세스 연산은 그렇지 않다(예를 들어, 소스 및 목적지가 레지스터임). 한 실시예에서 이 필드는 또한 메모리 주소 계산을 수행하는 3가지 상이한 방식들 사이에서 선택하지만, 대안적 실시예는 메모리 주소 계산을 수행하기 위해 더 많거나, 더 적거나, 상이한 방식들을 지원할 수도 있다.
확장 연산 필드(750) ― 그 내용은 베이스 연산 외에 다양한 상이한 연산들 중 어느 것을 수행할지를 구분한다. 이 필드는 컨텍스트 특유이다. 본 발명의 한 실시예에서, 이 필드는 클래스 필드(768), 알파 필드(752), 및 베타 필드(754)로 구분된다. 확장 연산 필드는 공통의 연산 그룹이 2, 3, 또는 4개 명령어가 아니라 하나의 명령어에서 수행되는 것을 허용한다. 아래에는, 필요한 명령어의 개수를 줄이기 위해 확장 필드(750)를 이용하는 명령어들(그 명명법은 이후에 더 상세히 설명된다)의 몇 가지 예가 있다.
Figure 112013099262512-pct00001
여기서, [rax]는 주소 생성에 이용되는 베이스 포인터(base pointer)이고, {}는 (이후에 더 상세히 설명되는) 데이터 조작 필드에 의해 명시된 컨버전 연산을 나타낸다.
스케일 필드(760) ― 그 내용은 메모리 주소 생성(예를 들어, 2스케일*인덱스+베이스를 이용하는 주소 생성)을 위한 인덱스 필드의 내용의 스케일링을 허용한다.
변위 필드(762A) - 그 내용은 메모리 주소 생성(예를 들어, 2스케일*인덱스+베이스+변위를 이용하는 주소 생성)의 일부로서 이용된다.
변위 계수 필드(762B)(변위 계수 필드(762B) 바로 위의 변위 필드(762A)의 병렬 배치는 한쪽이나 다른 한쪽이 이용됨을 나타낸다는 점에 유의한다) ― 그 내용은 주소 생성의 일부로서 이용된다; 이것은 메모리 액세스의 크기(N)에 의해 스케일링될 변위 계수를 명시한다 ― 여기서, N은 메모리 액세스에서의 바이트 수이다(예를 들어, 2스케일*인덱스+베이스+스케일링된 변위를 이용하는 주소 생성의 경우). 리던던트 저차수 비트(Redundant low-order bit)들은 무시되므로, 유효 주소 계산에 이용될 최종 변위를 생성하기 위하여 변위 계수 필드의 내용은 메모리 피연산자 총 크기(N)로 곱해진다. N의 값은 (이후에 설명되는) 전체 연산코드 필드(774)와 이후에 설명되는 데이터 조작 필드(754C)에 기초하여 런타임시에 프로세서 하드웨어에 의해 결정된다. 변위 필드(762A) 및 변위 계수 필드(762B)는, 비 메모리 액세스(705) 명령어 템플릿에 이용되지 않고 및/또는 상이한 실시예는 둘 중 하나만 이용하거나 아무것도 이용하지 않는다는 점에서 선택사항이다.
데이터 요소 폭 필드(764) ― 그 내용은 다수의 데이터 요소 폭들 중 어떤 것을 이용할 것인지를 구분한다(일부 실시예에서는 모든 명령에 대해; 다른 실시예에서는 명령어들 중 일부에 대해서만). 이 필드는 하나의 데이터 요소 폭만이 지원되거나 및/또는 연산코드들 중 일부 양태를 이용하여 데이터 요소 폭들이 지원된다는 점에서 선택사항이다.
기입 마스크 필드(770) ― 그 내용은, 데이터 요소 위치별 기반으로, 목적지 벡터 피연산자 내의 그 데이터 요소 위치가 베이스 연산과 확장 연산의 결과를 반영하는지를 제어한다. 클래스 A 명령어 템플릿은 병합-기입마스킹을 지원하는 반면, 클래스 B 명령어 템플릿은 병합- 및 제로화-기입마스킹 양쪽 모두를 지원한다. 병합시에, 벡터 마스크는 (베이스 연산 및 확장 연산에 의해 명시된) 임의의 연산의 실행 동안에 목적지 내의 임의의 요소 세트가 업데이트 방지되는 것을 허용한다; 다른 한 실시예에서, 대응하는 마스크 비트가 0을 갖는 목적지의 각 요소의 구 값(old value)을 보존한다. 대조적으로, 제로화 벡터 마스크가 (베이스 연산 및 확장 연산에 의해 명시된) 임의의 연산의 실행 동안에 목적지 내의 임의의 요소 세트가 제로화되는 것을 허용한다; 한 실시예에서, 목적지의 요소는 대응하는 마스크 비트가 0 값을 가질 때 0으로 설정된다. 이러한 기능의 부분집합은 수행 중인 연산의 벡터 길이(즉, 첫 번째 것으로부터 마지막 것까지, 수정 중인 요소들의 스팬)를 제어하는 능력이다; 그러나, 수정되는 요소들이 연속적일 필요는 없다. 따라서, 기입 마스크 필드(770)는, 로딩, 저장, 산술, 논리 등을 포함한 부분 벡터 연산을 허용한다. 또한, 이 마스킹은 오류(fault) 억제에 이용될 수 있다(즉, 오류를 야기할 수 있는/야기할 임의의 동작 결과의 수신을 방지하기 위해 목적지의 데이터 요소 위치를 마스킹함으로써, - 예를 들어, 메모리 내의 벡터가 페이지 경계를 가로지르고 제2 페이지가 아니라 제1 페이지가 페이지 오류를 야기한다고 가정하면, 제1 페이지 상에 놓인 벡터의 모든 데이터 요소가 기입 마스크에 의해 마스킹된다면 그 페이지 오류는 무시될 수 있다). 또한, 기입 마스크는 소정 타입의 조건문을 포함하는 "벡터화 루프"를 허용한다. 기입 마스크 필드(770)의 내용이 사용될 기입 마스크를 포함하는 다수의 기입 마스크 레지스터들 중 하나를 선택하는(및 그에 따라 기입 마스크 필드(770)의 내용은 수행될 마스킹을 간접적으로 식별한다) 본 발명의 실시예가 설명되지만, 대안적 실시예는 그 대신에 또는 추가로 마스크 기입 필드(770)의 내용이 수행될 마스킹을 직접적으로 명시하는 것을 허용한다. 또한, 제로화는 1) 레지스터 리네이밍 파이프라인 스테이지 동안에 목적지가 더 이상 묵시적 소스가 아니므로(연산 결과가 아닌 임의의 데이터 요소(및 임의의 마스킹된 데이터 요소)가 제로화될 것이므로 현재의 목적지 레지스터로부터의 어떠한 데이터 요소도 리네임된 목적지 레지스터에 복사될 필요가 없거나 연산과 함께 어떻게든 캐리될 필요가 없다) 목적지 피연산자도 역시 소스가 아닌 명령어(3변수 명령어라고도 함)들에 관해 레지스터 리네이밍이 이용될 때; 및 2) 제로가 기입 중인 이유로 되기입(write back) 스테이지 동안에, 성능 개선을 허용한다.
즉석 필드(772) ― 그 내용은 즉석값의 명시를 허용한다. 이 필드는, 즉석값을 지원하지 않는 일반 친벡터 포맷의 구현에는 존재하지 않고 즉석값을 이용하지 않는 명령어에는 존재하지 않는다는 점에서 선택사항이다.
명령어 템플릿 클래스 선택
클래스 필드(768) ― 그 내용은 명령어들의 상이한 클래스들 간을 구분한다. 도 2a 및 도 2b를 참조하면, 이 필드의 내용은 클래스 A와 클래스 B 명령어 사이에서 선택한다. 도 7a 및 도 7b에서, 필드에 특정한 값이 존재한다는 것을 나타내기 위해 둥근 코너 사각형이 이용된다(예를 들어, 도 7a 및 도 7b에서 각각 클래스 필드(768)에 대한 클래스 A(768A) 및 클래스 B(768B)).
클래스 A의 비 액세스 메모리 명령어 템플릿
클래스 A의 비 메모리 액세스(705) 명령어 템플릿의 경우, 알파 필드(752)는 RS 필드(752A)로서 해석되고, 그 내용은 상이한 확장 연산 타입들 중 어느 것이 수행될 것인지를 구분하는(예를 들어, 라운드(752A.1) 및 데이터 변환(752A.2)은 각각 비 메모리 액세스, 라운드 타입 연산(710)과, 비 메모리 액세스, 데이터 변환 타입 연산(715) 명령어 템플릿에 대해 명시된다) 반면, 베타 필드(754)는 명시된 타입의 연산들 중 어느 것이 수행될 것인지를 구분한다. 도 7에서, 둥근 코너 블록들은 특정한 값이 존재한다는 것을 나타내는데 이용된다(예를 들어, 수식자 필드(746) 내의 비 메모리 액세스(746A); 알파 필드(752)/rs 필드(752A)에 대한 라운드(752A.1) 및 데이터 변환(752A.2). 비 메모리 액세스(705) 명령어 템플릿에서, 스케일 필드(760), 변위 필드(762A), 및 변위 스케일 필드(762B)는 존재하지 않는다.
비 메모리 액세스 명령어 템플릿 ― 풀 라운드 제어 타입 연산(Full Round Control Type Operation)
비 메모리 액세스 풀 라운드 제어 타입 연산(710) 명령어 템플릿에서, 베타 필드(754)는 라운드 제어 필드(754A)로서 해석되고, 그 내용(들)은 정적 라운딩을 제공한다. 본 발명의 설명된 실시예에서, 라운드 제어 필드(754A)는 모든 부동 소수점 예외 억제(SAE; suppress all floating point exception) 필드(756) 및 라운드 연산 제어 필드(758)를 포함하지만, 대안적 실시예는 이들 개념들 양쪽 모두를 동일한 필드 내에 인코딩하거나 이들 개념들/필드들 중 하나 또는 다른 하나만을 가질 수 있다(예를 들어, 라운드 연산 제어 필드(758)만을 가질 수 있다).
SAE 필드(756) ― 그 내용은 예외 이벤트 보고를 디스에이블할지의 여부를 구분한다; SAE 필드(756)의 내용이 억제가 인에이블되어 있음을 나타낼 때, 주어진 명령어는 어떠한 종류의 부동 소수점 예외 플래그도 보고하지 않고 어떠한 부동 소수점 예외 핸들러도 야기하지 않는다.
라운드 연산 제어 필드(758) ― 그 내용은 한 그룹의 라운딩 연산들 중 어느 것을 수행할 것인지를 구분한다(예를 들어, 라운드-업, 라운드-다운, 제로를 향한 라운드 및 최근접치로의 라운드). 따라서, 라운드 연산 제어 필드(758)는 명령어별 기반의 라운딩 모드의 변경을 허용하므로, 특히 이것이 필요할 때 유용하다. 프로세서가 라운딩 모드를 명시하기 위한 제어 레지스터를 포함하는 본 발명의 한 실시예에서, 라운드 연산 제어 필드(750)의 내용은 그 레지스터 값보다 우선시된다(이러한 제어 레지스터 상에서 저장-수정-복구를 수행해야만 하지 않고 라운딩 모드를 선택할 수 있는 것은 유익하다).
비 메모리 액세스 명령어 템플릿 ― 데이터 변환 타입 연산
비 메모리 액세스 데이터 변환 타입 연산(715) 명령어 템플릿에서, 베타 필드(754)는 데이터 변환 필드(754B)로서 해석되고, 그 내용은 다수의 데이터 변환(예를 들어, 데이터 변환 없음, 스위즐, 브로드캐스트) 중 어느 것이 수행될 것인지를 구분한다.
클래스 A의 액세스 메모리 명령어 템플릿
클래스 A의 메모리 액세스(720) 명령어 템플릿의 경우, 알파 필드(752)는 에빅션 힌트 필드(eviction hint field, 752B)로서 해석되고, 그 내용은 에빅션 힌트들 중 어느 것이 이용될 것인지를 구분하는(도 7a에서, 메모리 액세스, 임시(725) 명령어 템플릿과, 메모리 액세스, 비임시(730) 명령어 템플릿에 대해 임시(752B.1) 및 비임시(752B.2)가 각각 명시된다) 반면, 베타 필드(754)는 데이터 조작 필드(754C)로서 해석되고, 그 내용은 (프리미티브라고도 알려진) 다수의 데이터 조작 연산들 중 어느 것이 수행될 것인지를 구분한다(예를 들어, 데이터 조작 없음; 브로드캐스트; 소스의 업 컨버전; 및 목적지의 다운 컨버전). 메모리 액세스(720) 명령어 템플릿은, 스케일 필드(760), 및 선택사항으로서의 변위 필드(762A) 또는 변위 스케일 필드(762B)를 포함한다.
벡터 메모리 명령어는, 컨버전 지원과 함께, 메모리로부터의 벡터 로딩 및 메모리로의 벡터 저장을 수행한다. 보통의 벡터 메모리 명령어에서와 같이, 벡터 메모리 명령어는 데이터-요소별 방식으로 메모리로부터/메모리로 데이터를 이송하며, 실제로 이송되는 요소들은 기입 마스크로서 선택되는 벡터 마스크의 내용에 의해 지시된다. 도 7a에서, 둥근 코너 사각형은 필드에 특정한 값이 존재한다는 것을 나타내는 데 사용된다(예를 들어, 수식자 필드(746)에 대한 메모리 액세스(746B); 알파 필드(752)/에빅션 힌트 필드(752B)에 대한 임시(752B.1) 및 비임시(752B.2)).
메모리 액세스 명령어 템플릿 - 임시
임시 데이터는 캐싱의 혜택을 받기에 충분히 조만간 재사용될 가능성이 있는 데이터이다. 그러나, 이것은 힌트이고, 상이한 프로세서는 힌트를 완전히 무시하는 것을 포함한 상이한 방식으로 그것을 구현할 수 있다.
메모리 액세스 명령어 템플릿 - 비임시
비임시 데이터는, 제1 레벨 캐시에서의 캐싱의 혜택을 받기에 충분히 조만간 재사용될 것 같지 않은 데이터이며, 에빅션을 위해 우선권을 부여받아야 한다. 그러나, 이것은 힌트이고, 상이한 프로세서는 힌트를 완전히 무시하는 것을 포함한 상이한 방식으로 그것을 구현할 수 있다.
클래스 B의 명령어 템플릿
클래스 B의 명령어 템플릿의 경우, 알파 필드(752)는 기입 마스크 제어(Z) 필드(752C)로서 해석되고, 그 내용은 기입 마스크 필드(770)에 의해 제어되는 기입 마스킹이 병합이어야 하는지 또는 제로화이어야 하는지를 구분한다.
클래스 B의 비 액세스 메모리 명령어 템플릿
클래스 B의 비 메모리 액세스(705) 명령어 템플릿의 경우, 베타 필드(754)의 일부는 RL 필드(757A)로서 해석되고, 그 내용은 상이한 확장 연산 타입들 중 어느 것이 수행될 것인지를 구분하는(예를 들어, 비 메모리 액세스, 기입 마스크 제어, 부분 라운드 제어 타입 연산(712) 명령어 템플릿과, 비 메모리 액세스, 기입 마스크 제어, VSIZE 타입 연산(717) 명령어 템플릿에 대해 각각 라운드(757A.1) 및 벡터 길이(VSIZE)(757A.2)가 명시된다) 반면, 베타 필드(754)의 나머지는 지정된 타입의 연산들 중 어느 것이 수행될 것인지를 구분한다. 도 7에서, 둥근 코너 블록들은 특정한 값이 존재한다는 것을 나타내는데 이용된다(예를 들어, 수식자 필드(746) 내의 비 메모리 액세스(746A); RL 필드(757A)에 대한 라운드(757A.1) 및 VSIZE(757A.2)). 비 메모리 액세스(705) 명령어 템플릿에서, 스케일 필드(760), 변위 필드(762A), 및 변위 스케일 필드(762B)는 존재하지 않는다.
비 메모리 액세스 명령어 템플릿 - 기입 마스크 제어, 부분 라운드 제어 타입 연산
비 메모리 액세스, 기입 마스크 제어, 부분 라운드 제어 타입 연산(710) 명령어 템플릿에서, 베타 필드(754)의 나머지는 라운드 연산 필드(759A)로서 해석되고 예외 이벤트 보고는 디스에이블된다(주어진 명령어는 어떠한 종류의 부동 소수점 예외 플래그도 보고하지 않고 어떠한 부동 소수점 예외 핸들러도 야기하지 않는다).
라운드 연산 제어 필드(759A) - 라운드 연산 제어 필드(758)와 마찬가지로, 그 내용은 한 그룹의 라운딩 연산들 중 어느 것을 수행할 것인지를 구분한다(예를 들어, 라운드-업, 라운드-다운, 제로를 향한 라운드 및 최근접치로의 라운드). 따라서, 라운드 연산 제어 필드(759A)는 명령어별 기반의 라운딩 모드의 변경을 허용하므로, 특히 이것이 필요할 때 유용하다. 프로세서가 라운딩 모드를 명시하기 위한 제어 레지스터를 포함하는 본 발명의 한 실시예에서, 라운드 연산 제어 필드(750)의 내용은 그 레지스터 값보다 우선시된다(이러한 제어 레지스터 상에서 저장-수정-복구를 수행해야만 하지 않고 라운딩 모드를 선택할 수 있는 것은 유익하다).
비 메모리 액세스 명령어 템플릿 - 기입 마스크 제어, VSIZE 타입 연산
비 메모리 액세스, 기입 마스크 제어, VSIZE 타입 연산(717) 명령어 템플릿에서, 베타 필드(754)의 나머지는 벡터 길이 필드(759B)로서 해석되고, 그 내용은 다수의 데이터 벡터 길이(예를 들어, 128, 756, 또는 912 바이트) 중 어느 것에 대해 수행될 것인지를 구분한다.
클래스 B의 액세스 메모리 명령어 템플릿
클래스 A의 메모리 액세스(720) 명령어 템플릿의 경우, 베타 필드(754)의 일부는 브로드캐스트 필드(757B)로서 해석되고, 그 내용은 브로드캐스트 타입 데이터 조작 연산이 수행될 것인지의 여부를 구분하는 반면, 베타 필드(754)의 나머지는 벡터 길이 필드(759B)로서 해석된다. 메모리 액세스(720) 명령어 템플릿은, 스케일 필드(760), 및 선택사항으로서의 변위 필드(762A) 또는 변위 스케일 필드(762B)를 포함한다.
필드들에 관한 추가 코멘트
일반 친벡터 명령어 포맷(700)에 관하여, 포맷 필드(740), 베이스 연산 필드(742), 및 데이터 요소 폭 필드(764)를 포함하는 전체 연산코드 필드(774)가 도시되어 있다. 전체 연산코드 필드(774)가 이들 필드들 모두를 포함하는 한 실시예가 도시되지만, 이들 모두를 지원하지는 않는 실시예에서, 전체 연산코드 필드(774)는 이들 필드들 모두보다 적은 필드들을 포함한다. 전체 연산코드 필드(774)는 연산 코드를 제공한다.
확장 연산 필드(750), 데이터 요소 폭 필드(764), 및 기입 마스크 필드(770)는, 이들 특징들이 명령어별 기반으로 일반 친벡터 명령어 포맷으로 명시되는 것을 허용한다.
기입 마스크 필드와 데이터 요소 폭 필드의 조합은 타입화된 명령어를 생성하는데, 이러한 명령어는 마스크가 상이한 데이터 요소 폭들에 기초하여 적용되는 것을 허용하기 때문이다.
명령어 포맷은, 다른 필드들의 내용에 기초하여 상이한 목적에 대해 상이한 필드들을 재사용하기 때문에, 비교적 적은 수의 비트를 요구한다. 예를 들어, 하나의 관점은 수식자 필드의 내용은 도 7a 및 도 7b의 비 메모리 액세스(705) 명령어 템플릿과 도 7a 및 도 7b의 메모리 액세스(720) 명령어 템플릿 간에 선택하는 한편; 클래스 필드(768)의 내용은 이들 비 메모리 액세스(705) 명령어 템플릿 내에서 도 7a의 명령어 템플릿(710/715)과 도 7b의 명령어 템플릿(712/717) 사이에서 선택하는 반면; 클래스 필드(768)의 내용은 이들 메모리 액세스(720) 명령어 템플릿들 내에서 도 7a의 명령어 탬플릿(725/730)과 도 7b의 명령어 템플릿(727) 사이에서 선택한다는 것이다. 또 다른 관점에서, 클래스 필드(768)의 내용은 각각 도 7a 및 도 7b의 클래스 A와 클래스 B 명령어 템플릿들 사이에서 선택하는 한편; 수식자 필드의 내용은 이들 클래스 A 명령어 템플릿들 내에서 도 7a의 명령어 탬플릿들(705 및 720) 사이에서 선택하는 반면; 수식자 필드의 내용은 이들 클래스 B 명령어 템플릿들 내에서 도 7b의 명령어 템플릿들(705 및 720) 사이에서 선택한다. 클래스 필드의 내용이 클래스 A 명령어 템플릿을 나타내는 경우, 수식자 필드(746)의 내용은 (rs 필드(752A)와 EH 필드(752B) 사이에서) 알파 필드(752)의 해석을 선택한다. 유사한 방식으로, 수식자 필드(746) 및 클래스 필드(768)의 내용은 알파 필드가 rs 필드(752A)로서 해석될지, EH 필드(752B)로서 해석될지, 또는 기입 마스크 제어(Z) 필드(752C)로서 해석될지를 선택한다. 클래스 및 수식자 필드가 클래스 A 비 메모리 액세스 연산을 나타내는 경우, 확장 필드의 베타 필드의 해석은 rs 필드의 내용에 기초하여 변한다; 반면, 클래스 및 수식자 필드가 클래스 B 비 메모리 액세스 연산을 나타내는 경우, 베타 필드의 해석은 RL 필드의 내용에 의존한다. 클래스 및 수식자 필드가 클래스 A 메모리 액세스 연산을 나타내는 경우, 확장 필드의 베타 필드의 해석은 베이스 연산 필드의 내용에 기초하여 변한다; 반면, 클래스 및 수식자 필드가 클래스 B 메모리 액세스 연산을 나타내는 경우, 확장 필드의 베타 필드의 브로드캐스트 필드(757B)의 해석은 베이스 연산 필드의 내용에 기초하여 변한다. 따라서, 베이스 연산 필드, 수식자 필드 및 확장 연산 필드의 조합은 훨씬 더 다양한 확장 연산이 명시되는 것을 허용한다.
클래스 A 및 클래스 B 내에서 발견되는 다양한 명령어 템플릿들은 상이한 상황들에서 유익하다. 클래스 A는, 성능상의 이유로 제로화-기입마스킹 또는 더 작은 벡터 길이들이 바람직할 때 유용하다. 예를 들어, 제로화는, 리네이밍이 이용될 때 목적지와의 인위적 병합이 더 이상 필요하지 않으므로 가짜 의존성(fake dependence)의 회피를 허용한다; 또 다른 예로서, 벡터 길이 제어는 벡터 마스크로 더 짧은 벡터 크기를 에뮬레이팅할 때 저장-로딩 포워딩 문제를 용이하게 한다. 클래스 B는 1) 부동 소수점 예외를 허용하면서(즉, SAE 필드의 내용이 아무것도 나타내지 않을 때) 동시에 라운딩-모드 제어를 이용하는 것이 바람직할 때; 2) 업컨버전, 스위즐링, 스왑, 및/또는 다운컨버전을 이용할 수 있는 것이 바람직할 때; 3) 그래픽 데이터 타입에 관해 연산하는 것이 바람직할 때 유용하다. 예를 들어, 업컨버전, 스위즐링, 스왑, 다운컨버전, 및 그래픽 데이터 타입은 상이한 포맷의 소스들과 함께 동작할 때 요구되는 명령어의 개수를 줄인다; 또 다른 예로서, 예외를 허용하는 능력은 지시된 라운딩 모드들과의 완전한 IEEE 호환성을 제공한다.
예시적인 특정의 친벡터 명령어 포맷
도 8a 내지 도 8c는 본 발명의 실시예에 따른 예시적인 특정의 친벡터 명령어 포맷을 나타낸다. 도 8a 내지 도 8c는, 위치, 크기, 해석, 및 필드 순서뿐만 아니라 이들 필드들의 일부에 대한 값을 명시한다는 점에서 특정적인, 특정의 친벡터 명령어 포맷(800)을 도시한다. 특정의 친벡터 명령어 포맷(800)은 x86 명령어 세트를 확장하는데 이용될 수 있으므로, 필드들 중 일부는 기존 x86 명령어 세트 및 그 확장판(예를 들어, AVX)에서 이용되는 것들과 유사하거나 동일하다. 이 포맷은, 프레픽스 인코딩 필드, 리얼 연산코드 바이트 필드, MOD R/M 필드, SIB 필드, 변위 필드, 및 확장된 기존 x86 명령어 세트의 즉석 필드와의 일치성을 유지한다. 도 8a 내지 도 8c의 필드들이 매핑되는 도 7의 필드들이 도시되어 있다.
본 발명의 실시예들이 예시의 목적을 위해 일반 친벡터 명령어 포맷(700)의 정황에서 특정의 친벡터 명령어 포맷(800)을 참조하여 설명되지만, 본 발명은 청구되는 경우를 제외하고는 특정의 친벡터 명령어 포맷(800)으로 제한되지 않는다는 것을 이해하여야 한다. 예를 들어, 일반 친벡터 명령어 포맷(700)은 다양한 필드들에 대한 다양한 가능한 크기를 고려하는 반면, 특정의 친벡터 명령어 포맷(800)은 특정 크기의 필드들을 갖는 것으로 도시되어 있다. 구체적인 예로서, 데이터 요소 폭 필드(764)는 특정의 친벡터 명령어 포맷(800)에서는 1 비트 필드로서 예시되어 있지만, 본 발명은 이와 같이 제한되는 것은 아니다(즉, 일반 친벡터 명령어 포맷(700)은 데이터 요소 폭기 필드(764)의 다른 크기를 고려한다).
포맷 ― 도 8a 내지 도 8c
일반 친벡터 명령어 포맷(700)은 도 8a 내지 도 8c에 나타낸 순서대로 아래에 열거된 다음과 같은 필드들을 포함한다.
EVEX 프레픽스(바이트 0-3)
EVEX 프레픽스(802) ― 4 바이트 형태로 인코딩됨.
포맷 필드(740)(EVEX 바이트 0, 비트 [7:0]) ― 첫 번째 바이트(EVEX 바이트 0)는 포맷 필드(740)이고 0x62(본 발명의 한 실시예에서 친벡터 명령어 포맷을 구분하기 위해 이용되는 고유한 값)를 포함한다.
2번째-4번째 바이트(EVEX 바이트 1-3)는 특정한 능력을 제공하는 다수의 비트 필드들을 포함한다.
REX 필드(805)(EVEX 바이트 1, 비트[7-5]) ― EVEX.R 비트 필드(EVEX 바이트 1, 비트 [7] - R), EVEX.X 비트 필드(EVEX 바이트 1, 비트 [6] ― X), 및 757BEX 바이트 1, 비트[5] ―B)로 구성됨. EVEX.R, EVEX.X, 및 EVEX.B 비트 필드들은 대응하는 VEX 비트 필드들과 동일한 기능을 제공하고, 1의 보수(complement) 형태를 이용하여 인코딩되는데, 즉, ZMM0은 1111B로서 인코딩되고, ZMM15는 0000B로서 인코딩된다. 명령어의 다른 필드들은, 종래 기술에 공지된 바와 같이 레지스터 인덱스들의 하위 3비트를 인코딩하여(rrr, xxx, 및 bbb), EVEX.R, EVEX.X, 및 EVEX.B를 더함으로써 Rrrr, Xxxx, 및 Bbbb가 형성될 수 있다.
REX' 필드(810) ― 이것은 REX' 필드(810)의 제1 부분이고, 확장된 32개 레지스터 세트의 상위 16개 또는 하위 16 중 어느 한쪽을 인코딩하는데 이용되는 EVEX.R' 비트 필드(EVEX 바이트 1, 비트 [4] - R')이다. 본 발명의 한 실시예에서, 이 비트는, 아래에 표시된 다른 것들과 함께, (공지된 x86 32-비트 모드에서) BOUND 명령어와 구분하기 위해 비트 반전된 포맷으로 저장되며, BOUND 명령어의 리얼 연산코드 바이트는 62이지만, (이하에 설명되는) MOD R/M 필드에서 MOD 필드의 값 11을 수락하지 않는다; 본 발명의 대안적 실시예는 이것과 이하의 기타 표시된 비트들을 반전된 포맷으로 저장하지 않는다. 값 1은 하위 16개 레지스터를 인코딩하는데 이용된다. 즉, R'Rrrr은 EVEX.R' EVEX.R, 및 다른 필드들로부터의 기타의 RRR을 결합함으로써 형성된다.
연산코드 맵 필드(815)(EVEX 바이트 1, 비트 [3:0] - mmmm) ― 그 내용은 묵시형 리딩(implied leading) 연산코드 바이트(0F, 0F 38 또는 0F 3)를 인코딩한다.
데이터 요소 폭 필드(764)(EVEX 바이트 2, 비트 [7] ― W) ― 표기 EVEX.W로 표현됨. EVEX.W는 데이터타입의 입도(크기)(32-비트 데이터 요소 또는 64-비트 데이터 요소)를 정의하는데 이용된다.
EVEX.vvvv(820)(EVEX 바이트 2, 비트 [6:3]-vvvv) ― EVEX.vvvv의 역할은 다음과 같은 것을 포함할 수 있다: 1) EVEX.vvvv는 반전된(1의 보수) 형태로 명시된 제1 소스 레지스터 피연산자를 인코딩하고 2개 이상의 소스 피연산자를 갖는 명령어에 대해 유효하다; 2) EVEX.vvvv는 소정의 벡터 시프트에 대해 1의 보수 형태로 명시된 목적지 레지스터 피연산자를 인코딩한다; 또는 3) EVEX.vvvv는 어떠한 피연산자도 인코딩하지 않으며, 이 필드는 예비되거나 1111b를 포함해야 한다. 따라서, EVEX.vvvv 필드(820)는 반전된(1의 보수) 형태로 저장된 제1 소스 레지스터 명시자(specifier)의 4개의 하위 비트들을 인코딩한다. 명령어에 따라, 명시자 크기를 32개 레지스터로 확장하기 위해 추가의 상이한 EVEX 비트 필드가 이용된다.
EVEX.U(768) 클래스 필드(EVEX 바이트 2, 비트 [2]-U) ― EVEX.U = 0이면, 이것은 클래스 A 또는 EVEX.U0을 나타낸다; EVEX.U = 1이면, 이것은 클래스 B 또는 EVEX.U1을 나타낸다.
프레픽스 인코딩 필드(825)(EVEX 바이트 2, 비트 [1:0]-pp) ― 베이스 연산 필드에 대해 추가 비트들을 제공함. EVEX 프레픽스 포맷의 레거시 SSE 명령에 대한 지원을 제공하기 위하여, 이것은 또한 SIMD 프레픽스 컴팩트화의 혜택을 가진다(SIMD 프레픽스를 표현하기 위해 바이트를 요구하는 것이 아니라, EVEX 프레픽스는 2비트만을 요구한다). 한 실시예에서, 레거시 포맷 및 EVEX 프레픽스 포맷 양쪽 모두의 SIMD 프레픽스(66H, F2H, F3H)를 이용하는 레거시 SSE 명령어를 지원하기 위해, 이들 레거시 SIMD 프레픽스는 SIMD 프레픽스 인코딩 필드로 인코딩된다; 그리고, 런타임시에 디코더의 PLA에 제공되기 이전에 레거시 SIMD 프레픽스로 확장(expand)된다(따라서, PLA는 수정 없이 이들 레거시 명령어들의 레거시 및 EVEX 포맷 양쪽 모두를 실행할 수 있다). 더 최근의 명령어들은 연산코드 확장으로서 직접 EVEX 프레픽스 인코딩 필드의 내용을 이용할 수 있지만, 소정 실시예는 일관성을 위해 유사한 방식으로 확장하지만 이들 레거시 SIMD 프레픽스들에 의해 상이한 의미들이 명시되는 것을 허용한다. 대안적 실시예는 2 비트 SIMD 프레픽스 인코딩을 지원하도록 PLA를 재설계할 수도 있으므로, 확장을 요구하지 않는다.
알파 필드(752)(EVEX 바이트 3, 비트 [7] ― EH; EVEX.EH, EVEX.rs, EVEX.RL, EVEX.기입 마스크 제어, 및 EVEX.N이라고도 알려짐; 또한 α로 예시됨) - 앞서 설명된 바와 같이, 이 필드는 컨텍스트 특유이다. 나중에 추가의 설명이 제공된다.
베타 필드(754)(EVEX 바이트 3, 비트 [6:4]-SSS, EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB라고도 알려짐; 또한
Figure 112013099262512-pct00002
로 예시됨) - 앞서 설명된 바와 같이, 이 필드는 컨텍스트 특유이다. 나중에 추가의 설명이 제공된다.
REX' 필드(810) - 이것은 REX' 필드의 나머지이고, 확장된 32 레지스터 세트의 상위 16 또는 하위 16 중 어느 한쪽을 인코딩하는데 이용될 수 있는 EVEX.V' 비트 필드(EVEX 바이트 3, 비트 [3] - V')이다. 이 비트는 비트 반전된 포맷으로 저장된다. 값 1은 하위 16개 레지스터를 인코딩하는데 이용된다. 즉, V'VVVV는 EVEX.V', EVEX.vvvv를 결합함으로써 형성된다.
기입 마스크 필드(770)(EVEX 바이트 3, 비트 [2:0]-kkk) - 그 내용은 앞서 설명된 바와 같이 기입 마스크 레지스터들에서 레지스터의 인덱스를 명시한다. 본 발명의 한 실시예에서, 특정의 값 EVEX.kkk=000은 어떠한 기입 마스크도 특정 명령에 이용되지 않다는 것을 암시하는 특별한 작용을 가진다(이것은 마스킹 하드웨어를 바이패스하는 하드웨어 또는 모든 것들에 하드와이어링된 기입 마스크의 이용을 포함한 다양한 방식으로 구현될 수 있다).
리얼 연산코드 필드(830)(바이트 4)
이것은 연산코드 바이트라고도 알려져 있다. 연산코드의 일부가 이 필드에 명시된다.
MOD R/M 필드(840)(바이트 5)
수식자 필드(746)(MODR/M.MOD, 비트 [7-6] - MOD 필드(842)) ― 앞서 설명된 바와 같이, MOD 필드(842)의 내용은 메모리 액세스와 비 메모리 액세스 간을 구분한다. 이 필드는 이후에 더 설명될 것이다.
MODR/M.reg 필드(844), 비트 [5-3] ― ModR/M.reg 필드의 역할은 2가지 상황으로 요약될 수 있다: ModR/M.reg는 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 하나를 인코딩하거나, ModR/M.reg는 연산코드 확장으로서 취급되고 어떠한 명령어 피연산자를 인코딩하는데에도 이용되지 않는다.
MODR/M.r/m 필드(846), 비트 [2-0] ― MODR/M.r/m 필드의 역할은 다음과 같은 것을 포함할 수 있다: ModR/M.r/m은 메모리 주소를 참조하는 명령어 피연산자를 인코딩하거나, ModR/M.r/m은 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 하나를 인코딩한다.
스케일, 인덱스, 베이스 (SIB) 바이트(바이트 6)
스케일 필드(760) (SIB.SS, 비트 [7-6] ― 앞서 설명된 바와 같이, 스케일 필드(760)의 내용은 메모리 주소 생성에 이용된다. 이 필드는 이후에 더 설명될 것이다.
SIB.xxx(854)(비트 [5-3] 및 SIB.bbb(856)(비트 [2-0]) ― 이들 필드들의 내용은 레지스터 인덱스들 Xxxx 및 Bbbb에 관하여 앞서 언급되었다.
변위 바이트(들)(바이트 7 또는 바이트 7-10)
변위 필드(762A)(바이트 7-10) ― MOD 필드(842)가 10을 포함할 때, 바이트들 7-10은 변위 필드(762A)이고, 레거시 32-비트 변위(disp32)와 동일하게 작용하며 바이트 입도에서 작용한다.
변위 인자 필드(762B)(바이트 7) ― MOD 필드(842)가 01을 포함할 때, 바이트 7은 변위 계수 필드(762B)이다. 이 필드의 위치는, 바이트 입도에서 작용하는 레거시 x86 명령어 세트 8-비트 변위(disp8)의 위치와 동일하다. disp8은 부호 확장되므로, -128과 127 바이트 오프셋 사이만을 어드레싱할 수 있다; 64 바이트 캐시 라인에 관하여, disp8은 단 4개의 실제로 유용한 값들 -128, -64, 0 및 64로 설정될 수 있는 8 비트를 이용한다; 더 큰 범위가 종종 필요하므로, disp32가 이용된다; 그러나, disp32는 4 바이트를 요구한다. disp8 및 disp32와 대조적으로, 변위 계수 필드(762B)는 disp8의 재해석이다; 변위 계수 필드(762B)를 이용할 때, 실제의 변위는 메모리 피연산자 액세스의 크기(N)와 곱해진 변위 계수 필드의 내용에 의해 결정된다. 이러한 타입의 변위를 disp8*N이라 부른다. 이것은 평균 명령어 길이(변위에 이용되지만 훨씬 큰 거리를 갖는 싱글 바이트)를 줄인다. 이러한 압축된 변위는, 유효 변위가 메모리 액세스의 입도의 배수라는 가정에 기초하므로, 주소 오프셋의 리던던트 저차수 비트들은 인코딩될 필요가 없다. 즉, 변위 계수 필드(762B)는 레거시 x86 명령어 세트 8-비트 변위를 대체한다. 따라서, 변위 계수 필드(762B)는, disp8이 disp8*N으로 오버로딩된다는 점만을 제외하고는 x86 명령어 세트 8-비트 변위와 동일한 방식으로 인코딩된다(따라서 ModRM/SIB 인코딩 규칙에서 변경은 없다). 즉, 인코딩 규칙이나 인코딩 길이에서의 변경은 없고 (바이트별 주소 오프셋을 얻기 위해 변위를 메모리 피연산자의 크기로 스케일링할 필요가 있는) 하드웨어에 의한 변위값의 해석에서만 변경이 있다.
즉석값
즉석값 필드(772)는 앞서 설명된 바와 같이 동작한다.
예시적인 레지스터 아키텍처 ― 도 9
도 9는 본 발명의 한 실시예에 따른 레지스터 아키텍처(900)의 블록도이다. 레지스터 아키텍처의 레지스터 파일들 및 레지스터들이 아래에 열거된다:
벡터 레지스터 파일(910) ― 예시된 실시예에서, 912 비트 폭의 32개 벡터 레지스터들이 있다; 이들 레지스터들은 zmm0 내지 zmm31로서 참조된다. 하위 16개 zmm 레지스터들의 저차수 756개 비트가 레지스터 ymm0-16 상에 오버레이된다. 하위 16개 zmm 레지스터들의 저차수 128개 비트들(ymm 레지스터들의 저차수 128개 비트들)은 레지스터 xmm0-15 상에 오버레이된다. 특정의 친벡터 명령어 포맷(800)은 아래의 표에 나타낸 바와 같이 이들 오버레이된 레지스터 파일에 작용한다.
Figure 112013099262512-pct00003
즉, 벡터 길이 필드(759B)는 최대 길이와 하나 이상의 다른 더 짧은 길이들 사이에서 선택하며, 여기서 각각의 이러한 더 짧은 길이는 선행 길이의 절반 길이이다; 그리고, 벡터 길이 필드(759B)가 없는 명령어 템플릿은 최대 벡터 길이에 작용한다. 또한, 한 실시예에서, 특정의 친벡터 명령어 포맷(800)의 클래스 B 명령어 템플릿은 패킹된 또는 스칼라의 단정도/배정도 부동 소수점 데이터와 패킹된 또는 스칼라의 정수 데이터에 작용한다. 스칼라 연산은 zmm/ymm/xmm 레지스터의 최저 차수 데이터 요소 위치에 대해 수행되는 연산이다; 더 높은 차수 데이터 요소 위치들은 실시예에 따라 명령 이전의 그 위치들로 남겨지거나 제로화된다.
기입 마스크 레지스터(915) ― 도시된 실시예에서, 8개의 기입 마스크 레지스터(k0 내지 k7)가 있고, 각각은 크기가 64 비트이다. 앞서 설명된 바와 같이, 본 발명의 한 실시예에서, 벡터 마스크 레지스터 k0은 기입 마스크로서 이용될 수 없다; 기입 마스크에 대해 통상 k0을 나타내는 인코딩이 이용될 때, 이것은 하드와이어드 기입 마스크 0xFFFF를 선택하여, 그 명령에 대한 기입 마스크를 디스에이블한다.
멀티미디어 확장 제어 상태 레지스터(MXCSR)(920) ― 도시된 실시예에서, 이 32-비트 레지스터는 부동 소수점 연산에 이용되는 상태와 제어 비트를 제공한다.
범용 레지스터(925) ― 도시된 실시예에서, 메모리 피연산자를 어드레싱하기 위해 기존의 x86 어드레싱 모드와 함께 이용되는 16개의 64-비트 범용 레지스터가 있다. 이들 레지스터들은 명칭들 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15로 참조된다.
확장된 플래그(EFLAGS) 레지스터(930) ― 도시된 실시예에서, 이 32 비트 레지스터는 많은 명령어들의 결과를 기록하는데 이용된다.
부동 소수점 제어 워드(FCW; Floating Point Control Word) 레지스터(935) 및 부동 소수점 상태 워드(FSW; Floating Point Status Word) 레지스터(940) ― 도시된 실시예에서, 이들 레지스터들은 x87 명령어 세트 확장판에 의해 FCW의 경우에는 라운딩 모드, 예외 마스크 및 플래그를 설정하기 위해, FSW의 경우에는 예외를 추적하기 위해 이용된다.
MMX 패킹된 정수 플랫 레지스터 파일(950; MMX packed integer flat register file)이 에일리어싱되어 있는 스칼라 부동 소수점 스택 레지스터 파일(x87 스택)(945) ― 도시된 실시예에서, x87 스택은 x87 명령어 세트 확장판을 이용하여 32/64/80-비트 부동 소수점 데이터에 대해 스칼라 부동 소수점 연산을 수행하는데 이용되는 8-요소 스택이다; 반면, MMX 레지스터는 64-비트 패킹된 정수 데이터에 대해 연산을 수행하는데 이용될 뿐만 아니라 MMX와 XMM 레지스터들 사이에서 수행되는 일부 연산들에 대한 피연산자를 보유하는데 이용된다.
세그먼트 레지스터(955) ― 도시된 실시예에서, 세그먼트화된 주소 생성에 이용되는 데이터를 저장하는데 이용되는 6개의 16비트 레지스터가 있다.
RIP 레지스터(965) ― 도시된 실시예에서, 이 64 비트 레지스터는 명령어 포인터를 저장한다.
본 발명의 대안적 실시예는 더 넓거나 더 좁은 레지스터를 이용할 수도 있다. 추가로, 본 발명의 대안적 실시예는 더 많거나, 더 적거나, 또는 상이한 레지스터 파일들과 레지스터들을 이용할 수도 있다.
예시적 순차 프로세서 아키텍처(In-Order Processor Architecture) ― 도 10a 및 도 10b
도 10a 및 도 10b는 예시적인 순차 프로세서 아키텍처의 블록도를 나타낸다. 이들 예시적인 실시예들은 와이드 벡터(wide vector) 프로세서(VPU)로 증강된 순차 CPU 코어의 복수 인스턴스화에 관해 설계된 것이다. 코어들은, e12t 애플리케이션에 따라, 몇 가지 고정된 함수 로직, 메모리 I/O 인터페이스, 및 기타의 필요한 I/O 로직을 갖는 높은-대역폭의 상호접속 네트워크를 통해 통신한다. 예를 들어, 단독형 GPU로서의 이 실시예의 구현은 통상 PCIe 버스를 포함할 것이다.
도 10a는 본 발명의 실시예에 따른, 온-다이 상호접속 네트워크(1002)로의 그 접속 및 레벨 2(L2) 캐시(1004)의 그 국지적 서브셋과 함께, 단일 CPU 코어의 블록도이다. 명령어 디코더(1000)는 특정의 벡터 명령어 포맷(800)을 포함한 확장된 x86 명령어 세트를 지원한다. 본 발명의 한 실시예에서는 (설계를 단순화하기 위해) 스칼라 유닛(1008) 및 벡터 유닛(1010)이 별개의 레지스터 세트(각각, 스칼라 레지스터(1012) 및 벡터 레지스터(1014))를 이용하고 이들 간에 전송된 데이터는 메모리에 기입된 다음 레벨 1(L1) 캐시(1006)로부터 되판독되지만, 본 발명의 대안적 실시예는 상이한 접근법을 이용할 수 있다(예를 들어, 단일 레지스터 세트를 이용하거나, 기입되거나 되판독되지 않고 2개의 레지스터 파일들 사이에서 데이터가 전송되는 것을 허용하는 통신 경로를 포함).
L1 캐시(1006)는 스칼라 및 벡터 유닛들로의 캐시 메모리에 대한 낮은-레이턴시 액세스를 허용한다. 친벡터 명령어 포맷의 op-로딩 명령어와 함께, 이것은 L1 캐시(1006)는 어느 정도 확장된 레지스터 파일처럼 취급될 수 있다는 것을 의미한다. 이것은, 특히 에빅션 힌트 필드(752B)와 더불어, 많은 알고리즘의 성능을 상당히 향상시킨다.
국지적 L2 캐시 서브셋(1004)은 CPU 코어당 하나씩 별개의 국지적 서브셋들로 분할되는 전역적 L2 캐시의 일부이다. 각 CPU는 그 자신의 국지적 L2 캐시 서브셋(1004)으로의 직접적인 액세스 경로를 가진다. CPU 코어에 의해 판독된 데이터는 그 L2 캐시 서브셋(1004)에 저장되고, 다른 CPU들이 그들 자신의 국지적 L2 캐시 서브셋에 액세스하는 것과 병렬로 신속하게 액세스될 수 있다. CPU 코어에 의해 기입된 데이터는 그 자신의 L2 캐시 서브셋(1004)에 저장되고, 필요하다면 다른 서브셋들로부터 플러시(flush)된다. 링 네트워크는 공유된 데이터에 대한 일관성(coherency)을 보장한다.
도 10b는 본 발명의 실시예에 따른 도 10a의 CPU 코어의 일부의 확대도이다. 도 10b는, L1 캐시(1004)의 L1 데이터 캐시(1006A) 부분뿐만 아니라, 벡터 유닛(1010) 및 벡터 레지스터(1014)에 관한 더 많은 세부사항을 포함한다. 구체적으로는, 벡터 유닛(1010)은, 정수, 단정도 부동 소수, 배정도 부동 소수 명령어들을 실행하는, 16-폭 벡터 처리 유닛(VPU)(16-폭 ALU(1028) 참조)이다. VPU는, 스위즐 유닛(1020)을 이용한 레지스터 입력의 스위즐링(swizzling), 수치 컨버전 유닛(1022A-B)을 이용한 수치 컨버전, 및 메모리 입력에 대한 복제 유닛(1024)을 이용한 복제를 지원한다. 기입 마스크 레지스터(1026)는 결과 벡터 기입의 서술(predicating)을 허용한다.
레지스터 데이터는, 예를 들어, 행렬 곱셈을 지원하기 위해, 다양한 방식으로 스위즐링될 수 있다. 메모리로부터의 데이터는 VPU 레인(VPU lane)들에 걸쳐 복제될 수 있다. 이것은 그래픽 및 비-그래픽 병렬 데이터 처리 양쪽 모두에서 공통된 연산으로서, 캐시 효율을 상당히 증가시킨다.
링 네트워크는 양방향이어서 CPU 코어들, L2 캐시들, 및 기타의 로직 블록들과 같은 에이전트들이 칩 내에서 서로 통신하는 것을 허용한다. 각각의 링 데이터-경로는 방향당 912-비트 폭이다.
예시적인 비순차 아키텍처(Out-of-order Architecture) ― 도 11
도 11은 본 발명의 일부 실시예에 따른 예시적 비순차 아키텍처를 나타내는 블록도이다. 구체적으로는, 도 11은, 친벡터 명령어 포맷 및 그 실행을 포함하도록 수정된 공지된 예시적인 비순차 아키텍처를 나타낸다. 도 11에서, 화살표는 2개 이상의 유닛들 간의 결합을 나타내고, 화살표의 방향은 이들 유닛들 간의 데이터 흐름의 방향을 나타낸다. 도 11은, 실행 엔진 유닛(1110) 및 메모리 유닛(1115)에 결합된 프런트 엔드 유닛(1105; front end unit)을 포함한다; 실행 엔진 유닛(1110)은 또한 메모리 유닛(1115)에 결합된다.
프런트 엔드 유닛(1105)은 레벨 2(L2) 분기 예측 유닛(1122)에 결합된 레벨 1(L1) 분기 예측 유닛(1120)을 포함한다. L1 및 L2 분기 예측 유닛(1120 및 1122)은 L1 명령어 캐시 유닛(1124)에 결합된다. L1 명령어 캐시 유닛(1124)은 명령어 변환 색인 버퍼(TLB; translation lookaside buffer)(1126)에 결합되고, 명령어 변환 색인 버퍼(1126)는 또한 명령어 인출 및 프리디코드 유닛(1128)에 결합된다. 명령어 인출 및 프리디코드 유닛(1128)은 명령어 큐 유닛(1130)에 결합되고, 명령어 큐 유닛(1130)은 또한 디코드 유닛(1132)에 결합된다. 디코드 유닛(1132)은 복합 디코더 유닛(1134)과 3개의 단순 디코더 유닛(1136, 1138, 및 1140)을 포함한다. 디코드 유닛(1132)은 마이크로-코드 ROM 유닛(1142)을 포함한다. 디코드 유닛(1132)은 디코드 스테이지 섹션에서 전술된 바와 같이 동작할 수 있다. L1 명령어 캐시 유닛(1124)은 또한 메모리 유닛(1115) 내의 L2 캐시 유닛(1148)에 결합된다. 명령어 TLB 유닛(1126)은 또한 메모리 유닛(1115) 내의 제2 레벨 TLB 유닛(1146)에 결합된다. 디코드 유닛(1132), 마이크로-코드 ROM 유닛(1142), 및 루프 스트림 검출기 유닛(1144) 각각은 실행 엔진 유닛(1110) 내의 리네임/할당기 유닛(1156)에 결합된다.
실행 엔진 유닛(1110)은, 퇴거 유닛(1174; retirement unit) 및 통합 스케줄러 유닛(1158)에 결합된 리네임/할당기 유닛(1156)을 포함한다. 퇴거 유닛(1174)은 또한 실행 유닛(1160)에 결합되고 재정렬 버퍼 유닛(1178)을 포함한다. 통합 스케줄러 유닛(1158)은 또한, 실행 유닛(1160)에 결합된 물리적 레지스터 파일 유닛(1176)에 결합된다. 물리적 레지스터 파일 유닛(1176)은, 벡터 레지스터 유닛(1177A), 기입 마스크 레지스터 유닛(1177B), 및 스칼라 레지스터 유닛(1177C)을 포함한다; 이들 레지스터 유닛들은, 벡터 레지스터(1110), 벡터 마스크 레지스터(1115), 및 범용 레지스터(1125)를 포함한다; 그리고, 물리적 레지스터 파일 유닛(1176)은 도시되지 않은 추가의 레지스터 파일(예를 들어, MMX 패킹된 정수 플랫 레지스터 파일(1150)에 에일리어싱된 스칼라 부동 소수점 스택 레지스터 파일(1145))을 포함할 수 있다. 실행 유닛(1160)은 3개의 혼합된 스칼라 및 벡터 유닛(1162, 1164 및 1172); 로딩 유닛(1166); 주소 저장 유닛(1168); 데이터 저장 유닛(1170)을 포함한다. 로딩 유닛(1166), 주소 저장 유닛(1168), 및 데이터 저장 유닛(1170) 각각은 또한 메모리 유닛(1115) 내의 데이터 TLB 유닛(1152)에 결합된다.
메모리 유닛(1115)은 데이터 TLB 유닛(1152)에 결합된 제2 레벨 TLB 유닛(1146)을 포함한다. 데이터 TLB 유닛(1152)은 L1 데이터 캐시 유닛(1154)에 결합된다. L1 데이터 캐시 유닛(1154)은 또한 L2 데이터 캐시 유닛(1148)에 결합된다. 일부 실시예에서, L2 캐시 유닛(1148)은 또한, 메모리 유닛(1115)의 내부의 및/또는 외부의 L3 및 그 이상의 캐시 유닛(1150)에 결합된다.
예로서, 예시적인 비순차 아키텍처는 다음과 같이 프로세스 파이프라인을 구현할 수 있다: 1) 명령 인출 및 프리디코드 유닛(1128)은 인출 및 길이 디코딩 스테이지를 수행한다; 2) 디코드 유닛(1132)은 디코드 스테이지를 수행한다; 3) 리네임/할당기 유닛(1156)은 할당 스테이지 및 리네이밍 스테이지를 수행한다; 4) 통합 스케줄러(1158)는 스케줄 스테이지를 수행한다; 5) 물리적 레지스터 파일 유닛(1176), 재정렬 버퍼 유닛(1178) 및 메모리 유닛(1115)은 레지스터 판독/메모리 판독 스테이지(1930)를 수행한다; 실행 유닛(1160)은 실행/데이터 변환 스테이지를 수행한다; 6) 메모리 유닛(1115) 및 재정렬 버퍼 유닛(1178)은 되기입(write back)/메모리 기입 스테이지(1960)를 수행한다; 7) 퇴거 유닛(1174)은 ROB 판독 스테이지를 수행한다; 8) 다양한 유닛들이 예외 처리 스테이지에 관여될 수 있다; 및 9) 퇴거 유닛(1174) 및 물리적 레지스터 파일 유닛(1176)은 커밋(commit) 스테이지를 수행한다.
예시적인 싱글 코어 및 멀티코어 프로세서
도 16은 본 발명의 실시예에 따른 통합된 메모리 제어기와 그래픽스(graphics)를 갖춘 싱글코어 프로세서 및 멀티코어 프로세서의 블록도이다. 도 16의 실선 박스는, 싱글 코어(1602A), 시스템 에이전트(1610), 한 세트의 하나 이상의 버스 제어기 유닛(1616)을 갖춘 프로세서(1600)를 나타내는 반면, 선택사항적인 점선 라인 박스의 추가는 다중 코어(1602A-N), 시스템 에이전트 유닛(1610) 내의 한 세트의 하나 이상의 통합된 메모리 제어기 유닛(들)(1614), 및 통합된 그래픽스 로직(1608)을 갖춘 대안적 프로세서(1600)를 나타낸다.
메모리 계층구조는, 코어 내의 하나 이상의 레벨의 캐시, 한 세트 또는 하나 이상의 공유된 캐시 유닛(1606), 및 한 세트의 통합된 메모리 제어기 유닛(1614)에 결합된 외부 메모리(미도시)를 포함한다. 한 세트의 공유된 캐시 유닛(1606)은, 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 기타 레벨의 캐시와 같은, 하나 이상의 중간-레벨 캐시, 마지막 레벨의 캐시(LLC), 및/또는 이들의 조합을 포함할 수 있다. 한 실시예에서 링 기반의 상호접속 유닛(1612)은 통합된 그래픽스 로직(1608), 한 세트의 공유된 캐시 유닛(1606), 및 시스템 에이전트 유닛(1610)을 상호접속하지만, 대안적 실시예는 이러한 유닛들을 상호접속하기 위한 임의 개수의 공지된 기술을 이용할 수도 있다.
일부 실시예에서, 코어들(1602A-N) 중 하나 이상은 멀티-스레딩이 가능하다. 시스템 에이전트(1610)는 코어들(1602A-N)을 조율하고 작동하는 컴포넌트들을 포함한다. 시스템 에이전트 유닛(1610)은 예를 들어 전력 제어 유닛(PCU; power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는, 코어들(1602A-N) 및 통합된 그래픽스 로직(1608)의 전력 상태를 조절하는데 필요한 로직 및 컴포넌트이거나 이들을 포함할 수도 있다. 디스플레이 유닛은 하나 이상의 외부적으로 접속된 디스플레이를 구동하기 위한 것이다.
코어(1602A-N)는 아키텍처 및/또는 명령어 세트의 관점에서 동종 또는 이종일 수 있다. 예를 들어, 코어들(1602A-N) 중 일부는 (예를 들어, 도 10a 및 도 10b에 도시된 것과 같은) 순차일 수 있는 반면 다른 것들은 (예를 들어, 도 11에 도시된 것과 같은) 비순차이다. 또 다른 예로서, 코어들(1602A-N) 중 2개 이상은 동일한 명령어 세트를 실행할 수 있는 반면, 다른 것들은 그 명령어 세트의 서브셋만을 실행할 수 있거나 상이한 명령어 세트를 실행할 수 있다. 코어들 중 적어도 하나는 여기서 설명된 친벡터 명령어 포맷을 실행할 수 있다.
프로세서는, 캘리포니아주 산타 클라라에 위치한 인텔사로부터 출시된 Core™ i3, i5, i7, 2 Duo 및 Quad, Xeon™ 또는 Itanium™ 프로세서와 같은 범용 프로세서일 수 있다. 대안으로서, 프로세서는 또 다른 회사로부터의 것일 수도 있다. 프로세서는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽스 프로세서, 코-프로세서, 임베디드 프로세서 등과 같은 특별-목적 프로세서일 수도 있다. 프로세서는 하나 이상의 칩 상에 구현될 수도 있다. 프로세서(1600)는 예를 들어 BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세스 기술들 중 임의의 것을 이용하여 하나 이상의 기판들 상에 구현되거나 그 일부일 수도 있다.
예시적인 컴퓨터 시스템 및 프로세서
도 12 내지 도 14는 프로세서(1600)를 포함하는데 적합한 예시적 시스템인 반면, 도 15는 코어들(1602) 중 하나 이상을 포함할 수 있는 예시적인 SoC(system on a chip)이다. 랩탑, 데스크탑, 핸드헬드 PC, PDA(personal digital assistants), 엔지니어링 워크스테이션, 서버, 네트워크 장치, 네트워크 허브, 스위치, 임베디드 프로세서, DSP(digital signal processor), 그래픽스 장치, 비디오 게임 장치, 셋탑 박스, 마이크로 제어기, 셀 전화, 휴대 미디어 재생기, 및 다양한 다른 전자 장치를 위한 분야에서 공지된 기타의 시스템 설계 및 구성도 역시 적합하다. 일반적으로, 여기서 개시된 프로세서 및/또는 기타의 실행 로직을 병합할 수 있는 매우 다양한 시스템 또는 전자 장치들이 일반적으로 적합하다.
이제 도 12를 참조하면, 본 발명의 한 실시예에 따른 시스템(1200)의 블록도가 도시되어 있다. 시스템(1200)은 그래픽스 메모리 제어기 허브(GMCH; graphics memory controller hub)(1220)에 결합된 하나 이상의 프로세서(1210, 1215)를 포함할 수 있다. 추가 프로세서(1215)의 선택사항적 성질이 도 12에 점선으로 표시되어 있다.
각 프로세서(1210, 1215)는 소정 버전의 프로세서(1600)일 수 있다. 그러나, 통합된 그래픽스 로직 및 통합된 메모리 제어 유닛이 프로세서(1210, 1215)에 존재할 것 같지 않다는 점에 주목해야 한다.
도 12는, GMCH(1220)가, 예를 들어, 동적 랜덤 액세스 메모리(DRAM)에 결합될 수도 있는 메모리(1240)에 결합될 수 있음을 나타내고 있다. DRAM은, 적어도 한 실시예의 경우, 비휘발성 캐시와 연관될 수 있다.
GMCH(1220)는 칩셋이거나, 칩셋의 일부일 수 있다. GMCH(1220)는 프로세서(들)(1210, 1215)와 통신할 수 있고 프로세서(들)(1210, 1215)와 메모리(1240) 사이의 상호작용을 제어할 수 있다. GMCH(1220)는 또한, 프로세서(들)(1210, 1215)와 기타의 시스템(1200)의 요소들 사이의 가속된 버스 인터페이스로서 역할할 수도 있다. 적어도 한 실시예의 경우, GMCH(1220)는 프론트사이드 버스(FSB; frontside bus)(1295)와 같은 멀티-드롭 버스(multi-drop bus)를 통해 프로세서(들)(1210, 1215)와 통신한다.
또한, GMCH(1220)는 (평판 디스플레이와 같은) 디스플레이(1245)에 결합된다. GMCH(1220)는 통합된 그래픽스 가속기를 포함할 수 있다. GMCH(1220)는 또한, 다양한 주변 장치를 시스템(1200)에 결합하는데 이용될 수 있는 입력/출력(I/O) 제어기 허브(ICH)(1250)에 결합된다. 예를 들어 도 12의 실시예에서는, 또 다른 주변 장치(1270)와 함께 ICH(1250)에 결합된 개별 그래픽스 장치일 수 있는, 외부 그래픽스 장치(1260)가 도시되어 있다.
대안으로서, 추가의 또는 상이한 프로세서가 시스템(1200)에 존재할 수도 있다. 예를 들어, 추가의 프로세서(들)(1215)는, 프로세서(1210)와 동일한 추가 프로세서(들), 프로세서(1210)와 이종이거나 비대칭의 추가 프로세서(들), (예를 들어, 그래픽스 가속기 또는 디지털 신호 처리(DSP) 유닛과 같은) 가속기들, 필드 프로그래머블 게이트 어레이, 또는 기타 임의의 프로세서를 포함할 수 있다. 아키텍처, 마이크로아키텍처, 열적, 전력 소모 특성 등을 포함한 다양한 가치 있는 메트릭들에 관하여 물리적 리소스들(1210, 1215) 사이에 다양한 차이점이 존재할 수 있다. 이들 차이점들은, 사실상 처리 요소들(1210, 1215) 간의 비대칭성 및 이종성으로 스스로 드러날 수 있다. 적어도 한 실시예의 경우, 다양한 처리 요소(1210, 1215)가 동일한 다이 패키지에 존재할 수 있다.
이제 도 13을 참조하면, 본 발명의 실시예에 따른 제2 시스템(1300)의 블록도가 도시되어 있다. 도 13에 도시된 바와 같이, 멀티프로세서 시스템(1300)은 포인트-투-포인트 상호접속 시스템이고, 포인트-투-포인트 상호접속(1350)을 통해 결합된 제1 프로세서(1370) 및 제2 프로세서(1380)를 포함한다. 도 13에 도시된 바와 같이, 프로세서(1370 및 1380) 각각은 소정 버전의 프로세서(1600)일 수 있다.
대안으로서, 프로세서(1370, 1380) 중 하나 이상은, 가속기 또는 필드 프로그래머블 게이트 어레이와 같은, 프로세서 이외의 요소일 수 있다.
단 2개의 프로세서(1370, 1380)만이 도시되어 있지만, 본 발명의 범위는 이와 같이 제한되지 않는다는 것을 이해할 것이다. 다른 실시예들에서, 주어진 프로세서에는 하나 이상의 추가 처리 유닛이 존재할 수 있다.
프로세서(1370)는 통합된 메모리 제어기 허브(IMC)(1372) 및 포인트-투-포인트(P-P) 인터페이스(1376 및 1378)를 더 포함할 수 있다. 마찬가지로, 제2 프로세서(1380)는 IMC(1382) 및 P-P 인터페이스(1386 및 1388)를 포함할 수 있다. 프로세서(1370, 1380)는 포인트-투-포인트(PtP) 인터페이스 회로(1378, 1388)를 이용하여 PtP 인터페이스(1350)를 통해 데이터를 교환할 수 있다. 도 13에 도시된 바와 같이, IMC(1372 및 1382)는 프로세서들을, 각각의 프로세서에 국지적으로 부착된 메인 메모리의 일부일 수 있는, 각각의 메모리, 즉, 메모리(1342) 및 메모리(1344)에 결합한다.
프로세서(1370, 1380) 각각은, 포인트 투 포인트 인터페이스 회로(1376, 1394, 1386, 1398)를 이용하여 개개의 P-P 인터페이스(1352, 1354)를 통해 칩셋(1390)과 데이터를 교환할 수 있다. 칩셋(1390)은 또한 고성능 그래픽스 인터페이스(1339)를 통해 고성능 그래픽스 회로(1338)와 데이터를 교환할 수도 있다.
어느 한 프로세서에는 양쪽 프로세서의 외부에 있지만 P-P 상호접속을 통해 프로세서들과 여전히 접속된 공유 캐시(미도시)가 포함되어, 프로세서가 저전력 모드에 놓이는 경우 어느 하나 또는 양쪽 모두의 프로세서의 국지적 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(1390)은 인터페이스(1396)를 통해 제1 버스(1316)에 결합될 수 있다. 한 실시예에서, 제1 버스(1316)는 PCI(Peripheral Component Interconnect) 버스이거나, PCI Express 버스 또는 또 다른 제3 세대 I/O 상호접속 버스와 같은 버스일 수 있지만, 본 발명의 범위는 이와 같이 제한되지 않는다.
도 13에 도시된 바와 같이, 다양한 I/O 장치(1314)가, 제1 버스(1316)를 제2 버스(1320)에 결합하는 버스 브릿지(1318)와 함께, 제1 버스(1316)에 결합될 수 있다. 한 실시예에서, 제2 버스(1320)는 LPC(low pin count) 버스일 수도 있다. 예를 들어, 키보드/마우스(1322), 통신 장치(1326), 및 한 실시예에서는 코드(1330)를 포함할 수 있는 디스크 드라이브나 기타의 대용량 저장 장치와 같은 데이터 저장 유닛(1328)을 포함한 다양한 장치들이 제2 버스(1320)에 결합될 수 있다. 또한, 오디오 I/O(1324)가 제2 버스(1320)에 결합될 수 있다. 다른 아키텍처들도 가능하다는 점에 유의한다. 예를 들어, 도 13의 포인트-투-포인트 아키텍처 대신에, 시스템은 멀티-드롭 버스나 기타의 이러한 아키텍처를 구현할 수 있다.
이제 도 14를 참조하면, 본 발명의 실시예에 따른 제3 시스템(1400)의 블록도가 도시되어 있다. 도 13 및 도 14의 유사한 요소들은 유사한 참조 번호를 가지며, 도 13의 소정 양태들은 도 14의 다른 양태들을 모호하게 하는 것을 피하기 위해 도 14에서 생략되었다.
도 14는, 처리 시스템(1370, 1380)이, 통합된 메모리 및 I/O 제어 로직("CL")(1372 및 1382)을 각각 포함할 수 있다는 것을 나타내고 있다. 적어도 한 실시예의 경우, CL(1372, 1382)은 전술된 것과 같은 메모리 제어기 허브 로직(IMC)을 포함할 수 있다. 또한, CL(1372, 1382)은 I/O 제어 로직을 역시 포함할 수 있다. 도 14는, 제어 로직(CL)(1372, 1382)에 메모리(1342, 1344)가 결합되어 있을 뿐만 아니라 I/O 장치(1414)도 역시 제어 로직(1372, 1382)에 결합되어 있는 것을 나타내고 있다. 레거시 I/O 장치(1415)는 칩셋(1390)에 결합된다.
이제 도 15를 참조하면, 본 발명의 실시예에 따른 SoC(1500)의 블록도가 도시되어 있다. 다른 도면들의 유사한 요소들은 유사한 참조 번호를 갖고 있다. 또한, 점선 박스는 더욱 진보된 SoC들 상의 선택사항적 특징들이다. 도 15에서, 상호접속 유닛(들)(1502)은: 한 세트의 하나 이상의 코어(1602A-N)와 공유 캐시 유닛(들)(1606)을 포함하는 애플리케이션 프로세서(1510); 시스템 에이전트 유닛(1610); 버스 제어기 유닛(들)(1616); 통합된 메모리 제어기 유닛(들)(1614); 통합된 그래픽스 로직(1608), 정지이미지 및/또는 비디오 카메라 기능을 제공하기 위한 이미지 프로세서(1524), 하드웨어 오디오 가속을 제공하기 위한 오디오 프로세서(1526), 및 비디오 인코드/디코드 가속을 제공하기 위한 비디오 프로세서(1528)를 포함할 수 있는 한 세트의 또는 하나 이상의 미디어 프로세서(1520); 정적 랜덤 액세스 메모리(SRAM) 유닛(1530); 직접 메모리 액세스(DMA; direct memory access) 유닛(1532); 및 하나 이상의 외부 디스플레이에 결합하기 위한 디스플레이 유닛(1540)에 결합된다.
여기서 개시된 메커니즘의 실시예는, 하드웨어, 소프트웨어, 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예는, 적어도 하나의 프로세서, (휘발성 및 비휘발성 메모리 및/또는 저장 요소를 포함한) 저장 시스템, 적어도 하나의 입력 장치, 및 적어도 하나의 출력 장치를 포함하는 프로그래머블 시스템에서 실행하는 컴퓨터 프로그램 또는 프로그램 코드로서 구현될 수 있다.
프로그램 코드는 여기서 설명된 기능을 수행하고 출력 정보를 생성하기 위해 입력 데이터에 적용될 수 있다. 출력 정보는, 공지된 방식으로 하나 이상의 출력 장치에 적용될 수 있다. 이 애플리케이션의 목적을 위해, 처리 시스템은, 예를 들어: 디지털 신호 처리기(DSP), 마이크로제어기, 주문형 집적 회로(ASIC) 또는 마이크로프로세서와 같은, 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 처리 시스템과 통신하기 위해 고수준 절차 프로그래밍 언어 또는 객체 지향형 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는 또한, 원한다면, 어셈블리 또는 기계어로 구현될 수도 있다. 사실상, 여기서 설명된 메커니즘은 임의의 특정한 프로그래밍 언어로 범위가 제한되지 않는다. 어쨌든, 언어는 컴파일형 또는 인터프리트형 언어일 수 있다.
적어도 한 실시예의 하나 이상의 양태들은, 프로세서 내의 다양한 로직을 나타내는 머신-판독가능한 매체에 저장되고 머신에 의해 판독될 때 머신으로 하여금 여기서 설명된 기술을 수행하기 위한 로직을 만들게 하는 상징적 명령어들에 의해 구현될 수 있다. "IP 코어"라고 알려진 이러한 표현들은, 유형의 머신 판독가능한 매체에 저장될 수 있으며, 로직이나 프로세서를 실제로 만드는 제조 머신 내에 로딩하기 위해 다양한 고객이나 제조 설비에 공급될 수 있다.
이러한 머신-판독가능한 저장 매체는, 제한 없이, 하드디스크, 플로피 디스크, 광 디스크(CD-ROM(compact disk read-only memories), CD-RW(compact disk rewritables)), 및 광자기 디스크를 포함한 기타 임의 타입의 디스크, ROM(read-only memory), DRAM(dynamic random access memory), SRAM(static random access memory)과 같은 랜덤 액세스 메모리(RAM), EPROM(erasable programmable read-only memory), 플래시 메모리, EEPROM(electrically erasable programmable read-only memory) 등의 반도체 장치, 자기 또는 광학 카드, 또는 전자적 명령어를 저장하기 위한 기타 임의 타입의 매체 등의 저장 매체를 포함한, 머신이나 장치에 의해 제조 또는 형성된 물품의 비일시적, 유형의 배열을 포함할 수 있다.
따라서, 본 발명의 실시에는 또한, 여기서 설명된 구조, 회로, 기기, 프로세서 및/또는 시스템 특징을 정의하는 하드웨어 기술 언어(HDL; Hardware Description Language)와 같은 설계 데이터를 포함하거나 친벡터 명령어 포맷의 명령어를 포함하는 비-일시적, 유형의 머신-판독가능한 매체를 포함한다. 이러한 실시예는 프로그램 제품이라고도 할 수 있다.
일부 경우에, 소스 명령어 세트로부터 목적지 명령어 세트로 명령어를 변환하기 위해 명령어 컨버터가 이용될 수 있다. 예를 들어, 명령어 컨버터는, 명령어를, (예를 들어, 정적 2진 번역, 동적 컴파일을 포함한 동적 2진 번역을 이용한) 번역, 모핑, 에뮬레이팅, 또는 코어에 의해 처리될 하나 이상의 다른 명령어로 변환할 수 있다. 명령어 컨버터는 소프트웨어, 하드웨어, 펌웨어, 또는 그 조합으로 구현될 수 있다. 명령어 컨버터는, 프로세서 상에, 프로세서와 별도로, 또는 부분적으로 프로세서에 및 부분적으로 프로세서와 별도로 존재할 수 있다.
도 17은 본 발명의 실시예에 따른 소스 명령어 세트의 2진 명령어를 타겟 명령어 세트의 2진 명령어로 변환하는 소프트웨어 명령어 컨버터의 이용을 대비하는 블록도이다. 예시된 실시예에서, 명령어 컨버터는 소프트 명령어 컨버터이지만, 대안으로서, 명령어 컨버터는 소프트웨어, 펌웨어, 하드웨어, 또는 그 다양한 조합으로 구현될 수 있다. 도 17은, 고수준 언어(1702)로 된 프로그램이 x86 컴파일러(1704)를 이용하여 컴파일되어 적어도 하나의 x86 명령어 세트 코어(1716)를 갖는 프로세서에 의해 자연스럽게 실행될 수 있는 x86 2진 코드(1706)를 생성할 수 있다는 것을 도시하고 있다(컴파일된 명령어들 중 일부는 친벡터 명령어 포맷인 것으로 가정됨). 적어도 하나의 x86 명령어 세트 코어(1716)를 갖는 프로세서는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 달성하기 위하여, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당한 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서에서 실행하는 것을 목표로 한 애플리케이션 또는 기타의 소프트웨어의 오브젝트 코드 버전을 호환가능하게 실행하거나 기타의 방식으로 처리함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1704)는, 추가 연계 처리(linkage processing)를 수반하거나 수반하지 않고, 적어도 하나의 x86 명령어 세트 코어(1716)를 갖는 프로세서에서 실행될 수 있는 x86 2진 코드(1706)(예를 들어, 오브젝트 코드)를 생성하도록 동작할 수 있는 컴파일러를 나타낸다. 마찬가지로, 도 8a 내지 도 8c는, 고수준 언어(1702)로 된 프로그램이 대안적 명령어 세트 컴파일러(1708)를 이용하여 컴파일되어 적어도 하나의 x86 명령어 세트 코어(1714)가 없는 프로세서(예를 들어, CA, Sunnyvale의 MIPS Technologies의 MIPS 명령어 세트를 실행하거나 및/또는 CA, Sunnyvale의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어를 갖춘 프로세서)에 의해 자연스럽게 실행될 수 있는 대안적 명령어 세트 2진 코드(1710)를 생성할 수 있다. 명령어 컨버터(1712)는, x86 2진 코드(1706)를, x86 명령어 세트 코어(1714)가 없는 프로세서에 의해 자연스럽게 실행될 수 있는 코드로 변환하는데 이용된다. 이 변환된 코드는 대안적 명령어 세트 2진 코드(1710)와 동일할 것 같지 않은데, 그 이유는 이것이 가능한 명령어 컨버터를 만들기 어렵기 때문이다; 그러나, 변환된 코드는 일반적 동작을 달성할 것이고 대안적 명령어 세트로부터의 명령어들로 이루어질 것이다. 따라서, 명령어 컨버터(1712)는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타내며, 에뮬레이션, 시뮬레이션 또는 기타 임의의 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서나 기타의 전자 장치가 x86 2진 코드(1706)를 실행하는 것을 허용한다.
여기서 개시된 벡터 명령어 포맷의 명령어(들)의 소정 연산들은 하드웨어 컴포넌트에 의해 수행될 수 있고, 명령어들로 프로그램된 회로나 기타의 하드웨어 컴포넌트가 연산을 수행하게 하거나 적어도 그러한 결과를 야기하는데 이용되는 머신-실행가능한 명령어들로 구현될 수 있다. 회로는, 몇 가지 예로서, 범용 또는 특별 목적 프로세서, 또는 로직 회로를 포함할 수 있다. 연산은 또한 선택사항으로서 하드웨어와 소프트웨어의 조합에 의해 수행될 수도 있다. 실행 로직 및/또는 프로세서는, 머신 명령어 또는 머신 명령어로부터 유도된 하나 이상의 제어 신호에 응답하여 명령어에 의해 명시된 결과 피연산자를 저장하는 특정의 또는 특정한 회로나 기타의 회로를 포함할 수 있다. 예를 들어, 여기서 설명된 명령어(들)의 구현예는 도 12 내지 도 15의 하나 이상의 시스템에서 실행될 수 있고, 친벡터 명령어 포맷의 명령어(들)의 실시예들이 시스템에서 실행될 프로그램 코드에 저장될 수 있다. 추가로, 이들 도면들의 처리 요소들은 여기서 상세히 설명된 파이프라인 및/또는 아키텍처들(예를 들어, 순차 및 비순차 아키텍처) 중 하나를 이용할 수 있다. 예를 들어, 순차 아키텍처의 디코드 유닛은 명령어(들)를 디코딩하고, 디코딩된 명령어를 벡터 또는 스칼라 유닛에 전달할 수 있고, 등등이다.
상기의 설명은 본 발명의 바람직한 실시예들을 예시하기 위함이다. 상기 논의로부터, 성장이 빠르고 추가의 진보가 쉽게 예상되지 않는 특히 이러한 기술 분야에서, 첨부된 청구항들 및 그 등가물들의 범위 내에서 본 발명의 원리로부터 벗어나지 않고 당업자에 의해 배치와 세부사항에 있어서 본 발명이 수정될 수 있다는 것도 역시 명백할 것이다. 예를 들어, 방법의 하나 이상의 동작들은 결합되거나 추가로 더 분할될 수 있다.
대안적 실시예
친벡터 명령어 포맷을 자연스럽게 실행하는 실시예들이 설명되었지만, 본 발명의 대안적 실시예들은 상이한 명령어 세트를 실행하는 프로세스(예를 들어, CA, Sunnyvale의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 프로세서 및/또는 CA, Sunnyvale의 ARM Holdings의 ARM 명령어 세트를 실행하는 프로세서)에서 실행되는 에뮬레이션 층을 통해 친벡터 명령어 포맷을 실행할 수도 있다. 또한, 도면들 내의 흐름도는 본 발명의 소정 실시예들에 의해 수행되는 동작들의 특정한 순서를 보여주지만, 이와 같은 순서는 예시적인 것임을 이해하여야 한다(예를 들어, 대안적 실시예들은 상이한 순서로 그 동작들을 수행하거나, 소정 동작들을 결합하거나, 소정 동작들을 중복하거나 등을 할 수 있다).
상기의 설명에서, 설명의 목적을 위해, 본 발명의 실시예들의 철저한 이해를 제공하기 위하여 수많은 구체적인 세부사항이 개시되었다. 그러나, 이들 구체적인 세부사항들 중 일부가 없이도 하나 이상의 다른 실시예들이 실시될 수 있다는 것은 당업자에게 명백할 것이다. 설명된 특정한 실시예들은 본 발명을 제한하기 위함이 아니라 본 발명의 실시예들을 예시하기 위해 제공된 것이다. 본 발명의 범위는 상기에서 제공된 구체적인 예에 의해 결정되는 것이 아니라 이하의 청구항들에 의해서만 결정되어야 한다.

Claims (22)

  1. 컴퓨터 프로세서에서 블렌드 명령어(blend instruction)를 수행하는 방법으로서,
    상기 블렌드 명령어를 인출(fetch)하는 단계 ― 상기 블렌드 명령어는 기입 마스크 피연산자, 목적지 피연산자, 제1 소스 피연산자, 제2 소스 피연산자, 및 상기 블렌드 명령어를 위해 병합 마스킹(merging masking)과 제로화 마스킹(zeroing masking) 중 어느 것이 이용될 것인지를 제어하기 위한 필드를 포함함 ―;
    상기 인출된 블렌드 명령어를 디코딩하는 단계;
    상기 제1 소스 피연산자와 상기 제2 소스 피연산자 간의 선택기들로서 상기 기입 마스크 피연산자의 대응하는 비트 위치들을 이용하여 상기 제1 및 상기 제2 소스 피연산자의 데이터 요소들의 데이터 요소별 선택을 병렬로 수행하도록 상기 디코딩된 블렌드 명령어를 실행하는 단계; 및
    상기 선택된 데이터 요소들을 상기 목적지 피연산자 내의 대응하는 위치들에 저장하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서, 상기 기입 마스크 피연산자는 16-비트 레지스터인 방법.
  3. 제1항에 있어서, 상기 기입 마스크 피연산자는 16-비트 레지스터이고, 8개의 최하위 비트 위치들만이 선택기로서 이용되며 상기 데이터 요소들은 크기가 64 비트인 방법.
  4. 제1항에 있어서, 상기 제1 소스 피연산자는 512-비트 레지스터이고 상기 제2 소스 피연산자는 메모리 내에 있는 방법.
  5. 제4항에 있어서, 상기 제2 소스 피연산자의 데이터 요소들은 16-비트로부터 32-비트로 업컨버팅(upconvert)되는 방법.
  6. 제1항에 있어서, 상기 제1 및 상기 제2 소스 피연산자는 512-비트 레지스터인 방법.
  7. 삭제
  8. 삭제
  9. 제1항에 있어서, 상기 제2 소스 피연산자는 512-비트 메모리 위치인 방법.
  10. 제1항에 있어서, 상기 데이터 요소들은 32-비트인 방법.
  11. 복수의 기입 마스크 레지스터 ― 상기 기입 마스크 레지스터들은 제로화 마스킹 및 병합 마스킹 모두를 위해 이용되도록 동작함 ―;
    블렌드 명령어를 디코딩하기 위한 하드웨어 디코더 ― 상기 블렌드 명령어는 상기 기입 마스크 레지스터들에 저장될 기입 마스크 피연산자, 목적지 피연산자, 제1 소스 피연산자, 및 제2 소스 피연산자를 갖기 위한 것임 ―; 및
    상기 제1 소스 피연산자와 상기 제2 소스 피연산자 간의 선택기들로서 상기 기입 마스크 피연산자의 대응하는 비트 위치들을 이용하여 상기 제1 및 상기 제2 소스 피연산자의 데이터 요소들의 데이터 요소별 선택을 병렬로 수행하고, 상기 선택된 데이터 요소들을 상기 목적지 피연산자 내의 대응하는 위치들에 저장하기 위한 실행 유닛
    을 포함하는 장치.
  12. 제11항에 있어서,
    상기 기입 마스크 피연산자를 저장하기 위한 기입 마스크 레지스터; 및
    상기 제1 및 상기 제2 소스 피연산자의 데이터 요소들을 저장하기 위한 적어도 2개의 512-비트 레지스터를 더 포함하는 장치.
  13. 제11항에 있어서,
    상기 블렌드 명령어는 상기 병합 마스킹과 상기 제로화 마스킹 중 어느 것이 이용될 것인지를 제어하기 위한 필드를 포함하기 위한 것인 장치.
  14. 복수의 벡터 레지스터;
    복수의 기입 마스크 레지스터;
    명령어를 디코딩하기 위한 디코더 ― 상기 명령어는 상기 복수의 벡터 레지스터 중 하나의 벡터 레지스터에 저장될 제1 소스 피연산자, 제2 소스 피연산자, 상기 복수의 기입 마스크 레지스터 중 하나의 기입 마스크 레지스터에 저장될 기입 마스크 레지스터 피연산자, 목적지 피연산자, 및 상기 명령어를 위해 병합 마스킹과 제로화 마스킹 중 어느 것이 이용될 것인지를 제어하기 위한 필드를 갖기 위한 것이며, 상기 제1 및 제2 소스 피연산자는 각각 복수의 데이터 요소를 포함하기 위한 것임 ―; 및
    상기 제1 및 상기 제2 소스 피연산자의 대응하는 데이터 요소들 간에 병렬로 선택하기 위해 상기 기입 마스크 레지스터 피연산자의 비트 위치들에서의 값들을 이용하도록 하고, 상기 선택된 데이터 요소들을 상기 목적지 피연산자 내의 대응하는 위치들에 저장하도록 하는 상기 명령어에 응답하는 실행 로직
    을 포함하고,
    상기 제1 및 상기 제2 소스 피연산자의 상기 대응하는 데이터 요소들 간에 선택하기 위해 이용될 상기 기입 마스크 레지스터 피연산자의 상기 비트 위치들의 수는 상기 제1 소스 피연산자 내의 상기 복수의 데이터 요소의 수와 동일하며,
    상기 제1 및 상기 제2 소스 피연산자의 상기 대응하는 데이터 요소들 간에 선택하기 위해 이용될 상기 기입 마스크 레지스터 피연산자의 상기 비트 위치들의 수는 상기 기입 마스크 레지스터 피연산자를 저장하기 위한 상기 기입 마스크 레지스터 내의 비트 위치들의 수보다 작은 장치.
  15. 제14항에 있어서, 상기 기입 마스크 레지스터는 64-비트 레지스터를 포함하고, 상기 기입 마스크 레지스터 피연산자는 단지 8-비트만을 갖는 장치.
  16. 제14항에 있어서, 상기 기입 마스크 레지스터는 64-비트 레지스터를 포함하고, 상기 기입 마스크 레지스터 피연산자는 단지 16-비트만을 갖는 장치.
  17. 복수의 벡터 레지스터;
    복수의 기입 마스크 레지스터;
    명령어를 디코딩하기 위한 디코더 ― 상기 명령어는 상기 복수의 벡터 레지스터 중 하나의 벡터 레지스터에 저장될 제1 소스 피연산자, 제2 소스 피연산자, 상기 복수의 기입 마스크 레지스터 중 하나의 기입 마스크 레지스터에 저장될 기입 마스크 레지스터 피연산자, 및 목적지 피연산자를 갖기 위한 것임 ―; 및
    복수의 데이터 요소를 갖기 위한 제3 소스 피연산자를 생성하기 위해 상기 제2 소스 피연산자의 데이터 요소를 브로드캐스트하도록 하고, 상기 제1 및 상기 제3 소스 피연산자의 대응하는 데이터 요소들 간에 병렬로 선택하기 위해 상기 기입 마스크 레지스터 피연산자의 비트 위치들에서의 값들을 이용하도록 하며, 상기 선택된 데이터 요소들을 상기 목적지 피연산자 내의 대응하는 위치들에 저장하도록 하는 상기 명령어에 응답하는 실행 유닛
    을 포함하는 장치.
  18. 제17항에 있어서, 상기 명령어는 상기 명령어를 위해 병합 마스킹과 제로화 마스킹 중 어느 것이 이용될 것인지를 제어하기 위한 필드를 갖기 위한 것인 장치.
  19. 제17항에 있어서, 상기 대응하는 데이터 요소들 간에 선택하기 위해 이용될 상기 기입 마스크 레지스터 피연산자의 상기 비트 위치들의 수는 상기 제1 소스 피연산자 내의 상기 복수의 데이터 요소의 수와 동일하며, 상기 대응하는 데이터 요소들 간에 선택하기 위해 이용될 상기 기입 마스크 레지스터 피연산자의 상기 비트 위치들의 수는 상기 기입 마스크 레지스터 피연산자를 저장하기 위한 상기 기입 마스크 레지스터 내의 비트 위치들의 수보다 작은 장치.
  20. 제17항에 있어서, 상기 명령어는, 제로화 마스킹을 사용할 것이고 상기 기입 마스크 레지스터에 저장될 것인 기입 마스크 레지스터 피연산자들을 갖는 다른 명령어들과 함께 명령어 세트에 포함되어 있는 장치.
  21. 제17항에 있어서, 상기 명령어는, 상기 복수의 기입 마스크 레지스터들 중 상기 기입 마스크 레지스터 피연산자를 저장할 상기 기입 마스크 레지스터를 선택하기 위한 필드를 갖는 장치.
  22. 제17항에 있어서, 상기 제1 소스 피연산자는 512-비트 레지스터인 장치.
KR1020137028981A 2011-04-01 2011-12-12 기입 마스크를 이용하여 2개 소스 피연산자를 하나의 목적지 내에 블렌딩하기 위한 시스템, 장치, 및 방법 KR101610691B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/078,864 US20120254588A1 (en) 2011-04-01 2011-04-01 Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US13/078,864 2011-04-01
PCT/US2011/064486 WO2012134560A1 (en) 2011-04-01 2011-12-12 Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask

Publications (2)

Publication Number Publication Date
KR20130140160A KR20130140160A (ko) 2013-12-23
KR101610691B1 true KR101610691B1 (ko) 2016-04-08

Family

ID=46928898

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137028981A KR101610691B1 (ko) 2011-04-01 2011-12-12 기입 마스크를 이용하여 2개 소스 피연산자를 하나의 목적지 내에 블렌딩하기 위한 시스템, 장치, 및 방법

Country Status (9)

Country Link
US (3) US20120254588A1 (ko)
JP (3) JP5986188B2 (ko)
KR (1) KR101610691B1 (ko)
CN (3) CN109471659B (ko)
BR (1) BR112013025409A2 (ko)
DE (1) DE112011105122T5 (ko)
GB (2) GB2503829A (ko)
TW (2) TWI470554B (ko)
WO (1) WO2012134560A1 (ko)

Families Citing this family (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
KR101595637B1 (ko) 2011-04-01 2016-02-18 인텔 코포레이션 벡터 친숙형 명령어 형식 및 그의 실행
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
WO2013095510A1 (en) 2011-12-22 2013-06-27 Intel Corporation Packed data operation mask concatenation processors, methods, systems, and instructions
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
US20140223138A1 (en) * 2011-12-23 2014-08-07 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for performing conversion of a mask register into a vector register.
CN104011661B (zh) * 2011-12-23 2017-04-12 英特尔公司 用于大整数运算的向量指令的装置和方法
CN111464316B (zh) 2012-03-30 2023-10-27 英特尔公司 用于处理sha-2安全散列算法的方法和设备
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
US9207941B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses, and methods for reducing the number of short integer multiplications
US9411593B2 (en) * 2013-03-15 2016-08-09 Intel Corporation Processors, methods, systems, and instructions to consolidate unmasked elements of operation masks
US9477467B2 (en) * 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
US9081700B2 (en) * 2013-05-16 2015-07-14 Western Digital Technologies, Inc. High performance read-modify-write system providing line-rate merging of dataframe segments in hardware
US10331451B2 (en) 2013-06-26 2019-06-25 Intel Corporation Method and apparatus to process SHA-2 secure hashing algorithm
US9395990B2 (en) 2013-06-28 2016-07-19 Intel Corporation Mode dependent partial width load to wider register processors, methods, and systems
US9606803B2 (en) 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US20160283438A1 (en) * 2013-12-23 2016-09-29 Hu Tiger Chen System-on-a-chip (soc) including hybrid processor cores
EP3123301A1 (en) 2014-03-27 2017-02-01 Intel Corporation Processors, methods, systems, and instructions to store consecutive source elements to unmasked result elements with propagation to masked result elements
JP6419205B2 (ja) 2014-03-28 2018-11-07 インテル・コーポレーション プロセッサ、方法、システム、コンピュータシステム、およびコンピュータ可読記憶媒体
US9513913B2 (en) * 2014-07-22 2016-12-06 Intel Corporation SM4 acceleration processors, methods, systems, and instructions
EP3001307B1 (en) * 2014-09-25 2019-11-13 Intel Corporation Bit shuffle processors, methods, systems, and instructions
US9467279B2 (en) 2014-09-26 2016-10-11 Intel Corporation Instructions and logic to provide SIMD SM4 cryptographic block cipher functionality
KR102321941B1 (ko) * 2014-12-17 2021-11-05 인텔 코포레이션 스핀-루프 점프를 수행하기 위한 장치 및 방법
US20160179521A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Method and apparatus for expanding a mask to a vector of mask values
US20160188341A1 (en) * 2014-12-24 2016-06-30 Elmoustapha Ould-Ahmed-Vall Apparatus and method for fused add-add instructions
US20160188333A1 (en) * 2014-12-27 2016-06-30 Intel Coporation Method and apparatus for compressing a mask value
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
EP3125108A1 (en) * 2015-07-31 2017-02-01 ARM Limited Vector processing using loops of dynamic vector length
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
US20170177350A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Set-Multiple-Vector-Elements Operations
US10152321B2 (en) 2015-12-18 2018-12-11 Intel Corporation Instructions and logic for blend and permute operation sequences
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
JP6544363B2 (ja) 2017-01-24 2019-07-17 トヨタ自動車株式会社 内燃機関の制御装置
US11567765B2 (en) 2017-03-20 2023-01-31 Intel Corporation Systems, methods, and apparatuses for tile load
US11275588B2 (en) 2017-07-01 2022-03-15 Intel Corporation Context save with variable save state size
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
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
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
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
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
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
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
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

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4128880A (en) * 1976-06-30 1978-12-05 Cray Research, Inc. Computer vector register processing
JPS57209570A (en) * 1981-06-19 1982-12-22 Fujitsu Ltd Vector processing device
JPS6059469A (ja) * 1983-09-09 1985-04-05 Nec Corp ベクトル処理装置
US4873630A (en) * 1985-07-31 1989-10-10 Unisys Corporation Scientific processor to support a host processor referencing common memory
JPH0193868A (ja) * 1987-10-05 1989-04-12 Nec Corp データ処理装置
US5487159A (en) * 1993-12-23 1996-01-23 Unisys Corporation System for processing shift, mask, and merge operations in one instruction
US5996066A (en) * 1996-10-10 1999-11-30 Sun Microsystems, Inc. Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions
US5933650A (en) * 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6173393B1 (en) * 1998-03-31 2001-01-09 Intel Corporation System for writing select non-contiguous bytes of data with single instruction having operand identifying byte mask corresponding to respective blocks of packed data
US20020002666A1 (en) * 1998-10-12 2002-01-03 Carole Dulong Conditional operand selection using mask operations
US6446198B1 (en) * 1999-09-30 2002-09-03 Apple Computer, Inc. Vectorized table lookup
US6523108B1 (en) * 1999-11-23 2003-02-18 Sony Corporation Method of and apparatus for extracting a string of bits from a binary bit string and depositing a string of bits onto a binary bit string
TW552556B (en) * 2001-01-17 2003-09-11 Faraday Tech Corp Data processing apparatus for executing multiple instruction sets
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7305540B1 (en) * 2001-12-31 2007-12-04 Apple Inc. Method and apparatus for data processing
US20100274988A1 (en) * 2002-02-04 2010-10-28 Mimar Tibet Flexible vector modes of operation for SIMD processor
US7212676B2 (en) * 2002-12-30 2007-05-01 Intel Corporation Match MSB digital image compression
US7243205B2 (en) * 2003-11-13 2007-07-10 Intel Corporation Buffered memory module with implicit to explicit memory command expansion
GB2409063B (en) * 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations
US7475222B2 (en) * 2004-04-07 2009-01-06 Sandbridge Technologies, Inc. Multi-threaded processor having compound instruction and operation formats
DE602004031719D1 (de) * 2004-07-01 2011-04-21 Texas Instruments Inc Verfahren und System zur Überprüfung der Ausführung einer Eingabesequenz eines sicheren Modus
US7703088B2 (en) * 2005-09-30 2010-04-20 Intel Corporation Compressing “warm” code in a dynamic binary translation environment
US7644198B2 (en) * 2005-10-07 2010-01-05 International Business Machines Corporation DMAC translation mechanism
US20070186210A1 (en) * 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US7555597B2 (en) * 2006-09-08 2009-06-30 Intel Corporation Direct cache access in multiple core processors
US20080077772A1 (en) * 2006-09-22 2008-03-27 Ronen Zohar Method and apparatus for performing select operations
JP4785142B2 (ja) * 2007-01-31 2011-10-05 ルネサスエレクトロニクス株式会社 データ処理装置
US8001446B2 (en) * 2007-03-26 2011-08-16 Intel Corporation Pipelined cyclic redundancy check (CRC)
US8667250B2 (en) * 2007-12-26 2014-03-04 Intel Corporation Methods, apparatus, and instructions for converting vector data
GB2456775B (en) * 2008-01-22 2012-10-31 Advanced Risc Mach Ltd Apparatus and method for performing permutation operations on data
US20090320031A1 (en) * 2008-06-19 2009-12-24 Song Justin J Power state-aware thread scheduling mechanism
US8356159B2 (en) * 2008-08-15 2013-01-15 Apple Inc. Break, pre-break, and remaining instructions for processing vectors
US8036115B2 (en) * 2008-09-17 2011-10-11 Intel Corporation Synchronization of multiple incoming network communication streams
US7814303B2 (en) * 2008-10-23 2010-10-12 International Business Machines Corporation Execution of a sequence of vector instructions preceded by a swizzle sequence instruction specifying data element shuffle orders respectively
US8327109B2 (en) * 2010-03-02 2012-12-04 Advanced Micro Devices, Inc. GPU support for garbage collection
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask

Also Published As

Publication number Publication date
US20190108030A1 (en) 2019-04-11
TWI470554B (zh) 2015-01-21
CN103460182B (zh) 2016-12-21
GB2503829A (en) 2014-01-08
US20190108029A1 (en) 2019-04-11
GB2577943A (en) 2020-04-15
JP5986188B2 (ja) 2016-09-06
TW201243726A (en) 2012-11-01
CN106681693B (zh) 2019-07-23
US20120254588A1 (en) 2012-10-04
DE112011105122T5 (de) 2014-02-06
TWI552080B (zh) 2016-10-01
TW201531946A (zh) 2015-08-16
WO2012134560A1 (en) 2012-10-04
KR20130140160A (ko) 2013-12-23
JP2014510350A (ja) 2014-04-24
BR112013025409A2 (pt) 2016-12-20
CN109471659A (zh) 2019-03-15
JP2019032859A (ja) 2019-02-28
CN109471659B (zh) 2024-02-23
JP6408524B2 (ja) 2018-10-17
CN106681693A (zh) 2017-05-17
JP2017010573A (ja) 2017-01-12
GB201317160D0 (en) 2013-11-06
GB201816774D0 (en) 2018-11-28
CN103460182A (zh) 2013-12-18

Similar Documents

Publication Publication Date Title
KR101610691B1 (ko) 기입 마스크를 이용하여 2개 소스 피연산자를 하나의 목적지 내에 블렌딩하기 위한 시스템, 장치, 및 방법
KR101851487B1 (ko) 메모리 소스를 목적지 레지스터 내로 확장하고 소스 레지스터를 목적지 메모리 위치 내로 압축하기 위한 시스템, 장치, 및 방법
JP6274672B2 (ja) 装置および方法
KR101938290B1 (ko) 히스토그램을 결정하기 위한 명령어
KR101592079B1 (ko) 레지스터 정렬을 위한 시스템, 장치 및 방법
KR101748538B1 (ko) 벡터 인덱싱 메모리 액세스 플러스 산술 및/또는 논리 연산 프로세서들, 방법들, 시스템들 및 명령어들
TWI496080B (zh) 轉置指令之技術
KR101618669B1 (ko) 마스크 레지스터를 이용한 점프를 위한 시스템, 장치, 및 방법

Legal Events

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

Payment date: 20190328

Year of fee payment: 4