KR20150141999A - 패킹된 데이터 요소 프리디케이션 프로세서들, 방법들, 시스템들, 및 명령어들 - Google Patents

패킹된 데이터 요소 프리디케이션 프로세서들, 방법들, 시스템들, 및 명령어들 Download PDF

Info

Publication number
KR20150141999A
KR20150141999A KR1020157031830A KR20157031830A KR20150141999A KR 20150141999 A KR20150141999 A KR 20150141999A KR 1020157031830 A KR1020157031830 A KR 1020157031830A KR 20157031830 A KR20157031830 A KR 20157031830A KR 20150141999 A KR20150141999 A KR 20150141999A
Authority
KR
South Korea
Prior art keywords
packed data
packed
masked
processor
bits
Prior art date
Application number
KR1020157031830A
Other languages
English (en)
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 KR20150141999A publication Critical patent/KR20150141999A/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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • 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

Abstract

프로세서는, 프로세서가 패킹된 데이터 연산 마스킹을 사용하지 않는 제1 모드, 및 프로세서가 패킹된 데이터 연산 마스킹을 사용하는 제2 모드를 포함한다. 디코드 유닛은 제1 모드에서 주어진 패킹된 데이터 연산에 대한 마스킹되지 않은 패킹된 데이터 명령어를 디코드하고, 제2 모드에서 주어진 패킹된 데이터 연산의 마스킹된 버전에 대한 마스킹된 패킹된 데이터 명령어를 디코드한다. 명령어들은 동일한 명령어 길이를 갖는다. 마스킹된 명령어는 마스크를 특정하기 위한 비트(들)을 갖는다. 실행 유닛(들)은 디코드 유닛과 결합된다. 실행 유닛(들)은, 디코드 유닛이 제1 모드에서 마스킹되지 않은 명령어를 디코딩하는 것에 응답하여, 주어진 패킹된 데이터 연산을 수행한다. 실행 유닛(들)은, 디코드 유닛이 제2 모드에서 마스킹된 명령어를 디코딩하는 것에 응답하여, 주어진 패킹된 데이터 연산의 마스킹된 버전을 수행한다.

Description

