KR101597774B1 - 마스킹된 전체 레지스터 액세스들을 이용한 부분적 레지스터 액세스들을 구현하기 위한 프로세서들, 방법들 및 시스템들 - Google Patents

마스킹된 전체 레지스터 액세스들을 이용한 부분적 레지스터 액세스들을 구현하기 위한 프로세서들, 방법들 및 시스템들 Download PDF

Info

Publication number
KR101597774B1
KR101597774B1 KR1020140037312A KR20140037312A KR101597774B1 KR 101597774 B1 KR101597774 B1 KR 101597774B1 KR 1020140037312 A KR1020140037312 A KR 1020140037312A KR 20140037312 A KR20140037312 A KR 20140037312A KR 101597774 B1 KR101597774 B1 KR 101597774B1
Authority
KR
South Korea
Prior art keywords
packing data
data
operand
packing
mask
Prior art date
Application number
KR1020140037312A
Other languages
English (en)
Other versions
KR20140118924A (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 KR20140118924A publication Critical patent/KR20140118924A/ko
Application granted granted Critical
Publication of KR101597774B1 publication Critical patent/KR101597774B1/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/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/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders

Landscapes

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

Abstract

방법은 제1 더 좁은 소스 패킹 데이터 오퍼랜드 및 더 좁은 목적지 오퍼랜드를 표시하는 패킹 데이터 명령어를 수신하는 것을 포함한다. 명령어는 제1 더 좁은 소스 오퍼랜드보다 더 넓고 이를 포함하는 제1 더 넓은 소스 패킹 데이터 오퍼랜드를 표시하고, 더 좁은 목적지 오퍼랜드보다 더 넓고 이를 포함하는 더 넓은 목적지 오퍼랜드를 표시하는, 마스킹된 패킹 데이터 연산에 매핑된다. 마스킹된 패킹 데이터 연산에 의해 저장될 패킹 데이터 결과의 각각의 대응하는 결과 데이터 엘리먼트에 대한 마스크 엘리먼트를 포함하는 패킹 데이터 연산 마스크가 생성된다. 패킹 데이터 명령어에 의해 저장되지 않을 마스킹 연산에 의해 저장될 결과 데이터 엘리먼트들에 대응하는 모든 마스크 엘리먼트들이 마스킹 아웃된다. 마스킹 연산은 패킹 데이터 연산 마스크를 사용하여 수행된다. 패킹 데이터 결과는 더 넓은 목적지 오퍼랜드에 저장된다.

Description

마스킹된 전체 레지스터 액세스들을 이용한 부분적 레지스터 액세스들을 구현하기 위한 프로세서들, 방법들 및 시스템들{PROCESSORS, METHODS, AND SYSTEMS TO IMPLEMENT PARTIAL REGISTER ACCESSES WITH MASKED FULL REGISTER ACCESSES}
본원에 기술된 실시예들은 일반적으로 프로세서들에 관한 것이다. 특히, 본원에 기술된 실시예들은 일반적으로 프로세서들 내의 레지스터들에 액세스하는 것에 관한 것이다.
많은 프로세서들이 단일 명령어 다중 데이터(SIMD) 아키텍쳐들을 가진다. SIMD 아키텍쳐들에서, 패킹(packed) 데이터 명령어, 벡터 명령어, 또는 SIMD 명령어가 동시에 또는 병렬로 다수의 데이터 엘리먼트들 또는 데이터 엘리먼트들의 다수의 쌍들에 대해 동작할 수 있다. 프로세서는 동시에 또는 병렬로 다수의 동작들을 수행하기 위해 패킹 데이터 명령어에 응답하는 병렬 실행 하드웨어를 가질 수 있다.
다수의 데이터 엘리먼트들은 패킹 데이터로서 하나의 레지스터 또는 메모리 위치 내에 패킹될 수 있다. 패킹 데이터에서, 레지스터 또는 다른 저장 위치의 비트들이 데이터 엘리먼트들의 시퀀스 내로 논리적으로 분할될 수 있다. 예를 들어, 128-비트폭의 패킹 데이터 레지스터는 2개의 64 비트폭 데이터 엘리먼트들, 4개의 32비트 데이터 엘리먼트들, 8개의 16비트 데이터 엘리먼트들 등을 가질 수 있다.
일부 프로세서 아키텍쳐들에서, 명령어들에 의해 사용된 패킹 데이터 오퍼랜드들의 폭은 수년에 걸쳐 증가하였다. 이러한 증가한 패킹된 데이터 폭들은 일반적으로 더 많은 데이터 엘리먼트들이 동시에 또는 병렬로 프로세싱되도록 하며, 이는 성능을 증가시키는 경향이 있다. 더 넓은 패킹 데이터 오퍼랜드들을 이용하는 명령어들이 존재하더라도, 더 좁은 패킹 데이터 오퍼랜드들을 이용하는 더 오래된 명령어들을 지원하는 것이, 예를 들어, 하위 호환성을 제공하는 것이 여전히 바람직하다. 또한, 종종 더 좁은 패킹 데이터 오퍼랜드들을 저장하기 위해 사용되는 더 좁은 레지스터들이 더 넓은 또는 확장된 패킹 데이터 오퍼랜드들을 저장하기 위해 사용되는 더 넓은 레지스터들에 대해 에일리어싱(alias)될 수 있다.
본 발명은 발명의 실시예들을 예시하기 위해 사용되는 후속하는 설명 및 첨부 도면들을 참조함으로써 가장 잘 이해될 수 있다.
도 1은 프로세서의 실시예들의 블록도이다.
도 2는 적절한 패킹 데이터 레지스터들의 세트의 제1 실시예의 블록도이다.
도 3a는 일부 프로세서들 내의 기존 레지스터들의 세트의 블록도이다.
도 3b는 적절한 패킹 데이터 레지스터들의 세트의 제2 실시예의 블록도이다.
도 4는 명령어 프로세싱 장치의 실시예의 블록도이다.
도 5는 프로세서에서의 방법의 실시예의 블록 흐름도이다.
도 6은 부분적 레지스터 액세스 명령어에 응답하여, 더 넓은 오퍼랜드들 상에 오버레이된 더 좁은 오퍼랜드들 상에서 수행될 수 있는 부분적 레지스터 액세스 동작을 예시하는 블록도이다.
도 7은 더 좁은 오퍼랜드들을 표시하는 부분적 레지스터 액세스 패킹 데이터 명령어에 응답하여 수행될 수 있는 더 넓은 오퍼랜드들에 대한 마스킹된 전체 레지스터 액세스 패킹 데이터 동작의 예시적인 실시예의 블록도이다.
도 8은 부분적 레지스터 액세스 명령어에 응답하여, 더 넓은 오퍼랜드 상에 오버레이된 더 좁은 오퍼랜드들에 대해 수행될 수 있는 부분적 레지스터 액세스 동작을 예시하는 블록도이다.
도 9는 더 좁은 오퍼랜드들을 표시하는 부분적 레지스터 액세스 패킹 데이터 명령어에 응답하여 수행될 수 있는 더 넓은 오퍼랜드들에 대한 마스킹된 전체 레지스터 액세스 패킹 데이터 동작의 예시적인 실시예의 블록도이다.
도 10은 부분적 레지스터 액세스 명령어에 응답하여, 더 넓은 오퍼랜드들에 오버레이된 더 넓은 오퍼랜드들의 대응하지 않는 데이터 엘리먼트들에 대해 수행될 수 있는 부분적 레지스터 액세스 동작을 예시하는 블록도이다.
도 11은 더 좁은 오퍼랜드들의 대응하지 않는 데이터 엘리먼트들에 대한 동작들을 표시하는 부분적 레지스터 액세스 패킹 데이터 명령어에 대응하여 수행될 수 있는, 더 넓은 오퍼랜드들의 대응하는 데이터 엘리먼트들에 대해 수행될 수 있는 마스킹된 전체 레지스터 액세스 패킹 데이터 동작의 예시적인 실시예의 블록도이다.
도 12는 패킹 데이터 연산 마스크 비트들의 수가 패킹 데이터 폭 및 패킹 데이터 엘리먼트 폭에 따름을 예시하는 표이다.
도 13은 패킹 데이터 연산 마스크 레지스터들의 적절한 세트의 예시적인 실시예의 블록도이다.
도 14는 패킹 데이터 연산 마스크로서 사용되고 그리고/또는 마스킹하기 위한 비트들의 수가 패킹 데이터 폭 및 데이터 엘리먼트 폭에 의존할 수 있음을 예시하는 도면이다.
도 15a는 본 발명의 실시예들에 따라 예시적인 순차적(in-order) 파이프라인, 및 예시적인 레지스터 리네이밍, 비순차적(out-of-order) 발행/실행 파이프라인 모두를 예시하는 블록도이다.
도 15b는 본 발명의 실시예들에 따라 프로세서 내에 포함될 순차적 아키텍쳐 코어의 예시적인 실시예 및 예시적인 레지스터 리네이밍의, 비순차적 발행/실행 아키텍쳐 코어 모두를 예시하는 블록도이다.
도 16a는 본 발명의 실시예들에 따라, 온-다이(on-die) 인터커넥트 네트워크에 대한 접속 및 레벨 2(L2) 캐시의 로컬 서브세트와 함께, 단일 프로세서 코어의 블록도이다.
도 16b는 본 발명의 실시예들에 따른 도 16a 내의 프로세서 코어의 일부분의 확대도이다.
도 17은 본 발명의 실시예들에 따라 하나보다 많은 코어를 가질 수 있고, 통합 메모리 제어기를 가질 수 있고, 통합 그래픽들을 가질 수 있는 프로세서의 블록도이다.
도시된 도 18은 본 발명의 일 실시예에 따른 시스템의 블록도이다.
도시된 도 19는 본 발명의 실시예에 따른 제1 더욱 구체적인 예시적인 시스템의 블록도이다.
도시된 도 20은 본 발명의 실시예에 따른 제2 더욱 구체적인 예시적인 시스템의 블록도이다.
도시된 도 21은 본 발명의 실시예에 따른 SoC의 블록도이다.
도 22는 본 발명의 실시예들에 따라 소스 명령어 세트 내의 바이너리 명령어들을 타겟 명령어 내의 바이너리 명령어들로 변환하기 위한 소프트웨어 명령어 변환기의 사용을 대조시키는 블록도이다.
부분적 레지스터 액세스 방법들, 프로세서들 및 시스템들이 본원에 개시된다. 후속하는 기재에서, 다수의 특정 상세항목들이 설명된다(예를 들어, 특정 레지스터들, 명령어들, 마스크들, 부분적 레지스터 액세스들을 수행하는 방식들, 논리 구현예들, 프로세서 구성들, 마이크로아키텍쳐 상세항목들, 동작들의 시퀀스들, 논리 파티셔닝/통합 상세항목들, 시스템 컴포넌트들의 타입들 및 상호관계들 등). 그러나, 본 발명이 이들 특정 상세항목들 없이 구현될 수 있다는 점이 이해된다. 다른 경우들에서, 공지된 회로들, 구조들 및 기법들은 이 기재의 이해를 모호하게 하지 않기 위해 상세히 도시되지 않았다.
도 1은 프로세서(100)의 실시예의 블록도이다. 일부 실시예들에서, 프로세서는 범용 프로세서(예를 들어, 다양한 타입들의 컴퓨터 시스템들에서 중앙 처리 장치로서 사용되는 타입의 범용 마이크로프로세서)일 수 있다. 대안적으로, 프로세서는 특수 목적 프로세서일 수 있다. 적절한 특수 목적 프로세서들의 예들은, 단지 몇몇 예들을 들자면, 네트워크 프로세서들, 통신 프로세서들, 암호화 프로세서들, 그래픽 프로세서들, 코-프로세서들, 임베디드 프로세서들, 디지털 신호 프로세서(DSP)들, 및 제어기들(예를 들어, 마이크로제어기들)을 포함하지만 이에 제한되지 않는다. 프로세서는 다양한 CISC(complex instruction set computing) 프로세서들, 다양한 RISC(reduced instruction set computing) 프로세서들, 다양한 VLIW(very long instruction word) 프로세서들, 이들의 다양한 혼합물들, 또는 완전히 다른 타입들의 프로세서들 중 임의의 것일 수 있다.
프로세서는 명령어 세트(102)를 가진다. 명령어 세트들의 명령어들은 실행을 위해 프로세서에 제공되는 매크로명령어들, 어셈블리어 명령어들, 또는 머신-레벨 명령어들을 나타낸다. 명령어 세트는 하나 이상의 부분적 레지스터 액세스 패킹 데이터 명령어들(103)을 포함한다. 일부 실시예들에서, 부분적 레지스터 액세스 패킹 데이터 명령어들은 레지스터의 전체 폭이 아닌 레지스터의 일부분만을 나타내는 하나 이상의 소스 및/또는 목적지 오퍼랜드들에 액세스하는 명령어들을 나타낼 수 있다. 일 예로서, 부분적 레지스터 액세스 패킹 데이터 명령어들은 128비트 소스 및 512비트 레지스터들에 저장된 목적지 오퍼랜드들에 액세스하는 명령어들을 나타낼 수 있다. 명령어 세트는 또한 선택적으로 하나 이상의 마스킹된 패킹 데이터 명령어들(104)을 포함한다. 선택적으로, 마스킹된 패킹 데이터 명령어(들)은 하나 이상의 마스킹된 전체 레지스터 액세스 명령어들(104B)을 포함한다. 일부 실시예들에서, 마스킹된 전체 레지스터 액세스 명령어는 레지스터의 전체 폭을 나타내거나 점유하는 하나 이상의 소스 및/또는 목적지 오퍼랜드들에 액세스하는 명령어를 나타낼 수 있다. 일 예로서, 마스킹된 전체 레지스터 액세스 명령어는 512비트 소스 및 512비트 레지스터들에 저장된 목적지 오퍼랜드들에 액세스하는 명령어를 나타낼 수 있다.
프로세서는 아키텍쳐상-가시적(architectural-visible) 레지스터들(예를 들어, 아키텍쳐 레지스터 파일)(105)을 포함한다. 아키텍처 레지스터들(architectural registers)은 또한 본원에서 단순히 레지스터들로서 지칭될 수 있다. 다른 방식으로 특정되거나 명백하지 않는 한, 용어들 아키텍쳐 레지스터, 레지스터 파일 및 레지스터는 본원에서 오퍼랜드들을 식별하기 위해 매크로명령어들에 의해 특정된 소프트웨어 및/또는 프로그래머 및/또는 레지스터들에 대해 가시적인 레지스터들로서 지칭된다. 이들 레지스터들은 주어진 마이크로아키텍쳐 내의 다른 비-아키텍쳐 또는 비-아키텍쳐상 가시적 레지스터들(예를 들어, 명령어들에 의해 사용되는 임시 레지스터들, 재순서 버퍼들, 리타이어먼트(retirement) 레지스터들 등)에 대해 대조적이다. 레지스터들은 일반적으로 온-다이 프로세서 저장 위치들을 나타낸다. 예시된 레지스터들은 스칼라 범용 레지스터들(106), 패킹 데이터 레지스터들(107), 및 선택적 패킹 데이터 연산 마스크 레지스터들(108)을 포함한다.
프로세서는 또한 실행 로직(109)(예를 들어, 하나 이상의 실행 유닛들)을 포함한다. 실행 로직은 명령어 세트의 명령어들을 실행하거나 프로세싱하도록 동작가능하다. 예를 들어, 실행 로직은 부분적 레지스터 액세스 패킹 데이터 명령어(들)(103) 및 마스킹된 전체 레지스터 액세스 패킹 데이터 명령어(들)(104B)을 실행하거나 프로세싱하도록 동작가능할 수 있다.
도 2는 적절한 패킹 데이터 레지스터들의 세트(207)의 제1 실시예의 블록도이다. 예시된 패킹 데이터 레지스터들은 32개의 512비트 폭 패킹 또는 벡터 레지스터들을 포함한다. 이들 32개의 512비트 레지스터들은 ZMM0 내지 ZMM31로 명명된다. 이들 512비트 레지스터들 중 하위 16개 레지스터들은 ZMM0 내지 ZMM15이다. 도시된 바와 같이, 일부 실시예들에서, ZMM0-ZMM15 레지스터들 중 하위 순서의 256비트는 각각의 256비트 패킹 또는 벡터 레지스터들 YMM0-YMM15 상에 에일리어싱되거나 오버레이되지만, 이것이 요구되지는 않는다. 마찬가지로, 일부 실시예들에서, YMM0-YMM15 레지스터들 중 하위 순서의 128비트는 각각의 128비트 패킹 또는 벡터 레지스터들 XMM0-XMM15 상에 에일리어싱되거나 오버레이된다.
512비트 레지스터들 ZMM0-ZMM31은 각각 512비트 패킹 데이터, 256비트 패킹 데이터, 또는 128비트 패킹 데이터를 보유하도록 동작가능하다. 256비트 레지스터들 YMM0-YMM15은 각각 256비트 패킹 데이터 또는 128비트 패킹 데이터를 보유하도록 동작가능하다. 128비트 레지스터들 XMM0-XMM1은 각각 128비트 패킹 데이터를 보유하도록 동작가능하다. 적어도 8비트 바이트 데이터, 16비트 워드 데이터, 32비트 더블워드 데이터, 32비트 단일 정밀도 부동 소수점 데이터, 64비트 쿼드워드 데이터 및 64비트 배정밀도 부동 소수점 데이터를 포함하는 상이한 데이터 엘리먼트 사이즈들이 지원된다. 패킹 데이터 레지스터들의 대안의 실시예들은 상이한 개수의 레지스터들, 상이한 사이즈의 레지스터들을 포함할 수 있고, 더 작은 레지스터들에 대해 더 큰 레지스터들을 에일리어싱하거나 에일리어싱하지 않을 수 있다.
이력상으로, 프로세서들은 초기에 XMM 레지스터들만을 포함하였다. 명령어 세트 내의 명령어들은 XMM 레지스터들 상에서 동작한다. 이후, YMM 레지스터들은 패킹 또는 벡터 폭들을 증가시켜서 더 많은 데이터 엘리먼트들이 동시에 또는 병렬로 프로세싱되게 하도록 추가되었다. 새로운 명령어들이 이들 더 넓은 YMM 레지스터들 상에서 동작할 명령어 세트에 추가되었다. 더 최근에는, ZMM 레지스터들은 패킹 또는 벡터 폭들을 더 증가시켜서, 훨씬 더 많은 데이터 엘리먼트들이 동시에 또는 병렬로 프로세싱되게 하도록 추가되었다. 추가적인 새로운 명령어들이 이들 훨씬 더 넓은 ZMM 레지스터들 상에서 동작할 명령어들의 세트에 추가되었다. 이들 더 새로운 명령어들 및 더 넓은 패킹 데이터 폭들이 이용가능하지만, 하위 호환성을 제공하고 더 오래된 명령어들을 여전히 지원하는 것이 여전히 일반적으로 바람직하다. 예를 들어, 프로세서가 XMM 및 YMM 레지스터들 상에서 동작하는 더 오래된 명령어들을 계속 지원하는 것이 일반적으로 바람직하다. 그러나, XMM 및 YMM 레지스터들이 더 넓은 ZMM 레지스터들 상에 에일리어싱되거나 오버레이되므로, 이들 명령어들의 사용은 종종 더 넓은 512비트 레지스터들 내에 저장된 더 좁은 XMM 및/또는 YMM 오퍼랜드들에 대한 부분적 레지스터 액세스들을 수반한다.
도 3a는 일부 프로세서들 내의 기존 아키텍쳐 레지스터들의 세트(310)의 블록도이다. 예시된 레지스터들이 4개의 64비트 패킹 데이터 레지스터들(P0-P3)을 포함하지만, 더 많은 것이 선택적으로 포함될 수 있다. 이들 4개의 64비트 패킹 데이터 레지스터들은 또한 2개의 128비트 패킹 데이터 레지스터들(Q0-Q1)의 예시에서 최대의 절반만큼 논리적으로 보여질 수 있다. 128비트 레지스터(Q0)의 가장 낮은 순서 64비트들(즉, 비트들 63:0)은 64비트 레지스터(P0)에 대응하는 반면, 128비트 레지스터(Q0)의 가장 높은 순서 64비트(즉, 비트들 127:64)는 64비트 레지스터 P1에 대응한다. 유사하게, 128 비트 레지스터(Q1)의 가장 낮은 순서 64비트(즉, 비트들 63:0)은 64비트 레지스터(P2)에 대응하는 반면, 128비트 레지스터(Q1)의 가장 높은 순서 64비트(즉, 비트들 127:64)은 64비트 레지스터(P3)에 대응한다.
도 2의 방식에 도시된 바와 같이 에일리어싱을 사용하는 패킹 데이터 레지스터들의 폭을 증가시키는 것 대신, 이들 기존의 레지스터들에 대해 더 넓은 128비트 Q0-Q1 레지스터들을 형성하기 위해 더 좁은 64비트 P0-P3 레지스터들의 인접한 쌍들을 함께 논리적으로 그룹핑하는 방식이 사용되었다. 그러나, 단일의 더 넓은 패킹 데이터 레지스터를 형성하기 위해 다수의 더 좁은 패킹 데이터 레지스터들을 논리적으로 그룹핑하는 이러한 방식의 한가지 가능한 단점은 더 넓은 패킹 데이터 레지스터들의 수의 감소이다. 64비트 레지스터들이 존재하는 것의 절반만큼 128비트 레지스터들이 존재한다. 또한, 이 문제점은 128비트보다 훨씬 더 넓은 패킹 데이터 폭들이 고려될 때 이 문제가 악화될 수 있는데, 이것은 단일의 더 넓은 레지스터를 만들기 위해 셋 이상의 더 좁은 레지스터들을 논리적으로 그룹핑하는 것을 수반할 수 있다. 예를 들어, 4개의 64비트 레지스터들이 각각의 256비트 레지스터를 만들기 위해 필요할 수 있다.
도 3b는 적절한 아키텍쳐 패킹 데이터 레지스터들(307)의 세트의 제2 실시예의 블록도이다. 일 실시예에서, 레지스터들(307)은 도 3a의 기존 레지스터들(310)의 넓은/확장된 그리고 호환가능한 버전을 나타낼 수 있다. 레지스터들(307)은 4개의 더 넓은 256비트 패킹 데이터 레지스터들(R0-R3)을 포함한다. 이들 4개의 더 넓은 256 비트 패킹 데이터 레지스터들(R0-R3)은 기존의 레지스터들(P0-P3 및 Q0-Q1)을 구현한다. 도시된 바와 같이, 일부 실시예들에서, R0-R3 레지스터들의 하위 순서 64비트는 각각의 64비트 레지스터들(P0-P3)에 오버랩하고, R0-R3 레지스터들의 하위 순서 128비트가 각각의 128비트 레지스터들(Q0-Q3)에 오버랩하지만, 이것이 요구되지는 않는다. 다양한 실시예들에서, 예를 들어, 16, 32, 64 또는 일부 다른 개수의 레지스터들과 같이, 이러한 256 비트 레지스터들의 임의의 원하는 수가 있을 수 있다. 다른 실시예들에서, 256비트 레지스터들 대신, 512비트 레지스터들, 1024비트 레지스터들, 또는 256비트보다 더 넓거나 더 좁은 다른 폭들이 사용될 수 있다. 예를 들어, 8비트 바이트, 16비트 워드, 32비트 더블워드, 32비트 단일 정밀도 부동 소수점, 64비트 쿼드워드, 64비트 배정밀도 부동 소수점, 또는 이들의 다양한 조합들을 포함하는 상이한 데이터 엘리먼트 사이즈들이 지원될 수 있다.
기존의/레거시(legacy) 명령어들이 여전히 P0-P3 및/또는 Q0-Q1 레지스터들을 특정할 수 있으므로, 그리고 이러한 기존의/레거시 명령어들이 사라지려면 다년 혹은 심지어 수십년이 걸릴 수 있으므로, 하위 호환성을 제공하고, 기존의/레거시 명령어들이 또한 지원되도록 하는 것이 중요할 수 있다. 예를 들어, 기존의/레거시 명령어들이 P0-P3 및/또는 Q0-Q1 레지스터들 상에서 여전히 동작하게 하는 것이 중요할 수 있다. 그러나, P0-P3 및/또는 Q0-Q1 레지스터들이 (예를 들어, 도 3b에 도시된 바와 같이) 더 넓은 레지스터들 상에 오버레이되는 경우, 이러한 명령어들의 실행은 더 넓은 레지스터들 상에 오버레이된 P0-P3 및/또는 Q0-Q1 레지스터들로부터 데이터를 판독하고 그리고/또는 이들에 데이터를 기록하기 위한 부분적 레지스터 액세스들을 수반할 수 있다.
도 4는 명령어 프로세싱 장치(400)의 실시예의 블록도이다. 일부 실시예들에서, 명령어 프로세싱 장치는 프로세서일 수 있고 그리고/또는 프로세서 내에 포함될 수 있다. 예를 들어, 일부 실시예들에서, 명령어 프로세싱 장치는 도 1의 프로세서일 수 있거나 이에 포함될 수 있다. 대안적으로, 명령어 프로세싱 장치는 유사한 또는 상이한 프로세서 내에 포함될 수 있다. 또한, 도 1의 프로세서는 유사한 또는 상이한 장치를 포함할 수 있다.
장치(400)는 아키텍쳐 레지스터들(405)을 포함한다. 레지스터들 각각은 데이터를 저장하도록 동작가능한 온-다이 저장 위치를 나타낼 수 있다. 레지스터들은 공지된 기법들을 사용하여 상이한 마이크로아키텍쳐들에서 상이한 방식들로 구현될 수 있으며, 임의의 특정 타입의 회로에 제한되지 않는다. 다양한 상이한 타입들의 레지스터들이 적절하다. 적절한 타입들의 레지스터들의 예들은 전용 물리적 레지스터들, 레지스터 리네이밍을 사용하는 동적으로 할당된 물리적 레지스터들, 및 이들의 조합들을 포함하지만, 이에 제한되지 않는다. 일부 실시예들에서, 도 2의 패킹 데이터 레지스터들(207) 또는 도 3의 패킹 데이터 레지스터들(307)이 레지스터들(405)에 대해 사용될 수 있다. 대안적으로, 다른 레지스터들이 레지스터들(405)에 대해 사용될 수 있다.
장치는 하나 이상의 상대적으로 더 좁은 오퍼랜드들을 표시할 수 있는 부분적 레지스터 액세스 명령어(403)을 수신할 수 있다. 예시로서, 명령어는 명령어 페치(fetch) 유닛, 명령어 큐(queue) 등으로부터 수신될 수 있다. 일부 실시예들에서, 부분적 레지스터 액세스 명령어는 제1 상대적으로 더 좁은 소스 오퍼랜드(예를 들어, 레지스터)(422)를 (예를 들어, 하나 이상의 필드들 또는 비트들의 세트를 통해) 명시적으로 특정하거나, 또는 다른 방식으로 표시(예를 들어, 암시적으로 표시)할 수 있으며, 상대적으로 더 좁은 목적지 오퍼랜드(예를 들어, 레지스터)(424)를 특정하거나 또는 다른 방식으로 표시할 수 있다. 일부 실시예들에서, 제1 더 좁은 소스 오퍼랜드(422)는 제1 더 넓은 소스 오퍼랜드(423)의 일부일 수 있고 그리고/또는 더 좁은 목적지 오퍼랜드(424)는 더 넓은 목적지 오퍼랜드(425)의 일부분일 수 있다. 일 예로서, 제1 더 좁은 소스 오퍼랜드(422)는 제1 128비트 XMM 레지스터일 수 있고, 제1 더 넓은 소스 오퍼랜드(423)는 제1 128비트 XMM 레지스터가 오버레이되는 제1 512비트 ZMM 레지스터일 수 있고, 더 좁은 목적지 오퍼랜드(424)는 제2 128비트 XMM 레지스터일 수 있고, 더 넓은 목적기 오퍼랜드(425)는 제2 128 비트 XMM 레지스터가 오버레이되는 제2 512 비트 ZMM 레지스터일 수 있다. 본원에서 사용되는 바와 같이, 용어 "더 좁은" 및 "더 넓은"은 상대적 용어들(즉, 절대적 용어들이 아님)이며, 이들은 서로 관련된다(예를 들어, 더 좁은 소스 오퍼랜드는 더 넓은 소스 오퍼랜드보다 더 좁음, 등). 다른 실시예들에서, 부분적 레지스터 액세스 명령어는 단일의 상대적으로 더 좁은 레지스터만큼 적은 것을 나타낼 수 있다. 또한, 다른 실시예들에서, 하나 이상의 메모리 위치들은 레지스터들 중 하나 이상을 대체하기 위해 사용될 수 있고, 그리고/또는 목적지 레지스터는 소스 레지스터와 동일할 수 있다.
장치(400)는 또한 디코딩 로직(420)을 포함한다. 디코딩 로직은 또한 디코딩 유닛 또는 디코더로서 지칭될 수 있다. 부분적 레지스터 액세스 명령어는 머신 코드 명령어, 어셈블리어 명령어, 매크로명령어, 또는 장치의 명령어들의 세트의 명령어 및/또는 제어 신호를 나타낼 수 있다. 디코더는 부분적 레지스터 액세스 명령어를 디코딩하고, 번역하고, 해석하고, 모핑(morph)하거나, 또는 다른 방식으로 변환할 수 있다. 예를 들어, 디코더는 상대적으로 상위 레벨의 부분적 레지스터 액세스 명령어를, 하나 이상의 대응하는 상대적으로 하위 레벨의 마이크로 명령어들, 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 또는 상위 명령어들을 반영하고, 나타내고 그리고/또는 상위 명령어들로부터 유도된 다른 상대적으로 하위 레벨 명령어들 또는 제어 신호들로 디코딩할 수 있다. 디코더는 마이크로코드 판독 전용 메모리(ROM)들, 룩업 테이블들, 하드웨어 구현들, 프로그램가능한 로직 어레이(PLA)들, 및 당해 기술분야에 공지된 디코더들을 구현하기 위해 사용되는 다른 메커니즘을 포함하지만 이에 제한되지 않는 다양한 상이한 메커니즘들을 사용하여 구현될 수 있다.
일부 실시예들에서, 디코딩 로직(420)은 (제1 더 좁은 소스 패킹 데이터 오퍼랜드(422) 및 더 좁은 목적지 오퍼랜드(424)를 표시하는) 부분적 레지스터 액세스 패킹 데이터 명령어를, 제1 더 넓은 소스 패킹 데이터 오퍼랜드(423) 및 더 넓은 목적지 오퍼랜드(425)를 표시하는 마스킹된 전체 레지스터 액세스 패킹 데이터 명령어/연산에 매핑하는 로직(421)을 포함할 수 있다. 제1 더 넓은 소스 패킹 데이터 오퍼랜드(423)는 제1 더 좁은 소스 패킹 데이터 오퍼랜드(422)보다 더 넓으며, 이를 포함한다(예를 들어, 더 좁은 오퍼랜드(422)는 더 넓은 오퍼랜드(423)에 대해 에일리어싱될 수 있다). 더 넓은 목적지 오퍼랜드(425)는 더 좁은 목적지 오퍼랜드(424)보다 더 넓으며, 이를 포함한다. 일부 실시예들에서, 부분적 레지스터 액세스 명령어, 및 마스킹된 전체 레지스터 액세스 명령어는 동일한 또는 거의 유사한 산술, 논리 또는 다른 연산을 가질 수 있다(예를 들어, 둘 모두가 가산 연산들을 수행할 수 있고, 둘 모두가 시프트 연산들을 수행할 수 있는 것 등). 일부 실시예들에서, 마스킹된 전체 레지스터 액세스 명령어는 부분적 레지스터 액세스 명령어의 모든 연산들에 더하여 마스킹 아웃될 수 있는 추가적인 연산들을 수행할 수 있다. 마스킹된이라는 용어는 하기에 추가로 논의될 예측 또는 조건부 실행을 지칭한다. 유리하게는, 일부 실시예들에서, 전체 레지스터 액세스 명령어는 부분적 레지스터 액세스 대신 전체 레지스터 액세스를 수행할 수 있다.
도 4를 다시 참조하면, 실행 로직(409)은 디코딩 로직(420) 및 레지스터들(405)과 결합된다. 예시로서, 실행 로직은 실행 유닛, 산술 유닛, 산술 논리 유닛, 산술 및 논리 연산들을 수행하기 위한 디지털 회로, 기능 유닛, 집적 회로 또는 하드웨어를 포함하는 유닛 등을 포함할 수 있다. 실행 유닛 및/또는 명령어 프로세싱 장치는 부분적 레지스터 액세스 명령어(403)에 응답하는 동작들을 수행하도록(예를 들어, 부분적 레지스터 액세스 명령어(403)으로부터 디코딩 로직에 의해 유도되는 하나 이상의 명령어들 또는 제어 신호들에 응답하여) 동작가능한 특정 또는 특수 로직(예를 들어, 펌웨어 및/또는 소프트웨어와 부분적으로 결합된 회로 또는 다른 하드웨어)을 포함할 수 있다.
일부 실시예들에서, 실행 유닛은 패킹 데이터 연산 마스크(408)를 이용하여 마스킹된 전체 레지스터 액세스 패킹 데이터 명령어/연산을 실행하도록 동작가능할 수 있다. 일부 실시예들에서, 패킹 데이터 연산 마스크는 마스킹된 전체 레지스터 액세스 패킹 데이터 명령어/연산에 의해 저장될 패킹 데이터 결과의 각각의 대응하는 결과 데이터 엘리먼트에 대한 마스크 엘리먼트를 포함할 수 있다. 일부 실시예들에서, 부분적 레지스터 액세스 패킹 데이터 명령어에 의해 저장되지 않을 마스킹된 전체 레지스터 액세스 패킹 데이터 명령어/연산에 의해 저장될 결과 데이터 엘리먼트들에 대응하는 모든 마스크 엘리먼트들은 마스킹 아웃될 것이다. 실행 유닛은 더 넓은 목적지 오퍼랜드(425)에 패킹 데이터 결과를 저장할 수 있다.
일부 실시예들에서, 부분적 레지스터 액세스 명령어는 패킹 데이터 연산 마스크를 표시하지 않을 수 있지만, 그럼에도 불구하고, 패킹 데이터 연산 마스크(408)가 부분적 레지스터 액세스 명령어의 실행을 구현하기 위해 사용될 수 있다. 다른 실시예들에서, 부분적 레지스터 액세스 명령어는 패킹 데이터 연산 마스크를 표시할 수 있지만, 패킹 데이터 연산 마스크(408)는 부분적 레지스터 액세스 명령어에 의해 표시된 패킹 데이터 연산 마스크보다 비트에 있어서 더 넓을 수 있다(예를 들어, 모두 고의적으로 마스킹 아웃된 추가적인 마스크 비트들을 가질 수 있다).
패킹 데이터 연산 마스크들은 예측 오퍼랜드들 또는 조건 제어 오퍼랜드들을 나타낼 수 있다. 패킹 데이터 연산 마스크들은 또한 본원에서 단순히 마스크들로서 지칭될 수 있다. 각각의 마스크는 명령어와 연관된 연산들이 소스 데이터 엘리먼트들 상에서 수행될지의 여부 및/또는 연산들의 결과가 패킹 데이터 결과에 저장될 지의 여부를 예측하고, 조건부로 제어하거나, 또는 마스킹한다. 각각의 마스크는 각각 다수의 마스크 엘리먼트들, 예측 엘리먼트들, 또는 조건 제어 엘리먼트들을 포함할 수 있다.
일부 실시예들에서, 각각의 마스크는 결과 데이터 엘리먼트 입도(granularity) 마다에서의 연산들을 마스킹하도록 동작가능하다. 일 양태에서, 마스크 엘리먼트들은 결과 데이터 엘리먼트들과의 일대일 대응에 포함될 수 있다(예를 들어, 4개의 결과 데이터 엘리먼트들 및 4개의 대응하는 마스크 엘리먼트들이 존재할 수 있다). 각각의 상이한 마스크 엘리먼트들은 상이한 대응하는 패킹 데이터 연산을 마스킹하고 그리고/또는 다른 것들과는 별도로 그리고/또는 독립적으로 상이한 대응하는 결과 데이터 엘리먼트의 저장을 마스킹하도록 동작가능할 수 있다. 예를 들어, 마스크 엘리먼트는 패킹 데이터 연산이 소스 패킹 데이터의 대응하는 데이터 엘리먼트에 대해(또는 2개의 소스 패킹 데이터의 한 쌍의 대응하는 데이터 엘리먼트들에 대해) 수행되는지의 여부 및/또는 패킹 데이터 연산의 결과가 대응하는 결과 데이터 엘리먼트에 저장되는지의 여부를 마스킹하도록 동작가능할 수 있다.
공통적으로 각각의 마스크 엘리먼트는 단일 비트일 수 있다. 단일 비트는 2개의 상이한 가능성들 중 어느 하나를 특정하는 것을 허용할 수 있다. 일 예로서, 각각의 비트는 동작을 수행하는 것 대 동작을 수행하지 않는 것 중 어느 하나를 특정할 수 있다. 또다른 예로서, 각각의 비트는 연산의 결과를 저장하는 것 대 연산의 결과를 저장하지 않는 것을 특정할 수 있다. 한 가지 가능한 관례(convention)에 따라, 각각의 마스크 비트는 패킹 연산의 결과가 대응하는 결과 데이터 엘리먼트에 저장되도록 하기 위한 제1 값(예를 들어, 바이너리 1로 설정된)을 가질 수 있거나, 또는 패킹 연산의 결과가 대응하는 결과 데이터 엘리먼트에 저장되는 것을 방지하기 위한 제2 값(예를 들어, 바이너리 0으로 클리어된)을 가질 수 있다. 반대의 관례가 또한 가능하다.
일부 실시예들에서, 연산은 대응하는 마스크 비트 또는 엘리먼트와는 무관하게 선택적으로 수행될 수 있지만, 대응하는 연산의 결과들은, 대응하는 마스크 비트 또는 엘리먼트의 값에 따라 결과 패킹 데이터에 저장될 수 있거나 저장되지 않을 수 있다. 대안적으로, 다른 실시예들에서, 대응하는 마스크 비트 또는 엘리먼트가 마스킹 아웃되는 경우, 연산이 선택적으로 생략될 수 있다(즉, 수행되지 않는다). 일부 실시예들에서, 예외들 및/또는 위반들이, 선택적으로 마스크-오프 엘리먼트에 대한 연산에 대해 억제되거나 또는 마스크-오프 엘리먼트에 대한 연산에 의해 발생하지 않을 수 있다. 일부 실시예들에서, 마스크-오프 데이터 엘리먼트들에 대응하는 메모리 오류들이 선택적으로 억제되거나 발생하지 않을 수 있다.
기재를 모호하게 하는 것을 회피하기 위해, 상대적으로 단순한 명령어 프로세싱 장치(400)가 도시되고 기술되었다. 다른 실시예들에서, 장치는 선택적으로, 프로세서들에서 발견된 다른 공지된 컴포넌트들을 포함할 수 있다. 이러한 컴포넌트들의 예들은 분기 예측 유닛, 명령어 페치 유닛, 명령어 및 데이터 캐시들, 명령어 및 데이터 트랜스레이션 색인 버퍼들(data translation lookaside buffers), 사전페치(prefetch) 버퍼들, 마이크로명령어 큐들, 마이크로명령어 시퀀서들, 레지스터 리네이밍 유닛, 명령어 스케쥴링 유닛, 버스 인터페이스 유닛들, 제2 또는 더 높은 레벨의 캐시들, 리타이어먼트 유닛, 프로세서들에 포함된 다른 컴포넌트들, 및 이들의 다양한 조합들을 포함하지만 이에 제한되지 않는다. 프로세서들 내의 컴포넌트들의 말 그대로 다수의 상이한 조합들 및 구성들이 존재하며, 실시예들은 임의의 특정 조합 또는 구성에 제한되지 않는다. 실시예들은 다수의 코어들, 논리 프로세서들, 또는 실행 엔진들을 가지고, 그 중 적어도 하나는 본원에 개시된 명령어의 실시예를 실행하도록 동작가능한 실행 로직을 가진다.
도 5는 프로세서에서 방법(530)의 실시예의 블록 흐름도이다. 일부 실시예들에서, 도 5의 동작들 및/또는 방법은 도 1의 프로세서 및/또는 도 4의 장치에 의해 수행되고 그리고/또는 도 1의 프로세서 및/또는 도 4의 장치 내에서 수행될 수 있다. 도 1의 프로세서 및 도 4의 장치에 대해 본원에 기술된 컴포넌트들, 특징들 및 특정 선택적 상세항목들은 또한 선택적으로 도 5의 동작들 및/또는 방법에 적용된다. 대안적으로, 도 5의 동작들 및/또는 방법은 유사한 또는 완전히 상이한 프로세서 또는 장치에 의해 그리고/또는 유사한 또는 완전히 상이한 프로세서 또는 장치 내에서 수행될 수 있다. 또한, 도 1의 프로세서 및 도 4의 장치는 도 5의 동작들 및/또는 방법들과 유사하거나 상이한 동작들 및/또는 방법들을 수행할 수 있다.
방법은 블록(531)에서 패킹 데이터 명령어를 수신하는 것을 포함한다. 다양한 양태들에서, 제1 명령어는 오프-다이 소스로부터(예를 들어, 시스템 메모리, 디스크, 또는 시스템 인터커넥트로부터), 또는 온-다이 소스(예를 들어, 명령어 캐시 또는 명령어 페치 유닛으로부터) 수신될 수 있다. 일부 실시예들에서, 패킹 데이터 명령어는 제1 더 좁은 소스 패킹 데이터 오퍼랜드, 선택적으로는 제2 더 좁은 소스 패킹 데이터 오퍼랜드, 및 더 좁은 목적지 오퍼랜드를 표시할 수 있다.
방법은 블록(532)에서 패킹 데이터 명령어를 마스킹된 패킹 데이터 연산에 매핑하는 것을 포함한다. 일부 실시예들에서, 마스킹된 패킹 데이터 연산은 제1 더 좁은 소스 패킹 데이터 오퍼랜드보다 더 넓으며 이를 포함하는 제1 더 넓은 소스 패킹 데이터 오퍼랜드, 선택적으로 제2 더 좁은 소스 패킹 데이터 오퍼랜드보다 더 넓으며 이를 포함하는 제2 더 넓은 소스 패킹 데이터 오퍼랜드, 및 더 좁은 목적지 오퍼랜드보다 더 넓으며 이를 포함하는 더 넓은 목적지 오퍼랜드를 표시할 수 있다. 일부 실시예들에서, 마스킹된 패킹 데이터 연산은, 수신된 패킹 데이터 명령어가 마스킹된 명령어가든 그리고/또는 패킹 데이터 연산 마스크를 표시하든지 간에, 패킹 데이터 연산 마스크를 표시할 수 있다. 일부 실시예들에서, 디코딩 로직(예를 들어, 디코딩 유닛)은 매핑을 수행할 수 있다.
블록(533)에서, 방법은 패킹 데이터 연산 마스크를 생성하는 것을 포함한다. 일부 실시예들에서, 패킹 데이터 연산 마스크는 마스킹된 패킹 데이터 연산에 의해 저장될 패킹 데이터 결과의 각각의 대응하는 결과 데이터 엘리먼트에 대한 마스크 엘리먼트를 포함할 수 있다. 일부 실시예들에서, 마스킹된 패킹 데이터 연산에 의해 저장될 결과 데이터 엘리먼트들에 대응하는, 패킹 데이터 명령어에 의해 저장되지 않을 모든 마스크 엘리먼트들이 마스킹 아웃될 수 있다.
방법은 블록(534)에서, 패킹 데이터 연산 마스크를 사용하여 마스킹된 패킹 데이터 연산을 수행하는 것을 포함한다. 방법은 블록(535)에서, 더 넓은 목적지 오퍼랜드에 패킹 데이터 결과를 저장하는 것을 포함한다. 일부 실시예들에서, 더 넓은 목적지 오퍼랜드에 패킹 데이터 결과를 저장하는 것은 부분적 레지스터 기록 대신 전체 레지스터 기록을 수행하는 것을 포함할 수 있다. 일부 실시예들에서, 더 넓은 목적지 오퍼랜드는 목적지 레지스터를 완전히 채울 수 있는 반면, 더 좁은 목적지 오퍼랜드는, 매핑이 수행되지 않은 경우 부분적 레지스터 기록이 요구되었을 수 있도록 부분적으로 채워진 목적지 레지스터만을 가질 것이다.
도 6은 부분적 레지스터 액세스 명령어에 응답하여, 더 넓은 오퍼랜드들 상에 오버레이된 더 좁은 오퍼랜드들에 대해 수행될 수 있는 부분적 레지스터 액세스 연산(603)을 예시하는 블록도이다. 부분적 레지스터 액세스 명령어는 제1 더 좁은 소스 패킹 데이터(622-1)를 특정하거나 다른 방식으로 표시할 수 있고, 제2 더 좁은 소스 패킹 데이터(622-2)를 특정하거나 다른 방식으로 표시할 수 있고, 결과 패킹 데이터가 저장될 수 있는 더 좁은 목적지 오퍼랜드(624)(예를 들어, 저장 위치)를 특정하거나 다른 방식으로 표시할 수 있다. 예시된 예에서, 제1 더 좁은 소스 오퍼랜드, 제2 더 좁은 소스 오퍼랜드, 및 더 좁은 목적지 오퍼랜드 각각은 128비트 폭이고, 4개의 32비트 데이터 엘리먼트들을 포함한다. 예시에서, 제1 더 좁은 소스 패킹 데이터는, 최하위 포지션(오른쪽의)으로부터, 최상위 포지션(왼쪽의)으로, 값들 A1, A2, A3 및 A4을 가진다. 유사하게, 제2 더 좁은 소스 패킹 데이터는 최하위 포지션(오른쪽의)으로부터 최상위 포지션(왼쪽의)으로, 값들 B1, B2, B3, 및 B4을 가진다. 다른 예들은 더 좁은(예를 들어, 8비트, 16비트 등) 또는 더 넓은(예를 들어, 64비트) 데이터 엘리먼트들과 함께 다른 패킹 데이터 폭들(예를 들어, 64비트, 256비트, 512비트 등)을 사용할 수 있다.
더 좁은 128비트 오퍼랜드들은 더 넓은 레지스터들에 저장된다. 예시에서, 더 넓은 레지스터들은 512비트 레지스터들이다. 특히, 제1 더 좁은 소스 패킹 데이터(622-1)는 제1 512비트 레지스터(607-1)에 저장되고, 제2 더 좁은 소스 패킹 데이터(622-2)는 제2 512비트 레지스터(607-2)에 저장되고, 더 좁은 목적지 오퍼랜드(624)는 제3 512비트 레지스터(607-3)에 저장된다. 다른 실시예들에서, 예를 들어, 256비트 레지스터들 또는 1024 비트 레지스터들과 같은 다른 레지스터 폭들이 사용될 수 있다. 제1 512 비트 레지스터의 비트들 511:128은 값들 A5 내지 A16을 저장한다. 유사하게, 제2 512비트 레지스터의 비트들 511:128은 값들 B5 내지 B16을 저장한다.
명령어/연산에 응답하여 결과 패킹 데이터가 생성되고 더 좁은 목적지 오퍼랜드(624)에 저장된다. 결과 패킹 데이터는 복수의 결과 패킹 데이터 엘리먼트들을 포함한다. 예시된 예에서, 결과 패킹 데이터는 128비트 폭이며, 4개의 32비트 결과 데이터 엘리먼트들을 포함한다. 결과 데이터 엘리먼트들 각각은 대응하는 상대적 비트 포지션들에서의 제1 및 제2 더 좁은 소스 패킹 데이터로부터 소스 데이터 엘리먼트들의 대응하는 쌍에 대해 수행되는 연산, 이 경우에 가산 연산 또는 합산의 결과를 포함한다. 예를 들어, 예시에서, 결과 패킹 데이터는 최하위 포지션(오른쪽의)으로부터, 최상위 포지션(왼쪽의)으로, 값들 A1+B1, A2+B2, A3+B3, 및 A4+B4을 가진다. 가산 연산은 단지 일 예시적인 예이며, 다른 산술(예를 들어, 곱셈, 감산 등) 및/또는 논리적(예를 들어, 시프트, 회전, 논리 AND, 논리 XOR, 등) 연산들이 또한 적절하다는 점이 이해될 것이다.
128비트의 제1 및 제2 더 좁은 소스 패킹 데이터(622-1, 622-2)는 더 넓은 제1 및 제2의 512비트 레지스터들(607-1, 607-2)의 단지 일부이므로, 더 좁은 소스 오퍼랜드들에 액새스하는 것은 제1 및 제2 512비트 레지스터들의 부분적 레지스터 판독을 수반할 수 있다. 예를 들어, 값들 A5 내지 A16을 판독하지 않고 값들 A1 내지 A4가 판독될 수 있다. 또한, 더 좁은 128비트 결과 패킹 데이터 및/또는 더 좁은 128비트 목적지 오퍼랜드가 더 제3 넓은 512비트 레지스터(607-3)의 단지 일부분이므로, 결과를 저장하는 것은 제3 512비트 레지스터에 대한 부분적 레지스터 기록을 수반할 수 있다. 예를 들어, 값들 A1+B1, A2+B2, A3+B3, 및 A4+B4은, 제3 512비트 레지스터의 비트들 511:128 내의 기존의 컨텐츠를 파괴하지 않고(예를 들어, A5 내지 A16 또는 B5 내지 B16의 값들을 파괴하지 않고) 제3 512비트 레지스터에 저장될 수 있다. 일부 실시예들에서, 이러한 부분적 레지스터 액세스들을 회피하거나 적어도 그 수를 감소시키는 것이 바람직할 수 있다.
도 7은 더 좁은 오퍼랜드들을 표시하는 부분적 레지스터 액세스 패킹 데이터 명령어에 응답하여 수행될 수 있는 더 넓은 오퍼랜드들에 대한 마스킹된 전체 레지스터 액세스 패킹 데이터 연산(740)의 예시적인 실시예의 블록도이다. 일부 실시예들에서, 프로세서 또는 프로세서의 일부(예를 들어, 디코딩 유닛)는, 부분적 레지스터 액세스 패킹 데이터 명령어에 의해 수행될 하나 이상의 부분적 레지스터 액세스들을 마스킹된 전체 레지스터 액세스 패킹 데이터 연산에 의해 수행되는 하나 이상의 대응하는 전체 레지스터 액세스들로 대체하기 위해, 부분적 레지스터 액세스 패킹 데이터 명령어를 마스킹된 전체 레지스터 액세스 패킹 데이터 연산에 매핑시킬 수 있다. 일부 실시예들에서, 도 7의 마스킹된 전체 레지스터 액세스 패킹 데이터 연산은 도 6의 부분적 레지스터 액세스 명령어 그리고/또는 연산을 구현하기 위해 사용될 수 있다.
마스킹된 전체 레지스터 액세스 패킹 데이터 연산은 부분적 레지스터 액세스 명령어에 의해 표시된 제1 더 좁은 소스 패킹 데이터(722-1)를 가지는 제1 더 넓은 소스 패킹 데이터(723-1), 및 부분적 레지스터 액세스 명령어에 의해 표시된 제2 더 좁은 소스 패킹 데이터(722-2)를 가지는 더 제2 더 넓은 소스 패킹 데이터(723-2)를 사용할 수 있다. 예시된 실시예에서, 제1 및 제2 더 넓은 소스 패킹 데이터 각각은 512비트 폭이고 16개의 32비트 데이터 엘리먼트들을 가지며, 제1 및 제2 더 좁은 소스 패킹 데이터 각각은 128비트 폭이고 4개의 32비트 데이터 엘리먼트들을 가지지만, 본 발명의 범위는 그렇게 제한되지 않는다. 예시에서, 제1 더 넓은 소스 패킹 데이터는, 최하위 포지션(오른쪽의)으로부터 최상위 포지션(왼쪽의)으로, 값들 A1, A2, A3, A4, A5, A6...A16을 가진다. 예시에서, 제2 더 넓은 소스 패킹 데이터는, 최하위 포지션(오른쪽의)으로부터 최상위 포지션(왼쪽의)으로, 값들 B1, B2, B3, B4, B5, B6...B16을 가진다. 2개의 소스 패킹 데이터 내의 동일한 상대적 비트 포지션들에서의(예를 들어, 예시된 바와 동일한 수직 포지션들에서의) 소스 데이터 엘리먼트들은 대응하는 데이터 엘리먼트들의 쌍들을 나타낸다. 다른 실시예들에서, 임의의 다른 적절한 더 넓은 그리고 더 좁은 소스 패킹 데이터 폭들이 대신 (예를 들어, 128비트, 256비트 또는 1024비트의 더 넓은 폭들을, 32비트, 64비트, 128비트 또는 256비트의 더 좁은 폭들과 함께)사용될 수 있다. 또한, 다른 실시예들에서, 몇몇 예들을 들자면, 예를 들어, 8비트 바이트, 16비트 워드, 또는 64비트 더블워드 또는 배정밀도 부동 소수점과 같은, 32비트 이외의 다른 데이터 엘리먼트 폭들이 선택적으로 사용될 수 있다.
마스킹된 전체 레지스터 액세스 패킹 데이터 연산은 또한 소스 패킹 데이터 연산 마스크(708)를 사용할 수 있다. 예시에 도시된 바와 같이, 공통적으로 각각의 마스크 엘리먼트는 단일 비트일 수 있다. 대안적으로, 둘보다 많은 상이한 옵션들 사이의 선택이 요구되는 경우, 둘 이상의 비트들이 각각의 마스크 엘리먼트에 대해 사용될 수 있다. 또한 도시된 바와 같이, 대응하는 소스 데이터 엘리먼트들의 각각의 쌍에 대해 그리고/또는 각각의 결과 데이터 엘리먼트에 대해, 이 경우 단일 비트인, 1개의 마스크 엘리먼트가 존재할 수 있다. 예시된 실시예에서, 제1 및 제2 소스 패킹 데이터에서 대응하는 데이터 엘리먼트들의 16개 쌍들이 존재하므로, 패킹 데이터 연산 마스크는 16개의 마스크 엘리먼트들 또는 비트들을 포함한다. 16개 마스크 비트들 각각은 더 넓은 목적지 오퍼랜드(725) 내의 패킹 데이터 결과의 상이한 결과 데이터 엘리먼트에 대응할 수 있다. 예시에서, 대응하는 데이터 엘리먼트들 및 그것의 대응하는 마스크 비트들은 서로에 대해 수직 정렬되어 있다. 마스크 비트들 각각은 바이너리 1(즉, 1)로 설정되거나, 또는 바이너리 0(즉, 0)로 클리어된다. 바이너리 1(즉, 1)로 설정된 마스크 비트 세트는 언마스킹된(un-masked) 비트들을 나타내는 반면, 바이너리 0(즉, 0)으로 클리어된 마스크 비트들은 마스킹된 비트들을 나타낸다.
512비트 결과 패킹 데이터가 마스킹된 전체 레지스터 액세스 패킹 데이터 연산에 응답하여 더 넓은 목적지 오퍼랜드(725)에 저장된다. 일부 실시예들에서, 512비트 결과 패킹 데이터가 전체 레지스터 기록 또는 저장을 통해 더 넓은 목적지 오퍼랜드(예를 들어, 512 비트 레지스터)에 저장된다. 일부 실시예들에서, 512비트 결과 패킹 데이터 및/또는 더 넓은 목적지 오퍼랜드(725)는 대응하는 부분적 레지스터 액세스 명령어에 의해 표시되는 더 좁은 128비트 목적지 오퍼랜드(724)를 포함한다. 이 특정 예에서, 마스킹된 전체 레지스터 액세스 패킹 데이터 연산은 제1 및 제2 더 넓은 소스 패킹 데이터로부터의 데이터 엘리먼트들의 대응하는 쌍들의 합들을 패킹 데이터 연산 마스크(708)의 대응하는 마스크 비트들로부터의 예측에 기초하여 더 넓은 목적지 오퍼랜드(725)에 결과 패킹 데이터로서 조건부로 저장하는 마스킹된 패킹 데이터 가산 연산이다. 주어진 마스크 비트가 설정될 때(즉, 1), 이후 대응하는 소스 데이터 엘리먼트들의 쌍의 합은 대응하는 결과 데이터 엘리먼트에 저장되도록 허용된다. 반면, 주어진 마스크 비트가 클리어될 때(즉, 0), 대응하는 소스 데이터 엘리먼트들의 쌍들의 합은 대응하는 결과 데이터 엘리먼트에 저장되도록 허용되지 않는다. 오히려, 일부 실시예들에서, 그 결과 데이터 엘리먼트 내의 원래/시작 값은 변경되지 않은 채 유지되거나 보존될 수 있다.
일부 실시예들에서, 더 좁은 목적지 오퍼랜드 내가 아닌 더 넓은 목적지 오퍼랜드 내의 결과 데이터 엘리먼트들에 대응하는 마스크 엘리먼트들은 모두 고의 로 마스킹 아웃될 수 있다. 일부 실시예들에서, 더 넓은 목적지 오퍼랜드 내가 아닌 더 좁은 목적지 오퍼랜드 내의 결과 데이터에 대응하는 모든 마스크 엘리먼트들은 (예를 들어, 부분적 레지스터 액세스 명령어 그 자체가 이들 결과 데이터 엘리먼트들 중 일부를 마스킹 아웃하기 위해 예측을 사용하지 않는 한) 모두 언마스크될 수 있다. 예를 들어, 더 좁은 목적지 오퍼랜드 내의 결과 데이터 엘리먼트들과 동일한 개수의 가장 낮은 순서 또는 최하위 마스크 비트들이 바이너리 1로 설정될 수 있는 반면, 더 좁은 목적지 오퍼랜드 내가 아닌 더 넓은 목적지 오퍼랜드 내의 결과 데이터 엘리먼트들과 동일한 개수의 가장 높은 순서 또는 최상위 마스크 비트들이 바이너리 0으로 클리어될 수 있다. 예시된 실시예를 다시 참조하면, 소스 패킹 데이터 연산 마스크는 최하위 포지션(오른쪽의)으로부터 최상위 포지션(왼쪽의)으로, 값들 1, 1, 1, 1, 0, 0...0을 가진다. 즉, 4개의 가장 낮은 순서 마스크 비트들이 설정되는 반면, 12개의 가장 높은 순서 마스크 비트들이 클리어된다. 마스크 비트들은 실행 시간에서 동적으로 결정될 수 있는 반면, 부분적 레지스터 액세스들은 일반적으로 컴파일 시간에서 정적으로 고정된다. 설정된 마스크 비트들 각각에 대해, 대응하는 데이터 엘리먼트에 합이 저장될 수 있다. 예를 들어, 도시된 바와 같이, 가장 낮은 순서의 4개의 결과 데이터 엘리먼트들은 값들 A1+B1, A2+B2, A3+B3, 및 A4+B4을 저장한다. 이 실시예에서, 원래 부분적 레지스터 액세스 명령어/연산(예를 들어, 도 6의 명령어/연산)에 관련된, 512 비트 오퍼랜드의 가장 낮은 순서의 128비트 부분 내의 모든 데이터 엘리먼트들이 모두 언마스크된다.
반면, 비트들 511:128 내의 모든 더 높은 순서의 데이터 엘리먼트들이 모두 마스킹 아웃되는데, 왜냐하면 이들이, 오직 128비트 오퍼랜드들만을 사용한 원래 부분적 레지스터 액세스 명령어/연산에 관련되지 않기 때문이다. 클리어된 마스크 비트들 각각에 대해, 합 이외의 또다른 값이 대응하는 결과 데이터 엘리먼트에 저장될 수 있다. 예를 들어, 소스가 목적지로서 재사용되는 일부 실시예들에서, 병합-마스킹(merging-masking)이 수행될 수 있으며, 여기서, 더 넓은 소스 패킹 데이터로부터의 데이터 엘리먼트의 대응하는 값이 주어진 마스킹 아웃된 결과 데이터 엘리먼트에 저장될 수 있다. 예를 들어, 예시에 도시된 바와 같이, 제1 더 넓은 소스 패킹 데이터의 비트들 511:128로부터의 값들 A5 내지 A16은 더 넓은 목적지 오퍼랜드의 비트들 511:128에 저장될 수 있다. 대안적으로, 또다른 실시예에서, 값들 B5 내지 B16은 더 넓은 목적지 오퍼랜드의 비트들 511:128에 저장될 수 있다. 다른 실시예들에서, 목적지가 소스 레지스터들과는 상이한 레지스터인 경우, 목적지의 마스킹 아웃된 결과 데이터 엘리먼트들 내의 원래 컨텐츠가 변경되지 않은 채 유지되거나 남을 수 있다. 유리하게는, 이들 클리어된 최상위 마스크 비트들이 오직 128비트 오퍼랜드들만을 사용한 원래 부분적 레지스터 액세스 명령어(예를 들어, 도 6의 명령어/연산)에 대해 요구되지 않은 더 넓은 512 비트 레지스터의 해당 부분을 마스킹 아웃시키기 위해 사용될 수 있다.
마스크 비트들은 상이한 방식들로 구현될 수 있다. 일 예로서, 일부 실시예들에서, 연산의 결과가 대응하는 결과 데이터 엘리먼트에 기록되도록 선택되거나, 또는 목적지 내의 대응하는 결과 데이터 엘리먼트의 원래 값(즉, 원래/시작 컨텐츠들)이 대응하는 결과 데이터 엘리먼트에 되기록(write back)되도록 선택될 수 있는 것 중 어느 하나인 선택 동작이 수행될 수 있다. 또다른 예로서, 다른 실시예들에서, 연산의 결과가 대응하는 결과 데이터 엘리먼트에 기록되는지의 여부를 마스크 비트가 조정하여 이에 의해 그것의 원래/시작 컨텐츠를 가지는 결과 데이터 엘리먼트를 남겨두는 조건부 기록이 수행될 수 있다.
이것이 더 좁은 오퍼랜드들을 표시하는 부분적 레지스터 액세스 패킹 데이터 명령어를 구현하기 위해 사용될 수 있는 더 넓은 오퍼랜드들에 대한 적절한 마스킹된 전체 레지스터 액세스 패킹 데이터 연산의 단지 일 예시적인 예라는 점이 이해될 것이다. 예를 들어, 감산, 곱셈, 나눗셈, 패킹 비교들 등과 같은, 2개의 소스 패킹 데이터에 대한 다른 연산들이 또한 적절하다. 또다른 적절한 연산들은 단일 소스 패킹 데이터 오퍼랜드들을 수반한다. 예들은, 패킹 시프트, 패킹 회전, 패킹 진폭 스케일링, 패킹 역수 제곱근 등을 포함하지만 이에 제한되지 않는다. 또다른 적절한 연산들은 둘보다 많은 소스 패킹 데이터, 상이한 사이즈들의 소스 패킹 데이터, 상이한 개수들의 데이터 엘리먼트들의 소스 패킹 데이터에 대한 연산들, 수평으로 또는 비-수직으로 정렬된 방식으로 수행되는 연산들, 부분적 스칼라 및 부분적 패킹 연산들, 및 당해 기술분야에 공지된 또다른 연산들을 포함한다.
다른 실시예들에서, 부분적 레지스터 액세스 명령어들/연산들 및/또는 이들을 구현하기 위해 사용된 대응하는 마스킹된 전체 레지스터 액세스 패킹 데이터 연산들은 레지스터에서 중간 비트들에 대해 동작할 수 있다. 예를 들어, 중간 비트들은 최하위 비트 범위(예를 들어, 하나 이상의 패킹 데이터 엘리먼트들) 및 최상위 비트 범위(예를 들어, 하나 이상의 패킹 데이터 엘리먼트들) 사이의 인접한 비트 범위를 나타낼 수 있다.
도 8은 부분적 레지스터 액세스 명령어에 응답하여 더 넓은 오퍼랜드들 상에 오버레이된 더 좁은 오퍼랜드들에 대해 수행될 수 있는 부분적 레지스터 액세스 동작(803)을 예시하는 블록도이다. 부분적 레지스터 액세스 명령어는 제1 더 좁은 소스 패킹 데이터(822-1)를 특정하거나 다른 방식으로 표시할 수 있고, 제2 더 좁은 소스 패킹 데이터(822-2)를 특정하거나 다른 방식으로 표시할 수 있고, 결과 패킹 데이터가 저장될 수 있는 더 좁은 목적지 오퍼랜드(824)(예를 들어, 저장 위치)를 특정하거나 다른 방식으로 표시할 수 있다. 예시된 예에서, 제1 더 좁은 소스 오퍼랜드, 제2 더 좁은 소스 오퍼랜드 및 더 좁은 목적지 오퍼랜드 각각은 128비트 폭이며, 2개의 64비트 데이터 엘리먼트들을 포함하지만, 본 발명의 범위는 그렇게 제한되지 않는다. 예시에서, 제1 더 좁은 소스 패킹 데이터는 최하위 포지션(오른쪽의)으로부터 최상위 포지션(왼쪽의)으로, 값들 A1 및 A2를 가진다. 유사하게, 제2 더 좁은 소스 패킹 데이터는 최하위 포지션(오른쪽의)으로부터 최상위 포지션(오른쪽의)으로, 값들 B1 및 B2를 가진다. 다른 예들은 더 좁은(예를 들어, 8비트 또는 16비트 등) 또는 더 넓은(예를 들어, 64비트) 데이터 엘리먼트들 중 어느 하나와 함께 다른 패킹 데이터 폭들(예를 들어, 64비트, 256비트, 512비트 등)을 사용할 수 있다.
더 좁은 128비트 오퍼랜드들이 더 넓은 레지스터들에 저장된다. 예시에서, 더 넓은 레지스터들은 256비트 레지스터들이다. 특히, 제1 더 좁은 소스 패킹 데이터(822-1)는 제1 256비트 레지스터(807-1)에 저장되고, 제2 더 좁은 소스 패킹 데이터(822-2)는 제2 256비트 레지스터(807-2)에 저장되고, 더 좁은 목적지 오퍼랜드(824)는 제3 256비트 레지스터(807-3)에 저장된다. 다른 실시예들에서, 예를 들어, 512비트 레지스터 또는 1024비트 레지스터와 같은 다른 레지스터 폭들이 사용될 수 있다. 제1 256비트 레지스터의 비트들 255:128은 값들 A3 및 A4를 저장한다. 유사하게, 제2 256비트 레지스터의 비트들 255:128은 값들 B3 및 B4를 저장한다.
명령어/연산에 응답하여 결과 패킹 데이터가 생성되어 더 좁은 목적지 오퍼랜드(824)에 저장된다. 예시된 예에서, 결과 패킹 데이터는 128비트 폭이며, 2개의 데이터 엘리먼트들을 포함한다. 비트들 63:0 내의 가장 낮은 순서의 데이터 엘리먼트는 제1 소스 패킹 데이터로부터 대응하는 데이터 엘리먼트의 값 A1을 포함한다. 이 경우, 이 데이터 엘리먼트를 생성하기 위한 어떠한 가산 연산도 수행되지 않았다. 비트들 127:64 내의 더 높은 순서의 데이터 엘리먼트는 제1 및 제2 소스 패킹 데이터로부터 대응하는 데이터 엘리먼트들의 쌍의 합을 나타내는 합 A2+B2를 포함한다. 128비트의 제1 및 제2 더 좁은 소스 패킹 데이터(822-1, 822-2)가 더 넓은 제1 및 제2 256 비트 레지스터들(807-1, 807-2)의 오직 일부분이므로, 더 좁은 소스 오퍼랜드들에 액세스하는 것은 부분적 레지스터 판독들을 수반할 수 있다. 또한, 더 좁은 128비트 결과 패킹 데이터 및/또는 더 좁은 128비트 목적지 오퍼랜드가 더 넓은 제3 256비트 레지스터(807-3)의 오직 일부이므로, 결과를 저장하는 것은 부분적 레지스터 기록을 수반할 수 있다. 예를 들어, 일부 실시예들에서, 제1 256비트 레지스터는 목적지 오퍼랜드로서 재사용될 수 있고, 합 A2+B2은 이 레지스터의 다른 기존의 컨텐츠를 덮어쓰지 않고(예를 들어, A1, A3 및 A4를 덮어쓰지 않고), 이 256비트 레지스터의 비트들 127:64에 저장될 수 있다. 이것은 부분적 레지스터 기록을 수반할 수 있다. 일부 실시예들에서, 이러한 부분적 레지스터 액세스들을 회피하거나 적어도 그 수를 감소시키는 것이 바람직할 수 있다.
도 9는 더 좁은 오퍼랜드들을 표시하는 부분적 레지스터 액세스 패킹 데이터 명령어에 응답하여 수행될 수 있는 더 넓은 오퍼랜드들에 대한 마스킹된 전체 레지스터 액세스 패킹 데이터 연산(940)의 예시적인 실시예의 블록도이다. 일부 실시예들에서, 프로세서 또는 프로세서의 일부(예를 들어, 디코딩 유닛)는 부분적 레지스터 액세스 패킹 데이터 명령어들에 의해 수행될 하나 이상의 부분적 레지스터 액세스들을 마스킹된 전체 레지스터 액세스 패킹 데이터 연산에 의해 수행되는 하나 이상의 대응하는 전체 레지스터 액세스들로 대체하기 위해, 부분적 레지스터 액세스 패킹 데이터 명령어를 마스킹된 전체 레지스터 액세스 패킹 데이터 연산에 매핑시킬 수 있다. 일부 실시예들에서, 도 9의 마스킹된 전체 레지스터 액세스 패킹 데이터 연산은 도 8의 부분적 레지스터 액세스 명령어 및/또는 연산을 구현하기 위해 사용될 수 있다.
마스킹된 전체 레지스터 액세스 패킹 데이터 연산은 부분적 레지스터 액세스 명령어에 의해 표시되는 제1 더 좁은 소스 패킹 데이터(922-1)를 가지는 제1 더 넓은 소스 패킹 데이터(923-1), 및 부분적 레지스터 액세스 명령어에 의해 표시되는 제2 더 좁은 소스 패킹 데이터(922-2)를 가지는 제2 더 넓은 패킹 데이터(923-2)를 사용할 수 있다. 예시된 실시예에서, 제1 및 제2 더 넓은 소스 패킹 데이터 각각은 256 비트 폭이고 4개의 64비트 데이터 엘리먼트들을 가지며, 제1 및 제2 더 좁은 소스 패킹 데이터 각각은 128비트 폭이며 2개의 64비트 데이터 엘리먼트들을 가지지만, 본 발명의 범위는 그렇게 제한되지는 않는다. 예시에서, 제1의 더 넓은 소스 패킹 데이터는, 최하위 포지션(오른쪽의)으로부터 최상위 포지션(왼쪽의)으로, 값들 A1, A2, A3 및 A4를 가진다. 예시에서, 제2 더 넓은 소스 패킹 데이터는, 최하위 포지션(오른쪽의)으로부터 최상위 포지션(왼쪽의)으로, 값들 B1, B2, B3 및 B4를 가진다. 다른 실시예들에서, 임의의 다른 적절한 더 넓은 그리고 더 좁은 소스 패킹 데이터 폭들이 대신 사용될 수 있다. 또한, 다른 실시예들에서, 다른 데이터 엘리먼트 폭들은 선택적으로 사용될 수 있다.
마스킹된 전체 레지스터 액세스 패킹 데이터 연산은 또한 소스 패킹 데이터 연산 마스크(908)를 사용할 수 있다. 예시된 실시예에서, 목적지 오퍼랜드 내의 4개의 데이터 엘리먼트들이 존재하므로, 4개의 대응하는 마스크 비트들이 존재한다. 이 예에서, 소스 패킹 데이터 연산 마스크는 최하위 포지션(오른쪽의)으로부터 최상위 포지션(왼쪽의)으로, 값들 0, 1, 0, 0을 가진다.
256비트 결과 패킹 데이터는 마스킹된 전체 레지스터 액세스 패킹 데이터 연산에 응답하여 더 넓은 목적지 오퍼랜드(925)에 저장된다. 일부 실시예들에서, 256비트 결과 패킹 데이터는 전체 레지스터 기록 또는 저장을 통해 더 넓은 목적지 오퍼랜드(예를 들어, 256비트 레지스터)에 저장된다. 일부 실시예들에서, 256비트 결과 패킹 데이터 및/또는 더 넓은 목적지 오퍼랜드(925)는 대응하는 부분적 레지스터 액세스 명령어에 의해 표시되는 더 좁은 128비트 목적지 오퍼랜드(924)를 포함한다. 도시된 바와 같이, 오직 하나의 합이 256비트 결과 패킹 데이터에 저장될 수 있다. 소위, 합 A2+B2는 목적지 오퍼랜드(925)의 비트들 127:64에 저장될 수 있다. 합 A2+B2이 저장될 목적지 오퍼랜드(925)의 비트들 127:64에 대응하는 오직 단일의 마스크 비트가 설정된다. 모든 다른 마스크 비트들이 클리어된다. 클리어된 마스크 비트들 각각에 대해, 제1 더 넓은 소스 패킹 데이터(923-1)로부터의 대응하는 데이터 엘리먼트의 값이 목적지 오퍼랜드(925)에 저장된다. 특히, 값 A1은 목적지 오퍼랜드의 비트들 63:0에 저장되며, 값 A3는 목적지 오퍼랜드의 비트들 191:128에 저장되며, 값 A4는 목적지 오퍼랜드의 비트들 255:192에 저장된다. 이들 다른 마스크 비트들은 이들이 원래 부분 레지스터 액세스 명령어/연산에 따라 단일의 합 A2+B2에 관련되지 않으므로 마스킹 아웃된다. 유리하게는, 이들 클리어된 최상위 마스크 비트들은 더 넓은 256 비트 레지스터의 일부분은 원래 부분적 레지스터 액세스 명령어(예를 들어, 도 8의 명령어/연산)을 위해 요구되는 더 넓은 256비트 레지스터의 해당 부분을 마스킹 아웃하고, 부분적 레지스터 액세스 대신 전체 레지스터 액세스가 수행되도록 허용할 수 있다. 전과 같이, 많은 다른 산술 및/또는 논리 연산들이 또한 적합하다.
도 6-7은 더 좁은 오퍼랜드들이 더 넓은 오퍼랜드들의 최하위 비트들을 점유하는 실시예를 도시한다. 도 8-9는 더 좁은 오퍼랜드들, 또는 관심 있는 더 좁은 오퍼랜드들의 적어도 일부분이 더 넓은 오퍼랜드들의 최하위 또는 최상위 종단들 사이의 중간 부분들을 점유하는 실시예를 도시한다. 또다른 실시예들에서, 더 좁은 오퍼랜드들은 더 넓은 오퍼랜드들의 최상위 부분들을 점유할 수 있다. 또다른 실시예들에서, 이러한 포지션들의 조합이 선택적으로 사용될 수 있다.
전술된 예들에서, 부분적 레지스터 액세스 명령어들/연산들이 데이터 엘리먼트들의 대응하는 쌍들(즉, 제1 및 제2 소스 오퍼랜드들 내의 대응하는 상대적 비트 포지션들 내의 것들)에 대해 동작하였다. 예시들에서, 데이터 엘리먼트들의 해당 대응하는 쌍들이 수직으로 정렬되었다. 다른 실시예들에서, 부분적 레지스터 액세스 명령어들/동작들은 적어도 일부 대응하지 않는 데이터 엘리먼트들(즉, 제1 및 제2 소스 오퍼랜드들 내의 대응하는 상대적 비트 포지션들 내에 있지 않는 데이터 엘리먼트들)에 대해 동작할 수 있다. 이러한 대응하지 않는 데이터 엘리먼트들은 미정렬되었다고 할 수 있다. 일부 실시예들에서, 시프트, 셔플, 치환, 또는 다른 데이터 재정렬 동작이 대응하지 않는 데이터 엘리먼트들을 정렬하는 것을 보조하기 위해 수행될 수 있고, 따라서, 이들은 제1 및 제2 소스 오퍼랜드들 내의 정렬된/대응하는 상대적 비트 포지션들 내에 있고, 따라서, 수직의 SIMD 연산들이 부분적 레지스터 액세스 명령어/연산을 구현하기 위해 사용되는 마스킹된 전체 레지스터 액세스 패킹 데이터 연산에 의해 제1 및 제2 소스 오퍼랜드들 내의 정렬된/대응하는 데이터 엘리먼트들에 대해 수행될 수 있다. 일부 실시예들에서, 데이터 재배열 동작이 제1 오퍼랜드, 또는 제1 오퍼랜드로부터의 하나 이상의 데이터 엘리먼트들을, 제2 오퍼랜드, 또는 제2 오퍼랜드로부터의 하나 이상의 데이터 엘리먼트들에 맞추고, 그리고/또는 목적지 오퍼랜드, 또는 목적지 오퍼랜드로부터의 하나 이상의 데이터 엘리먼트들에 맞춰 정렬하기 위해 사용될 수 있다. 일부 실시예들에서, 데이터 재배열 동작은 부분적 레지스터 액세스 패킹 데이터 명령어를 디코딩하고, 데이터 재배열 동작 및 마스킹된 전체 레지스터 액세스 패킹 데이터 연산을 통해 부분적 레지스터 액세스 패킹 데이터 명령어를 구현하도록 결정할 시에 디코더에 의해 결정될 수 있다.
하기에 기재된 도 10 및 11은 각각 이전에 기술된 도 8 및 9에 대한 특정 유사성들을 가진다. 기재를 모호하게 하는 것을 회피하기 위해, 하기의 논의는, 선택적으로 동일하거나 유사할 수 있는 모든 특징들 및/또는 양태들을 반복하지 않고 도 10 및 11의 새로운 또는 상이한 특징들 및/또는 양태들을 강조하려는 경향이 있을 것이다. 그러나, 도 8 및 9에 대해 이전에 기술된 선택적 특징들 및/또는 양태들 및 변형들이 일반적으로, 다른 방식으로 특정되거나, 또는 그렇지 않은 경우 명료하지 않은 한, 도 10 및 11에 대해 적용가능하다는 점이 이해될 것이다.
도 10은 부분적 레지스터 액세스 명령어에 응답하여, 더 넓은 오퍼랜드들에 오버레이된 더 좁은 오퍼랜드들의 대응하지 않는하는 그리고/또는 미정렬된 데이터 엘리먼트들에 대해 수행될 수 있는, 부분적 레지스터 액세스 동작(1003)을 예시하는 블록도이다. 부분적 레지스터 액세스 명령어는 제1 더 좁은 소스 패킹 데이터(1022-1), 제2 더 좁은 소스 패킹 데이터(1022-2), 및 더 좁은 목적지 오퍼랜드(1024)를 특정하거나 다른 방식으로 표시할 수 있다. 예시된 예에서, 제1 더 좁은 소스 오퍼랜드, 제2 더 좁은 소스 오퍼랜드, 및 더 좁은 목적지 오퍼랜드 각각은 128비트 폭이고 2개의 64비트 데이터 엘리먼트들을 포함하지만, 본 발명의 범위는 그렇게 제한되지 않는다. 예시에서, 제1 더 좁은 소스 패킹 데이터는 값들 A1 및 A2를 가진다. 유사하게, 제2 더 좁은 소스 패킹 데이터는 값들 B1 및 B2를 가진다. 제1 더 좁은 소스 패킹 데이터(1022-1)는 제1 더 넓은 256비트 레지스터(1007-1)에 저장되고, 제2 더 좁은 소스 패킹 데이터(1022-2)는 제2 더 넓은 256비트 레지스터(1007-2)에 저장되고, 더 좁은 목적지 오퍼랜드(1024)는 제3 더 넓은 256비트 레지스터(1007-3)에 저장된다. 제1 더 넓은 256비트 레지스터의 비트들 255:128은 값들 A3 및 A4를 저장한다. 유사하게, 제2 더 넓은 256비트 레지스터의 비트들 255:128은 값들 B3 및 B4를 저장한다.
명령어/연산에 응답하여 결과 패킹 데이터가 생성되어 더 좁은 목적지 오퍼랜드(1024)에 저장된다. 예시된 예에서, 결과 패킹 데이터는 128비트 폭이며, 2개의 데이터 엘리먼트들을 포함한다. 비트들 63:0 내의 가장 낮은 순서의 데이터 엘리먼트는 제1 소스 패킹 데이터 패킹 데이터로부터 대응하는 데이터 엘리먼트의 값 A1을 포함한다. 이 경우, 이 데이터 엘리먼트를 생성하기 위한 어떠한 가산 동작도 수행되지 않았다. 비트들 127:64 내의 더 높은 순서의 데이터 엘리먼트는 합 A2+B1를 포함한다. 이것이 제1 및 제2 더 좁은 소스 패킹 데이터 내의 대응하지 않는 데이터 엘리먼트들의 합이라는 점에 주목한다. 특히, 제1 더 좁은 소스 패킹 데이터의 비트들 127:64 내의 데이터 엘리먼트 A2는 제2 더 좁은 소스 패킹 데이터의 비트들 63:0 내의 데이터 엘리먼트 B1에 추가된다. 데이터 엘리먼트들 A2 및 B1은 제1 및 제2 소스 패킹 데이터 내의 대응하지 않는 또는 미정렬된 비트 포지션들을 점유한다.
도 11은 더 좁은 오퍼랜드들의 대응하지 않는 그리고/또는 미정렬된 데이터 엘리먼트들에 대한 연산들을 표시하는 부분적 레지스터 액세스 패킹 데이터 명령어에 응답하여 수행될 수 있는, 더 넓은 오퍼랜드들의 대응하는 및/또는 정렬된 데이터 엘리먼트들에 대해 수행될 수 있는 마스킹된 전체 레지스터 액세스 패킹 데이터 연산(1140)의 예시적인 실시예의 블록도이다. 일부 실시예들에서, 프로세서 또는 프로세서의 일부분(예를 들어, 디코딩 유닛)은 부분적 레지스터 액세스 패킹 데이터 명령어에 의해 수행될 하나 이상의 부분적 레지스터 액세스들을 마스킹된 전체 레지스터 액세스 패킹 데이터 연산에 의해 수행되는 하나 이상의 대응하는 전체 레지스터 액세스들로 대체하기 위해, 부분적 레지스터 액세스 패킹 데이터 명령어를 마스킹된 전체 레지스터 액세스 패킹 데이터 연산에 매핑할 수 있다. 일부 실시예들에서, 도 11의 대응하는 그리고/또는 정렬된 데이터 엘리먼트들을 수반하는 마스킹된 전체 레지스터 액세스 패킹 데이터 연산은 도 10의 대응하지 않는 그리고/또는 미정렬된 데이터 엘리먼트들을 수반하는 부분적 레지스터 액세스 명령어 및/또는 연산을 구현하기 위해 사용될 수 있다.
마스킹된 전체 레지스터 액세스 패킹 데이터 연산은 부분적 레지스터 액세스 명령어에 의해 표시되는 제1 더 좁은 소스 패킹 데이터(1122-1)를 가지는 제1 더 넓은 소스 패킹 데이터(1123-1), 및 부분적 레지스터 액세스 명령어에 의해 표시되는 제2 더 좁은 소스 패킹 데이터(1122-2)를 가지는 제2 더 넓은 소스 패킹 데이터(1123-2)를 사용할 수 있다. 예시된 실시예에서, 제1 및 제2 더 넓은 소스 패킹 데이터 각각은 256비트 폭이고 4개의 64비트 데이터 엘리먼트들을 가지며, 제1 및 제2 더 좁은 소스 패킹 데이터 각각은 128비트 폭이고 2개의 64 비트 데이터 엘리먼트들을 가지지만, 발명의 범위는 그렇게 제한되지 않는다. 예시에서, 제1 더 넓은 소스 패킹 데이터는 값들 A1, A2, A3, 및 A4을 가진다. 제2 더 넓은 소스 패킹 데이터는 값들 B1, B2, B3, 및 B4을 가진다. 다른 실시예들에서, 임의의 다른 적절한 더 넓은 그리고 더 좁은 소스 패킹 데이터 폭들 및/또는 임의의 다른 적절한 데이터 엘리먼트 폭들이 대신 선택적으로 사용될 수 있다.
일부 실시예들에서, 시프트, 셔플, 치환 및 다른 데이터 재배열 동작이 부분적 레지스터 액세스 명령어에 의해 그에 대해 수행될 것으로 표시된 대응하지 않는 그리고/또는 미정렬된 데이터 엘리먼트들을 정렬하는 것을 보조하도록 수행될 수 있고, 따라서 이들이 더 넓은 오퍼랜드들에 대해 마스킹된 전체 레지스터 액세스 패킹 데이터 연산에 의해 정렬된 방식으로 수행될 수 있다. 예를 들어, 시프트, 셔플, 치환 또는 다른 데이터 재배열 동작은 도 11의 마스킹된 전체 레지스터 액세스 패킹 데이터 연산 이전에 도 10의 부분적 레지스터 액세스 패킷 데이터 명령어/연산의 대응하지 않는 그리고/또는 미정렬된 데이터 엘리먼트들 A2 및 B1을 정렬하는 것을 보조하도록 수행될 수 있다. 도시된 바와 같이, 예시된 실시예에서, 제2 더 넓은 소스 패킹 데이터(1123-2)는 64비트만큼 시프트될 수 있고, 따라서, 값 B1을 가지는 데이터 엘리먼트는 제2 더 넓은 소스 패킹 데이터의 비트들 63:0 대신 제2 더 넓은 소스 패킹 데이터의 비트들 127:64 내에 있다. 이제, 값들 A2 및 B1은 대응하는 비트 포지션 내의 대응하는 데이터 엘리먼트들 내에 있고 그리고/또는 서로에 대해 정렬된다. 유리하게는, 이는 수직 타입 SIMD 연산(예를 들어, 패킹 가산)이 수행되도록 허용할 수 있다. 다른 실시예들에서, 시프트 대신, 회전, 셔플, 치환, 또는 회전, 또는 당해기술분야에 공지된 그리고 정렬을 달성하기 위해 요구되는 특정 재배열을 위해 적합한 다양한 다른 데이터 정렬 연산들과 같은 다른 데이터 재정렬 연산들이 수행될 수 있다.
일부 부분적 레지스터 액세스 명령어들/연산들(예를 들어, 도 6 및 8에 도시된 것들)에 대해, 어떠한 정렬 또는 데이터 재배열 동작도 요구되지 않을 수 있다. 일부 실시예들에 대해, 프로세서가 이러한 정렬 또는 데이터 재배열 동작을 사용하는 경우, 정렬 또는 데이터 재배열 동작은 그것이 요구되지 않을 때 무효화될 수 있다. 예를 들어, 실제 시프트 대신, 제로 비트 만큼의 시프트가 수행될 수 있다. 또다른 예로서, 셔플 또는 치환 동작은 데이터 엘리먼트들을 이들의 원래 시작 포지션들로 셔플 또는 치환시킬 수 있다.
마스킹된 전체 레지스터 액세스 패킹 데이터 동작은 또한 소스 패킹 데이터 연산 마스크(1108)를 사용할 수 있다. 예시된 실시예에서, 목적지 오퍼랜드 내에 4 개의 데이터 엘리먼트들이 존재하므로, 4개의 대응하는 마스크 비트들이 존재한다. 이 예에서, 소스 패킹 데이터 연산 마스크는, 최하위 포지션(오른쪽의)으로부터 최상위 포지션(왼쪽의)으로, 값들 0, 1, 0, 0을 가진다.
256비트 결과 패킹 데이터는 마스킹된 전체 레지스텨 액세스 패킹 데이터 동작에 응답하여 더 넓은 256비트 목적지 오퍼랜드(1125)에 저장된다. 일부 실시예들에서, 256비트 결과 패킹 데이터는 전체 레지스터 기록 또는 저장을 통해 더 넓은 목적지 오퍼랜드(예를 들어, 256비트 레지스터)에 저장된다. 일부 실시예들에서, 256비트 결과 패킹 데이터 및/또는 더 넓은 목적지 오퍼랜드(1125)는 대응하는 부분적 레지스터 액세스 명령어에 의해 표시되는 더 좁은 128비트 목적지 오퍼랜드(1124)를 포함한다. 도시된 바와 같이, 오직 단일의 합이 256 비트 결과 패킹 데이터에 저장될 수 있다. 소위, 합 A2+B1이 목적지 오퍼랜드(1125)의 비트들 127:64에 저장될 수 있다. 합 A2+B1이 저장될 목적지 오퍼랜드(1125)의 비트들 127:64에 대응하는 오직 단일 마스크 비트만이 설정된다. 모든 다른 마스크 비트들은 클리어된다. 클리어된 마스크 비트들 각각에 대해, 제1 더 넓은 소스 패킹 데이터(1123-1)로부터의 대응하는 데이터 엘리먼트의 값이 목적지 오퍼랜드(1125)에 저장된다. 특히, 값 A1은 목적지 오퍼랜드의 비트들 63:0에 저장되고, 값 A3는 목적지 오퍼랜드의 비트들 191:128에 저장되고, 값 A4는 목적지 오퍼랜드의 비트들 255:192에 저장된다. 이들 다른 마스크 비트들이 원래 부분적 레지스터 액세스 명령어/연산에 따른 단일의 합 A2+B1에 관련되지 않으므로, 이들 다른 마스크 비트들은 마스킹 아웃된다. 유리하게는, 이들 클리어된 최상위 마스크 비트들은 원래 부분적 레지스터 액세스 명령어(예를 들어, 도 10의 명령어/연산)을 위해 요구되지 않는 더 넓은 256비트 레지스터의 일부분을 마스킹 아웃하고, 부분적 레지스터 액세스 대신 전체 레지스터 액세스가 수행되도록 하기 위해 사용될 수 있다. 이전과 같이, 가산 이외의 많은 다른 산술 및/또는 논리 연산들이 또한/대안적으로 적절하다.
도 12는 패킹 데이터 연산 마스크 비트들의 수가 패킹 데이터 폭 및 패킹 데이터 엘리먼트 폭에 의존함을 예시하는 표(1250)이다. 128비트, 256비트 및 512비트의 패킹 데이터 폭들이 도시되어 있지만, 다른 폭들이 또한 가능하다. 8비트 바이트, 16비트 워드, 32비트 더블워드(dword) 또는 단일 정밀도 부동 소수점, 및 64비트 쿼드워드(Qword) 또는 배정밀도 부동 소수점의 패킹 데이터 엘리먼트 폭들이 고려되지만, 다른 폭들이 또한 가능하다. 도시된 바와 같이, 패킹 데이터 폭이 128비트일 때, 패킹 데이터 엘리먼트 폭이 8비트일 때 마스킹을 위해 16비트가 사용될 수 있고, 패킹 데이터 엘리먼트 폭이 16비트일 때 마스킹을 위해 8비트가 사용될 수 있고, 패킹 데이터 엘리먼트 폭이 32비트일 때 마스킹을 위해 4비트가 사용될 수 있고, 패킹 데이터 엘리먼트 폭이 64비트일 때 마스킹을 위해 2비트가 사용될 수 있다. 패킹 데이터 폭이 256비트일 때, 패킹 데이터 엘리먼트 폭이 8비트일 때 마스킹을 위해 32비트가 사용될 수 있고, 패킹 데이터 엘리먼트 폭이 16비트일 때 마스킹을 위해 16비트가 사용될 수 있고, 패킹 데이터 엘리먼트 폭이 32비트일 때 마스킹을 위해 8비트가 사용될 수 있고, 패킹 데이터 엘리먼트 폭이 64비트일 때 마스킹을 위해 4비트가 사용될 수 있다. 패킹 데이터 폭이 512비트일 때, 패킹 데이터 엘리먼트 폭이 8비트일 때 마스킹을 위해 64비트가 사용될 수 있고, 패킹 데이터 엘리먼트 폭이 16비트일 때 마스킹을 위해 32비트가 사용될 수 있고, 패킹 데이터 엘리먼트 폭이 32비트일 때 마스킹을 위해 16비트가 사용될 수 있고, 패킹 데이터 엘리먼트 폭이 64비트일 때 마스킹을 위해 8비트가 사용될 수 있다.
도 13은 패킹 데이터 연산 마스크 레지스터들(1308)의 적절한 세트의 예시적인 실시예의 블록도이다. 패킹 데이터 연산 마스크 레지스터들 각각은 패킹 데이터 연산 마스크를 저장하기 위해 사용될 수 있다. 예시된 실시예에서, 세트는 k0 내지 k7로 명명된 8개의 패킹 데이터 연산 마스크 레지스터들을 포함한다. 대안적인 실시예들은 8개보다 더 적거나(예를 들어, 2, 4, 7개 등) 8개보다 더 많은(예를 들어, 10, 16, 32개 등) 패킹 데이터 연산 마스크 레지스터들을 포함할 수 있다. 예시된 실시예에서, 패킹 데이터 연산 마스크 레지스터들 각각은 64비트이다. 대안적인 실시예들에서, 패킹 데이터 연산 마스크 레지스터들의 폭들은 64비트보다 더 넓거나(예를 들어, 128비트) 또는 64비트보다 더 좁을 수(예를 들어, 8비트, 16비트, 32비트 등) 있다. 패킹 데이터 연산 마스크 레지스터들은 공지된 기법들을 사용하여 상이한 방식들로 구현될수 있고, 임의의 공지된 특정 타입의 회로에 제한되지 않는다. 일부 실시예들에서, 패킹 데이터 연산 마스크 레지스터들은 아키텍쳐 레지스터들의 별도의 전용 세트일 수 있다. 일부 실시예들에서, 명령어들은 비트들 또는 필드 내의 패킹 데이터 연산 마스크 레지스터들을 인코딩하거나 특정할 수 있다. 예시로서, 8개의 패킹 데이터 연산 마스크 레지스터들 중 임의의 하나를 인코딩하거나 특정하기 위해 3개 비트들(예를 들어, 3비트 필드)을 사용할 수 있다. 대안적인 실시예들에서, 각각 더 적거나 더 많은 패킹 데이터 연산 마스크 레지스터들이 존재할 때 더 적거나 더 많은 비트들이 사용될 수 있다.
도 14는 패킹 데이터 연산 마스크 레지스터(1408)의 예시적인 실시예를 예시하며, 패킹 데이터 연산 마스크로서 그리고/또는 마스킹을 위해 사용되는 비트들의 수가 패킹 데이터 폭 및 데이터 엘리먼트 폭에 의존할 수 있음을 도시하는 다이어그램이다. 예시된 마스크 레지스터가 64비트 폭이지만, 이것이 요구되지는 않는다. 패킹 데이터 및 데이터 엘리먼트 폭들에 따라, 모든 64비트 또는 64비트의 서브세트만이 마스킹을 위해 사용될 수 있다. 일반적으로, 엘리먼트 당 단일의 마스크 비트가 사용될 때, 마스킹을 위해 사용되는 마스크 비트들의 수는 패킹 데이터 폭 나누기 패킹 데이터 엘리먼트 폭과 같다. 몇몇 예시적인 예들이 512비트 폭 패킹 데이터에 대해 도시되어 있다. 소위, 패킹 데이터 폭이 512비트이고 데이터 엘리먼트 폭이 64비트일 때, 레지스터의 8비트(예를 들어, 가장 낮은 순서의 8비트)만이 마스킹을 위해 사용된다. 패킹 데이터 폭이 512비트이고 데이터 엘리먼트 폭이 32비트일 때, 마스킹을 위해 16비트만이 사용된다. 패킹 데이터 폭이 512비트이고 데이터 엘리먼트 폭이 16비트일 때, 마스킹을 위해 32비트만이 사용된다. 패킹 데이터 폭이 512비트이고 데이터 엘리먼트 폭이 8비트일 때, 마스킹을 위해 모든 64비트가 사용된다. 예측된 명령어는 그 명령어 연관 패킹 데이터 및 데이터 엘리먼트 폭들에 기초한 마스킹을 위해 요구되는 비트들의 서브세트(예를 들어, 가장 낮은 순서의 또는 최하위 비트들의 서브세트)에만 액세스하고 그리고/또는 이들만을 이용할 수 있다. 예시된 실시예에서, 레지스터의 가장 낮은 순서의 서브세트 또는 일부분이 마스킹을 위해 사용되지만, 이것이 요구되지는 않는다. 대안적인 실시예들에서, 가장 높은 순서의 서브세트, 또는 일부 다른 서브세트가 선택적으로 사용될 수 있다. 또한, 예시된 실시예에서, 512비트 패킹 데이터 폭만이 고려되지만, 예를 들어, 256비트 및 128비트폭과 같은 다른 패킹 데이터 폭들에 대해 동일한 원리가 적용된다.
예시적인 코어 아키텍쳐들 , 프로세서들, 및 컴퓨터 아키텍쳐들
프로세서 코어들은 상이한 방식들로, 상이한 목적들로, 그리고 상이한 프로세서들에서 구현될 수 있다. 예를 들어, 이러한 코어들의 구현예들은: 1) 범용 컴퓨팅을 위해 의도된 범용 순차적 코어; 2) 범용 컴퓨팅을 위해 의도된 고성능 범용 비순차적 코어; 3) 그래픽 및/또는 과학(스루풋) 컴퓨팅에 대해 주로 의도되는 특수 목적 코어를 포함할 수 있다. 상이한 프로세서들의 구현예들은 1) 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 순차적 코어들 및/또는 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 비순차적 코어들을 포함하는 CPU; 및 2) 그래픽 및/또는 과학(스루풋)에 대해 주로 의도되는 하나 이상의 특수 목적 코어들을 포함하는 코프로세서를 포함할 수 있다. 이러한 상이한 프로세서들은, 1) CPU로부터 별도의 칩 상의 코프로세서; 2) CPU와 동일한 패키지 내의 별도의 다이 상의 코프로세서; 3) CPU와 동일한 다이 상의 코프로세서(어느 경우든, 이러한 코프로세서는 통합 그래픽 및/또는 과학(스루풋) 로직과 같은 특수 목적 로직으로서, 또는 특수 목적 코어들로서 때때로 지칭됨); 및 4) 기재된 CPU(때때로, 응용 코어(들) 또는 응용 프로세서(들)로서 지칭됨), 전술된 코프로세서, 또는 추가적인 기능성을 동일한 다이 상에 포함할 수 있는 시스템 온 어 칩을 포함할 수 있는, 상이한 컴퓨터 시스템 아키텍쳐들을 야기한다. 예시적인 코어 아키텍쳐들이, 예시적인 프로세서들 및 컴퓨터 아키텍쳐들의 기재에 선행하여 다음에 기재된다.
예시적인 코어 아키텍쳐들
순차적 및 비순차적 코어 블록도
도 15a는 본 발명의 실시예들에 따른 예시적인 순차적 파이프라인 및 예시적인 레지스터 리네이밍의, 비순차적 발행/실행 파이프라인 모두를 예시하는 블록도이다. 도 15b는 본 발명의 실시예들에 따라 프로세서에 포함될 순차적 아키텍쳐 코어 및 예시적인 레지스터 리네이밍의, 비순차적 발행/실행 아키텍쳐 코어 모두를 예시하는 블록도이다. 도 15a-b 내의 실선 박스들은 순차적 파이프라인 및 순차적 코어를 예시하는 반면, 파선 박스들의 선택적 추가는 비순차적 발행/실행 파이프라인 및 코어의 레지스터 리네이밍을 예시한다. 순차적 양태가 비순차적 양태의 서브세트인 경우, 비순차적 양태가 기술될 것이다.
도 15a에서, 프로세서 파이프라인(1500)은 페치 스테이지(1502), 길이 디코딩 스테이지(1504), 디코딩 스테이지(1506), 할당 스테이지(1508), 리네이밍 스테이지(1510), 스케쥴링(또한 디스패치(dispatch) 또는 발행으로서 공지됨) 스테이지(1512), 레지스터 판독/메모리 판독 스테이지(1514), 실행 스테이지(1516), 기록 백/메모리 기록 스테이지(1518), 예외 핸들링 스테이지(1522), 및 커밋(commit) 스테이지(1524)를 포함한다.
도 15b는 실행 엔진 유닛(1550)에 결합된 프론트 엔드 유닛(1530)을 포함하는 프로세서 코어(1590)를 도시하며, 둘 모두는 메모리 유닛(1570)에 결합된다. 코어(1590)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안적 코어 타입일 수 있다. 또다른 옵션으로서, 코어(1590)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, 범용 컴퓨팅 그래픽 프로세싱 유닛(GPGPU) 코어, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프론트 엔드 유닛(1530)은 명령어 캐시 유닛(1534)에 결합된 분기 예측 유닛(1532)을 포함하고, 명령어 캐시 유닛은 명령어 트랜스레이션 색인 버퍼(TLB)(1536)에 결합되고, 명령어 트랜스레이션 색인 버퍼(TLB)는 명령어 페치 유닛(1538)에 결합되고, 명령어 페치 유닛은 디코딩 유닛(1540)에 결합된다. 디코딩 유닛(1540)(또는 디코더)는 명령어들을 디코딩하고, 출력으로서 하나 이상의 마이크로-오퍼레이션들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들, 또는 원래 명령어들로부터 디코딩되거나 원래 명령어들을 다른 방식으로 반영하거나 원래 명령어들로부터 유도되는 다른 제어 신호들을 생성할 수 있다. 디코딩 유닛(1540)은 다양한 상이한 메커니즘들을 사용하여 구현될 수 있다. 적절한 메커니즘의 예들은, 룩업 테이블, 하드웨어 구현예들, 프로그램가능한 논리 어레이(PLA)들, 마이크로코드 판독 전용 메모리(ROM)들 등을 포함하지만 이에 제한되지 않는다. 일 실시예에서, 코어(1590)는 특정 매크로 명령어들에 대한 마이크로코드를 (예를 들어, 디코딩 유닛(1540)에 또는 다른 방식으로 프론트엔드 유닛(1530) 내에) 저장하는 마이크로코드 ROM 또는 다른 매체를 포함한다. 디코딩 유닛(1540)은 실행 엔진 유닛(1550) 내의 리네임/할당기 유닛(1552)에 결합된다.
실행 엔진 유닛(1550)은 리타이어먼트 유닛(1554) 및 하나 이상의 스케쥴러 유닛(들)(1556)의 세트에 결합된 리네임/할당기 유닛(1552)을 포함한다. 스케쥴러 유닛(들)(1556)은 예약 스테이션들, 중앙 명령어 윈도우 등을 포함하는 임의의 개수의 상이한 스케쥴러들을 나타낸다. 스케쥴러 유닛(들)(1556)은 물리적 레지스터 파일(들) 유닛(들)(1558)에 결합된다. 물리적 레지스터 파일(들) 유닛들(1558) 각각은 하나 이상의 물리적 레지스터 파일들을 나타내며, 이들 중 상이한 것들이 스칼라 정수, 스칼라 부동 소수점, 패킹 정수, 패킹 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 타입들을 저장한다. 일 실시예에서, 물리적 레지스터 파일(들) 유닛(1558)은 벡터 레지스터 유닛, 기록 마스크 레지스터 유닛, 및 스칼라 레지스터 유닛을 포함한다. 이들 레지스터 유닛들은 아키텍쳐 벡터 레지스터들, 벡터 마스크 레지스터들, 및 범용 레지스터들을 제공할 수 있다. 물리적 레지스터 파일(들) 유닛(들)(1558)은 레지스터 리네이밍 및 비순차적 실행이 (예를 들어, 재순서 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 사용하여; 향후 파일(들), 이력 버퍼(들), 및 리타이어먼트 레지스터 파일(들)을 사용하여; 레지스터 맵들 및 레지스터들의 풀(pool)을 사용하여, 등) 구현될 수 있는 다양한 방식들을 예시하기 위해 리타이어먼트 유닛(1554)에 의해 오버랩된다. 리타이어먼트 유닛(1554) 및 물리적 레지스터 파일(들) 유닛(들)(1558)은 실행 클러스터(들)(1560)에 결합된다. 실행 클러스터(들)(1560)은 하나 이상의 실행 유닛들(1562)의 세트 및 하나 이상의 메모리 액세스 유닛들(1564)의 세트를 포함한다. 실행 유닛(1562)은 다양한 동작들(예를 들어, 시프트, 가산, 감산, 곱셈)을 다양한 타입들의 데이터(예를 들어, 스칼라 부동 소수점, 패킹 정수, 패킹 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 수행할 수 있다. 일부 실시예들이 특정 기능들 또는 특정 기능들의 세트들에 대해 전용인 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 모두가 모든 기능들을 수행하는 오직 하나의 실행 유닛 또는 다수의 실행 유닛들을 포함할 수 있다. 스케쥴러 유닛(들)(1556), 물리적 레지스터 파일(들) 유닛(들)(1558), 및 실행 클러스터(들)(1560)은, 특정 실시예들이 특정 타입들의 데이터/동작들에 대한 별도의 파이프라인들(예를 들어, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹 정수/패킹 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 각각이 자신만의 스케쥴러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 가지는 메모리 액세스 파이프라인 - 별도의 메모리 액세스 파이프라인의 경우, 이 파이프라인의 실행 유닛만이 메모리 액세스 유닛(들)(1564)을 가지는 특정 실시예들이 구현됨)을 생성하므로, 가능하게는 복수로서 도시된다. 별도의 파이프라인들이 사용되는 경우, 이들 파이프라인들 중 하나 이상이 비순차적 발행/실행일 수 있고, 나머지가 순차적이라는 점이 이해되어야 한다.
메모리 액세스 유닛들(1564)의 세트는 레벨 2(L2) 캐시 유닛(1576)에 결합된 데이터 캐시 유닛(1574)에 결합된 데이터 TLB 유닛(1572)을 포함하는 메모리 유닛(1570)에 결합된다. 일 예시적인 실시예에서, 메모리 액세스 유닛들(1564)은 로드 유닛, 저장 어드레스 유닛, 저장 데이터 유닛을 포함할 수 있는데, 이들 각각은 메모리 유닛(1570) 내의 데이터 TLB 유닛(1572)에 결합된다. 명령어 캐시 유닛(1534)은 메모리 유닛(1570) 내의 레벨 2(L2) 캐시 유닛(1576)에 더 결합된다. L2 캐시 유닛(1576)은 하나 이상의 다른 레벨들의 캐시에, 그리고 결국에는 주 메모리에 결합된다.
예시로서, 예시적인 레지스터 리네이밍의, 비순차적 발행/실행 코어 아키텍쳐가 다음과 같이 파이프라인(1500)을 구현할 수 있다: 1) 명령어 페치(1538)는 페치 및 길이 디코딩 스테이지들(1502 및 1504)을 수행한다; 2) 디코딩 유닛(1540)은 디코딩 스테이지(1506)를 수행한다; 3) 리네임/할당기 유닛(1552)은 할당 스테이지(1508) 및 리네이밍 스테이지(1510)를 수행한다; 4) 스케쥴러 유닛(들)(1556)은 스케쥴 스테이지(1512)를 수행한다; 5) 물리적 레지스터 파일(들) 유닛(들)(1558) 및 메모리 유닛(1570)은 레지스터 판독/메모리 판독 스테이지(1514)를 수행한다; 실행 클러스터(1560)는 실행 스테이지(1516)를 수행한다; 6) 메모리 유닛(1570) 및 물리적 레지스터 파일(들) 유닛(들)(1558)은 되기록/메모리 기록 스테이지(1518)를 수행한다; 7) 다양한 유닛들이 예외 핸들링 스테이지(1522)에서 수반될 수 있다; 8) 리타이어먼트 유닛(1554) 및 물리적 레지스터 파일(들) 유닛(들)(1558)이 커밋 스테이지(1524)를 수행한다.
코어(1590)는 본원에 기재된 명령어(들)을 포함하여, 하나 이상의 명령어 세트들(예를 들어, (더 새로운 버전과 함께 추가된 일부 확장들을 가지는) x86 명령어 세트); CA, Sunnyvale의 MIPS Technologies의 MIPS 명령어 세트; (CA, Sunnyvale의 ARM Holdings의 NEON과 같은 선택적인 추가적 확장들을 가지는) ARM 명령어 세트를 지원할 수 있다. 일 실시예에서, 코어(1590)는 패킹 데이터 명령어 세트 확장(예를 들어, AVX1, AVX2)를 지원하여, 이에 의해 많은 멀티미디어 애플리케이션들에 의해 사용되는 동작들이 패킹 데이터를 사용하여 수행되게 하는 로직을 포함한다.
코어가 멀티스레딩(동작들 또는 스레드들의 둘 이상의 병렬 세트들의 실행)을 지원할 수 있고, 타임 슬라이스 멀티스레딩, 동시적 멀티스레딩(여기서, 단일의 물리적 코어는 물리적 코어가 동시에 멀티스레딩하는 스레드들 각각에 대한 논리적 코어를 제공함), 또는 이들의 조합(예를 들어, 타임 슬라이스 페치 및 디코딩 및 Intel® Hyperthreading technology에서와 같은 향후의 동시적 멀티스레딩)을 포함하는 다양한 방식들로 그렇게 수행할 수 있다는 점이 이해되어야 한다.
레지스터 리네이밍이 비순차적 실행의 맥락에서 기술되었지만, 레지스터 리네이밍이 순차적 아키텍쳐에서 사용될 수 있다는 점이 이해되어야 한다. 프로세서의 예시된 실시예가 또한 별도의 명령어 및 데이터 캐시 유닛들(1534/1574) 및 공유된 L2 캐시 유닛(1576)을 포함하지만, 대안적인 실시예들이 예를 들어, 레벨 1(L1) 내부 캐시 또는 다수의 레벨들의 내부 캐시와 같은, 명령어들 및 데이터 모두에 대한 단일 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 내부 캐시 및 코어 및/또는 프로세서에 대해 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 대안적으로, 모든 캐시는 코어 및/또는 프로세서에 대해 외부에 있을 수 있다.
특정 예시적인 순차적 코어 아키텍쳐
도 16a-b는 코어가 칩 내의 (동일한 타입 및/또는 상이한 타입들의 다른 코어들을 포함하는) 몇몇 논리 블록들 중 하나일, 더욱 구체적인 예시적인 순차적 코어 아키텍쳐의 블록도를 예시한다. 논리 블록들은 애플리케이션에 따라, 일부 고정 기능 로직, 메모리 I/O 인터페이스들, 및 다른 필요한 I/O 로직과 고대역폭 인터커넥트 네트워크(예를 들어, 링 네트워크)를 통해 통신한다.
도 16a는 발명의 실시예들에 따른, 온-다이 인터커넥트 네트워크(1602)와 함께, 그리고 그것의 레벨 2(L2) 캐시(1604)의 로컬 서브세트와 함께, 단일 프로세서 코어의 블록도이다. 일 실시예에서, 명령어 디코더(1600)는 패킹 데이터 명령어 세트 확장을 가지는 x86 명령어 세트를 지원한다. L1 캐시(1606)는 스칼라 및 벡터 유닛들 내로의 캐시 메모리에 대한 낮은 레이턴시 액세스들을 허용한다. (설계를 단순화하기 위한) 일 실시예에서, 스칼라 유닛(1608) 및 벡터 유닛(1610)이 별도의 레지스터 세트들(각각, 스칼라 레지스터들(1612) 및 벡터 레지스터들(1614))을 사용하고, 그 사이에 전달된 데이터가 메모리에 기록되고 이후 레벨 1(L1) 캐시(1606)로부터 다시 판독되지만, 발명의 대안적인 실시예들은 상이한 방식을 사용할 수 있다.(예를 들어, 단일 레지스터 세트를 사용하거나 또는 되기록 및 재판독되지 않고 2개의 레지스터 파일들 사이에서 데이터가 전달되게 하는 통신 경로를 포함함).
L2 캐시(1604)의 로컬 서브세트는 프로세서 코어 당 하나인, 별도의 로컬 서브세트들로 분할되는 글로벌 L2 캐시의 일부분이다. 각각의 프로세서 코어는 L2 캐시(1604)의 자신의 로컬 서브세트에 대한 직접 액세스 경로를 가진다. 프로세서 코어에 의해 판독된 데이터는 그것의 L2 캐시 서브세트(1604)에 저장되고, 자신만의 로컬 L2 캐시 서브세트들에 액세스하는 다른 프로세서 코어들과 병렬로, 신속하게 액세스될 수 있다. 프로세서 코어에 의해 기록된 데이터는 자신만의 L2 캐시 서브세트(1604)에 저장되고, 필요한 경우, 다른 서브세트들로부터 플러싱된다. 링 네트워크는 공유된 데이터에 대한 코히어런시(coherency)를 보장한다. 링 네트워크는 프로세서 코어, L2 캐시 및 다른 논리 블록들과 같은 에이전트들이 칩 내에서 서로 통신하게 하도록 양방향성이다. 각각의 링 데이터 경로는 방향 당 1012 비트폭이다.
도 16b는 본 발명의 실시예들에 따른 도 16a의 프로세서 코어의 일부분의 확대도이다. 도 16b는 L1 캐시(1604)의 L1 데이터 캐시(1606A) 부분, 뿐만 아니라, 벡터 유닛(1610) 및 벡터 레지스터들(1614)에 관한 상세항목들을 포함한다. 구체적으로, 벡터 유닛(1610)은 16-와이드 벡터 프로세싱 유닛(VPU)(16-와이드 ALU(1628)을 참조)이며, 이는 정수, 단일-정밀도 부동(float), 배정밀도 부동 명령어들 중 하나 이상을 실행한다. VPU는 스위즐(swizzle) 유닛(1620)을 이용한 레지스터 입력들의 스위즐링, 수치 변환 유닛들(1622A-B)을 이용한 수치 변환, 및 메모리 입력에 대한 복제 유닛(1624)을 통한 복제를 지원한다. 기록 마스크 레지스터들(1626)은 결과 벡터 기록들의 예측을 허용한다.
통합 메모리 제어기 및 그래픽들을 가지는 프로세서
도 17은 본 발명의 실시예들에 따라 하나보다 많은 코어를 가질 수 있고, 통합 메모리 제어기를 가질 수 있고, 통합 그래픽들을 가질 수 있는 프로세서(1700)의 블록도이다. 도 17 내의 실선 박스들은 단일 코어(1702A), 시스템 에이전트(1710), 하나 이상의 버스 제어기 유닛들(1716)의 세트를 가지는 프로세서(1700)를 예시하지만, 파선 박스들의 선택적 추가는 다수의 코어들(1702A-N), 시스템 에이전트 유닛(1710) 내의 하나 이상의 통합 메모리 제어기 유닛(들)(1714)의 세트, 및 특수 목적 로직(1708)을 가지는 대안적인 프로세서(1700)를 예시한다.
따라서, 프로세서(1700)의 상이한 구현예들은: 1) 통합 그래픽 및/또는 과학 (스루풋) 로직인 특수 목적 로직(1708)(하나 이상의 코어들을 포함할 수 있음), 및 하나 이상의 범용 코어들인 코어들(1702A-N)(예를 들어, 범용 순차적 코어들, 범용 비순차적 코어들, 이들 둘의 조합)을 가지는 CPU; 2) 그래픽 및/또는 과학 (스루풋)에 대해 주로 의도되는 다수의 특수 목적 코어들인 코어들(1702A-N)을 가지는 코프로세서; 및 3) 다수의 범용 순차적 코어들인 코어들(1702A-N)을 가지는 코프로세서를 포함할 수 있다. 따라서, 프로세서(1700)는 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(범용 그래픽 프로세싱 유닛), 고스루풋 다수 통합 코어(MIC) 코프로세서(30개 이상의 코어들을 포함함) 임베디드 프로세서 등과 같은, 범용 프로세서, 코프로세서, 또는 특수 목적 프로세서일 수 있다. 프로세서는 하나 이상의 칩들 상에서 구현될 수 있다. 프로세서(1700)는 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세스 기술들의 일부일 수 있고 그리고/또는 이들 중 임의의 기술을 사용하여 하나 이상의 기판들 상에 구현될 수 있다.
메모리 계층은 코어들 내의 캐시의 하나 이상의 레벨들, 세트 또는 하나 이상의 공유 캐시 유닛들(1706), 및 통합 메모리 제어기 유닛(1714)의 세트에 결합된 외부 메모리(미도시)를 포함한다. 공유 캐시 유닛들(1706)의 세트는 하나 이상의 중간 레벨 캐시들, 예컨대, 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 캐시의 다른 레벨들의 캐시, 마지막 레벨 캐시(LLC), 및/또는 이들의 조합들을 포함할 수 있다. 일 실시예에서, 링 기반 인터커넥트 유닛(1712)이 통합 그래픽 로직(1708), 공유 캐시 유닛들(1706)의 세트, 및 시스템 에이전트 유닛(1710)/통합 메모리 제어기 유닛(들)(1714)을 인터커넥트시키지만, 대안적인 실시예들은 이러한 유닛들을 인터커넥트시키기 위한 임의의 개수의 공지된 기법들을 사용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛들(1706) 및 코어들(1702-A-N) 사이에 코히어런시가 유지된다.
일부 실시예들에서, 코어들(1702A-N) 중 하나 이상은 멀티스레딩이 가능하다. 시스템 에이전트(1710)는 코어들(1702A-N)을 조정하고 동작시키는 컴포넌트들을 포함한다. 시스템 에이전트 유닛(1710)은 예를 들어, 전력 제어 유닛(PCU) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1702A-N) 및 통합 그래픽 로직(1708)의 전력 상태를 조절하기 위해 필요한 로직 및 컴포넌트들일 수 있거나 이를 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부적으로 접속된 디스플레이들을 구동하기 위한 것이다.
코어들(1702A-N)은 아키텍쳐 명령어 세트의 견지에서 동종이거나 이종일 수 있는데, 즉, 코어들(1702A-N) 중 둘 이상은 동일한 명령어 세트를 실행할 수 있는 반면, 다른 것들은 오직 그 명령어 세트의 서브세트 또는 상이한 명령어 세트만을 실행할 수 있다.
예시적인 컴퓨터 아키텍쳐들
도 18-21은 예시적인 컴퓨터 아키텍쳐들의 블록도들이다. 랩톱, 데스크톱, 핸드헬드 PC, 개인용 디지털 보조 단말, 엔지니어링 워크스테이션, 서버, 네트워크 디바이스, 네트워크 허브, 스위치, 임베디드 프로세서, 디지털 신호 프로세서(DSP), 그래픽 디바이스, 비디오 게임 디바이스, 셋톱 박스, 마이크로제어기, 셀 폰, 휴대용 미디어 플레이어, 핸드헬드 디바이스, 및 다양한 다른 전자 디바이스들에 대해 당해 기술분야에 공지되어 있는 다른 시스템 설계들 및 구성들이 또한 적절하다. 일반적으로, 본원에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직을 포함할 수 있는 매우 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적절하다.
이제 도 18을 참조하면, 본 발명의 일 실시예에 따른 시스템(1800)의 블록도가 도시되어 있다. 시스템(1800)은, 제어기 허브(1820)에 결합된 하나 이상의 프로세서들(1810, 1815)을 포함할 수 있다. 일 실시예에서, 제어기 허브(1820)는 그래픽 메모리 제어기 허브(GMCH)(1890) 및 입력/출력 허브(IOH)(1850)(이는 별도의 칩들 상에 있을 수 있음)를 포함하고; GMCH(1890)는 메모리(1840) 및 코프로세서(1845)에 결합된 메모리 및 그래픽 제어기를 포함하고; IOH(1850)는 입력/출력(I/O) 디바이스(1860)를 GMCH(1890)에 결합시킨다. 대안적으로, 메모리 및 그래픽 제어기들 중 하나 또는 둘 모두가 (본원에 기재된 바와 같은) 프로세서 내에 통합되고, 메모리(1840) 및 코프로세서(1845)는 프로세서(1810)에 직접 결합되고, 그리고, IOH(1850)를 가지는 단일 칩 내의 제어기 허브(1820)에 결합된다.
추가적인 프로세서들(1815)의 선택적 속성은 도 18에 파선으로 표기되어 있다. 각각의 프로세서(1810, 1815)는 본원에 기술된 프로세싱 코어들 중 하나 이상을 포함할 수 있고, 프로세서(1700)의 일부 버전일 수 있다.
메모리(1840)는, 예를 들어, 동적 랜덤 액세스 메모리(DRAM), 상 변화 메모리(PCM), 또는 이들 둘의 조합일 수 있다. 적어도 일 실시예에서, 제어기 허브(1820)는 프론트사이드 버스(FSB)와 같은 멀티-드롭 버스, QuickPath Interconnect (QPI)와 같은 포인트-대-포인트 인터페이스, 또는 유사한 접속(1895)을 통해 프로세서(들)(1810, 1815)와 통신한다.
일 실시예에서, 코프로세서(1845)는 예를 들어, 고스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 일 실시예에서, 제어기 허브(1820)는 통합 그래픽 가속계를 포함할 수 있다.
아키텍쳐, 마이크로아키텍쳐, 열, 전력 소모 특성들 등을 포함하는 장점에 대한 메트릭들의 범위의 견지에서, 물리적 자원들(1810, 1815) 사이에 다양한 차이들이 존재한다.
일 실시예에서, 프로세서(1810)는 일반적 타입의 데이터 프로세싱 동작들을 제어하는 명령어들을 실행한다. 명령어들 내에 코프로세서 명령어들이 내장될 수 있다. 프로세서(1810)는 이들 코프로세서 명령어들을, 부착된 코프로세서(1845)에 의해 실행되어야 하는 타입인 것으로 인지한다. 따라서, 프로세서(1810)는 이들 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서 버스 또는 다른 인터커넥트 상에서 코프로세서(1845)에 발행한다. 코프로세서(들)(1845)는 수신된 코프로세서 명령어들을 수용하여 실행한다.
이제 도 19를 참조하면, 본 발명의 실시예에 따른 제1 보다 구체적인 예시적인 시스템(1900)의 블록도가 도시되어 있다. 도 19에 도시된 바와 같이, 멀티프로세서 시스템(1900)은 포인트-대-포인트 인터커넥트 시스템이며, 포인트-대-포인트 인터커넥트(1950)를 통해 결합된 제1 프로세서(1970) 및 제2 프로세서(1980)를 포함한다. 프로세서들(1970 및 1980) 각각은 프로세서(1700)의 일부 버전일 수 있다. 발명의 일 실시예에서, 프로세서들(1970 및 1980)은 각각 프로세서들(1810 및 1815)인 반면, 코프로세서(1938)는 코프로세서(1845)이다. 또다른 실시예에서, 프로세서들(1970 및 1980)는 각각 프로세서(1810) 및 코프로세서(1845)이다.
각각, 통합 메모리 제어기(IMC) 유닛들(1972 및 1982)을 포함하는 프로세서들(1970 및 1980)이 도시되어 있다. 프로세서(1970)는 또한 그것의 버스 제어기 유닛의 일부로서 포인트-대-포인트(P-P) 인터페이스들(1976 및 1978)을 포함하고; 유사하게, 제2 프로세서(1980)는 P-P 인터페이스들(1986 및 1988)을 포함한다. 프로세서들(1970, 1980)은 P-P 인터페이스 회로들(1978, 1988)을 사용하여 포인트-대-포인트(P-P) 인터페이스(1950)를 통해 정보를 교환할 수 있다. 도 19에 도시된 바와 같이, IMC들(1972 및 1982)은 프로세서들을, 각각의 프로세서에 국부적으로 부착된 주메모리의 일부분들일 수 있는 각각의 메모리, 소위 메모리(1932 및 메모리(1934)에 결합시킨다.
프로세서들(1970, 1980)은 각각, 포인트 대 포인트 인터페이스 회로들(1976, 1994, 1986, 1998)을 사용하여 개별 P-P 인터페이스들(1952, 1954)을 통해 칩셋(1990)과 정보를 교환할 수 있다. 칩셋(1990)은 선택적으로 고성능 인터페이스(1939)를 통해 코프로세서(1938)와 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(1938)는, 예를 들어, 고스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유 캐시(미도시)가 어느 한 프로세서 내에 또는 두 프로세서들 모두의 외부에 포함되지만, 여전히 P-P 인터커넥트를 통해 프로세서들과 접속될 수 있으며, 따라서, 어느 한 프로세서 또는 두 프로세서 모두의 로컬 캐시 정보는 프로세서가 저전력 모드에 놓이는 경우 공유 캐시에 저장될 수 있다.
칩셋(1990)은 인터페이스(1996)를 통해 제1 버스(1916)에 결합될 수 있다. 일 실시예에서, 제1 버스(1916)는 주변 컴포넌트 인터커넥트(PCI) 버스, 또는 PCI 익스프레스 버스 또는 또다른 제3 세대 I/O 인터커넥트 버스와 같은 버스일 수 있지만, 본 발명의 범위는 그렇게 제한되지 않는다.
도 19에 도시된 바와 같이, 다양한 I/O 디바이스들(1914)은 제1 버스(1916)를 제2 버스(1920)에 결합시키는 버스 브리지(1918)와 함께, 제1 버스(1916)에 결합될 수 있다. 일 실시예에서, 하나 이상의 추가 프로세서(들)(1915), 예컨대, 코프로세서들, 고스루풋 MIC 프로세서들, GPGPU들, 가속계들(예를 들어, 그래픽 가속계들 또는 디지털 신호 프로세싱(DSP) 유닛들과 같은), 필드 프로그램가능 게이트 어레이들, 도는 임의의 다른 프로세서가 제1 버스(1916)에 결합된다. 일 실시예에서, 제2 버스(1920)는 로우 핀 카운트(LPC) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(1922), 통신 디바이스들(1927) 및 명령어들/코드 및 데이터(1930)를 포함할 수 있는 디스크 드라이브 및 다른 대용량 저장 디바이스와 같은 저장 유닛(1928)을 포함하는 다양한 디바이스들이 제2 버스(1920)에 결합될 수 있다. 또한, 오디오 I/O(1924)는 제2 버스(1920)에 결합될 수 있다. 다른 아키텍쳐들이 가능하다는 점에 유의한다. 예를 들어, 도 19의 포인트-대-포인트 아키텍쳐 대신, 시스템은 멀티-드롭 버스 또는 다른 이러한 아키텍쳐를 구현할 수 있다.
이제 도 20을 참조하면, 본 발명의 실시예에 따른 제2 보다 구체적인 예시적인 시스템(2000)의 블록도가 도시되어 있다. 도 19 및 20에서의 동일한 엘리먼트들은 동일한 참조 번호들을 가지며, 도 19의 특정 양태들은 도 20의 다른 양태들을 모호하게 하는 것을 회피하기 위해 도 20으로부터 생략되었다.
도 20은 프로세서들(1970, 1980)이 각각 통합 메모리 및 I/O 제어 로직("CL")(1972 및 1982)을 포함할 수 있음을 예시한다. 따라서, CL(1972, 1982)은 통합 메모리 제어기 유닛들을 포함하고, I/O 제어 로직을 포함한다. 도 20은 CL(1972, 1982)에 결합된 메모리들(1932, 1934) 뿐만 아니라 I/O 디바이스들(2014)이 또한 제어 로직(1972, 1982)에 결합됨을 예시한다. 레거시 I/O 디바이스들(2015)이 칩셋(1990)에 결합된다.
이제 도 21을 참조하면, 본 발명의 실시예에 따른 SoC(2100)의 블록도가 도시된다. 도 17의 유사한 엘리먼트들은 동일한 참조 번호들을 가진다. 또한 더욱 진보된 SoC들 상의 파선 박스들은 선택적인 특징들이다. 도 21에서, 인터커넥트 유닛(들)(2102)은: 하나 이상의 코어들(1702A-N)의 세트 및 공유 캐시 유닛(들)(1706)을 포함하는 응용 프로세서(2110); 시스템 에이전트 유닛(1710); 버스 제어기 유닛(들)(1716); 통합 메모리 제어기 유닛(들)(1714); 통합 그래픽 로직, 이미지 프로세서, 오디오 프로세서 및 비디오 프로세서를 포함할 수 있는 세트 또는 하나 이상의 코프로세서들(2120); 정적 랜덤 액세스 메모리(SRAM) 유닛(2130); 직접 메모리 액세스(DMA) 유닛(2132); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(2140)에 결합된다. 일 실시예에서, 코프로세서(들)(2120)은 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 고스루풋 MIC 프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서를 포함한다.
본원에 개시된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현예 방식들의 조합으로 구현될수 있다. 발명의 실시예들은 적어도 하나의 프로세서, 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 저장 엘리먼트들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능한 시스템들 상에서 실행하는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 19에 예시된 코드(1930)와 같은 프로그램 코드는 본원에 기술된 기능들을 수행하고 출력 정보를 생성하기 위한 입력 명령어들에 적용될 수 있다. 출력 정보는 공지된 방식으로 하나 이상의 출력 디바이스들에 적용될 수 있다. 이러한 응용의 목적으로, 프로세싱 시스템은 예를 들어, 디지털 신호 프로세서(DSP), 마이크로제어기, 주문형 집적 회로(ASIC), 또는 마이크로프로세서와 같은 프로세서를 가지는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위해 하이레벨 절차적 또는 객체 지향적 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는 또한, 원하는 경우, 어셈블리어 또는 머신어로 구현될 수 있다. 실제로, 본원에 기술된 메커니즘은 임의의 특정 프로그래밍 언어로 범위가 제한되지 않는다. 어느 경우든, 언어는 컴파일된 또는 해석된 언어일 수 있다.
적어도 하나의 실시예의 하나 이상의 양태들은, 머신에 의해 판독될 때 머신으로 하여금 본원에 기술된 기법들을 수행하기 위한 로직을 제조하게 하는, 프로세서 내의 다양한 로직을 나타내는 머신-판독가능한 매체 상에 저장되는 대표 명령어들에 의해 구현될 수 있다. "IP 코어들"로서 알려져 있는 이러한 표현들은 유형의(tangible) 머신 판독가능한 매체 상에 저장되고, 실제로 로직 또는 프로세서를 제작하는 제조 머신들 내로 로딩하도록 다양한 소비자 또는 제조 설비들에 공급될 수 있다.
이러한 머신-판독가능한 저장 매체는, 하드 디스크와 같은 저장 매체, 플로피 디스크, 광학 디스크, 컴팩트 디스크 판독 전용 메모리(CD-ROM), 컴팩트 디스크 재기록가능(CD-RW), 및 자기-광학 디스크를 포함하는 임의의 다른 타입의 디스크, 판독 전용 메모리(ROM), 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM)과 같은 랜덤 액세스 메모리(RAM), 소거가능 프로그램가능 판독 전용 메모리(EPROM), 플래시 메모리, 전기적 소거가능 프로그램가능 판독 전용 메모리(EEPROM), 상 변화 메모리(PCM) 등의 반도체 디바이스들, 자기 또는 광학 카드, 또는 전자 명령어들을 저장하기에 적합한 임의의 다른 타입의 매체를 포함하는, 머신 또는 디바이스에 의해 제조되거나 형성되는 비일시적인 유형의 물품들의 배열들을 제한 없이 포함할 수 있다.
따라서, 발명의 실시예들은 또한, 본원에 개시된 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 특징들을 정의하는, 하드웨어 기술 언어(HDL)와 같은 설계 데이터를 포함하거나 명령어들을 포함하는, 비-일시적인 유형의 머신 판독가능한 매체를 포함한다. 이러한 실시예들은 또한 프로그램 제품으로서 지칭될 수 있다.
에뮬레이션(바이너리 트랜스레이션, 코드 모핑 등을 포함함)
일부 경우들에서, 명령어 변환기는 소스 명령어 세트로부터 타겟 명령어 세트로 명령어를 변환하기 위해 사용될 수 있다. 예를 들어, 명령어 변환기는 (예를 들어, 정적 바이너리 트랜스레이션, 동적 컴파일을 포함한 동적 바이너리 트랜스레이션을 사용하여) 명령어를 코어에 의해 프로세싱될 하나 이상의 다른 명령어들로 트랜스레이팅하고, 변형시키고, 에뮬레이팅하고, 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 프로세서 상에 있을 수 있고, 프로세서 외부에 있을수 있고, 또는 부분적으로 프로세서 상에 또는 외부에 있을 수 있다.
도 22는 발명의 실시예들에 따라 소스 명령어 세트 내의 바이너리 명령어들을 타겟 명령어 세트 내의 바이너리 명령어들로 변환하기 위한 소프트웨어 명령어 변환기의 사용을 대조시키는 블록도이다. 예시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합들로 구현될 수 있다. 도 22는 하이레벨 언어(2202)의 프로그램이 x86 컴파일러(2204)를 사용하여 컴파일링되어, 적어도 하나의 x86 명령어 세트 코어(2216)를 가지는 프로세서에 의해 기본적으로 실행될 수 있는 x86 바이너리 코드(2206)를 생성할 수 있음을 도시한다. 적어도 하나의 x86 명령어 세트 코어(2216)를 가지는 프로세서는, 적어도 하나의 x86 명령어 세트 코어를 가지는 Intel 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) Intel x86 명령어 세트 코어의 명령어 세트의 상당 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 가지는 Intel 프로세서 상에서 실행하도록 타겟화된 애플리케이션들 또는 다른 소프트웨어의 객체 코드 버전을 호환가능하게 실행하거나 또는 다른 방식으로 프로세싱함으로써, 적어도 하나의 x86 명령어 세트 코어를 가지는 Intel 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(2204)는, 추가적인 연결(linkage) 프로세싱을 통해 또는 추가적인 연결 프로세싱 없이, 적어도 하나의 x86 명령어 세트 코어(2216)를 가지는 프로세서 상에서 실행될 수 있는 x86 바이너리 코드(2206)(예를 들어, 객체 코드)를 생성하도록 동작가능한 컴파일러를 나타낸다. 유사하게, 도 22는 적어도 하나의 x86 명령어 세트 코어(2214)가 없는 프로세서(예를 들어, CA, Sunnyvale의 MIPS Technologies의 MIPS 명령어 세트를 실행하고 그리고/또는 CA, Sunnyvale의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 가지는 프로세서)에 의해 기본적으로 실행될 수 있는 대안적인 명령어 세트 바이너리 코드(2210)를 생성하기 위해 대안적인 명령어 세트 컴파일러(2208)를 사용하여 컴파일링될 수 있는 하이 레벨 언어의 프로그램을 도시한다. 명령어 변환기(2212)는 x86 바이너리 코드(2206)를 x86 명령어 세트 코어(2214) 없이 프로세서에 의해 기본적으로 실행될 수 있는 코드로 변환하기 위해 사용된다. 이것이 가능한 명령어 변환기를 제조하기 어렵기 때문에 이러한 변환된 코드는 대안적인 명령어 세트 바이너리 코드(2210)와 동일하지 않을 수 있지만, 변환된 코드는 일반적인 동작을 달성하며, 대안적인 명령어 세트로부터의 명령어들로 구성될 것이다. 따라서, 명령어 변환기(2212)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 가지지 않는 프로세서 또는 다른 전자 디바이스로 하여금 x86 바이너리 코드(2206)를 실행하게 하는, 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
도 2, 3a, 3b 및 6-14 중 임의의 것에 대해 기술된 컴포넌트들, 특징들 및 상세항목들은 도 4-5 중 임의의 것에서 선택적으로 사용될 수 있다. 또한, 장치의 임의의 것에 대해 본원에 기술된 컴포넌트들, 특징들 및 상세항목들은, 실시예들에서, 이러한 장치에 의해 그리고/또는 이러한 장치를 이용하여 수행될 수 있는, 본원에 개시된 방법들 중 임의의 것에서 선택적으로 사용될 수 있다.
예시적인 실시예들
후속하는 예들은 추가적인 실시예들에 관한 것이다. 예들의 상세항목들은 하나 이상의 실시예들의 어느 곳에서나 사용될 수 있다.
예 1은 적어도 제1 더 좁은 소스 패킹 데이터 오퍼랜드 및 더 좁은 목적지 오퍼랜드를 표시하는 패킹 데이터 명령어를 마스킹된 패킹 데이터 연산에 매핑시키기 위한 디코딩 유닛을 포함하는 프로세서이다. 마스킹된 패킹 데이터 연산은 제1 더 좁은 소스 패킹 데이터 오퍼랜드보다 더 넓으며 이를 포함하는 적어도 제1 더 넓은 소스 패킹 데이터 오퍼랜드를 표시하며, 더 좁은 목적지 오퍼랜드보다 더 넓으며 이를 포함하는 더 넓은 목적지 오퍼랜드를 표시한다. 프로세서는 또한, 디코딩 유닛과 결합된 실행 유닛을 포함한다. 실행 유닛은 패킹 데이터 연산 마스크를 이용하여 마스킹된 패킹 데이터 연산을 수행할 것이다. 패킹 데이터 연산 마스크는 마스킹된 패킹 데이터 연산에 의해 저장될 패킹 데이터 결과의 각각의 대응하는 결과 데이터 엘리먼트에 대한 마스크 엘리먼트를 포함한다. 패킹 데이터 명령어에 의해 저장되지 않을 마스킹된 패킹 데이터 연산에 의해 저장될 결과 데이터 엘리먼트들에 대응하는 모든 마스크 엘리먼트들은 마스킹 아웃될 것이다. 실행 유닛은 더 넓은 목적지 오퍼랜드에 패킹 데이터 결과를 저장할 것이다.
예 2는 임의의 선행 예의 프로세서를 포함하며, 선택적으로, 실행 유닛은 더 넓은 목적지 오퍼랜드에 대응할 레지스터의 전체 폭을 기록할 것이며, 선택적으로 더 좁은 목적지 오퍼랜드는 레지스터의 폭의 일부분에만 대응할 것이다.
예 3은 임의의 선행 예의 프로세서를 포함하며, 선택적으로, 실행 유닛은 패킹 데이터 결과를 저장할 것이며, 여기서 패킹 데이터 명령어와 연관된 연산에 의해 업데이트될 결과 데이터 엘리먼트들이 레지스터의 최하위 부분 및 레지스터의 최상위 부분 사이의 레지스터의 중간 부분만을 점유할 것이다.
예 4는 임의의 선행 예의 프로세서를 포함하며, 선택적으로, 디코딩 유닛은 또한 제2 더 좁은 소스 패킹 데이터 오퍼랜드를 표시하는 패킹 데이터 명령어를 수신할 것이며, 선택적으로 디코딩 유닛은 또한 제2 더 좁은 소스 패킹 데이터 오퍼랜드보다 더 넓으며 이를 포함하는 제2 더 넓은 소스 패킹 데이터 오퍼랜드를 표시하는 마스킹된 패킹 데이터 연산에 패킹 데이터 명령어를 매핑시킬 것이다.
예 5는 임의의 선행 예의 프로세서를 포함하며, 선택적으로, 디코딩 유닛은 제1 및 제2 더 좁은 소스 패킹 데이터 오퍼랜드들에서, 대응하는 비트 포지션들 내에 있지 않는 적어도 한 쌍의 대응하지 않는 데이터 엘리먼트들에 대한 연산을 표시하는 패킹 데이터 명령어를 수신하고, 선택적으로 프로세서는 마스킹된 패킹 데이터 연산을 수행할 때 실행 유닛에 의해 연산될 대응하는 비트 포지션들에 대응하지 않는 데이터 엘리먼트들의 쌍을 배치하기 위한 동작을 추가로 수행할 것이다.
예 6은 임의의 선행 예의 프로세서를 포함하며, 선택적으로, 프로세서는 시프트 연산, 셔플 연산, 및 치환 연산 중 하나를 수행함으로써 대응하는 비트 포지션들에 대응하지 않는 데이터 엘리먼트들의 쌍을 배치하기 위한 동작을 수행할 것이다.
예 7은 임의의 선행 예의 프로세서를 포함하며, 선택적으로, 패킹 데이터 명령어는 패킹 데이터 연산 마스크를 표시하지 않을 것이다.
예 8은 임의의 선행 예의 프로세서를 포함하며, 선택적으로, 패킹 데이터 명령어는 마스킹된 패킹 데이터 연산을 수행하는 실행 유닛에 의해 사용될 패킹 데이터 연산 마스크보다 더 적은 마스크 엘리먼트들을 가지는 패킹 데이터 연산 마스크를 표시한다.
예 9는 임의의 선행 예의 프로세서를 포함하며, 선택적으로, 실행 유닛은 마스킹 아웃된 마스크 엘리먼트에 대응하는 각각의 결과 데이터 엘리먼트의 값은 변경되지 않고, 선택적으로, 언마스크된 마스크 엘리먼트에 대응하는 각각의 결과 데이터 엘리먼트의 값이 패킹 데이터 명령어와 연관된 연산에 의해 업데이트될 패킹 데이터 결과를 저장한다.
예 10은 적어도 제1 더 좁은 소스 패킹 데이터 오퍼랜드 및 더 좁은 목적지 오퍼랜드를 표시하는 패킹 데이터 명령어를 수신하는 것을 포함하는 프로세서에서의 방법이다. 방법은 또한, 제1 더 좁은 소스 패킹 데이터 오퍼랜드보다 더 넓고 이를 포함하는 적어도 제1 더 넓은 소스 패킹 데이터 오퍼랜드를 표시하고, 더 좁은 목적지 오퍼랜드보다 더 넓고 이를 포함하는 더 넓은 목적지 오퍼랜드를 표시하는 마스킹된 패킹 데이터 연산에 패킹 데이터 명령어를 매핑시키는 것을 포함한다. 방법은 또한 마스킹된 패킹 데이터 연산에 의해 저장될 패킹 데이터 결과의 각각의 대응하는 결과 데이터 엘리먼트에 대한 마스크 엘리먼트를 포함하는 패킹 데이터 연산 마스크를 생성하는 것을 포함한다. 패킹 데이터 명령어에 의해 저장되지 않는 마스킹된 패킹 데이터 연산에 의해 저장될 결과 데이터 엘리먼트들에 대응하는 모든 마스크 엘리먼트들이 마스킹 아웃될 것이다. 방법은 또한 패킹 데이터 연산 마스크를 사용하여 마스킹된 패킹 데이터 연산을 수행하는 것을 포함한다. 방법은 또한 더 넓은 목적지 오퍼랜드에 패킹 데이터 결과를 저장하는 것을 포함한다.
예 11은 임의의 선행 예의 방법을 포함하며, 선택적으로, 패킹 데이터 결과를 저장하는 것은 더 넓은 목적지 오퍼랜드에 대응하는 레지스터의 전체 폭을 기록하는 것을 포함하고, 선택적으로 더 좁은 목적지 오퍼랜드는 레지스터 폭의 오직 일부에만 대응한다.
예 12는 임의의 선행 예의 방법을 포함하며, 선택적으로, 저장하는 것은 패킹 데이터 결과를 저장하는 것을 포함하며, 패킹 데이터 명령어와 연관된 연산에 의해 업데이트된 결과 데이터 엘리먼트들은 레지스터의 최하위 부분 및 레지스터의 최상위 부분 사이의 레지스터의 중간 부분만을 점유한다.
예 13은 임의의 선행 예의 방법을 포함하며, 선택적으로, 수신하는 것은 또한 제2 더 좁은 소스 패킹 데이터 오퍼랜드를 표시하는 패킹 데이터 명령어를 수신하는 것을 포함하고, 선택적으로, 매핑하는 것은, 또한 제2 더 좁은 소스 패킹 데이터 오퍼랜드보다 더 넓고 이를 포함하는 제2 더 넓은 소스 패킹 데이터 오퍼랜드를 표시하는 마스킹된 패킹 데이터 연산에 패킹 데이터 명령어를 매핑하는 것을 포함한다.
예 14는 임의의 선행 예의 방법을 포함하며, 선택적으로, 수신하는 것은 제 1 및 제2 더 좁은 소스 패킹 데이터 오퍼랜드들 내의 대응하는 비트 포지션들에 있지 않은 적어도 한 쌍의 대응하지 않는 데이터 엘리먼트들에 대한 연산을 표시하는 패킹 데이터 명령어를 수신하는 것을 포함하고, 선택적으로, 마스킹된 패킹 데이터 연산에 의해 연산될 대응하는 비트 포지션들 내에 대응하지 않는 데이터 엘리먼트들의 쌍을 배치하기 위한 동작을 수행하는 것을 더 포함한다.
예 15는 임의의 선행 예의 방법을 포함하며, 선택적으로, 대응하는 비트 포지션들 내에 대응하지 않는 데이터 엘리먼트들의 쌍을 배치하기 위한 동작을 수행하는 것은 시프트 연산, 셔플 연산, 및 치환 연산 중 하나를 수행하는 것을 포함한다.
예 16은 임의의 선행 예의 방법을 포함하며, 선택적으로, 수신하는 것은 패킹 데이터 연산 마스크를 표시하지 않는 패킹 데이터 명령어를 수신하는 것을 포함한다.
예 17은 임의의 이전 예의 방법을 포함하며, 선택적으로, 수신하는 것은 생성된 패킹 데이터 연산 마스크보다 더 적은 개수의 마스크 엘리먼트들을 가지는 제2 패킹 데이터 연산 마스크를 표시하는 패킹 데이터 명령어를 수신하는 것을 포함한다.
예 18은 임의의 선행 예의 방법을 포함하며, 선택적으로 제1 더 좁은 소스 패킹 데이터 오퍼랜드는 레지스터 내의 제1 더 넓은 소스 패킹 데이터 오퍼랜드에 대해 에일리어싱된다.
예 19는 임의의 선행 예의 방법을 포함하며, 선택적으로, 저장하는 것은 마스킹 아웃된 마스크 엘리먼트에 대응하는 각각의 결과 데이터 엘리먼트의 값은 변경되지 않고, 선택적으로, 언마스크된 마스크 엘리먼트에 대응하는 각각의 결과 데이터 엘리먼트의 값은 패킹 데이터 명령어와 연관된 연산에 의해 업데이트될 패킹 데이터 결과를 저장하는 것을 포함한다.
예 20은 인터커넥트 및 인터커넥트와 결합된 프로세서를 포함하는, 명령어들을 프로세싱하기 위한 시스템이다. 프로세서는 적어도 제1 더 좁은 소스 패킹 데이터 오퍼랜드 및 더 좁은 목적지 오퍼랜드를 표시하는 패킹 데이터 명령어를, 제1 더 좁은 소스 패킹 데이터 오퍼랜드를 포함하는 적어도 제1 더 넓은 소스 패킹 데이터 오퍼랜드를 표시하고, 더 좁은 목적지 오퍼랜드를 포함하는 더 넓은 목적지 오퍼랜드를 표시하는 마스킹된 패킹 데이터 연산들에 매핑하는 제1 유닛을 포함한다. 프로세서는 또한 제1 유닛과 결합된 집적 회로를 포함한다. 집적 회로는 마스킹된 패킹 데이터 연산에 의해 저장될 패킹 데이터 결과의 각각의 대응하는 데이터 엘리먼트에 대한 마스크 비트를 포함하는 마스크를 이용하여 마스킹된 패킹 데이터 연산을 수행할 것이다. 패킹 데이터 명령어에 의해 저장될 데이터 엘리먼트들에 대응하는 마스크 비트들만이 마스킹 아웃되지 않도록 허용된다. 시스템은 또한 인터커넥트와 결합된 동적 랜덤 액세스 메모리(DRAM)를 포함한다.
예 21은 예 20의 시스템을 포함하며, 선택적으로, 집적 회로는 추가로, 데이터 재배열 동작을 수행하여 제1 더 좁은 소스 패킹 데이터 오퍼랜드의 데이터 엘리먼트를 패킹 데이터 결과의 데이터 엘리먼트에 맞춰 정렬한다.
예 22는 적어도 제1 더 좁은 소스 패킹 데이터 오퍼랜드 및 더 좁은 목적지 오퍼랜드를 표시하는 패킹 데이터 명령어를 수신하기 위한 수단을 포함하는 프로세서를 포함한다. 프로세서는 또한 제1 더 좁은 소스 패킹 데이터 오퍼랜드보다 더 넓으며 이를 포함하는 적어도 제1 더 넓은 소스 패킹 데이터 오퍼랜드를 표시하고, 더 좁은 목적지 오퍼랜드보다 더 넓으며 이를 포함하는 더 넓은 목적지 오퍼랜드를 표시하는 마스킹된 패킹 데이터 연산에 패킹 데이터 명령어를 매핑시키기 위한 수단을 포함한다. 프로세서는 또한 마스킹된 패킹 데이터 연산에 의해 저장될 패킹 데이터 결과의 각각의 대응하는 결과 데이터 엘리먼트에 대한 마스크 엘리먼트를 포함하는 패킹 데이터 연산 마스크를 생성하기 위한 수단을 포함한다. 패킹 데이터 명령어에 의해 저장되지 않을 마스킹된 패킹 데이터 연산에 의해 저장될 결과 데이터 엘리먼트들에 대응하는 모든 마스크 엘리먼트들이 마스킹 아웃 된다.
예 23은 예 22의 시스템을 포함하며, 선택적으로 제1 더 좁은 소스 패킹 데이터 오퍼랜드의 데이터 엘리먼트를 패킹 데이터 결과의 데이터 엘리먼트에 맞춰 정렬하기 위한 수단을 더 포함한다.
예 24는 예 10-19 중 임의의 것의 방법을 수행하기 위한 장치를 포함한다.
예 25는 예 10-19 중 임의의 것의 방법을 수행하기 위한 수단을 포함하는 장치를 포함한다.
예 26은 예 10-19 중 임의의 것의 방법을 수행하기 위한 수단을 포함하는 프로세서를 포함한다.
예 27은 예 10-19 중 임의의 것의 방법을 수행하기 위한 수단을 포함하는 DRAM과 결합된 프로세서 및 동적 랜덤 액세스 메모리(DRAM)를 포함하는, 컴퓨터 시스템을 포함한다.
예 28은 실질적으로 본원에 기술된 바와 같은 방법을 수행하기 위한 장치를 포함한다.
예 29는 실질적으로 본원에 기술된 바와 같은 방법을 수행하기 위한 수단을 포함하는 장치를 포함한다.
상세한 설명 및 청구항들에서, "결합된" 및 "접속된"이라는 용어는, 그 파생물들과 함께 사용되었을 수 있다. 이들 용어들이 서로에 대해 유의어로서 의도되지 않는다는 점이 이해되어야 한다. 오히려, 특정 실시예들에서, "접속된"은 둘 이상의 엘리먼트들이 서로 직접 물리적 또는 전기적 접속 상태임을 표시하기 위해 사용될 수 있다. "결합된"은 둘 이상의 엘리먼트들이 직접 물리적 또는 전기적 접속 상태임을 의미할 수 있다. 그러나, "결합된"은 또한 둘 이상의 엘리먼트들이 서로 직접 접속 상태이지는 않지만, 여전히 서로 함께 동작하거나 상호작용함을 의미할 수 있다. 도면들에서, 화살표들은 접속들 및 결합들을 보여주기 위해 사용된다.
상세한 설명 및 청구항들에서, 용어 "로직"이라는 용어가 사용되었을 수 있다. 본원에서 사용된 바와 같이, 로직은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합을 포함할 수 있다. 로직의 예들은, 집적 회로들, 주문형 집적 회로들, 아날로그 회로들, 디지털 회로들, 프로그래밍된 논리 디바이스들, 명령어들을 포함하는 메모리 디바이스들 등을 포함한다. 일부 실시예들에서, 하드웨어 로직은 트랜지스터들 및/또는 게이트들을, 잠재적으로 다른 회로 컴포넌트들과 함께 포함할 수 있다.
"및/또는"이라는 용어가 사용되었을 수 있다. 본원에서 사용된 바와 같이, "및/또는"이라는 용어는 하나 또는 다른 하나 또는 둘 모두를 의미한다(예를 들어, A 및/또는 B는 A 또는 B 또는 A와 B 모두를 의미한다).
전술한 설명에서, 설명의 목적으로, 다수의 특정 상세들이 발명의 실시예들의 철저한 이해를 제공하기 위해 설명되었다. 그러나, 하나 이상의 다른 실시예들이 이들 특정 상세들 중 일부가 없이도 구현될 수 있다는 점이 당업자에게 명백할 것이다. 기재된 특정 실시예들은 발명을 제한하기 위해서가 아니라 예시적인 실시예들을 통해 발명을 예시하기 위해 제공된다. 발명의 범위는 특정 예들에 의해서가 아니라 오직 특허청구범위에 의해서만 결정될 것이다. 다른 경우들에서, 공지된 회로들, 구조들, 디바이스들 및 동작들은 기재의 이해를 모호하게 하는 것을 회피하기위해 블록도 형태로, 또는 상세하게 도시되지 않았다.
고려된 적절한 참조 부호들, 또는 참조부호들의 용어 부분들은, 특정되거나 달리 명료하지 않은 한, 선택적으로 유사하거나 동일한 특성들을 가질 수 있는, 대응하는 또는 유사한 엘리먼트들을 표시하기 위해 도면들 사이에서 반복되었다. 다수의 컴포넌트들이 기술된 일부 경우들에서, 이들은 단일 컴포넌트 내로 포함될 수 있다. 단일 컴포넌트가 기술된 다른 경우들에서, 그것은 다수의 컴포넌트들로 파티셔닝될 수 있다.
다양한 동작들 및 방법들이 기술되었다. 방법들 중 일부는 흐름도에서 비교적 기본적인 형태로 기술되었지만, 동작들은 선택적으로, 방법들에 추가되고 그리고/또는 방법들로부터 제거될 수 있다. 추가로, 흐름도들이 예시적인 실시예들에 따라 특정 순서의 동작들을 도시하지만, 특정 순서는 예시적이다. 대안적인 실시예들이 선택적으로, 상이한 순서로 동작들을 수행하고, 특정 동작들을 조합하고, 특정 동작들을 오버랩하는 것 등을 수행할 수 있다.
일부 실시예들은 머신-판독가능한 매체를 포함하는 제조 물품(예를 들어, 컴퓨터 프로그램 제품)을 포함한다. 매체는, 머신에 의해 판독가능한 형태로 정보를 제공하는, 예를 들어, 저장하는 메커니즘을 포함할 수 있다. 머신 판독가능한 매체는, 머신에 의해 실행되는 경우 및/또는 실행될 때, 머신으로 하여금 본원에 개시된 하나 이상의 동작들, 방법들, 또는 기법들을 수행하게 야기하고 그리고/또는 머신이 이를 수행하게 하는, 하나 이상의 명령어들을 제공하거나 또는 하나 이상의 명령어들을 그 안에 가질 수 있다.
일부 실시예들에서, 머신-판독가능한 매체는 유형의 그리고/또는 비일시적인 머신-판독가능한 저장 매체를 포함할 수 있다. 예를 들어, 유형의 그리고/또는 비-일시적인 머신 판독가능한 저장 매체는 플로피 디스켓, 광학 저장 매체, 광학 디스크, 광학 데이터 저장 디바이스, CD-ROM, 자기 디스크, 자기-광학 디스크, 판독 전용 메모리(ROM), 프로그램가능 ROM(PROM), 소거-및-프로그램가능 ROM(EPROM), 전기적-소거가능-및 프로그램가능 ROM(EEPROM), 랜덤 액세스 메모리(RAM), 정적 RAM(SRAM), 동적 RAM(DRAM), 플래시 메모리, 상 변화 메모리, 상 변화 데이터 저장 물질, 비휘발성 메모리, 비휘발성 데이터 저장 디바이스, 비일시적 메모리, 비일시적 데이터 저장 디바이스 등을 포함할 수 있다. 비-일시적 머신-판독가능한 저장 매체는 일시적 전파(transitory propagated) 신호로 구성되지 않는다. 또다른 실시예에서, 머신-판독가능한 매체는 일시적 머신-판독가능한 통신 매체, 예를 들어, 반송파, 적외선 신호, 디지털 신호 등과 같은 전기적, 광학적, 음향적, 또는 다른 형태들의 전파 신호들을 포함할 수 있다.
적절한 머신들의 예들은, 범용 프로세서들, 특수 목적 프로세서들, 명령어 프로세싱 장치, 디지털 논리 회로들, 집적 회로들 등을 포함하지만 이에 제한되지 않는다. 적절한 머신들의 또다른 예들은 이러한 프로세서들, 명령어 프로세싱 장치, 디지털 논리 회로들, 또는 집적 회로들을 포함하는 컴퓨팅 디바이스들, 및 다른 전자 디바이스들을 포함한다. 이러한 컴퓨팅 디바이스들 및 전자 디바이스들의 예들은 데스크톱 컴퓨터, 랩톱 컴퓨터, 노트북 컴퓨터, 태블릿 컴퓨터, 넷북, 스마트폰, 셀룰러 폰, 서버, 네트워크 디바이스(예를 들어, 라우터 및 스위치), 모바일 인터넷 디바이스(MID), 미디어 플레이어, 스마트 텔레비전, 넷톱, 셋톱 박스, 및 비디오 게임 컨트롤러를 포함하지만 이에 제한되지 않는다.
"일 실시예", "실시예", 또는 "하나 이상의 실시예들"에 대한 이 명세서 전반에 걸친 참조가, 예를 들어, 특정 특징이 발명의 구현예에 포함될 수 있음을 의미한다는 점이 또한 이해되어야 한다. 유사하게, 상세한 설명에서, 다양한 특징들이 개시내용을 개요화할 목적으로 그리고 다양한 발명의 양태들의 이해를 도울 목적으로, 종종 단일 실시예, 도면, 및 그 설명에서 함께 그룹핑된다는 점이 이해되어야 한다. 그러나, 이러한 개시내용의 방법은 발명이 각각의 청구항에서 명시적으로 인용된 것보다 더 많은 특징들을 요구한다는 의도를 반영하는 것으로서 해석되지는 않아야 한다. 오히려, 후속하는 특허청구범위에서 반영하는 바와 같이, 발명 양태들은 단일의 개시된 실시예들의 모든 특징들보다 더 적은 특징들에 존재할 수 있다. 따라서, 상세한 설명에 후속하는 특허청구범위가 이러한 상세한 설명 내로 명시적으로 포함되며, 각각의 청구항은 그 자체가 발명의 별도의 실시예로서 존재한다.

