KR102556033B1 - 패킹된 데이터 정렬 플러스 계산 명령어, 프로세서, 방법, 및 시스템 - Google Patents

패킹된 데이터 정렬 플러스 계산 명령어, 프로세서, 방법, 및 시스템 Download PDF

Info

Publication number
KR102556033B1
KR102556033B1 KR1020177031706A KR20177031706A KR102556033B1 KR 102556033 B1 KR102556033 B1 KR 102556033B1 KR 1020177031706 A KR1020177031706 A KR 1020177031706A KR 20177031706 A KR20177031706 A KR 20177031706A KR 102556033 B1 KR102556033 B1 KR 102556033B1
Authority
KR
South Korea
Prior art keywords
data
data element
operands
offset
instruction
Prior art date
Application number
KR1020177031706A
Other languages
English (en)
Other versions
KR20180014690A (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 인텔 코포레이션
Priority to KR1020237023610A priority Critical patent/KR102592056B1/ko
Publication of KR20180014690A publication Critical patent/KR20180014690A/ko
Application granted granted Critical
Publication of KR102556033B1 publication Critical patent/KR102556033B1/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
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/24Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format

Landscapes

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

Abstract

프로세서는 패킹된 데이터 정렬 플러스 계산 명령어를 디코딩하는 디코드 유닛을 포함한다. 상기 명령어는 제1 데이터 요소들을 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트, 제2 데이터 요소들을 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트, 적어도 하나의 데이터 요소 오프셋을 지시하는 것이다. 실행 유닛은, 상기 명령어에 응답하여, 소스 패킹된 데이터 피연산자들의 상기 제1 세트의 데이터 요소와 소스 패킹된 데이터 피연산자들의 상기 제2 세트의 데이터 요소의 쌍에 대해 수행된 연산의 값을 각각 갖는 결과 데이터 요소들을 포함하는 것인 결과 패킹된 데이터 피연산자를 저장하는 것이다. 상기 실행 유닛은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 중 적어도 대응하는 하나의 세트에 상기 적어도 하나의 데이터 요소 오프셋을 적용하는 것이다. 상기 적어도 하나의 데이터 요소 오프셋은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 내의 각 쌍의 데이터 요소들 간의 대응의 임의의 결여를 해소(counteract)하는 것이다.

Description

패킹된 데이터 정렬 플러스 계산 명령어, 프로세서, 방법, 및 시스템
본 명세서에 설명된 실시예들은 일반적으로 프로세서에 관한 것이다. 특히, 본 명세서에 설명된 실시예는 일반적으로 단일 명령어, 다중 데이터(Single Instruction, Multiple Data, SIMD) 아키텍처를 갖는 프로세서에 관한 것이다.
많은 프로세서들은 단일 명령어, 다중 데이터(SIMD) 아키텍처를 갖는다. SIMD 아키텍처에서는, 다수의 데이터 요소가 패킹된 데이터 또는 SIMD 데이터로서 하나의 레지스터 또는 메모리 위치에 패킹될 수 있다. 패킹된 또는 SIMD 데이터에서, 레지스터 또는 메모리 위치의 비트들은 논리적으로 데이터 요소들의 시퀀스로 분할될 수 있다. 예를 들어, 128 비트 폭의 패킹된 데이터 레지스터는 2개의 64 비트 데이터 요소, 4개의 32 비트 데이터 요소, 8개의 16 비트 데이터 요소, 또는 16개의 8 비트 데이터 요소를 가질 수 있다. 패킹된 데이터 또는 SIMD 명령어는 패킹된 또는 SIMD 데이터의 다수의 데이터 요소, 또는 대응하는 데이터 요소들의 다수의 쌍에 대해 동시에 그리고 병렬로 연산하기 위해 사용될 수 있다. 프로세서는 패킹된 또는 SIMD 데이터에 대해 동시에 그리고 병렬로 연산하도록 패킹된 데이터 또는 SIMD 명령어에 응답하는 병렬 또는 SIMD 실행 로직(예를 들어, 하나 이상의 SIMD 실행 유닛)을 가질 수 있다.
본 발명은 본 발명의 실시예들을 예시하기 위해 이용되는 이하의 상세한 설명 및 첨부 도면들을 참조함으로써 최상으로 이해될 수 있다. 도면들 중:
도 1은 패킹된 데이터 정렬 플러스 계산 명령어의 실시예를 수행하도록 동작하는 프로세서의 실시예의 블록도이다.
도 2는 패킹된 데이터 정렬 플러스 계산 명령어의 실시예를 수행하는 방법의 실시예의 블록 흐름도이다.
도 3은 패킹된 데이터 정렬 플러스 계산 연산의 제1 실시예를 나타내는 블록도이다.
도 4는 패킹된 데이터 정렬 플러스 계산 연산의 실시예를 수행하도록 동작하는 실행 유닛의 예시적인 실시예의 블록도이다.
도 5는 패킹된 데이터 정렬 플러스 계산 연산의 제2 실시예를 나타내는 블록도이다.
도 6은 패킹된 데이터 정렬 플러스 계산 연산의 제3 실시예를 나타내는 블록도이다.
도 7은 본 발명의 실시예들을 구현하기에 적합한 프로세서의 상세한 예시적인 실시예의 블록도이다.
도 8a는 순차적 파이프라인의 실시예 및 레지스터 리네이밍 비순차적 발행/실행 파이프라인의 실시예를 나타내는 블록도이다.
도 8b는 실행 엔진에 결합된 프런트 엔드 유닛을 포함하고 양자 모두가 메모리 유닛에 결합된 프로세서 코어의 실시예의 블록도이다.
도 9a는 단일 프로세서 코어와 함께, 온-다이 인터커넥트 네트워크와의 그것의 연결, 및 레벨 2(L2) 캐시의 그것의 로컬 서브세트를 갖는 실시예의 블록도이다.
도 9b는 도 9a의 프로세서 코어의 일부의 확대도의 실시예의 블록도이다.
도 10은 2개 이상의 코어를 가질 수 있고, 통합 메모리 제어기를 가질 수 있고, 통합 그래픽을 가질 수 있는 프로세서의 실시예의 블록도이다.
도 11은 컴퓨터 아키텍처의 제1 실시예의 블록도이다.
도 12는 컴퓨터 아키텍처의 제2 실시예의 블록도이다.
도 13은 컴퓨터 아키텍처의 제3 실시예의 블록도이다.
도 14는 컴퓨터 아키텍처의 제4 실시예의 블록도이다.
도 15는 본 발명의 실시예들에 따른, 소스 명령어 세트에서의 바이너리 명령어들을 타깃 명령어 세트에서의 바이너리 명령어들로 변환하기 위한 소프트웨어 명령어 변환기의 사용에 대한 블록도이다.
본 명세서에서는 패킹된 데이터 정렬 플러스 계산 명령어들, 명령어들을 실행하기 위한 프로세서들, 명령어들을 처리하거나 실행할 때 프로세서들에 의해 수행되는 방법들, 및 명령어들을 처리 또는 실행하기 위한 하나 이상의 프로세서를 포함하는 시스템들이 개시된다. 이하의 설명에서는, 수많은 특정 상세 사항들이 제시된다(예를 들어, 특정 명령어 연산들, 데이터 포맷들, 프로세서 구성들, 마이크로아키텍처의 상세 사항들, 동작들의 시퀀스들 등). 그러나, 실시예들은 이러한 특정 상세 사항들 없이도 실시될 수 있다. 다른 경우들에서, 본 설명의 이해를 불명료하게 하는 것을 회피하기 위해서 잘 알려진 회로들, 구조들 및 기술들은 상세하게 도시되지 않았다.
일부 실시예들에서, 패킹된 데이터 정렬 플러스 계산 명령어들은 SIMD 아키텍처를 갖는 프로세서에서 수행될 수 있다. SIMD 아키텍처에서, 병렬 또는 SIMD 실행 로직(예를 들어, 하나 이상의 SIMD 실행 유닛)은 일반적으로 서로에 대해 특정 데이터 요소 정렬을 갖는 패킹된 또는 SIMD 데이터의 데이터 요소들에 대해 연산을 수행하도록 설계된다. 예로서, SIMD 가산기 유닛은 제1 및 제2 소스 패킹된 데이터에서, 동일한 상대적 데이터 요소 위치들에 있는 대응하는 데이터 요소들을 가산하도록 설계될 수 있다. 유사하게, 다양한 다른 유형의 SIMD 실행 유닛들(예를 들어, SIMD 곱셈 유닛들, SIMD 비교 유닛들, SIMD 시프트 유닛들 등)은 제1 및 제2 소스 패킹된 데이터에서, 동일한 상대적 데이터 요소 위치들에 있는 대응하는 데이터 요소들에 대해 연산하도록 설계될 수 있다. 대응하는 데이터 요소들에 대한 이러한 연산들은 종종 “수직” SIMD 연산들로 지칭된다.
다른 SIMD 실행 유닛들은 대응하는 데이터 요소들에 대해 연산하는 것 및/또는 “수직” SIMD 연산들만을 수행하는 것으로 제한되지 않는다. 오히려, 일부 SIMD 실행 유닛들은 대응하지 않는 데이터 요소들에 대해 연산할 수 있다. 일례로서, 복소수 곱하기 명령어를 수행하는 실행 유닛은 대응하는 데이터 요소들 및 대응하지 않는 데이터 요소들(예를 들어, 대각선 데이터 요소들) 양자 모두를 곱하고, 그 곱하기들의 곱들을 결합하도록 동작할 수 있다. 그러나, SIMD 실행 유닛들은 전형적으로 특정한 고정되고 유연성 없는 상대적 데이터 요소 정렬을 갖는 소스 패킹된 데이터의 데이터 요소들에 대해 연산하도록 설계된다. 본 명세서에 개시된 패킹된 데이터 정렬 플러스 계산 명령어들이 없이, 특정한 고정되고 유연성 없는 상대적 데이터 요소 정렬을 이미 나타내지 않는 데이터 요소들에 대해 연산하는 것을 원한다면, SIMD 실행 유닛이 원하는 데이터 요소들에 대해 연산할 수 있기 전에 하나 이상의 패킹된 데이터 정렬 연산이 전형적으로 수행될 필요가 있다. 예를 들어, 제1 소스 패킹된 데이터 피연산자에 대해 연산을 수행하기 위해 또 다른 명령어가 수행되기 전에, 제1 소스 패킹된 데이터 피연산자의 데이터 요소들을 이동 또는 정렬하기 위해 제1 소스 패킹된 데이터 피연산자에 대해 초기 시프트, 회전, 시프트-병합, 또는 다른 패킹된 데이터 정렬 명령어가 수행될 수 있다.
그러나, 하나 이상의 별개의 패킹된 데이터 정렬 명령어를 수행할 필요성은 하나 이상의 단점을 갖는 경향이 있을 수 있다. 하나의 가능한 단점은 하나 이상의 패킹된 데이터 정렬 명령어(들)는 수행되는 데 추가 시간(예를 들어, 하나 이상의 클록 사이클)이 필요한 경향이 있을 수 있고 추가 리소스들(예를 들어, 페치 유닛, 디코더, 실행 유닛 등)을 사용하는 경향이 있고 따라서 전력 소모를 증가시킬 수 있는 별개의 명령어(들)라는 점이다. 또 다른 가능한 단점은 패킹된 데이터 정렬 명령어(들)는 전형적으로 그 결과들을 아키텍처 레지스터(들)(예를 들어, 패킹된 데이터 레지스터들)에 다시 저장하고, 그로 인해 그 레지스터들을 다른 데이터를 저장하는 데 이용할 수 없게 만들 수도 있다는 점이다. 유리하게도, 본 명세서에 개시된 패킹된 데이터 정렬 플러스 계산 명령어들은 동일한 단일 명령어의 수행의 범위 내에서, 패킹된 데이터 정렬 연산과 계산 연산 양자 모두를 결합할 수 있다. 이는 별개의 패킹된 데이터 정렬 및 계산 명령어들을 수행할 필요를 피하는 데 도움이 되고, 그로 인해 일반적으로 성능을 높이고, 아키텍처 레지스터들의 가용성을 높이는 등등에 도움이 될 수 있다.
도 1은 패킹된 데이터 정렬 플러스 계산 명령어(102)의 실시예를 수행하도록 동작하는 프로세서(100)의 실시예의 블록도이다. 일부 실시예들에서, 프로세서는 범용 프로세서(예를 들어, 데스크톱, 랩톱 또는 다른 컴퓨터들에서 이용되는 유형의 범용 마이크로프로세서 또는 중앙 처리 유닛(CPU))일 수 있다. 대안적으로, 프로세서는 특수 목적 프로세서일 수 있다. 적합한 특수 목적 프로세서의 예로는 디지털 신호 프로세서(DSP), 이미지 프로세서, 그래픽 프로세서, 네트워크 프로세서, 통신 프로세서, 암호화 프로세서, 코프로세서, 임베디드 프로세서, 및 컨트롤러(예를 들어, 마이크로컨트롤러)를 포함하지만, 이에 한정되지는 않는다. 프로세서는 다양한 CISC(complex instruction set computing) 아키텍처들, RISC(reduced instruction set computing) 아키텍처들, VLIW(very long instruction word) 아키텍처들, 하이브리드 아키텍처들, 다른 유형의 아키텍처들 중 임의의 것을 갖거나, 이러한 아키텍처들의 조합을 가질 수 있다(예를 들어, 상이한 코어들이 상이한 아키텍처들을 가질 수 있다). 하나의 특정 실시예에서, 프로세서는 이미지 프로세서 유닛으로서 사용되는 DSP일 수 있지만, 본 발명의 범위는 이에 한정되지 않는다.
동작 동안, 프로세서(100)는 패킹된 데이터 정렬 플러스 계산 명령어(102)를 수신할 수 있다. 예를 들어, 이 명령어는 버스 또는 다른 인터커넥트를 통해 메모리로부터 수신될 수 있다. 이 명령어는 매크로 명령어, 어셈블리 언어 명령어, 머신 코드 명령어, 또는 프로세서의 명령어 세트의 다른 명령어 또는 제어 신호를 나타낼 수 있다. 일부 실시예들에서, 패킹된 데이터 정렬 플러스 계산 명령어는 제1 복수의 데이터 요소(예를 들어, 도시된 예에서 데이터 요소들 A1 내지 A4로서 표시됨)를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트(112)를 명시적으로 특정하거나(예를 들어, 하나 이상의 필드 또는 비트들의 세트를 통해), 달리 지시(예를 들어, 암시적으로 지시)할 수 있고, 제2 복수의 데이터 요소(예를 들어, 도시된 예에서 데이터 요소들 B1 내지 B8로서 표시됨)를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트를 명시적으로 특정하거나, 달리 지시할 수 있고, 결과 패킹된 데이터 피연산자(120)가 저장되는 목적지 저장 위치(118)를 명시적으로 특정하거나 달리 지시할 수 있다. 일례로서, 명령어는 피연산자들에 대한 레지스터들, 메모리 위치들, 또는 다른 저장 위치들을 명시적으로 특정하기 위한 소스 및/또는 목적지 피연산자 특정 필드들을 가질 수 있다. 대안적으로, 이 피연산자들 중 하나 이상은 옵션으로 명시적으로 표현되지는 않지만 명령어에 의해 암시적이거나 암시될 수 있다(예를 들어, 명령어의 opcode에 암시적이거나 암시됨). 예를 들어, 프로세서는 특정한 고정 레지스터 또는 다른 저장 위치가 이 피연산자들 중 하나에 대해 사용되는 것을 opcode에 기초하여 이해할 수 있다. 일 양태에서, 소스 피연산자들의 데이터는 입력/출력 디바이스(예를 들어, 네트워크 인터페이스, 디지털 이미지 취득 디바이스, 비디오 입력 디바이스, 무선 인터페이스, 오디오 입력 디바이스 등)로부터 수신되었을 수 있지만, 이것이 필수는 아니다.
도시된 바와 같이, 일부 실시예들에서, 패킹된 데이터 정렬 플러스 계산 명령어는 또한 적어도 하나의 데이터 요소 오프셋(122)을 명시적으로 특정하거나 달리 지시할 수 있다. 이하에서 더 설명되는 바와 같이, 적어도 하나의 데이터 요소 오프셋은 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들에서 소스 패킹된 데이터 피연산자들을 정렬하기 위해 패킹된 데이터 정렬 연산을 수행하는 데 사용될 수 있다. 적어도 하나의 데이터 요소 오프셋은 상이한 실시예들에서 다양한 상이한 유형의 오프셋들을 나타낼 수 있다. 적합한 오프셋의 예로는, 몇 가지 예만을 거론하자면, 데이터 요소의 수의 특정 또는 지시, (예를 들어, 데이터 요소 크기 증분들로) 비트의 수의 특정 또는 지시, (예를 들어, 데이터 요소 크기 증분들로) 미리 결정된 수의 데이터 요소들 중 하나의 선택, (예를 들어, 데이터 요소 크기 증분들로) 데이터 요소들 또는 비트들에서의 특정 또는 지시된 회전 량, 및 (예를 들어, 데이터 요소 크기 증분들로) 데이터 요소들 또는 비트들에서의 특정 또는 지시된 시프트 량을 포함하지만, 이에 한정되지는 않는다. 도시된 바와 같이, 일부 실시예들에서, 적어도 하나의 데이터 요소 오프셋은 옵션으로 범용 레지스터 또는 다른 스칼라 레지스터(124)에 저장될 수 있다. 대안적으로, 명령어의 즉치를 옵션으로 사용하여 적어도 하나의 데이터 요소 오프셋을 제공하거나, 이러한 접근 방식들의 조합을 옵션으로 사용할 수 있다. 유리하게도, 그러한 실시예들은 명령어가 유연성 있는 또는 가변적인 오프셋을 지시할 수 있게 한다(예를 들어, 일 양태에서 오프셋은 -4, -3, -2, -1, 0, 1, 2, 3 또는 4 데이터 요소 오프셋 위치들 중 중 어느 하나일 수 있고, 여기서 음의 정수들(예를 들어, -2)은 한 방향의 오프셋을 지시하기 위해 사용되고 음이 아닌 정수들(예를 들어, 2)은 반대 방향의 오프셋을 지시하기 위해 사용된다. 또 다른 실시예들에서, 고정된 오프셋은 명령어의 비-opcode 필드를 통해 유연성 있게 또는 가변적으로 지시되기보다는, 옵션으로 명령어(예를 들어, 그의 opcode)에 암시적일 수 있다.
다시 도 1을 참조하면, 프로세서는 디코드 유닛 또는 디코더(104)를 포함한다. 디코드 유닛은 패킹된 데이터 정렬 플러스 계산 명령어를 수신하고 디코딩할 수 있다. 디코드 유닛은 비교적 상위 레벨의 패킹된 데이터 정렬 플러스 계산 명령어를 반영하고, 나타내고, 그리고/또는 그로부터 도출되는, 하나 이상의 비교적 하위 레벨의 명령어 또는 제어 신호(예를 들어, 하나 이상의 마이크로 명령어, 마이크로 연산, 마이크로코드 엔트리 포인트, 디코딩된 명령어 또는 제어 신호 등)을 출력할 수 있다. 일부 실시예들에서, 디코드 유닛은, 패킹된 데이터 정렬 플러스 계산 명령어를 수신하는 하나 이상의 입력 구조(예를 들어, 포트(들), 인터커넥트(들), 인터페이스), 그와 결합되어 패킹된 데이터 정렬 플러스 계산 명령어를 인식하고 디코딩하는 명령어 인식 및 디코드 로직, 및 그와 결합되어 하위 레벨 명령어(들) 또는 제어 신호(들)를 출력하는 하나 이상의 출력 구조(예를 들어, 포트(들), 인터커넥트(들), 인터페이스)를 포함할 수 있다. 디코드 유닛은 마이크로코드 판독 전용 메모리(ROM), 탐색표, 하드웨어 구현, 프로그래밍 가능 로직 어레이(PLA), 및 디코드 유닛들을 구현하기에 적합한 다른 메커니즘들을 포함하지만 이에 한정되지는 않는 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다.
일부 실시예들에서, 패킹된 데이터 정렬 플러스 계산 명령어가 디코드 유닛에 직접 제공되는 대신, 명령어 에뮬레이터, 변환기, 모퍼(morpher), 인터프리터, 또는 다른 명령어 변환 모듈이 옵션으로 사용될 수 있다. 다양한 유형의 명령어 변환 모듈들이 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 일부 실시예들에서, 명령어 변환 모듈은 프로세서의 외부에, 예를 들어, 별개의 다이상에 및/또는 메모리에 (예를 들어, 정적, 동적 또는 런타임 에뮬레이션 모듈로서) 위치할 수 있다. 예로서, 명령어 변환 모듈은 제1 명령어 세트일 수 있는 패킹된 데이터 정렬 플러스 계산 명령어를 수신할 수 있고, 패킹된 데이터 정렬 플러스 계산 명령어를 제2의 상이한 명령어 세트일 수 있는 하나 이상의 대응하는 중간 명령어 또는 제어 신호로 에뮬레이션, 변환, 모핑, 해석, 또는 달리 변환할 수 있다. 제2 명령어 세트의 하나 이상의 중간 명령어 또는 제어 신호는 디코드 유닛(예를 들어, 디코드 유닛(104))에 제공될 수 있으며, 디코드 유닛은 그것들을 프로세서의 네이티브 하드웨어(예를 들어, 하나 이상의 실행 유닛)에 의해 실행 가능한 하나 이상의 로우 레벨 명령어 또는 제어 신호로 디코딩할 수 있다.
도 1을 다시 참조하면, 프로세서(100)는 또한 패킹된 데이터 레지스터들(108)의 세트를 포함한다. 패킹된 데이터 레지스터들 각각은 패킹된 데이터 또는 SIMD 데이터를 저장하도록 동작하는 온-다이 저장 위치를 나타낼 수 있다. 패킹된 또는 SIMD 데이터는 요소들이 버스 또는 다른 인터커넥트를 통해 함께 수신될 수 있고, 패킹된 또는 SIMD 데이터로서 레지스터에 함께 저장될 수 있는 "공간적" SIMD를 나타낼 수 있고, 데이터 요소들 간의 캐리 체인 등에 브레이크들이 있을 수 있다. 패킹된 데이터 레지스터들은 소프트웨어 및/또는 프로그래머에게 가시적인 아키텍처적으로 가시적인 또는 아키텍처 레지스터들을 나타낼 수 있고/있거나 피연산자들을 식별하기 위해 프로세서의 명령어 세트의 명령어들에 의해 지시된 레지스터들이다. 이 아키텍처 레지스터들은 주어진 마이크로아키텍처에서의 다른 비-아키텍처 레지스터들(예를 들어, 임시 레지스터들, 재순서화 버퍼들(reorder buffers), 리타이어먼트 레지스터들(retirement registers) 등)과 대조된다. 패킹된 데이터 레지스터들은 상이한 마이크로아키텍처들에서 상이한 방식들로 구현될 수 있으며, 임의의 특정 유형의 설계로 한정되지는 않는다. 적합한 유형의 레지스터들의 예로는 전용 물리적 레지스터들, 레지스터 리네이밍을 사용하는 동적으로 할당된 물리적 레지스터들, 및 이들의 조합들을 포함하지만, 이에 한정되지는 않는다.
일부 실시예들에서, 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트(112)는 옵션으로 하나 이상의 패킹된 데이터 레지스터의 제1 세트(110)에 저장될 수 있다(예를 들어, 단일 레지스터가 단일 피연산자를 저장하는 데 사용될 수 있거나 또는 상이한 패킹된 데이터 레지스터가 2개의 상이한 피연산자 각각을 저장하는 데 사용될 수 있음), 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트(116)는 옵션으로 하나 이상의 패킹된 데이터 레지스터의 제2 세트(114)에 저장될 수 있다(예를 들어, 단일 레지스터가 단일 피연산자를 저장하는 데 사용될 수 있거나 또는 상이한 패킹된 데이터 레지스터가 2개의 상이한 피연산자 각각을 저장하는 데 사용될 수 있음). 일부 실시예들에서, 목적지 저장 위치(118)는 옵션으로 제3 패킹된 데이터 레지스터일 수 있다. 대안적으로, 이 피연산자들 중 하나 이상을 위해 메모리 위치들 또는 다른 저장 위치들이 옵션으로 사용될 수 있다. 또한, 일부 실시예들에서, 소스 패킹된 데이터 피연산자들 중 하나에 사용되는 소스/목적지 패킹된 데이터 레지스터는 옵션으로 결과 패킹된 데이터 피연산자의 저장을 위한 목적지 저장 위치로서 재사용될 수 있다. 예를 들어, 명령어는 소스/목적지 레지스터를 특정할 수 있고 프로세서는 소스/목적지 레지스터가 초기에는 소스 피연산자를 검색하기 위해 사용되고 그 후 결과 피연산자가 소스 피연산자를 덮어쓰면서 소스/목적지 레지스터에 저장된다는 것을 암시적으로 또는 암암리에 이해할 수 있다. 또한, 일부 실시예들에서, 명령어는 하나 이상의 소스 패킹된 데이터 피연산자의 하나의 세트만을 지시할 수 있다(예를 들어, 세트(116)는 아니고 세트(112)).
도 1을 다시 참조하면, 실행 유닛(106)은 디코드 유닛(104)과 결합된다. 실행 유닛은 패킹된 데이터 정렬 플러스 계산 명령어를 나타내는 및/또는 그로부터 도출되는 하나 이상의 디코딩된 또는 달리 변환된 명령어 또는 제어 신호를 수신할 수 있다. 실행 유닛은 또한, 예를 들어, 패킹된 데이터 레지스터들(108)과 결합됨으로써 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들(112, 116)과 결합된다. 실행 유닛은 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들을 수신할 수 있다. 실행 유닛은 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여 그리고/또는 그의 결과로서(예를 들어, 그로부터 디코딩된 하나 이상의 명령어 또는 제어 신호에 응답하여) 결과 패킹된 데이터 피연산자(120)를 명령어에 의해 지시된 목적지 저장 위치(118)에 저장하도록 동작한다.
일부 실시예들에서, 결과 패킹된 데이터 피연산자는 복수의 결과 데이터 요소(예를 들어, 도시된 예에서 데이터 요소들 R1 내지 R4로 표시됨)를 포함할 수 있다. 일부 실시예들에서, 결과 데이터 요소들 각각은 소스 패킹된 데이터 피연산자들의 제1 세트(112) 내의 데이터 요소와 소스 패킹된 데이터 피연산자들의 제2 세트(116) 내의 데이터 요소의 쌍에 대해 수행된 연산의 값을 가질 수 있다. 예를 들어, 도시된 예시적인 실시예에 도시된 바와 같이, R1은 소스 패킹된 데이터 피연산자들의 제1 세트 내의 데이터 요소 A1과 소스 패킹된 데이터 피연산자들의 제2 세트 내의 대응하지 않는 데이터 요소 B4의 쌍에 대해 수행된 연산(OP)의 값을 가질 수 있다. 마찬가지로, R2는 A2와 B5에 대해 수행된 연산(OP)의 값을 가질 수 있고, R3은 A3과 B6에 대해 수행된 연산(OP)의 값을 가질 수 있고, R4는 A4와 B7에 대해 수행된 연산(OP)의 값을 가질 수 있다. 이는 피연산자(들)(116)에 적용된 3 데이터 요소 위치의 예시적인 오프셋에 대한 하나의 예시적인 예에 불과하다.
일부 실시예들에서, 예를 들어, 적어도 하나의 데이터 요소 오프셋이 집합적으로 또는 누적적으로 적어도 하나의 0이 아닌 데이터 요소 오프셋에 달하는 경우, 각 쌍 내의 데이터 요소들은 소스 피연산자들 내의 대응하지 않는 데이터 요소들일 수 있다. 예를 들어, A1과 B4는 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들 내의 대응하지 않는 데이터 요소 위치들에 있다(즉, 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들에서 A1은 B4가 아니라 B1과 대응하는 데이터 요소 위치에 있다). 마찬가지로, A2와 B5, A3과 B6, 및 A4와 B7은 각각 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들 내의 대응하지 않는 데이터 요소 위치들에 있다.
실행 유닛은 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들 중 적어도 대응하는 하나의 세트에 적어도 하나의 데이터 요소 오프셋을 적용할 수 있고, 적어도 하나의 데이터 요소 오프셋은 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들 내의 각 쌍의 데이터 요소들 간의 대응의 임의의 결여를 무효화(negate)하거나, 제거(eliminate)하거나, 취소(cancel)하거나, 달리 해소(counteract)할 수 있다. 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들 중 적어도 하나에 적어도 하나의 데이터 요소 오프셋을 적용하는 것은 각 쌍의 데이터 요소들을 대응(예를 들어, 동일한 상대적 데이터 요소 위치들)으로 가져오거나 또는 이들이 실행 유닛 내의 중간 또는 마이크로 아키텍처 레지스터들 또는 회로에서 정렬시킬 수 있다. 일부 실시예들에서, 대응하지 않는 데이터 요소 위치들은 패킹된 데이터 정렬 플러스 계산 명령어에 의해 지시된 적어도 하나의 데이터 요소 오프셋에 기초하여 다를 수 있다. 단일의 0이 아닌 오프셋의 경우, 대응하지 않는 데이터 요소들은 0이 아닌 오프셋만큼 다를 수 있다. 예를 들어, 도시된 예시적인 실시예에서, 대응하지 않는 데이터 요소 위치들은 3 데이터 요소 위치들만큼 다르다. 예를 들어, B4는 A1와 대응하는 데이터 요소 위치에 있도록 예시에서 왼쪽으로(구현에 따라서는 최하위 또는 최상위 비트 위치를 향할 수 있음) 3 데이터 요소 위치를 회전, 시프트, 또는 달리 이동 또는 오프셋될 수 있다. 일부 실시예들에서, (이 특정 예에서의) 이 3 데이터 요소 위치 차이는 3 데이터 요소 위치들의 단일 데이터 요소 오프셋과 동일할 수 있다. 다른 실시예들에서, 2개의 오프셋의 경우에, 대응하지 않는 데이터 요소들은 2개의 오프셋의 조합 또는 2개의 오프셋의 적용에 의해 또는 그에 기초하여 다를 수 있다. 예를 들어, (이 특정 예에서의) 도시된 3 데이터 요소 위치 차이는 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트에 적용되는 것인 제1 데이터 요소 오프셋과 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트에 적용되는 것인 제2 데이터 요소 오프셋 간의 차이와 동일할 수 있다. 예로서, 예시에서, A1은 이동되지 않은 것으로 도시되어 있는데, 이는 패킹된 데이터 피연산자들의 제1 세트에 0 데이터 요소 오프셋이 적용되고 패킹된 데이터 피연산자들의 제2 세트에 3 데이터 요소 오프셋이 적용되는 것으로 수행될 수 있다. 다른 실시예들에서, 대응하지 않는 데이터 요소 위치들은 양의 또는 음의 데이터 요소 오프셋들 사이의 다른 차이들, 예를 들어, 마이너스 4와 4 데이터 요소 위치들 사이의 차이(즉, -4, -3, -2, -1, 0, 1, 2, 3, 4), 마이너스 2와 2 데이터 요소 위치들 사이의 차이(예를 들어, -2, -1, 0, 1, 2), 0과 4 데이터 요소 위치들 사이의 차이(즉, 0, 1, 2, 3, 4), 0과 2 데이터 요소 위치들 사이의 차이(즉, 0, 1, 2), 0과 1 데이터 요소 위치들 사이의 차이, 마이너스 6과 6 데이터 요소 위치들 사이의 차이, 0과 6 데이터 요소 위치들 사이의 차이 등에 기초하여 다를 수 있다.
도시된 실시예에서, 소스 및 결과 피연산자들의 특정 예가 도시되고 설명되었지만, 본 발명의 범위는 그렇게 한정되지 않는다. 도시된 실시예에서, 소스 패킹된 데이터 피연산자들의 제1 세트는 옵션으로 적어도 4개의 데이터 요소를 가지며, 소스 패킹된 데이터 피연산자들의 제2 세트는 옵션으로 8개의 데이터 요소를 가지며, 결과 패킹된 데이터 피연산자는 옵션으로 4개의 데이터 요소를 갖지만, 다른 실시예들에서는 이 피연산자들에 더 적은 또는 더 많은 데이터 요소가 옵션으로 사용될 수 있다. 하나의 다른 예시적인 예로서, 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들 각각은 옵션으로 64개의 데이터 요소를 가질 수 있고, 결과 패킹된 데이터 피연산자는 옵션으로 절반만큼의 또는 32개의 데이터 요소를 가질 수 있다. 다른 실시예들에서는, 본 명세서에 개시된 것과 다른 수의 데이터 요소들도 적합하다. 또한, 설명을 용이하게 하기 위해, 결과 데이터 요소들은 소스 데이터 요소들보다 물리적으로 더 크지만, 결과 데이터 요소들은 소스 데이터 요소들과 동일한 또는 상이한 수의 비트를 가질 수 있다. 또한, 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들의 데이터 요소들은 동일한 또는 상이한 수의 비트를 가질 수 있다. 일부 실시예들에서, 결과 패킹된 데이터 피연산자는 도 3 내지 도 6 중 임의의 것에 대해 도시되고 설명된 것들(그 변형들 및 그의 대안적인 실시예들을 포함함) 중 임의의 것일 수 있다.
실행 유닛 및/또는 프로세서는 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여 및/또는 그의 결과로서(예를 들어, 패킹된 데이터 정렬 플러스 계산 명령어로부터 디코딩된 하나 이상의 명령어 또는 제어 신호에 응답하여) 패킹된 데이터 정렬 플러스 계산 명령어를 수행하고/하거나 결과를 저장하도록 동작하는 특수 또는 특정 로직(예를 들어, 트랜지스터, 집적 회로, 또는 잠재적으로 펌웨어(예를 들어, 비휘발성 메모리에 저장된 명령어들) 및/또는 소프트웨어와 결합된 다른 하드웨어)을 포함할 수 있다. 일부 실시예들에서, 실행 유닛은 소스 피연산자들을 수신하는 하나 이상의 입력 구조(예를 들어, 포트(들), 인터커넥트(들), 인터페이스), 소스 피연산자들에 대해 산술 연산을 수행하는 패킹된 데이터 정렬 회로 또는 로직(예를 들어, 시프트 또는 회전 회로 또는 로직), 그와 결합되어 정렬된 중간 피연산자들에 대해 산술 및 논리 연산을 수행하고 결과 피연산자를 생성하는 산술 또는 논리 연산 회로, 및 그와 결합되어 결과 피연산자를 출력하는 하나 이상의 출력 구조(예를 들어, 포트(들), 인터커넥트(들), 인터페이스)를 포함할 수 있다. 일부 실시예들에서, 실행 유닛은 도 4에 대해 도시되고 설명된 회로 또는 로직, 또는 그의 변형들 또는 대안들을 포함할 수 있으며, 이들은 적합한 마이크로 아키텍처 배열들의 예시적인 예들이지만, 본 발명의 범위는 그렇게 한정되지 않는다. 일부 실시예들에서, 실행 유닛은 디지털 신호 프로세서의 이미지 프로세서 유닛에 포함되고 이미지들의 픽셀들을 처리하는 데 사용될 수 있지만, 본 발명의 범위가 그렇게 한정되지 않는다.
본 설명을 불명료하게 하는 것을 방지하기 위해서, 비교적 단순한 프로세서(100)가 도시되었고 설명되었다. 그러나, 프로세서는 옵션으로 다른 프로세서 컴포넌트들을 포함할 수 있다. 예를 들어, 다양한 상이한 실시예들은 도 7 및/또는 도 8 내지 도 10 중 임의의 것에 대해 도시되고 설명된 컴포넌트들의 다양한 상이한 조합들 및 구성들을 포함할 수 있다. 프로세서의 컴포넌트들 모두는 그들이 의도된 대로 동작할 수 있도록 함께 결합될 수 있다.
도 2는 패킹된 데이터 정렬 플러스 계산 명령어의 실시예를 수행하는 방법(230)의 실시예의 블록 흐름도이다. 다양한 실시예들에서, 이 방법은 프로세서, 명령어 처리 장치, 또는 다른 디지털 로직 디바이스에 의해 수행될 수 있다. 일부 실시예들에서, 도 2의 방법은 도 1의 프로세서에 의해 및/또는 그 내부에서 수행될 수 있다. 도 1의 프로세서에 대해 본 명세서에 설명된 컴포넌트들, 특징들 및 특정의 옵션의 세부 사항들은 도 2의 방법에도 옵션으로 적용된다. 대안적으로, 도 2의 방법은 상이한 프로세서 또는 장치에 의해 및/또는 그 내부에서 수행될 수 있다. 또한, 도 1의 프로세서는 도 2의 방법들과 상이한 방법들을 수행할 수도 있다.
이 방법은 블록 231에서, 패킹된 데이터 정렬 플러스 계산 명령어를 수신하는 단계를 포함한다. 다양한 양태들에서, 명령어는 프로세서 또는 그 일부(예를 들어, 명령어 페치 유닛, 디코드 유닛, 버스 인터페이스 유닛 등)에서 수신될 수 있다. 다양한 양태들에서, 명령어는 오프-프로세서 및/또는 오프-다이 소스로부터(예를 들어, 메모리, 인터커넥트 등으로부터) 또는 온-프로세서 및/또는 온-다이 소스로부터(예를 들어, 명령어 캐시, 명령어 큐 등으로부터) 수신될 수 있다. 패킹된 데이터 정렬 플러스 계산 명령어는 제1 복수의 데이터 요소를 포함하는 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트를 특정하거나 달리 지시할 수 있고, 제2 복수의 데이터 요소를 포함하는 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트를 특정하거나 달리 지시할 수 있고, 적어도 하나의 데이터 요소 오프셋을 특정하거나 달리 지시할 수 있고, 목적지 저장 위치를 특정하거나 달리 지시할 수 있다.
블록 232에서는, 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여 그리고/또는 그의 결과로서, 결과 패킹된 데이터 피연산자가 목적지 저장 위치에 저장될 수 있다. 결과 패킹된 데이터 피연산자는 복수의 결과 데이터 요소를 포함할 수 있다. 일부 실시예들에서, 결과 데이터 요소들 각각은 소스 패킹된 데이터 피연산자들의 제1 세트 내의 데이터 요소와 소스 패킹된 데이터 피연산자들의 제2 세트 내의 대응하지 않는 데이터 요소의 쌍에 대해 수행된 연산의 값을 가질 수 있다. 일부 실시예들에서, 각 쌍의 대응하지 않는 데이터 요소들은 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들 내의 대응하지 않는 데이터 요소 위치들에 있었다. 일부 실시예들에서, 대응하지 않는 데이터 요소 위치들은 패킹된 데이터 정렬 플러스 계산 명령어에 의해 지시된 적어도 하나의 데이터 요소 오프셋에 기초하여 달랐다. 일부 실시예들에서, 이 방법은 디지털 신호 프로세서를 이용하여 이미지 처리 동안 픽셀 필터링 동안 수행될 수 있지만, 본 발명의 범위는 그렇게 한정되지 않는다.
예시된 방법은 아키텍처 연산들(예를 들어, 소프트웨어 관점에서 가시적인 것들)을 수반한다. 다른 실시예들에서, 이 방법은 옵션으로 하나 이상의 마이크로아키텍처 연산을 포함할 수 있다. 예로서, 명령어는 페치되고, 디코딩되고, 비순차적으로 스케줄링될 수 있고, 소스 피연산자들이 액세스될 수 있고, 실행 유닛이 명령어를 구현하기 위해 마이크로 아키텍처 연산들을 수행할 수 있다(예를 들어, 적어도 하나의 오프셋에 기초하여 데이터 요소들을 시프트하거나, 회전하거나, 또는 달리 이동하거나, 등등).
도 3은 패킹된 데이터 정렬 플러스 계산 명령어(302)의 제1 실시예에 응답하여 수행될 수 있는 패킹된 데이터 정렬 플러스 계산 연산(348)의 제1 예시적인 실시예를 나타내는 블록도이다. 명령어는 연산 코드 또는 opcode(336)를 포함한다. opcode는 수행될 명령어 및/또는 연산(예를 들어, 패킹된 데이터 정렬 및 특정 유형의 계산 연산(예를 들어, 평균, 곱셈, 덧셈, 시프트 등))을 식별하도록 동작 가능한 복수의 비트 또는 하나 이상의 필드를 나타낼 수 있다.
명령어는 또한 제1 소스 패킹된 데이터 피연산자(312-1)를 특정하는 제1 소스 특정 필드(SRC1)(338), 및 제2 소스 패킹된 데이터 피연산자(312-2)를 특정하는 제2 소스 특정 필드(SRC2)(340)를 옵션으로 포함한다. 제1 및 제2 소스 패킹된 데이터 피연산자들은 소스 패킹된 데이터 피연산자들의 제1 세트를 나타낸다. 명령어는 또한 제3 소스 패킹된 데이터 피연산자(316-1)를 특정하는 제3 소스 특정 필드(SRC3)(342) 및 제4 소스 패킹된 데이터 피연산자(316-2)를 특정하는 제4 소스 특정 필드(SRC4)(344)를 옵션으로 포함한다. 제3 및 제4 소스 패킹된 데이터 피연산자들은 소스 패킹된 데이터 피연산자들의 제2 세트를 나타낸다. 명령어는 또한 결과 패킹된 데이터 피연산자(320)가 저장되는 목적지 저장 위치를 특정하는 목적지 특정 필드(DEST)(346)를 옵션으로 포함한다.
예로서, 소스 및 목적지 특정 필드들 각각은 관련된 피연산자를 저장하는 것인, 레지스터, 메모리 위치 또는 다른 저장 위치의 어드레스를 명시적으로 특정하는 비트들(종종 인접하지만 반드시 그런 것은 아님)을 포함할 수 있다. 대안적으로, 또 다른 실시예에서, 특정 필드들 중 임의의 것이 옵션으로 생략될 수 있고, 레지스터 또는 다른 저장 위치는 옵션으로 명령어에 암시적이거나 명령어에 의해 암시될 수 있다. 예를 들어, opcode를 디코딩할 때, 피연산자들 중 하나에 대해 고정 레지스터를 사용하는 것은 내재적이거나 이해될 수 있다(명시적으로 표현되지는 않지만). 또 다른 예로서, 목적지 특정 필드를 갖는 대신, 소스 특정 필드들 중 하나가 소스/목적지 레지스터를 특정하는 소스/목적지 특정 필드를 나타낼 수 있다. 소스 패킹된 데이터 피연산자가 초기에 소스/목적지 레지스터에 저장될 수 있으며, 그 후 초기 소스 패킹된 데이터 피연산자 위에 결과 패킹된 데이터 피연산자를 저장하기 위해 소스/목적지 레지스터를 재사용하는 것은 암시적이거나 내재적일 수 있다.
명령어는 또한 적어도 하나의 데이터 요소 오프셋을 나타낸다. 도시된 예시적인 실시예에서, 명령어는 소스 패킹된 데이터 피연산자들의 제1 세트(이 실시예에서는 피연산자들(312-1, 312-2))에 대응하는 것이고, 그에 적용되는 것인 제1 오프셋을 특정하거나 달리 지시하기 위한 제1 오프셋 특정 필드(322-1), 및 소스 패킹된 데이터 피연산자들의 제2 세트(이 실시예에서는 피연산자들(316-1, 316-2))에 대응하는 것이고, 그에 적용되는 것인 옵션의 제2 오프셋을 특정하거나 달리 지시하기 위한 옵션의 제2 오프셋 특정 필드(322-2)를 갖는다. 일부 실시예들에서, 이 오프셋 특정 필드들 각각의 비트들은 오프셋들의 값들이 저장되는 레지스터(예를 들어, 범용 레지스터 또는 다른 스칼라 레지스터) 또는 다른 저장 위치를 특정하거나 달리 지시할 수 있다. 다른 실시예들에서, 이 오프셋 특정 필드들 각각의 비트들은 오프셋의 값을 특정하거나, 오프셋의 값을 달리 인코딩하거나 지시할 수 있다(예를 들어, 다수의 미리 결정된 오프셋들 사이에서 선택하기 위한 값을 가질 수 있다). 일부 실시예들에서, 명령어의 즉치가 옵션으로 제1 및 옵션의 제2 오프셋들을 가질 수 있다. 접근법들의 조합도 적합하다.
도시된 예시적인 실시예에서, 제1 오프셋은 1 데이터 요소 위치의 오프셋을 지시하고, 제2 오프셋은 2 데이터 요소 위치들의 오프셋을 지시하지만, 이는 하나의 예시적인 예에 불과하다. 다른 실시예들에서, 제1 및 제2 오프셋들 각각은 -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 7 또는 8 데이터 요소 위치들 중 임의의 것일 수 있다. 더 적은 수 또는 더 많은 수의 데이터 요소 오프셋이 다른 실시예들에서 옵션으로 지원될 수 있다. 다른 실시예들에서, 명령어는 단일 오프셋을 제공하기 위해 단일 오프셋 특정 필드만을 가질 수 있다. 또한, 다른 실시예들에서, 하나 이상의 오프셋은 옵션으로 명령어(예를 들어, opcode)에 암시적이거나 내재적일 수 있고 유연성이 없거나 고정될 수 있다. 패킹된 데이터 정렬 플러스 계산 명령어들의 다른 실시예들은 옵션으로 설명된 필드들의 일부를 생략하고, 추가 필드들을 추가(예를 들어, 특정 유형의 연산과 관련된 필드들을 추가(예를 들어, 시프트 량을 제공하기 위해, 포화가 수행될지를 지시하기 위해, 등등))할 수 있고, 명령어 내에 다양하게 필드들을 재배열할 수 있다.
이 예시에서, 소스 피연산자들의 적합한 세트의 예가 도시되어 있지만, 본 발명의 범위는 이 특정 소스 피연산자들로 한정되지 않는다. 구체적으로, 제1 소스 패킹된 데이터 피연산자(312-1)(예를 들어, SRC1에 의해 지시됨)는 4개의 패킹된 데이터 요소 A1-A4를 가지며, 제2 소스 패킹된 데이터 피연산자(312-2)(예를 들어 SRC2에 의해 지시됨)는 4개의 패킹된 데이터 요소 A5-A8을 갖는다. 유사하게, 제3 소스 패킹된 데이터 피연산자(316-1)(예를 들어 SRC3에 의해 지시됨)는 4개의 패킹된 데이터 요소 B1-B4를 가지며, 제4 소스 패킹된 데이터 피연산자(316-2)(예를 들어 SRC4에 의해 지시됨)는 4개의 패킹된 데이터 요소 B5-B8을 갖는다. 다른 실시예들에서, 소스 패킹된 데이터 피연산자들은 옵션으로 상이한 수의 패킹된 데이터 요소를 포함할 수 있다. 일반적으로, 각각의 소스 패킹된 데이터 피연산자 내의 데이터 요소의 수는 소스 패킹된 데이터 피연산자의 비트 단위의 크기를 단일 데이터 요소의 비트 단위의 크기로 나눈 값과 동일할 수 있다. 다양한 실시예들에서, 각 소스 패킹된 데이터 피연산자는 64 비트, 128 비트, 256 비트, 512 비트, 또는 1024 비트일 수 있지만, 본 발명의 범위는 그렇게 한정되지 않는다. 다양한 실시예들에서, 각 데이터 요소는 8 비트, 16 비트, 32 비트, 또는 64 비트일 수 있지만, 본 발명의 범위는 그렇게 한정되지 않는다. 다양한 실시예들에서, 피연산자들 각각에는 4개, 8개, 16개, 32개, 또는 64개의 데이터 요소가 있을 수 있지만, 본 발명의 범위는 그렇게 한정되지 않는다. 피연산자들이 동일한 수의 데이터 요소를 가질 필요는 없다. 일반적으로, 피연산자 내의 데이터 요소의 수는 2의 거듭제곱 수이지만, 이것이 필수는 아니다.
도시된 예시적인 실시예에서, 최하위 데이터 요소는 왼쪽에 있고, 최상위 데이터 요소는 오른쪽에 있지만, 반대의 배열도 가능하다. 피연산자들의 제1 세트(312-1, 312-2) 및 피연산자들의 제2 세트(316-1, 316-2) 내의 동일한 상대적 데이터 요소 위치들에 있는 데이터 요소들은 대응하는 위치들에 있고 및/또는 대응하는 데이터 요소들이다. 예를 들어, A1과 B1은 대응하는 데이터 요소들이고, A2와 B2는 대응하는 데이터 요소들이다. 대조적으로, A2와 B3은 대응하지 않는 데이터 요소 위치들에 있고 및/또는 A2와 B3은 대응하지 않는 데이터 요소들이다. 또한, 제1 및 제2 소스 패킹된 데이터 피연산자들은 A5와 B5는 대응하지만 A5와 B1은 대응하지 않도록, A7과 B7은 대응하지만 A7과 B3은 대응하지 않도록, 기타 등등과 같이 논리적으로 연결되거나 달리 함께 고려될 수 있다.
패킹된 데이터 정렬 플러스 계산 연산(348)은 패킹된 데이터 정렬 플러스 계산 명령어(302)의 실시예에 응답하여 수행될 수 있다. 이는 소스 피연산자들을 관련 레지스터들 또는 다른 저장 위치들로부터 검색하거나 달리 수신하고, 이들을 실행 유닛(306)에 제공하는 것을 포함할 수 있다. 명령어에 의해 지시된 적어도 하나의 오프셋(이 실시예에서는 제1 오프셋 및 옵션의 제2 오프셋)이 또한 실행 유닛에 제공될 수 있다. 실행 유닛은, 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여, 결과 패킹된 데이터 피연산자(320)를 생성하여 목적지 저장 위치(예를 들어, DEST로 표시됨)에 저장하도록 동작할 수 있다. 결과 패킹된 데이터 피연산자는 복수의 결과 데이터 요소를 포함할 수 있다. 도시된 예시적인 실시예에서, 결과 패킹된 데이터 피연산자는 4개의 결과 데이터 요소를 갖지만, 다른 실시예들은 4개보다 적은 수 또는 많은 수의 결과 데이터 요소를 가질 수 있다. 일부 실시예들에서, 결과 데이터 요소들 각각은 소스 패킹된 데이터 피연산자들의 제1 세트(예를 들어, 피연산자들(312-1, 312-2)) 내의 데이터 요소와 소스 패킹된 데이터 피연산자들의 제2 세트(예를 들어, 피연산자들(316-1, 316-2)) 내의 대응하지 않는 데이터 요소의 적어도 한 쌍에 대해 수행된 연산(OP)의 값을 가질 수 있고, 여기서 각 쌍의 대응하지 않는 데이터 요소들은 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들 내의 대응하지 않는 데이터 요소 위치들에 있다. 예를 들어, 도시된 예시적인 실시예에서는, 제1 결과 데이터 요소가 A2와 B3에 대해 수행된 연산(OP)의 값을 가질 수 있고, 제2 결과 데이터 요소가 A3과 B4에 대해 수행된 연산(OP)의 값을 가질 수 있고, 제3 결과 데이터 요소가 A4와 B5에 대해 수행된 연산(OP)의 값을 가질 수 있고, 제4 결과 데이터 요소가 A5와 B6에 대해 수행된 연산(OP)의 값을 가질 수 있다.
일부 실시예들에서, 각 쌍의 대응하지 않는 데이터 요소들은 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들 내의 대응하지 않는 데이터 요소 위치들에 있을 수 있으며, 그 위치들은 명령어에 의해 지시된 적어도 하나의 데이터 요소 오프셋(예를 들어, 제1 오프셋(322-1) 및 제2 오프셋(322-2))에 기초하여 다르다. 대응하지 않는 데이터 요소 위치들은 실행 유닛이, 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여, 소스 피연산자들에 제1 및 제2 오프셋들을 적용하고, 패킹된 데이터 정렬 플러스 계산 명령어의 수행의 범위 내에서, 대응하지 않는 데이터 요소들을 대응하는 데이터 요소 위치들로 가져오도록 동작하게 하는 것일 수 있다. 예를 들어, B3은 1 데이터 요소 위치의 제1 오프셋(322-1)을 제1 및 제2 소스 패킹된 데이터 피연산자들에 적용하는 것(예를 들어, 그것의 논리적 연결)에 의해, 그리고 2 데이터 요소 위치들의 제2 오프셋(322-2)을 제3 및 제4 소스 패킹된 데이터 피연산자들에 적용하는 것(예를 들어, 그것의 논리적 연결)에 의해 A2에 대한 대응하는 데이터 요소 위치로(예를 들어, 동일한 상대적 데이터 요소 비트 위치들로) 오프셋 또는 달리 이동될 수 있다. 도시된 예시적인 실시예에서, 제1 오프셋은 1 데이터 요소 위치이고, 제2 오프셋은 2 데이터 요소 위치들이므로, 제1 및 제2 오프셋들을 집합적으로 적용하는 것은 데이터 요소들의 상대적 위치들을 1 데이터 요소 위치만큼 오프셋 또는 이동시킨다. 집합적으로 2개의 오프셋은 실행 유닛 내에서, A2와 B3를 대응하는 데이터 요소들로 만들고, A3와 B4를 대응하는 데이터 요소들로 만들고, A5와 B6을 대응하는 데이터 요소들로 만들고, 기타 등등을 행하도록 동작한다. 데이터 요소 오프셋들은 상이한 실시예들에서 상이한 방식들로, 예를 들어, 시프트, 회전, 시프트-병합 연산 등으로서 적용될 수 있다. A2와 B3(기타 등등)은 일반적으로 아키텍처적으로 가시적인 패킹된 데이터 레지스터들 내의 대응하는 데이터 요소들은 아닐 것이고, 오히려 패킹된 데이터 레지스터들로부터 일단 액세스되면 실행 유닛의 내부의 임시/중간의 비아키텍처적으로 가시적인 레지스터 및/또는 내부 회로 내의 대응하는 데이터 요소들로 가져와질 것이라는 점에 유의한다.
실행 유닛은 정렬된 데이터 요소들에 대해 다양한 상이한 유형의 연산들(OP) 중 임의의 연산을 수행하도록 동작할 수 있다. 본 발명의 범위는 임의의 공지된 특정 유형의 그러한 연산(OP)으로 한정되지 않는다. 적합한 유형의 연산들의 예로는 산술 연산들(예를 들어, 더하기, 빼기, 곱하기, 나누기, 곱셈-덧셈, 곱셈-누적, 내적 등), 논리 연산들(예를 들어, 시프트, 회전, 논리 AND, 논리 OR, 논리 XOR, 논리 AND NOT 등), 기타 연산들(예를 들어, 비교 연산, 제곱근, 역수 제곱근, 비트 카운트, 비트 반전, 반 폭으로의 포화(saturate to half width) 등) 및 그의 조합들을 포함하지만, 이에 한정되지는 않는다. 일부 실시예들에서, 실행 유닛은 동일한 상대적 데이터 요소 위치들에 있는 대응하는 데이터 요소들에 대해서만 “수직” SIMD 계산 연산들을 수행할 수 있지만(예를 들어, 실행 유닛의 “수직” SIMD 레인들 또는 부분들로), 본 발명의 범위는 그렇게 한정되지 않는다. 예를 들어, 실행 유닛은 소스 피연산자들의 제1 및 제2 세트들 내의 대응하는 데이터 요소들에 대해서만 패킹된 덧셈, 패킹된 뺄셈, 패킹된 곱셈, 패킹된 나눗셈, 패킹된 평균, 패킹된 반폭으로의 포화, 패킹된 제곱근, 패킹된 역수 제곱근, 패킹된 시프트, 패킹된 논리 AND, 패킹된 논리 OR, 패킹된 논리 XOR, 패킹된 논리 AND NOT, 패킹된 비교 등을 적용할 수 있다.
일부 실시예들에서, 실행 유닛은 대응하는 데이터 요소들과 대응하지 않는 데이터 요소들의 조합을 수반하는 수직 및 비수직 SIMD 계산 연산들 양자 모두의 조합을 수행할 수 있다. 일례로서, 실행 유닛은 대응하는 데이터 요소와 대응하지 않는 데이터 요소의 양자 모두의 곱을 더하는 것을 수반하는 복소수 곱셈 연산을 수행할 수 있다. 이러한 더 정교한 수직 플러스 비수직 SIMD 연산들의 다양한 다른 예들이 또한 적합하다. 어쨌든, 데이터 요소들은 원하는 데이터 요소 세트들에 대해 연산들을 수행하기 위해 실행 유닛이 기대하는 또는 그것들이 있도록 설계된 의도된 위치들로 정렬되었다. 유리하게도, 정렬 연산은 다양한 상이한 유형의 기존의 수직 및/또는 수직 및 비수직 SIMD 실행 유닛들 또는 로직의 재사용 또는 활용을 허용할 수 있고 동일한 패킹된 데이터 정렬을 달성하기 위해 별개의 패킹된 데이터 정렬 명령어들(예를 들어, 시프트 병합 명령어들)을 수행할 필요가 없다. 특정한 예시적인 실시예에서, 연산은 곱셈, 덧셈, 평균 및 곱셈 누적 중 하나일 수 있지만, 본 발명의 범위는 그렇게 한정되지 않는다.
도 4는 패킹된 데이터 정렬 플러스 계산 연산의 실시예를 수행하도록 동작하는 실행 유닛의 예시적인 실시예의 블록도이다. 실행 유닛은 본 명세서에 설명된 상이한 연산들(예를 들어, 도 3 및 도 5 내지 도 6의 연산들)을 수행하는 데 사용될 수 있다. 실행 유닛은 제1 정렬 유닛(460) 및 제2 정렬 유닛(467)을 포함한다. 실행 유닛은 또한 수직 SIMD 계산 유닛(466)을 포함한다.
제1 정렬 유닛은, 도시된 실시예에서 제1 소스 패킹된 데이터 피연산자(412-1) 및 제2 소스 패킹된 데이터 피연산자(412-2)를 포함하는, 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트를 수신하도록 결합된다. 제1 정렬 유닛은 제1 연결 및 회전 유닛(CR1), 제2 연결 및 회전 유닛(CR2), 및 제3 연결 및 회전 유닛(CR3)을 포함한다. CR1은 0 데이터 요소 위치들의 최하위 비트 위치를 향하여 오른쪽 회전(예시에서는 왼쪽으로 도시되어 있지만)을 수행하고 0 데이터 요소 오프셋 중간 피연산자(461-0)를 출력하도록 동작한다. 회전은 0 데이터 요소 위치들만큼이므로 CR1 유닛은 옵션으로 더 간단한 연결 유닛으로 대체될 수 있다. CR2는 1 데이터 요소 위치의 최하위 비트 위치를 향하여 오른쪽 회전을 수행하고 1 데이터 요소 오프셋 중간 피연산자(461-1)를 출력하도록 동작한다. CR2는 2 데이터 요소 위치의 최하위 비트 위치를 향하여 오른쪽 회전을 수행하고 2 데이터 요소 오프셋 중간 피연산자(461-2)를 출력하도록 동작한다. 중간 피연산자들(461) 각각은 제1 멀티플렉서(MUX) 또는 다른 선택기 유닛(464)에 입력들로서 제공될 수 있다. 다른 실시예들에서는, 추가의 및/또는 상이한 수의 데이터 요소 위치가 옵션으로 지원될 수 있다. 예를 들어, 하나의 대안적인 실시예에서는, 5개 또는 9개의 상이한 데이터 요소 오프셋 중간 피연산자가 옵션으로 생성되어 선택기 유닛에 입력될 수 있다. 또한, 다른 실시예들에서는, 회전 대신에 시프트가 옵션으로 사용될 수 있다. 명령어에 의해 지시된 제1 데이터 요소 오프셋(422-1)이 선택기 유닛(464)에 입력될 수 있고 입력들 중 하나를 선택하는 데 사용될 수 있다. 이 예시적인 실시예에서, 제1 데이터 요소 오프셋은 1 데이터 요소 위치이므로, 1 데이터 요소 오프셋 중간 피연산자(461-1)가 제1 선택된 피연산자(465)로서 선택되어 출력될 수 있다.
제2 정렬 유닛(467)은, 도시된 실시예에서 제3 소스 패킹된 데이터 피연산자(416-1) 및 제4 소스 패킹된 데이터 피연산자(416-2)를 포함하는, 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트를 수신하도록 결합된다. 제2 정렬 유닛은 제4 연결 및 회전 유닛(CR4), 제5 연결 및 회전 유닛(CR5), 및 제6 연결 및 회전 유닛(CR6)을 포함한다. CR4는 0 데이터 요소 위치들의 최하위 비트 위치를 향하여 오른쪽 회전(예시에서는 왼쪽으로 도시되어 있지만)을 수행하고 0 데이터 요소 오프셋 중간 피연산자(468-0)를 출력하도록 동작한다. 회전은 0 데이터 요소 위치들만큼이므로 CR4 유닛은 옵션으로 더 간단한 연결 유닛으로 대체될 수 있다. CR5는 1 데이터 요소 위치의 최하위 비트 위치를 향하여 오른쪽 회전을 수행하고 1 데이터 요소 오프셋 중간 피연산자(468-1)를 출력하도록 동작한다. CR6은 2 데이터 요소 위치의 최하위 비트 위치를 향하여 오른쪽 회전을 수행하고 2 데이터 요소 오프셋 중간 피연산자(468-2)를 출력하도록 동작한다. 중간 피연산자들(468) 각각은 제2 멀티플렉서(MUX) 또는 다른 선택기 유닛(469)에 입력들로서 제공될 수 있다. 다른 실시예들에서는, 추가의 및/또는 상이한 수의 데이터 요소 위치가 옵션으로 지원될 수 있다. 예를 들어, 하나의 대안적인 실시예에서는, 5개 또는 9개의 상이한 데이터 요소 오프셋 중간 피연산자가 옵션으로 생성되어 선택기 유닛에 입력될 수 있다. 또한, 다른 실시예들에서는, 회전 대신에 시프트가 옵션으로 사용될 수 있다. 명령어에 의해 지시된 제2 데이터 요소 오프셋(422-2)이 제2 선택기 유닛(469)에 입력될 수 있고 입력들 중 하나를 선택하는 데 사용될 수 있다. 이 예시적인 실시예에서, 제2 데이터 요소 오프셋은 2 데이터 요소 위치이므로, 2 데이터 요소 오프셋 중간 피연산자(461-2)가 제2 선택된 피연산자(470)로서 선택되어 출력될 수 있다.
제1 선택된 피연산자(465) 및 제2 선택된 피연산자(470) 양자 모두가 수직 SIMD 계산 유닛(466)(예를 들어, SIMD 덧셈 유닛, SIMD 곱셈 유닛 등)에 입력될 수 있다. 수직 SIMD 계산 유닛은 제1 및 제2 선택된 피연산자들의 대응하는 데이터 요소들에 대해 수직 SIMD 계산 연산들을 수행하도록 동작할 수 있다. 전술한 유형의 연산들 중 임의의 것, 예를 들어, 본 명세서에 설명된 패킹된 덧셈, 곱셈, 평균, 나눗셈 또는 기타 연산 등이 적합하다. 수직 SIMD 계산 유닛은 결과 패킹된 데이터 피연산자(420)를 출력 및 저장할 수 있다. 도시된 예시적인 실시예에서, 제1 오프셋은 1 데이터 요소 위치이고, 제2 오프셋은 2 데이터 요소 위치이므로, 결과 패킹된 데이터 피연산자는 A2와 B3에 대해 수행된 연산의 값을 갖는 제1 결과 데이터 요소, A3과 B4에 대해 수행된 연산의 값을 갖는 제2 결과 데이터 요소, A4와 B5에 대해 수행된 연산의 값을 갖는 제3 결과 데이터 요소, 및 A5와 B6에 대해 수행된 연산의 값을 갖는 제4 결과 데이터 요소를 가질 수 있다.
이것은 적합한 실행 유닛의 하나의 예시적인 예에 불과하다. 다른 실시예들에서는, 다수의 시프트 연산 및 선택 연산 대신에 제1 및 제2 정렬 유닛들은 대응하는 오프셋에 기초하여 시프트-병합 유형의 연산을 대신 수행할 수 있다. 또 다른 실시예들에서는, 다수의 가능성을 생성하고 이들 중 하나를 선택하는 대신 단일 가변 시프트 또는 회전 유닛이 오프셋에 기초하여 피연산자들을 시프트 또는 회전시킬 수 있다. 또한, 다른 실시예들에서는, 단일 데이터 요소 오프셋만이 사용되는 경우, 제1 및 제2 정렬 유닛들 중 하나만이 옵션으로 포함될 수 있다.
도 5는 패킹된 데이터 정렬 플러스 계산 명령어(502)의 제2 실시예에 응답하여 수행될 수 있는 패킹된 데이터 정렬 플러스 계산 연산(548)의 제2 예시적인 실시예를 나타내는 블록도이다. 도 5의 명령어 및 연산은 도 3의 명령어 및 연산과 소정의 유사성들을 갖는다. 설명을 모호하게 하는 것을 피하기 위해, 도 3의 명령어 및 연산에 대한 모든 옵션으로 유사한 또는 공통의 특성들, 세부 사항들, 변형들, 및 대안들을 반복하지 않고, 도 5의 명령어 및 연산에 대한 상이한 및/또는 추가 특성들이 주로 설명될 것이다. 그러나, 달리 언급되거나 분명히 명백하지 않은 한, 도 3의 명령어 및 연산에 대한 전술한 특성들, 세부 사항들, 변형들, 및 대안들은 도 5의 명령어 및 연산에도 옵션으로 적용될 수 있음을 이해해야 한다.
명령어(502)는 opcode(536), 제1 소스 패킹된 데이터 피연산자(512)를 특정하는 제1 소스 특정 필드(SRC1)(538), 제2 소스 패킹된 데이터 피연산자(516-1)를 특정하는 제2 소스 특정 필드(SRC2)(540), 및 제3 소스 패킹된 데이터 피연산자(516-2)를 특정하는 제3 소스 특정 필드(SRC3)(542)를 포함한다. 이 실시예에서, 제1 소스 패킹된 데이터 피연산자(512)는 도 3의 실시예에서의 2개의 소스 패킹된 데이터 피연산자와 대조적으로 단일 소스 패킹된 데이터 피연산자만의 제1 세트이다. 제2 및 제3 소스 패킹된 데이터 피연산자들(516)은 2개의 소스 패킹된 데이터 피연산자의 제2 세트를 나타낸다. 명령어는 또한 결과 패킹된 데이터 피연산자(520)가 저장되는 목적지 저장 위치를 특정하는 목적지 특정 필드(DEST)(546)를 옵션으로 포함한다. 이 필드들과 피연산자들 각각은 전술한 특성들, 세부 사항들, 변형들, 및 대안들을 가질 수 있다.
이 실시예에서, 명령어는 또한 도 3의 실시예에서의 2개의 데이터 요소 오프셋와 대조적으로 단일 데이터 요소 오프셋만을 지시한다. 명령어는 소스 패킹된 데이터 피연산자들의 제2 세트(이 실시예에서는 피연산자들(516-1, 516-2))에 대응하는 것이고, 그에 적용되는 것인 단일 오프셋을 특정하거나 달리 지시하기 위한 단일 오프셋 특정 필드(522)를 갖는다. 데이터 요소 오프셋과 그 특정 필드는 전술한 특성들, 세부 사항들, 변형들, 및 대안들을 가질 수 있다. 제1 소스 패킹된 데이터 피연산자의 데이터 요소들을 오프셋 또는 이동시키지 않고, 제2 및 제3 소스 패킹된 데이터 피연산자들과 제1 소스 패킹된 데이터 피연산자 사이의 상대적 오프셋만을 수행하는 것이 유용한 다양한 상황들이 있다. 단일 데이터 요소 오프셋으로 이를 달성하기에 충분하다. 또한, 단일 데이터 요소 오프셋을 적용하는 것만으로, 예를 들어, 정렬 유닛들 중 하나를 제거(예를 들어, 도 4에서의 제1 정렬 유닛을 제거)하는 것에 의해, 실행 유닛의 복잡성을 감소시키는 데 도움이 될 수 있다. 도시된 예시적인 실시예에서는, 단일 오프셋은 3 데이터 요소 위치들의 오프셋을 지시하지만, 이는 하나의 예시적인 예에 불과하다. 다른 실시예들에서는, 단일 오프셋은 특정 구현에 따라, -4 내지 4, 0 내지 4, -2 내지 2, 0 내지 2, 또는 어떤 다른 수의 데이터 요소 위치들 중 어느 하나일 수 있다. 이전과 같이, 오프셋은 데이터 요소의 수, 비트의 수, 시프트 량, 회전 량 등으로 특정될 수 있다. 대안적으로, 다른 실시예들에서는, 원한다면, 제2 데이터 요소 오프셋이 옵션으로 사용될 수 있다. 대안적인 실시예에서는, 오프셋 특정 필드 대신에 고정된 오프셋이 옵션으로 사용될 수 있고, 전술한 바와 같이, opcode에 암시적일 수 있다.
도시된 실시예에서는, 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트는, 이 예에서는 4개의 패킹된 데이터 요소 A1-A4를 갖는, 단일 제1 소스 패킹된 데이터 피연산자(512)(예를 들어 SRC1에 의해 지시됨)만을 갖는다. 제2 소스 패킹된 데이터 피연산자(516-1)(예를 들어 SRC2에 의해 지시됨)는 4개의 패킹된 데이터 요소 B1-B4를 가지며, 제3 소스 패킹된 데이터 피연산자(516-2)(예를 들어 SRC3에 의해 지시됨)는 4개의 패킹된 데이터 요소 B5-B8을 갖는다. 도시된 예시적인 실시예에서는 제2 및 제3 소스 패킹된 데이터 요소들만이 오프셋되는 것이므로, 도 3에서의 데이터 요소 A5에 의해 도시된 바와 같이 제1 소스 패킹된 데이터 피연산자를 오프셋함으로 인해 손실된 데이터 요소들을 대체하거나 대신할 추가 데이터 요소가 필요 없다. 전술한 바와 같이 다른 수의 데이터 요소가 대신 사용될 수 있다. 또한, 도시된 실시예에서는, 소스 패킹된 데이터 피연산자들의 제2 세트는 제2 및 제3 소스 패킹된 데이터 피연산자를 갖지만, 또 다른 실시예에서는 제1 소스 패킹된 데이터 피연산자보다 더 많은(예를 들어, 지원되는 오프셋의 양에 따라 두 배 많은 또는 적어도 하나 더 많은) 데이터 요소를 갖는 단일 소스 패킹된 데이터 피연산자가 옵션으로 대신 사용될 수 있다.
제1 소스 패킹된 데이터 피연산자(512) 내의 그리고 제2 및 제3 소스 패킹된 데이터 피연산자들(516-1, 516-2)의 제2 세트 내의 동일한 상대적 데이터 요소 위치들에 있는 데이터 요소들은 대응하는 위치들에 있고 및/또는 대응하는 데이터 요소들이다. 예를 들어, A1과 B1은 대응하고, A4와 B4는 대응하고, 등등이다. 대조적으로, A1과 B4는 대응하지 않는 데이터 요소 위치들에 있고 및/또는 A1과 B4는 소스 피연산자들 내의 대응하지 않는 데이터 요소들이다. 또한, 제1 및 제2 소스 패킹된 데이터 피연산자들은 A1과 B5가 대응하지 않도록 논리적으로 연결되거나 달리 함께 고려될 수 있다.
패킹된 데이터 정렬 플러스 계산 연산(548)의 제2 실시예는 패킹된 데이터 정렬 플러스 계산 명령어(502)의 제2 실시예에 응답하여 수행될 수 있다. 실행 유닛은, 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여, 결과 패킹된 데이터 피연산자(520)를 생성하여 목적지 저장 위치에 저장하도록 동작할 수 있다. 도시된 예시적인 실시예에서, 결과 패킹된 데이터 피연산자는 4개의 결과 데이터 요소를 갖지만, 다른 실시예들은 4개보다 적은 수 또는 많은 수의 결과 데이터 요소를 가질 수 있다. 일부 실시예들에서, 결과 데이터 요소들 각각은 소스 패킹된 데이터 피연산자들의 제1 세트(예를 들어, 단일 소스 패킹된 데이터 피연산자(512)) 내의 데이터 요소와 소스 패킹된 데이터 피연산자들의 제2 세트(예를 들어, 제2 및 제3 소스 패킹된 데이터 피연산자들(516-1, 516-2)) 내의 대응하지 않는 데이터 요소의 적어도 한 쌍에 대해 수행된 연산(OP)의 값을 가질 수 있다. 각 쌍의 대응하는 데이터 요소들은 제1 소스 패킹된 데이터 피연산자 내의 그리고 제2 및 제3 패킹된 데이터 피연산자들 내의 대응하지 않는 데이터 요소 위치들에 있을 수 있다. 예를 들어, 도시된 예시적인 실시예에서는, 제1 결과 데이터 요소가 A1과 B4에 대해 수행된 연산(OP)의 값을 가질 수 있고, 제2 결과 데이터 요소가 A2와 B5에 대해 수행된 연산(OP)의 값을 가질 수 있고, 제3 결과 데이터 요소가 A3과 B6에 대해 수행된 연산(OP)의 값을 가질 수 있고, 제4 결과 데이터 요소가 A4와 B7에 대해 수행된 연산(OP)의 값을 가질 수 있다. 이것은 하나의 예시적인 예에 불과하다.
이전과 같이, 일부 실시예들에서, 각 쌍의 대응하지 않는 데이터 요소들은 소스 패킹된 데이터 피연산자들 내의 대응하지 않는 데이터 요소 위치들에 있을 수 있고, 그 위치들은 단일 데이터 요소 오프셋에 기초하여 다르다. 대응하지 않는 데이터 요소 위치들은 실행 유닛이, 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여, 제2 및 제3 소스 패킹된 데이터 피연산자들에 단일 데이터 요소 오프셋을 적용하고, 패킹된 데이터 정렬 플러스 계산 명령어의 수행의 범위 내에서, 대응하지 않는 데이터 요소들을 대응하는 데이터 요소 위치들로 가져오도록 동작하게 하는 것일 수 있다. 예를 들어, B4는 단일 데이터 요소 오프셋(522)을 제2 및 제3 소스 패킹된 데이터 피연산자들에 적용하는 것(예를 들어, 그것의 논리적 연결)에 의해 그것이 A1에 대응하도록(예를 들어, 동일한 상대적 데이터 요소 위치를 갖도록) 3 데이터 요소 위치들만큼 오프셋 또는 달리 이동될 수 있다. 실행 유닛은 전술한 바와 같이 정렬된 데이터 요소들에 대해 다양한 상이한 유형의 연산(OP) 중 임의의 연산을 수행하도록 동작할 수 있다. 일부 실시예들에서, 실행 유닛은 대응하는 데이터 요소들에 대해서만 “수직” SIMD 계산 연산을 수행할 수 있다. 다른 실시예들에서는, 실행 유닛은 대응하는 데이터 요소들과 대응하지 않는 데이터 요소들의 조합을 수반하는 수직 및 비수직 SIMD 계산 연산들 양자 모두의 조합을 수행할 수 있다.
도 6은 패킹된 데이터 정렬 플러스 계산 명령어(602)의 제3 실시예에 응답하여 수행될 수 있는 패킹된 데이터 정렬 플러스 계산 연산(648)의 제3 실시예를 나타내는 블록도이다. 도 6의 명령어 및 연산은 도 3의 명령어 및 연산과 소정의 유사성들을 갖는다. 설명을 모호하게 하는 것을 피하기 위해, 도 3의 명령어 및 연산에 대한 모든 옵션으로 유사한 또는 공통의 특성들, 세부 사항들, 변형들, 및 대안들을 반복하지 않고, 도 6의 명령어 및 연산에 대한 상이한 및/또는 추가 특성들이 주로 설명될 것이다. 그러나, 달리 언급되거나 분명히 명백하지 않은 한, 도 3의 명령어 및 연산에 대한 전술한 특성들, 세부 사항들, 변형들, 및 대안들은 도 6의 명령어 및 연산에도 옵션으로 적용될 수 있음을 이해해야 한다.
명령어(602)는 opcode(636), 제1 소스 패킹된 데이터 피연산자(612)를 특정하는 제1 소스 특정 필드(SRC1)(638), 및 제2 소스 패킹된 데이터 피연산자(616)를 특정하는 제2 소스 특정 필드(SRC2)(640)를 포함한다. 이 실시예에서, 제1 소스 패킹된 데이터 피연산자(612)는 단일 소스 패킹된 데이터 피연산자만의 제1 세트를 나타낸다. 마찬가지로, 제2 소스 패킹된 데이터 피연산자(616)는 단일 소스 패킹된 데이터 피연산자만의 제2 세트를 나타낸다. 명령어는 또한 결과 패킹된 데이터 피연산자(620)가 저장되는 목적지 저장 위치를 특정하는 목적지 특정 필드(DEST)(646)를 옵션으로 포함한다. 이 필드들과 피연산자들 각각은 전술한 특성들, 세부 사항들, 변형들, 및 대안들을 가질 수 있다.
이 실시예에서, 명령어는 또한 제1 데이터 요소 오프셋(622-1) 및 제2 데이터 요소 오프셋(622-2)을 지시한다. 제1 데이터 요소 오프셋은 제1 소스 패킹된 데이터 피연산자(612)에 대응하는 것이고, 그에 적용되는 것이고, 제2 데이터 요소 오프셋은 제2 소스 패킹된 데이터 피연산자(616)에 대응하는 것이고, 그에 적용되는 것이다. 다른 실시예들에서는, 원한다면 단일 데이터 요소 오프셋만이 사용될 수 있다(예를 들어, 도 5와 관련하여 설명된 바와 같이). 데이터 요소 오프셋들과 그 특정 필드들은 전술한 특성들, 세부 사항들, 변형들, 및 대안들을 가질 수 있다. 도시된 예시적인 실시예에서, 제1 데이터 요소 오프셋은 0 데이터 요소 위치들의 오프셋을 지시하고, 제2 데이터 요소 오프셋은 3 데이터 요소 위치들의 오프셋을 지시하지만, 이는 하나의 예시적인 예에 불과하다. 다른 실시예들에서는, 데이터 요소 오프셋들 각각은, 서로 독립적으로, 특정 구현에 따라, -4 내지 4, 0 내지 4, -2 내지 2, 0 내지 2, 또는 어떤 다른 수의 데이터 요소 위치들 중 어느 하나일 수 있다(예를 들어, 더 많은 데이터 요소가 있는 경우 더 많은 수의 오프셋이 사용될 수도 있다). 이전과 같이, 각각의 데이터 요소 오프셋은 데이터 요소의 수, 비트의 수, 비트 또는 데이터 요소 단위의 시프트 량, 비트 또는 데이터 요소 단위의 회전 량 등으로 특정될 수 있다.
도시된 예시적인 실시예에서, 제1 소스 패킹된 데이터 피연산자(612)(예를 들어, SRC1에 의해 지시됨)는 8개의 패킹된 데이터 요소 A1-A8을 갖는다. 제2 소스 패킹된 데이터 피연산자(616)(예를 들어, SRC2에 의해 지시됨)는 8개의 패킹된 데이터 요소 B1-B8을 갖는다. 다른 실시예들에서는 다른 수의 데이터 요소가 옵션으로 대신 사용될 수 있다. 제1 소스 패킹된 데이터 피연산자(612) 내의 그리고 제2 소스 패킹된 데이터 피연산자(616) 내의 동일한 상대적 데이터 요소 위치들에 있는 데이터 요소들은 대응하는 위치들에 있고 및/또는 대응하는 데이터 요소들이다. 예를 들어, A1과 B1은 대응하고, A7과 B7은 대응하고, 등등이다. 대조적으로, A1과 B4는 대응하지 않는 데이터 요소 위치들에 있고 및/또는 A1과 B4는 소스 피연산자들 내의 대응하지 않는 데이터 요소들이다. 도시된 실시예에서, 소스 피연산자들 각각은 결과 패킹된 데이터 피연산자보다 더 많은 데이터 요소들(예를 들어, 이 예에서는 두 배 더 많은 데이터 요소들)를 갖는다.
패킹된 데이터 정렬 플러스 계산 연산(648)의 제3 실시예는 패킹된 데이터 정렬 플러스 계산 명령어(602)의 제3 실시예에 응답하여 수행될 수 있다. 실행 유닛은, 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여, 결과 패킹된 데이터 피연산자(620)를 생성하여 목적지 저장 위치에 저장하도록 동작할 수 있다. 도시된 예시적인 실시예에서, 결과 패킹된 데이터 피연산자는 4개의 결과 데이터 요소를 갖지만, 다른 실시예들은 4개보다 적은 수 또는 많은 수의 결과 데이터 요소를 가질 수 있다. 일부 실시예들에서, 결과 데이터 요소들 각각은 제1 소스 패킹된 데이터 피연산자(612) 내의 데이터 요소와 제2 소스 패킹된 데이터 피연산자(616) 내의 대응하지 않는 데이터 요소의 적어도 한 쌍에 대해 수행된 연산(OP)의 값을 가질 수 있다. 각 쌍의 대응하지 않는 데이터 요소들은 제1 및 제2 소스 패킹된 데이터 피연산자들 내의 대응하지 않는 데이터 요소 위치들에 있을 수 있다. 예를 들어, 도시된 예시적인 실시예에서는, 제1 결과 데이터 요소가 A1과 B4에 대해 수행된 연산(OP)의 값을 가질 수 있고, 제2 결과 데이터 요소가 A2와 B5에 대해 수행된 연산(OP)의 값을 가질 수 있고, 제3 결과 데이터 요소가 A3과 B6에 대해 수행된 연산(OP)의 값을 가질 수 있고, 제4 결과 데이터 요소가 A4와 B7에 대해 수행된 연산(OP)의 값을 가질 수 있다. 이것은 하나의 예시적인 예에 불과하다. 다른 예시적인 예들에서는, 제1 오프셋은 대신 1, 3(예를 들어, 제2 오프셋과 동일함), 4, 10 등일 수 있다.
이전과 일부 실시예들에서, 각 쌍의 대응하지 않는 데이터 요소들은 제1 및 제2 소스 패킹된 데이터 피연산자들 내의 대응하지 않는 데이터 요소 위치들에 있을 수 있고, 그 대응하지 않는 위치들은 제1 및 제2 데이터 요소 오프셋들의 적용에 기초하여 다르다. 대응하지 않는 데이터 요소 위치들은 실행 유닛이, 제1 및 제2 소스 패킹된 데이터 피연산자들에 각각 제1 및 제2 데이터 요소 오프셋들을 적용하여, 대응하지 않는 데이터 요소들을 대응으로 가져오도록 동작하게 하는 것일 수 있다. 예를 들어, B4는 그것이 A1에 대응하도록(예를 들어, 동일한 상대적 데이터 요소 위치를 갖도록) 3 데이터 요소 위치들만큼 오프셋 또는 달리 이동될 수 있다. 실행 유닛은 전술한 바와 같이 정렬된 데이터 요소들에 대해 다양한 상이한 유형의 연산(OP) 중 임의의 연산을 수행하도록 동작할 수 있다. 일부 실시예들에서, 실행 유닛은 대응하는 데이터 요소들에 대해서만 “수직” SIMD 계산 연산을 수행할 수 있다. 다른 실시예들에서는, 실행 유닛은 대응하는 데이터 요소들과 대응하지 않는 데이터 요소들의 조합을 수반하는 수직 및 비수직 SIMD 계산 연산들 양자 모두의 조합을 수행할 수 있다.
일부 실시예들에서, 본 명세서에 개시된 명령어들은 이미지 처리시 픽셀 필터링에서 사용될 수 있지만, 본 발명의 범위는 그렇게 한정되지 않는다. 필터링에서는 결과 필터링된 픽셀이 주어진 입력 픽셀뿐만 아니라 주어진 입력 픽셀에 이웃하는 하나 이상의 픽셀로부터 계산되는 것이 매우 일반적이다. 예로서, 픽셀들의 행에서의 주어진 픽셀은 주어진 픽셀의 양측에 있는 인접한 이웃 픽셀들을 이용하여 필터링될 수 있다(예를 들어, 정규화 컨볼루션(normalizing convolution) 1, 2, 1 계수 필터를 이용하여). 전통적으로, SIMD 벡터 프로세서에서 필터들의 구현을 반복된 데이터의 정렬을 사용하여 수행하는데, 매번 SIMD 연산이 뒤따른다. 이미징 및 비전에서, 이러한 필터들은 3x3, 5x5, 7x7 등의 크기의 2차원(2D) 형태로 많이 사용되는데, 이들은 각각 9개, 25개, 및 49개의 정렬 연산을 수반할 수 있으며, 각각의 연산은 잠재적으로 별개의 패킹된 데이터 정렬 명령어다(본 명세서에 개시된 명령어들이 사용되지 않는 한). 특히 임베디드 디지털 신호 프로세서, 또는 다른 일반적으로 리소스가 제한된 환경에서 구현될 때, 추가 정렬 연산들을 수행하기 위한 사이클 비용 및/또는 정렬 명령어들의 중간 결과를 저장하는 데 필요한 추가 레지스터 공간은 전체 효율에 상당히 영향을 미칠 수 있다.
전술한 실시예들 중 다수에서는, 하나 이상의 소스 패킹된 데이터 연산의 상이한 세트들이 도시되고 설명되었다(예를 들어, 도 1에서의 세트들 112 및 116). 일부 사용들 및 구현들에서는, 동일한 데이터(예를 들어, 하나 이상의 소스 패킹된 데이터 피연산자의 하나의 단일 세트 내의)가 연산에 사용될 수 있다. 이를 달성하기 위한 한 가지 방법은 하나 이상의 소스 소스 패킹된 데이터 피연산자의 세트들 양자 모두들에 대해 동일한 레지스터들 또는 다른 저장 위치들을 특정하는 것이다. 예를 들어, 명령어는 세트 112에 대해 레지스터들 R1 및 R2의 쌍을 특정할 수 있고, 또한 세트들 116에 대해 레지스터들 R1 및 R2을 특정할 수 있다. 대안적으로, 하나 이상의 패킹된 데이터 피연산자의 단일 세트(예를 들어, 세트 112)가 명령어에 의해 특정될 수 있으며(예를 들어, 레지스터들 R1 및 R2가 특정될 수 있음) 소스 패킹된 데이터 피연산자들의 제1 및 제2 세트들(112, 116) 양자 모두에 대해 소스 패킹된 데이터 피연산자들의 단일 세트(112)를 사용하는 것은 명령어(예를 들어, 그의 opcode)에 의해 암시적이거나 암시될 수 있다. 명령어는 추가 소스 특정 필드들(예를 들어, SRC2, SRC3)을 생략할 수 있다. 일부 실시예들에서, 모든 소스 피연산자의 데이터 요소들은 옵션으로 모두 이미지의 픽셀들의 동일한 행의 픽셀들일 수 있다. 예를 들어, 픽셀들을 그 이웃들과 평균하기 위하여 이미지 처리시 픽셀 필터링에서(예를 들어, 필터 계수들 1,2,1을 사용하여 픽셀들의 정규화 컨볼루션을 구현하기 위해), 뿐만 아니라 다양한 다른 응용들에서, 소스 패킹된 데이터 피연산자들의 동일한 세트의 상이한 사본들 및 복제본들을, 각각의 사본 또는 복제본에 상이한 오프셋들을 적용하여(예를 들어, 픽셀 계수들 1, 2, 1을 사용하여 픽셀들의 정규화 컨볼루션의 경우에 3개의 복제본에 0, 1 및 2 데이터 요소 오프셋들을 적용하여) 여러 번 오프셋할 수 있는 것이 종종 유용하다. 따라서, 위에 개시된 것들에 대해 대안적인 실시예들은 하나 이상의 소스 패킹된 데이터 피연산자의 단일 세트(예를 들어, 112)만을 지시하고 (예를 들어, 명시적인 세트(116) 대신에) 그 지시된 세트의 사본 또는 복제본을 암시적으로 또는 내재적으로 재사용할 수 있다.
도 7은 본 발명의 실시예들을 구현하기에 적합한 프로세서(700)의 상세한 예시적인 실시예의 블록도이다. 프로세서는 패킹된 데이터 정렬 플러스 계산 명령어의 실시예를 수행할 수 있는 적어도 하나의 코어(780)를 포함한다. 코어는 프로그램 흐름에서 분기를 예측하기 위한 분기 예측 유닛(781)을 포함한다. 분기 예측 유닛은 명령어 프리페치 유닛(782)과 결합된다. 명령어 프리페치 유닛은 (예를 들어, 메모리 유닛(790)을 통해) 메모리로부터, 패킹된 데이터 정렬 플러스 계산 명령어를 포함하는, 명령어들을 프리페치하거나 달리 수신할 수 있다. 레벨 1(L1) 명령어 캐시(783)가 명령어 프리페치 유닛과 결합된다. L1 명령어 캐시는 패킹된 데이터 정렬 플러스 계산 명령어를 포함하는, 명령어들을 캐싱하거나 달리 저장할 수 있다. 프로세서는 또한 명령어들에 대한 데이터 요소들 및/또는 피연산자들을 포함하는, 데이터를 캐싱하거나 달리 저장하기 위한 L1 데이터 캐시(791)를 포함한다. 프로세서는 또한 옵션으로 레벨 2(L2) 캐시(792)를 포함한다. L2 캐시는 코어에 전용될 수 있거나 코어 및 하나 이상의 다른 옵션의 코어(도시되지 않음)에 의해 공유될 수 있다. L2 캐시는 패킹된 데이터 정렬 플러스 계산 명령어를 포함하는, 데이터 및 명령어들을 저장할 수 있다. 명령어 페치 유닛(784)이 L1 명령어 캐시, L2 캐시, 및 디코드 유닛(704)과 결합된다. 명령어 페치 유닛은 패킹된 데이터 정렬 플러스 계산 명령어를 포함하는, 명령어들을 (예를 들어, L1 명령어 캐시 또는 L2 캐시로부터) 페치하거나 달리 저장하고, 그 명령어들을 디코드 유닛에 제공할 수 있다. 디코드 유닛은 본 명세서의 다른 부분에서 설명된 바와 같이, 패킹된 데이터 정렬 플러스 계산 명령어를 포함하는, 명령어들을 디코딩할 수 있다.
프로세서는 또한 하나 이상의 레지스터 파일 유닛(788)을 포함한다. 레지스터 파일 유닛(들)은 예를 들어, 패킹된 데이터 레지스터, 범용 레지스터, 상태 또는 플래그 레지스터, 제어 또는 구성 레지스터 등과 같은 다양한 상이한 유형의 레지스터들을 포함할 수 있다. 코어가 옵션으로 비순차적(OOO) 실행을 지원하는 실시예에서, 코어는 또한 옵션으로 리소스들을 할당하고 레지스터들(예를 들어, 패킹된 데이터 정렬 플러스 계산 명령어와 관련된 패킹된 데이터 레지스터들)에 대한 레지스터 리네이밍을 수행하기 위해 레지스터 파일 유닛(들)과 결합된 레지스터 리네임/할당자 유닛(785)을 포함할 수 있다. 또한, OOO 실행을 위해, 코어는 옵션으로 디코드 유닛, 리네임/할당자 유닛, 및 하나 이상의 실행 유닛(706, 789)과 결합된 하나 이상의 스케줄러 유닛(786)을 포함할 수 있다. 스케줄러 유닛(들)은 실행 유닛들에서의 실행을 위해 패킹된 데이터 정렬 플러스 계산 명령어로부터 디코딩된 하나 이상의 연산을 포함하는, 디코딩된 명령어들과 관련된 하나 이상의 연산을 스케줄링할 수 있다. 코어는 옵션으로 예를 들어 정수 실행 유닛, 부동 소수점 실행 유닛, 벡터 실행 유닛, 하나 이상의 메모리 액세스 유닛(789) 등과 같은 다수의 상이한 유형의 실행 유닛을 가질 수 있다. OOO 실행을 위해, 코어는 옵션으로 실행 유닛들, 레지스터 파일 유닛(들), 및 리네임/할당자 유닛과 결합된 리타이어먼트 또는 커밋 유닛(787)을 포함할 수 있다. 리타이어먼트 또는 커밋 유닛은 명령어를 리타이어하거나 커밋하도록 동작할 수 있다.
이는 적합한 프로세서의 하나의 예시적인 예에 불과하다는 것을 이해해야 한다. 대안적인 실시예들에서, 프로세서는 더 적은 또는 더 많은 컴포넌트를 포함할 수 있다. 옵션으로 포함될 수 있는 다른 컴포넌트들의 예로는 하나 이상의 명령어 및/또는 데이터 변환 색인 버퍼(TLB), 하나 이상의 재순서화 버퍼(ROB), 예약 스테이션, 어드레스 생성 유닛, 디버그 유닛, 성능 모니터 유닛, 전력 관리 유닛이 있다. 또한, 프로세서는 옵션으로 다수의 코어(예를 들어, 적어도 2개, 적어도 4개, 적어도 8개, 적어도 30개 등)를 가질 수 있다. 일부 경우에, 모든 코어는 동일한 컴포넌트들을 가질 수 있고 코어(780)와 동일한 명령어 세트들을 지원할 수 있다. 대안적으로, 코어들 중 적어도 일부는 상이한 컴포넌트들을 가질 수 있고/있거나 상이한 명령어 세트들을 지원할 수 있다.
예시적인 코어 아키텍처, 프로세서 및 컴퓨터 아키텍처
프로세서 코어들은 상이한 방식들로, 상이한 목적들을 위해, 그리고 상이한 프로세서들에서 구현될 수 있다. 예를 들어, 그러한 코어들의 구현들은 다음을 포함할 수 있다: 1) 범용 컴퓨팅을 위해 의도된 범용 순차적 코어; 2) 범용 컴퓨팅을 위해 의도된 고성능 범용 비순차적 코어; 3) 주로 그래픽 및/또는 과학적 (스루풋) 컴퓨팅을 위해 의도된 특수 목적 코어. 상이한 프로세서들의 구현들은 다음을 포함할 수 있다: 1) 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 순차적 코어 및/또는 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 비순차적 코어를 포함하는 CPU; 및 2) 주로 그래픽 및/또는 과학적 (스루풋)을 위해 의도된 하나 이상의 특수 목적 코어를 포함하는 코프로세서. 이러한 상이한 프로세서들은 다음에 언급한 것들을 포함할 수 있는 상이한 컴퓨터 시스템 아키텍처들로 이어진다: 1) CPU와 별도의 칩 상에 있는 코프로세서; 2) CPU와 별도의 다이에 있지만 동일한 패키지에 있는 코프로세서; 3) CPU와 동일한 다이에 있는 코프로세서(이 경우, 이러한 코프로세서는 때때로 특수 목적 로직, 예를 들어 통합 그래픽 및/또는 과학적 (스루풋) 로직으로, 또는 특수 목적 코어로 지칭된다); 및 4) 설명된 CPU(때때로 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)로 지칭됨), 전술한 코프로세서, 및 추가적인 기능성을 동일한 다이 상에 포함할 수 있는 시스템 온 칩. 예시적인 코어 아키텍처들이 다음에 설명되고, 이어서 예시적인 프로세서들 및 컴퓨터 아키텍처들이 설명된다.
예시적인 코어 아키텍처들
순차적 및 비순차적 코어 블록도
도 8a는 본 발명의 실시예들에 따른, 예시적인 순차적 파이프라인 및 예시적인 레지스터 리네이밍 비순차적 발행/실행 파이프라인을 도시하는 블록도이다. 도 8b는 본 발명의 실시예들에 따른 프로세서에 포함될 순차적 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 아키텍처 코어의 양자 모두를 도시하는 블록도이다. 도 8a 및 도 8b에서의 실선 박스들은 순차적 파이프라인 및 순차적 코어를 도시하는 반면, 파선 박스들의 옵션의 추가는 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 및 코어를 도시한다. 순차적 양태가 비순차적 양태의 서브세트라는 점을 고려하여, 비순차적 양태가 설명될 것이다.
도 8a에서, 프로세서 파이프라인(800)은 페치 스테이지(802), 길이 디코드 스테이지(804), 디코드 스테이지(806), 할당 스테이지(808), 리네이밍 스테이지(810), 스케줄링(디스패치 또는 발행으로도 알려져 있음) 스테이지(812), 레지스터 판독/메모리 판독 스테이지(814), 실행 스테이지(816), 라이트백(write back)/메모리 기입 스테이지(818), 예외 처리 스테이지(822) 및 커밋 스테이지(824)를 포함한다.
도 8b는 실행 엔진 유닛(850)에 결합되는 프런트 엔드 유닛(830)을 포함하는 프로세서 코어(890)를 도시하며, 이들 두 개의 유닛 모두는 메모리 유닛(870)에 결합된다. 코어(890)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안적인 코어 유형일 수 있다. 또 다른 옵션으로서, 코어(890)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, 범용 컴퓨팅 그래픽스 처리 유닛(GPGPU: general purpose computing graphics processing unit) 코어, 그래픽스 코어 등과 같은 특수 목적 코어일 수 있다.
프런트 엔드 유닛(830)은 명령어 캐시 유닛(834)에 결합된 분기 예측 유닛(832)을 포함하고, 이 명령어 캐시 유닛은 명령어 변환 색인 버퍼(translation lookaside buffer, TLB)(836)에 결합되고, 이 명령어 변환 색인 버퍼는 명령어 페치 유닛(838)에 결합되고, 이 명령어 페치 유닛은 디코드 유닛(840)에 결합된다. 디코드 유닛(840)(또는 디코더)은 명령어들을 디코딩하고, 출력으로서 하나 이상의 마이크로 연산들, 마이크로코드 엔트리 포인트들, 마이크로 명령어들, 다른 명령어들, 또는 다른 제어 신호들을 생성할 수 있는데, 이들은 오리지널 명령어들로부터 디코딩되거나, 또는 달리 오리지널 명령어들을 반영하거나 오리지널 명령어들로부터 도출된다. 디코드 유닛(840)은 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다. 적합한 메커니즘들의 예로는 탐색표, 하드웨어 구현, 프로그램 가능 로직 어레이(PLA), 마이크로코드 판독 전용 메모리(ROM) 등을 포함하지만 이에 한정되지 않는다. 일 실시예에서, 코어(890)는 (예를 들어, 디코드 유닛(840) 내에 또는 다르게는 프런트 엔드 유닛(830) 내에) 특정 매크로 명령어들을 위한 마이크로코드를 저장하는 마이크로코드 ROM 또는 다른 매체를 포함한다. 디코드 유닛(840)은 실행 엔진 유닛(850)에서의 리네임/할당자 유닛(852)에 결합된다.
실행 엔진 유닛(850)은, 하나 이상의 스케줄러 유닛(들)(856)의 세트 및 리타이어먼트 유닛(854)에 결합된 리네임/할당자 유닛(852)을 포함한다. 스케줄러 유닛(들)(856)은, 예약 스테이션들, 중앙 명령어 윈도우 등을 비롯한 임의의 수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(856)은 물리적 레지스터 파일(들) 유닛(들)(858)에 결합된다. 물리적 레지스터 파일(들) 유닛들(858) 각각은 하나 이상의 물리적 레지스터 파일을 나타내고, 이들 중 상이한 물리적 레지스터 파일들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 유형을 저장한다. 일 실시예에서, 물리적 레지스터 파일(들) 유닛(858)은 벡터 레지스터들 유닛, 기입 마스크 레지스터들 유닛, 및 스칼라 레지스터들 유닛을 포함한다. 이 레지스터 유닛들은 아키텍처 벡터 레지스터들, 벡터 마스크 레지스터들, 및 범용 레지스터들을 제공할 수 있다. 물리적 레지스터 파일(들) 유닛(들)(858)은, (예를 들어, 재순서화 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 이용하여; 미래 파일(들), 이력 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 이용하여; 레지스터 맵들 및 레지스터들의 풀을 이용하거나 하여) 레지스터 리네이밍 및 비순차적 실행이 구현될 수 있는 다양한 방식들을 예시하기 위해 리타이어먼트 유닛(854)에 의해 중첩된다. 리타이어먼트 유닛(854) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 실행 클러스터(들)(860)에 결합된다. 실행 클러스터(들)(860)는 하나 이상의 실행 유닛(862)의 세트 및 하나 이상의 메모리 액세스 유닛(864)의 세트를 포함한다. 실행 유닛들(862)은 다양한 유형의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예를 들어, 시프트, 덧셈, 뺄셈, 곱셈)을 수행할 수 있다. 일부 실시예들은 특정 기능들이나 기능들의 세트들에 전용의 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 단일 실행 유닛, 또는 모두가 모든 기능들을 수행하는 다수의 실행 유닛을 포함할 수 있다. 스케줄러 유닛(들)(856), 물리적 레지스터 파일(들) 유닛(들)(858) 및 실행 클러스터(들)(860)는 가능하게는 복수 개인 것으로 도시되어 있는데, 그 이유는 특정 실시예들이 특정 유형의 데이터/연산들에 대해 별개의 파이프라인들(예를 들어, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛 및/또는 실행 클러스터를 각각 갖는 메모리 액세스 파이프라인 - 별개의 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(864)을 갖는 특정 실시예들이 구현됨)을 생성하기 때문이다. 별개의 파이프라인들이 사용되는 경우, 이 파이프라인들 중 하나 이상은 비순차적 발행/실행일 수 있고 나머지는 순차적일 수 있다는 점도 이해해야 한다.
메모리 액세스 유닛들(864)의 세트는 메모리 유닛(870)에 결합되고, 이 메모리 유닛은 레벨 2(L2) 캐시 유닛(876)에 결합되는 데이터 캐시 유닛(874)에 결합된 데이터 TLB 유닛(872)을 포함한다. 하나의 예시적인 실시예에서, 메모리 액세스 유닛들(864)은 로드 유닛(load unit), 어드레스 저장 유닛(store address unit) 및 데이터 저장 유닛(store data unit)을 포함할 수 있으며, 이들 각각은 메모리 유닛(870)에서의 데이터 TLB 유닛(872)에 결합된다. 명령어 캐시 유닛(834)은 메모리 유닛(870)에서의 레벨 2(L2) 캐시 유닛(876)에 또한 결합된다. L2 캐시 유닛(876)은 하나 이상의 다른 레벨의 캐시에 그리고 궁극적으로는 메인 메모리에 결합된다.
예로서, 예시적인 레지스터 리네이밍, 비순차적 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(800)을 구현할 수 있다: 1) 명령어 페치(838)는 페치 및 길이 디코딩 스테이지들(802 및 804)을 수행하고; 2) 디코드 유닛(840)은 디코드 스테이지(806)를 수행하고; 3) 리네임/할당자 유닛(852)은 할당 스테이지(808) 및 리네이밍 스테이지(810)를 수행하고; 4) 스케줄러 유닛(들)(856)은 스케줄 스테이지(812)를 수행하고; 5) 물리적 레지스터 파일(들) 유닛(들)(858) 및 메모리 유닛(870)은 레지스터 판독/메모리 판독 스테이지(814)를 수행하고; 실행 클러스터(860)는 실행 스테이지(816)를 수행하고; 6) 메모리 유닛(870) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 라이트백/메모리 기입 스테이지(818)를 수행하고; 7) 다양한 유닛들이 예외 처리 스테이지(822)에 수반될 수 있고; 8) 리타이어먼트 유닛(854) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 커밋 스테이지(824)를 수행한다.
코어(890)는 본 명세서에 설명된 명령어(들)를 포함하여, 하나 이상의 명령어 세트들(예를 들어, (더 새로운 버전이 추가된 어떤 확장들을 갖는) x86 명령어 세트; 캘리포니아주 서니베일에 있는 MIPS Technologies의 MIPS 명령어 세트; 캘리포니아주 서니베일에 있는 ARM Holdings의 (NEON과 같은 옵션의 추가 확장들을 갖는) ARM 명령어 세트)을 지원할 수 있다. 일 실시예에서, 코어(890)는 패킹된 데이터 명령어 세트 확장(예를 들어, AVX1, AVX2)을 지원하는 로직을 포함하며, 따라서 많은 멀티미디어 애플리케이션들에 의해 사용되는 연산들이 패킹된 데이터를 사용하여 수행되는 것을 허용한다.
코어는 (연산들 또는 스레드들의 2개 이상의 병렬 세트를 실행하는) 멀티스레딩을 지원할 수 있고, 시간 슬라이싱된 멀티스레딩, 동시 멀티스레딩을 포함하는 다양한 방식으로(이 경우 단일 물리 코어는 물리 코어가 동시에 멀티스레딩하고 있는 각각의 스레드에게 로직 코어를 제공한다), 또는 이들의 조합(예를 들어, Intel® 하이퍼스레딩 기술(Hyperthreading technology)에서와 같은 시간 슬라이싱된 페칭 및 디코딩 및 그 후의 동시 멀티스레딩)으로 지원할 수 있음을 이해해야 한다.
레지스터 리네이밍이 비순차적 실행의 상황에서 설명되었지만, 레지스터 리네이밍은 순차적 아키텍처에서 사용될 수도 있다는 점을 이해해야 한다. 프로세서의 예시된 실시예가 별개의 명령어 및 데이터 캐시 유닛들(834/874) 및 공유 L2 캐시 유닛(876)을 또한 포함하지만, 대안적인 실시예들은, 예를 들어 레벨 1(L1) 내부 캐시 또는 다중 레벨의 내부 캐시와 같이, 명령어들 및 데이터 양자 모두에 대한 단일의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 내부 캐시와, 코어 및/또는 프로세서에 대해 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 대안적으로, 모든 캐시는 코어 및/또는 프로세서에 대해 외부에 있을 수 있다.
구체적인 예시적인 순차적 코어 아키텍처
도 9a 및 도 9b는 더 구체적인 예시적인 순차적 코어 아키텍처의 블록도를 예시하고, 이 코어는 칩에 있는 수개의 로직 블록들(동일한 유형 및/또는 상이한 유형들의 다른 코어들을 포함함) 중 하나일 것이다. 로직 블록들은 애플리케이션에 따라, 일부 고정된 기능 로직, 메모리 I/O 인터페이스들, 및 다른 필요한 I/O 로직을 갖는 고 대역폭 인터커넥트 네트워크(예를 들어, 링 네트워크)를 통해 통신한다.
도 9a는 본 발명의 실시예들에 따른, 단일 프로세서 코어를, 온-다이 인터커넥트 네트워크(902)로의 그의 접속과 함께 그리고 레벨 2(L2) 캐시의 그의 로컬 서브세트(904)과 함께 나타낸 블록도이다. 일 실시예에서, 명령어 디코더(900)는 패킹된 데이터 명령어 세트 확장을 갖는 x86 명령어 세트를 지원한다. L1 캐시(906)는 스칼라 및 벡터 유닛들 내로의 캐시 메모리에 대한 낮은 레이턴시(low-latency) 액세스들을 허용한다. (설계를 간략화하기 위한) 일 실시예에서, 스칼라 유닛(908) 및 벡터 유닛(910)은 별개의 레지스터 세트(각기, 스칼라 레지스터들(912) 및 벡터 레지스터들(914))를 사용하고, 이들 사이에 전송되는 데이터는 메모리에 기입되고 이후 레벨 1(L1) 캐시(906)로부터 리드 백(read back)되는 반면, 본 발명의 대안적인 실시예들은 상이한 접근법을 사용할 수 있다(예를 들어, 단일 레지스터 세트를 사용하거나, 또는 기입 및 리드 백되지 않고 데이터가 2개의 레지스터 파일 사이에서 전송되게 허용하는 통신 경로를 포함함).
L2 캐시의 로컬 서브세트(904)는, 프로세서 코어 당 하나씩인 별개의 로컬 서브세트들로 분할되는 글로벌 L2 캐시의 일부이다. 각각의 프로세서 코어는 L2 캐시의 그 자신의 로컬 서브세트(904)에 대한 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독된 데이터는 자신의 L2 캐시 서브세트(904)에 저장되며, 다른 프로세서 코어들이 그들 자신의 로컬 L2 캐시 서브세트들에 액세스하는 것과 병렬로 빠르게 액세스될 수 있다. 프로세서 코어에 의해 기입되는 데이터는 그 자신의 L2 캐시 서브세트(904)에 저장되고 또한 필요하다면 다른 서브세트들로부터 플러싱된다. 링 네트워크는 공유 데이터에 대한 일관성를 보장한다. 링 네트워크는 양방향성이어서, 프로세서 코어들, L2 캐시들 및 다른 로직 블록들과 같은 에이전트들이 칩 내에서 서로 통신하는 것을 허용한다. 각각의 링 데이터-경로는 방향당 1012 비트 폭이다.
도 9b는 본 발명의 실시예들에 따른 도 9a의 프로세서 코어의 부분의 확대도이다. 도 9b는 L1 캐시(904)의 L1 데이터 캐시(906A) 부분뿐만 아니라, 벡터 유닛(910) 및 벡터 레지스터들(914)에 관한 보다 상세한 사항을 포함한다. 구체적으로, 벡터 유닛(910)은 16-폭 벡터 처리 유닛(VPU)(16-폭 ALU(928) 참조)이고, 이는 정수, 단정밀도 부동 소수점 및 배정밀도 부동 소수점 명령어들 중 하나 이상을 실행한다. VPU는 스위즐 유닛(swizzle unit)(920)을 이용하는 레지스터 입력들의 스위즐링, 수치 변환 유닛들(922A-B)을 이용하는 수치 변환, 및 메모리 입력에 대한 복제 유닛(924)을 이용하는 복제를 지원한다. 기입 마스크 레지스터들(926)은 결과적인 벡터 기입들을 프레디케이트하는 것을 허용한다.
통합 메모리 제어기 및 그래픽을 갖는 프로세서
도 10은 본 발명의 실시예들에 따라 2개 이상의 코어를 가질 수 있고, 통합 메모리 제어기를 가질 수 있고 통합 그래픽을 가질 수 있는 프로세서(1000)의 블록도이다. 도 10에서 실선으로 도시된 박스는 단일 코어(1002A), 시스템 에이전트(1010), 하나 이상의 버스 제어기 유닛(1016)의 세트를 갖는 프로세서(1000)를 도시하고, 점선으로 된 박스의 옵션의 추가는 다수의 코어(1002A-N), 시스템 에이전트 유닛(1010) 내의 하나 이상의 통합 메모리 제어기 유닛(들)(1014)의 세트, 및 특수 목적 로직(1008)을 갖는 프로세서(1000)를 도시한다.
따라서, 프로세서(1000)의 상이한 구현들은 다음을 포함할 수 있다: 1) (하나 이상의 코어들을 포함할 수 있는) 통합 그래픽 및/또는 과학적 (스루풋) 로직인 특수 목적 로직(1008), 및 하나 이상의 범용 코어들(예를 들어, 범용 순차적 코어들, 범용 비순차적 코어들, 이 둘의 조합)인 코어(1002A-N)를 구비한 CPU; 2) 그래픽 및/또는 과학적 (스루풋)을 위해 주로 의도된 많은 수의 특수 목적 코어들인 코어들(1002A-N)을 구비한 코프로세서; 및 3) 많은 수의 범용 순차적 코어들인 코어들(1002A-N)을 구비한 코프로세서. 따라서, 프로세서(1000)는 범용 프로세서와, 예를 들어 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(general purpose graphics processing unit), 하이 스루풋 MIC(many integrated core) 코프로세서(30개 이상의 코어를 포함함), 임베디드 프로세서와 같은 코프로세서 또는 특수 목적 프로세서, 또는 그와 유사한 것일 수 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(1000)는, 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세스 기술들 중 임의의 것을 사용하여 하나 이상의 기판의 일부가 될 수 있고 및/또는 이들 기판 상에 구현될 수 있다.
메모리 계층구조는 코어들 내의 하나 이상의 레벨의 캐시, 하나 이상의 공유 캐시 유닛들(1006)의 세트, 및 통합 메모리 제어기 유닛들(1014)의 세트에 결합된 외부 메모리(도시되지 않음)를 포함한다. 공유 캐시 유닛들(1006)의 세트는, 레벨 2(L2), 레벨 3(L3), 레벨 4(L4) 또는 다른 레벨 캐시와 같은 하나 이상의 중간 레벨 캐시, 최종 레벨 캐시(last level cache)(LLC) 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서는 링 기반 인터커넥트 유닛(1012)이 통합 그래픽 로직(1008), 공유 캐시 유닛들(1006)의 세트 및 시스템 에이전트 유닛(1010)/통합 메모리 제어기 유닛(들)(1014)을 상호접속하지만, 대안적인 실시예들은 이러한 유닛들을 상호접속하는 임의 수의 공지된 기술들을 이용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛(1006)과 코어들(1002A-N) 사이에는 일관성이 유지된다.
일부 실시예들에서, 코어들(1002A-N) 중 하나 이상은 멀티스레딩이 가능하다. 시스템 에이전트(1010)는 코어들(1002A-N)을 조정 및 동작시키는 컴포넌트들을 포함한다. 시스템 에이전트 유닛(1010)은 예를 들어 전력 제어 유닛(power control unit, PCU) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1002A-N) 및 통합 그래픽 로직(1008)의 전력 상태를 조절하기 위해 필요한 로직 및 컴포넌트들일 수 있거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속된 디스플레이들을 구동하기 위한 것이다.
코어들(1002A-N)은 아키텍처 명령어 세트에 관하여 동종일 수도 있고 이종일 수도 있는데; 즉, 코어들(1002A-N) 중 2개 이상은 동일한 명령어 세트의 실행이 가능할 수 있는 한편, 다른 것들은 그 명령어 세트의 서브세트만을 또는 상이한 명령어 세트의 실행이 가능할 수 있다.
예시적인 컴퓨터 아키텍처들
도 11 내지 도 21은 예시적인 컴퓨터 아키텍처의 블록도이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 퍼스널 디지털 어시스턴트들, 엔지니어링 워크스테이션들, 서버들, 네트워크 디바이스들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, DSP들(digital signal processors), 그래픽 디바이스들, 비디오 게임 디바이스들, 셋톱박스들, 마이크로 제어기들, 휴대 전화들, 휴대용 미디어 플레이어들, 핸드헬드 디바이스들, 및 다양한 다른 전자 디바이스들에 대해 본 기술분야에 알려진 다른 시스템 설계들 및 구성들 또한 적합하다. 일반적으로, 본 명세서에 개시되는 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 매우 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적합하다.
이제 도 11을 참조하면, 본 발명의 일 실시예에 따른 시스템(1100)의 블록도가 도시되어 있다. 시스템(1100)은 하나 이상 프로세서(1110, 1115)을 포함할 수 있고, 이들은 제어기 허브(1120)에 결합된다. 일 실시예에서, 제어기 허브(1120)는 그래픽 메모리 제어기 허브(GMCH)(1190) 및 입력/출력 허브(IOH)(1150)를 포함한다(이들은 별개의 칩들에 있을 수도 있음); GMCH(1190)는 메모리(1140) 및 코프로세서(1145)에 결합되는 메모리 및 그래픽 제어기들을 포함한다; IOH(1150)는 입력/출력(I/O) 디바이스들(1160)을 GMCH(1190)에 결합한다. 대안적으로, 메모리 및 그래픽 제어기들 중 하나 또는 양자 모두는 프로세서 내에 통합되고(본 명세서에 설명된 바와 같이), 메모리(1140) 및 코프로세서(1145)는 IOH(1150)와 단일 칩에 있는 제어기 허브(1120) 및 프로세서(1110)에 직접 결합된다.
추가적인 프로세서들(1115)의 옵션의 속성은 도 11에서 파선들로 표시되어 있다. 각각의 프로세서(1110, 1115)는 본 명세서에 설명된 하나 이상의 처리 코어를 포함할 수 있고 프로세서(1000)의 일부 버전일 수 있다.
메모리(1140)는 예를 들어, DRAM(dynamic random access memory), PCM(phase change memory), 또는 이 둘의 조합일 수 있다. 적어도 하나의 실시예에서, 제어기 허브(1120)는 프런트사이드 버스(FSB)와 같은 멀티 드롭 버스, QPI(QuickPath Interconnect)와 같은 포인트-투-포인트 인터페이스, 또는 유사한 접속(1195)을 통해 프로세서(들)(1110, 1115)와 통신한다.
일 실시예에서, 코프로세서(1145)는, 예를 들어, 하이 스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 일 실시예에서, 제어기 허브(1120)는 통합 그래픽 가속기를 포함할 수 있다.
아키텍처, 마이크로아키텍처, 열, 전력 소비 특성, 및 그와 유사한 것을 포함하여 이점에 대한 여러 기준들의 관점에서 물리적인 리소스들(1110, 1115) 간에 다양한 차이가 있을 수 있다.
일 실시예에서, 프로세서(1110)는 일반 유형의 데이터 처리 연산들을 제어하는 명령어들을 실행한다. 명령어들 내에는 코프로세서 명령어들이 임베딩될 수 있다. 프로세서(1110)는 이러한 코프로세서 명령어들을 부속된 코프로세서(1145)에 의해 실행되어야 하는 유형의 것으로 인식한다. 따라서, 프로세서(1110)는 이러한 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서 버스 또는 다른 인터커넥트 상에서 코프로세서(1145)에 발행한다. 코프로세서(들)(1145)는 수신된 코프로세서 명령어들을 수신하고 실행한다.
이제 도 12를 참조하면, 본 발명의 실시예에 따른 제1의 더 구체적인 예시적인 시스템(1200)의 블록도가 도시되어 있다. 도 12에 도시된 바와 같이, 멀티프로세서 시스템(1200)은 포인트-투-포인트 인터커넥트 시스템이며, 포인트-투-포인트 인터커넥트(1250)를 통해 결합되는 제1 프로세서(1270) 및 제2 프로세서(1280)를 포함한다. 프로세서(1270 및 1280) 각각은 프로세서(1000)의 일부 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서(1270 및 1280)는 각각 프로세서(1110 및 1115)이고, 코프로세서(1238)는 코프로세서(1145)이다. 또 다른 실시예에서, 프로세서(1270 및 1280)는 각각 프로세서(1110) 코프로세서(1145)이다.
통합 메모리 제어기(IMC) 유닛(1272 및 1282)을 각각 포함하는 프로세서(1270 및 1280)가 도시되어 있다. 프로세서(1270)는 또한 버스 제어기 유닛들의 일부로서 포인트-투-포인트(P-P) 인터페이스들(1276 및 1278)을 포함한다; 유사하게, 제2 프로세서(1280)는 P-P 인터페이스들(1286 및 1288)을 포함한다. 프로세서(1270 및 1280)는 P-P 인터페이스 회로들(1278 및 1288)을 사용하여 포인트-투-포인트(P-P) 인터페이스(1250)를 통해 정보를 교환할 수 있다. 도 12에 도시된 바와 같이, IMC들(1272 및 1282)은 프로세서들을, 각각의 프로세서에 로컬로 부속된 메인 메모리의 일부일 수도 있는, 각각의 메모리들, 즉, 메모리(1232) 및 메모리(1234)에 결합한다.
프로세서(1270, 1280)는 각각 포인트 투 포인트 인터페이스 회로들(1276, 1294, 1286, 1298)을 사용하여 개별 P-P 인터페이스들(1252, 1254)을 통해 칩셋(1290)과 정보를 교환할 수 있다. 칩셋(1290)은 옵션으로 고성능 인터페이스(1239)를 통해 코프로세서(1238)와 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(1238)는, 예를 들어, 하이 스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유 캐시(도시되지 않음)는 어느 한 프로세서에 포함되거나, 양자 모두의 프로세서의 외부이지만 여전히 P-P 인터커넥트를 통해 프로세서들과 접속될 수 있어서, 프로세서가 저 전력 모드에 놓이는 경우 어느 한쪽 또는 양자 모두의 프로세서의 로컬 캐시 정보가 공유된 캐시에 저장될 수 있다.
칩셋(1290)은 인터페이스(1296)를 통해 제1 버스(1216)에 결합될 수 있다. 일 실시예에서, 제1 버스(1216)는 PCI(Peripheral Component Interconnect) 버스, 또는 PCI 익스프레스 버스 또는 또 다른 3세대 I/O 인터커넥트 버스와 같은 버스일 수 있지만, 본 발명의 범위는 그에 한정되지는 않는다.
도 12에 도시된 바와 같이, 다양한 I/O 디바이스들(1214)이 제1 버스(1216)를 제2 버스(1220)에 결합하는 버스 브리지(1218)와 함께 제1 버스(1216)에 결합될 수 있다. 일 실시예에서, 코프로세서, 하이 스루풋 MIC 프로세서, GPGPU, (예를 들어, 그래픽 가속기 또는 디지털 신호 처리(DSP) 유닛과 같은) 가속기, 필드 프로그래머블 게이트 어레이, 또는 임의의 다른 프로세서와 같은 하나 이상의 추가적인 프로세서(들)(1215)가 제1 버스(1216)에 결합된다. 일 실시예에서, 제2 버스(1220)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(1222), 통신 디바이스(1227) 및 명령어/코드 및 데이터(1230)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 디바이스와 같은 저장 유닛(1228)을 포함하는 다양한 디바이스가 제2 버스(1220)에 결합될 수 있다. 또한, 오디오 I/O(1224)가 제2 버스(1220)에 결합될 수 있다. 다른 아키텍처들도 가능하다는 점에 유의한다. 예를 들어, 도 12의 포인트-투-포인트 아키텍처 대신에, 시스템은 멀티드롭 버스 또는 다른 이러한 아키텍처들을 구현할 수 있다.
이제 도 13을 참조하면, 본 발명의 실시예에 따른 제2의 더 구체적인 예시적인 시스템(1300)의 블록도가 도시되어 있다. 도 12 및 도 13에서의 유사한 요소들은 유사한 참조 번호들을 지니며, 도 13의 다른 양태들을 모호하게 하는 것을 피하기 위해 도 13으로부터 도 12의 특정 양태들이 생략되었다.
도 13은 프로세서(1270, 1280)가 각각 통합 메모리 및 I/O 제어 로직("CL")(1272 및 1282)을 포함할 수 있음을 도시한다. 따라서, CL(1272, 1282)는 통합 메모리 제어기 유닛을 포함하고 I/O 제어 로직을 포함한다. 도 13은 메모리들(1232, 1234)만이 CL(1272, 1282)에 결합되는 것이 아니라, I/O 디바이스들(1314)도 또한 제어 로직(1272, 1282)에 결합되는 것을 도시한다. 레거시 I/O 디바이스들(1315)이 칩셋(1290)에 결합된다.
이제 도 14를 참조하면, 본 발명의 실시예에 따른 SoC(1400)의 블록도를 도시한다. 도 10에서의 유사한 요소들은 유사한 참조 번호들을 지닌다. 또한, 파선 박스들은 더 진보된 SoC들에 대한 선택적인 특징들이다. 도 14에서, 인터커넥트 유닛(들)(1402)은: 하나 이상의 코어(132A-N)의 세트 및 공유 캐시 유닛(들)(1006)을 포함하는 애플리케이션 프로세서(1410); 시스템 에이전트 유닛(1010); 버스 제어기 유닛(들)(1016); 통합 메모리 제어기 유닛(들)(1014); 통합 그래픽 로직, 이미지 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 세트 또는 하나 이상의 코프로세서(1420); 정적 랜덤 액세스 메모리(SRAM) 유닛(1430); 직접 메모리 액세스(DMA) 유닛(1432); 및 하나 이상의 외부 디스플레이에 결합하기 위한 디스플레이 유닛(1440)에 결합된다. 일 실시예에서, 코프로세서(들)(1420)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 하이 스루풋 MIC 프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서를 포함한다.
본 명세서에 개시된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 저장 요소들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능 시스템들 상에서 실행되는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 12에 도시된 코드(1230)와 같은 프로그램 코드가 본 명세서에 설명된 기능을 수행하고 출력 정보를 생성하기 위해 입력 명령어에 적용될 수 있다. 출력 정보는 공지된 방식으로 하나 이상의 출력 디바이스에 적용될 수 있다. 이 출원을 위해, 처리 시스템은, 예를 들어; 디지털 신호 프로세서(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)과 같은 ROM(read-only memory), RAM(random access memory), PCM(phase change memory)을 포함하는 반도체 디바이스, 자기 또는 광 카드, 또는 전자 명령어들을 저장하는 데 적합한 임의의 다른 유형의 매체와 같은 저장 매체를 포함하는, 머신 또는 디바이스에 의해 제조 또는 형성되는 물품들의 비일시적이고 유형인 구성들을 포함할 수 있지만, 이들로 한정되지 않는다.
따라서, 본 발명의 실시예들은, 또한, 명령어들을 포함하거나, 또는 본 명세서에 개시되는 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 특징들을 정의하는, HDL(Hardware Description Language) 등의 설계 데이터를 포함하는 비일시적이고 유형인 머신 판독 가능 매체를 포함한다. 이러한 실시예들은 프로그램 제품들로 또한 언급될 수 있다.
에뮬레이션(바이너리 변환, 코드 모핑 등을 포함함)
일부 경우에, 명령어 변환기가 소스 명령어 세트로부터의 명령어를 타깃 명령어 세트로 변환하는 데 사용될 수 있다. 예를 들어, 명령어 변환기는 명령어를 코어에 의해 처리될 하나 이상의 다른 명령어로(예를 들어, 정적 바이너리 변환, 동적 컴파일(dynamic compilation)을 포함하는 동적 바이너리 변환을 이용하여) 번역하거나, 모핑하거나, 에뮬레이트하거나, 또는 달리 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 온 프로세서(on processor), 오프 프로세서(off processor), 또는 부분 온 및 부분 오프 프로세서(part on and part off processor)일 수 있다.
도 15는 본 발명의 실시예들에 따른 소스 명령어 세트에서의 바이너리 명령어들을 타깃 명령어 세트에서의 바이너리 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 다양한 조합으로 구현될 수 있다. 도 15는 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1516)에 의해 기본적으로 실행될 수 있는 x86 바이너리 코드(1506)를 생성하기 위해 하이 레벨 언어(1502)의 프로그램이 x86 컴파일러(1504)를 사용하여 컴파일될 수 있는 것을 도시한다. 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1516)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 달성하기 위해서, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당부 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서 상에서 실행되도록 되어 있는 오브젝트 코드 버전의 애플리케이션들 또는 다른 소프트웨어를 호환 가능하게 실행하거나 또는 달리 처리함으로써, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1504)는, 추가 연계 처리(linkage processing)를 수반하거나 수반하지 않고서 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1516)상에서 실행될 수 있는 x86 바이너리 코드(1506)(예를 들어, 오브젝트 코드)를 생성하도록 동작할 수 있는 컴파일러를 나타낸다. 유사하게, 도 15는 적어도 하나의 x86 명령어 세트 코어가 없는 프로세서(1514)(예를 들어, 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 및/또는 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 기본적으로 실행될 수 있는 대안 명령어 세트 바이너리 코드(1510)를 생성하기 위해 하이 레벨 언어(1502)의 프로그램이 대안 명령어 세트 컴파일러(1508)를 사용하여 컴파일될 수 있다는 것을 나타낸 것이다. 명령어 변환기(1512)는 x86 바이너리 코드(1506)를 x86 명령어 세트 코어가 없는 프로세서(1514)에 의해 기본적으로 실행될 수 있는 코드로 변환하는 데 사용된다. 이러한 변환된 코드는 대안 명령어 세트 바이너리 코드(1510)와 동일할 가능성이 낮은데, 그 이유는 이것을 할 수 있는 명령어 변환기는 제작하기 어렵기 때문이다; 그러나, 변환된 코드는 일반 연산을 달성할 것이며, 대안 명령어 세트로부터의 명령어들로 이루어질 것이다. 따라서, 명령어 변환기(1512)는 에뮬레이션, 시뮬레이션, 또는 임의의 다른 처리를 통해 x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스로 하여금 x86 바이너리 코드(1506)를 실행하도록 허용하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
도 3 내지 도 7에 대해 설명된 구성 요소, 특징, 및 세부 사항은 또한 옵션으로 도 1 및 도 2 중 임의의 것에 적용될 수 있다. 또한, 임의의 장치에 대해 설명된 구성 요소, 특징, 및 세부 사항은 또한 옵션으로, 실시예들에서 그러한 장치에 의해 및/또는 그러한 장치에 의해 수행될 수 있는 임의의 방법에 적용될 수 있다. 본 명세서에 설명된 프로세서들 중 임의의 것은 본 명세서에 개시된 컴퓨터 시스템들(예를 들어, 도 11 내지 도 14) 임의의 것에 포함될 수 있다. 일부 실시예들에서, 컴퓨터 시스템은 동적 랜덤 액세스 메모리(DRAM)를 포함할 수 있다. 대안적으로, 컴퓨터 시스템은 리프레시될 필요가 없는 유형의 휘발성 메모리 또는 플래시 메모리를 포함할 수 있다. 본 명세서에 개시된 명령어들은 본 명세서에 도시된 임의의 시스템들에서, 본 명세서에 도시된 임의의 마이크로아키텍처들을 가진, 본 명세서에 도시된 임의의 프로세서들을 이용해 수행될 수 있다.
본 설명 및 청구항들에서, "결합된(coupled)" 및/또는 "연결된(connected)"이라는 용어들이 그 파생어들과 함께 사용되었을 수 있다. 이들 용어들은 서로에 대한 동의어로서 의도되지는 않는다. 오히려, 실시예들에서, "연결된"은 2개 이상의 요소들이 서로 직접 물리적으로 그리고/또는 전기적으로 접촉하는 것을 나타내기 위해 사용될 수 있다. "결합된"은 2개 이상의 요소들이 서로 직접 물리적으로 그리고/또는 전기적으로 접촉하는 것을 의미할 수 있다. 그러나, "결합된"은 2개 이상의 요소들이 서로 직접 접촉을 이루지는 않지만 여전히 서로 협업하거나 또는 상호작용하는 것을 또한 의미할 수 있다. 예를 들어, 실행 유닛은 하나 이상의 중간 컴포넌트들을 통해 레지스터 및/또는 디코드 유닛과 결합될 수 있다. 도면에서, 화살표들은 연결들 및 결합들을 보여주는 데 사용된다.
"및/또는"이라는 용어가 사용되었을 수 있다. 본 명세서에서 사용되는, "및/또는"이라는 용어는 하나 또는 다른 하나 또는 양자 모두를 의미한다(예를 들어, A 및/또는 B는 A 또는 B 또는 A와 B 양자 모두를 의미한다).
상기 설명에서는, 실시예들의 충분한 이해를 제공하기 위해 구체적인 상세 사항들이 제시되었다. 그러나, 다른 실시예들이 이들 구체적인 상세 사항들 중 일부가 없이도 실시될 수 있다. 본 발명의 범위는 위에서 제공되는 특정한 예들에 의해서가 아니라 이하의 청구항들에 의해서만 결정되어야 한다. 다른 경우들에서, 잘 알려진 회로들, 구조들, 디바이스들, 및 동작들은 설명의 이해를 불명료하게 하는 것을 회피하기 위해 블록도 형태로 및/또는 상세 사항 없이 도시되었다. 적절한 것으로 고려되는 경우, 참조 번호들 또는 참조 번호들의 종단 부분들은, 달리 특정되거나 분명히 명백하지 않은 한, 옵션으로 유사하거나 동일한 특성들을 가질 수 있는 대응하는 또는 유사한 요소들을 나타내기 위해서 도면들 사이에서 반복되었다.
특정 동작들은 하드웨어 컴포넌트들에 의해 수행될 수 있거나, 또는 명령어들로 프로그램된 머신, 회로, 또는 하드웨어 컴포넌트(예를 들어, 프로세서, 프로세서의 일부, 회로 등)가 동작들을 수행하는 것을 초래하고/하거나 야기하는 데 이용될 수 있는 머신 실행가능 또는 회로 실행가능 명령어들로 구현될 수 있다. 동작들은 옵션으로 하드웨어와 소프트웨어의 조합에 의해 수행될 수도 있다. 프로세서, 머신, 회로 또는 하드웨어는, 명령어를 실행 및/또는 처리하고, 명령어에 응답하여 결과를 저장하도록 동작하는 특정 또는 특수 회로 또는 다른 로직(예를 들어, 펌웨어 및/또는 소프트웨어와 잠재적으로 조합되는 하드웨어)을 포함할 수 있다.
일부 실시예들은 머신 판독 가능 매체를 포함하는 제조물(예를 들어, 컴퓨터 프로그램 제품)을 포함한다. 매체는 머신에 의해 판독 가능한 형태로 정보를 제공하는, 예를 들어 저장하는 메커니즘을 포함할 수 있다. 머신 판독 가능 매체는, 머신에 의해 실행되는 경우 그리고/또는 실행될 때 이 머신으로 하여금 본 명세서에 개시된 하나 이상의 연산들, 방법들 또는 기술들을 수행하게 하고/하거나 이 머신이 이들을 수행하는 결과를 가져오도록 동작하는 명령어 또는 명령어들의 시퀀스를 제공하거나 저장하고 있을 수 있다.
일부 실시예들에서, 머신 판독 가능 매체는 비일시적 머신 판독 가능 저장 매체를 포함할 수 있다. 예를 들어, 비일시적 머신 판독 가능 저장 매체는, 플로피 디스켓, 광 저장 매체, 광 디스크, 광 데이터 저장 디바이스, CD-ROM, 자기 디스크, 광자기 디스크, ROM(read only memory), PROM(Programmable ROM), EPROM(erasable-and-programmable ROM), EEPROM(electrically-erasable-and-programmable ROM), RAM(random access memory), SRAM(static-RAM), DRAM(dynamic-RAM), 플래시 메모리, 상 변화 메모리, 상 변화 데이터 저장 재료, 비휘발성 메모리, 비휘발성 데이터 저장 디바이스, 비일시적 메모리, 비일시적 데이터 저장 디바이스 등을 포함할 수 있다. 비일시적 머신 판독 가능 저장 매체는 일시적으로 전파되는 신호로 이루어지지 않는다. 일부 실시예들에서, 이 저장 매체는 고형물을 포함하는 유형 매체를 포함할 수 있다.
적합한 머신들의 예들은 범용 프로세서, 특수 목적 프로세서, 디지털 로직 회로, 집적 회로, 또는 등등을 포함하지만, 이에 한정되지는 않는다. 적합한 머신들의 또 다른 예들은, 프로세서, 디지털 로직 회로, 또는 집적 회로를 포함하는 컴퓨터 시스템 또는 다른 전자 디바이스를 포함한다. 이러한 컴퓨터 시스템들 및 전자 디바이스들의 예들은 데스크톱 컴퓨터들, 랩톱 컴퓨터들, 노트북 컴퓨터들, 태블릿 컴퓨터들, 넷북들, 스마트폰들, 셀룰러 폰들, 서버들, 네트워크 디바이스들(예를 들어, 라우터들 및 스위치들), MID(Mobile Internet device)들, 미디어 플레이어들, 스마트 텔레비전들, 넷톱들, 셋톱 박스들, 및 비디오 게임 제어기들을 포함하지만, 이에 한정되지는 않는다.
본 명세서 전반에 걸쳐서, 예를 들어, "일 실시예", "실시예", "하나 이상의 실시예", "일부 실시예들"에 대한 언급은, 특정한 특징이 본 발명의 실시에 포함될 수 있지만 반드시 그럴 필요는 없다는 것을 나타낸다. 유사하게, 본 개시를 간소화하고 다양한 본 발명의 양태들의 이해를 도울 목적으로, 설명에서는 다양한 특징들이 때때로 단일 실시예에서, 도면, 또는 그의 설명에서 함께 그룹화된다. 그러나 이러한 개시의 방법은 본 발명이 각각의 청구항에 명백하게 기재된 것보다 많은 피처를 요구하는 의도를 반영하는 것으로서 해석되어서는 안 된다. 오히려, 이하 청구항들에 반영된 바와 같이, 본 발명의 양태들은 단일 개시된 실시예의 모든 특징들보다 적은 것에 있다. 따라서, 상세한 설명에 후속하는 청구항들은 이로써 이 상세한 설명 내로 명백하게 통합되고, 각각의 청구항은 본 발명의 별개의 실시예로서 자립한다.
예시적인 실시예들
다음의 예들은 추가 실시예들에 관한 것이다. 이러한 예들에서의 상세 사항들은 하나 이상의 실시예에서 어디에서든 사용될 수 있다.
예 1은 패킹된 데이터 정렬 플러스 계산 명령어를 디코딩하는 디코드 유닛을 포함하는 프로세서 또는 다른 장치이다. 상기 패킹된 데이터 정렬 플러스 계산 명령어는 제1 복수의 데이터 요소를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트를 지시하는 것, 제2 복수의 데이터 요소를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트를 지시하는 것, 적어도 하나의 데이터 요소 오프셋을 지시하는 것, 및 목적지 저장 위치를 지시하는 것이다. 상기 장치는 상기 디코드 유닛과 결합된 실행 유닛을 또한 포함한다. 상기 실행 유닛은, 상기 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여, 결과 패킹된 데이터 피연산자를 상기 목적지 저장 위치에 저장하는 것이다. 상기 결과 패킹된 데이터 피연산자는 소스 패킹된 데이터 피연산자들의 상기 제1 세트의 데이터 요소와 소스 패킹된 데이터 피연산자들의 상기 제2 세트의 데이터 요소의 쌍에 대해 수행된 연산의 값을 각각 갖는 것인 복수의 결과 데이터 요소를 포함하는 것이다. 상기 실행 유닛은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 중 적어도 대응하는 하나의 세트에 상기 적어도 하나의 데이터 요소 오프셋을 적용하는 것이다. 상기 적어도 하나의 데이터 요소 오프셋은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 내의 각 쌍의 데이터 요소들 간의 대응의 임의의 결여를 해소(counteract)하는 것이다.
예 2는 예 1의 프로세서를 포함하고, 상기 디코드 유닛은 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제2 세트에 대응하는 것인 단일 데이터 요소 오프셋만을 지시하는 것인 상기 명령어를 디코딩하는 것이다. 또한, 옵션으로 각 쌍의 상기 데이터 요소들은 상기 적어도 하나의 데이터 요소 오프셋에 의해 해소되는 것인 대응의 결여를 갖는 것이다.
예 3은 예 1의 프로세서를 포함하고, 상기 디코드 유닛은 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제1 세트에 대응하는 것인 제1 데이터 요소 오프셋, 및 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제2 세트에 대응하는 것인 제2 데이터 요소 오프셋을 지시하는 것인 상기 명령어를 디코딩하는 것이다.
예 4는 예 3의 프로세서를 포함하고, 각 쌍의 상기 데이터 요소들은 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제1 세트에 상기 제1 데이터 요소 오프셋의 적용 및 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제2 세트에 상기 제2 데이터 요소 오프셋의 적용에 의해 해소되는 것인 대응의 결여를 갖는 것이다.
예 5는 예 1의 프로세서를 포함하고, 상기 디코드 유닛은 제1 소스 패킹된 데이터 피연산자 및 제2 소스 패킹된 데이터 피연산자를 포함하는 것인 상기 소스 패킹된 데이터 피연산자들의 상기 제1 세트, 및 제3 소스 패킹된 데이터 피연산자 및 제4 소스 패킹된 데이터 피연산자를 포함하는 것인 상기 소스 패킹된 데이터 피연산자들의 상기 제2 세트를 지시하는 것인 상기 명령어를 디코딩하는 것이다.
예 6은 예 1의 프로세서를 포함하고, 상기 디코드 유닛은 단일 제1 소스 패킹된 데이터 피연산자만을 포함하는 것인 상기 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제1 세트, 및 제2 소스 패킹된 데이터 피연산자 및 제3 소스 패킹된 데이터 피연산자를 포함하는 것인 상기 소스 패킹된 데이터 피연산자들의 상기 제2 세트를 지시하는 것인 상기 명령어를 디코딩하는 것이다.
예 7은 예 6의 프로세서를 포함하고, 상기 결과 패킹된 데이터 피연산자는 상기 제1 소스 패킹된 데이터 피연산자 및 상기 제2 소스 패킹된 데이터 피연산자 각각과 동일한 수의 데이터 요소를 옵션으로 포함하는 것이다.
예 8은 예 1의 프로세서를 포함하고, 상기 디코드 유닛은 단일 제1 소스 패킹된 데이터 피연산자만을 포함하는 것인 상기 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제1 세트, 및 단일 제2 소스 패킹된 데이터 피연산자만을 포함하는 것인 상기 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제2 세트를 지시하는 것인 상기 명령어를 디코딩하는 것이고, 상기 실행 유닛은 상기 제2 소스 패킹된 데이터 피연산자보다 적은 수의 데이터 요소를 옵션으로 갖는 것인 상기 결과 패킹된 데이터 피연산자를 저장하는 것이다.
예 9는 예 1 내지 예 8 중 어느 하나의 프로세서를 포함하고, 상기 디코드 유닛은 복수의 상이한 데이터 요소 오프셋 값 중 어느 하나를 가질 수 있는 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋을 지시하는 것인 상기 명령어를 디코딩하는 것이다.
예 10은 예 1 내지 예 8 중 어느 하나의 프로세서를 포함하고, 상기 디코드 유닛은: (1) 적어도 1 및 2 데이터 요소 위치들 중 어느 하나의 최하위 비트 위치를 향한 방향의 오프셋; (2) 0 데이터 요소 위치들의 오프셋; 및 (3) 적어도 1 및 2 데이터 요소 위치들 중 어느 하나의 최상위 비트 위치를 향한 방향의 오프셋 중 어느 하나인 것이 가능한 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋을 지시하는 것인 상기 명령어를 디코딩하는 것이다.
예 11은 예 1 내지 예 8 중 어느 하나의 프로세서를 포함하고, 상기 디코드 유닛은: (1) 적어도 1, 2, 3, 및 4 데이터 요소 위치들 중 어느 하나의 최하위 비트 위치를 향한 방향의 오프셋; (2) 0 데이터 요소 위치들의 오프셋; 및 (3) 적어도 1, 2, 3, 및 4 데이터 요소 위치들 중 어느 하나의 최상위 비트 위치를 향한 방향의 오프셋 중 어느 하나인 것이 가능한 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋을 지시하는 것인 상기 명령어를 디코딩하는 것이다.
예 12는 예 1 내지 예 8 중 어느 하나의 프로세서를 포함하고, 상기 실행 유닛은, 상기 명령어에 응답하여, 상기 데이터 요소들의 쌍에 대해 수행된 상기 연산의 값을 각각 갖는 것인 상기 결과 데이터 요소들을 갖는 것인 상기 결과 패킹된 데이터 피연산자를 저장하는 것이고, 상기 연산은 옵션으로 더하기, 빼기, 곱하기, 나누기, 및 평균 연산 중 하나인 것이다.
예 13은 예 1 내지 예 8 중 어느 하나의 프로세서를 포함하고, 상기 실행 유닛은, 상기 명령어가 디코딩되는 것에 응답하여, 각 쌍의 데이터 요소들에 대해 수직 단일 명령어, 다중 데이터(SIMD) 연산들을 수행하는 것이다.
예 14는 예 1 내지 예 8 중 어느 하나의 프로세서를 포함하고, 상기 디코드 유닛은 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋의 값을 지시하는 즉치를 옵션으로 갖는 것인 상기 명령어를 디코딩하는 것이다.
예 15는 예 1 내지 예 8 중 어느 하나의 프로세서를 포함하고, 상기 디코드 유닛은 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋의 값을 지시하는 것인 값을 저장하는 것인 스칼라 레지스터를 옵션으로 지시하는 것인 상기 명령어를 디코딩하는 것이다.
예 16은 예 1 내지 예 8 중 어느 하나의 프로세서를 포함하고, 상기 실행 유닛을 갖는 디지털 신호 프로세서의 이미지 프로세서 유닛을 추가로 포함한다.
예 17은 예 1 내지 예 8 중 어느 하나의 프로세서를 포함하고, 분기들을 예측하는 옵션의 분기 예측 유닛을 추가로 포함한다. 상기 프로세서는 상기 패킹된 데이터 정렬 플러스 계산 명령어를 포함하는 명령어들을 프리페치하기 위해 상기 분기 예측 유닛과 결합된 옵션의 명령어 프리페치 유닛을 또한 포함할 수 있다. 상기 프로세서는 명령어들을 저장하기 위해 상기 명령어 프리페치 유닛과 결합된 옵션의 레벨 1(L1) 명령어 캐시를 또한 포함할 수 있다. 상기 프로세서는 데이터를 저장하는 옵션의 L1 데이터 캐시를 또한 포함할 수 있다. 상기 프로세서는 데이터 및 명령어들을 저장하는 옵션의 레벨 2(L2) 캐시를 또한 포함할 수 있다. 상기 프로세서는 상기 L1 명령어 캐시 및 상기 L2 캐시 중 하나로부터 상기 패킹된 데이터 정렬 플러스 계산 명령어를 페치하고, 상기 패킹된 데이터 정렬 플러스 계산 명령어를 상기 디코드 유닛에 제공하기 위해 상기 디코드 유닛, 상기 L1 명령어 캐시, 및 상기 L2 캐시에 결합된 명령어 페치 유닛을 또한 포함할 수 있다. 상기 프로세서는 레지스터들을 리네이밍하는 옵션의 레지스터 리네임 유닛을 또한 포함할 수 있다. 상기 프로세서는 실행을 위해 상기 패킹된 데이터 정렬 플러스 계산 명령어로부터 디코딩된 하나 이상의 연산을 스케줄링하는 옵션의 스케줄러를 또한 포함할 수 있다. 상기 프로세서는 상기 패킹된 데이터 정렬 플러스 계산 명령어의 실행 결과들을 커밋하는 옵션의 커밋 유닛을 또한 포함할 수 있다.
예 18은 패킹된 데이터 정렬 플러스 계산 명령어를 수신하는 단계를 포함하는 프로세서에서의 방법이다. 상기 패킹된 데이터 정렬 플러스 계산 명령어는 제1 복수의 데이터 요소를 포함하는 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트를 지시하는 것, 제2 복수의 데이터 요소를 포함하는 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트를 지시하는 것, 및 적어도 하나의 데이터 요소 오프셋을 지시하는 것, 및 목적지 저장 위치를 지시하는 것일 수 있다. 상기 방법은 상기 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여 결과 패킹된 데이터 피연산자가 상기 목적지 저장 위치에 저장하는 단계를 또한 포함할 수 있다. 상기 결과 패킹된 데이터 피연산자는 소스 패킹된 데이터 피연산자들의 상기 제1 세트의 데이터 요소와 소스 패킹된 데이터 피연산자들의 상기 제2 세트의 데이터 요소의 쌍에 대해 수행된 연산의 값을 각각 갖는 복수의 결과 데이터 요소를 포함하는 것이다. 각 쌍의 상기 데이터 요소들은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 내의 대응하지 않는 데이터 요소 위치들에 있었다. 상기 대응하지 않는 데이터 요소 위치들은 상기 패킹된 데이터 정렬 플러스 계산 명령어에 의해 지시된 상기 적어도 하나의 데이터 요소 오프셋에 기초하여 달랐다.
예 19는 예 18의 방법을 포함하고, 수신하는 단계는 단일 데이터 요소 오프셋만을 지시하는 상기 명령어를 수신하는 단계를 포함하고, 상기 대응하지 않는 데이터 요소 위치들은 상기 단일 데이터 요소 오프셋만큼 다르다.
예 20은 예 18의 방법을 포함하고, 수신하는 단계는 상기 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제1 세트에 대응하는 제1 데이터 요소 오프셋, 및 상기 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제2 세트에 대응하는 제2 데이터 요소 오프셋을 지시하는 상기 명령어를 수신하는 단계를 포함한다. 상기 대응하지 않는 데이터 요소 위치들은 옵션으로 상기 제1 데이터 요소 오프셋과 상기 제2 데이터 요소 오프셋 간의 차이만큼 다르다.
예 21은 예 18의 방법을 포함하고, 수신하는 단계는 상기 소스 패킹된 데이터 피연산자들의 상기 제1 세트의 제1 소스 패킹된 데이터 피연산자와 제2 소스 패킹된 데이터 피연산자 둘 다를 지시하는, 그리고 상기 소스 패킹된 데이터 피연산자들의 상기 제2 세트의 제3 소스 패킹된 데이터 피연산자와 제4 소스 패킹된 데이터 피연산자 둘 다를 지시하는 상기 명령어를 수신하는 단계를 포함한다.
예 22는 예 18의 방법을 포함하고, 수신하는 단계는 복수의 상이한 데이터 요소 오프셋 값 중 어느 하나일 수 있는 데이터 요소 오프셋을 지시하는 상기 명령어를 수신하는 단계를 포함한다.
예 23은 예 18 내지 예 22 중 어느 하나의 방법을 포함하고, 저장하는 단계는 상기 데이터 요소들의 쌍에 대해 수행된 상기 연산의 값을 각각 갖는 상기 결과 데이터 요소들을 저장하는 단계를 포함하고, 상기 연산은 옵션으로 더하기 연산, 빼기 연산, 곱하기 연산, 나누기 연산, 및 평균 연산 중 하나이다.
예 24는 예 18 내지 예 22 중 어느 하나의 방법을 포함하고, 상기 데이터 요소들의 쌍들에 대한 상기 연산들을 수직 단일 명령어, 다중 데이터(SIMD) 연산들로서 수행하는 단계를 추가로 포함한다.
예 25는 예 18 내지 예 22 중 어느 하나의 방법을 포함하고, 디지털 신호 프로세서를 이용하여 이미지 처리 동안 픽셀 필터링 동안 수행된다.
예 26은 인터커넥트 및 상기 인터커넥트와 결합된 프로세서를 포함하는, 명령어들을 처리하는 시스템이다. 상기 프로세서는 제1 복수의 데이터 요소를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트를 지시하는 것, 제2 복수의 데이터 요소를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트를 지시하는 것, 적어도 하나의 데이터 요소 오프셋을 지시하는 것, 및 목적지 저장 위치를 지시하는 것인 패킹된 데이터 정렬 플러스 계산 명령어를 수신하는 것이다. 상기 프로세서는, 상기 명령어에 응답하여, 결과 패킹된 데이터 피연산자를 상기 목적지 저장 위치에 저장하는 것이다. 상기 결과 패킹된 데이터 피연산자는 소스 패킹된 데이터 피연산자들의 상기 제1 세트의 데이터 요소와 소스 패킹된 데이터 피연산자들의 상기 제2 세트의 데이터 요소의 쌍에 대해 수행된 연산의 값을 각각 갖는 것인 복수의 결과 데이터 요소를 포함하는 것이다. 상기 프로세서는 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 중 적어도 대응하는 하나의 세트에 상기 적어도 하나의 데이터 요소 오프셋을 적용하는 것이다. 상기 적어도 하나의 데이터 요소 오프셋은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 내의 각 쌍의 데이터 요소들 간의 대응의 임의의 결여를 해소(counteract)하는 것이다. 상기 시스템은 상기 인터커넥트와 결합된 동적 랜덤 액세스 메모리(DRAM)를 또한 포함한다. 상기 DRAM은 픽셀 필터 알고리즘을 수행하는 명령어들의 세트를 저장한다. 상기 명령어들의 세트는, 상기 프로세서에 의해 실행될 때, 상기 프로세서로 하여금 상이한 오프셋을 각각 갖는 상기 패킹된 데이터 정렬 플러스 계산 명령어의 다수의 인스턴스를 수행하게 하는 것이다.
예 27은 예 26의 시스템을 포함하고, 상기 명령어는 복수의 상이한 값 중 어느 하나일 수 있는 제1 데이터 요소 오프셋을 지시한다. 각 쌍의 상기 데이터 요소들은 옵션으로 소스 피연산자들의 상기 제1 및 제2 세트들 내의 대응하지 않는 데이터 요소 위치들에 있을 수 있다.
예 28은 비일시적 머신 판독 가능 저장 매체를 포함하는 제조 물품이고, 상기 비일시적 머신 판독 가능 저장 매체는 패킹된 데이터 정렬 플러스 계산 명령어를 저장한다. 상기 명령어는 제1 복수의 데이터 요소를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트를 지시하는 것, 제2 복수의 데이터 요소를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트를 지시하는 것, 적어도 하나의 데이터 요소 오프셋을 지시하는 것, 및 목적지 저장 위치를 지시하는 것이다. 상기 명령어는 머신에 의해 실행되는 경우 상기 머신으로 하여금 결과 패킹된 데이터 피연산자를 상기 목적지 저장 위치에 저장하는 것을 포함하는 연산들을 수행하게 하는 것이다. 상기 결과 패킹된 데이터 피연산자는 소스 패킹된 데이터 피연산자들의 상기 제1 세트의 데이터 요소와 소스 패킹된 데이터 피연산자들의 상기 제2 세트의 대응하지 않는 데이터 요소의 쌍에 대해 수행된 연산의 값을 각각 갖는 것인 복수의 결과 데이터 요소를 포함하는 것이다. 각 쌍의 상기 데이터 요소들은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 내의 대응하지 않는 데이터 요소 위치들에 있었던 것이다. 상기 대응하지 않는 데이터 요소 위치들은 상기 패킹된 데이터 정렬 플러스 계산 명령어에 의해 지시되는 상기 적어도 하나의 데이터 요소 오프셋에 기초하여 달랐던 것이다.
예 29는 예 28의 제조 물품을 포함하고, 상기 명령어는: (1) 적어도 1 및 2 데이터 요소 위치들 중 어느 하나의 최하위 비트 위치를 향한 방향의 오프셋; (2) 0 데이터 요소 위치들의 오프셋; 및 (3) 적어도 1 및 2 데이터 요소 위치들 중 어느 하나의 최상위 비트 위치를 향한 방향의 오프셋 중 어느 하나인 것이 가능한 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋을 지시하는 것이다.
예 30은 패킹된 데이터 정렬 플러스 계산 명령어를 디코딩하는 디코드 유닛을 포함하는 프로세서 또는 다른 장치이다. 상기 패킹된 데이터 정렬 플러스 계산 명령어는 제1 복수의 데이터 요소를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트를 지시하는 것, 제2 복수의 데이터 요소를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트를 지시하는 것, 적어도 하나의 데이터 요소 오프셋을 지시하는 것, 및 목적지 저장 위치를 지시하는 것이다. 상기 프로세서는 상기 디코드 유닛과 결합된 실행 유닛을 또한 포함한다. 상기 실행 유닛은, 상기 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여, 결과 패킹된 데이터 피연산자를 상기 목적지 저장 위치에 저장하는 것이다. 상기 결과 패킹된 데이터 피연산자는 소스 패킹된 데이터 피연산자들의 상기 제1 세트의 데이터 요소와 소스 패킹된 데이터 피연산자들의 상기 제2 세트의 데이터 요소의 쌍에 대해 수행된 연산의 값을 각각 갖는 것인 복수의 결과 데이터 요소를 포함하는 것이다. 각 쌍의 상기 대응하지 않는 데이터 요소들은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트 내의 대응하지 않는 데이터 요소 위치들에 있는 것이다. 상기 대응하지 않는 데이터 요소 위치들은 상기 패킹된 데이터 정렬 플러스 계산 명령어에 의해 지시된 상기 적어도 하나의 데이터 요소 오프셋에 기초하여 다른 것이다.
예 31은 예 18 내지 예 25 중 어느 하나의 방법을 수행하는 또는 수행하도록 동작하는 프로세서 또는 다른 장치이다.
예 32는 예 18 내지 예 25 중 어느 하나의 방법을 수행하기 위한 수단을 포함하는 프로세서 또는 다른 장치이다.
예 33은 프로세서, 컴퓨터 시스템, 전자 디바이스, 또는 다른 머신에 의해 실행되면 및/또는 실행될 때, 상기 머신으로 하여금 예 18 내지 예 25 중 어느 하나의 방법을 수행하게 하도록 명령어를 옵션으로 저장하거나 달리 제공하는, 옵션으로 비일시적인 머신 판독 가능 매체를 제조 물품이다.
예 34는 실질적으로 본 명세서에 설명된 바와 같은 프로세서 또는 다른 장치이다.
예 35는 실질적으로 본 명세서에 설명된 바와 같은 임의의 방법을 수행하도록 동작하는 프로세서 또는 다른 장치이다.
예 36은 실질적으로 본 명세서에 설명된 바와 같은 임의의 패킹된 데이터 정렬 플러스 계산 명령어를 수행하는(예를 들어, 수행하는 컴포넌트들을 갖는 또는 수행하도록 동작하는) 프로세서 또는 다른 장치이다.
예 37은 제1 명령어 세트의 명령어들을 디코딩하는 디코드 유닛을 갖는 프로세서를 포함하는 컴퓨터 시스템 또는 다른 전자 디바이스이다. 상기 프로세서는 하나 이상의 실행 유닛을 또한 갖는다. 상기 전자 디바이스는 상기 프로세서와 결합된 저장 디바이스를 또한 포함한다. 상기 저장 디바이스는 실질적으로 본 명세서에 개시된 바와 같은 상기 패킹된 데이터 정렬 플러스 계산 명령어들 중 임의의 것일 수 있는, 그리고 제2 명령어 세트의 것인 제1 명령어를 저장하는 것이다. 상기 저장 디바이스는 또한 상기 제1 명령어를 상기 제1 명령어 세트의 하나 이상의 명령어로 변환하기 위한 명령어들을 저장하는 것이다. 상기 제1 명령어 세트의 상기 하나 이상의 명령어는, 상기 프로세서에 의해 수행될 때, 상기 프로세서로 하여금 상기 제1 명령어에 의해 지정된 바와 같은 아키텍처 영향을 갖게 하는 것이다.

Claims (25)

  1. 프로세서로서,
    패킹된 데이터 정렬 플러스 계산 명령어를 디코딩하는 디코드 유닛 - 상기 패킹된 데이터 정렬 플러스 계산 명령어는 제1 복수의 데이터 요소를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트를 지시하고, 제2 복수의 데이터 요소를 포함하는 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트를 지시하고, 적어도 하나의 데이터 요소 오프셋을 지시하고, 목적지 저장 위치를 지시하는 것이고, 상기 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제1 세트는 단일 제1 소스 패킹된 데이터 피연산자만을 포함하고, 상기 하나 이상의 소스 패킹된 데이터 피연산자들의 상기 제2 세트는 제2 소스 패킹된 데이터 피연산자 및 제3 소스 패킹된 데이터 피연산자를 포함함 -; 및
    상기 디코드 유닛과 결합된 실행 유닛을 포함하고, 상기 실행 유닛은, 상기 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여, 결과 패킹된 데이터 피연산자를 상기 목적지 저장 위치에 저장하는 것이고, 상기 결과 패킹된 데이터 피연산자는 소스 패킹된 데이터 피연산자들의 상기 제1 세트의 데이터 요소와 소스 패킹된 데이터 피연산자들의 상기 제2 세트의 데이터 요소의 쌍에 대해 수행된 연산의 값을 각각 갖는 것인 복수의 결과 데이터 요소를 포함하는 것이고, 상기 실행 유닛은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 중 적어도 대응하는 하나의 세트에 상기 적어도 하나의 데이터 요소 오프셋을 적용하는 것이고, 상기 적어도 하나의 데이터 요소 오프셋은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 내의 각 쌍의 상기 데이터 요소들 간의 대응의 임의의 결여를 해소(counteract)하는 것인, 프로세서.
  2. 제1항에 있어서, 상기 디코드 유닛은 상기 소스 패킹된 데이터 피연산자들의 상기 제2 세트에 대응하는 것인 단일 데이터 요소 오프셋만을 지시하는 것인 상기 명령어를 디코딩하는 것이고, 각 쌍의 상기 데이터 요소들은 상기 적어도 하나의 데이터 요소 오프셋에 의해 해소되는 것인 대응의 결여를 갖는 것인, 프로세서.
  3. 제1항에 있어서, 상기 디코드 유닛은 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제1 세트에 대응하는 것인 제1 데이터 요소 오프셋, 및 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제2 세트에 대응하는 것인 제2 데이터 요소 오프셋을 지시하는 것인 상기 명령어를 디코딩하는 것인, 프로세서.
  4. 제3항에 있어서, 각 쌍의 상기 데이터 요소들은 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제1 세트에 상기 제1 데이터 요소 오프셋의 적용 및 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제2 세트에 상기 제2 데이터 요소 오프셋의 적용에 의해 해소되는 것인 대응의 결여를 갖는 것인, 프로세서.
  5. 삭제
  6. 삭제
  7. 제1항에 있어서, 상기 결과 패킹된 데이터 피연산자는 상기 제1 소스 패킹된 데이터 피연산자 및 상기 제2 소스 패킹된 데이터 피연산자 각각과 동일한 수의 데이터 요소를 포함하는 것인, 프로세서.
  8. 삭제
  9. 제1항에 있어서, 상기 디코드 유닛은 복수의 상이한 데이터 요소 오프셋 값 중 어느 하나를 가질 수 있는 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋을 지시하는 것인 상기 명령어를 디코딩하는 것인, 프로세서.
  10. 제1항에 있어서, 상기 디코드 유닛은:
    적어도 1 및 2 데이터 요소 위치들 중 어느 하나의 최하위 비트 위치를 향한 방향의 오프셋;
    0 데이터 요소 위치들의 오프셋; 및
    적어도 1 및 2 데이터 요소 위치들 중 어느 하나의 최상위 비트 위치를 향한 방향의 오프셋
    중 어느 하나인 것이 가능한 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋을 지시하는 것인 상기 명령어를 디코딩하는 것인, 프로세서.
  11. 제1항에 있어서, 상기 디코드 유닛은:
    적어도 1, 2, 3, 및 4 데이터 요소 위치들 중 어느 하나의 최하위 비트 위치를 향한 방향의 오프셋;
    0 데이터 요소 위치들의 오프셋; 및
    적어도 1, 2, 3, 및 4 데이터 요소 위치들 중 어느 하나의 최상위 비트 위치를 향한 방향의 오프셋
    중 어느 하나인 것이 가능한 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋을 지시하는 것인 상기 명령어를 디코딩하는 것인, 프로세서.
  12. 제1항에 있어서, 상기 실행 유닛은, 상기 명령어에 응답하여, 상기 데이터 요소들의 쌍에 대해 수행된 상기 연산의 값을 각각 갖는 것인 상기 결과 데이터 요소들을 갖는 것인 상기 결과 패킹된 데이터 피연산자를 저장하는 것이고, 상기 연산은 더하기, 빼기, 곱하기, 나누기, 및 평균 연산 중 하나인 것인, 프로세서.
  13. 제1항에 있어서, 상기 실행 유닛은, 상기 명령어가 디코딩되는 것에 응답하여, 각 쌍의 상기 데이터 요소들에 대해 수직 단일 명령어, 다중 데이터(SIMD) 연산들을 수행하는 것인, 프로세서.
  14. 제1항에 있어서, 상기 디코드 유닛은 (1) 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋의 값을 지시하는 즉치를 갖는 것 및 (2) 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋을 지시하는 것인 값을 저장하는 것인 스칼라 레지스터를 지시하는 것 중 적어도 하나인 상기 명령어를 디코딩하는 것인, 프로세서.
  15. 제1항에 있어서, 상기 실행 유닛을 갖는 디지털 신호 프로세서의 이미지 프로세서 유닛을 추가로 포함하는, 프로세서.
  16. 프로세서에서의 방법으로서,
    패킹된 데이터 정렬 플러스 계산 명령어를 수신하는 단계 - 상기 패킹된 데이터 정렬 플러스 계산 명령어는 제1 복수의 데이터 요소를 포함하는 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트를 지시하고, 제2 복수의 데이터 요소를 포함하는 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트를 지시하고, 적어도 하나의 데이터 요소 오프셋을 지시하고, 목적지 저장 위치를 지시하는 것이고, 상기 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제1 세트는 단일 제1 소스 패킹된 데이터 피연산자만을 포함하고, 상기 하나 이상의 소스 패킹된 데이터 피연산자들의 상기 제2 세트는 제2 소스 패킹된 데이터 피연산자 및 제3 소스 패킹된 데이터 피연산자를 포함함 -; 및
    상기 패킹된 데이터 정렬 플러스 계산 명령어에 응답하여 결과 패킹된 데이터 피연산자를 상기 목적지 저장 위치에 저장하는 단계를 포함하고, 상기 결과 패킹된 데이터 피연산자는 소스 패킹된 데이터 피연산자들의 상기 제1 세트의 데이터 요소와 소스 패킹된 데이터 피연산자들의 상기 제2 세트의 데이터 요소의 쌍에 대해 수행된 연산의 값을 각각 갖는 복수의 결과 데이터 요소를 포함하는 것이고, 각 쌍의 상기 데이터 요소들은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 내의 대응하지 않는 데이터 요소 위치들에 있었고, 상기 대응하지 않는 데이터 요소 위치들은 상기 패킹된 데이터 정렬 플러스 계산 명령어에 의해 지시된 상기 적어도 하나의 데이터 요소 오프셋에 기초하여 달라지고, 상기 적어도 하나의 데이터 요소 오프셋은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 내의 각 쌍의 상기 데이터 요소들 간의 대응의 임의의 결여를 해소하는 것인, 방법.
  17. 제16항에 있어서, 수신하는 단계는 단일 데이터 요소 오프셋만을 지시하는 상기 명령어를 수신하는 단계를 포함하고, 상기 대응하지 않는 데이터 요소 위치들은 상기 단일 데이터 요소 오프셋만큼 다른, 방법.
  18. 제16항에 있어서, 수신하는 단계는 상기 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제1 세트에 대응하는 제1 데이터 요소 오프셋, 및 상기 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제2 세트에 대응하는 제2 데이터 요소 오프셋을 지시하는 상기 명령어를 수신하는 단계를 포함하고, 상기 대응하지 않는 데이터 요소 위치들은 상기 제1 데이터 요소 오프셋과 상기 제2 데이터 요소 오프셋 간의 차이만큼 다른, 방법.
  19. 삭제
  20. 제16항에 있어서, 저장하는 단계는 상기 데이터 요소들의 쌍에 대해 수행된 상기 연산의 값을 각각 갖는 상기 결과 데이터 요소들을 저장하는 단계를 포함하고, 상기 연산은 더하기 연산, 빼기 연산, 곱하기 연산, 나누기 연산, 및 평균 연산 중 하나인, 방법.
  21. 제16항에 있어서, 상기 데이터 요소들의 쌍들에 대한 연산들을 수직 단일 명령어, 다중 데이터(SIMD) 연산들로서 수행하는 단계를 추가로 포함하고, 상기 방법은 디지털 신호 프로세서를 이용하여 이미지 처리 동안 픽셀 필터링 동안 수행되는, 방법.
  22. 시스템으로서,
    인터커넥트;
    상기 인터커넥트와 결합된 제1항의 프로세서; 및
    상기 인터커넥트와 결합된 동적 랜덤 액세스 메모리(DRAM)
    를 포함하는 시스템.
  23. 제22항에 있어서,
    상기 명령어는 복수의 상이한 값 중 어느 하나일 수 있는 제1 데이터 요소 오프셋을 지시하고, 각 쌍의 상기 데이터 요소들은 소스 피연산자들의 상기 제1 및 제2 세트들 내의 대응하지 않는 데이터 요소 위치들에 있는, 시스템.
  24. 비일시적 컴퓨터 판독 가능 저장 매체로서, 상기 비일시적 컴퓨터 판독 가능 저장 매체는 패킹된 데이터 정렬 플러스 계산 명령어를 저장하고,
    상기 명령어는 제1 복수의 데이터 요소를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제1 세트를 지시하고, 제2 복수의 데이터 요소를 포함하는 것인 하나 이상의 소스 패킹된 데이터 피연산자의 제2 세트를 지시하고, 적어도 하나의 데이터 요소 오프셋을 지시하고, 목적지 저장 위치를 지시하고, 상기 명령어는 컴퓨터에 의해 실행되는 경우 상기 컴퓨터로 하여금:
    결과 패킹된 데이터 피연산자를 상기 목적지 저장 위치에 저장하는 것을 포함하는 연산들을 수행하게 하는 것이고, 상기 결과 패킹된 데이터 피연산자는 소스 패킹된 데이터 피연산자들의 상기 제1 세트로부터의 데이터 요소와 소스 패킹된 데이터 피연산자들의 상기 제2 세트로부터의 데이터 요소의 쌍에 대해 수행된 연산의 값을 각각 갖는 것인 복수의 결과 데이터 요소를 포함하고, 상기 하나 이상의 소스 패킹된 데이터 피연산자의 상기 제1 세트는 단일 제1 소스 패킹된 데이터 피연산자만을 포함하고, 상기 하나 이상의 소스 패킹된 데이터 피연산자들의 상기 제2 세트는 제2 소스 패킹된 데이터 피연산자 및 제3 소스 패킹된 데이터 피연산자를 포함하고, 각 쌍의 상기 데이터 요소들은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 내의 대응하지 않는 데이터 요소 위치들에 있었던 것이고, 상기 대응하지 않는 데이터 요소 위치들은 상기 패킹된 데이터 정렬 플러스 계산 명령어에 의해 지시되는 상기 적어도 하나의 데이터 요소 오프셋에 기초하여 달라지고, 상기 적어도 하나의 데이터 요소 오프셋은 소스 패킹된 데이터 피연산자들의 상기 제1 및 제2 세트들 내의 각 쌍의 상기 데이터 요소들 간의 대응의 임의의 결여를 해소하는 것인, 비일시적 컴퓨터 판독 가능 저장 매체.
  25. 제24항에 있어서,
    상기 명령어는:
    적어도 1 및 2 데이터 요소 위치들 중 어느 하나의 최하위 비트 위치를 향한 방향의 오프셋;
    0 데이터 요소 위치들의 오프셋; 및
    적어도 1 및 2 데이터 요소 위치들 중 어느 하나의 최상위 비트 위치를 향한 방향의 오프셋
    중 어느 하나인 것이 가능한 상기 적어도 하나의 데이터 요소 오프셋의 데이터 요소 오프셋을 지시하는, 비일시적 컴퓨터 판독 가능 저장 매체.
KR1020177031706A 2015-06-02 2016-05-09 패킹된 데이터 정렬 플러스 계산 명령어, 프로세서, 방법, 및 시스템 KR102556033B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020237023610A KR102592056B1 (ko) 2015-06-02 2016-05-09 패킹된 데이터 정렬 플러스 계산 명령어, 프로세서,방법, 및 시스템

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/728,693 2015-06-02
US14/728,693 US10001995B2 (en) 2015-06-02 2015-06-02 Packed data alignment plus compute instructions, processors, methods, and systems
PCT/US2016/031422 WO2016195921A1 (en) 2015-06-02 2016-05-09 Packed data alignment plus compute instructions, processors, methods, and systems

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020237023610A Division KR102592056B1 (ko) 2015-06-02 2016-05-09 패킹된 데이터 정렬 플러스 계산 명령어, 프로세서,방법, 및 시스템

Publications (2)

Publication Number Publication Date
KR20180014690A KR20180014690A (ko) 2018-02-09
KR102556033B1 true KR102556033B1 (ko) 2023-07-17

Family

ID=57441550

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020237023610A KR102592056B1 (ko) 2015-06-02 2016-05-09 패킹된 데이터 정렬 플러스 계산 명령어, 프로세서,방법, 및 시스템
KR1020177031706A KR102556033B1 (ko) 2015-06-02 2016-05-09 패킹된 데이터 정렬 플러스 계산 명령어, 프로세서, 방법, 및 시스템

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020237023610A KR102592056B1 (ko) 2015-06-02 2016-05-09 패킹된 데이터 정렬 플러스 계산 명령어, 프로세서,방법, 및 시스템

Country Status (7)

Country Link
US (2) US10001995B2 (ko)
EP (1) EP3304284B1 (ko)
JP (1) JP6814369B2 (ko)
KR (2) KR102592056B1 (ko)
CN (2) CN114816523A (ko)
TW (1) TWI697835B (ko)
WO (1) WO2016195921A1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10001995B2 (en) 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
CN113885833A (zh) * 2016-10-20 2022-01-04 英特尔公司 用于经融合的乘加的系统、装置和方法
WO2018154273A1 (en) * 2017-02-23 2018-08-30 Arm Limited Element by vector operations in a data processing apparatus
EP3428792B1 (en) * 2017-07-10 2022-05-04 Arm Ltd Testing bit values inside vector elements
GB2564853B (en) * 2017-07-20 2021-09-08 Advanced Risc Mach Ltd Vector interleaving in a data processing apparatus
US10691621B2 (en) * 2018-04-12 2020-06-23 Sony Interactive Entertainment Inc. Data cache segregation for spectre mitigation
US10678540B2 (en) * 2018-05-08 2020-06-09 Arm Limited Arithmetic operation with shift
US11048509B2 (en) * 2018-06-05 2021-06-29 Qualcomm Incorporated Providing multi-element multi-vector (MEMV) register file access in vector-processor-based devices
GB2589334B (en) * 2019-11-26 2022-01-05 Advanced Risc Mach Ltd Register-provided-opcode instruction

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120233443A1 (en) * 2001-10-29 2012-09-13 Julien Sebot Processor to execute shift right merge instructions
US20150095623A1 (en) * 2013-09-27 2015-04-02 Intel Corporation Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6009505A (en) * 1996-12-02 1999-12-28 Compaq Computer Corp. System and method for routing one operand to arithmetic logic units from fixed register slots and another operand from any register slot
US6014684A (en) * 1997-03-24 2000-01-11 Intel Corporation Method and apparatus for performing N bit by 2*N-1 bit signed multiplication
US6230253B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
US6446195B1 (en) * 2000-01-31 2002-09-03 Intel Corporation Dyadic operations instruction processor with configurable functional blocks
JP3779540B2 (ja) * 2000-11-08 2006-05-31 株式会社ルネサステクノロジ 複数レジスタ指定が可能なsimd演算方式
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7373369B2 (en) 2003-06-05 2008-05-13 International Business Machines Corporation Advanced execution of extended floating-point add operations in a narrow dataflow
GB2409064B (en) * 2003-12-09 2006-09-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing in parallel a data processing operation on data elements
US7328230B2 (en) * 2004-03-26 2008-02-05 Intel Corporation SIMD four-data element average instruction
US7257695B2 (en) * 2004-12-28 2007-08-14 Intel Corporation Register file regions for a processing system
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US9747105B2 (en) * 2009-12-17 2017-08-29 Intel Corporation Method and apparatus for performing a shift and exclusive or operation in a single instruction
US8667042B2 (en) * 2010-09-24 2014-03-04 Intel Corporation Functional unit for vector integer multiply add instruction
US20120254589A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian System, apparatus, and method for aligning registers
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
WO2013095563A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Packed data rearrangement control indexes precursors generation processors, methods, systems, and instructions
US9489196B2 (en) * 2011-12-23 2016-11-08 Intel Corporation Multi-element instruction with different read and write masks
CN104011653B (zh) * 2011-12-29 2017-09-15 英特尔公司 打包数据操作掩码比较处理器、方法、系统
CN104025033B (zh) * 2011-12-30 2017-11-21 英特尔公司 利用控制操纵的simd可变移位和循环
EP2798464B8 (en) * 2011-12-30 2019-12-11 Intel Corporation Packed rotate processors, methods, systems, and instructions
US9213523B2 (en) * 2012-06-29 2015-12-15 Intel Corporation Double rounded combined floating-point multiply and add
US9152382B2 (en) * 2012-10-31 2015-10-06 Intel Corporation Reducing power consumption in a fused multiply-add (FMA) unit responsive to input data values
US9513906B2 (en) * 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9632781B2 (en) 2013-02-26 2017-04-25 Qualcomm Incorporated Vector register addressing and functions based on a scalar register data value
US20140281418A1 (en) * 2013-03-14 2014-09-18 Shihjong J. Kuo Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions
US9477467B2 (en) 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
US9329865B2 (en) * 2013-06-11 2016-05-03 Intel Corporation Context control and parameter passing within microcode based instruction routines
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

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120233443A1 (en) * 2001-10-29 2012-09-13 Julien Sebot Processor to execute shift right merge instructions
US20150095623A1 (en) * 2013-09-27 2015-04-02 Intel Corporation Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions

Also Published As

Publication number Publication date
CN114816523A (zh) 2022-07-29
JP6814369B2 (ja) 2021-01-20
US10936312B2 (en) 2021-03-02
EP3304284A1 (en) 2018-04-11
CN107667345A (zh) 2018-02-06
JP2018516400A (ja) 2018-06-21
CN107667345B (zh) 2022-03-04
US10001995B2 (en) 2018-06-19
US20160357563A1 (en) 2016-12-08
EP3304284A4 (en) 2019-03-20
KR20180014690A (ko) 2018-02-09
KR102592056B1 (ko) 2023-10-23
WO2016195921A1 (en) 2016-12-08
US20190012172A1 (en) 2019-01-10
KR20230109791A (ko) 2023-07-20
EP3304284B1 (en) 2020-12-09
TW201710886A (zh) 2017-03-16
TWI697835B (zh) 2020-07-01

Similar Documents

Publication Publication Date Title
KR102556033B1 (ko) 패킹된 데이터 정렬 플러스 계산 명령어, 프로세서, 방법, 및 시스템
US11442734B2 (en) Packed data element predication processors, methods, systems, and instructions
US10153011B2 (en) Multiple register memory access instructions, processors, methods, and systems
CN109062608B (zh) 用于独立数据上递归计算的向量化的读和写掩码更新指令
CN107533460B (zh) 紧缩有限冲激响应(fir)滤波处理器、方法、系统和指令
US10228941B2 (en) Processors, methods, and systems to access a set of registers as either a plurality of smaller registers or a combined larger register
US20190103857A1 (en) Apparatus and method for performing horizontal filter operations

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