KR101851487B1 - 메모리 소스를 목적지 레지스터 내로 확장하고 소스 레지스터를 목적지 메모리 위치 내로 압축하기 위한 시스템, 장치, 및 방법 - Google Patents

메모리 소스를 목적지 레지스터 내로 확장하고 소스 레지스터를 목적지 메모리 위치 내로 압축하기 위한 시스템, 장치, 및 방법 Download PDF

Info

Publication number
KR101851487B1
KR101851487B1 KR1020167030147A KR20167030147A KR101851487B1 KR 101851487 B1 KR101851487 B1 KR 101851487B1 KR 1020167030147 A KR1020167030147 A KR 1020167030147A KR 20167030147 A KR20167030147 A KR 20167030147A KR 101851487 B1 KR101851487 B1 KR 101851487B1
Authority
KR
South Korea
Prior art keywords
operand
source
destination
write mask
instruction
Prior art date
Application number
KR1020167030147A
Other languages
English (en)
Other versions
KR20160130320A (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 KR20160130320A publication Critical patent/KR20160130320A/ko
Application granted granted Critical
Publication of KR101851487B1 publication Critical patent/KR101851487B1/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/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/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/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/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)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

컴퓨터 프로세서에서 확장 및/또는 압축 명령어를 수행하기 위한 시스템, 장치, 및 방법의 실시예들이 설명된다. 일부 실시예에서, 확장 명령어의 실행은, 기입 마스크의 값들에 기초하여 상기 목적지에 드문드문 저장될 상기 소스로부터의 요소들의 선택을 야기하고 상기 소스의 각각의 선택된 데이터 요소를 목적지 위치 ― 상기 목적지 위치는 상기 소스의 대응하는 데이터 요소가 저장될 것임을 나타내는 각각의 기입 마스크 비트 위치에 대응함 ― 내에 드문드문한 데이터 요소로서 저장한다.

Description