Claims (25)

  1. 프로세서로서,
    적어도 제1 더 좁은 소스 패킹 데이터 오퍼랜드(a first narrower source packed data operand) 및 더 좁은 목적지 오퍼랜드(a narrower destination operand)를 표시하는 패킹 데이터 명령어(a packed data instruction)를, 상기 제1 더 좁은 소스 패킹 데이터 오퍼랜드보다 더 넓고 상기 제1 더 좁은 소스 패킹 데이터 오퍼랜드를 포함하는 제1 더 넓은 소스 패킹 데이터 오퍼랜드(a first wider source packed data operand)를 적어도 표시하고, 상기 더 좁은 목적지 오퍼랜드보다 더 넓고 상기 더 좁은 목적지 오퍼랜드를 포함하는 더 넓은 목적지 오퍼랜드(a wider destination operand)를 표시하는 마스킹된 패킹 데이터 연산(a masked packed data operation)에 매핑시키는 디코딩 유닛; 및
    상기 디코딩 유닛과 결합되는 실행 유닛 - 상기 실행 유닛은 패킹 데이터 연산 마스크를 이용하여 상기 마스킹된 패킹 데이터 연산을 수행하고, 상기 패킹 데이터 연산 마스크는 상기 마스킹된 패킹 데이터 연산에 의해 저장되는 패킹 데이터 결과(a packed data result)의 각각의 대응하는 결과 데이터 엘리먼트에 대한 마스크 엘리먼트를 포함하고, 상기 더 좁은 목적지 오퍼랜드에는 포함되지는 않지만 상기 마스킹된 패킹 데이터 연산에 의해서는 저장되는 결과 데이터 엘리먼트들에 대응하는 상기 패킹 데이터 연산 마스크에 속한 모든 마스크 엘리먼트들이 마스킹 아웃(masked out)되고, 상기 실행 유닛은 상기 더 넓은 목적지 오퍼랜드에 상기 패킹 데이터 결과를 저장함 -
    을 포함하는 프로세서.
  2. 제1항에 있어서,
    상기 실행 유닛은 상기 더 넓은 목적지 오퍼랜드에 대응하는 레지스터의 전체 폭을 기록하고, 상기 더 좁은 목적지 오퍼랜드는 상기 레지스터의 폭의 일부분에만 대응하는 프로세서.
  3. 제1항에 있어서,
    상기 실행 유닛은 상기 패킹 데이터 명령어와 연관된 연산에 의해 업데이트되는 결과 데이터 엘리먼트들이, 레지스터의 최하위 부분과 상기 레지스터의 최상위 부분 사이의, 상기 레지스터의 중간 부분만을 점유하는 상기 패킹 데이터 결과를 저장하는 프로세서.
  4. 제1항에 있어서,
    상기 디코딩 유닛은 또한 제2 더 좁은 소스 패킹 데이터 오퍼랜드를 표시하는 상기 패킹 데이터 명령어를 수신하고, 상기 디코딩 유닛은 또한 상기 제2 더 좁은 소스 패킹 데이터 오퍼랜드보다 더 넓고 상기 제2 더 좁은 소스 패킹 데이터 오퍼랜드를 포함하는 제2 더 넓은 소스 패킹 데이터 오퍼랜드를 표시하는 상기 마스킹된 패킹 데이터 연산에 상기 패킹 데이터 명령어를 매핑시키는 프로세서.
  5. 제4항에 있어서,
    상기 디코딩 유닛은 상기 제1 및 제2 더 좁은 소스 패킹 데이터 오퍼랜드들 에서 대응하는 비트 포지션들에 있지 않은 적어도 한쌍의 대응하지 않는 데이터 엘리먼트들에 대한 연산을 표시하는 상기 패킹 데이터 명령어를 수신하고,
    상기 프로세서는 상기 마스킹된 패킹 데이터 연산을 수행할 때 상기 실행 유닛에 의해 연산되는 대응하는 비트 포지션들에 상기 대응하지 않는 데이터 엘리먼트들의 쌍을 배치하기 위한 동작을 추가로 수행하는 프로세서.
  6. 제5항에 있어서,
    상기 프로세서는 시프트 연산, 셔플 연산 및 치환 연산 중 하나를 수행함으로써 상기 대응하는 비트 포지션들에 상기 대응하지 않는 데이터 엘리먼트들의 쌍을 배치하기 위한 동작을 수행하는 프로세서.
  7. 제1항에 있어서,
    상기 패킹 데이터 명령어는 패킹 데이터 연산 마스크를 표시하지 않는 프로세서.
  8. 제1항에 있어서,
    상기 패킹 데이터 명령어는 상기 마스킹된 패킹 데이터 연산을 수행하는 상기 실행 유닛에 의해 사용되는 상기 패킹 데이터 연산 마스크보다 더 적은 마스크 엘리먼트들을 가지는 패킹 데이터 연산 마스크를 표시하는 프로세서.
  9. 제1항에 있어서,
    상기 실행 유닛은 상기 패킹 데이터 결과를 저장하되, 상기 패킹 데이터 결과에서는, 마스킹 아웃된 마스크 엘리먼트에 대응하는 각각의 결과 데이터 엘리먼트의 값은 변경되지 않고, 언마스크된(unmasked) 마스크 엘리먼트에 대응하는 각각의 결과 데이터 엘리먼트의 값이 상기 패킹 데이터 명령어와 연관된 연산에 의해 업데이트되는, 프로세서.
  10. 프로세서에서의 방법으로서,
    적어도 제1 더 좁은 소스 패킹 데이터 오퍼랜드 및 더 좁은 목적지 오퍼랜드를 표시하는 패킹 데이터 명령어를 수신하는 단계;
    상기 제1 더 좁은 소스 패킹 데이터 오퍼랜드보다 더 넓고 상기 제1 더 좁은 소스 패킹 데이터 오퍼랜드를 포함하는 제1 더 넓은 소스 패킹 데이터 오퍼랜드를 적어도 표시하고, 상기 더 좁은 목적지 오퍼랜드보다 더 넓고 상기 더 좁은 목적지 오퍼랜드를 포함하는 더 넓은 목적지 오퍼랜드를 표시하는 마스킹된 패킹 데이터 연산에 상기 패킹 데이터 명령어를 매핑시키는 단계;
    상기 마스킹된 패킹 데이터 연산에 의해 저장되는 패킹 데이터 결과의 각각의 대응하는 결과 데이터 엘리먼트에 대한 마스크 엘리먼트를 포함하는 패킹 데이터 연산 마스크를 생성하는 단계 ― 상기 더 좁은 목적지 오퍼랜드에 포함되지는 않지만 상기 마스킹된 패킹 데이터 연산에 의해서는 저장되는 결과 데이터 엘리먼트들에 대응하는 상기 패킹 데이터 연산 마스크에 속한 하나 이상의 마스크 엘리먼트들은 마스킹 아웃됨 ― ;
    상기 패킹 데이터 연산 마스크를 사용하여 상기 마스킹된 패킹 데이터 연산을 수행하는 단계; 및
    상기 더 넓은 목적지 오퍼랜드에 상기 패킹 데이터 결과를 저장하는 단계
    를 포함하는 방법.
  11. 제10항에 있어서,
    상기 패킹 데이터 결과를 저장하는 단계는, 상기 더 넓은 목적지 오퍼랜드에 대응하는 레지스터의 전체 폭을 기록하는 것을 포함하고, 상기 더 좁은 목적지 오퍼랜드는 상기 레지스터의 폭의 일부분에만 대응하는 방법.
  12. 제10항에 있어서,
    상기 저장하는 단계는, 상기 패킹 데이터 명령어와 연관된 연산에 의해 업데이트되는 결과 데이터 엘리먼트들이, 레지스터의 최하위 부분과 상기 레지스터의 최상위 부분 사이의, 상기 레지스터의 중간 부분만을 점유하는 상기 패킹 데이터 결과를 저장하는 것을 포함하는 방법.
  13. 제10항에 있어서,
    상기 수신하는 단계는, 또한 제2 더 좁은 소스 패킹 데이터 오퍼랜드를 표시하는 상기 패킹 데이터 명령어를 수신하는 것을 포함하고, 상기 매핑시키는 단계는 또한 상기 제2 더 좁은 소스 패킹 데이터 오퍼랜드보다 더 넓고 상기 제2 더 좁은 소스 패킹 데이터 오퍼랜드를 포함하는 제2 더 넓은 소스 패킹 데이터 오퍼랜드를 표시하는 상기 마스킹된 패킹 데이터 연산에 상기 패킹 데이터 명령어를 매핑시키는 것을 포함하는 방법.
  14. 제13항에 있어서,
    상기 수신하는 단계는, 상기 제1 및 제2 더 좁은 소스 패킹 데이터 오퍼랜드들에서 대응하는 비트 포지션들에 있지 않은 적어도 한쌍의 대응하지 않는 데이터 엘리먼트들에 대한 연산을 표시하는 상기 패킹 데이터 명령어를 수신하는 것을 포함하고,
    상기 마스킹된 패킹 데이터 연산에 의해 연산되는 대응하는 비트 포지션들에 상기 대응하지 않는 데이터 엘리먼트들의 쌍을 배치하기 위한 동작을 수행하는 단계를 더 포함하는 방법.
  15. 제14항에 있어서,
    대응하는 비트 포지션들에 상기 대응하지 않는 데이터 엘리먼트들의 쌍을 배치하기 위한 동작을 수행하는 단계는 시프트 연산, 셔플 연산, 및 치환 연산 중 하나를 수행하는 것을 포함하는 방법.
  16. 제10항에 있어서,
    상기 수신하는 단계는 패킹 데이터 연산 마스크를 표시하지 않는 상기 패킹 데이터 명령어를 수신하는 것을 포함하는 방법.
  17. 제10항에 있어서,
    상기 수신하는 단계는 상기 생성된 패킹 데이터 연산 마스크보다 더 적은 개수의 마스크 엘리먼트들을 가지는 제2 패킹 데이터 연산 마스크를 표시하는 상기 패킹 데이터 명령어를 수신하는 것을 포함하는 방법.
  18. 제10항에 있어서,
    상기 제1 더 좁은 소스 패킹 데이터 오퍼랜드는 레지스터 내의 상기 제1 더 넓은 소스 패킹 데이터 오퍼랜드에 대해 에일리어싱되는 방법.
  19. 제10항에 있어서,
    상기 저장하는 단계는 상기 패킹 데이터 결과를 저장하되, 상기 패킹 데이터 결과에서는, 마스킹 아웃된 마스크 엘리먼트에 대응하는 각각의 결과 데이터 엘리먼트의 값은 변경되지 않고, 언마스크된 마스크 엘리먼트에 대응하는 각각의 결과 데이터 엘리먼트의 값이 상기 패킹 데이터 명령어와 연관된 연산에 의해 업데이트되는, 방법.
  20. 명령어들을 프로세싱하는 시스템으로서,
    인터커넥트;
    상기 인터커넥트와 결합된 프로세서 - 상기 프로세서는:
    적어도 제1 더 좁은 소스 패킹 데이터 오퍼랜드 및 더 좁은 목적지 오퍼랜드를 표시하는 패킹 데이터 명령어를, 상기 제1 더 좁은 소스 패킹 데이터 오퍼랜드를 포함하는 적어도 제1 더 넓은 소스 패킹 데이터 오퍼랜드를 표시하고, 상기 더 좁은 목적지 오퍼랜드를 포함하는 더 넓은 목적지 오퍼랜드를 표시하는 마스킹된 패킹 데이터 연산에 매핑시키기 위한 제1 유닛; 및
    상기 제1 유닛에 결합되는 집적 회로 - 상기 집적 회로는, 상기 마스킹된 패킹 데이터 연산에 의해 저장되는 패킹 데이터 결과의 각각의 대응하는 데이터 엘리먼트에 대한 마스크 비트를 포함하는 마스크를 이용하여 상기 마스킹된 패킹 데이터 연산을 수행하고, 상기 패킹 데이터 명령어에 의해 저장되는 데이터 엘리먼트들에 대응하는 마스크 비트들만이 마스킹 아웃되지 않도록 허용됨 -
    를 포함함 -; 및
    상기 인터커넥트와 결합된 동적 랜덤 액세스 메모리(DRAM)
    를 포함하는 시스템.
  21. 제20항에 있어서,
    상기 집적 회로는 상기 제1 더 좁은 소스 패킹 데이터 오퍼랜드의 데이터 엘리먼트를 상기 패킹 데이터 결과의 데이터 엘리먼트에 맞춰 정렬하기 위해 데이터 재배열 동작을 더 수행하는 시스템.
  22. 제1항 내지 제9항 중 어느 한 항에 있어서,
    상기 패킹 데이터 명령어에 의해 표시되는 상기 제1 더 좁은 소스 패킹 데이터 오퍼랜드 및 상기 더 좁은 목적지 오퍼랜드는 상기 프로세서의 아키텍처 레지스터들(architectural registers)을 포함하는, 프로세서.
  23. 제1항 내지 제9항 중 어느 한 항에 있어서,
    상기 패킹 데이터 연산 마스크는, 상기 프로세서의 아키텍처 패킹 데이터 연산 마스크 레지스터들의 세트에 포함되는, 프로세서.
  24. 제10항 내지 제19항 중 어느 한 항에 있어서,
    상기 패킹 데이터 명령어에 의해 표시되는 상기 제1 더 좁은 소스 패킹 데이터 오퍼랜드 및 상기 더 좁은 목적지 오퍼랜드는 아키텍처 레지스터들을 포함하는, 방법.
  25. 제10항 내지 제19항 중 어느 한 항에 있어서,
    상기 패킹 데이터 연산 마스크를, 아키텍처 패킹 데이터 연산 마스크 레지스터에 저장하는 단계를 더 포함하는 방법.