패킹된 데이터 요소 프리디케이션 프로세서들, 방법들, 시스템들, 및 명령어들{PACKED DATA ELEMENT PREDICATION PROCESSORS, METHODS, SYSTEMS, AND INSTRUCTIONS}
본원에 설명된 실시예들은 일반적으로 프로세서들에 관련된다. 특히, 본원에 설명된 실시예들은 패킹된 데이터를 프로세싱할 수 있는 프로세서들에 관련된다.
많은 프로세서들이 단일 명령어, 다수의 데이터(Single Instruction, Multiple Data)(SIMD) 아키텍처들을 갖는다. SIMD 아키텍처에서, 단 하나의 데이터 요소 또는 데이터 요소들의 쌍에 대해 연산하는 스칼라 명령어 대신에, 패킹된 데이터 명령어(packed data instruction), 벡터 명령어 또는 SIMD 명령어가 다수의 데이터 요소들 또는 데이터 요소들의 다수의 쌍에 대해 동시(예를 들어, 병렬로) 연산할 수 있다. 프로세서는 다수의 데이터 요소들에 대한 다수의 연산들을 동시에(예를 들어, 병렬로) 수행하기 위해 패킹된 데이터 명령어에 응답하는 병렬 실행 하드웨어를 가질 수 있다.
SIMD 아키텍처에서, 다수의 데이터 요소들이 패킹된 데이터 또는 벡터 데이터로서 하나의 레지스터 또는 메모리 위치(memory location) 내에 패킹될 수 있다. 패킹된 데이터에서, 레지스터 또는 다른 저장 위치(storage location)의 비트들은 다수의 데이터 요소들의 시퀀스로 논리적으로 분할될 수 있다. 데이터 요소들 각각은 동일한 크기를 공통적으로 갖는 다른 데이터 요소들과 함께 레지스터 또는 다른 저장 위치 내에 저장되는 데이터의 개별 조각을 나타낼 수 있다. 예를 들어, 128 비트 폭(128-bit wide)의 레지스터는 2개의 64 비트 폭의 패킹된 데이터 요소들, 4개의 32 비트 폭의 패킹된 데이터 요소들, 8개의 16 비트 폭의 패킹된 데이터 요소들, 또는 16개의 8 비트 폭의 패킹된 데이터 요소들을 가질 수 있다. 패킹된 데이터 요소들은 다른 것들과 별개로 연산될 수 있는 데이터의 분리된 개별 조각(예를 들어, 픽셀의 색상, 그래픽 좌표 등)을 통상적으로 나타낸다.
대표적으로, 일 유형의 패킹된 데이터 명령어, 벡터 명령어, 또는 SIMD 명령어(예를 들어, 패킹된 가산 명령어(add instruction))는 단일의 패킹된 데이터 연산(예를 들어, 가산)이 2개의 소스 패킹된 데이터 피연산자(source packed data operand)로부터의 데이터 요소들의 모든 대응하는 쌍들에 대해 수직 방식(vertical fashion)으로 수행되어 목적지 또는 결과 패킹된 데이터(destination or result packed data)를 생성한다는 것을 특정할 수 있다. 소스 패킹된 데이터 피연산자들은 동일한 크기일 수 있고, 동일한 폭의 데이터 요소들을 포함할 수 있고, 따라서, 동일한 수의 데이터 요소들을 각각 포함할 수 있다. 2개의 소스 패킹된 데이터 피연산자들 내의 동일한 비트 위치들 내의 소스 데이터 요소들은 대응하는 데이터 요소들을 나타낼 수 있다. 패킹된 데이터 연산은 대응하는 소스 데이터 요소들의 이러한 쌍들 각각에 대해 개별로 또는 실질적으로 독립적으로 수행되어 매칭되는 개수의 결과 데이터 요소들을 생성하며, 따라서 대응하는 소스 데이터 요소들의 각각의 쌍은 대응하는 결과 데이터 요소를 가질 수 있다. 통상적으로, 그러한 명령어에 대한 결과 데이터 요소들은 동일한 순서이고 그들은 종종 동일한 크기를 갖는다.
이러한 예시적인 유형의 패킹된 데이터 명령어에 부가하여, 각종의 다른 유형의 패킹된 데이터 명령어들이 존재한다. 예를 들어, 오직 하나의 소스 패킹된 데이터 피연산자를 갖는 것들이 존재한다. 예를 들어, 패킹된 데이터 시프트 명령어는 단일 소스 패킹된 데이터의 각각의 데이터 요소를 독립적으로 시프팅하여 결과 패킹된 데이터를 생성할 수 있다. 다른 패킹된 데이터 명령어들은 둘보다 많은 소스 패킹된 데이터 피연산자에 대해 연산할 수 있다. 또한, 다른 패킹된 데이터 명령어들은 동일한 패킹된 데이터 피연산자 내의 데이터 요소들에 대해 수직 방식 대신에 수평 방식으로 연산할 수 있다(예를 들어, 2개의 소스 패킹된 데이터 피연산자들 간의 대응하는 데이터 요소들에 대해). 여전히 다른 패킹된 데이터 명령어들은, 상이한 크기의 데이터 요소들을 갖고 및/또는 상이한 데이터 요소 순서를 갖는 상이한 크기의 결과 패킹된 데이터 피연산자를 생성할 수 있다.
본 발명은, 실시예들을 예시하는데 이용되는 첨부 도면들 및 다음의 설명을 참조함으로써 최상으로 이해될 수 있다. 도면들에서:
도 1은 프로세서의 실시예의 블록도이다.
도 2는 프로세서의 다른 실시예의 블록도이다.
도 3은 병합을 이용하는 마스킹된 패킹된 데이터 연산(masked packed data operation with merging)의 예시적인 실시예의 블록도이다.
도 4는 제로잉을 이용하는 마스킹된 패킹된 데이터 연산(masked packed data operation with zeroing)의 예시적인 실시예의 블록도이다.
도 5는 마스킹된 패킹된 데이터 명령어의 실시예를 프로세싱하는 방법의 실시예의 블록 흐름도이다.
도 6은 패킹된 데이터 연산 마스크 비트들의 수가 패킹된 데이터 폭 및 패킹된 데이터 요소 폭에 따르는 것을 예시하는 테이블이다.
도 7은 패킹된 데이터 연산 마스크 레지스터들의 적절한 세트의 예시적인 실시예의 블록도이다.
도 8은 패킹된 데이터 연산 마스크 레지스터의 실시예를 예시하는 도면이고 패킹된 데이터 연산 마스크 비트들의 수가 패킹된 데이터 폭 및 데이터 요소 폭에 따른다는 것을 도시한다.
도 9는, 동일한 물리적 레지스터가 패킹된 데이터 연산 마스크 레지스터 또는 패킹된 데이터 레지스터로서 논리적으로 보여질 수 있고 및/또는 액세스될 수 있는 실시예를 예시하는 블록도이다.
도 10은, 동일한 물리적 레지스터가 다수의 패킹된 데이터 연산 마스크들을 저장하는 패킹된 데이터 연산 마스크 레지스터 또는 패킹된 데이터 레지스터로서 논리적으로 보여질 수 있고 및/또는 액세스될 수 있는 실시예를 예시하는 블록도이다.
도 11은, 패킹된 데이터 연산 마스크의 비트들이 패킹된 데이터의 데이터 요소들 사이에 분산되는 실시예를 예시하는 블록도이다.
도 12는, 패킹된 데이터의 데이터 요소들 사이에 분산되는 패킹된 데이터 연산 마스크 비트들을 갖는 레지스터들의 세트가 2개 이상의 더 작은 마스크들 또는 단일의 더 큰 마스크를 저장함에 따라 상이한 뷰들로 보여질 수 있거나 액세스될 수 있는 실시예를 예시하는 블록도이다.
도 13a은, 본 발명의 실시예들에 따른 예시적인 순차 파이프라인(in-order pipeline) 및 예시적인 레지스터 리네이밍(register renaming), 비순차 발행/실행 파이프라인(out-of-order issue/execution pipeline) 모두를 예시하는 블록도이다.
도 13b는, 본 발명의 실시예들에 따른 프로세서에 포함될 순차 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 아키텍처 코어 모두를 예시하는 블록도이다.
도 14a는, 본 발명의 실시예들에 따른 단일 프로세서 코어를, 온-다이(on-die) 상호접속 네트워크로의 그것의 접속 및 레벨 2(L2) 캐시의 그것의 로컬 서브세트와 함께 도시하는 블록도이다.
도 14b는, 본 발명의 실시예들에 따른 도 14a의 프로세서 코어 부분의 확대도이다.
도 15는, 본 발명의 실시예들에 따른, 하나보다 많은 코어를 가질 수 있고, 통합된 메모리 제어기를 가질 수 있고, 통합된 그래픽을 가질 수 있는 프로세서의 블록도이다.
도 16은 본 발명의 일 실시예에 따른 시스템의 블록도이다.
도 17은 본 발명의 실시예에 따른 제1의 보다 구체적인 예시적인 시스템의 블록도이다.
도 18은 본 발명의 실시예에 따른 제2의 보다 구체적인 예시적인 시스템의 블록도이다.
도 19는 본 발명의 실시예에 따른 SoC의 블록도이다.
도 20은 본 발명의 실시예들에 따라 소스 명령어 세트에서의 이진 명령어들을 타겟 명령어 세트에서의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대비하는 블록도이다.
패킹된 데이터 요소들에 대한 프리디케이트(predicate) 또는 마스크 연산에 대한 접근법들이 본원에 개시된다. 이하의 설명에서는, 많은 특정 상세들이 개시된다(예를 들어, 마스크들을 구현하는 특정 방식들, 특정 마스크 길이들, 데이터 포맷들, 프로세서 구성들, 마이크로아키텍처의 상세들, 연산들의 시퀀스들 등). 그러나, 실시예들은 이들 특정 상세 없이 실시될 수 있다. 다른 경우에, 본 설명의 이해를 모호하게 하는 것을 회피하기 위해서 잘 알려진 회로들, 구조들 및 기술들은 상세하게 제시되지 않았다.
도 1은 프로세서(100)의 실시예의 블록도이다. 프로세서는 명령어들을 프로세스하도록 동작가능한 명령어 프로세싱 장치를 나타낸다. 일부 실시예들에서, 프로세서는 범용 프로세서(예를 들어, 데스크톱, 랩톱 또는 다른 컴퓨터들에서 중앙 처리 유닛(CPU)으로서 종종 이용되는 유형의 범용 마이크로프로세서)일 수 있다. 대안적으로, 프로세서는 특수 목적 프로세서일 수 있다. 적절한 특수 목적 프로세서들의 예들은, 이것으로 한정되는 것은 아니지만, 몇몇 예를 들자면, 네트워크 프로세서들, 통신 프로세서들, 암호화 프로세서들, 그래픽 프로세서들, 코-프로세서들, 임베디드 프로세서들, 디지털 신호 프로세서들(DSP), 및 제어기들(예를 들어, 마이크로제어기들)을 포함한다. 프로세서는 다양한 CISC(complex instruction set computing) 프로세서들, 다양한 RISC(reduced instruction set computing) 프로세서들, 다양한 VLIW(very long instruction word) 프로세서들, 이들의 다양한 혼성체들(hybrids), 또는 기타 타입의 프로세서들 전체 중 임의의 것일 수 있다. 일부 실시예들에서, 프로세서는 패킹된 데이터 연산에 대해 프리디케이션 또는 마스킹을 활용할 수 있는 RISC 프로세서를 나타낼 수 있다.
프로세서는 명령어 세트(102)를 갖는다. 명령어 세트의 명령어들은 실행을 위해 프로세서에 제공되는 매크로명령어들(macroinstructions), 어셈블리 언어 명령어들 또는 머신-레벨 명령어들을 나타내며,마이크로명령어들, 마이크로-오피들(micro-ops) 또는 명령어 세트의 명령어들로부터 디코드되고 변환되는 기타의 명령어들이나 제어 신호들과는 대조적이다. 일부 실시예들에서(예를 들어, 특정 RISC 프로세서들의 경우에서), 명령어들은 실질적으로 고정된 명령어 길이(예를 들어, 모든 또는 적어도 대부분의 명령어들이 32 비트 또는 일부 다른 길이일 수 있음)를 가질 수 있는데, 가변 명령어 길이를 갖는 것과는 대조적이다.
도시된 바와 같이, 일부 실시예들에서, 명령어 세트는 선택적으로 하나 이상의 주어진 마스킹되지 않은 패킹된 데이터 연산들에 대한 하나 이상의 마스킹되지 않은 패킹된 데이터 명령어들(106)을 포함할 수 있다. 도시된 바와 같이, 명령어 세트는 또한 하나 이상의 주어진 마스킹된 패킹된 데이터 연산들에 대한 하나 이상의 마스킹된 패킹된 데이터 명령어들(104)을 포함한다. 적절한 마스킹된 및 마스킹되지 않은 패킹된 데이터 명령어들/연산들의 몇가지 예시적인 예들은, 이것으로 한정되는 것은 아니지만, 마스킹된 및 마스킹되지 않은 패킹된 가산 명령어들/연산들, 되는 것은 아니지만, 마스킹된 및 마스킹되지 않은 패킹된 감산 명령어들/연산들, 되는 것은 아니지만, 마스킹된 및 마스킹되지 않은 패킹된 승산 명령어들/연산들, 되는 것은 아니지만, 마스킹된 및 마스킹되지 않은 패킹된 시프트 명령어들/연산들, 되는 것은 아니지만, 마스킹된 및 마스킹되지 않은 패킹된 회전(rotate) 명령어들/연산들, 되는 것은 아니지만, 마스킹된 및 마스킹되지 않은 패킹된 비교(compare) 명령어들/연산들, 마스킹된 및 마스킹되지 않은 패킹된 논리 OR 명령어들/연산들, 되는 것은 아니지만, 마스킹된 및 마스킹되지 않은 패킹된 논리 AND 명령어들/연산들, 마스킹된 및 마스킹되지 않은 패킹된 역수(reciprocal) 명령어들/연산들, 마스킹된 및 마스킹되지 않은 패킹된 평균(average) 명령어들/연산들, 및 본 기술분야에 공지된 기타의 마스킹된 및 마스킹되지 않은 패킹된 산술적 및/또는 논리 명령어들/연산들을 포함한다.
프로세서는 또한 패킹된 데이터 레지스터들(108)의 세트를 포함한다. 패킹된 데이터 레지스터들은 일반적으로, 각각이 패킹된 데이터, 벡터 데이터 또는 SIMD 데이터를 저장하도록 동작가능한 온-다이 프로세서 저장 위치들을 나타낸다. 패킹된 데이터 레지스터들은 피연산자들(예를 들어, 소스 및 목적지 피연산자들)을 식별하기 위해 명령어 세트의 명령어들에 의해 특정되는 소프트웨어 및/또는 프로그래머 및/또는 레지스터들에게 명백한 레지스터들을 나타낼 수 있다. 레지스터들은 공지된 기법들을 이용하여 상이한 마이크로아키텍처들의 상이한 방식들로 구현될 수 있고, 임의의 특정 유형의 회로로 제한되지 않는다. 적절한 유형들의 레지스터들의 예들은, 이것으로 한정되는 것은 아니지만, 전용 물리적 레지스터들, 레지스터 리네이밍을 사용하는 동적으로 할당되는 물리적 레지스터들 및 이들의 조합들을 포함한다.
일부 실시예들에서, 프로세서는 패킹된 데이터 레지스터들(108)에 대해 구현되는 하나 이상의 패킹된 데이터 연산 마스크 레지스터들(110)의 세트를 선택적으로 가질 수 있으나, 이것은 요구되는 것은 아니다. 일부 실시예들에서, 프로세서는 패킹된 데이터 레지스터들(108)과는 별개인 하나 이상의 별개의 전용 패킹된 데이터 연산 마스크 레지스터들(112)의 세트를 선택적으로 가질 수 있다. 패킹된 데이터 연산 마스크 레지스터들(110) 및/또는 패킹된 데이터 연산 마스크 레지스터들(112)은 패킹된 데이터 연산 마스크들을 저장하는데 사용될 수 있다. 예로서, 마스킹된 패킹된 데이터 명령어들은, 패킹된 데이터 연산 마스크, 예를 들어, 패킹된 데이터 연산 마스크 레지스터(112) 또는 패킹된 데이터 레지스터(108)를 특정하는 하나 이상의 비트를 가질 수 있다. 패킹된 데이터 연산 마스크들은 또한 프리디케이트 마스크들 또는 단순히 마스크들로서 본원에서 지칭될 수 있다.
프로세서는 또한 하나 이상의 실행 유닛(114)을 포함한다. 하나 이상의 실행 유닛은 명령어 세트(102)의 명령어들(예를 들어, 마스킹된 패킹된 데이터 명령어들(104))을 실행 또는 프로세스하도록 동작가능하다. 일부 실시예들에서, 실행 유닛들은 명령어들을 실행 또는 프로세스하기 위한 특정 로직(예를 들어, 특정 통합된 회로 또는 펌웨어와 잠재적으로 결합된 다른 하드웨어)을 포함할 수 있다.
일부 실시예들에서, 프로세서는 패킹된 데이터 명령어들/연산들에 대해 마스킹이 사용되거나 또는 사용되지 않는 상이한 모드들을 가질 수 있으나, 이것은 요구되는 것은 아니다. 예를 들어, 프로세서는 프로세서가 패킹된 데이터 연산 마스킹을 사용하지 않는 제1 모드 및 프로세서가 패킹된 데이터 연산 마스킹을 사용하는 제2 모드를 가질 수 있다. 예로서, 마스킹되지 않은 패킹된 데이터 명령어들이 페치되고, 디코드되고, 및 실행되어 마스킹되지 않은 패킹된 데이터 연산들을 제1 모드에 있으면서 마스킹 또는 패킹된 데이터 연산 마스크들을 이용하지 않고 수행할 수 있다. 대조적으로, 마스킹된 패킹된 데이터 명령어들이 페치되고, 디코드되고 및 실행되어 마스킹된 패킹된 데이터 연산들을 제2 모드에 있으면서 패킹된 데이터 연산 마스크들 및 마스킹을 이용하여 수행할 수 있다. 제1 및 제2 모드들은 프로세서의 레지스터(예를 들어, 제어 레지스터, 구성 레지스터 등) 내의 하나 이상의 비트에 의해 표시될 수 있다. 상이한 모드들의 그러한 사용은 RISC 프로세서들, 실질적으로 고정된 명령어 길이(예를 들어, 대부분 내지 거의 전부의 명령어들이 32 비트와 같이 동일한 명령어 길이를 가짐)를 사용하는 프로세서들, 제한된 오피코드 공간을 갖는 프로세서들 등에서의 장점들을 제공하는 경향이 있을 수 있다. 종종, 그러한 프로세서들에서의 이용가능한 연산 코드들의 수는 주어진 패킹된 데이터 연산의 마스킹되지 않은 및 마스킹된 버전들 모두를 지원하기에 충분치 않다. 마스킹된 패킹된 데이터 연산들에 대해 상이한 모드를 제공함으로써, 추가의 명령어들이 포함되어 마스킹된 패킹된 데이터 연산들을 오피코드의 길이를 반드시 증가시킬 필요 없이 수행할 수 있다. 다른 실시예들은 그러한 모드들을 이용하는 것으로 제한되지 않는다.
도 2는 프로세서(200)의 다른 실시예의 블록도이다. 이전과 같이, 프로세서는 범용 프로세서 또는 특수 목적 프로세서를 나타낼 수 있고, 다양한 RISC, CISC, VLIW, 혼성, 또는 다른 유형의 프로세서들 중 임의의 것일 수 있다. 도 1의 프로세서에 대해 전술된 상세들 및 선택적 상세들은 또한 도 2의 프로세서에 선택적으로 적용될 수 있다.
프로세서(200)는 마스킹된 패킹된 데이터 명령어(204)를 수신할 수 있다. 예를 들어, 명령어는 명령어 페치 유닛, 명령어 큐 등으로부터 수신될 수 있다. 마스킹된 패킹된 데이터 명령어는 머신 코드 명령어, 어셈블리 언어 명령어, 매크로명령어(macroinstruction), 또는 프로세서의 명령어 세트의 제어 신호를 나타낼 수 있다. 이전에 언급된 유형의 마스킹된 패킹된 데이터 명령어들뿐 아니라 다른 유형의 마스킹된 패킹된 데이터 명령어 중 임의의 것이 적절하다.
예시된 프로세서는 명령어 디코드 유닛(216)을 포함한다. 명령어 디코드 유닛은 또한 디코드 유닛 또는 디코더로서 지칭될 수 있다. 디코드 유닛은 상대적으로 상위 레벨(higher-level)의 명령어들(예를 들어, 매크로명령어들, 머신 코드 명령어들, 어셈블리 언어 명령어들 등)을 수신하여 디코딩하고, 하나 이상의 상대적으로 하위 레벨(lower-level)의 명령어들 또는 더 높은 레벨의 명령어들을 반영하고, 표현하고, 및/또는 그로부터 도출되는 제어 신호들(예를 들어, 마이크로명령어들, 마이크로 연산들, 마이크로 코드 엔트리 포인트들 등)을 출력한다. 하나 이상의 하위 레벨의 명령어들 또는 제어 신호들은 하나 이상의 하위 레벨(예를 들어, 회로 레벨 또는 하드웨어 레벨)의 연산들을 통해 상위 레벨의 명령어들을 구현할 수 있다. 디코드 유닛은, 이것으로 한정되는 것은 아니지만, 마이크로코드 판독 전용 메모리들(ROM들), 룩업(look-up) 테이블들, 하드웨어 구현들, 프로그래머블 로직 어레이들(PLA들) 및 관련 기술분야에 공지된 디코드 유닛들을 구현하는데 이용되는 다른 메커니즘들을 포함하는 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다.
다른 실시예들에서, 명령어 에뮬레이터(emulator), 트랜슬레이터(translator), 모퍼(morpher), 인터프리터(interpreter), 또는 다른 명령어 변환 로직이 이용될 수 있다. 다양한 상이한 유형들의 명령어 변환 로직이 관련 분야에 공지되어 있고, 소프트웨어, 하드웨어, 펌웨어 또는 이들의 조합으로 구현될 수 있다. 명령어 변환 로직은 명령어를 수신하고, 그 명령어를 하나 이상의 대응하는 도출된 명령어들 또는 제어 신호들로 에뮬레이트, 트랜슬레이트, 모프, 인터프리트, 또는 다른 방식으로 변환할 수 있다. 일부 실시예들에서, 명령어 변환 로직 및 디코드 유닛 모두가 사용될 수 있다. 예를 들어, 명령어 변환 로직은 명령어를 하나 이상의 중간 명령어들로 변환할 수 있고, 디코드 유닛은 하나 이상의 중간 명령어들을 프로세서의 통합 회로에 의해 실행가능한 하나 이상의 하위 레벨 명령어들 또는 제어 신호들로 변환할 수 있다. 명령어 변환 로직은 프로세서 외부에(예를 들어, 별개의 다이 또는 메모리 내에), 프로세서 상에, 또는 그 조합으로 위치될 수 있다.
프로세서는 또한 패킹된 데이터 레지스터들(208)의 세트를 포함한다. 이러한 패킹된 데이터 레지스터들은 전술한 패킹된 데이터 레지스터들(108)과 유사할 수 있다. 마스킹된 패킹된 데이터 명령어(204)는 제1 소스 패킹된 데이터(예를 들어, 제1 소스 패킹된 데이터 레지스터(218))를 명시적으로 특정(예를 들어, 하나 이상의 필드 또는 비트들의 세트를 통해)할 수 있거나, 다른 방식으로 표시할 수 있다(예를 들어, 묵시적으로 표시). 명령어의 유형에 따라, 마스킹된 패킹된 데이터 명령어는 선택적으로 제2 소스 패킹된 데이터(예를 들어, 제2 소스 패킹된 데이터 레지스터(220))를 명시적으로 특정할 수 있거나 다른 방식으로 나타낼 수 있다. 일부 경우들에서, 마스킹된 패킹된 데이터는 선택적으로 목적지 패킹된 데이터(예를 들어, 목적지 패킹된 데이터 레지스터(222))를 특정할 수 있거나 다른 방식으로 표시할 수 있다. 다른 실시예들에서, 이러한 패킹된 데이터 피연산자들 중 하나 이상은 메모리 위치 또는 다른 저장 위치 내에 저장될 수 있다. 또한, 다른 실시예들에서, 소스 패킹된 데이터 저장 위치들 중 하나가 목적지 패킹된 데이터 저장 위치로서 재사용될 수 있다.
일부 실시예들에서, 마스킹된 패킹된 데이터 명령어는 또한 소스 패킹된 데이터 연산 마스크(212)(예를 들어, 소스 패킹된 데이터 연산 마스크 레지스터)를 특정할 수 있거나 다른 방식으로 표시할 수 있다. 예시된 실시예에서, 소스 패킹된 데이터 연산 마스크(212)는 패킹된 데이터 레지스터들(208)과는 별개인 레지스터를 나타낼 수 있다. 다른 실시예에서, 소스 패킹된 데이터 연산 마스크는 패킹된 데이터 레지스터들(208)에 대해 구현될 수 있다.
도 2를 다시 참조하면, 실행 유닛(214)이 디코드 유닛(216)과 결합되고, 패킹된 데이터 레지스터들(208)과 결합되고, 소스 패킹된 데이터 연산 마스크(212)와 결합된다. 일부 실시예들에서, 실행 유닛은 산술 유닛, 산술 로직 유닛, 기능 유닛, 디코드된 명령어들을 수신하고 연산들을 수행하는 유닛 등을 포함할 수 있다. 실행 유닛은 마스킹된 패킹된 데이터 연산을 수행하고 결과 패킹된 데이터를 목적지 패킹된 데이터 피연산자 또는 레지스터(222)에 저장하도록, 마스킹된 패킹된 데이터 명령어(204)에 응답하여 및/또는 그의 결과로서(예를 들어, 마스킹된 패킹된 데이터 명령어(204)를 나타내는 및/또는 그로부터 도출되는 하나 이상의 디코드된 또는 다른 방식으로 변환된 명령어들 또는 제어 신호들에 응답하여) 동작가능할 수 있다. 실행 유닛 및/또는 프로세서는 마스킹된 패킹된 데이터 명령어에 응답하여 마스킹된 패킹된 데이터 연산을 수행하는 구체적인 또는 특정 로직(예를 들어, 통합 회로 또는 펌웨어 및/또는 소프트웨어와 잠재적으로 결합된 기타의 하드웨어)을 포함할 수 있다.
일부 실시예들에서, 프로세서는 또한 마스킹되지 않은 패킹된 데이터 명령어(206)를 선택적으로 수신할 수 있다. 마스킹되지 않은 패킹된 데이터 명령어는, 그것이 패킹된 데이터 연산 마스크를 특정하거나 달리 표시할 필요가 없다는 점을 제외하고, 그리고 프로세서로 하여금 마스킹을 사용하게 하지 않는다는 점을 제외하면 이전에 설명된 마스킹된 패킹된 데이터 명령어(204)와 유사할 수 있다. 오히려, 마스킹되지 않은 패킹된 데이터 명령어에 응답하여 마스킹되지 않은 패킹된 데이터 연산이 수행된다. 전술한 바와 같이, 일부 실시예들에서, 프로세서는 패킹된 데이터 명령어들/연산들에 대해 마스킹이 사용되는 또는 사용되지 않는 상이한 모드들을 가질 수 있으나, 이는 요구되는 것은 아니다. 예를 들어, 마스킹되지 않은 패킹된 데이터 명령어(206)가 디코드되고 실행되어 제1 모드에 있으면서 마스킹 또는 패킹된 데이터 연산 마스크를 사용하지 않고 마스킹되지 않은 패킹된 데이터 연산을 수행할 수 있다. 반대로, 마스킹된 패킹된 데이터 명령어(204)가 디코드되고 실행되어 제2 모드에 있는 동안 마스킹된 패킹된 데이터 연산 패킹된 데이터 연산 마스크(212)를 수행할 수 있다. 대표적으로, 제1 및 제2 모드들은 프로세서의 레지스터(예를 들어, 제어 레지스터, 구성 레지스터 등) 내의 하나 이상의 비트에 의해 표시될 수 있다. 그러한 상이한 모드들의 사용은 RISC 프로세서들, 실질적으로 고정된 명령어 길이를 사용하는 프로세서들(예를 들어, 명령어들의 대부분 내지 거의 대부분이 32 비트와 같은 동일한 명령어 길이를 가짐), 제한된 오피코드 공간을 갖는 프로세서들 등에서의 장점들을 제공하는 경향이 있을 수 있다. 종종, 그러한 프로세서들에서의 이용가능한 연산 코드들의 수는 주어진 패킹된 데이터 연산의 마스킹되지 않은 그리고 마스킹된 버전 모두를 지원하기에 충분치않다. 마스킹된 패킹된 데이터 연산들에 대해 상이한 모드를 제공함으로써, 추가의 명령어들이 포함되어 마스킹된 패킹된 데이터 연산들을 오피코드의 길이를 반드시 증가시킬 필요 없이 수행할 수 있다. 다른 실시예들은 그러한 모드들을 이용하는 것으로 제한되지 않는다.
패킹된 데이터 연산 마스크는 프리디케이트 피연산자 또는 조건부 피연산자 또는 조건부 벡터 연산 제어 피연산자를 나타낼 수 있다. 패킹된 데이터 연산 마스크는 또한 본원에서 단순히 마스크로서 지칭될 수 있다. 마스크는, 연산들이 마스킹된 패킹된 데이터 명령어가 소스 데이터 요소들에 대해 수행될지와 관련되는지 여부 및/또는 연산들의 결과가 패킹된 데이터 결과에 저장되는지 여부를 프리디케이트하고, 조건부로 제어하고, 또는 마스크할 수 있다. 마스크는 각각이 다수의 마스크 요소, 프리디케이트 요소들, 또는 조건부 제어 요소들을 포함할 수 있다.
일부 실시예들에서, 마스크는 결과당 데이터 요소 입도(per-result data element granularity)로 연산들을 마스크하도록 동작가능할 수 있다. 일 양태에서, 마스크 요소들은 결과 데이터 요소들과 일대일 대응관계로 포함될 수 있다(예를 들어, 8개의 결과 데이터 요소들 및 8개의 대응하는 마스크 요소들이 존재할 수 있다). 각각의 상이한 마스크 요소는 상이한 대응하는 패킹된 데이터 연산을 마스크하고 및/또는 다른 것들과 개별적으로 및/또는 실질적으로 독립적으로, 상이한 대응하는 결과 데이터 요소의 저장을 마스크하도록 동작가능할 수 있다. 예를 들어, 마스크 요소는 소스 패킹된 데이터의 대응하는 데이터 요소에 대해(또는 2개의 소스 패킹된 데이터의 대응하는 데이터 요소들의 쌍에 대해) 패킹된 데이터 연산이 수행되는지 여부 및/또는 패킹된 데이터 연산의 결과가 대응하는 결과 데이터 요소에 저장되는지 여부를 마스크하도록 동작가능할 수 있다.
통상적으로 각각의 마스크 요소는 단일 비트일 수 있다. 단일 비트는 2개의 상이한 가능성 중 어느 하나를 특정하게 할 수 있다. 일례로서, 각각의 비트는 연산이 수행되거나 또는 그것이 수행되지 않는 것을 특정할 수 있다. 다른 예로서, 각각의 비트는 연산의 결과를 저장하는 것 대 연산의 결과를 저장하지 않는 것을 특정할 수 있다. 한가지 가능한 관례에 따르면, 각각의 마스크 비트는 패킹된 연산의 결과아 대응하는 결과 데이터 요소에 저장되는 것을 허용하는 제1 값(예를 들어, 이진 1로 설정됨), 또는 패킹된 연산의 결과가 대응하는 결과 데이터 요소에 저장되는 것을 방지하는 제2 값(예를 들어, 이진 0으로 클리어됨(cleared))을 가질 수 있다. 반대의 관례가 또한 가능하다. 다른 경우들에서, 각각의 마스크 요소는 2개 이상의 비트를 가질 수 있다(예를 들어, 2개보다 많은 상이한 가능성을 특정하기 위해).
일부 실시예들에서, 연산은 대응하는 마스크 비트 또는 요소에 무관하게 선택적으로수행될 수 있으나, 연산의 대응하는 결과들은 대응하는 마스크 비트 또는 요소의 값에 따라 결과 패킹된 데이터에 저장될 수 있거나 저장되지 않을 수 있다. 대안적으로, 다른 실시예들에서, 연산은, 대응하는 마스크 비트 또는 요소가 마스크 아웃되는 경우(masked out), 선택적으로 생략될 수 있다(즉, 수행되지 않음). 일부 실시예들에서, 예외들 및/또는 위반들은 마스크 오프된(masked-off) 요소에 대한 연산에 대해 선택적으로 억제될 수 있거나, 또는 그에 의해 발생되지 않을 수있다. 일부 실시예들에서, 마스크 오프된 데이터 요소들에 대응하는 메모리 결함(memory fault)은 선택적으로 억제되거나 발생되지 않을 수 있다.
본 설명을 모호하게 하는 것을 회피하기 위해서, 비교적 단순한 프로세서(200)가 도시 및 설명되었다. 다른 실시예들에서, 장치는 프로세서들에서 발견되는 다른 공지된 컴포넌트들을 선택적으로 포함할 수 있다. 그러한 컴포넌트들의 예들은, 이것으로 한정되는 것은 아니지만, 분기 예측 유닛, 명령어 페치 유닛, 명령어 및 데이터 캐시들, 명령어 및 데이터 변환 색인 버퍼들, 사전페치(prefetch) 버퍼들, 마이크로명령어 큐들, 마이크로명령어 시퀀서들, 레지스터 리네이밍 유닛, 명령어 스케줄링 유닛, 버스 인터페이스 유닛들, 제2 또는 더 높은 레벨의 캐시들, 리타이어먼트(retirement) 유닛, 프로세서들에 포함된 다른 컴포넌트들, 및 그의 다양한 조합들을 포함한다. 프로세서들 내의 컴포넌트들의 사실상 다수의 상이한 조합들 및 구성들이 존재하고, 실시예들은 임의의 특정 조합 또는 구성으로 한정되지 않는다. 실시예들은 프로세서들에 포함될 수 있고, 복수의 코어들, 논리 프로세서들, 또는 실행 엔진들을 가지며, 이 중 적어도 하나는 본 명세서에 개시된 마스킹된 패킹된 데이터 명령어의 실시예를 실행하도록 동작 가능한 실행 로직을 갖는다.
도 3은 병합(326)을 이용하는 마스킹된 패킹된 데이터 연산의 예시적인 실시예의 블록도이다. 마스킹된 패킹된 데이터 연산은 마스킹된 패킹된 데이터 명령어(예를 들어, 명령어들(104 및/또는 204))에 응답하여 또는 그의 결과로서 수행될 수 있다. 마스킹된 패킹된 데이터 명령어는 제1 소스 패킹된 데이터(318) 및 제2 소스 패킹된 데이터(320)을 표시할 수 있다. 다른 마스킹된 패킹된 데이터 명령어들은 단일 소스 패킹된 데이터만을, 또는 2개보다 많은 소스 패킹된 데이터를 표시할 수 있다. 예시에서, 제1 및 제2 소스 패킹된 데이터는 동일 크기이고, 동일 폭의 데이터 요소들을 포함하고, 따라서, 각각은 동일한 수의 데이터 요소들을 포함하지만, 이는 요구되는 것은 아니다. 예시에서, 제1 및 제2 소스 패킹된 데이터 각각은 8개의 데이터 요소들을 갖는다. 일례로서, 제1 및 제2 소스 패킹된 데이터 각각은 128 비트 폭일 수 있고 각각은 8개의 16 비트 데이터 요소들을 포함할 수 있으나, 이는 요구되는 것은 아니다. 2개의 소스 패킹된 데이터 내의 동일한 상대적 위치들(예를 들어, 동일한 수직 위치들)에서의 소스 데이터 요소들은 대응하는 데이터 요소들의 쌍을 나타낸다. 데이터 요소들의 각각은 데이터 요소를 나타내는 블록 내에 수치 값을 갖는다. 예를 들어, 제1 소스 패킹된 데이터(318)는, 우측 상의 최하위 순서 위치로부터 좌측 상의 최상위 순서 위치로, 값들 "3, 7, 66, 55, 12, 11, 90, 89"를 갖는다.
명령어는 또한 소스 패킹된 데이터 연산 마스크(312)를 표시한다. 이 예에서, 마스크는 8개의 마스크 요소들, 프리디케이트 요소들, 또는 조건부 제어 요소들을 포함하고, 이는 본 예에서 각각 단일 비트이다. 비트들은 제1 및 제2 소스 패킹된 데이터 내의 소스 데이터 요소들의 대응하는 쌍과의 순서화된 일대일 대응관계에 포함된다. 예를 들어, 최하위 순서 마스크 비트(우측 상의)는 대응하는 데이터 요소들의 최하위 순서 쌍에 대응하고, 최상위 순서 마스크 비트(좌측 상의)는 대응하는 데이터 요소들의 최상위 순서 쌍에 대응하고, 등등이다. 각각의 마스크 비트는 소스 데이터 요소들의 대응하는 쌍에 대한 패킹된 데이터 연산이 프리디케이트되거나 조건부로 개별적으로 그리고 다른것들과 무관하게 제어되는 성능을 허용한다.
예시적인 마스킹된 패킹된 데이터 연산은, 패킹된 데이터 연산 마스크에 따라 목적지 피연산자(322) 또는 패킹된 데이터 결과 내의 제1 및 제2 소스 패킹된 데이터로부터의 데이터 요소들의 대응하는 쌍들의 합을 종래방식으로 저장하는 마스킹된 패킹된 데이터 가산 연산이다. 패킹된 데이터 연산 마스크의 8개의 마스크 비트들 각각은 설정되거나(즉, 1의 이진값을 가짐) 또는 클리어된다(즉, 0의 이진값을 가짐). 예시된 관례에 따라, 각각의 마스크 비트는 각각 설정되거나(즉, 1) 또는 클리어되어(즉, 0), 소스 패킹된 데이터 요소들의 대응하는 쌍에 대해 수행된, 패킹된 데이터 연산(이 경우에서는 가산)의 결과가 패킹된 데이터 결과의 대응하는 데이터 요소 내에 저장되도록 허용하거나 또는 허용하지 않는다. 설정 비트들(즉, 1)은 마스킹되지 않은 비트들 또는 요소들을 나타내는 반면, 클리어된 비트들(즉, 0)은 마스킹된 비트들 또는 요소들을 나타낸다. 예시된 예에서, 8개의 마스크 비트들의 값들은, 우측 상의 최하위 순서 위치로부터 좌측 상의 최상위 순서 위치까지, "1, 1, 0, 1, 0, 1, 1, 0"이다. 설정된(즉, 1) 이러한 마스크 비트들에 대해, 대응하는 합이 대응하는 결과 데이터 요소 내에 저장된다. 예시에서, 합들은 밑줄이 되어 있다. 반대로, 클리어된(즉, 0) 이러한 마스크 비트들에 대해, 소스 데이터 요소들의 대응하는 쌍에 대한 패킹된 데이터 연산의 결과는 대응하는 결과 데이터 요소 내에 저장되지 않는다. 오히려, 예시된 예에서, 제2 소스 패킹된 데이터(320)로부터의 대응하는 데이터 요소의 값은 병합되어 대응하는 결과 데이터 요소 내에 저장된다. 이러한 버전의 마스킹은 병합 마스킹으로 지칭된다. 비트들이 클리어되어(즉, 0) 결과들이 저장되는 것을 하용하거나, 또는 설정되어(즉, 1) 결과들이 저장되는 것을 허용하지 않는 반대의 관례가 또한 가능하다.
도 4는 제로잉(zeroing)(426)을 이용하는 마스킹된 패킹된 데이터 연산의 예시적인 실시예의 블록도이다. 마스킹된 패킹된 데이터 연산은 마스킹된 패킹된 데이터 명령어(예를 들어, 명령어들(104 및/또는 204))에 응답하여, 또는 그의 결과로서 수행될 수 있다. 명령어는 제1 소스 패킹된 데이터(418), 제2 소스 패킹된 데이터(420), 소스 패킹된 데이터 연산 마스크(412) 및 목적지 저장 위치(422)를 표시할 수 있다. 제로잉을 이용하는 마스킹된 패킹된 데이터 연산은 전술한 병합을 이용하는 마스킹된 패킹된 데이터 연산과 유사하다. 설명의 모호함을 회피하기 위해, 유사성들은 반복되지 않을 것이지만, 차이점들이 주로 언급될 것이다.
한가지 주목할만한 차이는, 대응하는 마스크 비트들이 마스크 오프되거나 제로화된(zeroed)(예를 들어, 이진 0으로 클리어됨) 경우에 소스 패킹된 데이터(예를 들어, 도 3의 제2 소스 패킹된 데이터(320))의 데이터 요소들의 값들을 대응하는 결과 데이터 요소들 내로 병합 또는 저장하는 대신에, 대응하는 결과 데이터 요소들이 제로 아웃된다(zeroed out). 예를 들어, 결과 패킹된 데이터 요소의 비트들 전부는 0의 값으로 주어질 수 있다. 이는 제로잉 마스킹(zeroing-masking)으로 지칭된다. 대안적으로, 0 이외의 다른 미리결정된 값들이 선택적으로 사용될 수 있다.
이들이 적절한 마스킹된 패킹된 데이터 연산들의 단지 몇몇 예시적인 예들이라는 것이 이해되어야 한다. 다른 실시예들에서, 가산 대신에, 연산은 승산 연산, 비교 연산, 감산 연산, 평균 연산, 시프트 연산, 회전 연산 등일 수 있다. 또한, 다른 실시예들에서, 연산은 단일의 소스 패킹된 데이터 피연산자, 2개보다 많은 소스 패킹된 데이터 피연산자들, 상이한 크기들의 소스 패킹된 데이터 피연산자들, 상이한 크기들 및/또는 상이한 수의 데이터 요소들을 갖는 소스 패킹된 데이터, 수직이 아닌 수평 연산들 등일 수 있다.
일부 실시예들에서, 도 3 및/또는 도 4의 연산들은 도 1의 프로세서 및/또는 도 2의 프로세서에 의해 및/또는 그 내에서 수행될 수 있다. 대안적으로, 도 3 및/또는 도 4의 연산들은 유사하거나 상이한 프로세서들에 의해 수행될 수 있다. 또한, 도 1의 프로세서 및/또는 도 2의 프로세서는 도 3 및/또는 도 4의 것과 동일하고, 유사하거나 또는 상이한 연산들을 수행할 수 있다.
도 5는 마스킹된 패킹된 데이터 명령어의 실시예를 프로세싱하는 방법(530)의 실시예의 블록 흐름도이다. 다양한 실시예들에서, 이 방법은 프로세서 또는 다른 명령어 프로세싱 장치에 의해 및/또는 그 내에서 수행될 수 있다. 일부 실시예들에서, 방법은 도 1 및 /또는 도 2의 프로세서에 의해 수행될 수 있다. 대안적으로, 본 방법은 유사하거나 상이한 프로세서에 의해 수행될 수 있다. 또한, 도 1 및/또는 도 2의 프로세서는 도 5의 것들과 동일하거나, 유사하거나 또는 상이한 연산들 및/또는 방법들을 수행할 수 있다.
본 방법은, 블록(531)에서, 마스킹된 패킹된 데이터 명령어를 수신하는 것을 포함한다. 다양한 양태들에서, 명령어는 프로세서 또는 그 일부(예를 들어, 명령어 페치 유닛, 디코드 유닛, 명령어 큐 등)에서 수신될 수 있다. 다양한 양태들에서, 명령어는 오프-다이 소스로부터(예를 들어, 메인 메모리, 디스크, 또는 상호접속부로부터), 또는 온-다이 소스로부터(예를 들어, 명령어 캐시로부터) 수신될 수 있다. 마스킹된 패킹된 데이터 명령어는 제1 복수의 패킹된 데이터 요소들을 갖는 제1 소스 패킹된 데이터를 특정하거나 다른 방식으로 표시할 수 있고, 제2 복수의 패킹된 데이터 요소들을 갖는 제2 소스 패킹된 데이터를 특정하거나 다른 방식으로 표시할 수 있고, 복수의 마스크 요소를 갖는 패킹된 데이터 연산 마스크를 특정하거나 다른 방식으로 표시할 수 있고, 및 목적지 저장 위치를 특정하거나 다른 방식으로 표시할 수 있다.
결과 패킹된 데이터는, 블록(532)에서, 마스킹된 패킹된 데이터 명령어에 응답하여 및/또는 그의 결과로서 표시된 목적지 저장 위치 내에 저장될 수 있다. 결과 패킹된 데이터는 대응하는 상대적 위치 내의 마스크 요소들 중 상이한 것에 각각이 대응하는 복수의 결과 데이터 요소를 포함한다. 대응하는 마스크 요소에 의해 마스크 아웃되지 않은 결과 데이터 요소들은 제1 및 제2 소스 패킹된 데이터로부터의 소스 패킹된 데이터 요소들의 대응하는 쌍에 대해 수행된 패킹된 데이터 연산의 결과를 포함한다. 대응하는 마스크 요소에 의해 마스크 아웃된 결과 데이터 요소들은, 예를 들어, 제1 및 제2 소스 패킹된 데이터 중 하나로부터 제로 아웃된 값 또는 병합된 값과 같은 마스크 아웃된 값을 포함한다.
도 6은 패킹된 데이터 폭 및 패킹된 데이터 요소 폭에 따른 패킹된 데이터 연산 마스크 비트들의 수를 예시하는 테이블(636)이다. 64 비트, 128 비트, 256 비트 및 512 비트의 패킹된 데이터 폭이 도시된다. 다른 실시예들에서, 이러한 폭들의 서브세트(subset) 또는 수퍼세트(superset)가 사용될 수 있거나, 또는 다른 폭들이 전체적으로 사용될 수 있다(예를 들어, 32 비트, 1024 비트 등). 8비트 바이트들, 16비트 워드들, 32비트 더블 워드들(dwords) 또는 단일 정밀도 부동 소수점(SP) 및 64비트 쿼드 워드들(Qwords) 또는 배 정밀도 부동 소수점(DP)의 패킹된 데이터 요소 폭들이 고려되지만, 다른 폭들도 가능하다.
도시된 바와 같이, 패킹된 데이터 폭이 64 비트인 경우에, 패킹된 데이터 요소 폭이 8 비트인 경우 마스킹을 위해 8비트가 사용될 수 있고, 패킹된 데이터 요소 폭이 16 비트인 경우 마스킹을 위해 4 비트가 사용될 수 있고, 패킹된 데이터 요소 폭이 32비트인 경우 마스킹을 위해 2 비트가 사용될 수 있다. 패킹된 데이터 폭이 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 비트가 사용될 수 있다. 이러한 폭들 중 임의의 것 또는 이러한 폭들의 임의의 조합의 마스크들이 일부 실시예들에서 사용될 수 있다.
도 7은 패킹된 데이터 연산 마스크 레지스터들(712)의 적절한 세트의 예시적인 실시예의 블록도이다. 패킹된 데이터 연산 마스크 레지스터 각각은 패킹된 데이터 연산 마스크를 저장하도록 사용될 수 있다. 일부 실시예들에서, 패킹된 데이터 연산 마스크 레지스터들은 아키텍처 레지스터들의 개별적인, 전용의 세트일 수 있다. 예시된 실시예에서, 패킹된 데이터 연산 마스크 레지스터들 각각은 64 비트 폭이다. 대안의 실시예들에서, 패킹된 데이터 연산 마스크 레지스터들의 폭들은 64 비트보다 더 좁거나(예를 들어, 8 비트, 16 비트, 20 비트, 32 비트 등), 64 비트보다 더 넓을 수 있다(예를 들어, 128 비트). 예시된 실시예에서, 세트는 M0 내지 M7으로 라벨링된 8개의 패킹된 데이터 연산 마스크 레지스터들을 포함한다. 대안의 실시예들은 8개보다 적거나(예를 들어, 1개, 2개, 3개, 4개, 5개, 6개 등), 또는 8개보다 많은(예를 들어, 12개, 16개, 20개, 32개 등) 패킹된 데이터 연산 마스크 레지스터들을 포함할 수 있다. 예로서, 마스킹된 패킹된 데이터 명령어들은 3개의 비트를 사용하여(예를 들어, 3 비트 필드) 8개의 패킹된 데이터 연산 마스크 레지스터들(M0 내지 M7) 중 임의의 하나를 인코드 또는 특정할 수 있다. 대안의 실시예들에서, 각각, 더 적거나 더 많은 패킹된 데이터 연산 마스크 레지스터들이 존재하는 경우 더 적거나 더 많은 비트들이 사용될 수 있다. 패킹된 데이터 연산 마스크 레지스터들은 공지된 기법들을 이용하여 상이한 방식들로 구현될 수 있지만, 임의의 공지된 특정 유형의 회로로 한정되는 것은 아니다. 적절한 레지스터들의 예들은, 이것으로 한정되는 것은 아니지만, 전용 물리적 레지스터들, 레지스터 리네이밍을 사용하는 동적으로 할당되는 물리적 레지스터들 및 이들의 조합을 포함한다.
도 8은 패킹된 데이터 연산 마스크 레지스터(812)의 예시적인 실시예를 예시하며 패킹된 데이터 연산 마스크로서 사용되는 및/또는 패킹된 데이터 폭 및 데이터 요소 폭에 따른 마스킹에 대한 비트들의 수를 도시하는 도면이다. 예시된 패킹된 데이터 연산 마스크 레지스터의 예시적인 실시에는 64 비트 폭이지만, 더 좁거나(예를 들어, 16 비트, 8 비트 등), 더 넓은 레지스터들이 대신에 사용될 수 있다. 패킹된 데이터 폭 및 데이터 요소 폭의 조합에 따라, 64 비트 전부 또는 64 비트의 서브세트만이 마스킹을 위한 패킹된 데이터 연산 마스크로서 사용될 수 있다. 일반적으로, 단일의 요소당 마스킹 제어 비트가 사용되는 경우, 마스킹에 사용되는 패킹된 데이터 연산 마스크 레지스터 내의 비트들의 수는 비트들에서의 패킹된 데이터 요소 폭에 의해 나누어진 비트들에서의 패킹된 데이터 피연산자 폭과 같다.
여러 예시적인 예들이 도시된다. 즉, 패킹된 데이터 폭이 128 비트이고 패킹된 데이터 요소 폭이 16 비트인 경우, 레지스터의 최하위 순서 8 비트만이 패킹된 데이터 연산 마스크로서 사용된다. 패킹된 데이터 폭이 128 비트이고 패킹된 데이터 요소 폭이 8 비트인 경우, 레지스터의 최하위 순서 16 비트만이 패킹된 데이터 연산 마스크로서 사용된다. 패킹된 데이터 폭이 256 비트이고 패킹된 데이터 요소 폭이 8 비트인 경우, 레지스터의 최하위 순서 32 비트만이 패킹된 데이터 연산 마스크로서 사용된다. 패킹된 데이터 폭이 512 비트이고 패킹된 데이터 요소 폭이 8 비트인 경우, 레지스터의 모든 64 비트가 패킹된 데이터 연산 마스크로서 사용된다. 예시된 실시예에 따라, 마스킹된 패킹된 데이터 명령어는, 패킹된 데이터 폭 및 데이터 요소 폭과 연관된 그 명령어들에 기초하여 패킹된 데이터 연산 마스크에 대해 사용된 레지스터의 최하위 순서 또는 최하위 비트의 개수만을 활용할 수 있다. 예시된 실시예에서, 레지스터의 최하위 순서 서브세트 또는 부분이 마스킹을 위해 사용되지만, 이는 요구되는 것은 아니다. 대안의 실시예들에서, 최상위 순서 서브세트 또는 일부 다른 서브세트가 선택적으로 사용될 수 있다.
도 9는 동일한 물리적 레지스터가 패킹된 데이터 레지스터(908) 또는 패킹된 데이터 연산 마스크 레지스터(912) 중 어느 하나로서 논리적으로 보여지고 및/또는 액세스될 수 있는 실시예를 예시하는 블록도이다. 제1 뷰(940)에서, 레지스터는 패킹된 데이터 레지스터(908)로서 보여지고 및/또는 액세스될 수 있다. 예시된 레지스터는 64 비트 폭이다. 예시에서, 예로서, 4개의 16 비트 데이터 요소들(A0 내지 A3)이 64 비트 패킹된 데이터 레지스터 내에 저장된다. 다른 실시예들에서, 더 좁거나(예를 들어, 32 비트), 더 넓은(예를 들어, 128 비트, 256 비트 등) 레지스터들이 사용될 수 있다. 또한, 다른 실시예들에서, 더 좁거나(예를 들어, 8 비트 바이트) 또는 더 넓은(예를 들어, 32 비트 또는 64 비트) 데이터 요소들이 패킹된 데이터로서 레지스터 내에 저장될 수 있다.
제2 뷰(941)에서, 동일한 레지스터가, 패킹된 데이터 연산 마스크를 저장할 수 있는 패킹된 데이터 연산 마스크 레지스터(912)로서 보여지고 및/또는 액세스될 수 있다. 예시에서, 32 비트 패킹된 데이터 연산 마스크(M0)가 레지스터의 최하위 순서 32 비트 내에 저장된다(즉, 비트들 [31:0]). 32 비트들 각각은 프리디케이션에 사용된 마스크 요소 또는 요소를 나타낼 수 있다. 마스크 비트들 전부는 연속적이거나 서로 인접할 수 있다. 레지스터의 나머지 최상위 32 비트들(즉, 비트들[63:32])은 마스킹에 사용되지 않는다. 이들 비트들은 돈 케어(don't care) 값들(*), 예를 들어, 모든 0들, 모든 1들, 단순히 무시되는 값들, 모든 가능한 값들 등일 수 있다. 다른 실시예들에서, 더 좁거나(예를 들어, 8 비트, 16 비트 등) 또는 더 넓은(예를 들어, 64 비트 등) 마스크들이 선택적으로 사용될 수 있다. 레지스터의 비트들 전부가 마스킹에 사용될 수 있거나 또는 비트들의 서브세트만이 마스킹에 사용될 수 있다. 예시된 예에서, 비트들의 최하위 순서 서브세트가 마스킹에 사용된다. 대안적으로, 비트들의 최상위 순서 서브세트 또는 다른 서브세트가 마스킹에 사용될 수 있다.
도 10은 동일한 물리적 레지스터가 다수의(즉, 2개 이상) 패킹된 데이터 연산 마스크들을 저장하는 패킹된 데이터 연산 마스크 레지스터(1012) 또는 패킹된 데이터 레지스터(1008)로서 논리적으로 보여지고 및/또는 액세스될 수 있는 실시예를 예시하는 블록도이다. 제1 뷰(1042)에서, 레지스터는 패킹된 데이터 레지스터(1008)로서 보여지고 및/또는 액세스될 수 있다. 예시된 레지스터는 64 비트 폭이다. 예시에서, 예로서, 4개의 16 비트 데이터 요소들(A0 내지 A3)이 64 비트 패킹된 데이터 레지스터 내에 저장된다. 다른 실시예들에서, 더 좁거나(예를 들어, 32 비트), 또는 더 넓은(예를 들어, 128 비트, 256 비트 등) 레지스터들이 사용될 수 있다. 또한, 다른 실시예들에서, 더 좁거나(예를 들어, 8 비트 바이트) 또는 더 넓은(예를 들어, 32 비트 또는 64 비트) 데이터 요소들이 패킹된 데이터로서 레지스터 내에 저장될 수 있다.
일부 실시예들에서, 하나 이상의 다른 뷰들이 존재할 수 있고, 여기서 동일한 레지스터가 다수의(즉, 2개 이상) 패킹된 데이터 연산 마스크들을 저장하는 패킹된 데이터 연산 마스크 레지스터(1012)로서 보여지고 및/또는 액세스될 수 있다. 예시된 실시예에서, 제2 뷰(1043), 제3 뷰(1044) 및 제4 뷰(1045)가 존재한다. 제2 내지 제4 뷰들은 상이한 수의 마스크들 및 마스크들의 크기를 갖는다. 다른 실시예들에서, 제1 뷰 이외에, 단일 뷰만이 있을 수 있고, 여기에서 동일한 레지스터가 다수의 패킹된 데이터 연산 마스크들을 저장하는 패킹된 데이터 연산 마스크 레지스터(1012)로서 보여지고 및/또는 액세스될 수 있다.
제2 뷰(1043)에서, 8개의 상이한 8 비트 마스크들(M0 내지 M7)은 동일한 패킹된 데이터 연산 마스크 레지스터(1012-1) 내에 저장될 수 있다. 예를 들어, 제1 마스크(M0)는 레지스터의 최하위 순서 8 비트(즉, 비트들[7:0]) 내에 저장되고, 제2 마스크(M1)는 레지스터의 최하위 순서 8 비트 다음(즉, 비트들[15:8])에 저장되고, 등등이다. 제3 뷰(1044)에서, 4개의 상이한 16 비트 마스크들(M0 내지 M3)이 동일한 패킹된 데이터 연산 마스크 레지스터(1012-2) 내에 저장된다. 예를 들어, 제1 마스크(M0)는 레지스터의 최하위 순서 16 비트(즉, 비트들[15:0]) 내에 저장되고, 제2 마스크(M1)는 레지스터의 최하위 순서 16 비트 다음(즉, 비트들[31:16])에 저장되고, 등등이다. 제4 뷰(1045)에서, 2개의 상이한 32 비트 마스크들(M0-M1)은 동일한 패킹된 데이터 연산 마스크 레지스터(1012-3) 내에 저장된다. 예를 들어, 제1 마스크(M0)는 레지스터의 최하위 순서 32 비트(즉, 비트들[31:0]) 내에 저장되고, 제2 마스크(M1)는 레지스터의 최하위 순서 32 비트 다음(즉, 비트들[64:32]) 내에 저장된다. 마스크들의 몇몇 예들이 존재한다. 다른 실시예들에서, 더 좁거나(예를 들어, 2 비트, 4 비트 등) 또는 더 넓은(예를 들어, 64 비트) 마스크들이 사용될 수 있다.
일부 실시예들에서, 제2 내지 제4 뷰들 각각에 대해, 마스크들 각각은 개별 또는 상이한 마스킹된 패킹된 데이터 연산에 대해 사용될 수 있다. 예를 들어, 마스크(M0)는 제1 마스킹된 패킹된 데이터 명령어에 의해 표시될 수 있고 대응하는 패킹된 데이터 연산을 마스크하는데 사용될 수 있고, 다른 마스크(M1)는 상이한 마스킹된 패킹된 데이터 명령어에 의해 표시될 수 있고 상이한 대응하는 패킹된 데이터 연산을 마스크하는 등에 사용될 수 있다. 각각의 마스크는 연속적/인접한 마스크 비트들을 포함할 수 있다. 마스킹된 패킹된 데이터 연산들에서, 전술한 바와 같이, 각각의 비트는 하나 이상의 상이한 패킹된 데이터 요소들에 대응할 수 있다(예를 들어, 대응하는 패킹된 데이터 요소들의 쌍).
예시에서, 레지스터의 전체 폭(즉, 본 예에서는 64 비트)이 사용되어 다수의 마스크를 저장하지만, 이것은 요구되는 것은 아니다. 다른 실시예들에서, 레지스터의 폭의 서브세트(예를 들어, 최상위 순서 서브세트, 최하위 순서 서브세트 등)만이 다수의 마스크들을 저장하는데 사용될 수 있다. 예를 들어, 오직 4개의 8 비트 마스크들이 64 비트 레지스터의 최하위 순서 32 비트 내에 저장될 수 있고, 4개의 8 비트 마스크들이 128 비트 레지스터의 최하위 순서 32 비트 내에 저장될 수 있고, 등등이다. 마스킹에 사용되지 않은 비트들은 돈 케어 값들을 가질 수 있다.
도 11은 패킹된 데이터 연산 마스크(1112)의 비트들이 패킹된 데이터(1108)의 데이터 요소들 사이에 분산되는 실시예를 예시하는 블록도이다. 이러한 개념은 여러 예시적인 32 비트 더블워드(dword) 포맷들을 통해 예시된다. 64 비트 패킹된 더블워드 포맷(1146)은 64 비트 폭이고, 패킹된 데이터의 2개의 32 비트 더블워드(dword) 데이터 요소들을 포함한다(1108-1). 2개의 32 비트 더블워드 데이터 요소들은 DWORD0 내지 DWORD1로서 최하위 비트로부터 최상위 비트 위치까지 예시에서 라벨링된 더블워드 데이터 요소들이다. DWORD0은 비트들[31:0] 내에 저장되고 DWORD1은 비트들[63:32] 내에 저장된다. 더블워드 데이터 요소들 각각의 최상위 비트는 패킹된 데이터 연산을 마스킹하는데 사용된 패킹된 데이터 연산 마스크(1112-1)의 마스크 비트를 나타낸다. 특히, 이러한 포맷에서, 비트[31] 및 비트[63]은 마스크 비트들이고, 이러한 마스크 비트들은 집합적으로 패킹된 데이터 연산 마스크(M0)(1112-1)를 나타낸다.
128 비트 패킹된 더블워드 포맷(1147)은 128 비트 폭이고 패킹된 데이터의 4개의 32 비트 더블워드(dword) 데이터 요소들을 포함한다(1108-2). 4개의 32 비트 더블워드 데이터 요소들은 DWORD0 내지 DWORD3으로서 최하위 비트로부터 최상위 비트 위치까지 예시에서 라벨링된 더블워드 데이터 요소들이다. 더블워드 데이터 요소들 각각의 최상위 비트는 패킹된 데이터 연산을 마스킹하는데 사용된 패킹된 데이터 연산 마스크(1112-2)의 마스크 비트를 나타낸다. 특히, 이러한 포맷에서, 비트[31], 비트[63], 비트[95], 및 비트[127]는 마스크 비트들이고, 이러한 마스크 비트들은 집합적으로 패킹된 데이터 연산 마스크(M0)(1112-2)를 나타낸다.
256 비트 패킹된 더블워드 포맷(1148)은 256 비트 폭이고, 패킹된 데이터의 8개의 32 비트 더블워드(dword) 데이터 요소들을 포함한다(1108-3). 8개의 32 비트 더블워드 데이터 요소들은 DWORD0 내지 DWORD7으로서 최하위 비트로부터 최상위 비트 위치까지 예시에서 라벨링된 더블워드 데이터 요소들이다. 더블워드 데이터 요소들 각각의 최상위 비트는 패킹된 데이터 연산을 마스킹하는데 사용된 패킹된 데이터 연산 마스크(1112-3)의 마스크 비트를 나타낸다. 특히, 이러한 포맷에서, 비트[31], 비트[63], 비트[95], 비트[127], 비트[159], 비트[191], 비트[223] 및 비트[255]는 마스크 비트들이고, 이러한 마스크 비트들은 집합적으로 패킹된 데이터 연산 마스크(M0)(1112-3)를 나타낸다.
일부 경우들에서, 마스크들은 마스킹된 패킹된 데이터 피연산자에 수반된 패킹된 데이터 피연산자들과 동일한 크기인 피연산자들로 구현될 수 있으나, 다수의 경우들에서, 마스크 비트들의 총 수는 데이터 요소들의 총 수와 같을 수 있다. 이러한 예들에서, 각각의 데이터 요소의 최상위 비트는 마스크 비트를 나타낸다. 다른 실시예들에서, 각각의 데이터 요소 내의 다른 비트는 마스크 비트를 나타낼 수 있다(예를 들어, 최하위 비트 등).
이들은 적절한 패킹된 데이터 포맷들의 단지 몇몇 예들이라는 것이 이해되어야 한다. 더 좁거나(예를 들어, 32 비트) 또는 더 넓은(예를 들어, 512 비트) 패킹된 데이터 포맷들이 또한 적절하다. 또한, 이들 패킹된 데이터 포맷들 중 임의의 것에 대해, 32 비트보다 더 좁거나(예를 들어, 8 비트 바이트들, 16 비트 워드들 등) 또는 32 비트 보다 더 넓은(예를 들어, 64 비트 쿼드워드들(quadwords), 64 비트 배정도 부동 소수점 등) 데이터 요소들이 또한 적절하다. 패킹된 8 비트 바이트 포맷들은 도시된 예시적인 32 비트 더블워드 포맷들보다 4배 많은 데이터 요소들 및 대응하는 마스크 비트들을 가질 수 있다. 패킹된 16 비트 워드 포맷들은 도시된 예시적인 32 비트 더블워드 포맷들보다 2배 많은 데이터 요소들 및 대응하는 마스크 비트들을 가질 수 있다. 패킹된 64 비트 쿼드워드 포맷들은 도시된 예시적인 32 비트 더블워드 포맷들의 절반의 데이터 요소들 및 대응하는 마스크 비트들을 가질 수 있다. 일례로서, 128 비트 패킹된 8 비트 바이트 포맷은 각각의 바이트의 최상위 비트가 상이한 마스크 비트를 나타내고, 모든 16개 비트들이 집합적으로 패킹된 데이터 연산 마스크를 나타내는 16개의 8 비트 바이트 데이터 요소들을 가질 수 있다. 일반적으로, 패킹된 데이터 요소들 및 대응하는 마스크 비트들의 수는 패킹된 데이터 요소들의 비트들의 크기로 나누어진 패킹된 데이터의 비트들의 크기와 같을 수 있다.
도 12는 패킹된 데이터의 데이터 요소들 사이에 분산된 패킹된 데이터 연산 마스크 비트들을 갖는 레지스터들의 세트가 2개 이상의 더 작은 마스크들 또는 단일의 더 큰 마스크들을 저장하는 상이한 뷰들로 보여지거나 액세스될 수 있는 실시예를 예시하는 블록도이다. 제1 뷰(1249)에서, 2개의 레지스터들의 세트(예를 들어, 2개의 64 비트 물리적 레지스터들)은 X0-X1으로 라벨링된 2개의 64 비트 패킹된 데이터 레지스터들로서 논리적으로 보여지거나 액세스될 수 있다. 레지스터들(X0-X1)은 피연산자들을 식별하기 위한 명령어 세트의 명령어들에 의해 특정될 수 있다. 2개의 패킹된 데이터 레지스터들(X0-X1) 각각은 상이한 64 비트 패킹된 데이터 피연산자를 저장하도록 동작가능할 수 있다. 예를 들어, 예시된 실시예에서, 64 비트 레지스터(X0)가 사용되어 2개의 32 비트 데이터 요소들(A0-A1)을 갖는 제1 패킹된 데이터 피연산자를 저장하고 64 비트 레지스터(X1)가 사용되어 2개의 32 비트 데이터 요소들(B0-B1)을 갖는 제2 패킹된 데이터 피연산자를 저장한다. 패킹된 데이터 요소들의 이러한 패킹된 데이터 피연산자들 각각은 대응하는 마스크 비트를 가질 수 있다. 예를 들어, 예시된 실시예에서, 각각의 32 비트 데이터 요소의 최상위 비트는 마스크 비트를 나타낸다. 다른 실시예들에서, 더 좁거나 더 넓은 데이터 요소 크기들이 대신에 사용될 수 있고 및/또는 최상위 비트 이외의 다른 비트들(예를 들어, 각각의 데이터 요소 내의 최하위 비트들 또는 임의의 다른 원하는 비트들)이 마스크 비트들로서 사용될 수 있다. 예시된 예시적인 실시예에서, 패킹된 데이터 레지스터(X0)에 대해, 최하위 순서 32 비트 데이터 요소는 마스크 비트(M0a)를 갖고, 최상위 순서 32 비트 데이터 요소는 마스크 비트(M0b)를 갖는다. 마스크 비트들(M0a 및 M0b)는 패킹된 데이터 연산 마스크(M0)를 나타낸다. 마찬가지로, 패킹된 데이터 레지스터(X1)에 대해, 최하위 순서 32 비트 데이터 요소는 마스크 비트(M1a)를 갖고, 최상위 순서 32 비트 데이터 요소는 마스크 비트(M1b)를 갖는다. 마스크 비트들(M1a 및 M1b)는 패킹된 데이터 연산 마스크(M1)를 나타낸다. 이러한 제1 뷰에서, 2개의 64 비트 레지스터들(X0-X1) 내의 마스크 비트들(즉, M0a, M0b, M1a 및 M1b)는 2개의 상이한 패킹된 데이터 연산 마스크들로서 논리적으로 보여진다(예를 들어, 상이한 마스킹된 패킹된 데이터 연산들에 대한 상이한 마스킹된 패킹된 데이터 명령어들에 의해 사용될 수 있음).
제2 뷰(1250)에서, 2개의 레지스터들의 동일한 세트(예를 들어, 2개의 64 비트 물리적 레지스터들)은 단일의 128 비트 패킹된 데이터 레지스터(Y0)로서 논리적으로 보여지거나 액세스될 수 있다. 레지스터(Y0)는 피연산자들을 식별하기 위한 명령어 세트의 명령어들에 의해 특정되는 레지스터일 수 있다. 제2 뷰(1250)에서, 128 비트 레지스터(Y0)의 최하위 순서 64 비트들(즉, 비트들 63:0)은 64 비트 레지스터(X0)에 맵핑 또는 대응하는 반면, 128 비트 레지스터(Y0)의 최상위 순서 64 비트들(즉, 비트들 127:64)은 64 비트 레지스터(X1)에 맵핑 또는 대응한다. 다수의(이 경우에서는 2개) 더 작은(이 경우에서는 64 비트) 레지스터들이 논리적으로 결합되거나 그룹핑되어 단일의 더 큰(이 경우에서는 128 비트) 레지스터를 형성한다. 패킹된 데이터 레지스터(Y0)는 4개의 32 비트 데이터 요소들(A0-A3)을 갖는 128 비트 패킹된 데이터 피연산자를 저장하도록 동작가능할 수 있다. 패킹된 데이터 요소들 각각은 대응하는 마스크 비트를 가질 수 있다. 예를 들어, 예시된 실시예에서, 각각의 32 비트 데이터 요소의 최상위 비트는 마스크 비트를 나타낸다. 다른 실시예들에서, 더 좁거나 더 넓은 데이터 요소 크기들이 대신에 사용될 수 있고 및/또는 최상위 비트 이외의 다른 비트들이 마스크 비트들로서 사용될 수 있다. 예시된 예시적인 실시예에서, 최하위 순서 32 비트 데이터 요소(A0)는 마스크 비트(M0a)를 갖고, 32 비트 데이터 요소(A1)는 마스크 비트(M0b)를 갖고, 32 비트 데이터 요소(A2)는 마스크 비트(M0c)를 갖고, 최상위 순서 32 비트 데이터 요소(A3)는 마스크 비트(M0d)를 갖는다. 마스크 비트들(M0a, M0b, M0c 및 M0d)은 패킹된 데이터 연산 마스크(M0)를 나타낸다. 이러한 제2 뷰에서, 128 비트 레지스터(Y0)에서의 마스크 비트들(즉, M0a, M0b, M0c 및 M0d)은 단일의 패킹된 데이터 연산 마스크로서 논리적으로 보여질 수 있다(예를 들어, 동일한 단일의 마스킹된 패킹된 데이터 연산에 대한 동일한 단일의 마스킹된 패킹된 데이터 명령어에 의해 사용될 수 있음).
예시된 실시예에서, 2개의 상이한 뷰들이 존재한다. 다른 실시예들에서, 3개 또는 그 이상의 상이한 뷰들이 존재할 수 있다. 예를 들어, 제3 뷰는 4개의 64 비트 레지스터(X0-X3)를 단일의 256 비트 레지스터(Z0)로서 볼 수 있다. 다양한 실시예들에서, 뷰들을 구현하는데 사용된 실제 물리적 레지스터들은 32 비트 레지스터들, 64 비트 레지스터들, 또는 128 비트 레지스터들일 수 있으나, 본 발명의 범주는 그것으로 제한되지 않는다. 64 비트 및 128 비트보다 더 넓거나 더 좁은 논리 레지스터들이 사용될 수 있다. 예시된 실시예에서, 인접하거나 순차적인 레지스터들이 사용되지만, 이는 요구되는 것은 아니다. 다른 실시예들에서, 비-인접 레지스터들이 결합될 수 있다(예를 들어, 상이한 뱅크들 내의 비-인접 레지스터들, 교번하는 레지스터들 등).
도 9 내지 12에 도시된 바와 같이, 일부 실시예들에서, 패킹된 데이터 레지스터들의 세트는 마스크 레지스터들로서 사용될 수 있다. 일부 실시예들에서, 패킹된 데이터 레지스터들의 총 수의 서브세트만이 마스크 레지스터들로서 사용될 수 있다. 예를 들어, 하나의 특정 실시예에서, 도 9 내지 도 12에서 도시된 접근법들 중 하나를 이용하여 마스킹하기 위해, 더 큰 세트의 패킹된 레지스터들 중 오직 8개의 패킹된 데이터 레지스터들이 사용될 수 있다. 유리하게도, 이는 레지스터들 중 소정의 레지스터가, 사양에 필요한 것보다 더 적은 비트를 이용하여 하나 이상의 패킹된 데이터 연산 마스크의 소스로서 특정되게 허용할 수 있다(예를 들어, 8개의 레지스터들의 경우에 3개의 비트들). 일부 실시예들에서, 마스크 레지스터를 특정하기 위한 비트들의 세트에서의 소정의 또는 미리결정된 값(예를 들어, 0의 값)이 사용되어 마스킹을 디스에이블하여, 필요치 않은 경우, 불필요한 프리디케이션을 회피함으로써 효율성의 증가가 달성될 수 있다.
예시적인 코어 아키텍처들, 프로세서들 및 컴퓨터 아키텍처들
프로세서 코어들은 상이한 프로세서들에서 상이한 목적들을 위해 상이한 방식들로 구현될 수 있다. 예를 들어, 이러한 코어들의 구현들은: 1) 범용 컴퓨팅을 위해 의도된 범용 순차 코어; 2) 범용 컴퓨팅을 위해 의도된 고성능 범용 비순차 코어; 3) 주로 그래픽 및/또는 과학(스루풋) 컴퓨팅을 위해 의도된 특수 목적 코어를 포함할 수 있다. 상이한 프로세서들의 구현들은: 1) 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 순차 코어 및/또는 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 비순차 코어를 포함하는 CPU; 및 2) 주로 그래픽 및/또는 과학(스루풋)을 위해 의도된 하나 이상의 특수 목적 코어를 포함하는 코프로세서를 포함할 수 있다. 이러한 상이한 프로세서들은 상이한 컴퓨터 시스템 아키텍처들을 초래하고, 이들 컴퓨터 시스템 아키텍처들은, 1) CPU와는 별개의 칩 상의 코프로세서; 2) CPU와 동일한 패키지에서의 별개의 다이 상의 코프로세서; 3) CPU와 동일한 다이 상의 코프로세서(이 경우, 이러한 코프로세서는 때때로 통합된 그래픽 및/또는 과학(스루풋) 로직과 같은 특수 목적 로직 또는 특수 목적 코어로 지칭됨); 및 4) 부가적인 기능성, 전술한 코프로세서 및 전술한 CPU(때때로 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)로 지칭됨)와 동일한 다이 상에 포함될 수 있는 시스템 온 칩을 포함할 수 있다. 다음에, 예시적인 코어 아키텍처들이 설명된 다음, 예시적인 프로세서들 및 컴퓨터 아키텍처들이 설명된다.
예시적인 코어 아키텍처들
순차 및 비순차 코어 블록도
도 13a는 본 발명의 실시예들에 따른, 예시적인 순차 파이프라인 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 파이프라인 모두를 도시한 블록도이다. 도 13b는 본 발명의 실시예들에 따른, 프로세서에 포함될 순차 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 아키텍처 코어 모두를 도시한 블록도이다. 도 13a 및 도 13b에서의 실선 박스들은 순차 파이프라인 및 순차 코어를 도시하는 반면, 파선 박스들의 선택적인 부가는 레지스터 리네이밍, 비순차 발행/실행 파이프라인 및 코어를 도시한다. 순차 양태가 비순차 양태의 서브세트라는 것을 고려하여, 비순차 양태가 설명될 것이다.
도 13a에서, 프로세서 파이프라인(1300)은 페치 스테이지(1302), 길이 디코드 스테이지(1304), 디코드 스테이지(1306), 할당 스테이지(1308), 리네이밍 스테이지(1310), 스케줄링(디스패치(dispatch) 또는 발행이라고도 함) 스테이지(1312), 레지스터 판독/메모리 판독 스테이지(1314), 실행 스테이지(1316), 라이트 백(write back)/메모리 기입 스테이지(1318), 예외 처리 스테이지(1322), 및 커밋(commit) 스테이지(1324)를 포함한다.
도 13b는 실행 엔진 유닛(1350)에 결합된 프론트 엔드 유닛(front end unit)(1330) - 둘 다는 메모리 유닛(1370)에 결합되어 있음 - 을 포함하는 프로세서 코어(1390)를 도시한다. 코어(1390)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 혼성체 또는 대안적 코어 유형일 수 있다. 또 다른 옵션으로서, 코어(1390)는, 예를 들어 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, GPGPU(general purpose computing graphics processing unit) 코어, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프런트 엔드 유닛(1330)은 명령어 캐시 유닛(1334)에 결합된 분기 예측 유닛(1332)을 포함하고, 명령어 캐시 유닛(1334)은 명령어 TLB(translation lookaside buffer)(1336)에 결합되고, 명령어 TLB는 명령어 페치 유닛(1338)에 결합되고, 명령어 페치 유닛은 디코드 유닛(1340)에 결합된다. 디코드 유닛(1340)(또는 디코더)은 명령어들을 디코딩할 수 있으며, 원래의 명령어들로부터 디코딩되거나, 또는 그렇지 않으면 이들을 반영하거나, 또는 이들로부터 유도되는, 하나 이상의 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들 또는 다른 제어 신호들을 출력으로서 생성할 수 있다. 디코드 유닛(1340)은 다양하고 상이한 메커니즘들을 사용하여 구현될 수 있다. 적절한 메커니즘들의 예들은, 이에 제한되는 것은 아니지만, 룩업 테이블들, 하드웨어 구현들, PLA들(Programmable Logic Arrays), 마이크로코드 ROM들(Read Only Memories) 등을 포함한다. 일 실시예에서, 코어(1390)는 소정의 매크로 명령어들을 위한 마이크로코드를 저장한 마이크로코드 ROM 또는 다른 매체를 포함한다(예를 들어, 디코드 유닛(1340) 내에 또는 그렇지 않으면 프론트 엔드 유닛(1330) 내에). 디코드 유닛(1340)은 실행 엔진 유닛(1350) 내의 리네이밍/할당기 유닛(1352)에 결합되어 있다.
실행 엔진 유닛(1350)은 리타이어먼트 유닛(1354) 및 하나 이상의 스케줄러 유닛(들)의 세트(1356)에 결합되어 있는 리네이밍/할당기 유닛(1352)을 포함한다. 스케줄러 유닛(들)(1356)은 임의의 수의 다른 스케줄러들을 나타내고, 이들은 예약 스테이션들, 중앙 명령어 윈도우 등을 포함한다. 스케줄러 유닛(들)(1356)은 물리적 레지스터 파일(들) 유닛(들)(1358)에 결합된다. 물리적 레지스터 파일(들) 유닛들(1358) 각각은 하나 이상의 물리적 레지스터 파일들을 나타내고, 이들 중 상이한 물리적 레지스터 파일들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 타입을 저장한다. 일 실시예에서, 물리적 레지스터 파일(들) 유닛(1358)은 벡터 레지스터 유닛, 기입 마스크 레지스터 유닛, 및 스칼라 레지스터 유닛을 포함한다. 이들 레지스터 유닛들은 아키텍처 벡터 레지스터들, 벡터 마스크 레지스터들 및 범용 레지스터들을 제공할 수 있다. 레지스터 리네이밍 및 비순차 실행이 구현될 수 있는 다양한 방식들(예를 들어, 재순서화 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 사용하는 것; 장래 파일(future file)(들), 이력 버퍼(history buffer)(들), 및 리타이어먼트 레지스터 파일(들)을 사용하는 것; 레지스터 맵 및 레지스터들의 풀(pool)을 사용하는 것 등)을 나타내기 위해, 물리적 레지스터 파일(들) 유닛(들)(1358)이 리타이어먼트 유닛(1354)과 중첩되어 있다. 리타이어먼트 유닛(1354) 및 물리적 레지스터 파일(들) 유닛(들)(1358)이 실행 클러스터(들)(1360)에 결합되어 있다. 실행 클러스터(들)(1360)는 하나 이상의 실행 유닛들(1362)의 세트 및 하나 이상의 메모리 액세스 유닛들(1364)의 세트를 포함한다. 실행 유닛들(1362)은 다양한 유형의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예를 들어, 시프트, 가산, 감산, 승산)을 수행할 수 있다. 일부 실시예들은 특정 기능들이나 기능들의 세트들에 전용인 다수의 실행 유닛을 포함할 수 있지만, 다른 실시예들은 단 하나의 실행 유닛, 또는 모두가 모든 기능을 수행하는 다수의 실행 유닛을 포함할 수 있다. 스케줄러 유닛(들)(1356), 물리적 레지스터 파일(들) 유닛(들)(1358), 및 실행 클러스터(들)(1360)가 가능하게는 복수인 것으로 도시되어 있는데, 그 이유는 특정의 실시예들이 특정의 유형의 데이터/연산에 대해 개별적인 파이프라인(예를 들어, 각각이 그 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인 - 및 개별적인 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(1364)을 갖는 특정의 실시예들이 구현됨)을 생성하기 때문이다. 개별 파이프라인들이 사용되는 경우, 이러한 파이프라인들 중 하나 이상은 비순차적 발행/실행일 수 있고 나머지는 순차적일 수 있다는 것이 또한 이해되어야 한다.
메모리 액세스 유닛들(1364)의 세트는 L2(level 2) 캐시 유닛(1376)에 결합된 데이터 캐시 유닛(1374)에 결합된 데이터 TLB 유닛(1372)을 포함하는, 메모리 유닛(1370)에 결합된다. 일 예시적인 실시예에서, 메모리 액세스 유닛들(1364)은 로드 유닛(load unit), 어드레스 저장 유닛(store address unit), 및 데이터 저장 유닛(store data unit)을 포함할 수 있고, 이들 각각은 메모리 유닛(1370) 내의 데이터 TLB 유닛(1372)에 결합되어 있다. 명령어 캐시 유닛(1334)은 또한 메모리 유닛(1370) 내의 L2(level 2) 캐시 유닛(1376)에 결합되어 있다. L2 캐시 유닛(1376)은 하나 이상의 다른 레벨의 캐시에 그리고 궁극적으로 주 메모리에 결합되어 있다.
예시로서, 예시적 레지스터 리네이밍, 비순차 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(1300)을 구현할 수 있다: 1) 명령어 페치(1338)는 페치 스테이지(1302) 및 길이 디코딩 스테이지(1304)를 수행함; 2) 디코드 유닛(1340)은 디코드 스테이지(1306)를 수행함; 3) 리네이밍/할당기 유닛(1352)은 할당 스테이지(1308) 및 리네이밍 스테이지(1310)를 수행함; 4) 스케줄러 유닛(들)(1356)은 스케줄링 스테이지(1312)를 수행함; 5) 물리적 레지스터 파일(들) 유닛(들)(1358) 및 메모리 유닛(1370)은 레지스터 판독/메모리 판독 스테이지(1314)를 수행함; 실행 클러스터(1360)는 실행 스테이지(1316)를 수행함; 6) 메모리 유닛(1370) 및 물리적 레지스터 파일(들) 유닛(들)(1358)은 라이트 백/메모리 기입 스테이지(1318)를 수행함; 7) 다양한 유닛들이 예외 처리 스테이지(1322)에 관여되어 있을 수 있음; 및 8) 리타이어먼트 유닛(1354) 및 물리적 레지스터 파일(들) 유닛(들)(1358)은 커밋(commit) 스테이지(1324)를 수행함.
코어(1390)는 하나 이상의 명령어 세트들(예를 들어, (보다 최신의 버전에서 추가된 일부 확장을 갖는) x86 명령어 세트; 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트; 본 명세서에 기술된 명령어(들)를 포함하는 (미국 캘리포니아주 서니베일 소재의 ARM Holdings의 NEON 등의 선택적인 부가의 확장을 갖는) ARM 명령어 세트를 지원할 수 있다. 일 실시예에서, 코어(1390)는 패킹된 데이터 명령어 세트 확장(예를 들어, AVX1, AVX2)을 지원하는 로직을 포함하고, 그로써 많은 멀티미디어 애플리케이션들에 의해 사용되는 연산들이 패킹된 데이터를 사용하여 수행될 수 있게 한다.
코어는 (스레드들 또는 연산들의 2개 이상의 병렬 세트를 실행하는) 멀티스레딩을 지원할 수 있고, 시간 분할 멀티스레딩(time sliced multithreading), 동시적 멀티스레딩(단일의 물리적 코어는, 물리적 코어가 동시에 멀티스레딩하는 스레드들 각각에 대한 논리적 코어를 제공함), 또는 이들의 조합(예를 들어, 인텔® 하이퍼스레딩(Hyperthreading) 기술에서와 같이 시간 분할 페칭과 디코딩 및 그 이후의 동시적 멀티스레딩)을 비롯한 각종 방식들로 그렇게 할 수 있다는 것이 이해되어야 한다.
레지스터 리네이밍이 비순차 실행의 맥락에서 설명되지만, 레지스터 리네이밍은 순차 아키텍처에 이용될 수 있다는 것이 이해되어야 한다. 프로세서의 예시된 실시예가 또한 개별적인 명령어 및 데이터 캐시 유닛들(1334/1374)과, 공유 L2 캐시 유닛(1376)을 포함하고 있지만, 대안의 실시예들은, 예를 들어, L1(Level 1) 내부 캐시 또는 다수의 레벨의 내부 캐시와 같은, 명령어들 및 데이터 둘 다에 대한 단일의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 코어 및/또는 프로세서의 외부에 있는 외부 캐시 및 내부 캐시의 조합을 포함할 수 있다. 대안적으로, 모든 캐시가 코어 및/또는 프로세서의 외부에 있을 수 있다.
특정의 예시적인 순차 코어 아키텍처
도 14a-도 14b는 보다 구체적인 예시적인 순차 코어 아키텍처의 블록도를 도시한 것이고, 이 코어는 칩에 있는 몇 개의 로직 블록들(동일한 유형 및/또는 상이한 유형들의 다른 코어들을 포함함) 중 하나일 것이다. 로직 블록들은 애플리케이션에 따라서, 일부 고정된 기능 로직, 메모리 I/O 인터페이스들, 및 다른 필요한 I/O 로직과 고 대역폭 상호 접속 네트워크(예를 들어, 링 네트워크)를 통해 통신한다.
도 14a는 본 발명의 실시예들에 따른, 단일 프로세서 코어를, 온-다이 상호 접속 네트워크(1402)로의 그의 접속 및 레벨 2(L2) 캐시의 그의 로컬 서브세트(1404)과 함께, 나타낸 블록도이다. 일 실시예에서, 명령어 디코더(1400)는 패킹된 데이터 명령어 세트 확장을 갖는 x86 명령어 세트를 지원한다. L1 캐시(1406)는 스칼라 및 벡터 유닛들 내로의 캐시 메모리에 대한 저 지연시간 액세스를 가능하게 한다. 일 실시예에서, (설계를 단순화하기 위해) 스칼라 유닛(1408) 및 벡터 유닛(1410)이 개별적인 레지스터 세트들(각각, 스칼라 레지스터들(1412) 및 벡터 레지스터들(1414))을 사용하고 이들 사이에서 전달되는 데이터가 메모리에 기입된 다음에 L1(level 1) 캐시(1406)로부터 다시 판독되지만, 본 발명의 대안의 실시예들은 상이한 접근법을 사용할 수 있다(예컨대, 단일의 레지스터 세트를 사용하거나, 기입 및 다시 판독되는 일 없이 2개의 레지스터 파일들 간에 데이터가 전달될 수 있게 하는 통신 경로를 포함함).
L2 캐시의 로컬 서브세트(1404)은, 프로세서 코어당 하나씩, 개별적인 로컬 서브세트들로 나누어져 있는 글로벌 L2 캐시의 일부이다. 각각의 프로세서 코어는 L2 캐시의 그 자신의 로컬 서브세트(1404)에의 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독된 데이터는 그의 L2 캐시 서브세트(1404)에 저장되고, 그 자신의 로컬 L2 캐시 서브세트들에 액세스하는 다른 프로세서 코어들과 병렬로 빠르게 액세스될 수 있다. 프로세서 코어에 의해 기입된 데이터는 그 자신의 L2 캐시 서브세트(1404)에 저장되고, 필요한 경우, 다른 서브세트들부터 플러시된다(flushed). 링 네트워크는 공유 데이터에 대한 일관성(coherency)을 보장한다. 링 네트워크는 프로세서 코어들, L2 캐시들 및 다른 로직 블록들과 같은 에이전트들이 칩 내에서 서로 통신할 수 있게 하기 위해 양방향성이다. 각각의 링 데이터 경로는 방향당 1012 비트 폭이다.
도 14b는 본 발명의 실시예들에 따른 도 14a의 프로세서 코어의 부분의 확대도이다. 도 14b는 L1 캐시(1404)의 L1 데이터 캐시(1406A) 부분은 물론, 벡터 유닛(1410) 및 벡터 레지스터들(1414)에 관한 부가 상세를 포함하고 있다. 구체적으로는, 벡터 유닛(1410)은 정수, 단정도(single-precision) 부동 소수점, 및 배정도(double-precision) 부동 소수점 명령어들 중 하나 이상을 실행하는 16-폭의(16-wide) 벡터 프로세싱 유닛(VPU: vector processing unit)(16-폭의 ALU(1428)를 참조)이다. VPU는 뒤섞기 유닛(swizzle unit)(1420)에 의해 레지스터 입력들을 뒤섞는 것, 수치 변환 유닛들(1422A 및 1422B)에 의한 수치 변환, 및 메모리 입력에 대한 복제 유닛(1424)에 의한 복제를 지원한다. 기입 마스크 레지스터들(1426)은 결과적인 벡터 기입들을 예측하는 것을 가능하게 한다.
통합된 메모리 제어기 및 그래픽스를 갖는 프로세서
도 15는 본 발명의 실시예들에 따른, 2개 이상의 코어를 가질 수 있고, 통합된 메모리 제어기를 가질 수 있고, 통합된 그래픽을 가질 수 있는 프로세서(1500)의 블록도이다. 도 15에서의 실선 박스들은 단일의 코어(1502A), 시스템 에이전트(1510), 및 하나 이상의 버스 제어기 유닛들(1516)의 세트를 갖는 프로세서(1500)를 나타낸 것인 반면, 파선 박스들의 선택적인 부가는 복수의 코어(1502A 내지 1502N), 시스템 에이전트 유닛(1510) 내의 하나 이상의 통합된 메모리 제어기 유닛(들)(1514)의 세트, 및 특수 목적 로직(1508)을 갖는 대안의 프로세서(1500)를 나타낸 것이다.
그러므로, 프로세서(1500)의 상이한 구현들은 다음을 포함할 수 있다: 1) (하나 이상의 코어들을 포함할 수 있는) 통합된 그래픽 및/또는 과학적(처리량) 로직인 특수 목적 로직(1508), 및 하나 이상의 범용 코어들(예를 들어, 범용 순차 코어들, 범용 비순차 코어들, 이 둘의 조합)인 코어들(1502A 내지 1502N)을 갖는 CPU; 2) 주로 그래픽 및/또는 과학적(처리량)을 위해 의도된 많은 수의 특수 목적 코어들인 코어들(1502A 내지 1502N)을 갖는 코프로세서; 및 3) 많은 수의 범용 순차 코어들인 코어들(1502A 내지 1502N)을 갖는 코프로세서. 따라서, 프로세서(1500)는 범용 프로세서, 코프로세서 또는 특수 목적 프로세서, 예를 들어 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(General Purpose Graphics Processing Unit), 고 처리량 MIC(Many Integrated Core) 코프로세서(30개 이상의 코어를 포함함), 임베디드된 프로세서, 등일 수 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(1500)는, 예를 들어 BiCMOS, CMOS, 또는 NMOS 등의 복수의 프로세스 기술들 중 임의의 것을 사용하여 하나 이상의 기판들의 일부가 될 수 있고/또는 이들 기판 상에 구현될 수 있다.
메모리 계층 구조는 코어들 내의 하나 이상의 레벨들의 캐시, 하나 이상의 공유된 캐시 유닛들(1506)의 세트, 및 통합된 메모리 제어기 유닛들(1514)의 세트에 결합되어 있는 외부 메모리(도시 생략)를 포함한다. 공유된 캐시 유닛들(1506)의 세트는 L2(level 2), L3(level 3), L4(level 4), 또는 기타 레벨들의 캐시 등의 하나 이상의 중간 레벨 캐시들, LLC(last level cache), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서, 링 기반 상호 접속 유닛(ring based interconnect unit)(1512)은 통합된 그래픽 로직(1508), 공유된 캐시 유닛들(1506)의 세트, 및 시스템 에이전트 유닛(1510)/통합된 메모리 제어기 유닛(들)(1514)을 상호 접속시키는 반면, 대안적 실시예들은 이러한 유닛들을 상호 접속시키는 데 임의의 수의 공지된 기법들을 사용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛들(1506)과 코어들(1502A 내지 1502N) 사이에 일관성이 유지된다.
일부 실시예들에서, 코어들(1502A 내지 1502N) 중 하나 이상은 멀티스레딩을 할 수 있다. 시스템 에이전트(1510)는 코어들(1502A 내지 1502N)을 조정하고 동작시키는 그러한 컴포넌트들을 포함한다. 시스템 에이전트 유닛(1510)은, 예를 들어 PCU(power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1502A 내지 1502N) 및 통합된 그래픽 로직(1508)의 전력 상태를 조절하는 데 필요한 로직 및 컴포넌트들이거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속 디스플레이를 구동하기 위한 것이다.
코어들(1502A 내지 1502N)은 아키텍처 명령어 세트의 관점에서 동종(homogenous)이거나 이종(heterogeneous)일 수 있다; 즉, 코어들(1502A 내지 1502N) 중 2개 이상은 동일한 명령어 세트를 실행할 수 있는 반면, 다른 것들은 그 명령어 세트의 서브셋 만 또는 다른 명령어 세트를 실행할 수 있다.
예시적인 컴퓨터 아키텍처들
도 16-19는 예시적 컴퓨터 아키텍처들의 블록도들이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 개인 휴대정보 단말기들, 엔지니어링 워크스테이션들, 서버들, 네트워크 디바이스들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, 디지털 신호 프로세서들(DSP들), 그래픽 디바이스들, 비디오 게임 디바이스들, 셋톱 박스들, 마이크로컨트롤러들, 셀 폰들, 휴대용 미디어 플레이어들, 핸드헬드 디바이스들 및 다양한 다른 전자 디바이스들에 대하여 관련 기술분야에 공지된 다른 시스템 설계들 및 구성들도 또한 적합하다. 일반적으로, 본 명세서에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 매우 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적합하다.
이제 도 16을 참조하면, 본 발명의 일 실시예에 따른 시스템(1600)의 블록도가 도시되어 있다. 시스템(1600)은 하나 이상 프로세서(1610, 1615)를 포함할 수 있으며, 이들은 제어기 허브(1620)에 결합된다. 일 실시예에서, 제어기 허브(1620)는 그래픽 메모리 제어기 허브(GMCH: graphics memory controller hub)(1690) 및 입력/출력 허브(IOH: Input/Output Hub)(1650)(개별적인 칩들 상에 있을 수 있음)를 포함하고; GMCH(1690)는 메모리(1640) 및 코프로세서(1645)에 결합되어 있는 메모리 및 그래픽 제어기들을 포함하며; IOH(1650)는 I/O(input/output) 디바이스들(1660)을 GMCH(1690)에 결합시킨다. 대안적으로, 메모리 및 그래픽 제어기들 중 하나 또는 둘 다는 (본 명세서에 기술된 바와 같이) 프로세서 내에 통합되어 있고, 메모리(1640) 및 코프로세서(1645)는 프로세서(1610), 및 IOH(1650)를 갖는 단일 칩 내의 제어기 허브(1620)에 직접 결합되어 있다.
부가적인 프로세서들(1615)의 선택적인 속성은 도 16에서 파선들로 표시되어 있다. 각각의 프로세서(1610, 1615)는 본 명세서에 설명된 하나 이상의 프로세싱 코어를 포함할 수 있고, 프로세서(1500)의 일부 버전일 수 있다.
메모리(1640)는, 예를 들어, DRAM(dynamic random access memory), PCM(phase change memory), 또는 이 둘의 조합일 수 있다. 적어도 일 실시예에서, 제어기 허브(1620)는 FSB(frontside bus)와 같은 멀티-드롭 버스(multi-drop bus), QPI(QuickPath Interconnect)와 같은 점대점(point-to-point) 인터페이스, 또는 유사한 접속(1695)을 통해 프로세서(들)(1610, 1615)와 통신한다.
일 실시예에서, 코프로세서(1645)는, 예를 들어, 고처리율 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 일 실시예에서, 제어기 허브(1620)는 통합된 그래픽 가속기를 포함할 수 있다.
아키텍처, 마이크로아키텍처, 열, 전력 소모 특성 등을 포함하는 다양한 성능 메트릭(metrics of merit)에 관하여 물리적 자원들(1610, 1615) 사이에 다양한 차이가 존재할 수 있다.
일 실시예에서, 프로세서(1610)는 일반 유형의 데이터 프로세싱 동작들을 제어하는 명령어들을 실행한다. 명령어들 내에는 코프로세서 명령어들이 임베딩될 수 있다. 프로세서(1610)는 이들 코프로세서 명령어를 부착된(attached) 코프로세서(1645)에 의해 실행되어야만 하는 유형인 것으로 인식한다. 이에 따라, 프로세서(1610)는 이 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서 버스 또는 다른 상호접속부를 통해 코프로세서(1645)로 발행한다. 코프로세서(들)(1645)는 수신된 코프로세서 명령어들을 접수하고 실행한다.
이제 도 17을 참조하면, 도 17은 본 발명의 일 실시예에 따른, 제1의 보다 구체적이고 예시적인 시스템(1700)의 블록도를 도시한다. 도 17에 도시된 바와 같이, 멀티프로세서 시스템(1700)은 점대점 상호접속 시스템이고, 점대점 상호접속(1750)을 통해 결합되는 제1 프로세서(1770) 및 제2 프로세서(1780)를 포함한다. 프로세서들(1770 및 1780) 각각은 프로세서(1500)의 일부 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(1770 및 1780)은 각각 프로세서들(1610 및 1615)인 반면, 코프로세서(1738)는 코프로세서(1645)이다. 다른 실시예에서, 프로세서들(1770 및 1780)은, 각각, 프로세서(1610) 및 코프로세서(1645)이다.
프로세서들(1770 및 1780)은, 각각, 통합된 메모리 제어기(IMC: integrated memory controller) 유닛들(1772 및 1782)을 포함하는 것으로 도시되어 있다. 프로세서(1770)는 또한, 그의 버스 제어기 유닛들의 일부로서, 점대점(P-P) 인터페이스들(1776 및 1778)을 포함하고; 이와 유사하게, 제2 프로세서(1780)는 P-P 인터페이스들(1786 및 1788)을 포함하고 있다. 프로세서들(1770, 1780)은 P-P 인터페이스 회로들(1778, 1788)을 사용하여 P-P 인터페이스(1750)를 통해 정보를 교환할 수 있다. 도 17에 도시된 바와 같이, IMC들(1772 및 1782)은 프로세서들을 각자의 메모리들(1732 및 1734), 즉 각자의 프로세서들에 로컬로 부착되어 있는 메인 메모리의 일부분들일 수 있는 메모리(1732) 및 메모리(1734)에 결합시킨다.
프로세서들(1770, 1780) 각각은 점대점 인터페이스 회로들(1776, 1794, 1786, 1798)을 사용하여 개개의 P-P 인터페이스들(1752, 1754)을 통해 칩셋(1790)과 정보를 교환할 수 있다. 칩셋(1790)은 선택적으로 고성능 인터페이스(1739)를 통해 코프로세서(1738)와 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(1738)는, 예를 들어, 고처리율 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유된 캐시(도시되지 않음)가 양자 모두의 프로세서들의 외부에 또는 어느 하나의 프로세서에 포함될 수 있지만, P-P 상호접속을 통해 프로세서들과 여전히 접속되어, 프로세서가 저 전력 모드에 놓이면, 어느 하나의 프로세서 또는 양자 모두의 프로세서들의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(1790)은 인터페이스(1796)를 통해 제1 버스(1716)에 결합될 수 있다. 일 실시예에서, 제1 버스(1716)는 PCI(Peripheral Component Interconnect) 버스일 수 있거나, 또는 PCI Express 버스 또는 다른 제3세대 I/O 상호접속 버스와 같은 버스일 수 있지만, 본 발명의 범위는 이에 제한되지는 않는다.
도 17에 도시된 바와 같이, 제1 버스(1716)를 제2 버스(1720)에 결합하는 버스 브리지(1718)와 함께, 다양한 I/O 디바이스들(1714)이 제1 버스(1716)에 연결될 수 있다. 일 실시예에서, 코프로세서들, 고처리율 MIC 프로세서들, GPGPU들, 가속기들(예컨대, 그래픽 가속기들 또는 DSP(digital signal processing) 유닛들 등), 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서와 같은 하나 이상의 부가의 프로세서(들)(1715)이 제1 버스(1716)에 결합되어 있다. 일 실시예에서, 제2 버스(1720)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(1722), 통신 디바이스들(1727), 그리고 명령어들/코드 및 데이터(1730)를 포함할 수 있는 디스크 드라이브 또는 기타 대용량 저장 디바이스와 같은 저장 유닛(1728)을 포함하는 다양한 디바이스들이 제2 버스(1720)에 결합될 수 있다. 게다가, 오디오 I/O(1724)가 제2 버스(1720)에 결합될 수 있다. 다른 아키텍처들도 가능하다는 점에 주목한다. 예를 들어, 도 17의 점대점 아키텍처 대신에, 시스템은 멀티드롭 버스 또는 다른 이러한 아키텍처를 구현할 수 있다.
이제 도 18을 참조하면, 본 발명의 일 실시예에 따른, 제2의 보다 구체적이고 예시적인 시스템(1800)의 블록도가 도시되어 있다. 도 17 및 도 18에서의 유사한 요소들은 유사한 참조 번호들을 가지며, 도 18의 다른 양태들을 모호하게 하는 것을 회피하기 위해서 도 18로부터 도 17의 특정 양태들이 생략되었다.
도 18은 프로세서들(1770, 1780)이, 각각, 통합된 메모리 및 I/O 제어 로직("CL")(1772 및 1782)을 포함할 수 있다는 것을 나타내고 있다. 따라서, CL(1772, 1782)은 통합된 메모리 제어기 유닛들을 포함하고 I/O 제어 로직을 포함한다. 도 18은 메모리들(1732, 1734)이 CL(1772, 1782)에 결합되어 있을 뿐만 아니라 I/O 디바이스들(1814)이 또한 제어 로직(1772, 1782)에 결합되어 있는 것을 나타내고 있다. 레거시 I/O 디바이스들(1815)이 칩셋(1790)에 결합된다.
이하 도 19를 참조하면, 본 발명의 일 실시예에 따른 SoC(1900)의 블록도가 도시되어 있다. 도 15에 있는 유사한 요소들은 동일한 참조 부호를 갖는다. 또한, 파선 박스들은 더 진보된 SoC들에 대한 선택적인 특징들이다. 도 19에서, 상호접속 유닛(들)(1902)은, 하나 이상의 코어들(202A 내지 202N)의 세트 및 공유 캐시 유닛(들)(1506)을 포함하는 애플리케이션 프로세서(1910); 시스템 에이전트 유닛(1510); 버스 제어기 유닛(들)(1516); 통합된 메모리 제어기 유닛(들)(1514); 통합된 그래픽 로직, 영상 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나 이상의 코프로세서들(1920)의 세트; SRAM(static random access memory) 유닛(1930); DMA(direct memory access) 유닛(1932); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(1940)에 결합되어 있다. 일 실시예에서, 코프로세서(들)(1920)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 고처리율 MIC 프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서를 포함한다.
본 명세서에 개시된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예들은, 적어도 하나의 프로세서, 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 저장 요소들을 포함함), 적어도 하나의 입력 디바이스 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능 시스템들 상에서 실행되는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 17에 예시된 코드(1730)와 같은 프로그램 코드는 본 명세서에 개시된 기능을 수행하기 위한 명령어를 입력하며 출력 정보를 생성하기 위해 적용될 수 있다. 출력 정보는 공지된 방식으로 하나 이상의 출력 디바이스에 인가될 수 있다. 이 애플리케이션을 위해, 프로세싱 시스템은, 예를 들어, 디지털 신호 프로세서(DSP), 마이크로제어기, 주문형 집적 회로(ASIC) 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위해 고수준 절차형 또는 객체 지향형 프로그래밍 언어로 구현될 수 있다. 또한, 프로그램 코드는 요구되는 경우에 어셈블리 또는 기계 언어로 구현될 수 있다. 사실상, 본 명세서에 설명된 메커니즘들은 임의의 특정 프로그래밍 언어로 범위가 제한되지는 않는다. 임의의 경우에, 이 언어는 컴파일링되거나 해석된 언어일 수 있다.
적어도 일 실시예의 하나 이상의 양태는, 머신에 의해 판독되는 경우에 이 머신으로 하여금 본 명세서에 설명된 기술들을 수행하는 로직을 제조하게 하는, 프로세서 내의 다양한 로직을 나타내는 머신 판독가능 매체 상에 저장된 대표적인 명령어들에 의해 구현될 수 있다. "IP 코어들"로서 알려진, 그러한 표현들은 유형의 기계 판독가능 매체에 저장될 수 있으며 실제로 로직 또는 프로세서를 만드는 제조 기계에 로딩하는 제조 설비 또는 다양한 고객에게 공급될 수 있다.
이러한 기계 판독가능 저장 매체는 하드 디스크와, 플로피 디스크, 광 디스크, CD-ROM(compact disk read-only memory), CD-RW(compact disk rewritable) 및 광자기 디스크를 포함하는 임의의 다른 유형의 디스크, DRAM(dynamic random access memory), SRAM(static random access memory), EPROM(erasable programmable read-only memory), 플래시 메모리, EEPROM(electrically erasable programmable read-only memory)과 같은 RAM(random access memory), ROM(read-only memory), PCM(phase change memory)을 포함하는 반도체 디바이스, 자기 또는 광 카드, 또는 전자 명령어들을 저장하는 데 적합한 임의의 다른 유형의 매체와 같은 저장 매체를 포함하는, 기계 또는 디바이스에 의해 제조 또는 형성되는 물품들의 비일시적, 유형의(tangible) 구성들을 포함할 수 있지만, 이들로 제한되지 않는다.
따라서, 본 발명의 실시예들은, 명령어들을 포함하거나, 또는 본 명세서에 설명된 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 피처들을 정의하는 HDL(Hardware Description Language)과 같은 설계 데이터를 포함하는 비일시적인 유형의 머신 판독가능 매체를 또한 포함한다. 이러한 실시예들은 프로그램 제품들로 또한 언급될 수 있다.
에뮬레이션(이진 번역(binary translation), 코드 모핑 등을 포함함)
일부 경우에, 소스 명령어 세트로부터 타깃 명령어 세트로 명령어를 변환하기 위해 명령어 변환기가 이용될 수 있다. 예를 들어, 명령어 변환기는 명령어를 코어에 의해 프로세싱될 하나 이상의 다른 명령어로 (예를 들어, 정적 이진 변환, 동적 컴파일(dynamic compilation)을 포함하는 동적 이진 변환을 이용하여) 변환하거나, 모핑하거나, 에뮬레이트하거나, 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 온 프로세서(on processor), 오프 프로세서(off processor), 또는 부분 온 및 부분 오프 프로세서(part on and part off processor)일 수 있다.
도 20은 본 발명의 실시예들에 따른, 소스 명령어 세트에서의 이진 명령어들을 타겟 명령어 세트에서의 이진 명령어들로 변환하기 위해 소프트웨어 명령어 변환기를 사용하는 것을 대비하는 블록도이다. 예시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 다양한 조합으로 구현될 수 있다. 도 20는 적어도 하나의 x86 명령어 세트 코어(2016)를 갖는 프로세서에 의해 기본적으로 실행될 수 있는 x86 이진 코드(2006)를 발생시키기 위해 고수준 언어(2002)로 된 프로그램이 x86 컴파일러(2004)를 사용하여 컴파일될 수 있다는 것을 나타낸 것이다. 적어도 하나의 x86 명령어 세트 코어(2016)를 갖는 프로세서는, 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) Intel x86 명령어 세트 코어의 명령어 세트의 상당 부분, 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서상에서 실행되도록 타겟팅되어 있는 애플리케이션들 또는 다른 소프트웨어의 오브젝트 코드 버전들을, 호환 가능하게 실행하거나 다른 방식으로 프로세싱함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(2004)는, 부가의 링크(linkage) 프로세싱에 의해 또는 부가의 링크 프로세싱 없이, 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(2016) 상에서 실행될 수 있는 x86 이진 코드(2006)(예컨대, 오브젝트 코드)를 생성하도록 동작 가능한 컴파일러를 나타낸다. 이와 유사하게, 도 20은 적어도 하나의 x86 명령어 세트 코어가 없는 프로세서(2014)(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 및/또는 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 기본적으로 실행될 수 있는 대안의 명령어 세트 이진 코드(2010)를 생성하기 위해 고수준 언어(2002)로 된 프로그램이 대안의 명령어 세트 컴파일러(2008)를 사용하여 컴파일될 수 있다는 것을 나타낸 것이다. 명령어 변환기(2012)는 x86 이진수 코드(2006)를 x86 명령어 세트 코어를 갖지 않는 프로세서(2014)에 의해 기본적으로 실행될 수 있는 코드로 변환하는 데 사용된다. 이것을 할 수 있는 명령어 변환기를 만드는 것이 어렵기 때문에 이같이 변환된 코드가 대안의 명령어 세트 이진 코드(2010)와 동일하지 않을 가능성이 있지만; 변환된 코드는 일반적인 연산을 달성할 것이고 대안의 명령어 세트로부터의 명령어들로 이루어져 있을 것이다. 따라서, 명령어 변환기(2012)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스가 x86 이진 코드(2006)를 실행할 수 있게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
도 3 내지 4, 및/또는 도 6 내지 12 중 임의의 것에 대해 개시되는 컴포넌트들, 특징들 및 상세들은 또한 도 1 내지 2 및/또는 도 5 중 임의의 것에 선택적으로 사용될 수 있다. 또한, 장치 중 임의의 것에 대해 본 명세서에 설명된 컴포넌트들, 특징들, 및 상세들은 또한, 실시예들에서 그러한 장치에 의해 및/또는 그러한 장치를 가지고 수행될 수 있는 본 명세서에 설명된 방법들 중 임의의 것에서 선택적으로 이용될 수 있다.
설명 및 청구항들에서, 용어 "결합된" 및/또는 "접속된"이 이들의 파생어들과 함께 사용되었을 수 있다. 이들 용어들은 서로에 대한 동의어로서 의도되는 것은 아니라는 것이 이해되어야 한다. 오히려, 특정한 실시예들에서, "접속된"은, 2개 이상의 요소들이 서로 직접 물리적 또는 전기적으로 접촉함을 나타내는데 사용될 수 있다. "결합된"은, 2개 이상의 요소가 직접 물리적으로 또는 전기적으로 접촉하는 것을 의미할 수 있다. 그러나, "결합된"은, 2개 이상의 요소들이 서로 직접 접촉하지는 않지만 여전히 서로 상호작용하거나 협력하는 것을 또한 의미할 수 있다. 예를 들어, 실행 유닛은 하나 이상의 개입 컴포넌트를 통해 레지스터 또는 디코드 유닛과 결합될 수 있다. 도면들에서, 화살표들은 접속들 및 결합들을 나타내는데 이용된다.
설명 및 청구범위에서, "로직"이라는 용어가 사용되었을 수 있다. 본원에서 사용된 바와 같이, 로직은 하드웨어, 펌웨어, 소프트웨어 또는 다양한 조합들을 포함할 수 있다. 로직의 예들은, 집적 회로, 주문형 집적 회로들, 아날로그 회로들, 디지털 회로들, 프로그램된 로직 디바이스들, 명령어들을 포함하는 메모리 디바이스들 등을 포함한다. 일부 실시예들에서, 하드웨어 로직은 트랜지스터들 및/또는 게이트들을 잠재적으로 다른 회로 컴포넌트들과 함께 포함할 수 있다. 일부 실시예들에서, 로직은 컴포넌트, 유닛, 또는 다른 모듈로서 실시될 수 있다.
위의 설명에서는 실시예들의 충분한 이해를 제공하기 위해 특정 상세들이 설명되었다. 그러나, 다른 실시예들이 이들 특정 상세의 일부 없이 구현될 수 있다. 본 발명의 범위는 위에서 제공된 특정 예들에 의해서가 아니라 이하의 청구항들에 의해서만 결정되어야 한다. 다른 경우들에서, 잘 알려진 회로들, 구조들, 디바이스들, 및 동작들은 설명의 이해를 불명료하게 하는 것을 피하기 위해 블록도 형태로 또는 상세 없이 도시되었다. 다수의 컴포넌트들이 도시되고 설명되는 경우, 일부 경우들에서 이러한 다수의 컴포넌트들은 하나의 컴포넌트로 통합될 수 있다. 단일의 컴포넌트가 도시되고 설명되는 경우, 일부 경우들에서 이러한 단일 컴포넌트는 2개 이상의 컴포넌트로 분리될 수 있다.
다양한 동작들 및 방법들이 설명되었다. 방법들 중 일부는 흐름도에서 비교적 기본적인 형태로 개시되었지만, 동작들은 선택적으로 방법들에 추가되고/되거나 방법들에서 제거될 수 있다. 또한, 흐름도는 예시적인 실시예들에 따라 동작들의 특정 순서를 나타내지만, 그 특정 순서는 예시적이다. 대안적인 실시예들은 선택적으로 동작을 상이한 순서로 수행하고, 소정 동작을 결합하며, 소정 동작을 중첩하는 등을 할 수 있다.
특정 동작들이 하드웨어 컴포넌트에 의해 수행될 수 있거나, 머신-실행가능한 또는 머신, 회로, 또는 하드웨어 컴포넌트(예를 들어, 프로세서, 프로세서의 부분, 회로 등)로 하여금 동작들을 수행하는 명령어들로 프로그램되게 야기 및/또는 유발하는데 사용될 수 있는 회로-실행가능한 명령어들로 구현될 수 있다. 동작들은 또한 선택적으로 하드웨어 및 소프트웨어의 조합에 의해 수행될 수 있다. 프로세서, 머신, 회로, 또는 하드웨어는 구체적 또는 특정 회로 또는 다른 로직(예를 들어, 펌웨어 및/또는 소프트웨어와 잠재적으로 결합된 하드웨어)를 포함할 수 있고, 명령어를 실행 및/또는 프로세스하고 명령어에 응답하여 결과를 저장하도록 동작가능하다.
일부 실시예들은 머신 판독가능 매체를 포함하는 제조물(예를 들어, 컴퓨터 프로그램 제품)을 포함한다. 이 매체는 머신에 의해 판독가능한 형태로 정보를 제공하는, 예를 들어 저장하는 메커니즘을 포함할 수 있다. 머신 판독가능 매체는 머신에 의해 실행되는 경우에 그리고/또는 실행될 때 머신으로 하여금 본 명세서에서 개시되는 하나 이상의 동작들, 방법들 또는 기술들을 수행하게 하고/하거나 머신이 그들을 수행하게 유발하게 동작가능한 명령어 또는 명령어들의 시퀀스를 제공하거나 저장할 수 있다.
일부 실시예들에서, 머신 판독가능 매체는 유형의 그리고/또는 비일시적인 머신 판독가능 저장 매체를 포함할 수 있다. 예를 들어, 유형의 그리고/또는 비일시적인 머신 판독가능 저장 매체는 플로피 디스켓, 광학 저장 매체, 광학 디스크, 광학 데이터 저장 디바이스, CD-ROM, 자기 디스크, 광자기 디스크, ROM(read only memory), PROM(programmable ROM), EPROM(erasable-and-programmable ROM), EEPROM(electrically-erasable-and-programmable ROM), RAM(random access memory), 정적 RAM(SRAM), 동적 RAM(DRAM), 플래시 메모리, 상변화 메모리, 상변화 데이터 저장 재료, 비휘발성 메모리, 비휘발성 데이터 저장 디바이스, 비일시적인 메모리, 비일시적인 데이터 저장 디바이스 등을 포함할 수 있다. 비일시적인 머신 판독가능 저장 매체는 일시 전파 신호(transitory propagated signal)로 구성되지 않는다.
적절한 머신들의 예들은 프로세서들, 이것으로 한정되는 것은 아니지만, 범용 프로세서들, 특수 목적 프로세서들, 명령어 프로세싱 장치, 디지털 로직 회로들, 집적 회로등 등을 포함한다. 적절한 머신들의 또 다른 예들은 그러한 프로세서, 명령어 프로세싱 장치, 디지털 로직 회로, 또는 집적 회로를 포함하는 컴퓨팅 디바이스들 및 다른 전자 디바이스들을 포함한다. 이러한 컴퓨팅 디바이스들 및 전자 디바이스들의 예들은, 이것으로 한정되는 것은 아니지만, 데스크톱 컴퓨터들, 랩톱 컴퓨터들, 노트북 컴퓨터들, 태블릿 컴퓨터들, 넷북들, 스마트폰들, 셀룰러 폰들, 서버들, 네트워크 디바이스들(예를 들어, 라우터들 및 스위치들), MID들(Mobile Internet devices), 미디어 플레이어들, 스마트 텔레비전들, 넷톱들(nettops), 셋톱 박스들 및 비디오 게임 제어기들을 포함한다.
본 명세서에 걸친 "일 실시예", "실시예", 또는 "하나 이상의 실시예", "일부 실시예들"에 대한 참조는, 예를 들어, 특정 특징이 본 발명의 실행에 포함될 수 있다는 것을 나타내지만, 반드시 그렇게 요구되는 것은 아니다. 유사하게, 본 명세서를 간소화하고 다양한 본 발명의 양상들의 이해를 도울 목적으로, 설명에서는 다양한 특징들이 때때로 단일 실시예, 도면, 또는 그의 설명에서 함께 그룹화된다. 그러나, 이러한 개시물의 방법은, 본 발명이 각각의 청구항에서 명백하게 기재되는 것보다 더 많은 특징들을 요구한다는 의도를 반영하는 것으로서 해석되어서는 안 된다. 오히려, 다음의 청구항들이 반영하는 바에 따라, 본 발명의 양태들은 단일의 개시된 실시예의 모든 특징보다 적게 놓일 수 있다. 따라서, 본 상세한 설명에 후속하는 청구항들은 이에 의해 본 상세한 설명에 명백하게 포함되고, 각각의 청구항은 본 발명의 별개의 실시예로서 자립한다.
예시적인 실시예들
이하의 예들은 추가의 실시예들에 관련된다. 예들에서의 상세는 하나 이상의 실시예들의 임의의 곳에서 사용될 수 있다.
예 1은, 선택적으로 프로세서가 패킹된 데이터 연산 마스킹을 사용하지 않는 제1 모드, 및 선택적으로 프로세서가 패킹된 데이터 연산 마스킹을 사용하는 제2 모드를 포함하는 프로세서이다. 프로세서는 제1 모드에서 주어진 패킹된 데이터 연산에 대한 마스킹되지 않은 패킹된 데이터 명령어를 디코드하고, 제2 모드에서 주어진 패킹된 데이터 연산의 마스킹된 버전에 대한 마스킹된 패킹된 데이터 명령어를 디코드하는 디코드 유닛을 포함한다. 마스킹되지 않은 그리고 마스킹된 패킹된 데이터 명령어들은 동일한 명령어 길이를 갖는다. 마스킹된 패킹된 데이터 명령어는 패킹된 데이터 연산 마스크를 특정하기 위한 하나 이상의 비트를 갖는다. 하나 이상의 실행 유닛은 디코드 유닛과 결합된다. 하나 이상의 실행 유닛은, 제1 모드에서 디코드 유닛이 마스킹되지 않은 패킹된 데이터 명령어를 디코딩하는 것에 응답하여, 주어진 패킹된 데이터 연산을 수행한다. 하나 이상의 실행 유닛은, 제2 모드에서 디코드 유닛이 마스킹된 패킹된 데이터 명령어를 디코딩하는 것에 응답하여, 주어진 패킹된 데이터 연산의 마스킹된 버전을 특정된 패킹된 데이터 연산 마스크를 이용하여 수행한다.
예 2는 예 1의 프로세서를 포함하며, 선택적으로, 명령어 길이는 32 비트이다.
예 3은 예 1의 프로세서를 포함하며, 선택적으로, 프로세서는 RISC(reduced instruction set computing) 프로세서를 포함한다.
예 4는 예 1의 프로세서를 포함하며, 복수의 패킹된 데이터 레지스터를 더 포함한다. 또한, 선택적으로, 마스킹된 패킹된 데이터 명령어의 하나 이상의 비트는 복수의 패킹된 데이터 레지스터 중의 패킹된 데이터 레지스터를 패킹된 데이터 연산 마스크의 소스로서 특정한다.
예 5는 예 4의 프로세서를 포함하며, 선택적으로, 패킹된 데이터 연산 마스크는 패킹된 데이터 레지스터의 복수의 데이터 요소의 각각으로부터의 비트를 포함한다.
예 6은 예 4의 프로세서를 포함하며, 선택적으로, 패킹된 데이터 레지스터는 패킹된 데이터 연산 마스크 및 적어도 하나의 다른 패킹된 데이터 연산 마스크를 저장한다.
예 7은 예 6의 프로세서를 포함하며, 선택적으로, 제1 뷰에서, 패킹된 데이터 레지스터는 더 많은 수의 상대적으로 더 작은 패킹된 데이터 연산 마스크들을 저장하고, 제2 뷰에서, 더 적은 수의 상대적으로 더 큰 패킹된 데이터 연산 마스크들을 저장한다.
예 8은 예 1의 프로세서를 포함하며, 선택적으로, 복수의 패킹된 데이터 연산 마스크 레지스터를 더 포함한다. 또한, 선택적으로, 마스킹된 패킹된 데이터 명령어의 하나 이상의 비트는 복수의 패킹된 데이터 연산 마스크 레지스터 중의 패킹된 데이터 연산 마스크 레지스터를 패킹된 데이터 연산 마스크의 소스로서 특정한다.
예 9는 예 1 내지 예 8 중 어느 한 예의 프로세서를 포함하며, 선택적으로, 제1 및 제2 모드들은 프로세서의 레지스터 내의 하나 이상의 비트에 의해 표시된다.
예 10은 예 1 내지 예 8 중 어느 한 예의 프로세서를 포함하며, 선택적으로, 주어진 패킹된 데이터 연산 및 주어진 패킹된 데이터 연산의 마스킹된 버전은, (1) 패킹된 승산 연산 및 마스킹된 패킹된 승산 연산; (2) 패킹된 가산 연산 및 마스킹된 패킹된 가산 연산; (3) 패킹된 논리 AND 연산 및 마스킹된 패킹된 논리 AND 연산; (4) 패킹된 논리 OR 연산 및 마스킹된 패킹된 논리 OR 연산; 및 (5) 패킹된 비교 연산 및 마스킹된 패킹된 비교 연산 중 하나를 포함한다.
예 11은 프로세서에 의해 수행되는 방법이다. 방법은, 프로세서가 패킹된 데이터 연산 마스킹을 사용하지 않는 제1 모드에서 주어진 패킹된 데이터 연산에 대한 마스킹되지 않은 패킹된 데이터 명령어를 디코딩하는 단계를 포함한다. 방법은 제1 모드에서 마스킹되지 않은 패킹된 데이터 명령어의 디코딩에 응답하여 주어진 패킹된 데이터 연산을 수행하는 단계를 포함한다. 방법은, 프로세서가 패킹된 데이터 연산 마스킹을 사용하는 제2 모드에서 주어진 패킹된 데이터 연산의 마스킹된 버전에 대한 마스킹된 패킹된 데이터 명령어를 디코딩하는 단계를 포함한다. 마스킹되지 않은 그리고 마스킹된 패킹된 데이터 명령어들은 동일한 명령어 길이를 갖는다. 마스킹된 패킹된 데이터 명령어는 패킹된 데이터 연산 마스크를 특정하기 위한 하나 이상의 비트를 갖는다. 방법은 제2 모드에서 마스킹된 패킹된 데이터 명령어의 디코딩에 응답하여 특정된 패킹된 데이터 연산 마스크를 사용하여 주어진 패킹된 데이터 연산의 마스킹된 버전을 수행하는 단계를 포함한다.
예 12는 예 11의 방법을 포함하며, 선택적으로, 디코딩하는 단계는, 각각이 32 비트의 명령어 길이를 갖는 마스킹되지 않은 그리고 마스킹된 패킹된 데이터 명령어들을 디코딩하는 것을 포함한다.
예 13은 예 11의 방법을 포함하며, 마스킹된 패킹된 데이터 명령어의 하나 이상의 비트에 의해 특정된 패킹된 데이터 레지스터로부터 패킹된 데이터 연산 마스크에 액세싱하는 단계를 더 포함한다.
예 14는 예 13의 방법을 포함하며, 선택적으로, 액세싱하는 단계는, 패킹된 데이터 레지스터의 복수의 데이터 요소들 각각으로부터의 비트를 패킹된 데이터 연산 마스크로서 액세싱하는 것을 포함한다.
예 15는 예 13의 방법을 포함하며, 선택적으로, 액세싱하는 단계는, 적어도 하나의 다른 패킹된 데이터 연산 마스크를 또한 저장하는 패킹된 데이터 레지스터로부터 패킹된 데이터 연산 마스크를 액세싱하는 것을 포함한다.
예 16은 예 15의 방법을 포함하며, 선택적으로, 액세싱하는 단계는, 제1 뷰에서 더 많은 수의 상대적으로 더 작은 패킹된 데이터 연산 마스크들을 저장하고, 제2 뷰에서 더 적은 수의 상대적으로 더 큰 패킹된 데이터 연산 마스크들을 저장하는 패킹된 데이터 레지스터로부터 패킹된 데이터 연산 마스크를 액세싱하는 것을 포함한다.
예 17은 예 11의 방법을 포함하며, 마스킹된 패킹된 데이터 명령어의 하나 이상의 비트에 의해 특정되는 복수의 패킹된 데이터 연산 마스크 레지스터 중 하나로부터 패킹된 데이터 연산 마스크를 액세싱하는 단계를 더 포함한다.
예 18은 예 11의 방법을 포함하며, 선택적으로, 방법은 RISC(reduced instruction set computing) 프로세서 내에서 수행된다.
예 19는 예 11의 방법을 포함하며, 프로세서가 제2 모드에 있게 하도록 프로세서의 레지스터 내의 하나 이상의 비트를 변경하는 단계를 더 포함한다.
예 20은 예11의 방법을 포함하며, 선택적으로, 주어진 패킹된 데이터 연산 및 주어진 패킹된 데이터 연산의 마스킹된 버전를 수행하는 것은, (1) 패킹된 승산 연산 및 마스킹된 패킹된 승산 연산을 수행하는 것; (2) 패킹된 가산 연산 및 마스킹된 패킹된 가산 연산을 수행하는 것; (3)패킹된 논리 AND 연산 및 마스킹된 패킹된 논리 AND 연산을 수행하는 것; (4) 패킹된 논리 OR 연산 및 마스킹된 패킹된 논리 OR 연산을 수행하는 것; 및 (5) 패킹된 비교 연산 및 마스킹된 패킹된 비교 연산을 수행하는 것 중 하나를 포함한다.
예 21은 명령어를 프로세스하는 시스템이다. 시스템은 상호접속부, 상호접속부와 결합된 동적 랜덤 액세스 메모리(DRAM), 및 상호접속부와 결합된 프로세서를 포함한다. 프로세서는, 프로세서가 패킹된 데이터 연산 마스킹을 사용하지 않는 제1 모드, 및 프로세서가 패킹된 데이터 연산 마스킹을 사용하는 제2 모드를 포함한다. 프로세서는, 제1 모드에서 주어진 패킹된 데이터 연산에 대한 마스킹되지 않은 패킹된 데이터 명령어를 디코드하고, 제2 모드에서 주어진 패킹된 데이터 연산의 마스킹된 버전에 대한 마스킹된 패킹된 데이터 명령어를 디코드하는 디코드 유닛을 포함한다. 마스킹되지 않은 그리고 마스킹된 패킹된 데이터 명령어들은 동일한 명령어 길이를 갖는다. 마스킹된 패킹된 데이터 명령어는 패킹된 데이터 연산 마스크를 특정하기 위한 하나 이상의 비트를 갖는다. 프로세서는 디코드 유닛과 결합된 하나 이상의 실행 유닛을 포함한다. 하나 이상의 실행 유닛은, 제1 모드에서 디코드 유닛이 마스킹되지 않은 패킹된 데이터 명령어를 디코딩하는 것에 응답하여, 주어진 패킹된 데이터 연산을 수행한다. 하나 이상의 실행 유닛은, 제2 모드에서 디코드 유닛이 마스킹된 패킹된 데이터 명령어를 디코딩하는 것에 응답하여, 주어진 패킹된 데이터 연산의 마스킹된 버전을 특정된 패킹된 데이터 연산 마스크를 이용하여 수행한다.
예 22는 예 21의 시스템을 포함하며, 선택적으로, 명령어 길이는 32 비트이고, 선택적으로 프로세서는 RISC(reduced instruction set computing) 프로세서를 포함한다.
예 23은 머신에 의해 실행되는 경우, 머신으로 하여금 예 11 내지 예 20 중 어느 한 예의 방법을 수행하게 하는 명령어들을 저장한 머신 판독가능한 저장 매체이다.
예 24는 예 11 내지 예 20 중 어느 한 예의 방법을 수행하는 프로세서이다.
예 25는 예 11 내지 예 20 중 어느 한 예의 방법을 수행하는 수단을 포함하는 프로세서이다.
예 26은 예 11 내지 예 20 중 어느 한 예의 방법을 수행하기 위한, 집적 회로 및/또는 로직 및/또는 유닛들 및/또는 컴포넌트들 및/또는 모듈들 또는 그의 조합을 포함하는 프로세서이다.
예 27은 적어도 하나의 프로세서 및 선택적으로 동적 랜덤 액세스 메모리(DRAM)를 포함하는 컴퓨터 시스템이고, 컴퓨터 시스템은 예 11 내지 예 20 중 어느 한 예의 방법을 수행한다.
예 28은 전술한 바와 같은 하나 이상의 연산 또는 방법을 실질적으로 수행하는 프로세서이다.
예 29는 전술한 바와 같은 하나 이상의 연산들 또는 방법을 실질적으로 수행하는 수단을 포함하는 프로세서이다.

Claims (25)

  1. 프로세서로서,
    상기 프로세서가 패킹된 데이터 연산 마스킹을 사용하지 않는 제1 모드;
    상기 프로세서가 패킹된 데이터 연산 마스킹을 사용하는 제2 모드;
    상기 제1 모드에서 주어진 패킹된 데이터 연산에 대한 마스킹되지 않은 패킹된 데이터 명령어를 디코드하고, 상기 제2 모드에서 상기 주어진 패킹된 데이터 연산의 마스킹된 버전에 대한 마스킹된 패킹된 데이터 명령어를 디코드하는 디코드 유닛 - 상기 마스킹되지 않은 그리고 마스킹된 패킹된 데이터 명령어들은 동일한 명령어 길이를 갖고, 상기 마스킹된 패킹된 데이터 명령어는 패킹된 데이터 연산 마스크를 특정하기 위한 하나 이상의 비트를 가짐 - ; 및
    상기 디코드 유닛과 결합된 하나 이상의 실행 유닛 - 상기 하나 이상의 실행 유닛은, 상기 디코드 유닛이 상기 제1 모드에서 상기 마스킹되지 않은 패킹된 데이터 명령어를 디코딩하는 것에 응답하여, 상기 주어진 패킹된 데이터 연산을 수행하고, 상기 하나 이상의 실행 유닛은, 상기 디코드 유닛이 상기 제2 모드에서 상기 마스킹된 패킹된 데이터 명령어를 디코딩하는 것에 응답하여, 상기 주어진 패킹된 데이터 연산의 상기 마스킹된 버전을 상기 특정된 패킹된 데이터 연산 마스크를 이용하여 수행함 - ;
    을 포함하는 프로세서.
  2. 제1항에 있어서,
    상기 명령어 길이는 32 비트인 프로세서.
  3. 제1항에 있어서,
    상기 프로세서는 RISC(reduced instruction set computing) 프로세서를 포함하는 프로세서.
  4. 제1항에 있어서,
    복수의 패킹된 데이터 레지스터를 더 포함하고, 상기 마스킹된 패킹된 데이터 명령어의 상기 하나 이상의 비트는 상기 복수의 패킹된 데이터 레지스터 중의 패킹된 데이터 레지스터를 상기 패킹된 데이터 연산 마스크의 소스로서 특정하는 것인 프로세서.
  5. 제4항에 있어서,
    상기 패킹된 데이터 연산 마스크는 상기 패킹된 데이터 레지스터의 복수의 데이터 요소 각각으로부터의 비트를 포함하는 것인 프로세서.
  6. 제4항에 있어서,
    상기 패킹된 데이터 레지스터는 상기 패킹된 데이터 연산 마스크 및 적어도 하나의 다른 패킹된 데이터 연산 마스크를 저장하는 것인 프로세서.
  7. 제6항에 있어서,
    제1 뷰에서 상기 패킹된 데이터 레지스터는 더 많은 수의 상대적으로 더 작은 패킹된 데이터 연산 마스크들을 저장하는 것이고, 제2 뷰에서 더 적은 수의 상대적으로 더 큰 패킹된 데이터 연산 마스크들을 저장하는 것인 프로세서.
  8. 제1항에 있어서,
    복수의 패킹된 데이터 연산 마스크 레지스터를 더 포함하고, 상기 마스킹된 패킹된 데이터 명령어의 상기 하나 이상의 비트는 상기 복수의 패킹된 데이터 연산 마스크 레지스터 중의 패킹된 데이터 연산 마스크 레지스터를 상기 패킹된 데이터 연산 마스크의 소스로서 특정하는 것인 프로세서.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서, 상기 제1 및 제2 모드들은 상기 프로세서의 레지스터 내의 하나 이상의 비트에 의해 표시되는 것인 프로세서.
  10. 제1항 내지 제8항 중 어느 한 항에 있어서, 상기 주어진 패킹된 데이터 연산 및 상기 주어진 패킹된 데이터 연산의 상기 마스킹된 버전은:
    패킹된 승산 연산 및 마스킹된 패킹된 승산 연산;
    패킹된 가산 연산 및 마스킹된 패킹된 가산 연산;
    패킹된 논리 AND 연산 및 마스킹된 패킹된 논리 AND 연산;
    패킹된 논리 OR 연산 및 마스킹된 패킹된 논리 OR 연산; 및
    패킹된 비교 연산 및 마스킹된 패킹된 비교 연산
    중 하나를 포함하는 프로세서.
  11. 프로세서에 의해 수행되는 방법으로서,
    상기 프로세서가 패킹된 데이터 연산 마스킹을 사용하지 않는 제1 모드에서 주어진 패킹된 데이터 연산에 대한 마스킹되지 않은 패킹된 데이터 명령어를 디코딩하는 단계;
    상기 제1 모드에서 상기 마스킹되지 않은 패킹된 데이터 명령어의 디코딩에 응답하여 상기 주어진 패킹된 데이터 연산을 수행하는 단계;
    상기 프로세서가 패킹된 데이터 연산 마스킹을 사용하는 제2 모드에서 상기 주어진 패킹된 데이터 연산의 마스킹된 버전에 대한 마스킹된 패킹된 데이터 명령어를 디코딩하는 단계 - 상기 마스킹되지 않은 그리고 마스킹된 패킹된 데이터 명령어들은 동일한 명령어 길이를 갖고, 상기 마스킹된 패킹된 데이터 명령어는 패킹된 데이터 연산 마스크를 특정하기 위한 하나 이상의 비트를 가짐 - ; 및
    상기 제2 모드에서 상기 마스킹된 패킹된 데이터 명령어를 디코딩하는 상기 단계에 응답하여, 상기 주어진 패킹된 데이터 연산의 상기 마스킹된 버전을 상기 특정된 패킹된 데이터 연산 마스크를 이용하여 수행하는 단계
    를 포함하는 방법.
  12. 제11항에 있어서,
    디코딩하는 단계는, 각각이 32 비트의 명령어 길이를 갖는 상기 마스킹되지 않은 그리고 마스킹된 패킹된 데이터 명령어들을 디코딩하는 것을 포함하는 방법.
  13. 제11항에 있어서,
    상기 마스킹된 패킹된 데이터 명령어의 상기 하나 이상의 비트에 의해 특정되는 패킹된 데이터 레지스터로부터 상기 패킹된 데이터 연산 마스크를 액세싱하는 단계를 더 포함하는 방법.
  14. 제13항에 있어서,
    액세싱하는 단계는, 상기 패킹된 데이터 레지스터의 복수의 데이터 요소 각각으로부터의 비트를 상기 패킹된 데이터 연산 마스크로서 액세싱하는 것을 포함하는 방법.
  15. 제13항에 있어서,
    액세싱하는 단계는, 또한 적어도 하나의 다른 패킹된 데이터 연산 마스크를 저장하는 상기 패킹된 데이터 레지스터로부터 상기 패킹된 데이터 연산 마스크를 액세싱하는 것을 포함하는 방법.
  16. 제15항에 있어서,
    액세싱하는 단계는, 제1 뷰에서 더 많은 수의 상대적으로 더 작은 패킹된 데이터 연산 마스크들을 저장하고, 제2 뷰에서 더 적은 수의 상대적으로 더 큰 패킹된 데이터 연산 마스크들을 저장하는 상기 패킹된 데이터 레지스터로부터 상기 패킹된 데이터 연산 마스크를 액세싱하는 것을 포함하는 방법.
  17. 제11항에 있어서,
    상기 마스킹된 패킹된 데이터 명령어의 상기 하나 이상의 비트에 의해 특정되는 복수의 패킹된 데이터 연산 마스크 레지스터 중 하나로부터 상기 패킹된 데이터 연산 마스크를 액세싱하는 단계를 더 포함하는 방법.
  18. 제11항에 있어서,
    상기 방법은 RISC(reduced instruction set computing) 프로세서에서 수행되는 방법.
  19. 제11항에 있어서,
    상기 프로세서로 하여금 상기 제2 모드에 있게 하도록 상기 프로세서의 레지스터 내의 하나 이상의 비트를 변경하는 단계를 더 포함하는 방법.
  20. 제11항에 있어서,
    상기 주어진 패킹된 데이터 연산 및 상기 주어진 패킹된 데이터 연산의 상기 마스킹된 버전을 수행하는 단계는,
    패킹된 승산 연산 및 마스킹된 패킹된 승산 연산을 수행하는 것;
    패킹된 가산 연산 및 마스킹된 패킹된 가산 연산을 수행하는 것;
    패킹된 논리 AND 연산 및 마스킹된 패킹된 논리 AND 연산을 수행하는 것;
    패킹된 논리 OR 연산 및 마스킹된 패킹된 논리 OR 연산을 수행하는 것; 및
    패킹된 비교 연산 및 마스킹된 패킹된 비교 연산을 수행하는 것
    중 하나를 포함하는 방법.
  21. 명령어들을 프로세스하는 시스템으로서,
    상호접속부;
    상기 상호접속부와 결합된 동적 랜덤 액세스 메모리(DRAM); 및
    상기 상호접속부와 결합된 프로세서
    를 포함하고,
    상기 프로세서는,
    상기 프로세서가 패킹된 데이터 연산 마스킹을 사용하지 않는 제1 모드;
    상기 프로세서가 패킹된 데이터 연산 마스킹을 사용하는 제2 모드;
    상기 제1 모드에서 주어진 패킹된 데이터 연산에 대한 마스킹되지 않은 패킹된 데이터 명령어를 디코드하고, 상기 제2 모드에서 상기 주어진 패킹된 데이터 연산의 마스킹된 버전에 대한 마스킹된 패킹된 데이터 명령어를 디코드하는 디코드 유닛 - 상기 마스킹되지 않은 그리고 마스킹된 패킹된 데이터 명령어들은 동일한 명령어 길이를 갖고, 상기 마스킹된 패킹된 데이터 명령어는 패킹된 데이터 연산 마스크를 특정하기 위한 하나 이상의 비트를 가짐 - ; 및
    상기 디코드 유닛과 결합된 하나 이상의 실행 유닛 - 상기 하나 이상의 실행 유닛은, 상기 디코드 유닛이 상기 제1 모드에서 상기 마스킹되지 않은 패킹된 데이터 명령어를 디코딩하는 것에 응답하여, 상기 주어진 패킹된 데이터 연산을 수행하고, 상기 하나 이상의 실행 유닛은, 상기 디코드 유닛이 상기 제2 모드에서 상기 마스킹된 패킹된 데이터 명령어를 디코딩하는 것에 응답하여, 상기 주어진 패킹된 데이터 연산의 상기 마스킹된 버전을 상기 특정된 패킹된 데이터 연산 마스크를 이용하여 수행함 -
    을 포함하는 시스템.
  22. 제21항에 있어서,
    상기 명령어 길이는 32 비트이고, 상기 프로세서는 RISC(reduced instruction set computing) 프로세서를 포함하는 시스템.
  23. 제11항 내지 제20항 중 어느 한 항의 방법을 수행하는 수단을 포함하는 프로세서.
  24. 머신에 의해 실행되는 경우, 상기 머신으로 하여금 제11항 내지 제20항 중 어느 한 항의 방법을 수행하게 하는 명령어들을 저장한 머신 판독가능한 저장 매체.
  25. 제1항 내지 제8항 중 어느 한 항의 프로세서 및 상기 프로세서와 결합된 동적 랜덤 액세스 메모리를 포함하는 시스템.
KR1020157031830A 2013-06-28 2014-06-17 패킹된 데이터 요소 프리디케이션 프로세서들, 방법들, 시스템들, 및 명령어들 KR20150141999A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/931,739 2013-06-28
US13/931,739 US9990202B2 (en) 2013-06-28 2013-06-28 Packed data element predication processors, methods, systems, and instructions
PCT/US2014/042797 WO2014209687A1 (en) 2013-06-28 2014-06-17 Packed data element predication processors, methods, systems, and instructions

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020187000578A Division KR20180006501A (ko) 2013-06-28 2014-06-17 패킹된 데이터 요소 프리디케이션 프로세서들, 방법들, 시스템들, 및 명령어들

Publications (1)

Publication Number Publication Date
KR20150141999A true KR20150141999A (ko) 2015-12-21

Family

ID=52116850

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020157031830A KR20150141999A (ko) 2013-06-28 2014-06-17 패킹된 데이터 요소 프리디케이션 프로세서들, 방법들, 시스템들, 및 명령어들
KR1020187000578A KR20180006501A (ko) 2013-06-28 2014-06-17 패킹된 데이터 요소 프리디케이션 프로세서들, 방법들, 시스템들, 및 명령어들

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020187000578A KR20180006501A (ko) 2013-06-28 2014-06-17 패킹된 데이터 요소 프리디케이션 프로세서들, 방법들, 시스템들, 및 명령어들

Country Status (8)

Country Link
US (5) US9990202B2 (ko)
EP (1) EP3014418B1 (ko)
KR (2) KR20150141999A (ko)
CN (1) CN105247475B (ko)
BR (1) BR112015030098B1 (ko)
RU (1) RU2612597C1 (ko)
TW (1) TWI536187B (ko)
WO (1) WO2014209687A1 (ko)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9477467B2 (en) 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
US9990202B2 (en) * 2013-06-28 2018-06-05 Intel Corporation Packed data element predication processors, methods, systems, and instructions
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
US10459723B2 (en) * 2015-07-20 2019-10-29 Qualcomm Incorporated SIMD instructions for multi-stage cube networks
US9785800B2 (en) 2015-12-23 2017-10-10 Intel Corporation Non-tracked control transfers within control transfer enforcement
US20170185400A1 (en) 2015-12-23 2017-06-29 Intel Corporation Mode-specific endbranch for control flow termination
US20170192781A1 (en) * 2015-12-30 2017-07-06 Robert Valentine Systems, Apparatuses, and Methods for Strided Loads
US11204764B2 (en) * 2016-03-31 2021-12-21 Intel Corporation Processors, methods, systems, and instructions to Partition a source packed data into lanes
US10891131B2 (en) * 2016-09-22 2021-01-12 Intel Corporation Processors, methods, systems, and instructions to consolidate data elements and generate index updates
WO2018112193A1 (en) 2016-12-14 2018-06-21 Novetechnologies, LLC Livestock biosecurity system and method of use
RU2659492C1 (ru) * 2017-08-18 2018-07-02 Федеральное государственное бюджетное образовательное учреждение высшего образования "Вятский государственный университет" (ВятГУ) Блок унификации с параллельным сопоставлением термов
US10678540B2 (en) * 2018-05-08 2020-06-09 Arm Limited Arithmetic operation with shift
DE102018113475A1 (de) * 2018-06-06 2019-12-12 Infineon Technologies Ag Rechenwerk zum rechnen mit maskierten daten
US11328209B1 (en) 2021-06-02 2022-05-10 SambaNova Systems, Inc. Dual cycle tensor dropout in a neural network
US11256987B1 (en) 2021-06-02 2022-02-22 SambaNova Systems, Inc. Memory efficient dropout, with reordering of dropout mask elements

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4903228A (en) * 1988-11-09 1990-02-20 International Business Machines Corporation Single cycle merge/logic unit
CA2045705A1 (en) * 1990-06-29 1991-12-30 Richard Lee Sites In-register data manipulation in reduced instruction set processor
US5787303A (en) * 1991-10-31 1998-07-28 Kabushiki Kaisha Toshiba Digital computer system capable of processing a plurality of instructions in parallel based on a VLIW architecture
US5606677A (en) * 1992-11-30 1997-02-25 Texas Instruments Incorporated Packed word pair multiply operation forming output including most significant bits of product and other bits of one input
US5781457A (en) * 1994-03-08 1998-07-14 Exponential Technology, Inc. Merge/mask, rotate/shift, and boolean operations from two instruction sets executed in a vectored mux on a dual-ALU
CA2156889C (en) 1994-09-30 1999-11-02 Edward L. Schwartz Method and apparatus for encoding and decoding data
EP0847551B1 (en) 1995-08-31 2012-12-05 Intel Corporation A set of instructions for operating on packed data
US6052769A (en) 1998-03-31 2000-04-18 Intel Corporation Method and apparatus for moving select non-contiguous bytes of packed data in a single instruction
US6484255B1 (en) 1999-09-20 2002-11-19 Intel Corporation Selective writing of data elements from packed data based upon a mask using predication
US6629115B1 (en) * 1999-10-01 2003-09-30 Hitachi, Ltd. Method and apparatus for manipulating vectored data
US7017032B2 (en) 2001-06-11 2006-03-21 Broadcom Corporation Setting execution conditions
US7127593B2 (en) * 2001-06-11 2006-10-24 Broadcom Corporation Conditional execution with multiple destination stores
US6986023B2 (en) 2002-08-09 2006-01-10 Intel Corporation Conditional execution of coprocessor instruction based on main processor arithmetic flags
US7002595B2 (en) * 2002-10-04 2006-02-21 Broadcom Corporation Processing of color graphics data
US20050149701A1 (en) 2003-12-24 2005-07-07 Inching Chen Method, apparatus and system for pair-wise minimum and minimum mask instructions
US7873812B1 (en) * 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US20070186210A1 (en) 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US20080016320A1 (en) * 2006-06-27 2008-01-17 Amitabh Menon Vector Predicates for Sub-Word Parallel Operations
US7676647B2 (en) * 2006-08-18 2010-03-09 Qualcomm Incorporated System and method of processing data using scalar/vector instructions
US8180998B1 (en) * 2007-09-10 2012-05-15 Nvidia Corporation System of lanes of processing units receiving instructions via shared memory units for data-parallel or task-parallel operations
US9529592B2 (en) * 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US8156391B2 (en) 2008-05-27 2012-04-10 Lsi Corporation Data controlling in the MBIST chain architecture
US8434074B2 (en) * 2010-02-24 2013-04-30 Intel Corporation Register allocation with SIMD architecture using write masks
US8667042B2 (en) * 2010-09-24 2014-03-04 Intel Corporation Functional unit for vector integer multiply add instruction
US9600285B2 (en) 2011-12-22 2017-03-21 Intel Corporation Packed data operation mask concatenation processors, methods, systems and instructions
JP2013186547A (ja) * 2012-03-06 2013-09-19 Fujitsu Ltd 演算処理装置、携帯端末および演算処理方法
US20130339680A1 (en) * 2012-06-15 2013-12-19 International Business Machines Corporation Nontransactional store instruction
US9256427B2 (en) * 2012-12-11 2016-02-09 International Business Machines Corporation Tracking multiple conditions in a general purpose register and instruction therefor
US9990202B2 (en) * 2013-06-28 2018-06-05 Intel Corporation Packed data element predication processors, methods, systems, and instructions

Also Published As

Publication number Publication date
US20180293074A1 (en) 2018-10-11
US10963257B2 (en) 2021-03-30
EP3014418A4 (en) 2017-03-08
BR112015030098B1 (pt) 2022-04-26
US11442734B2 (en) 2022-09-13
RU2612597C1 (ru) 2017-03-09
KR20180006501A (ko) 2018-01-17
EP3014418A1 (en) 2016-05-04
EP3014418B1 (en) 2020-11-18
US20200026518A1 (en) 2020-01-23
US20210216325A1 (en) 2021-07-15
TWI536187B (zh) 2016-06-01
WO2014209687A1 (en) 2014-12-31
US9990202B2 (en) 2018-06-05
CN105247475A (zh) 2016-01-13
TW201508521A (zh) 2015-03-01
CN105247475B (zh) 2019-11-15
US20230108016A1 (en) 2023-04-06
BR112015030098A2 (pt) 2017-07-25
US20150006858A1 (en) 2015-01-01
US10430193B2 (en) 2019-10-01

Similar Documents

Publication Publication Date Title
US20230108016A1 (en) Packed data element predication processors, methods, systems, and instructions
US9934032B2 (en) Processors, methods, and systems to implement partial register accesses with masked full register accesses
CN108845826B (zh) 多寄存器存储器访问指令、处理器、方法和系统
JP6340097B2 (ja) リードマスク及びライトマスクにより制御されるベクトル移動命令
KR101744031B1 (ko) 독립적 데이터 상에서의 재귀적 계산들의 벡터화를 위한 판독 및 기입 마스크들 갱신 명령어
US10936312B2 (en) Packed data alignment plus compute instructions, processors, methods, and systems
JP7419629B2 (ja) データ表現間の一貫性のある変換を加速するプロセッサ、方法、プログラム、コンピュータ可読記憶媒体、および装置
KR101856833B1 (ko) 레지스터들의 세트를 복수의 소형 레지스터들 또는 조합된 대형 레지스터들로서 액세스하는 프로세서들, 방법들, 및 시스템들
JP2018500630A (ja) 4次元モートン座標変換プロセッサ、方法、システム、及び命令
JP2018500659A (ja) 高速ベクトルによる動的なメモリ競合検出
JP2018500629A (ja) 3d座標から3dのz曲線インデックスを計算するための機械レベル命令
CN112579160A (zh) 用于具有减少的硬件要求的存储配对的装置和方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
A107 Divisional application of patent