메모리 소스를 목적지 레지스터 내로 확장하고 소스 레지스터를 목적지 메모리 위치 내로 압축하기 위한 시스템, 장치, 및 방법{SYSTEMS, APPARATUSES, AND METHODS FOR EXPANDING A MEMORY SOURCE INTO A DESTINATION REGISTER AND COMPRESSING A SOURCE REGISTER INTO A DESTINATION MEMORY LOCATION}
본 발명의 분야는 대체로 컴퓨터 프로세서 아키텍처에 관한 것으로, 더 구체적으로는, 실행될 때 특정한 결과를 야기하는 명령어에 관한 것이다.
데이터-구조 레이아웃을 조작함(manipulating)으로써 메모리 이용을 개선시키는 몇 가지 방법이 있다. 3D 변환 및 조명과 같은, 소정 알고리즘의 경우, 버텍스 데이터(vertex data)를 배치하기 위한 2가지 기본적인 방식이 있다. 전통적인 방법은, 각각의 버텍스에 대한 구조를 갖춘, AoS(array of structure) 배치이다. 또 다른 방법은, SoA(structure of array) 배치로, 데이터를 각각의 좌표에 대한 어레이로 배치한다.
AoS 포맷의 데이터를 계산하기 위한 2가지 옵션이 있다; 데이터에 대해 AoS 배치 그대로 연산을 수행하는 것 또는 데이터를 재배치(데이터를 스위즐)하여 SoA 배치로 하는 것. 원래의 AoS 배치에 대해 SIMD 연산을 수행하는 것은 더 많은 계산을 요구할 수 있고 연산들 중 일부는 이용가능한 SIMD 요소들 모두를 이용하지는 않는다. 따라서, 이 옵션은 일반적으로 덜 효율적이다.
SoA 배치는 SIMD(Single Instruction, Multiple Data) 기술의 병행성(parallelism)의 보다 효율적 이용을 허용하는데, 이것은 데이터가 더 최적화된 수직 방식의 계산에 준비되어 있기 때문이다. 대조적으로, AoS 데이터에 대한 직접적인 계산은, 이전 코드 샘플의 많은 "돈 케어"(DC; don't-care) 슬롯에 의해 보여진 바와 같이, SIMD 실행 슬롯을 소비하지만 단 하나의 스칼라 결과를 생성하는 수평 연산으로 이어질 수 있다.
SIMD 기술의 출현에 의해, 데이터 조직화의 선택은 더욱 중요해지고 데이터에 대해 수행될 연산에 신중하게 기초하여야 한다. 일부 애플리케이션에서, 전통적인 데이터 배치는 최대 성능으로 이어지지 않을 수도 있다. 애플리케이션 개발자들은 효율적인 계산을 위해 상이한 데이터 배치 및 데이터 세그먼트화 정책을 탐구하도록 장려되었다. 이것은 주어진 애플리케이션에서 AoS, SoA, 및 심지어 하이브리드 SoA의 조합의 이용을 의미할 수 있다.
본 발명이, 유사한 참조부호는 유사한 요소들을 가리키는 첨부된 도면들에서 제한이 아닌 예로서 설명되며, 도면들에서:
도 1에는 확장(expand) 명령어의 실행의 예가 도시되어 있다.
도 2는 소스로서 레지스터 피연산자를 이용한 확장 명령어의 실행의 예를 나타낸다.
도 3은 확장 명령어를 실행하기 위한 의사 코드(pseudo code)의 예를 나타낸다.
도 4는 프로세서에서 확장 명령어의 이용의 실시예를 나타낸다.
도 5는 확장 명령어를 처리하기 위한 방법의 실시예를 나타낸다.
도 6은 프로세서에서 압축 명령어의 실행의 예를 나타낸다.
도 7은 프로세서에서 압축 명령어의 실행의 또 다른 예를 나타낸다.
도 8은 확장 명령어를 실행하기 위한 의사 코드의 예를 나타낸다.
도 9는 프로세서에서 압축 명령어의 이용의 실시예를 나타낸다.
도 10은 압축 명령어를 처리하기 위한 방법의 실시예를 나타낸다.
도 11a는 본 발명의 실시예에 따른 일반 친벡터 명령어 포맷 및 그 클래스 A 명령어 템플릿을 나타내는 블록도이다.
도 11b는 본 발명의 실시예에 따른 일반 친벡터 명령어 포맷 및 그 클래스 B 명령어 템플릿을 나타내는 블록도이다.
도 12a 내지 도 12c는 본 발명의 실시예에 따른 예시적인 특정의 친벡터 명령어 포맷을 나타내는 블록도이다.
도 13은 본 발명의 한 실시예에 따른 레지스터 아키텍처의 블록도이다.
도 14a는 본 발명의 실시예에 따른, 온-다이 상호접속 네트워크로의 그 접속 및 레벨 2(L2) 캐시의 그 국지적 서브셋과 함께, 단일 CPU 코어의 블록도이다.
도 14b는 본 발명의 실시예에 따른 도 14a의 CPU 코어의 일부의 확대도이다.
도 15는 본 발명의 실시예에 따른 예시적 비순차 아키텍처(out-of-order architecture)를 나타내는 블록도이다.
도 16은 본 발명의 한 실시예에 따른 시스템의 블록도이다.
도 17은 본 발명의 실시예에 따른 제2 시스템의 블록도이다.
도 18은 본 발명의 실시예에 따른 제3 시스템의 블록도이다.
도 19는 본 발명의 실시예에 따른 SoC의 블록도이다.
도 20은 본 발명의 실시예에 따른 통합된 메모리 제어기와 그래픽스(graphics)를 갖춘 싱글 코어 프로세서 및 멀티코어 프로세서의 블록도이다.
도 21은 본 발명의 실시예에 따른 소스 명령어 세트의 2진 명령어들을 타겟 명령어 세트의 2진 명령어들로 변환하는 소프트웨어 명령어 컨버터의 이용을 대비하는 블록도이다.
이하의 설명에서, 다양한 구체적인 세부사항이 개시된다. 그러나, 본 발명의 실시예들은 이들 구체적인 세부사항 없이도 실시될 수 있다는 것을 이해할 것이다. 다른 예들에서, 공지된 회로, 구조, 및 기술은 본 설명의 이해를 흐리게 하지 않기 위하여 상세히 도시되지 않았다.
명세서에서 "하나의 실시예", "실시예", "예시적 실시예" 등의 언급은, 설명되는 실시예가 특정한 특징, 구조, 또는 특성을 포함할 수 있지만, 모든 실시예가 반드시 그 특정한 특징, 구조, 또는 특성을 포함하는 것은 아님을 나타낸다. 게다가, 이와 같은 문구는 반드시 동일한 실시예를 가리키는 것은 아니다. 또한, 특정한 특징, 구조, 또는 특성이 실시예와 연계하여 설명될 때, 명시적으로 설명되든 아니든 다른 실시예들과 관련하여 이러한 특징, 구조, 또는 특성에 영향을 미치는 것은 당업자의 지식의 범위 내라고 말할 수 있다.
이하에, "확장" 및 "압축" 명령어의 수 개 실시예와 이러한 명령어들을 실행하는데 이용될 수 있는 시스템, 아키텍처, 명령어 포맷 등의 실시예가 제공된다. AoS 및 SoA 배치를 변환하는 것을 포함하는 수 개의 상이한 분야에서 확장 및 압축은 유용하다. 예를 들어, XYZW XYZW XYZW … XYZW 패턴으로부터 XXXXXXXX YYYYYYYY ZZZZZZZZZZ WWWWWWWW 패턴 종류로 변환하는 것. 또 다른 이러한 분야는 행렬 전치(matrix transposition)이다. 길이가 16인 벡터는 요소들의 4x4 어레이로서 간주될 수 있다. 확장 명령어에 의해, 4개의 연속된 요소들의 행 M[0], M[1], M[2], 및 M[3]은 인출 및 확장되어(어레이를 구축유지하기 위한 병합과 함께) 4x4 어레이 행들 중 하나(예를 들어, 벡터 요소 1, 3, 7, 및 11)가 될 수 있다.
추가로, 동적 조건에 기초하여 메모리를 연속된 위치에 저장하는 범용 코드는 압축 및 확장 명령어의 혜택을 받을 것이다. 예를 들어, 어떤 경우에는 흔치 않은 조건을 갖는 희귀 요소를 임시 메모리 공간에 압축하는 것이 유익하다. 이들 함께 패킹하여 저장하는 것은 계산의 밀도를 증가시킨다. 이렇게 하는 한 방식은 이하에서 상세히 설명되는 압축의 이용을 통해서이다. 임시 메모리 공간(또는 FIFO)을 처리한 후에, 이들 희귀 요소들을 다시 그들의 원래 위치로 복구하는데 확장이 이용될 수도 있다. 확장은 또한 큐 내에 패킹되었던 데이터를 재-확장하는데 이용된다.
확장
확장으로 시작하면, 확장의 실행은, 프로세서로 하여금, 기입 마스크 피연산자에 의해 결정된 활성 요소들에 기초하여 소스 피연산자(메모리 또는 레지스터 피연산자)로부터의 연속된 데이터 요소들을 목적지 피연산자(통상 레지스터 피연산자) 내의 (드문드문한) 데이터 요소 위치들에 기입하게 한다. 추가로, 소스 피연산자의 데이터 요소들은 그들의 크기와 데이터 요소들이 목적지 레지스터에서 어떤 크기인지에 따라 업컨버팅(upconvert)될 수 있다. 예를 들어, 소스 피연산자가 메모리 피연산자이고 그 데이터 요소들이 크기가 16-비트이며 목적지 레지스터의 데이터 요소들이 32-비트이면, 목적지에 저장될 메모리 피연산자의 이들 데이터 요소들은 32-비트로 업컨버팅된다. 업컨버전 및 이들이 인코딩되어 명령어 포맷화되는 방법의 예가 이하에서 설명될 것이다.
이 명령어의 포맷은 "VEXPANDPS zmm1 {k1} zmm2/U(mem),"이고, 여기서, zmm1 및 zmm2는 각각 (128-, 256-, 512-비트 레지스터 등과 같은) 목적지 및 소스 벡터 레지스터 피연산자이며, k1은 (16-비트 레지스터와 같은) 기입 마스크 피연산자이고, U(mem)는 소스 메모리 위치 피연산자이다. 메모리로부터 검색되는 것은 무엇이라도 그 메모리 주소로부터 시작하는 연속된 비트 집합이고, 목적지 레지스터의 크기에 따라 수 개의 크기(128-, 256-, 512-비트 등) ― 이 크기는 일반적으로 목적지 레지스터의 크기와 동일하다 ― 중 하나일 수 있다. 일부 실시예에서, 기입 마스크는 또한 상이한 크기(8 비트, 32 비트 등)이다. 추가로, 일부 실시예에서, 기입 마스크의 모든 비트가 명령어에 의해 이용되는 것은 아니다(예를 들어, 8개 하위 비트들만이 이용된다). 물론, VEXPANDPS는 명령어의 연산코드(opcode)이다. 통상적으로, 각 피연산자는 명령어에서 명시적으로 정의된다. 데이터 요소들의 크기는, 명령어의 "프레픽스"에서 예를 들어 이하에서 설명되는 "W"와 같은 데이터 입도(data granularity) 비트의 표시를 이용하여 정의될 수 있다. 대부분의 실시예에서, W는 각 데이터 요소가 32 비트 또는 64 비트임을 표시할 것이다. 데이터 요소들이 크기가 32 비트이고, 소스들이 크기가 512 비트이면, 소스당 열여섯(16)개의 데이터 요소가 있다.
이 명령어는 통상 기입마스킹되어 기입 마스크 레지스터에 세트된 대응하는 비트, 상기 예에서는 k1이 목적지 레지스터에서 수정된다. 기입 마스크 레지스터에서 대응하는 비트가 클리어된 목적지 레지스터 내의 요소들은 그들의 이전 값을 보유한다. 그러나, 아무런 기입 마스크도 이용하지 않을 때(또는 기입 마스크가 모두 1로 세트될 때), 이 명령어는 메모리 참조가 캐시-라인 분할을 생성할 확신이 높은 경우 더 높은 성능 벡터 로딩에 이용될 수 있다.
확장(expand) 명령어의 실행의 예가 도 1에 도시되어 있다. 이 예에서, 메모리의 소스는 RAX 레지스터에서 발견되는 주소에 어드레싱된다. 물론, 메모리 주소는 다른 레지스터에 저장되거나 명령어에서 즉석값으로서 발견될 수도 있다. 이 예에서의 기입 마스크는 0x4DB1로서 도시되어 있다. "1" 값을 갖는 기입 마스크의 각 비트 위치에 대해, 메모리 소스로부터의 데이터 요소는 목적지 레지스터 내에 대응하는 위치에 저장된다. 예를 들어, 기입 마스크의 첫 번째 위치(예를 들어, k2[0])는 "1"이고, 이는 대응하는 목적지 데이터 요소 위치(예를 들어, 목적지 레지스터의 첫 번째 데이터 요소)가 그곳에 저장된 소스 메모리로부터의 데이터 요소를 가질 것임을 나타낸다. 이 경우, 이것은 RAX 주소와 연관된 데이터 요소일 것이다. 마스크의 다음 3개 비트는 "0"이고, 이는 목적지 레지스터의 대응하는 데이터 요소들이 방치될 것임을 나타낸다(도면에서 "Y"로 도시됨). 기입 마스크의 다음 "1" 값은 5번째 비트 위치(예를 들어, k2[4])에 있다. 이것은, RAX 레지스터와 연관된 데이터 요소에 후속하는(연속하는) 데이터 요소가 목적지 레지스터의 5번째 데이터 요소 슬롯에 저장될 것임을 나타낸다. 나머지 기입 마스크 비트 위치들은, 메모리 소스의 어떤 추가 데이터 요소들이 목적지 레지스터에 저장될 것인지를 결정하는데 이용된다(이 예에서는, 총 8개 데이터 요소들이 저장되지만, 기입 마스크에 따라 더 적거나 더 많이 존재할 수 있다). 추가로, 메모리 소스로부터의 데이터 요소들은 목적지에서의 저장 이전에 16-비트 부동 소수점 값으로부터 32-비트 값으로 변환되는 것과 같이 목적지의 데이터 요소 크기에 맞도록 업컨버팅될 수 있다. 업컨버전 및 이들을 인코딩하여 명령어 포맷화하는 방법의 예가 상기에서 설명되었다. 추가로, 일부 실시예에서, 메모리 피연산자의 연속된 데이터 요소들은 확장 이전에 레지스터에 저장된다.
도 2는 소스로서 레지스터 피연산자를 이용한 확장 명령어의 실행의 예를 나타낸다. 이전 도면과 같이, 이 예에서의 기입 마스크는 0x4DB1이다. "1" 값을 갖는 기입 마스크의 각 비트 위치에 대해, 레지스터 소스로부터의 데이터 요소는 목적지 레지스터 내에 대응하는 위치에 저장된다. 예를 들어, 기입 마스크의 첫 위치(예를 들어, k2[0])는 "1"이고, 이는 대응하는 목적지 데이터 요소 위치(예를 들어, 목적지 레지스터의 첫 데이터 요소)가 그곳에 저장된 소스 레지스터로부터의 데이터 요소를 가질 것임을 나타낸다. 이 경우, 이것은 소스 레지스터의 첫 번째 데이터 요소일 것이다. 마스크의 다음 3개 비트는 "0"이고, 이는 목적지 레지스터의 대응하는 데이터 요소들이 방치될 것임을 나타낸다(도면에서는 "Y"로 표시). 기입 마스크의 다음 "1" 값은 5번째 비트 위치(예를 들어, k2[4])에 있다. 이것은, 소스 레지스터의 첫 번째 저장된 데이터에 후속하는(연속하는) 데이터 요소가 목적지 레지스터의 5번째 데이터 요소 슬롯에 저장될 것임을 나타낸다. 나머지 기입 마스크 비트 위치들은, 레지스터 소스의 어떤 추가 데이터 요소들이 목적지 레지스터에 저장될 것인지를 결정하는데 이용된다(이 예에서는, 총 8개 데이터 요소들이 저장되지만, 기입 마스크에 따라 더 적거나 더 많이 존재할 수 있다).
도 3은 확장 명령어를 실행하기 위한 의사 코드의 예를 나타낸다.
도 4는 프로세서에서 확장 명령어의 이용의 실시예를 나타낸다. 401에서, 목적지 피연산자, 소스 피연산자(메모리 또는 레지스터), 기입 마스크, 및 오프셋(포함되는 경우)을 갖는 확장 명령어가 인출된다. 일부 실시예에서, 목적지 피연산자는 (ZMM1과 같은) 512-비트 벡터 레지스터이고, 기입 마스크는 (k1과 같은) 16-비트 레지스터이다. 메모리 소스 피연산자가 있다면 이것은 주소(또는 그 일부)를 저장하는 레지스터이거나 주소 또는 그 일부를 나타내는 즉석값일 수 있다. 통상적으로, 목적지 및 소스 피연산자는 동일한 크기이다. 일부 실시예에서, 이들은 모두 크기가 512 비트이다. 그러나, 다른 실시예들에서, 이들은 모두 128 또는 256 비트와 같은 상이한 크기일 수 있다.
403에서 확장 명령어가 디코딩된다. 명령어의 포맷에 따라, 이 스테이지에서, 업컨버전(또는 기타의 데이터 변환)이 있을지, 어느 레지스터에 기입하고 어느 레지스터에서 검색할지, 소스로부터의 메모리 주소가 무엇인지 등과 같은, 다양한 데이터가 해석될 수 있다.
405에서 소스 피연산자 값들이 검색/판독된다. 대부분의 실시예에서, 메모리 소스 위치 주소 및 연속된(후속하는) 주소들(및 그들 데이터 요소들)과 연관된 데이터 요소들이 이때 판독된다(예를 들어, 전체 캐시 라인이 판독된다). 소스가 레지스터인 실시예에서, 이것은 이때 판독된다.
(업컨버전과 같은) 수행될 임의의 데이터 요소 변환이 있다면, 이것은 407에서 수행될 수 있다. 예를 들어, 메모리로부터의 16-비트 데이터 요소가 32-비트 데이터 요소로 업컨버팅될 수 있다.
409에서 확장 명령(또는 마이크로연산 등의 명령어를 포함하는 연산)이 실행 리소스에 의해 실행된다. 이 실행은 기입 마스크의 "활성" 요소들(비트 위치들)에 기초하여 소스 피연산자로부터의 어떤 값들이 목적지에 드문드문한 데이터 요소들로서 저장될 것인지의 결정을 야기한다. 이러한 결정의 예가 도 1 및 도 2에 도시되어 있다.
411에서, 소스 피연산자의 적절한 데이터 요소들이 목적지 레지스터 내에 기입 마스크의 "활성" 요소들에 대응하는 위치에 저장된다. 다시 한번, 이에 대한 예가 도 1 및 도 2에 도시되어 있다. 409 및 411은 별개로 도시되어 있지만, 일부 실시예에서, 이들은 명령어의 실행의 일부로서 함께 수행된다.
도 5는 확장 명령어를 처리하기 위한 방법의 실시예를 나타낸다. 이 실시예에서, 동작들(401-407)의 전부는 아니더라도 일부가 먼저 실행되었으나, 이들은 이하에서 제시되는 상세한 설명을 흐리게 하지 않기 위해 도시되어 있지 않다고 가정한다. 예를 들어, 인출 및 디코딩은 도시되어 있지 않고 피연산자(소스 및 기입 마스크) 검색도 도시되어 있지 않다.
501에서, 첫 번째 비트 위치에서의 기입 마스크가 대응하는 소스 위치가 목적지 레지스터의 대응하는 데이터 요소 위치 내에 저장되어야 한다는 것을 나타내는지에 관한 결정이 이루어진다. 예를 들어, 첫 번째 비트 위치에서의 기입 마스크가, 목적지 레지스터의 첫 번째 데이터 요소 위치가 소스로부터의 값(이 경우 소스 피연산자를 통해 액세스되는 연속된 데이터 요소들의 첫 번째 데이터 요소)으로 덮어쓰기되어야 한다는 것을 나타내는 "1"과 같은 값을 갖는가?
첫 번째 비트 위치에서의 기입 마스크가 목적지 레지스터에서 변경이 있어야 한다는 것을 나타내지 않으면, 기입 마스크 내의 다음 비트 위치가 평가될 것이고, 아무런 변경도 이루어지지 않는다. 첫 번째 비트 위치에서의 기입 마스크가 목적지의 첫 번째 데이터 요소에서 변경이 있어야 한다는 것을 나타내면, 507에서, 첫 번째 소스 데이터 요소(예를 들어, 메모리 위치 또는 소스 레지스터의 최하위 데이터 요소)가 첫 번째 데이터 요소 위치에 저장된다. 구현에 따라, 505에서, 메모리 데이터 요소는 목적지의 데이터 요소 크기로 변환된다. 이것은 또한, 501의 평가 이전에 발생했을 수도 있다. 511에서, 목적지 레지스터에 기입될 수도 있는 소스로부터의 후속(연속된) 데이터 요소가 판독된다.
평가된 기입 마스크 위치가 기입 마스크의 마지막이거나 목적지의 데이터 요소 위치들 모두가 채워졌는지의 결정이 513에서 이루어진다. 참이라면, 동작이 종료한다.
참이 아니면, 515에서 기입 마스크의 다음 비트 위치가 평가될 것이다. 이 평가는 503에서 발생하고 501의 결정과 유사하지만, 기입 마스크의 첫 번째 비트 위치에 대한 것이 아니다. 결정이 "예"이면, 데이터 요소가 저장되는 등등이고(507, 509, 및 511), 결정이 "아니오"이면, 505에서 목적지의 데이터 요소는 방치된다.
추가로, 이 도면 및 상기 설명은 각각의 첫 번째 위치들이 최하위 위치인 것으로 간주하지만, 일부 실시예에서 첫 번째 위치들은 최상위 위치이다.
압축
압축 명령어의 실행은, 프로세서로 하여금, 기입 마스크 피연산자에 의해 결정된 활성 요소들에 기초하여 소스 피연산자(통상 레지스터 피연산자)로부터의 데이터 요소들을 목적지 피연산자(메모리 또는 레지스터 피연산자) 내의 연속된 데이터 요소들에 저장(패킹)하게 한다. 추가로, 소스 피연산자의 데이터 요소들은 그들의 크기에 따라 그리고 소스가 메모리인 경우 데이터 요소들이 어떤 크기인지에 따라 다운컨버팅(downconvert)될 수 있다. 예를 들어, 메모리 피연산자의 데이터 요소들이 크기가 16-비트이고 소스 레지스터의 데이터 요소들이 32-비트이면, 메모리에 저장될 레지스터의 이들 데이터 요소들은 16-비트로 다운컨버팅된다. 다운컨버전 및 이들이 인코딩되어 명령어 포맷화되는 방법의 예가 후술될 것이다. 압축의 실행은 또한, 요소-정렬된 주소에서 시작하여 논리적으로 매핑된 바이트/워드/더블워드 스트림을 생성하는 것으로 간주될 수 있다. 스트림의 길이는, 마스크에 의해 디스에이블된 요소들은 스트림에 추가되지 않기 때문에, 기입 마스크에 의존한다. 압축은 통상 드문드문한 데이터를 큐 내에 압축하는데 이용된다. 추가로, 아무런 기입 마스크도 이용하지 않을 때(또는 기입 마스크가 모두 1로 세트될 때), 이것은 메모리 참조가 캐시-라인 분할을 생성할 확신이 높은 경우 더 높은 성능 벡터 저장에 이용될 수 있다.
이 명령어의 포맷은 "VCOMPRESSPS zmm2/mem {k1}, D(zmm1),"이고, 여기서, zmm1 및 zmm2는 각각 (128-, 246-, 512-비트 레지스터와 같은) 소스 및 목적지 벡터 레지스터 피연산자이며, k1은 (16-비트 레지스터와 같은) 기입 마스크 피연산자이고, mem은 메모리 위치이다. 명령어에 포함된 메모리 피연산자에 대한 오프셋이 존재할 수도 있다. 메모리에 저장되는 무엇이라도 그 메모리 주소로부터 시작하는 연속된 비트 집합이고, 몇 개의 크기들(128-, 256-, 512-비트 등) 중 하나일 수 있다. 일부 실시예에서, 기입 마스크는 또는 상이한 크기(8 비트, 32 비트 등)이다. 추가로, 일부 실시예에서, 기입 마스크의 모든 비트가 명령어에 의해 이용되는 것은 아니다(예를 들어, 8개 하위 비트들만이 이용된다). 물론, VCOMPRESSPS는 명령어의 연산코드(opcode)이다. 통상적으로, 각 피연산자는 명령어에서 명시적으로 정의된다. 데이터 요소들의 크기는, 명령어의 "프레픽스"에서 예를 들어 여기서 설명되는 "W"와 같은 데이터 입도(data granularity) 비트의 표시를 이용하여 정의될 수 있다. 대부분의 실시예에서, W는 각 데이터 요소가 32 비트 또는 64 비트임을 표시할 것이다. 데이터 요소들이 크기가 32 비트이고, 소스들이 크기가 512 비트이면, 소스당 열여섯(16)개의 데이터 요소가 있다.
프로세서에서 압축 명령어의 실행의 예가 도 6에 도시되어 있다. 이 예에서, 목적지 메모리는 RAX 레지스터에서 발견되는 주소와 연관된 주소에서 어드레싱된다. 물론, 메모리 주소는 다른 레지스터에 저장되거나 명령어에서 즉석값으로서 발견될 수도 있다. 이 예에서의 기입 마스크는 0x4DB1이다. 기입 마스크가 "1" 값을 갖는 각각의 경우, (ZMM 레지스터와 같은) 소스로부터의 데이터 요소가 메모리 내에 연속적으로 저장(패킹)된다. 예를 들어, 기입 마스크의 첫 번째 위치(예를 들어, k2[0])는 "1"이고, 이는 대응하는 소스 데이터 요소 위치(예를 들어, 소스 레지스터의 첫 번째 데이터 요소)가 메모리에 기입되어야 한다는 것을 나타낸다. 이 경우, 이것은 RAX 주소와 연관된 데이터 요소로서 저장될 것이다. 마스크의 다음 3개 비트는 "0"이고, 이는 소스 레지스터의 대응하는 데이터 요소들이 메모리에 저장되지 않는다는 것을 나타낸다(도면에서는 "Y"로 표시됨). 기입 마스크의 다음 "1" 값은 5번째 비트 위치(예를 들어, k2[4])에 있다. 이것은, RAX 레지스터와 연관된 데이터 요소에 후속하는(연속하는) 데이터 요소 위치는 소스 레지스터의 5번째 데이터 요소 슬롯이 그곳에 저장되게 할 것임을 나타낸다. 나머지 기입 마스크 비트 위치들은, 소스 레지스터의 어떤 추가 데이터 요소들이 메모리에 저장될 것인지를 결정하는데 이용된다(이 예에서는, 총 8개 데이터 요소들이 저장되지만, 기입 마스크에 따라 더 적거나 더 많이 존재할 수 있다). 추가로, 레지스터 소스로부터의 데이터 요소들은 저장 이전에 32-비트 부동 소수점 값으로부터 16-비트 값으로 변환되는 것과 같이 메모리의 데이터 요소 크기에 맞도록 다운컨버팅될 수도 있다.
도 7은 프로세서에서 압축 명령어의 실행의 또 다른 예를 나타낸다. 이 예에서, 목적지는 레지스터이다. 이 예에서의 기입 마스크는 다시 한번 0x4DB1이다. 기입 마스크가 "1" 값을 갖는 각각의 경우, (ZMM 레지스터와 같은) 소스로부터의 데이터 요소는 목적지 레지스터 내에 연속적으로 저장(패킹)된다. 예를 들어, 기입 마스크의 첫 번째 위치(예를 들어, k2[0])는 "1"이고, 이는 대응하는 소스 데이터 요소 위치(예를 들어, 소스 레지스터의 첫 번째 데이터 요소)가 목적지 레지스터 내에 기입되어야 한다는 것을 나타낸다. 이 경우, 이것은 목적지 레지스터의 첫 번째 데이터 요소로서 저장될 것이다. 마스크의 다음 3개 비트는 "0"이고, 이는 소스 레지스터의 대응하는 데이터 요소들이 목적지 레지스터에 저장되지 않는다는 것을 나타낸다(도면에서는 "Y"로 도시됨). 기입 마스크의 다음 "1" 값은 5번째 비트 위치(예를 들어, k2[4])에 있다. 이것은, 첫 번째 데이터 요소에 후속하는(연속하는) 데이터 요소 위치는 소스 레지스터의 5번째 데이터 요소 슬롯이 그곳에 저장되게 할 것임을 나타낸다. 나머지 기입 마스크 비트 위치들은, 소스 레지스터의 어떤 추가 데이터 요소들이 목적지 레지스터에 저장될 것인지를 결정하는데 이용된다(이 예에서는, 총 8개 데이터 요소들이 저장되지만, 기입 마스크에 따라 더 적거나 더 많이 존재할 수 있다).
도 8은 확장 명령어를 실행하기 위한 의사 코드의 예를 나타낸다.
도 9는 프로세서에서 압축 명령어의 이용의 실시예를 나타낸다. 901에서, 목적지 피연산자, 소스 피연산자, 및 기입 마스크를 갖는 압축 명령어가 인출(fetch)된다. 일부 실시예에서, 소스 피연산자는 (ZMM1과 같은) 512-비트 벡터 레지스터이고, 기입 마스크는 (k1과 같은) 16-비트 레지스터이다. 목적지는, 레지스터에 저장된 또는 즉석값으로서의 메모리 위치이거나, 레지스터 피연산자일 수 있다. 추가로, 압축 명령어는 메모리 주소에 대한 오프셋을 포함할 수도 있다.
903에서 압축 명령어가 디코딩된다. 명령어의 포맷에 따라, 이 스테이지에서, 다운컨버전이 있을지, 어느 레지스터에 기입하고 어느 레지스터에서 검색할지, 목적지 피연산자(및 있다면 오프셋)로부터의 메모리 주소가 무엇인지 등과 같은, 다양한 데이터가 해석될 수 있다.
905에서 소스 피연산자 값이 검색/판독된다. 예를 들어, 소스 레지스터의 적어도 첫 번째 데이터 요소가 판독된다.
(다운컨버전과 같은) 수행될 임의의 데이터 요소 변환이 있다면, 이것은 907에서 수행될 수 있다. 예를 들어, 레지스터로부터의 32-비트 데이터 요소가 16-비트 데이터 요소로 다운컨버팅될 수 있다.
909에서 압축 명령(또는 마이크로연산 등의 명령어를 포함하는 연산)이 실행 리소스에 의해 실행된다. 이 실행은 기입 마스크의 "활성" 요소들(비트 위치들)에 기초하여 소스 피연산자로부터의 값이 목적지에 패킹된 데이터 요소들로서 로딩될 것인지의 결정을 야기한다. 이러한 분석의 예가 도 6에 도시되어 있다.
911에서 기입 마스크의 "활성" 요소들에 대응하는 소스 피연산자의 적절한 데이터 요소들이 목적지 내에 저장된다. 다시 한번, 이에 대한 예가 도 6 및 도 7에 도시되어 있다. 909 및 911이 별개로 도시되어 있지만, 일부 실시예에서, 이들은 명령어의 실행의 일부로서 함께 수행된다.
도 10은 압축 명령어를 처리하기 위한 방법의 실시예를 나타낸다. 이 실시예에서, 동작들(901-907)의 전부는 아니더라도 일부가 먼저 실행되었으며, 이들은 이하에서 제시되는 상세한 설명을 흐리게 하지 않기 위해 도시되지 않다고 가정한다. 예를 들어, 인출 및 디코딩은 도시되어 있지 않고 피연산자(소스 및 기입 마스크) 검색도 도시되어 있지 않다.
1001에서, 첫 번째 비트 위치에서의 기입 마스크가, 대응하는 소스 데이터 요소가 처음에 목적지 피연산자(최하위 위치)에 의해 표시된 목적지 위치에 저장되어야함을 나타내는지의 결정이 이루어진다. 예를 들어, 제1 위치에서의 마스크가 소스 레지스터의 첫 번째 데이터 요소 위치가 메모리에 기입되어야 함을 나타내는 "1"과 같은 값을 갖는가?
첫 번째 비트 위치에서의 기입 마스크가 목적지에서 변경이 있어야 한다는 것을 나타내지 않으면(첫 번째 데이터 요소가 소스 레지스터의 첫 번째 데이터 요소에 의해 미변경으로 남아 있어야 한다), 기입 마스크 내의 다음 비트 위치가 평가될 것이고(있다면), 아무런 변경도 이루어지지 않는다. 첫 번째 비트 위치에서의 기입 마스크가 목적지의 첫 번째 데이터 요소에서 변경이 있어야 한다는 것을 나타내면, 1007에서 소스 데이터 요소가 목적지의 첫 번째 데이터 요소 위치에 저장된다. 구현에 따라, 1005에서, 소스 데이터 요소는 목적지의 데이터 요소 크기로 변환된다. 이것은 또한, 1001의 평가 이전에 발생했을 수도 있다. 기입될 수도 있는 후속하는(연속하는) 목적지 위치가 1009에서 판독된다.
평가된 기입 마스크 위치가 기입 마스크의 마지막이거나 목적지의 데이터 요소 위치들 모두가 채워졌는지의 결정이 1011에서 이루어진다. 참이라면, 동작이 종료한다. 참이 아니면, 1013에서 기입 마스크의 다음 비트 위치가 평가될 것이다. 이 평가는 1003에서 발생하고 1001의 결정과 유사하지만, 기입 마스크의 첫 번째 비트 위치에 대한 것이 아니다. 결정이 "예"이면, 데이터 요소가 저장되는 등등이다(1005, 1007 및 1009).
추가로, 이 도면 및 상기 설명은 각각의 첫 위치들이 최하위 위치인 것으로 간주하지만, 일부 실시예에서 첫 위치들은 최상위 위치이다.
전술된 명령어(들)의 실시예는 후술되는 "일반 친벡터 명령어 포맷"으로 구현될 수 있다. 다른 실시예들에서, 이러한 포맷은 이용되지 않고 또 다른 명령어 포맷이 이용되지만, 기입 마스크 레지스터, 다양한 데이터 변환(스위즐, 브로드캐스트 등), 어드레싱 등에 관한 이하의 설명은 상기 명령어(들)의 실시예들의 설명에 일반적으로 적용가능하다. 추가로, 예시적 시스템, 아키텍처, 및 파이프라인들이 후술된다. 상기 명령어(들)의 실시예들은 이러한 시스템, 아키텍처, 및 파이프라인에서 실행될 수 있지만, 열거한 것들로 제한되는 것은 아니다.
친벡터 명령어 포맷은, 벡터 명령어에 적합한 명령어 포맷이다(예를 들어, 벡터 연산 특유의 소정 필드들이 존재). 친벡터 명령어 포맷을 통해 벡터 및 스칼라 연산 양쪽 모두가 지원되는 실시예들이 설명되지만, 대안적 실시예들은 친벡터 명령어 포맷의 벡터 연산만을 이용한다.
예시적인 일반 친벡터 명령어 포맷 - 도 11a 및 도 11b
도 11a 및 도 11b는 본 발명의 실시예에 따른 일반 친벡터 명령어 포맷 및 그 명령어 템플릿을 나타내는 블록도이다. 도 11a는 본 발명의 실시예에 따른 일반 친벡터 명령어 포맷 및 그 클래스 A 명령어 템플릿을 나타내는 블록도인 반면 도 11b는 본 발명의 실시예에 따른 일반 친벡터 명령어 포맷 및 그 클래스 B 명령어 템플릿을 나타내는 블록도이다. 구체적으로는, 클래스 A 및 클래스 B 명령어 템플릿이 정의되는 일반 친벡터 명령어 포맷(1100)은 양쪽 모두 비 메모리 액세스(1105) 명령어 템플릿 및 메모리 액세스(1120) 명령어 템플릿을 포함한다. 친벡터 명령어 포맷의 맥락에서 용어 "일반"이란 임의의 특정한 명령어 세트에 구속되지 않는 명령어 포맷을 말한다. 친벡터 명령어 포맷의 명령어가 레지스터로부터 소싱되는(비메모리 액세스(1105) 명령어 템플릿) 벡터 또는 레지스터/메모리로부터 소싱되는(메모리 액세스(1120) 명령어 템플릿) 벡터에 대해 동작하는 실시예가 설명될 것이지만, 본 발명의 대안적 실시예는 이들 중 하나만을 지원할 수도 있다. 또한, 벡터 명령어 포맷의 로딩 및 저장 명령어가 존재하는 본 발명의 실시예들이 설명되지만, 대안적 실시예는 그 대신에 또는 추가로 레지스터 내외로(예를 들어, 메모리로부터 레지스터 내로, 레지스터로부터 메모리 내로, 레지스터들 간에) 벡터를 이동시키는 상이한 명령어 포맷의 명령어를 가진다. 또한, 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 바이트) 데이터 요소 폭)을 갖는 더 많거나, 더 작거나, 및/또는 상이한 벡터 피연산자 크기(예를 들어, 1156 바이트 벡터 피연산자)를 지원할 수도 있다.
도 11a의 클래스 A 명령어 템플릿은 : 1) 비 메모리 액세스(1105) 명령어 템플릿 내에서, 도시되어 있는, 비 메모리 액세스, 풀 라운드 제어 타입 연산(1110) 명령어 템플릿, 및 비 메모리 액세스, 데이터 변환 타입 연산(1115) 명령어 템플릿과; 2) 메모리 액세스(1120) 명령어 템플릿 내에서, 도시되어 있는, 메모리 액세스, 임시(1125) 명령어 템플릿과 메모리 액세스, 비임시(1130) 명령어 템플릿을 포함한다. 도 11b의 클래스 B 명령어 템플릿은 : 1) 비 메모리 액세스(1105) 명령어 템플릿 내에서, 도시되어 있는, 비 메모리 액세스, 기입 마스크 제어, 부분 라운드 제어 타입 연산(1112) 명령어 템플릿, 및 비 메모리 액세스, 기입 마스크 제어, vsize 타입 연산(1117) 명령어 템플릿과; 2) 메모리 액세스(1120) 명령어 템플릿 내에서, 도시되어 있는, 메모리 액세스, 기입 마스크 제어(1127) 명령어 템플릿을 포함한다.
포맷
일반 친벡터 명령어 포맷(1100)은 도 11a 및 도 11b에 나타낸 순서대로 아래에 열거된 다음과 같은 필드들을 포함한다.
포맷 필드(1140) ― 이 필드 내의 특정한 값(명령어 포맷 식별자 값)은, 친벡터 명령어 포맷, 및 그에 따라 명령어 스트림 내에서 친벡터 명령어 포맷의 명령어들의 출현을 고유하게 식별한다. 따라서, 포맷 필드(1140)의 내용은 제1 명령어 포맷의 명령어의 출현을 다른 명령어 포맷의 명령어의 출현과 구분함으로써, 다른 명령어 포맷을 갖는 명령어 세트 내로의 친벡터 명령어 포맷의 도입을 허용한다. 이와 같이, 이 필드는 일반 친벡터 명령어 포맷만을 갖는 명령어 세트에 대해서는 필요하지 않다는 점에서 선택사항이다.
베이스 연산 필드(1142) ― 그 내용은 상이한 베이스 연산들을 구분한다. 여기서 후술되는 바와 같이, 베이스 연산 필드(1142)는 연산코드(opcode) 필드를 포함하거나 및/또는 그 일부일 수 있다.
레지스터 인덱스 필드(1144) ― 그 내용은, 직접 또는 주소 생성을 통해, 레지스터에 있거나 메모리에 있는, 소스 및 목적지 피연산자의 위치를 명시한다. 이들은, PxQ (예를 들어, 32x1312)개의 레지스터 파일로부터 N개의 레지스터를 선택하기에 충분한 개수의 비트를 포함한다. 한 실시예에서 N은 최대 3개의 소스와 하나의 목적지 레지스터일 수 있지만, 대안적 실시예는 더 많거나 더 적은 소스 및 목적지 레지스터를 지원할 수 있다(예를 들어, 최대 2개의 소스를 지원하고 이들 소스들 중 하나가 목적지로서 역할할 수 있거나, 최대 3개의 소스를 지원하고 이들 소스들 중 하나가 목적지로서 역할할 수 있거나, 최대 2개의 소스와 하나의 목적지를 지원할 수도 있다). 한 실시예에서 P=32이지만, 대안적 실시예는 더 많거나 더 적은 레지스터(예를 들어, 16개)를 지원할 수도 있다. 한 실시예에서 Q=1312 비트이지만, 대안적 실시예는 더 많거나 더 적은 비트를 지원할 수도 있다(예를 들어, 128, 1024).
수식자 필드(1146) ― 그 내용은 메모리 액세스를 명시하는 일반 벡터 명령어 포맷의 명령어의 출현을 그렇지 않는 명령어와 구분한다; 즉, 비 메모리 액세스(1105) 명령어 템플릿과 메모리 액세스(1120) 명령어 템플릿 간을 구분한다. 메모리 액세스 연산은 메모리 계층 구조를 판독 및/또는 이에 기입하는(일부 경우에는 레지스터 내의 값을 이용하여 소스 및/또는 목적지 주소를 명시하는) 반면, 비 메모리 액세스 연산은 그렇지 않다(예를 들어, 소스 및 목적지가 레지스터임). 한 실시예에서 이 필드는 또한 메모리 주소 계산을 수행하는 3가지 상이한 방식들 사이에서 선택하지만, 대안적 실시예는 메모리 주소 계산을 수행하기 위해 더 많거나, 더 적거나, 상이한 방식들을 지원할 수도 있다.
확장 연산 필드(1150) ― 그 내용은 베이스 연산 외에 다양한 상이한 연산들 중 어느 것을 수행할지를 구분한다. 이 필드는 컨텍스트 특유이다. 본 발명의 한 실시예에서, 이 필드는 클래스 필드(1168), 알파 필드(1152), 및 베타 필드(1154)로 구분된다. 확장 연산 필드는 공통의 연산 그룹이 2, 3, 또는 4개 명령어가 아니라 하나의 명령어에서 수행되는 것을 허용한다. 아래에는, 필요한 명령어의 개수를 줄이기 위해 확장 필드(1150)를 이용하는 명령어들(그 명명법은 이후에 더 상세히 설명된다)의 몇 가지 예가 있다.
Figure 112016104770112-pat00001
여기서, [rax]는 주소 생성에 이용되는 베이스 포인터(base pointer)이고, {}는 (이후에 더 상세히 설명되는) 데이터 조작 필드에 의해 명시된 컨버전 연산을 나타낸다.
스케일 필드(1160) ― 그 내용은 메모리 주소 생성(예를 들어, 2스케일*인덱스+베이스를 이용하는 주소 생성)을 위한 인덱스 필드의 내용의 스케일링을 허용한다.
변위 필드(1162A) ― 그 내용은 메모리 주소 생성(예를 들어, 2스케일*인덱스+베이스+변위를 이용하는 주소 생성)의 일부로서 이용된다.
변위 계수 필드(1162B)(변위 계수 필드(1162A) 바로 위의 변위 필드(1162B)의 병렬 배치는 한쪽이나 다른 한쪽이 이용됨을 나타낸다는 점에 유의한다) ―그 내용은 주소 생성의 일부로서 이용된다; 이것은 메모리 액세스의 크기(N)에 의해 스케일링될 변위 계수를 명시한다― 여기서, N은 메모리 액세스에서의 바이트 수이다(예를 들어, 2스케일*인덱스+베이스+스케일링된 변위를 이용하는 주소 생성의 경우). 리던던트 저차수 비트(Redundant low-order bit)들은 무시되므로, 유효 주소 계산에 이용될 최종 변위를 생성하기 위하여 변위 계수 필드의 내용은 메모리 피연산자 총 크기(N)로 곱해진다. N의 값은 (이후에 설명되는) 전체 연산코드 필드(1174)와 이후에 설명되는 데이터 조작 필드(1154C)에 기초하여 런타임시에 프로세서 하드웨어에 의해 결정된다. 변위 필드(1162A) 및 변위 계수 필드(1162B)는, 비 메모리 액세스(1105) 명령어 템플릿에 이용되지 않고 및/또는 상이한 실시예는 둘 중 하나만 이용하거나 아무것도 이용하지 않는다는 점에서 선택사항이다.
데이터 요소 폭 필드(1164) ― 그 내용은 다수의 데이터 요소 폭들 중 어떤 것을 이용할 것인지를 구분한다(일부 실시예에서는 모든 명령에 대해; 다른 실시예에서는 명령어들 중 일부에 대해서만). 이 필드는 하나의 데이터 요소 폭만이 지원되거나 및/또는 연산코드들 중 일부 양태를 이용하여 데이터 요소 폭들이 지원된다는 점에서 선택사항이다.
기입 마스크 필드(1170) ― 그 내용은, 데이터 요소 위치별 기반으로, 목적지 벡터 피연산자 내의 그 데이터 요소 위치가 베이스 연산과 확장 연산의 결과를 반영하는지를 제어한다. 클래스 A 명령어 템플릿은 병합-기입마스킹을 지원하는 반면, 클래스 B 명령어 템플릿은 병합- 및 제로화-기입마스킹 양쪽 모두를 지원한다. 병합시에, 벡터 마스크는 (베이스 연산 및 확장 연산에 의해 명시된) 임의의 연산의 실행 동안에 목적지 내의 임의의 요소 세트가 업데이트 방지되는 것을 허용한다; 다른 한 실시예에서, 대응하는 마스크 비트가 0을 갖는 목적지의 각 요소의 구 값(old value)을 보존한다. 대조적으로, 제로화 벡터 마스크가 (베이스 연산 및 확장 연산에 의해 명시된) 임의의 연산의 실행 동안에 목적지 내의 임의의 요소 세트가 제로화되는 것을 허용한다; 한 실시예에서, 목적지의 요소는 대응하는 마스크 비트가 0 값을 가질 때 0으로 설정된다. 이러한 기능의 부분집합은 수행 중인 연산의 벡터 길이(즉, 첫 번째 것으로부터 마지막 것까지, 수정 중인 요소들의 스팬)를 제어하는 능력이다; 그러나, 수정되는 요소들이 연속적일 필요는 없다. 따라서, 기입 마스크 필드(1170)는, 로딩, 저장, 산술, 논리 등을 포함한 부분 벡터 연산을 허용한다. 또한, 이 마스킹은 오류(fault) 억제에 이용될 수 있다(즉, 오류를 야기할 수 있는/야기할 임의의 동작 결과의 수신을 방지하기 위해 목적지의 데이터 요소 위치를 마스킹함으로써, ― 예를 들어, 메모리 내의 벡터가 페이지 경계를 가로지르고 제2 페이지가 아니라 제1 페이지가 페이지 오류를 야기한다고 가정하면, 제1 페이지 상에 놓인 벡터의 모든 데이터 요소가 기입 마스크에 의해 마스킹된다면 그 페이지 오류는 무시될 수 있다). 또한, 기입 마스크는 소정 타입의 조건문을 포함하는 "벡터화 루프"를 허용한다. 기입 마스크 필드(1170)의 내용이 사용될 기입 마스크를 포함하는 다수의 기입 마스크 레지스터들 중 하나를 선택하는(및 그에 따라 기입 마스크 필드(1170)의 내용은 수행될 마스킹을 간접적으로 식별한다) 본 발명의 실시예가 설명되지만, 대안적 실시예는 그 대신에 또는 추가로 마스크 기입 필드(1170)의 내용이 수행될 마스킹을 직접적으로 명시하는 것을 허용한다. 또한, 제로화는 1) 레지스터 리네이밍 파이프라인 스테이지 동안에 목적지가 더 이상 묵시적 소스가 아니므로(연산 결과가 아닌 임의의 데이터 요소(및 임의의 마스킹된 데이터 요소)가 제로화될 것이므로 현재의 목적지 레지스터로부터의 어떠한 데이터 요소도 리네임된 목적지 레지스터에 복사될 필요가 없거나 연산과 함께 어떻게든 캐리될 필요가 없다) 목적지 피연산자도 역시 소스가 아닌 명령어(3변수 명령어라고도 함)들에 관해 레지스터 리네이밍이 이용될 때 ; 및 2) 제로가 기입 중인 이유로 되기입(write back) 스테이지 동안에, 성능 개선을 허용한다.
즉석 필드(1172) ― 그 내용은 즉석값의 명시를 허용한다. 이 필드는, 즉석값을 지원하지 않는 일반 친벡터 포맷의 구현에는 존재하지 않고 즉석값을 이용하지 않는 명령어에는 존재하지 않는다는 점에서 선택사항이다.
명령어 템플릿 클래스 선택
클래스 필드(1168) ― 그 내용은 명령어들의 상이한 클래스들 간을 구분한다. 도 2a 및 도 2b를 참조하면, 이 필드의 내용은 클래스 A와 클래스 B 명령어 사이에서 선택한다. 도 11a 및 도 11b에서, 필드에 특정한 값이 존재한다는 것을 나타내기 위해 둥근 코너 사각형이 이용된다(예를 들어, 도 11a 및 도 11b에서 각각 클래스 필드(1168)에 대한 클래스 A(1168A) 및 클래스 B(1168B)).
클래스 A의 비 액세스 메모리 명령어 템플릿
클래스 A의 비 메모리 액세스(1105) 명령어 템플릿의 경우, 알파 필드(1152)는 RS 필드(1152A)로서 해석되고, 그 내용은 상이한 확장 연산 타입들 중 어느 것이 수행될 것인지를 구분하는(예를 들어, 라운드(1152A.1) 및 데이터 변환(1152A.2)은 각각 비 메모리 액세스, 라운드 타입 연산(1110)과, 비 메모리 액세스, 데이터 변환 타입 연산(1115) 명령어 템플릿에 대해 명시된다) 반면, 베타 필드(1154)는 명시된 타입의 연산들 중 어느 것이 수행될 것인지를 구분한다. 도 11에서, 둥근 코너 블록들은 특정한 값이 존재한다는 것을 나타내는데 이용된다(예를 들어, 수식자 필드(1146) 내의 비 메모리 액세스(1146A); 알파 필드(1152)/rs 필드(1152A)에 대한 라운드(1152A.1) 및 데이터 변환(1152A.2). 비 메모리 액세스(1105) 명령어 템플릿에서, 스케일 필드(1160), 변위 필드(1162A), 및 변위 스케일 필드(1162B)는 존재하지 않는다.
비 메모리 액세스 명령어 템플릿 ― 풀 라운드 제어 타입 연산(Full Round Control Type Operation)
비 메모리 액세스 풀 라운드 제어 타입 연산(1110) 명령어 템플릿에서, 베타 필드(1154)는 라운드 제어 필드(1154A)로서 해석되고, 그 내용(들)은 정적 라운딩을 제공한다. 본 발명의 설명된 실시예에서, 라운드 제어 필드(1154A)는 모든 부동 소수점 예외 억제(SAE; suppress all floating point exception) 필드(1156) 및 라운드 연산 제어 필드(1158)를 포함하지만, 대안적 실시예는 이들 개념들 양쪽 모두를 동일한 필드 내에 인코딩하거나 이들 개념들/필드들 중 하나 또는 다른 하나만을 가질 수 있다(예를 들어, 라운드 연산 제어 필드(1158)만을 가질 수 있다).
SAE 필드(1156) ― 그 내용은 예외 이벤트 보고를 디스에이블할지의 여부를 구분한다; SAE 필드(1156)의 내용이 억제가 인에이블되어 있음을 나타낼 때, 주어진 명령어는 어떠한 종류의 부동 소수점 예외 플래그도 보고하지 않고 어떠한 부동 소수점 예외 핸들러도 야기하지 않는다.
라운드 연산 제어 필드(1158) ― 그 내용은 한 그룹의 라운딩 연산들 중 어느 것을 수행할 것인지를 구분한다(예를 들어, 라운드-업, 라운드-다운, 제로를 향한 라운드 및 최근접치로의 라운드). 따라서, 라운드 연산 제어 필드(1158)는 명령어별 기반의 라운딩 모드의 변경을 허용하므로, 특히 이것이 필요할 때 유용하다. 프로세서가 라운딩 모드를 명시하기 위한 제어 레지스터를 포함하는 본 발명의 한 실시예에서, 라운드 연산 제어 필드(1150)의 내용은 그 레지스터 값보다 우선시된다(이러한 제어 레지스터 상에서 저장-수정-복구를 수행해야만 하지 않고 라운딩 모드를 선택할 수 있는 것은 유익하다).
비 메모리 액세스 명령어 템플릿 ― 데이터 변환 타입 연산
비 메모리 액세스 데이터 변환 타입 연산(1115) 명령어 템플릿에서, 베타 필드(1154)는 데이터 변환 필드(1154B)로서 해석되고, 그 내용은 다수의 데이터 변환(예를 들어, 데이터 변환 없음, 스위즐, 브로드캐스트) 중 어느 것이 수행될 것인지를 구분한다.
클래스 A의 액세스 메모리 명령어 템플릿
클래스 A의 메모리 액세스(1120) 명령어 템플릿의 경우, 알파 필드(1152)는 에빅션 힌트 필드(eviction hint field, 1152B)로서 해석되고, 그 내용은 에빅션 힌트들 중 어느 것이 이용될 것인지를 구분하는(도 11a에서, 메모리 액세스, 임시(1125) 명령어 템플릿과, 메모리 액세스, 비임시(1130) 명령어 템플릿에 대해 임시(1152B.1) 및 비임시(1152B.2)가 각각 명시된다) 반면, 베타 필드(1154)는 데이터 조작 필드(1154C)로서 해석되고, 그 내용은 (프리미티브라고도 알려진) 다수의 데이터 조작 연산들 중 어느 것이 수행될 것인지를 구분한다(예를 들어, 데이터 조작 없음; 브로드캐스트; 소스의 업 컨버전; 및 목적지의 다운 컨버전). 메모리 액세스(1120) 명령어 템플릿은, 스케일 필드(1160), 및 선택사항으로서의 변위 필드(1162A) 또는 변위 스케일 필드(1162B)를 포함한다.
벡터 메모리 명령어는, 컨버전 지원과 함께, 메모리로부터의 벡터 로딩 및 메모리로의 벡터 저장을 수행한다. 보통의 벡터 메모리 명령어에서와 같이, 벡터 메모리 명령어는 데이터-요소별 방식으로 메모리로부터/메모리로 데이터를 이송하며, 실제로 이송되는 요소들은 기입 마스크로서 선택되는 벡터 마스크의 내용에 의해 지시된다. 도 11a에서, 둥근 코너 사각형들은 필드에 특정한 값이 존재한다는 것을 나타내는데 이용된다(예를 들어, 수식자 필드(1146) 내의 메모리 액세스(1146B); 알파 필드(1152)/에빅션 힌트 필드(1152B)에 대한 임시(1152B.1) 및 비임시(1152B.2)).
메모리 액세스 명령어 템플릿 ― 임시
임시 데이터는 캐싱의 혜택을 받기에 충분히 조만간 재사용될 가능성이 있는 데이터이다. 그러나, 이것은 힌트이고, 상이한 프로세서는 힌트를 완전히 무시하는 것을 포함한 상이한 방식으로 그것을 구현할 수 있다.
메모리 액세스 명령어 템플릿 ― 비임시
비임시 데이터는, 제1 레벨 캐시에서의 캐싱의 혜택을 받기에 충분히 조만간 재사용될 것 같지 않은 데이터이며, 에빅션을 위해 우선권을 부여받아야 한다. 그러나, 이것은 힌트이고, 상이한 프로세서는 힌트를 완전히 무시하는 것을 포함한 상이한 방식으로 그것을 구현할 수 있다.
클래스 B의 명령어 템플릿
클래스 B의 명령어 템플릿의 경우, 알파 필드(1152)는 기입 마스크 제어(Z) 필드(1152C)로서 해석되고, 그 내용은 기입 마스크 필드(1170)에 의해 제어되는 기입 마스킹이 병합이어야 하는지 또는 제로화이어야 하는지를 구분한다.
클래스 B의 비 액세스 메모리 명령어 템플릿
클래스 B의 비 메모리 액세스(1105) 명령어 템플릿의 경우, 베타 필드(1154)의 일부는 RL 필드(1157A)로서 해석되고, 그 내용은 상이한 확장 연산 타입들 중 어느 것이 수행될 것인지를 구분하는(예를 들어, 비 메모리 액세스, 기입 마스크 제어, 부분 라운드 제어 타입 연산(1112) 명령어 템플릿과, 비 메모리 액세스, 기입 마스크 제어, VSIZE 타입 연산(1117) 명령어 템플릿에 대해 각각 라운드(1157A.1) 및 벡터 길이(VSIZE)(1157A.2)가 명시된다) 반면, 베타 필드(1154)의 나머지는 지정된 타입의 연산들 중 어느 것이 수행될 것인지를 구분한다. 도 11에서, 둥근 코너 블록들은 특정한 값이 존재한다는 것을 나타내는데 이용된다(예를 들어, 수식자 필드(1146) 내의 비 메모리 액세스(1146A); RL 필드(1157A)에 대한 라운드(1157A.1) 및 VSIZE(1157A.2)). 비 메모리 액세스(1105) 명령어 템플릿에서, 스케일 필드(1160), 변위 필드(1162A), 및 변위 스케일 필드(1162B)는 존재하지 않는다.
비 메모리 액세스 명령어 템플릿 ― 기입 마스크 제어, 부분 라운드 제어 타입 연산
비 메모리 액세스, 기입 마스크 제어, 부분 라운드 제어 타입 연산(1110) 명령어 템플릿에서, 베타 필드(1154)의 나머지는 라운드 연산 필드(1159A)으로서 해석되고 예외 이벤트 보고는 디스에이블된다(주어진 명령어는 어떠한 종류의 부동 소수점 예외 플래그도 보고하지 않고 어떠한 부동 소수점 예외 핸들러도 야기하지 않는다).
라운드 연산 제어 필드(1159A) ― 라운드 연산 제어 필드(1158)와 마찬가지로, 그 내용은 한 그룹의 라운딩 연산들 중 어느 것을 수행할 것인지를 구분한다(예를 들어, 라운드-업, 라운드-다운, 제로를 향한 라운드 및 최근접치로의 라운드). 따라서, 라운드 연산 제어 필드(1159A)는 명령어별 기반의 라운딩 모드의 변경을 허용하므로, 특히 이것이 필요할 때 유용하다. 프로세서가 라운딩 모드를 명시하기 위한 제어 레지스터를 포함하는 본 발명의 한 실시예에서, 라운드 연산 제어 필드(1150)의 내용은 그 레지스터 값보다 우선시된다(이러한 제어 레지스터 상에서 저장-수정-복구를 수행해야만 하지 않고 라운딩 모드를 선택할 수 있는 것은 유익하다).
비 메모리 액세스 명령어 템플릿 ― 기입 마스크 제어, VSIZE 타입 연산
비 메모리 액세스, 기입 마스크 제어, VSIZE 타입 연산(1117) 명령어 템플릿에서, 베타 필드(1154)의 나머지는 벡터 길이 필드(1159B)로서 해석되고, 그 내용은 다수의 데이터 벡터 길이(예를 들어, 128, 1156, 또는 1312 바이트) 중 어느 것에 대해 수행될 것인지를 구분한다.
클래스 B의 액세스 메모리 명령어 템플릿
클래스 A의 메모리 액세스(1120) 명령어 템플릿의 경우, 베타 필드(1154)의 일부는 브로드캐스트 필드(1157B)로서 해석되고, 그 내용은 브로드캐스트 타입 데이터 조작 연산이 수행될 것인지의 여부를 구분하는 반면, 베타 필드(1154)의 나머지는 벡터 길이 필드(1159B)로서 해석된다. 메모리 액세스(1120) 명령어 템플릿은, 스케일 필드(1160), 및 선택사항으로서의 변위 필드(1162A) 또는 변위 스케일 필드(1162B)를 포함한다.
필드들에 관한 추가 코멘트
일반 친벡터 명령어 포맷(1100)에 관하여, 포맷 필드(1140), 베이스 연산 필드(1142), 및 데이터 요소 폭 필드(1164)를 포함하는 전체 연산코드 필드(1174)가 도시되어 있다. 전체 연산코드 필드(1174)가 이들 필드들 모두를 포함하는 한 실시예가 도시되지만, 이들 모두를 지원하지는 않는 실시예에서, 전체 연산코드 필드(1174)는 이들 필드들 모두보다 적은 필드들을 포함한다. 전체 연산코드 필드(1174)는 연산 코드를 제공한다.
확장 연산 필드(1150), 데이터 요소 폭 필드(1164), 및 기입 마스크 필드(1170)는, 이들 특징들이 명령어별 기반으로 일반 친벡터 명령어 포맷으로 명시되는 것을 허용한다.
기입 마스크 필드와 데이터 요소 폭 필드의 조합은 타입화된 명령어를 생성하는데, 이러한 명령어는 마스크가 상이한 데이터 요소 폭들에 기초하여 적용되는 것을 허용하기 때문이다.
명령어 포맷은, 다른 필드들의 내용에 기초하여 상이한 목적에 대해 상이한 필드들을 재사용하기 때문에, 비교적 적은 수의 비트를 요구한다. 예를 들어, 하나의 관점은 수식자 필드의 내용은 도 11a 및 도 11b의 비 메모리 액세스(1105) 명령어 템플릿과 도 11a 및 도 11b의 메모리 액세스(1120) 명령어 템플릿 간에 선택하는 한편; 클래스 필드(1168)의 내용은 이들 비 메모리 액세스(1105) 명령어 템플릿 내에서 도 11a의 명령어 템플릿(1110/1115)과 도 11b의 명령어 템플릿(1112/1117) 사이에서 선택하는 반면; 클래스 필드(1168)의 내용은 이들 메모리 액세스(1120) 명령어 템플릿들 내에서 도 11a의 명령어 탬플릿(1125/1130)과 도 11b의 명령어 템플릿(1127) 사이에서 명령어 템플릿을 선택한다는 것이다. 또 다른 관점에서, 클래스 필드(1168)의 내용은 각각 도 11a 및 도 11b의 클래스 A와 클래스 B 명령어 템플릿들 사이에서 선택하는 한편; 수식자 필드의 내용은 이들 클래스 A 명령어 템플릿들 내에서 도 11a의 명령어 탬플릿들(1105 및 1120) 사이에서 선택하는 반면; 수식자 필드의 내용은 이들 클래스 B 명령어 템플릿들 내에서 도 11b의 명령어 템플릿들(1105 및 1120) 사이에서 선택한다. 클래스 필드의 내용이 클래스 A 명령어 템플릿을 나타내는 경우, 수식자 필드(1146)의 내용은 (rs 필드(1152A)와 EH 필드(1152B) 사이에서) 알파 필드(1152)의 해석을 선택한다. 유사한 방식으로, 수식자 필드(1146) 및 클래스 필드(1168)의 내용은 알파 필드가 rs 필드(1152A)로서 해석될지, EH 필드(1152B)로서 해석될지, 또는 기입 마스크 제어(Z) 필드(1152C)로서 해석될지를 선택한다. 클래스 및 수식자 필드가 클래스 A 비 메모리 액세스 연산을 나타내는 경우, 확장 필드의 베타 필드의 해석은 rs 필드의 내용에 기초하여 변한다; 반면, 클래스 및 수식자 필드가 클래스 B 비 메모리 액세스 연산을 나타내는 경우, 베타 필드의 해석은 RL 필드의 내용에 의존한다. 클래스 및 수식자 필드가 클래스 A 메모리 액세스 연산을 나타내는 경우, 확장 필드의 베타 필드의 해석은 베이스 연산 필드의 내용에 기초하여 변한다; 반면, 클래스 및 수식자 필드가 클래스 B 메모리 액세스 연산을 나타내는 경우, 확장 필드의 베타 필드의 브로드캐스트 필드(1157B)의 해석은 베이스 연산 필드의 내용에 기초하여 변한다. 따라서, 베이스 연산 필드, 수식자 필드 및 확장 연산 필드의 조합은 훨씬 더 다양한 확장 연산이 명시되는 것을 허용한다.
클래스 A 및 클래스 B 내에서 발견되는 다양한 명령어 템플릿들은 상이한 상황들에서 유익하다. 클래스 A는, 성능상의 이유로 제로화-기입마스킹 또는 더 작은 벡터 길이들이 바람직할 때 유용하다. 예를 들어, 제로화는, 리네이밍이 이용될 때 목적지와의 인위적 병합이 더 이상 필요하지 않으므로 가짜 의존성(fake dependence)의 회피를 허용한다; 또 다른 예로서, 벡터 길이 제어는 벡터 마스크로 더 짧은 벡터 크기를 에뮬레이팅할 때 저장-로딩 포워딩 문제를 용이하게 한다. 클래스 B는 1) 부동 소수점 예외를 허용하면서(즉, SAE 필드의 내용이 아무것도 나타내지 않을 때) 동시에 라운딩-모드 제어를 이용하는 것이 바람직할 때; 2) 업컨버전, 스위즐링, 스왑, 및/또는 다운컨버전을 이용할 수 있는 것이 바람직할 때; 3) 그래픽 데이터 타입에 관해 연산하는 것이 바람직할 때 유용하다. 예를 들어, 업컨버전, 스위즐링, 스왑, 다운컨버전, 및 그래픽 데이터 타입은 상이한 포맷의 소스들과 함께 동작할 때 요구되는 명령어의 개수를 줄인다; 또 다른 예로서, 예외를 허용하는 능력은 지시된 라운딩 모드들과의 완전한 IEEE 호환성을 제공한다.
예시적인 특정의 친벡터 명령어 포맷
도 12a 내지 도 12c는 본 발명의 실시예에 따른 예시적인 특정의 친벡터 명령어 포맷을 나타내는 블록도이다. 도 12a 내지 도 12c는, 위치, 크기, 해석, 및 필드 순서 뿐만 아니라 이들 필드들의 일부에 대한 값을 명시한다는 점에서 특정적인, 특정의 친벡터 명령어 포맷(1200)을 도시한다. 특정의 친벡터 명령어 포맷(1200)은 x86 명령어 세트를 확장하는데 이용될 수 있으므로, 필드들 중 일부는 기존 x86 명령어 세트 및 그 확장판(예를 들어, AVX)에서 이용되는 것들과 유사하거나 동일하다. 이 포맷은, 프레픽스 인코딩 필드, 리얼 연산코드 바이트 필드, MOD R/M 필드, SIB 필드, 변위 필드, 및 확장된 기존 x86 명령어 세트의 즉석 필드와의 일치성을 유지한다. 도 12a 내지 도 12c의 필드들이 매핑되는 도 11의 필드들이 도시되어 있다.
본 발명의 실시예들이 예시의 목적을 위해 일반 친벡터 명령어 포맷(1100)의 정황에서 특정의 친벡터 명령어 포맷(1200)을 참조하여 설명되지만, 본 발명은 청구되는 경우를 제외하고는 특정의 친벡터 명령어 포맷(1200)으로 제한되지 않는다는 것을 이해하여야 한다. 예를 들어, 일반 친벡터 명령어 포맷(1100)은 다양한 필드들에 대한 다양한 가능한 크기를 고려하는 반면, 특정의 친벡터 명령어 포맷(1200)은 특정 크기의 필드들을 갖는 것으로 도시되어 있다. 구체적인 예로서, 데이터 요소 폭 필드(1164)는 특정의 친벡터 명령어 포맷(1200)에서는 1 비트 필드로서 예시되어 있지만, 본 발명은 이와 같이 제한되는 것은 아니다(즉, 일반 친벡터 명령어 포맷(1100)은 데이터 요소 폭 필드(1164)의 다른 크기를 고려한다).
포맷 ― 도 12a 내지 도 12c
일반 친벡터 명령어 포맷(1100)은 도 12a 내지 도 12c에 나타낸 순서대로 아래에 열거된 다음과 같은 필드들을 포함한다.
EVEX 프레픽스(바이트 0-3)
EVEX 프레픽스(1202) ― 4바이트 형태로 인코딩됨.
포맷 필드(1140)(EVEX 바이트 0, 비트 [7:0]) ― 첫 번째 바이트(EVEX 바이트 0)는 포맷 필드(1140)이고 0x62(본 발명의 한 실시예에서 친벡터 명령어 포맷을 구분하기 위해 이용되는 고유한 값)를 포함한다.
2번째-4번째 바이트(EVEX 바이트 1-3)는 특정한 능력을 제공하는 다수의 비트 필드들을 포함한다.
REX 필드(1205)(EVEX 바이트 1, 비트[7-5]) ― EVEX.R 비트 필드(EVEX 바이트 1, 비트 [7] - R), EVEX.X 비트 필드(EVEX 바이트 1, 비트 [6] ― X), 및 1157BEX 바이트 1, 비트[5] ―B)로 구성됨. EVEX.R, EVEX.X, 및 EVEX.B 비트 필드들은 대응하는 VEX 비트 필드들과 동일한 기능을 제공하고, 1의 보수(complement) 형태를 이용하여 인코딩되는데, 즉, ZMM0은 1111B로서 인코딩되고, ZMM15는 0000B로서 인코딩된다. 명령어들의 다른 필드들은, 종래 기술에 공지된 바와 같이 레지스터 인덱스들의 하위 3 비트를 인코딩하여(rrr, xxx, 및 bbb), EVEX.R, EVEX.X, 및 EVEX.B를 더함으로써 Rrrr, Xxxx, 및 Bbbb가 형성될 수 있다.
REX' 필드(1210) ― 이것은 REX' 필드(1210)의 제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을 결합함으로써 형성된다.
연산코드 맵 필드(1215)(EVEX 바이트 1, 비트 [3:0] - mmmm) ― 그 내용은 묵시형 리딩(implied leading) 연산코드 바이트(0F, 0F 38 또는 0F 3)를 인코딩한다.
데이터 요소 폭 필드(1164)(EVEX 바이트 2, 비트 [7] ― W) - 표기 EVEX.W로 표현됨. EVEX.W는 데이터타입의 입도(크기)(32-비트 데이터 요소 또는 64-비트 데이터 요소)를 정의하는데 이용된다.
EVEX.vvvv(1220)(EVEX 바이트 2, 비트 [6:3]-vvvv) ― EVEX.vvvv의 역할은 다음과 같은 것을 포함할 수 있다: 1) EVEX.vvvv는 반전된(1의 보수) 형태로 명시된 제1 소스 레지스터 피연산자를 인코딩하고 2개 이상의 소스 피연산자를 갖는 명령어에 대해 유효하다; 2) EVEX.vvvv는 소정의 벡터 시프트에 대해 1의 보수 형태로 명시된 목적지 레지스터 피연산자를 인코딩한다; 또는 3) EVEX.vvvv는 어떠한 피연산자도 인코딩하지 않으며, 이 필드는 예비되거나 1111b를 포함해야 한다. 따라서, EVEX.vvvv 필드(1220)는 반전된(1의 보수) 형태로 저장된 제1 소스 레지스터 명시자(specifier)의 4개의 하위 비트들을 인코딩한다. 명령어에 따라, 명시자 크기를 32개 레지스터로 확장하기 위해 추가의 상이한 EVEX 비트 필드가 이용된다.
EVEX.U(1168) 클래스 필드 (EVEX 바이트 2, 비트 [2]-U) ― EVEX.U = 0이면, 이것은 클래스 A 또는 EVEX.U0을 나타낸다; EVEX.U = 1이면, 이것은 클래스 B 또는 EVEX.U1을 나타낸다.
프레픽스 인코딩 필드(1225)(EVEX 바이트 2, 비트 [1:0]-pp) ― 베이스 연산 필드에 대해 추가 비트들을 제공함. EVEX 프레픽스 포맷의 레거시 SSE 명령에 대한 지원을 제공하기 위하여, 이것은 또한 SIMD 프레픽스 컴팩트화의 혜택을 가진다(SIMD 프레픽스를 표현하기 위해 바이트를 요구하는 것이 아니라, EVEX 프레픽스는 2비트만을 요구한다). 한 실시예에서, 레거시 포맷 및 EVEX 프레픽스 포맷 양쪽 모두의 SIMD 프레픽스(66H, F2H, F3H)를 이용하는 레거시 SSE 명령어를 지원하기 위해, 이들 레거시 SIMD 프레픽스는 SIMD 프레픽스 인코딩 필드로 인코딩된다; 그리고, 런타임시에 디코더의 PLA에 제공되기 이전에 레거시 SIMD 프레픽스로 확장(expand)된다(따라서, PLA는 수정 없이 이들 레거시 명령어들의 레거시 및 EVEX 포맷 양쪽 모두를 실행할 수 있다). 더 최근의 명령어들은 연산코드 확장으로서 직접 EVEX 프레픽스 인코딩 필드의 내용을 이용할 수 있지만, 소정 실시예는 일관성을 위해 유사한 방식으로 확장하지만 이들 레거시 SIMD 프레픽스들에 의해 상이한 의미들이 명시되는 것을 허용한다. 대안적 실시예는 2비트 SIMD 프레픽스 인코딩을 지원하도록 PLA를 재설계할 수도 있으므로, 확장을 요구하지 않는다.
알파 필드(1152)(EVEX 바이트 3, 비트 [7] ― EH; EVEX.EH, EVEX.rs, EVEX.RL, EVEX.기입 마스크 제어, 및 EVEX.N이라고도 알려짐; 또한 α로 예시됨) - 앞서 설명된 바와 같이, 이 필드는 컨텍스트 특유이다. 나중에 추가의 설명이 제공된다.
베타 필드(1154)(EVEX 바이트 3, 비트 [6:4] ― SSS, EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB라고도 알려짐; 또한
Figure 112016104770112-pat00002
로 예시됨) - 앞서 설명된 바와 같이, 이 필드는 컨텍스트 특유이다. 나중에 추가의 설명이 제공된다.
REX' 필드(1210) ― 이것은 REX' 필드의 나머지이고, 확장된 32 레지스터 세트의 상위 16 또는 하위 16 중 어느 한쪽을 인코딩하는데 이용될 수 있는 EVEX.V' 비트 필드(EVEX 바이트 3, 비트 [3] - V')이다. 이 비트는 비트 반전된 포맷으로 저장된다. 값 1은 하위 16개 레지스터를 인코딩하는데 이용된다. 즉, V'VVVV는 EVEX.V', EVEX.vvvv를 결합함으로써 형성된다.
기입 마스크 필드(1170)(EVEX 바이트 3, 비트 [2:0]-kkk) ― 그 내용은 앞서 설명된 바와 같이 기입 마스크 레지스터들에서 레지스터의 인덱스를 명시한다. 본 발명의 한 실시예에서, 특정의 값 EVEX.kkk=000은 어떠한 기입 마스크도 특정 명령에 이용되지 않다는 것을 암시하는 특별한 작용을 가진다(이것은 마스킹 하드웨어를 바이패스하는 하드웨어 또는 모든 것들에 하드와이어링된 기입 마스크의 이용을 포함한 다양한 방식으로 구현될 수 있다).
리얼 연산코드 필드(1230)(바이트 4)
이것은 연산코드 바이트라고도 알려져 있다. 연산코드의 일부가 이 필드에 명시된다.
MOD R/M 필드(1240)(바이트 5)
수식자 필드(1146)(MODR/M.MOD, 비트 [7-6] ― MOD 필드(1242)) - 앞서 설명된 바와 같이, MOD 필드(1242)의 내용은 메모리 액세스와 비 메모리 액세스 간을 구분한다. 이 필드는 이후에 더 설명될 것이다.
MODR/M.reg 필드(1244), 비트 [5-3] ― ModR/M.reg 필드의 역할은 2가지 상황으로 요약될 수 있다: ModR/M.reg는 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 하나를 인코딩하거나, ModR/M.reg는 연산코드 확장으로서 취급되고 어떠한 명령어 피연산자를 인코딩하는데에도 이용되지 않는다.
MODR/M.r/m 필드(1246), 비트 [2-0] ― MODR/M.r/m 필드의 역할은 다음과 같은 것을 포함할 수 있다: ModR/M.r/m은 메모리 주소를 참조하는 명령어 피연산자를 인코딩하거나, ModR/M.r/m은 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 하나를 인코딩한다.
스케일, 인덱스, 베이스 (SIB) 바이트(바이트 6)
스케일 필드(1160) (SIB.SS, 비트 [7-6] ― 앞서 설명된 바와 같이, 스케일 필드(1160)의 내용은 메모리 주소 생성에 이용된다. 이 필드는 이후에 더 설명될 것이다.
SIB.xxx(1254)(비트 [5-3] 및 SIB.bbb(1256)(비트 [2-0]) ― 이들 필드들의 내용은 레지스터 인덱스들 Xxxx 및 Bbbb에 관하여 앞서 언급되었다.
변위 바이트(들)(바이트 7 또는 바이트 7-10)
변위 필드(1162A)(바이트 7-10) ― MOD 필드(1242)가 10을 포함할 때, 바이트들(7-10)은 변위 필드(1162A)이고, 레거시 32-비트 변위(disp32)와 동일하게 작용하며 바이트 입도에서 작용한다.
변위 인자 필드(1162B)(바이트 7) ― MOD 필드(1242)가 01을 포함할 때, 바이트 7은 변위 계수 필드(1162B)이다. 이 필드의 위치는, 바이트 입도에서 작용하는 레거시 x86 명령어 세트 8-비트 변위(disp8)의 위치와 동일하다. disp8은 부호 확장되므로, -128과 127 바이트 오프셋 사이만을 어드레싱할 수 있다; 64 바이트 캐시 라인에 관하여, disp8은 단 4개의 실제로 유용한 값들 -128, -64, 0 및 64로 설정될 수 있는 8 비트를 이용한다; 더 큰 범위가 종종 필요하므로, disp32가 이용된다; 그러나, disp32는 4 바이트를 요구한다. disp8 및 disp32와 대조적으로, 변위 계수 필드(1162B)는 disp8의 재해석이다; 변위 계수 필드(1162B)를 이용할 때, 실제의 변위는 메모리 피연산자 액세스의 크기(N)와 곱해진 변위 계수 필드의 내용에 의해 결정된다. 이러한 타입의 변위를 disp8*N이라 부른다. 이것은 평균 명령어 길이(변위에 이용되지만 훨씬 큰 거리를 갖는 싱글 바이트)를 줄인다. 이러한 압축된 변위는, 유효 변위가 메모리 액세스의 입도의 배수라는 가정에 기초하므로, 주소 오프셋의 리던던트 저차수 비트들은 인코딩될 필요가 없다. 즉, 변위 계수 필드(1162B)는 레거시 x86 명령어 세트 8-비트 변위를 대체한다. 따라서, 변위 계수 필드(1162B)는, disp8이 disp8*N으로 오버로딩된다는 점만을 제외하고는 x86 명령어 세트 8-비트 변위와 동일한 방식으로 인코딩된다(따라서 ModRM/SIB 인코딩 규칙에서 변경은 없다). 즉, 인코딩 규칙이나 인코딩 길이에서의 변경은 없고 (바이트별 주소 오프셋을 얻기 위해 변위를 메모리 피연산자의 크기로 스케일링할 필요가 있는) 하드웨어에 의한 변위값의 해석에서만 변경이 있다.
즉석값
즉석값 필드(1172)는 앞서 설명된 바와 같이 동작한다.
예시적인 레지스터 아키텍처 ― 도 13
도 13은 본 발명의 한 실시예에 따른 레지스터 아키텍처(1300)의 블록도이다. 레지스터 아키텍처의 레지스터 파일들 및 레지스터들이 아래에 열거된다:
벡터 레지스터 파일(1310) - 예시된 실시예에서, 1312 비트 폭의 32개 벡터 레지스터들이 있다; 이들 레지스터들은 zmm0 내지 zmm31로서 참조된다. 하위 16개 zmm 레지스터들의 저차수(1156) 비트들은 레지스터 ymm0-16 상에 오버레이된다. 하위 16개 zmm 레지스터들의 저차수 128개 비트들(ymm 레지스터들의 저차수 128개 비트들)은 레지스터 xmm0-15 상에 오버레이된다. 특정의 친벡터 명령어 포맷(1200)은 아래의 표에 나타낸 바와 같이 이들 오버레이된 레지스터 파일에 작용한다.
Figure 112016104770112-pat00003
즉, 벡터 길이 필드(1159B)는 최대 길이와 하나 이상의 다른 더 짧은 길이들 사이에서 선택하며, 여기서 각각의 이러한 더 짧은 길이는 선행 길이의 절반 길이이다; 그리고, 벡터 길이 필드(1159B)가 없는 명령어 템플릿은 최대 벡터 길이에 작용한다. 또한, 한 실시예에서, 특정의 친벡터 명령어 포맷(1200)의 클래스 B 명령어 템플릿은 패킹된 또는 스칼라의 단정도/배정도 부동 소수점 데이터와 패킹된 또는 스칼라의 정수 데이터에 작용한다. 스칼라 연산은 zmm/ymm/xmm 레지스터의 최저 차수 데이터 요소 위치에 관해 수행되는 연산이다; 더 높은 차수 데이터 요소 위치들은 실시예에 따라 명령 이전의 그 위치들로 남겨지거나 제로화된다.
기입 마스크 레지스터(1315) ― 도시된 실시예에서, 8개의 기입 마스크 레지스터(k0 내지 k7)가 있고, 각각은 크기가 64 비트이다. 앞서 설명된 바와 같이, 본 발명의 한 실시예에서, 벡터 마스크 레지스터 k0은 기입 마스크로서 이용될 수 없다; 기입 마스크에 대해 통상 k0을 나타내는 인코딩이 이용될 때, 이것은 하드와이어드 기입 마스크 0xFFFF를 선택하여, 그 명령에 대한 기입 마스크를 디스에이블한다.
멀티미디어 확장 제어 상태 레지스터(MXCSR)(1320) ― 도시된 실시예에서, 이 32-비트 레지스터는 부동 소수점 연산에 이용되는 상태와 제어 비트를 제공한다.
범용 레지스터(1325) ― 도시된 실시예에서, 메모리 피연산자를 어드레싱하기 위해 기존의 x86 어드레싱 모드와 함께 이용되는 16개의 64-비트 범용 레지스터가 있다. 이들 레지스터들은 명칭들 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15로 참조된다.
확장된 플래그(EFLAGS) 레지스터(1330) ― 도시된 실시예에서, 이 32-비트 레지스터는 많은 명령어들의 결과를 기록하는데 이용된다.
부동 소수점 제어 워드(FCW; Floating Point Control Word) 레지스터(1335) 및 부동 소수점 상태 워드(FSW; Floating Point Status Word) 레지스터(1340) ― 도시된 실시예에서, 이들 레지스터들은 x87 명령어 세트 확장판에 의해 FCW의 경우에는 라운딩 모드, 예외 마스크 및 플래그를 설정하기 위해, FSW의 경우에는 예외를 추적하기 위해 이용된다.
MMX 패킹된 정수 플랫 레지스터 파일(1350; MMX packed integer flat register file)이 에일리어싱되어 있는 스칼라 부동 소수점 스택 레지스터 파일(x87 스택)(1345) ― 도시된 실시예에서, x87 스택은 x87 명령어 세트 확장판을 이용하여 32/64/80-비트 부동 소수점 데이터에 대해 스칼라 부동 소수점 연산을 수행하는데 이용되는 8-요소 스택이다; 반면, MMX 레지스터는 64-비트 패킹된 정수 데이터에 관해 연산을 수행하는데 이용될 뿐만 아니라 MMX와 XMM 레지스터들 사이에서 수행되는 일부 연산들에 대한 피연산자를 보유하는데 이용된다.
세그먼트 레지스터(1355) ― 도시된 실시예에서, 세그먼트화된 주소 생성에 이용되는 데이터를 저장하는데 이용되는 6개의 16비트 레지스터가 있다.
RIP 레지스터(1365) ― 도시된 실시예에서, 이 64 비트 레지스터는 명령어 포인터를 저장한다.
본 발명의 대안적 실시예는 더 넓거나 더 좁은 레지스터를 이용할 수도 있다. 추가로, 본 발명의 대안적 실시예는 더 많거나, 더 적거나, 또는 상이한 레지스터 파일들과 레지스터들을 이용할 수도 있다.
예시적 순차 프로세서 아키텍처(In-Order Processor Architecture) ― 도 14a 및 도 14b
도 14a 및 도 14b는 예시적인 순차 프로세서 아키텍처의 블록도를 나타낸다. 이들 예시적인 실시예들은 와이드 벡터(wide vector) 프로세서(VPU)로 증강된 순차 CPU 코어의 복수 인스턴스화에 관해 설계된 것이다. 코어들은, e16t 애플리케이션에 따라, 몇 가지 고정된 함수 로직, 메모리 I/O 인터페이스, 및 기타의 필요한 I/O 로직을 갖는 높은-대역폭의 상호접속 네트워크를 통해 통신한다. 예를 들어, 단독형 GPU로서의 이 실시예의 구현은 통상 PCIe 버스를 포함할 것이다.
도 14a는 본 발명의 실시예에 따른, 온-다이 상호접속 네트워크(1402)로의 그 접속 및 레벨 2(L2) 캐시(1404)의 그 국지적 서브셋과 함께, 단일 CPU 코어의 블록도이다. 명령어 디코더(1400)는 특정 벡터 명령어 포맷(1200)을 포함한 확장된 x86 명령어 세트를 지원한다. 본 발명의 한 실시예에서는 (설계를 단순화하기 위해) 스칼라 유닛(1408) 및 벡터 유닛(1410)이 별개의 레지스터 세트(각각, 스칼라 레지스터(1412) 및 벡터 레지스터(1414))를 이용하고 이들 간에 전송된 데이터는 메모리에 기입된 다음 레벨 1(L1) 캐시(1406)로부터 되판독되지만, 본 발명의 대안적 실시예는 상이한 접근법을 이용할 수 있다(예를 들어, 단일 레지스터 세트를 이용하거나, 기입되거나 되판독되지 않고 2개의 레지스터 파일들 사이에서 데이터가 전송되는 것을 허용하는 통신 경로를 포함).
L1 캐시(1406)는 스칼라 및 벡터 유닛들로의 캐시 메모리에 대한 낮은-레이턴시 액세스를 허용한다. 친벡터 명령어 포맷의 op-로딩 명령어와 함께, 이것은 L1 캐시(1406)는 어느 정도 확장된 레지스터 파일처럼 취급될 수 있다는 것을 의미한다. 이것은, 특히 에빅션 힌트 필드(1152B)와 더불어, 많은 알고리즘의 성능을 상당히 향상시킨다.
국지적 L2 캐시 서브셋(1404)은 CPU 코어당 하나씩 별개의 국지적 서브셋들로 분할되는 전역적 L2 캐시의 일부이다. 각 CPU는 그 자신의 국지적 L2 캐시 서브셋(1404)으로의 직접적인 액세스 경로를 가진다. CPU 코어에 의해 판독된 데이터는 그 L2 캐시 서브셋(1404)에 저장되고, 다른 CPU들이 그들 자신의 국지적 L2 캐시 서브셋에 액세스하는 것과 병렬로 신속하게 액세스될 수 있다. CPU 코어에 의해 기입된 데이터는 그 자신의 L2 캐시 서브셋(1404)에 저장되고, 필요하다면 다른 서브셋들로부터 플러시(flush)된다. 링 네트워크는 공유된 데이터에 대한 일관성(coherency)을 보장한다.
도 14b는 본 발명의 실시예에 따른 도 14a의 CPU 코어의 일부의 확대도이다. 도 14b는, L1 캐시(1404)의 L1 데이터 캐시(1406A) 부분뿐만 아니라, 벡터 유닛(1410) 및 벡터 레지스터(1414)에 관한 더 많은 세부사항을 포함한다. 구체적으로는, 벡터 유닛(1410)은, 정수, 단정도 부동 소수, 배정도 부동 소수 명령어들을 실행하는, 16-폭 벡터 처리 유닛(VPU)(16-폭 ALU(1428) 참조)이다. VPU는, 스위즐 유닛(1420)을 이용한 레지스터 입력의 스위즐링(swizzling), 수치 컨버전 유닛(1422A-B)을 이용한 수치 컨버전, 및 메모리 입력에 대한 복제 유닛(1424)을 이용한 복제를 지원한다. 기입 마스크 레지스터(1426)는 결과 벡터 기입의 서술(predicating)을 허용한다.
레지스터 데이터는, 예를 들어, 행렬 곱셈을 지원하기 위해, 다양한 방식으로 스위즐링될 수 있다. 메모리로부터의 데이터는 VPU 레인(VPU lane)들에 걸쳐 복제될 수 있다. 이것은 그래픽 및 비-그래픽 병렬 데이터 처리 양쪽 모두에서 공통된 연산으로서, 캐시 효율을 상당히 증가시킨다.
링 네트워크는 양방향이어서 CPU 코어들, L2 캐시들, 및 기타의 로직 블록들과 같은 에이전트들이 칩 내에서 서로 통신하는 것을 허용한다. 각각의 링 데이터-경로는 방향당 1312-비트 폭이다.
예시적인 비순차 아키텍처(Out-of-order Architecture) ―도 15
도 15는 본 발명의 일부 실시예에 따른 예시적 비순차 아키텍처를 나타내는 블록도이다. 구체적으로는, 도 15는, 친벡터 명령어 포맷 및 그 실행을 포함하도록 수정된 공지된 예시적인 비순차 아키텍처를 나타낸다. 도 15에서, 화살표는 2개 이상의 유닛들 간의 결합을 나타내고, 화살표의 방향은 이들 유닛들 간의 데이터 흐름의 방향을 나타낸다. 도 15는, 실행 엔진 유닛(1510) 및 메모리 유닛(1515)에 결합된 프런트 엔드 유닛(1505; front end unit)을 포함한다; 실행 엔진 유닛(1510)은 또한 메모리 유닛(1515)에 결합된다.
프런트 엔드 유닛(1505)은 레벨 2 (L2) 분기 예측 유닛(1522)에 결합된 레벨 1(L1) 분기 예측 유닛(1520)을 포함한다. L1 및 L2 분기 예측 유닛(1520 및 1522)은 L1 명령어 캐시 유닛(1524)에 결합된다. L1 명령어 캐시 유닛(1524)은 명령어 변환 색인 버퍼(TLB; translation lookaside buffer)(1526)에 결합되고, 명령어 변환 색인 버퍼(1526)는 또한 명령어 인출 및 프리디코드 유닛(1528)에 결합된다. 명령어 인출 및 프리디코드 유닛(1528)은 명령어 큐 유닛(1530)에 결합되고, 명령어 큐 유닛(1530)은 또한 디코드 유닛(1532)에 결합된다. 디코드 유닛(1532)은 복합 디코더 유닛(1534)과 3개의 단순 디코더 유닛(1536, 1538, 및 1540)을 포함한다. 디코드 유닛(1532)은 마이크로-코드 ROM 유닛(1542)을 포함한다. 디코드 유닛(1532)은 디코드 스테이지 섹션에서 전술된 바와 같이 동작할 수 있다. L1 명령어 캐시 유닛(1524)은 또한 메모리 유닛(1515) 내의 L2 캐시 유닛(1548)에 결합된다. 명령어 TLB 유닛(1526)은 또한 메모리 유닛(1515) 내의 제2 레벨 TLB 유닛(1546)에 결합된다. 디코드 유닛(1532), 마이크로-코드 ROM 유닛(1542), 및 루프 스트림 검출기 유닛(1544) 각각은 실행 엔진 유닛(1510) 내의 리네임/할당기 유닛(1556)에 결합된다.
실행 엔진 유닛(1510)은, 퇴거 유닛(1574; retirement unit) 및 통합 스케줄러 유닛(1558)에 결합된 리네임/할당기 유닛(1556)을 포함한다. 퇴거 유닛(1574)은 또한 실행 유닛(1560)에 결합되고 재정렬 버퍼 유닛(1578)을 포함한다. 통합 스케줄러 유닛(1558)은 또한, 실행 유닛(1560)에 결합된 물리적 레지스터 파일 유닛(1576)에 결합된다. 물리적 레지스터 파일 유닛(1576)은, 벡터 레지스터 유닛(1577A), 기입 마스크 레지스터 유닛(1577B), 및 스칼라 레지스터 유닛(1577C)을 포함한다; 이들 레지스터 유닛들은, 벡터 레지스터(1310), 벡터 마스크 레지스터(1315), 및 범용 레지스터(1325)를 포함한다; 그리고, 물리적 레지스터 파일 유닛(1576)은 도시되지 않은 추가의 레지스터 파일(예를 들어, MMX 패킹된 정수 플랫 레지스터 파일(1350)에 에일리어싱된 스칼라 부동 소수점 스택 레지스터 파일(1345))을 포함할 수 있다. 실행 유닛(1560)은 3개의 혼합된 스칼라 및 벡터 유닛(1562, 1564 및 1572); 로딩 유닛(1566); 주소 저장 유닛(1568); 데이터 저장 유닛(1570)을 포함한다. 로딩 유닛(1566), 주소 저장 유닛(1568), 및 데이터 저장 유닛(1570) 각각은 또한 메모리 유닛(1515) 내의 데이터 TLB 유닛(1552)에 결합된다.
메모리 유닛(1515)은 데이터 TLB 유닛(1552)에 결합된 제2 레벨 TLB 유닛(1546)을 포함한다. 데이터 TLB 유닛(1552)은 L1 데이터 캐시 유닛(1554)에 결합된다. L1 데이터 캐시 유닛(1554)은 또한 L2 데이터 캐시 유닛(1548)에 결합된다. 일부 실시예에서, L2 캐시 유닛(1548)은 또한, 메모리 유닛(1515)의 내부의 및/또는 외부의 L3 및 그 이상의 캐시 유닛(1550)에 결합된다.
예로서, 예시적인 비순차 아키텍처는 다음과 같이 프로세스 파이프라인을 구현할 수 있다: 1) 명령 인출 및 프리디코드 유닛(1528)은 인출 및 길이 디코딩 스테이지를 수행한다; 2) 디코드 유닛(1532)은 디코드 스테이지를 수행한다; 3) 리네임/할당기 유닛(1556)은 할당 스테이지 및 리네이밍 스테이지를 수행한다; 4) 통합 스케줄러(1558)는 스케줄 스테이지를 수행한다; 5) 물리적 레지스터 파일 유닛(1576), 재정렬 버퍼 유닛(1578) 및 메모리 유닛(1515)은 레지스터 판독/메모리 판독 스테이지를 수행한다; 실행 유닛(1560)은 실행/데이터 변환 스테이지를 수행한다; 6) 메모리 유닛(1515) 및 재정렬 버퍼 유닛(1578)은 되기입/메모리 기입 스테이지를 수행한다; 7) 퇴거 유닛(1574)은 ROB 판독 스테이지를 수행한다; 8) 다양한 유닛들이 예외 처리 스테이지에 관여될 수 있다; 및 9) 퇴거 유닛(1574) 및 물리적 레지스터 파일 유닛(1576)은 커밋(commit) 스테이지를 수행한다.
예시적인 싱글 코어 및 멀티코어 프로세서 ― 도 20
도 20은 본 발명의 실시예에 따른 통합된 메모리 제어기와 그래픽스(graphics)를 갖춘 싱글코어 프로세서 및 멀티코어 프로세서(2000)의 블록도이다. 도 20의 실선 박스는, 싱글 코어(2002A), 시스템 에이전트(2010), 한 세트의 하나 이상의 버스 제어기 유닛(2016)을 갖춘 프로세서(2000)를 나타내는 반면, 선택사항적인 점선 라인 박스의 추가는 다중 코어(2002A-N), 시스템 에이전트 유닛(2010) 내의 한 세트의 하나 이상의 통합된 메모리 제어기 유닛(들)(2014), 및 통합된 그래픽스 로직(2008)을 갖춘 대안적 프로세서(2000)를 나타낸다.
메모리 계층구조는, 코어 내의 하나 이상의 레벨의 캐시, 한 세트 또는 하나 이상의 공유된 캐시 유닛(2006), 및 한 세트의 통합된 메모리 제어기 유닛(2014)에 결합된 외부 메모리(미도시)를 포함한다. 한 세트의 공유된 캐시 유닛(2006)은, 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 기타 레벨의 캐시와 같은, 하나 이상의 중간-레벨 캐시, 마지막 레벨의 캐시(LLC), 및/또는 이들의 조합을 포함할 수 있다. 한 실시예에서 링 기반의 상호접속 유닛(2012)은 통합된 그래픽스 로직(2008), 한 세트의 공유된 캐시 유닛(2006), 및 시스템 에이전트 유닛(2010)을 상호접속하지만, 대안적 실시예는 이러한 유닛들을 상호접속하기 위한 임의 개수의 공지된 기술을 이용할 수도 있다.
일부 실시예에서, 코어들(2002A-N) 중 하나 이상은 멀티-스레딩이 가능하다. 시스템 에이전트(2010)는 코어들(2002A-N)을 조율하고 작동하는 컴포넌트들을 포함한다. 시스템 에이전트 유닛(2010)은 예를 들어 전력 제어 유닛(PCU; power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(2002A-N) 및 통합된 그래픽스 로직(2008)의 전력 상태를 조절하는데 필요한 로직 및 컴포넌트들이거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부적으로 접속된 디스플레이를 구동하기 위한 것이다.
코어(2002A-N)는 아키텍처 및/또는 명령어 세트의 관점에서 동종 또는 이종일 수 있다. 예를 들어, 코어들(2002A-N) 중 일부는 (예를 들어, 도 14a 및 도 14b에 도시된 것과 같은) 순차일 수 있는 반면 다른 것들은 (예를 들어, 도 15에 도시된 것과 같은) 비순차이다. 또 다른 예로서, 코어들(2002A-N) 중 2개 이상은 동일한 명령어 세트를 실행할 수 있는 반면, 다른 것들은 그 명령어 세트의 서브셋만을 실행할 수 있거나 상이한 명령어 세트를 실행할 수 있다. 코어들 중 적어도 하나는 여기서 설명된 친벡터 명령어 포맷을 실행할 수 있다.
프로세서는, 캘리포니아주 산타 클라라에 위치한 인텔사로부터 출시된 Core™ i3, i5, i7, 2 Duo 및 Quad, Xeon™ 또는 Itanium™ 프로세서와 같은 범용 프로세서일 수 있다. 다르게는, 프로세서는 다른 회사로부터 출시된 것일 수 있다. 프로세서는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽스 프로세서, 코-프로세서, 임베디드 프로세서 등과 같은 특별-목적 프로세서일 수도 있다. 프로세서는 하나 이상의 칩 상에 구현될 수도 있다. 프로세서(2000)는 예를 들어 BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세스 기술들 중 임의의 것을 이용하여 하나 이상의 기판들 상에 구현되거나 그 일부일 수도 있다.
예시적인 컴퓨터 시스템 및 프로세서들 - 도 16 내지 도 19
도 16 내지 도 18은 프로세서(2000)를 포함하는데 적합한 예시적 시스템인 반면, 도 19는 코어들(2002) 중 하나 이상을 포함할 수 있는 예시적인 SoC(system on a chip)이다. 랩탑, 데스크탑, 핸드헬드 PC, PDA(personal digital assistants), 엔지니어링 워크스테이션, 서버, 네트워크 장치, 네트워크 허브, 스위치, 임베디드 프로세서, DSP(digital signal processor), 그래픽스 장치, 비디오 게임 장치, 셋탑 박스, 마이크로 제어기, 셀 전화, 휴대 미디어 재생기, 및 다양한 다른 전자 장치를 위한 분야에서 공지된 기타의 시스템 설계 및 구성도 역시 적합하다. 일반적으로, 여기서 개시된 프로세서 및/또는 기타의 실행 로직을 병합할 수 있는 매우 다양한 시스템 또는 전자 장치들이 일반적으로 적합하다.
이제 도 16을 참조하면, 본 발명의 한 실시예에 따른 시스템(1600)의 블록도가 도시되어 있다. 시스템(1600)은 그래픽스 메모리 제어기 허브(GMCH; graphics memory controller hub)(1620)에 결합된 하나 이상의 프로세서(1610, 1615)를 포함할 수 있다. 추가 프로세서(1615)의 선택사항적 성질이 도 16에 점선으로 표시되어 있다.
각 프로세서(1610, 1615)는 소정 버전의 프로세서(2000)일 수 있다. 그러나, 통합된 그래픽스 로직 및 통합된 메모리 제어 유닛이 프로세서(1610, 1615)에 존재할 것 같지 않다는 점에 주목해야 한다.
도 16은, GMCH(1620)가, 예를 들어, 동적 랜덤 액세스 메모리(DRAM)에 결합될 수도 있는 메모리(1640)에 결합될 수 있음을 나타내고 있다. DRAM은, 적어도 한 실시예의 경우, 비휘발성 캐시와 연관될 수 있다.
GMCH(1620)는 칩셋이거나, 칩셋의 일부일 수 있다. GMCH(1620)는 프로세서(들)(1610, 1615)와 통신할 수 있고 프로세서(들)(1610, 1615)와 메모리(1640) 사이의 상호작용을 제어할 수 있다. GMCH(1620)는 또한, 프로세서(들)(1610, 1615)와 기타의 시스템(1600)의 요소들 사이의 가속된 버스 인터페이스로서 역할할 수도 있다. 적어도 한 실시예의 경우, GMCH(1620)는 프론트사이드 버스(FSB; frontside bus)(1695)와 같은 멀티-드롭 버스(multi-drop bus)를 통해 프로세서(들)(1610, 1615)와 통신한다.
또한, GMCH(1620)는 (평판 디스플레이와 같은) 디스플레이(1645)에 결합된다. GMCH(1620)는 통합된 그래픽스 가속기를 포함할 도 있다. GMCH(1620)는 또한, 다양한 주변 장치를 시스템(1600)에 결합하는데 이용될 수 있는 입력/출력(I/O) 제어기 허브(ICH)(1650)에 결합된다. 예를 들어 도 16의 실시예에서는, 또 다른 주변 장치(1670)와 함께 ICH(1650)에 결합된 개별 그래픽스 장치일 수 있는, 외부 그래픽스 장치(1660)가 도시되어 있다.
대안으로서, 추가의 또는 상이한 프로세서가 시스템(1600)에 존재할 수도 있다. 예를 들어, 추가의 프로세서(들)(1615)는, 프로세서(1610)와 동일한 추가 프로세서(들), 프로세서(1610)와 이종이거나 비대칭의 추가 프로세서(들), (예를 들어, 그래픽스 가속기 또는 디지털 신호 처리(DSP) 유닛과 같은) 가속기들, 필드 프로그래머블 게이트 어레이, 또는 기타 임의의 프로세서를 포함할 수 있다. 아키텍처, 마이크로아키텍처, 열적, 전력 소모 특성 등을 포함한 다양한 가치 있는 메트릭에 관하여 물리적 리소스들(1610, 1615) 사이에 다양한 차이점이 존재할 수 있다. 이들 차이점들은, 사실상 처리 요소들(1610, 1615) 간의 비대칭성 및 이종성으로 스스로 드러날 수 있다. 적어도 한 실시예의 경우, 다양한 처리 요소(1610, 1615)가 동일한 다이 패키지에 존재할 수 있다.
이제 도 17을 참조하면, 본 발명의 실시예에 따른 제2 시스템(1700)의 블록도가 도시되어 있다. 도 17에 도시된 바와 같이, 멀티프로세서 시스템(1700)은 포인트-투-포인트 상호접속 시스템이고, 포인트-투-포인트 상호접속(1750)을 통해 결합된 제1 프로세서(1770) 및 제2 프로세서(1780)를 포함한다. 도 17에 도시된 바와 같이, 프로세서(1770 및 1780) 각각은 소정 버전의 프로세서(2000)일 수 있다.
대안으로서, 프로세서(1770, 1780) 중 하나 이상은, 가속기 또는 필드 프로그래머블 게이트 어레이와 같은, 프로세서 이외의 요소일 수 있다.
단 2개의 프로세서(1770, 1780)만이 도시되어 있지만, 본 발명의 범위는 이와 같이 제한되지 않는다는 것을 이해할 것이다. 다른 실시예들에서, 주어진 프로세서에는 하나 이상의 추가 처리 유닛이 존재할 수 있다.
프로세서(1770)는 통합된 메모리 제어기 허브(IMC)(1772) 및 포인트-투-포인트(P-P) 인터페이스(1776 및 1778)를 더 포함할 수 있다. 마찬가지로, 제2 프로세서(1780)는 IMC(1782) 및 P-P 인터페이스(1786 및 1788)를 포함할 수 있다. 프로세서(1770, 1780)는 포인트-투-포인트(PtP) 인터페이스 회로(1778, 1788)를 이용하여 PtP 인터페이스(1750)를 통해 데이터를 교환할 수 있다. 도 17에 도시된 바와 같이, IMC(1772 및 1782)는 프로세서들을, 각각의 프로세서에 국지적으로 부착된 메인 메모리의 일부일 수 있는, 각각의 메모리, 즉, 메모리(1742) 및 메모리(1744)에 결합한다.
프로세서(1770, 1780) 각각은, 포인트 투 포인트 인터페이스 회로(1776, 1794, 1786, 1798)를 이용하여 개개의 P-P 인터페이스(1752, 1754)를 통해 칩셋(1790)과 데이터를 교환할 수 있다. 칩셋(1790)은 또한 고성능 그래픽스 인터페이스(1739)를 통해 고성능 그래픽스 회로(1738)와 데이터를 교환할 수도 있다.
어느 한 프로세서에는 양쪽 프로세서의 외부에 있지만 P-P 상호접속을 통해 프로세서들과 여전히 접속된 공유 캐시(미도시)가 포함되어, 프로세서가 저전력 모드에 놓이는 경우 어느 한쪽 또는 양쪽 모두의 프로세서의 국지적 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(1790)은 인터페이스(1796)를 통해 제1 버스(1716)에 결합될 수 있다. 한 실시예에서, 제1 버스(1716)는 PCI(Peripheral Component Interconnect) 버스이거나, PCI Express 버스 또는 또 다른 제3 세대 I/O 상호접속 버스와 같은 버스일 수 있지만, 본 발명의 범위는 이와 같이 제한되지 않는다.
도 17에 도시된 바와 같이, 다양한 I/O 장치(1714)가, 제1 버스(1716)를 제2 버스(1720)에 결합하는 버스 브릿지(1718)와 함께, 제1 버스(1716)에 결합될 수 있다. 한 실시예에서, 제2 버스(1720)는 LPC(low pin count) 버스일 수도 있다. 예를 들어, 키보드/마우스(1722), 통신 장치(1726), 및 한 실시예에서는 코드(1730)를 포함할 수 있는 디스크 드라이브나 기타의 대용량 저장 장치와 같은 데이터 저장 유닛(1728)을 포함한 다양한 장치들이 제2 버스(1720)에 결합될 수 있다. 또한, 오디오 I/O(1724)가 제2 버스(1720)에 결합될 수 있다. 다른 아키텍처들도 가능하다는 점에 유의한다. 예를 들어, 도 17의 포인트-투-포인트 아키텍처 대신에, 시스템은 멀티-드롭 버스나 기타의 이러한 아키텍처를 구현할 수 있다.
이제 도 18을 참조하면, 본 발명의 실시예에 따른 제3 시스템(1800)의 블록도가 도시되어 있다. 도 17 및 도 18의 유사한 요소들은 유사한 참조 번호를 가지며, 도 17의 소정 양태들은 도 18의 다른 양태들을 모호하게 하는 것을 피하기 위해 도 18에서 생략되었다.
도 18은, 처리 시스템(1770, 1780)이, 통합된 메모리 및 I/O 제어 로직("CL")(1772 및 1782)을 각각 포함할 수 있다는 것을 나타내고 있다. 적어도 한 실시예의 경우, CL(1772, 1782)은 도 19 및 도 17과 관련하여 전술된 것과 같은 메모리 제어기 허브 로직(IMC)을 포함할 수 있다. 또한, CL(1772, 1782)은 I/O 제어 로직을 역시 포함할 수 있다. 도 18은, 제어 로직(CL)(1772, 1782)에 메모리(1742, 1744)가 결합되어 있을 뿐만 아니라 I/O 장치(1814)도 제어 로직(CL)(1772, 1782)에 결합되어 있는 것을 나타내고 있다. 레거시 I/O 장치(1815)는 칩셋(1790)에 결합된다.
이제 도 19를 참조하면, 본 발명의 실시예에 따른 SoC(1900)의 블록도가 도시되어 있다. 도 19의 유사한 요소들은 유사한 참조 번호를 갖고 있다. 또한, 점선 박스는 더욱 진보된 SoC들 상의 선택사항적 특징들이다. 도 19에서, 상호접속 유닛(들)(1902)은: 한 세트의 하나 이상의 코어(2002A-N)와 공유 캐시 유닛(들)(2006)을 포함하는 애플리케이션 프로세서(1910); 시스템 에이전트 유닛(2010); 버스 제어기 유닛(들)(2016); 통합된 메모리 제어기 유닛(들)(2014); 통합된 그래픽스 로직(2008), 정지영상 및/또는 비디오 카메라 기능을 제공하기 위한 영상 프로세서(1924), 하드웨어 오디오 가속을 제공하기 위한 오디오 프로세서(1926), 및 비디오 인코드/디코드 가속을 제공하기 위한 비디오 프로세서(1928)를 포함할 수 있는 한 세트의 또는 하나 이상의 미디어 프로세서(1920); 정적 랜덤 액세스 메모리(SRAM) 유닛(1930); 직접 메모리 액세스(DMA; direct memory access) 유닛(1932); 및 하나 이상의 외부 디스플레이에 결합하기 위한 디스플레이 유닛(1940)에 결합된다.
여기서 개시된 메커니즘의 실시예는, 하드웨어, 소프트웨어, 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예는, 적어도 하나의 프로세서, (휘발성 및 비휘발성 메모리 및/또는 저장 요소를 포함한) 저장 시스템, 적어도 하나의 입력 장치, 및 적어도 하나의 출력 장치를 포함하는 프로그래머블 시스템에서 실행하는 컴퓨터 프로그램 또는 프로그램 코드로서 구현될 수도 있다.
프로그램 코드는 여기서 설명된 기능을 수행하고 출력 정보를 생성하기 위해 입력 데이터에 적용될 수 있다. 출력 정보는, 공지된 방식으로 하나 이상의 출력 장치에 적용될 수 있다. 이 애플리케이션의 목적을 위해, 처리 시스템은, 예를 들어: 디지털 신호 처리기(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진 번역을 이용한) 번역, 모핑, 에뮬레이팅, 또는 코어에 의해 처리될 하나 이상의 다른 명령어로 변환할 수 있다. 명령어 컨버터는 소프트웨어, 하드웨어, 펌웨어, 또는 그 조합으로 구현될 수 있다. 명령어 컨버터는, 프로세서 상에, 프로세서와 별도로, 또는 부분적으로 프로세서에 및 부분적으로 프로세서와 별도로 존재할 수 있다.
도 21은 본 발명의 실시예에 따른 소스 명령어 세트의 2진 명령어를 타겟 명령어 세트의 2진 명령어로 변환하는 소프트웨어 명령어 컨버터의 이용을 대비하는 블록도이다. 예시된 실시예에서, 명령어 컨버터는 소프트 명령어 컨버터이지만, 대안으로서, 명령어 컨버터는 소프트웨어, 펌웨어, 하드웨어, 또는 그 다양한 조합으로 구현될 수 있다. 도 21은, 고수준 언어(2102)로 된 프로그램이 x86 컴파일러(2104)를 이용하여 컴파일되어 적어도 하나의 x86 명령어 세트 코어(2116)를 갖는 프로세서에 의해 자연스럽게 실행될 수 있는 x86 2진 코드(2106)를 생성할 수 있다는 것을 도시하고 있다(컴파일된 명령어들 중 일부는 친벡터 명령어 포맷인 것으로 가정됨). 적어도 하나의 x86 명령어 세트 코어(2116)를 갖는 프로세서는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 달성하기 위하여, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당한 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서에서 실행하는 것을 목표로 한 애플리케이션 또는 기타의 소프트웨어의 오브젝트 코드 버전을 호환가능하게 실행하거나 기타의 방식으로 처리함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(2104)는, 추가 연계 처리(linkage processing)를 수반하거나 수반하지 않고, 적어도 하나의 x86 명령어 세트 코어(2116)를 갖는 프로세서에서 실행될 수 있는 x86 2진 코드(2106)(예를 들어, 오브젝트 코드)를 생성하도록 동작할 수 있는 컴파일러를 나타낸다.
마찬가지로, 도 21은, 고수준 언어(2102)로 된 프로그램이 대안적 명령어 세트 컴파일러(2108)를 이용하여 컴파일되어 적어도 하나의 x86 명령어 세트 코어(2114)가 없는 프로세서(예를 들어, CA, Sunnyvale의 MIPS Technologies의 MIPS 명령어 세트를 실행하거나 및/또는 CA, Sunnyvale의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어를 갖춘 프로세서)에 의해 자연스럽게 실행될 수 있는 대안적 명령어 세트 2진 코드(2110)를 생성할 수 있다. 명령어 컨버터(2112)는, x86 2진 코드(2106)를, x86 명령어 세트 코어(2114)가 없는 프로세서에 의해 자연스럽게 실행될 수 있는 코드로 변환하는데 이용된다. 이 변환된 코드는 대안적 명령어 세트 2진 코드(2110)와 동일할 것 같지 않은데, 그 이유는 이것이 가능한 명령어 컨버터를 만들기 어렵기 때문이다; 그러나, 변환된 코드는 일반적 동작을 달성할 것이고 대안적 명령어 세트로부터의 명령어들로 이루어질 것이다. 따라서, 명령어 컨버터(2112)는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타내며, 에뮬레이션, 시뮬레이션 또는 기타 임의의 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서나 기타의 전자 장치가 x86 2진 코드(2106)를 실행하는 것을 허용한다.
여기서 개시된 벡터 명령어 포맷의 명령어(들)의 소정 연산들은 하드웨어 컴포넌트에 의해 수행될 수 있고, 명령어들로 프로그램된 회로나 기타의 하드웨어 컴포넌트가 연산을 수행하게 하거나 적어도 그러한 결과를 야기하는데 이용되는 머신-실행가능한 명령어들로 구현될 수 있다. 회로는, 몇 가지 예로서, 범용 또는 특별 목적 프로세서, 또는 로직 회로를 포함할 수 있다. 연산은 또한 선택사항으로서 하드웨어와 소프트웨어의 조합에 의해 수행될 수도 있다. 실행 로직 및/또는 프로세서는, 머신 명령어 또는 머신 명령어로부터 유도된 하나 이상의 제어 신호에 응답하여 명령어에 의해 명시된 결과 피연산자를 저장하는 특정의 또는 특정한 회로나 기타의 회로를 포함할 수 있다. 예를 들어, 여기서 설명된 명령어(들)의 구현예는 도 16 내지 도 19의 하나 이상의 시스템에서 실행될 수 있고, 친벡터 명령어 포맷의 명령어(들)의 실시예들이 시스템에서 실행될 프로그램 코드에 저장될 수 있다. 추가로, 이들 도면들의 처리 요소들은 여기서 상세히 설명된 파이프라인 및/또는 아키텍처들(예를 들어, 순차 및 비순차 아키텍처) 중 하나를 이용할 수 있다. 예를 들어, 순차 아키텍처의 디코드 유닛은 명령어(들)를 디코딩하고, 디코딩된 명령어를 벡터 또는 스칼라 유닛에 전달할 수 있고, 등등이다.
상기의 설명은 본 발명의 바람직한 실시예들을 예시하기 위함이다. 상기 논의로부터, 성장이 빠르고 추가의 진보가 쉽게 예상되지 않는 특히 이러한 기술 분야에서, 첨부된 청구항들 및 그 등가물들의 범위 내에서 본 발명의 원리로부터 벗어나지 않고 당업자에 의해 배치와 세부사항에 있어서 본 발명이 수정될 수 있다는 것도 역시 명백할 것이다. 예를 들어, 방법의 하나 이상의 동작들은 결합되거나 추가로 더 분할될 수 있다.
대안적 실시예
친벡터 명령어 포맷을 자연스럽게 실행하는 실시예들이 설명되었지만, 본 발명의 대안적 실시예들은 상이한 명령어 세트를 실행하는 프로세스(예를 들어, CA, Sunnyvale의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 프로세서 및/또는 CA, Sunnyvale의 ARM Holdings의 ARM 명령어 세트를 실행하는 프로세서)에서 실행되는 에뮬레이션 층을 통해 친벡터 명령어 포맷을 실행할 수도 있다. 또한, 도면들 내의 흐름도는 본 발명의 소정 실시예들에 의해 수행되는 동작들의 특정한 순서를 보여주지만, 이와 같은 순서는 예시적인 것임을 이해하여야 한다(예를 들어, 대안적 실시예들은 상이한 순서로 그 동작들을 수행하거나, 소정 동작들을 결합하거나, 소정 동작들을 중복하거나 등을 할 수 있다).
상기의 설명에서, 설명의 목적을 위해, 본 발명의 실시예들의 철저한 이해를 제공하기 위하여 수많은 구체적인 세부사항이 개시되었다. 그러나, 이들 구체적인 세부사항들 중 일부가 없이도 하나 이상의 다른 실시예들이 실시될 수 있다는 것은 당업자에게 명백할 것이다. 설명된 특정한 실시예들은 본 발명을 제한하기 위함이 아니라 본 발명의 실시예들을 예시하기 위해 제공된 것이다. 본 발명의 범위는 상기에서 제공된 구체적인 예에 의해 결정되는 것이 아니라 이하의 청구항들에 의해서만 결정되어야 한다.

Claims (21)

  1. 컴퓨터 프로세서에서 압축 명령어(compression instruction)를 수행하는 방법으로서,
    상기 압축 명령어를 인출(fetch)하는 단계 ― 상기 압축 명령어는 연산코드(opcode), 프레픽스, 목적지 피연산자, 소스 피연산자, 및 기입 마스크 피연산자를 포함함 ―;
    상기 인출된 압축 명령어를 디코딩하는 단계;
    상기 기입 마스크 피연산자의 값들에 기초하여 상기 소스 피연산자로부터의 어떤 데이터 요소들이 상기 목적지 피연산자에 저장될 것인지를 선택하기 위해 상기 디코딩된 압축 명령어를 실행하는 단계; 및
    상기 소스 피연산자의 상기 선택된 데이터 요소들을 상기 목적지 피연산자 내에 순차적으로 패킹된 데이터 요소들로서 저장하는 단계 ― 상기 소스 피연산자의 상기 데이터 요소들의 크기는 상기 압축 명령어의 상기 프레픽스의 단일 비트에 의해 정의되고, 상기 실행하는 단계에서 사용되는 상기 기입 마스크 피연산자의 값들의 개수는 상기 소스 피연산자의 데이터 요소 크기에 의해 결정되며, 상기 기입 마스크 피연산자는 복수의 기입 마스크 레지스터 중 하나임 ―
    를 포함하는 방법.
  2. 제1항에 있어서, 상기 목적지 피연산자는 메모리이고 상기 소스 피연산자는 레지스터인 방법.
  3. 제1항에 있어서, 상기 소스 피연산자 및 목적지 피연산자는 레지스터들인 방법.
  4. 제1항에 있어서, 상기 실행하는 단계는,
    상기 기입 마스크 피연산자의 첫 번째 비트 위치 값이, 대응하는 첫 번째 소스 데이터 요소가 상기 목적지 피연산자의 위치 내에 저장되어야 함을 나타낸다고 결정하는 단계; 및
    상기 대응하는 첫 번째 소스 데이터 요소를 상기 목적지 피연산자의 상기 위치 내에 저장하는 단계
    를 더 포함하는 방법.
  5. 제1항에 있어서, 상기 실행하는 단계는,
    상기 기입 마스크 피연산자의 첫 번째 비트 위치 값이, 대응하는 첫 번째 소스 데이터 요소가 상기 목적지 피연산자의 위치 내에 저장되지 않아야 함을 나타낸다고 결정하는 단계; 및
    상기 첫 번째 소스 데이터 요소를 상기 목적지 피연산자의 위치 내에 저장하지 않고 상기 기입 마스크 피연산자의 두 번째 비트 위치 값을 평가하는 단계
    를 더 포함하는 방법.
  6. 제1항에 있어서, 상기 목적지 피연산자 내에 저장될 각각의 소스 데이터 요소는 먼저 스트림 내에 놓이고 상기 스트림이 상기 목적지 피연산자 내에 저장되는 방법.
  7. 제1항에 있어서, 상기 목적지 피연산자 내에 저장될 데이터 요소들을 상기 목적지 피연산자 내에 저장하기 이전에 다운컨버팅(downconverting)하는 단계를 더 포함하는 방법.
  8. 컴퓨터 프로세서에서 확장 명령어(expand instruction)를 수행하는 방법으로서,
    상기 확장 명령어를 인출하는 단계 ― 상기 확장 명령어는 연산코드, 프레픽스, 목적지 피연산자, 소스 피연산자, 및 기입 마스크 피연산자를 포함함 ― ;
    상기 인출된 확장 명령어를 디코딩하는 단계;
    상기 기입 마스크 피연산자의 값들에 기초하여 상기 소스 피연산자로부터의 어떤 요소들이 상기 목적지 피연산자에 드문드문 저장될 것인지를 선택하기 위해 상기 디코딩된 확장 명령어를 실행하는 단계; 및
    상기 소스 피연산자의 각각의 선택된 데이터 요소를 상기 목적지 피연산자의 목적지 위치 내에 드문드문한 데이터 요소로서 저장하는 단계 ― 상기 목적지 위치는 상기 소스 피연산자의 대응하는 데이터 요소가 저장될 것임을 나타내는 각각의 기입 마스크 피연산자 비트 위치에 대응하고, 상기 소스 피연산자의 데이터 요소들의 크기는 상기 확장 명령어의 상기 프레픽스의 단일 비트에 의해 정의되며, 상기 실행하는 단계에서 사용되는 상기 기입 마스크 피연산자의 값들의 개수는 상기 소스 피연산자의 데이터 요소 크기에 의해 결정되고, 상기 기입 마스크 피연산자는 복수의 기입 마스크 레지스터 중 하나임 ―
    를 포함하는 방법.
  9. 제8항에 있어서, 상기 목적지 피연산자는 레지스터이고 상기 소스 피연산자는 메모리인 방법.
  10. 제8항에 있어서, 상기 소스 피연산자 및 목적지 피연산자는 레지스터들인 방법.
  11. 제8항에 있어서, 상기 실행하는 단계는,
    상기 기입 마스크 피연산자의 첫 번째 비트 위치 값이, 대응하는 첫 번째 소스 데이터 요소가 상기 목적지 피연산자의 대응하는 위치 내에 저장되어야 함을 나타낸다고 결정하는 단계; 및
    상기 대응하는 첫 번째 소스 데이터 요소를 상기 목적지 피연산자의 상기 대응하는 위치 내에 저장하는 단계
    를 더 포함하는 방법.
  12. 제8항에 있어서, 상기 실행하는 단계는,
    상기 기입 마스크 피연산자의 첫 번째 비트 위치 값이, 대응하는 첫 번째 소스 데이터 요소가 상기 목적지 피연산자의 대응하는 위치 내에 저장되지 않아야 함을 나타낸다고 결정하는 단계; 및
    상기 첫 번째 소스 데이터 요소를 상기 목적지 피연산자의 대응하는 위치 내에 저장하지 않고 상기 기입 마스크 피연산자의 두 번째 비트 위치 값을 평가하는 단계
    를 더 포함하는 방법.
  13. 제8항에 있어서, 상기 목적지 피연산자 내에 저장될 각각의 소스 데이터 요소는 먼저 스트림 내에 놓이고 상기 스트림이 상기 목적지 피연산자 내에 저장되는 방법.
  14. 제8항에 있어서, 상기 목적지 피연산자 내에 저장될 데이터 요소들을 상기 목적지 내에 저장하기 이전에 업컨버팅(upconverting)하는 단계를 더 포함하는 방법.
  15. 제14항에 있어서, 상기 데이터 요소들은 16-비트 값으로부터 32-비트 값으로 업컨버팅되는 방법.
  16. 명령어들을 실행하기 위한 장치로서,
    확장 명령어 및/또는 압축 명령어를 디코딩하는 하드웨어 디코더 ― 상기 확장 명령어는 제1 기입 마스크 피연산자, 제1 목적지 피연산자, 제1 소스 피연산자, 제1 연산코드 및 제1 프레픽스를 포함하고, 상기 압축 명령어는 제2 기입 마스크 피연산자, 제2 목적지 피연산자, 제2 소스 피연산자, 제2 연산코드 및 제2 프레픽스를 포함함 ―; 및
    상기 제1 기입 마스크 피연산자의 값들에 기초하여 상기 제1 소스 피연산자로부터의 어떤 요소들이 상기 제1 목적지 피연산자에 드문드문 저장될 것인지를 선택하고 상기 제1 소스 피연산자의 각각의 선택된 데이터 요소를 상기 제1 목적지 피연산자의 목적지 위치 ― 상기 목적지 위치는 상기 제1 소스 피연산자의 대응하는 데이터 요소가 저장될 것임을 나타내는 각각의 제1 기입 마스크 피연산자 비트 위치에 대응함 ― 내에 드문드문한 데이터 요소로서 저장하기 위해 디코딩된 확장 명령어를 실행하고,
    상기 제2 기입 마스크 피연산자의 값들에 기초하여 상기 제2 소스 피연산자로부터의 어떤 데이터 요소들이 상기 제2 목적지 피연산자에 저장될 것인지를 선택하고 상기 제2 소스 피연산자의 선택된 데이터 요소들을 상기 제2 목적지 피연산자 내에 순차적으로 패킹된 데이터 요소들로서 저장하기 위해 디코딩된 압축 명령어를 실행하는
    실행 로직 ― 상기 제1 소스 피연산자의 데이터 요소들의 크기는 상기 확장 명령어의 상기 제1 프레픽스에 의해 정의되고 상기 제2 소스 피연산자의 데이터 요소들의 크기는 상기 압축 명령어의 상기 제2 프레픽스에 의해 정의되며, 상기 실행 로직에 의해 사용되는 상기 제1 기입 마스크 피연산자 및 제2 기입 마스크 피연산자의 값들의 개수는 각각 상기 제1 소스 피연산자 및 제2 소스 피연산자의 데이터 요소 크기에 의해 결정되고, 상기 제1 기입 마스크 피연산자 및 제2 기입 마스크 피연산자는 각각 복수의 기입 마스크 레지스터 중 하나임 ― 을 포함하는 장치.
  17. 제16항에 있어서,
    상기 제1 또는 제2 기입 마스크 피연산자를 저장하는 16-비트 기입 마스크 레지스터; 및
    상기 선택된 데이터 요소들을 저장하는 제1 512-비트 레지스터를 더 포함하는 장치.
  18. 제17항에 있어서, 상기 확장 및 압축 명령어에 대한 소스로서의 역할을 하는 제2 512-비트 레지스터를 더 포함하는 장치.
  19. 제16항에 있어서, 상기 데이터 요소들은 확장 명령어의 실행 동안에 16-비트 값으로부터 32-비트 값으로 업컨버팅되는 장치.
  20. 명령어들을 실행하기 위한 장치로서,
    제1 명령어 및/또는 제2 명령어를 디코딩하는 하드웨어 디코더 ― 상기 제1 명령어는 제1 기입 마스크 피연산자, 제1 목적지 피연산자, 제1 소스 피연산자, 제1 연산코드 및 제1 프레픽스를 포함하고, 상기 제2 명령어는 제2 기입 마스크 피연산자, 제2 목적지 피연산자, 제2 소스 피연산자, 제2 연산코드 및 제2 프레픽스를 포함함 ―; 및
    상기 제1 기입 마스크 피연산자의 값들에 기초하여 상기 제1 소스 피연산자로부터의 어떤 요소들이 상기 제1 목적지 피연산자에 드문드문 저장될 것인지를 선택하고 상기 제1 소스 피연산자의 각각의 선택된 데이터 요소를 상기 제1 목적지 피연산자의 목적지 위치 ― 상기 목적지 위치는 상기 제1 소스 피연산자의 대응하는 데이터 요소가 저장될 것임을 나타내는 각각의 제1 기입 마스크 피연산자 비트 위치에 대응함 ― 내에 드문드문한 데이터 요소로서 저장하기 위해 디코딩된 제1 명령어를 실행하고,
    상기 제2 기입 마스크 피연산자의 값들에 기초하여 상기 제2 소스 피연산자로부터의 어떤 데이터 요소들이 상기 제2 목적지 피연산자에 저장될 것인지를 선택하고 상기 제2 소스 피연산자의 선택된 데이터 요소들을 상기 제2 목적지 피연산자 내에 순차적으로 패킹된 데이터 요소들로서 저장하기 위해 디코딩된 제2 명령어를 실행하는
    실행 로직 ― 상기 제1 소스 피연산자의 데이터 요소들의 크기는 상기 제1 명령어의 상기 제1 프레픽스에 의해 정의되고 상기 제2 소스 피연산자의 데이터 요소들의 크기는 상기 제2 명령어의 상기 제2 프레픽스에 의해 정의되며, 상기 실행 로직에 의해 사용되는 상기 제1 기입 마스크 피연산자 및 제2 기입 마스크 피연산자의 값들의 개수는 각각 상기 제1 소스 피연산자 및 제2 소스 피연산자의 데이터 요소 크기에 의해 결정되고, 상기 제1 기입 마스크 피연산자 및 제2 기입 마스크 피연산자는 각각 복수의 기입 마스크 레지스터 중 하나임 ― 을 포함하는 장치.
  21. 제20항에 있어서,
    상기 제1 또는 제2 기입 마스크 피연산자를 저장하는 16-비트 기입 마스크 레지스터; 및
    상기 선택된 데이터 요소들을 저장하는 제1 512-비트 레지스터를 더 포함하는 장치.
KR1020167030147A 2011-04-01 2011-12-09 메모리 소스를 목적지 레지스터 내로 확장하고 소스 레지스터를 목적지 메모리 위치 내로 압축하기 위한 시스템, 장치, 및 방법 KR101851487B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/078,896 2011-04-01
US13/078,896 US20120254592A1 (en) 2011-04-01 2011-04-01 Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
PCT/US2011/064254 WO2012134558A1 (en) 2011-04-01 2011-12-09 Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020137028982A Division KR20130137698A (ko) 2011-04-01 2011-12-09 메모리 소스를 목적지 레지스터 내로 확장하고 소스 레지스터를 목적지 메모리 위치 내로 압축하기 위한 시스템, 장치, 및 방법

Publications (2)

Publication Number Publication Date
KR20160130320A KR20160130320A (ko) 2016-11-10
KR101851487B1 true KR101851487B1 (ko) 2018-04-23

Family

ID=46928902

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020167030147A KR101851487B1 (ko) 2011-04-01 2011-12-09 메모리 소스를 목적지 레지스터 내로 확장하고 소스 레지스터를 목적지 메모리 위치 내로 압축하기 위한 시스템, 장치, 및 방법
KR1020137028982A KR20130137698A (ko) 2011-04-01 2011-12-09 메모리 소스를 목적지 레지스터 내로 확장하고 소스 레지스터를 목적지 메모리 위치 내로 압축하기 위한 시스템, 장치, 및 방법

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020137028982A KR20130137698A (ko) 2011-04-01 2011-12-09 메모리 소스를 목적지 레지스터 내로 확장하고 소스 레지스터를 목적지 메모리 위치 내로 압축하기 위한 시스템, 장치, 및 방법

Country Status (8)

Country Link
US (1) US20120254592A1 (ko)
JP (2) JP2014513341A (ko)
KR (2) KR101851487B1 (ko)
CN (1) CN103562855B (ko)
DE (1) DE112011105818T5 (ko)
GB (1) GB2503827B (ko)
TW (2) TWI470542B (ko)
WO (1) WO2012134558A1 (ko)

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007143278A2 (en) 2006-04-12 2007-12-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
EP2122461A4 (en) 2006-11-14 2010-03-24 Soft Machines Inc DEVICE AND METHOD FOR PROCESSING COMMUNICATIONS IN A MULTITHREAD ARCHITECTURE WITH CONTEXT CHANGES
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9274793B2 (en) 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US20130305020A1 (en) 2011-04-01 2013-11-14 Robert C. Valentine Vector friendly instruction format and execution thereof
KR101639853B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 자원들 및 상호접속 구조들의 비집중 할당
TWI548994B (zh) 2011-05-20 2016-09-11 軟體機器公司 以複數個引擎支援指令序列的執行之互連結構
EP2783281B1 (en) 2011-11-22 2020-05-13 Intel Corporation A microprocessor accelerated code optimizer
KR101842550B1 (ko) 2011-11-22 2018-03-28 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
CN104011670B (zh) 2011-12-22 2016-12-28 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
US9606961B2 (en) * 2012-10-30 2017-03-28 Intel Corporation Instruction and logic to provide vector compress and rotate functionality
US9189236B2 (en) * 2012-12-21 2015-11-17 Intel Corporation Speculative non-faulting loads and gathers
US9501276B2 (en) 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9632825B2 (en) 2013-03-15 2017-04-25 Intel Corporation Method and apparatus for efficient scheduling for asymmetrical execution units
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
CN105247484B (zh) 2013-03-15 2021-02-23 英特尔公司 利用本地分布式标志体系架构来仿真访客集中式标志体系架构的方法
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9477467B2 (en) * 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
US9424034B2 (en) * 2013-06-28 2016-08-23 Intel Corporation Multiple register memory access instructions, processors, methods, and systems
US9395990B2 (en) 2013-06-28 2016-07-19 Intel Corporation Mode dependent partial width load to wider register processors, methods, and systems
US9323524B2 (en) * 2013-09-16 2016-04-26 Oracle International Corporation Shift instruction with per-element shift counts and full-width sources
KR102152735B1 (ko) * 2013-09-27 2020-09-21 삼성전자주식회사 그래픽 처리 장치 및 이의 동작 방법
US20150186136A1 (en) * 2013-12-27 2015-07-02 Tal Uliel Systems, apparatuses, and methods for expand and compress
US9720667B2 (en) * 2014-03-21 2017-08-01 Intel Corporation Automatic loop vectorization using hardware transactional memory
US10223113B2 (en) 2014-03-27 2019-03-05 Intel Corporation Processors, methods, systems, and instructions to store consecutive source elements to unmasked result elements with propagation to masked result elements
KR101818985B1 (ko) 2014-03-28 2018-02-28 인텔 코포레이션 마스킹된 결과 요소들로의 전파를 이용하여 소스 요소들을 대응하는 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
US10133570B2 (en) 2014-09-19 2018-11-20 Intel Corporation Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated
US9811464B2 (en) * 2014-12-11 2017-11-07 Intel Corporation Apparatus and method for considering spatial locality in loading data elements for execution
US20160179521A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Method and apparatus for expanding a mask to a vector of mask values
US20160179520A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Method and apparatus for variably expanding between mask and vector registers
US10503502B2 (en) 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions
US20170109093A1 (en) * 2015-10-14 2017-04-20 International Business Machines Corporation Method and apparatus for writing a portion of a register in a microprocessor
US20170177348A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instruction and Logic for Compression and Rotation
US10007519B2 (en) * 2015-12-22 2018-06-26 Intel IP Corporation Instructions and logic for vector bit field compression and expansion
US10891131B2 (en) 2016-09-22 2021-01-12 Intel Corporation Processors, methods, systems, and instructions to consolidate data elements and generate index updates
JP6767660B2 (ja) 2017-01-27 2020-10-14 富士通株式会社 プロセッサ、情報処理装置及びプロセッサの動作方法
EP4137941A1 (en) 2017-03-20 2023-02-22 Intel Corporation Systems, methods, and apparatuses for matrix add, subtract, and multiply
CN110383243B (zh) * 2017-04-06 2024-05-10 英特尔公司 具有两个存储器位置的向量压缩2指令和扩展2指令
US11360771B2 (en) * 2017-06-30 2022-06-14 Intel Corporation Method and apparatus for data-ready memory operations
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
US10346163B2 (en) 2017-11-01 2019-07-09 Apple Inc. Matrix computation engine
US10642620B2 (en) 2018-04-05 2020-05-05 Apple Inc. Computation engine with strided dot product
US10970078B2 (en) * 2018-04-05 2021-04-06 Apple Inc. Computation engine with upsize/interleave and downsize/deinterleave options
US10754649B2 (en) 2018-07-24 2020-08-25 Apple Inc. Computation engine that operates in matrix and vector modes
US10831488B1 (en) * 2018-08-20 2020-11-10 Apple Inc. Computation engine with extract instructions to minimize memory access
US10838734B2 (en) * 2018-09-24 2020-11-17 Intel Corporation Apparatus and method for processing structure of arrays (SoA) and array of structures (AoS) data
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US11403256B2 (en) * 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
CN111124495B (zh) * 2019-12-16 2021-02-12 海光信息技术股份有限公司 一种数据处理方法、解码电路及处理器
US20220308873A1 (en) * 2021-03-27 2022-09-29 Intel Corporation Apparatuses, methods, and systems for instructions for downconverting a tile row and interleaving with a register
US20230409326A1 (en) * 2022-06-15 2023-12-21 Intel Corporation Device, method and system for executing a tile load and expand instruction

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4873630A (en) * 1985-07-31 1989-10-10 Unisys Corporation Scientific processor to support a host processor referencing common memory
US20050033940A1 (en) * 2000-08-09 2005-02-10 Advanced Micro Devices, Inc. Processor which overrides default operand size for implicit stack pointer references and near branches
US20090024840A1 (en) * 2007-07-20 2009-01-22 Oki Electric Industry Co., Ltd. Instruction code compression method and instruction fetch circuit
US20100088536A1 (en) * 2008-10-07 2010-04-08 Lee Sang-Suk Processor and method of decompressing instruction bundle

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57209570A (en) * 1981-06-19 1982-12-22 Fujitsu Ltd Vector processing device
JPH0634203B2 (ja) * 1983-04-11 1994-05-02 富士通株式会社 ベクトル処理装置
JPS62226275A (ja) * 1986-03-28 1987-10-05 Hitachi Ltd ベクトル処理装置
JPH0731669B2 (ja) * 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
JP2928301B2 (ja) * 1989-12-25 1999-08-03 株式会社日立製作所 ベクトル処理装置
JP2665111B2 (ja) * 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
US5933650A (en) * 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US20020002666A1 (en) * 1998-10-12 2002-01-03 Carole Dulong Conditional operand selection using mask operations
US7395412B2 (en) * 2002-03-08 2008-07-01 Ip-First, Llc Apparatus and method for extending data modes in a microprocessor
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
US20070186210A1 (en) * 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
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
GB2457303A (en) * 2008-02-11 2009-08-12 Linear Algebra Technologies Randomly accessing elements of compressed matrix data by calculating offsets from non-zero values of a bitmap

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4873630A (en) * 1985-07-31 1989-10-10 Unisys Corporation Scientific processor to support a host processor referencing common memory
US20050033940A1 (en) * 2000-08-09 2005-02-10 Advanced Micro Devices, Inc. Processor which overrides default operand size for implicit stack pointer references and near branches
US20090024840A1 (en) * 2007-07-20 2009-01-22 Oki Electric Industry Co., Ltd. Instruction code compression method and instruction fetch circuit
US20100088536A1 (en) * 2008-10-07 2010-04-08 Lee Sang-Suk Processor and method of decompressing instruction bundle

Also Published As

Publication number Publication date
TW201523441A (zh) 2015-06-16
JP2014513341A (ja) 2014-05-29
JP2016029598A (ja) 2016-03-03
TWI470542B (zh) 2015-01-21
CN103562855B (zh) 2017-08-11
TWI550512B (zh) 2016-09-21
GB201317058D0 (en) 2013-11-06
GB2503827B (en) 2020-05-27
US20120254592A1 (en) 2012-10-04
KR20130137698A (ko) 2013-12-17
JP6109910B2 (ja) 2017-04-05
DE112011105818T5 (de) 2014-10-23
WO2012134558A1 (en) 2012-10-04
KR20160130320A (ko) 2016-11-10
GB2503827A (en) 2014-01-08
TW201241744A (en) 2012-10-16
CN103562855A (zh) 2014-02-05

Similar Documents

Publication Publication Date Title
KR101851487B1 (ko) 메모리 소스를 목적지 레지스터 내로 확장하고 소스 레지스터를 목적지 메모리 위치 내로 압축하기 위한 시스템, 장치, 및 방법
KR101610691B1 (ko) 기입 마스크를 이용하여 2개 소스 피연산자를 하나의 목적지 내에 블렌딩하기 위한 시스템, 장치, 및 방법
JP6274672B2 (ja) 装置および方法
KR101817034B1 (ko) 반복 종속 조건을 갖는 반복들의 벡터 루프들을 구현하기 위한 명령어
KR101938290B1 (ko) 히스토그램을 결정하기 위한 명령어
JP5764257B2 (ja) レジスタをアライメントするためのシステム、装置、および方法
JP5947879B2 (ja) マスクレジスタを用いてジャンプを行うシステム、装置、および方法

Legal Events

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