KR1020140037312A 2013-03-30 2014-03-28 마스킹된 전체 레지스터 액세스들을 이용한 부분적 레지스터 액세스들을 구현하기 위한 프로세서들, 방법들 및 시스템들 KR101597774B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/854,089 2013-03-30
US13/854,089 US9477467B2 (en) 2013-03-30 2013-03-30 Processors, methods, and systems to implement partial register accesses with masked full register accesses

Publications (2)

Publication Number Publication Date
KR20140118924A KR20140118924A (ko) 2014-10-08
KR101597774B1 true KR101597774B1 (ko) 2016-02-26

Family

ID=50686951

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140037312A KR101597774B1 (ko) 2013-03-30 2014-03-28 마스킹된 전체 레지스터 액세스들을 이용한 부분적 레지스터 액세스들을 구현하기 위한 프로세서들, 방법들 및 시스템들

Country Status (6)

Country Link
US (2) US9477467B2 (ko)
JP (1) JP5829714B2 (ko)
KR (1) KR101597774B1 (ko)
CN (2) CN104077107B (ko)
DE (1) DE102014004564A1 (ko)
GB (1) GB2515862B (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI681300B (zh) 2014-11-14 2020-01-01 美商凱為有限責任公司 在64位元資料路徑上實行128位元simd操作之方法、系統及電腦可讀取媒體
US20160179548A1 (en) * 2014-12-22 2016-06-23 Intel Corporation Instruction and logic to perform an inverse centrifuge operation
US10001995B2 (en) 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
US9916164B2 (en) * 2015-06-11 2018-03-13 Intel Corporation Methods and apparatus to optimize instructions for execution by a processor
US9779469B2 (en) 2015-08-17 2017-10-03 Qualcomm Incorporated Register spill management for general purpose registers (GPRs)
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US11681531B2 (en) * 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US20170192789A1 (en) * 2015-12-30 2017-07-06 Rama Kishnan V. Malladi Systems, Methods, and Apparatuses for Improving Vector Throughput
US11204764B2 (en) * 2016-03-31 2021-12-21 Intel Corporation Processors, methods, systems, and instructions to Partition a source packed data into lanes
US10210323B2 (en) * 2016-05-06 2019-02-19 The Boeing Company Information assurance system for secure program execution
US10846087B2 (en) * 2016-12-30 2020-11-24 Intel Corporation Systems, apparatuses, and methods for broadcast arithmetic operations
GB2564853B (en) * 2017-07-20 2021-09-08 Advanced Risc Mach Ltd Vector interleaving in a data processing apparatus
GB2568230B (en) * 2017-10-20 2020-06-03 Graphcore Ltd Processing in neural networks
WO2020066375A1 (ja) * 2018-09-25 2020-04-02 日本電気株式会社 情報処理装置、情報処理方法、プログラム
CN111443948B (zh) * 2020-03-30 2022-09-09 龙芯中科技术股份有限公司 指令执行方法、处理器和电子设备
US11494190B2 (en) * 2021-03-31 2022-11-08 Arm Limited Circuitry and method for controlling a generated association of a physical register with a predicated processing operation based on predicate data state

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999050740A1 (en) 1998-03-31 1999-10-07 Intel Corporation Executing partial-width packed data instructions
KR100940957B1 (ko) 2002-06-03 2010-02-05 파나소닉 주식회사 프로세서
US20120216011A1 (en) 2011-02-18 2012-08-23 Darryl Gove Apparatus and method of single-instruction, multiple-data vector operation masking
WO2012135494A2 (en) 2011-04-01 2012-10-04 Intel Corporation System, apparatus, and method for aligning registers

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1996017291A1 (en) 1994-12-02 1996-06-06 Intel Corporation Microprocessor with packing operation of composite operands
US6092094A (en) * 1996-04-17 2000-07-18 Advanced Micro Devices, Inc. Execute unit configured to selectably interpret an operand as multiple operands or as a single operand
US6334183B1 (en) 1997-11-18 2001-12-25 Intrinsity, Inc. Method and apparatus for handling partial register accesses
US6230253B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
US6442676B1 (en) * 1999-06-30 2002-08-27 Bull Hn Information Systems Inc. Processor with different width functional units ignoring extra bits of bus wider than instruction width
US7818356B2 (en) 2001-10-29 2010-10-19 Intel Corporation Bitstream buffer manipulation with a SIMD merge instruction
CN1324458C (zh) 2002-05-22 2007-07-04 皇家飞利浦电子股份有限公司 用于解码指令序列的方法和设备
US7251722B2 (en) * 2004-05-11 2007-07-31 Mistletoe Technologies, Inc. Semantic processor storage server architecture
US8447962B2 (en) * 2009-12-22 2013-05-21 Intel Corporation Gathering and scattering multiple data elements
US8549264B2 (en) * 2009-12-22 2013-10-01 Intel Corporation Add instructions to add three source operands
US20120254592A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
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
CN102511152B (zh) * 2011-08-31 2014-12-31 华为技术有限公司 在共享网络中实现组播的方法、系统及装置
WO2013095521A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Instructions processors, methods, and systems to process blake secure hashing algorithm
CN104025024B (zh) * 2011-12-22 2018-07-17 英特尔公司 打包数据操作掩码移位处理器、方法及系统
CN104011668B (zh) * 2011-12-22 2017-03-22 英特尔公司 用于将源操作数映射到不同范围的系统、装置和方法
US9632777B2 (en) * 2012-08-03 2017-04-25 International Business Machines Corporation Gather/scatter of multiple data elements with packed loading/storing into/from a register file entry
US9588766B2 (en) * 2012-09-28 2017-03-07 Intel Corporation Accelerated interlane vector reduction instructions
US9665368B2 (en) * 2012-09-28 2017-05-30 Intel Corporation Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register
US9189398B2 (en) * 2012-12-28 2015-11-17 Intel Corporation Apparatus and method for memory-mapped register caching
US9244684B2 (en) * 2013-03-15 2016-01-26 Intel Corporation Limited range vector memory access instructions, processors, methods, and systems
US9990202B2 (en) * 2013-06-28 2018-06-05 Intel Corporation Packed data element predication processors, methods, systems, and instructions
US10228941B2 (en) * 2013-06-28 2019-03-12 Intel Corporation Processors, methods, and systems to access a set of registers as either a plurality of smaller registers or a combined larger register
US9442731B2 (en) * 2014-03-13 2016-09-13 Intel Corporation Packed two source inter-element shift merge processors, methods, systems, and instructions

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999050740A1 (en) 1998-03-31 1999-10-07 Intel Corporation Executing partial-width packed data instructions
KR100940957B1 (ko) 2002-06-03 2010-02-05 파나소닉 주식회사 프로세서
US20120216011A1 (en) 2011-02-18 2012-08-23 Darryl Gove Apparatus and method of single-instruction, multiple-data vector operation masking
WO2012135494A2 (en) 2011-04-01 2012-10-04 Intel Corporation System, apparatus, and method for aligning registers

Also Published As

Publication number Publication date
KR20140118924A (ko) 2014-10-08
JP5829714B2 (ja) 2015-12-09
CN107918546A (zh) 2018-04-17
CN104077107A (zh) 2014-10-01
CN104077107B (zh) 2017-12-22
CN107918546B (zh) 2022-02-22
US9477467B2 (en) 2016-10-25
DE102014004564A1 (de) 2014-10-02
US20140297994A1 (en) 2014-10-02
JP2014199663A (ja) 2014-10-23
GB2515862A (en) 2015-01-07
US9934032B2 (en) 2018-04-03
GB201405413D0 (en) 2014-05-07
US20170109164A1 (en) 2017-04-20
GB2515862B (en) 2016-11-02

Similar Documents

Publication Publication Date Title
KR101597774B1 (ko) 마스킹된 전체 레지스터 액세스들을 이용한 부분적 레지스터 액세스들을 구현하기 위한 프로세서들, 방법들 및 시스템들
EP3588281B1 (en) Apparatus and method for a tensor permutation engine
US10372449B2 (en) Packed data operation mask concatenation processors, methods, systems, and instructions
US9934031B2 (en) Read and write masks update instruction for vectorization of recursive computations over independent data
JP6238497B2 (ja) プロセッサ、方法、及びシステム
KR101964350B1 (ko) 다중 레지스터 메모리 액세스 명령어들, 프로세서들, 방법들 및 시스템들
KR101679111B1 (ko) 연산 마스크들의 마스킹되지 않는 요소들을 통합하기 위한 프로세서들, 방법들, 시스템들, 및 명령어들
US20200183688A1 (en) Packed data operation mask shift processors, methods, systems, and instructions
JP7419629B2 (ja) データ表現間の一貫性のある変換を加速するプロセッサ、方法、プログラム、コンピュータ可読記憶媒体、および装置
KR20150091448A (ko) 제한 범위 벡터 메모리 액세스 인스트럭션들, 프로세서들, 방법들 및 시스템들
JP2018500657A (ja) 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック
KR101856833B1 (ko) 레지스터들의 세트를 복수의 소형 레지스터들 또는 조합된 대형 레지스터들로서 액세스하는 프로세서들, 방법들, 및 시스템들
JP2017534114A (ja) Z順序曲線において次のポイントの座標を計算するためのベクトル命令
US20200210186A1 (en) Apparatus and method for non-spatial store and scatter instructions
JP2017538215A (ja) 逆分離演算を実行するための命令及びロジック
JP2018500665A (ja) マスク値を圧縮するための方法および装置
JP2018500666A (ja) ベクトルビットギャザーを実行するための方法および装置
KR101635856B1 (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: 20190129

Year of fee payment: 4