KR20240027145A - 벡터 결합 명령어를 위한 처리 장치, 방법 및 컴퓨터 프로그램 - Google Patents

벡터 결합 명령어를 위한 처리 장치, 방법 및 컴퓨터 프로그램 Download PDF

Info

Publication number
KR20240027145A
KR20240027145A KR1020247005230A KR20247005230A KR20240027145A KR 20240027145 A KR20240027145 A KR 20240027145A KR 1020247005230 A KR1020247005230 A KR 1020247005230A KR 20247005230 A KR20247005230 A KR 20247005230A KR 20240027145 A KR20240027145 A KR 20240027145A
Authority
KR
South Korea
Prior art keywords
source
data elements
data element
registers
elements
Prior art date
Application number
KR1020247005230A
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 KR20240027145A publication Critical patent/KR20240027145A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Complex Calculations (AREA)

Abstract

처리 장치, 방법 및 컴퓨터 프로그램이 제공된다. 장치는 명령어들을 디코딩하는 디코딩 회로; 및 명령어들에 의해 지정된 벡터 처리 연산들을 적용하는 처리 회로를 포함한다. 디코딩 회로는, 각각이 복수의 데이터 요소 위치들 내에 소스 데이터 요소들을 포함하는 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들, 및 하나 이상의 목적지 레지스터들을 지정하는 벡터 결합 명령어에 응답하여, 처리 회로로 하여금, 각각의 데이터 요소 위치에 대해, 각각의 소스 벡터 레지스터의 데이터 요소 위치로부터 제1 소스 데이터 요소들을 추출하고; 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하고; 제1 소스 데이터 요소들 및 제2 소스 데이터 요소들의 각각의 요소를 결합함으로써 결과 데이터 요소를 생성하고; 결과 데이터 요소를 하나 이상의 목적지 레지스터들의 데이터 요소 위치에 저장하게 하도록 구성된다.

Description

벡터 결합 명령어를 위한 처리 장치, 방법 및 컴퓨터 프로그램
처리 장치는 벡터 처리 연산을 수행하는 처리 회로를 구비할 수 있다. 그러한 연산은 하나 이상의 명령어의 효율적인 처리를 가능하게 하도록 설계된 처리 회로를 이용한 벡터 레지스터의 요소에 대한 연산을 포함할 수 있다.
몇몇 예시적인 구성에 따르면, 처리 장치로서, 명령어들을 디코딩하는 디코딩 회로; 및 명령어들에 의해 지정된 벡터 처리 연산들을 입력 데이터 벡터들 - 입력 데이터 벡터들은 입력 데이터 벡터들 내의 각자의 위치들에서 복수의 입력 데이터 항목들을 포함함 - 에 선택적으로 적용하는 처리 회로를 포함하며, 디코딩 회로는, 각각이 복수의 데이터 요소 위치들 내에 소스 데이터 요소들을 포함하는 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들, 및 하나 이상의 목적지 레지스터들을 지정하는 벡터 결합 명령어에 응답하여, 처리 회로로 하여금, 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에 대해, 각각의 소스 벡터 레지스터의 데이터 요소 위치로부터 제1 소스 데이터 요소들을 추출하고; 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하고; 결합 연산들을 수행하여 결과 데이터 요소를 생성하고 - 결과 데이터 요소는 제1 소스 데이터 요소들 및 제2 소스 데이터 요소들의 각각의 요소를 결합함으로써 계산됨 -; 결과 데이터 요소를 하나 이상의 목적지 레지스터들의 데이터 요소 위치에 저장하게 하는 제어 신호들을 생성하도록 구성되는, 처리 장치가 제공된다.
다른 예시적인 구성에 따르면, 명령어들을 디코딩하는 디코딩 회로, 및 명령어들에 의해 지정된 벡터 처리 연산들을 입력 데이터 벡터들 - 입력 데이터 벡터들은 입력 데이터 벡터들 내의 각자의 위치들에서 복수의 입력 데이터 항목들을 포함함 - 에 선택적으로 적용하는 처리 회로를 포함하는 처리 장치를 동작시키기 위한 방법으로서, 디코딩 회로를 사용하여, 각각이 복수의 데이터 요소 위치들 내에 소스 데이터 요소들을 포함하는 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들, 및 하나 이상의 목적지 레지스터들을 지정하는 벡터 결합 명령어에 응답하여, 처리 회로로 하여금, 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에 대해, 각각의 소스 벡터 레지스터의 데이터 요소 위치로부터 제1 소스 데이터 요소들을 추출하는 단계; 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하는 단계; 결합 연산들을 수행하여 결과 데이터 요소를 생성하는 단계 - 결과 데이터 요소는 제1 소스 데이터 요소들 및 제2 소스 데이터 요소들의 각각의 요소를 결합함으로써 계산됨 -; 및 결과 데이터 요소를 하나 이상의 목적지 레지스터들의 데이터 요소 위치에 저장하는 단계를 수행하게 하는 제어 신호들을 생성하는 단계를 포함하는, 방법이 제공된다.
다른 예시적인 구성에 따르면, 명령어 실행 환경을 제공하도록 호스트 처리 장치를 제어하기 위한 컴퓨터 프로그램으로서, 명령어들을 디코딩하는 디코딩 로직; 및 명령어들에 의해 지정된 벡터 처리 연산들을 입력 데이터 벡터들 - 입력 데이터 벡터들은 입력 데이터 벡터들 내의 각자의 위치들에서 복수의 입력 데이터 항목들을 포함함 - 에 선택적으로 적용하는 처리 로직을 포함하며, 디코딩 로직은, 각각이 복수의 데이터 요소 위치들 내에 소스 데이터 요소들을 포함하는 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들, 및 하나 이상의 목적지 레지스터들을 지정하는 벡터 결합 명령어에 응답하여, 처리 로직으로 하여금, 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에 대해, 각각의 소스 벡터 레지스터의 데이터 요소 위치로부터 제1 소스 데이터 요소들을 추출하고; 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하고; 결합 연산들을 수행하여 결과 데이터 요소를 생성하고 - 결과 데이터 요소는 제1 소스 데이터 요소들 및 제2 소스 데이터 요소들의 각각의 요소를 결합함으로써 계산됨 -; 결과 데이터 요소를 하나 이상의 목적지 레지스터들의 데이터 요소 위치에 저장하게 하는 제어 신호들을 생성하도록 구성되는, 컴퓨터 프로그램이 제공된다.
본 기술은 첨부 도면에 예시된 바와 같은 그의 실시예를 참조하여, 단지 예로서, 추가로 설명될 것이다.
도 1은 본 기술의 다양한 구성에 따른 처리 장치를 개략적으로 예시한다.
도 2는 본 기술의 다양한 구성에 따른 처리 회로의 추가 세부 사항을 개략적으로 예시한다.
도 3은 본 기술의 다양한 구성에 따른 처리 회로의 추가 세부 사항을 개략적으로 예시한다.
도 4a는 본 기술의 다양한 구성에 따른 벡터 결합 명령어를 수행하는 데 사용되는 처리 장치의 추가 세부 사항을 개략적으로 예시한다.
도 4b는 본 기술의 다양한 구성에 따른 벡터 결합 명령어를 수행하는 데 사용되는 처리 장치의 추가 세부 사항을 개략적으로 예시한다.
도 5는 본 기술의 다양한 구성에 따른 벡터 레지스터 및 타일 레지스터의 세부 사항을 개략적으로 예시한다.
도 6은 본 기술의 다양한 구성에 따른 처리 회로의 추가 세부 사항을 개략적으로 예시한다.
도 7은 본 기술의 다양한 구성에 따른 처리 회로의 추가 세부 사항을 개략적으로 예시한다.
도 8은 본 기술의 다양한 구성에 따른 처리 회로의 추가 세부 사항을 개략적으로 예시한다.
도 9는 본 기술의 다양한 구성에 따른 처리 회로의 추가 세부 사항을 개략적으로 예시한다.
도 10은 본 기술의 다양한 구성에 따른 처리 회로의 추가 세부 사항을 개략적으로 예시한다.
도 11a는 본 기술의 다양한 구성에 따른 처리 회로의 추가 세부 사항을 개략적으로 예시한다.
도 11b는 본 기술의 다양한 구성에 따른 처리 회로의 추가 세부 사항을 개략적으로 예시한다.
도 12는 본 기술의 다양한 구성에 따른 처리 회로의 추가 세부 사항을 개략적으로 예시한다.
도 13은 본 기술의 다양한 구성에 따른 처리 장치에 의해 수행되는 단계들의 시퀀스를 개략적으로 예시한다.
도 14는 본 기술의 다양한 구성에 따른 처리 장치의 시뮬레이터 구현을 개략적으로 예시한다.
몇몇 예시적인 구성은 명령어들을 디코딩하는 디코딩 회로; 및 명령어들에 의해 지정된 벡터 처리 연산들을 입력 데이터 벡터들 - 입력 데이터 벡터들은 입력 데이터 벡터들 내의 각자의 위치들에서 복수의 입력 데이터 항목들을 포함함 - 에 선택적으로 적용하는 처리 회로를 포함하는 처리 장치를 제공한다. 디코딩 회로는, 각각이 복수의 데이터 요소 위치들 내에 소스 데이터 요소들을 포함하는 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들, 및 하나 이상의 목적지 레지스터들을 지정하는 벡터 결합 명령어에 응답하여, 제어 신호들을 생성하도록 구성된다. 처리 장치는, 제어 신호들이 처리 회로로 하여금, 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에 대해, 각각의 소스 벡터 레지스터의 데이터 요소 위치로부터 제1 소스 데이터 요소들을 추출하고; 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하고; 결합 연산들을 수행하여 결과 데이터 요소를 생성하고 - 결과 데이터 요소는 제1 소스 데이터 요소들과 제2 소스 데이터 요소들의 각각의 요소를 결합함으로써 계산됨 -; 결과 데이터 요소를 하나 이상의 목적지 레지스터들의 데이터 요소 위치에 저장하게 하도록 구성된다.
처리 장치들은 입력 데이터 벡터들에 대한 데이터 처리 연산들을 수행하는 처리 회로를 구비할 수 있다. 입력 데이터 벡터는 데이터 벡터 내의 상이한 위치들에 복수의 데이터 요소들을 갖는다. 몇몇 처리 장치들은 산술 또는 논리 연산들을 수행하여 입력 데이터 벡터로부터의 요소들을 결합하여 결과 데이터 벡터에 저장할 결과 데이터 요소들을 생성하도록 구성된다. 본 발명자들은 특정 유형의 계산 동안 특정 연산들을 반복해서 수행하고자 하는 욕구가 종종 있음을 깨달았다. 이러한 연산들은 일반 처리 회로를 사용하여 실행되는 다수의 기존 명령어들을 수행함으로써, 예를 들어 한 번에 하나의 소스 요소에 대해 연산함으로써 제공될 수 있지만, 이러한 접근법은 성능에 상당한 영향을 미칠 수 있다. 따라서, 단일 벡터 결합 명령어에 응답하도록 맞춤화된 특정 회로를 갖는 처리 회로를 제공함으로써, 특별히 효율적인 처리 장치가 제공될 수 있다.
이러한 이유로, 본 구성은 벡터 결합 명령어에 응답하도록 구성된다. 벡터 결합 명령어는 처리 회로와 상호작용하는 프로그래머가 이용가능한 명령어들의 완전한 세트를 제공하는 명령어 세트 아키텍처의 일부이다. 명령어 세트 아키텍처의 명령어는 명령어에 응답하도록 처리 회로를 제어하기 위해 명령어 세트 아키텍처의 명령어를 해석하는 역할을 하는 디코딩 회로에 의해 디코딩된다. 각각의 벡터 결합 명령어는 복수의(즉, 2개 이상의) 소스 벡터 레지스터들을 지정한다. 복수의 소스 벡터 레지스터들 각각은 복수의 데이터 요소 위치들에 저장된 복수의 데이터 요소들로 구성된다. 상이한 크기들의 데이터 요소들이 특정 구성에 따라 제공될 수 있으며, 특정 구성에 기초하여 유연하게 조정될 수 있다. 몇몇 예시적인 구성에서, 벡터 레지스터는, 예를 들어 8-비트 크기의 64개 데이터 요소, 16-비트 크기의 32개 데이터 요소, 32-비트 크기의 16개 데이터 요소, 64-비트 크기의 8개 데이터 요소, 128-비트 크기의 4개 데이터 요소, 또는 256-비트 크기의 2개 데이터 요소로서 구성될 수 있는 512-비트 벡터 레지스터이다. 다른 예시적인 구성에서, 벡터 레지스터는, 예를 들어 16-비트 크기의 16개 데이터 요소, 8-비트 크기의 32개 데이터 요소, 32-비트 크기의 8개 데이터 요소, 또는 64-비트 크기의 4개 데이터 요소로서 구성될 수 있는 256-비트 벡터 레지스터이다. 이러한 크기는 단지 예로서 제공되며, 다른 벡터 레지스터 크기가 여기서 설명된 구성에 통합될 수 있다는 것을 기술자가 손쉽게 알 수 있을 것이다. 벡터 결합 명령어는 또한 하나 이상의 추가 소스 벡터 레지스터들을 지정하며, 하나 이상의 추가 소스 벡터 레지스터들은 복수의 소스 벡터 레지스터들에 더하여 지정된다. 하나 이상의 추가 소스 벡터 레지스터들은 각각 추가 복수의 데이터 요소 위치들에 있는 추가 복수의 데이터 요소들로 구성된다. 벡터 결합 명령어는 또한 복수의 목적지 데이터 요소 위치들에 있는 복수의 목적지 데이터 요소들로 구성된 하나 이상의 목적지 레지스터들을 지정한다. 하나 이상의 추가 소스 벡터 레지스터들 각각 및 하나 이상의 목적지 레지스터들 각각은 복수의 소스 레지스터들과 동일한 크기의 동일한 수의 데이터 요소들을 갖도록 구성될 수 있다. 대안적으로, 하나 이상의 추가 소스 벡터 레지스터들 및/또는 하나 이상의 목적지 레지스터들은 복수의 소스 레지스터들과는 상이한 크기의 상이한 수의 데이터 요소들을 보유하도록 구성될 수 있다.
디코딩 회로는 벡터 결합 명령어에 응답하여 처리 회로로 하여금 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에 대해 단계들의 시퀀스를 수행하게 한다. 예를 들어, 각각의 소스 레지스터가 N개의 데이터 요소를 보유하는 경우, 디코딩 회로는 처리 회로로 하여금 데이터 요소 위치들 0, 1, 2, ..., N-2, N-1에 대해 단계들을 수행하게 한다. 단계들은 순차적으로 제시되지만, 이것은 단지 설명 목적을 위한 것이며, 다음의 단계들 중 임의의 것은 지정된 순서와는 상이한 순서로 수행될 수 있거나 다수의 단계들이 병렬로 수행되는 상태로 수행될 수 있다. 디코딩 회로는 처리 회로가 제1 소스 데이터 요소들의 세트를 추출하게 한다. 제1 소스 데이터 요소들 각각은 각각의 소스 벡터 레지스터의 데이터 요소 위치로부터 추출된다. 디코딩 회로는 또한 처리 회로가 하나 이상의 추가 소스 벡터 레지스터들로부터 소스 데이터 요소들의 제2 세트를 추출하게 한다. 제1 소스 데이터 요소들의 요소들은 각각의 데이터 요소가 복수의 소스 벡터 레지스터들 중의 상이한 하나의 소스 벡터 레지스터의 동일한 데이터 요소 위치로부터 추출되도록 추출된다. 제2 소스 데이터 요소들 중의 데이터 요소들 각각은 하나 이상의 추가 소스 벡터 레지스터들로부터 추출된다. 그러나, 제2 소스 데이터 요소들이 추출되는 추가 소스 벡터 레지스터들 내의 위치들은 그렇게 제한되지 않으며, 구현된 구성에 기초하여 유연하게 결정될 수 있다. 디코딩 회로는 또한 결합 연산을 수행하여 결과 데이터 요소를 생성하도록 처리 회로를 제어하도록 구성된다. 결과 데이터 요소는 제1 소스 데이터 요소들 및 제2 소스 데이터 요소들로부터의 요소들을 결합함으로써 계산되며, 따라서 결과 데이터 요소는 제1 소스 데이터 요소들 및 제2 소스 데이터 요소들의 각각의 데이터 요소에 의존한다. 이러한 방식으로, 각각의 결과 데이터 요소는 복수의 소스 벡터 레지스터들 각각으로부터 추출된 데이터 요소에, 그리고 하나 이상의 추가 소스 벡터 레지스터들로부터 추출된 데이터 요소들에 의존한다. 디코딩 회로는 또한 결과 데이터 요소를 하나 이상의 목적지 레지스터들의 데이터 처리 요소 위치에 저장하도록 처리 회로를 제어한다. 이러한 방식으로, 생성되는 결과 데이터 요소들의 수는 복수의 소스 벡터 레지스터들 각각에 있는 요소들의 수와 동일하다.
결합 연산은 제한되지 않으며, 결합 연산의 다양한 구성이 아래에서 논의될 것이다. 몇몇 예시적인 구성에서, 결합 연산은 중간 데이터 요소들을 생성하는 소스 결합 연산 - 각각의 중간 데이터 요소는 제1 소스 데이터 요소들 중의 대응하는 제1 소스 데이터 요소를 제2 소스 데이터 요소들과 결합함으로써 생성됨 -; 중간 데이터 요소들을 결합하여 결과 데이터 요소를 생성하는 중간 결합 연산을 포함한다. 용어 소스 결합 연산 및 중간 결합 연산은 수행되는 결합 연산을 구별하기 위해(예를 들어, 수행되는 수학적 또는 논리적 연산을 구별하기 위해) 사용된다. 이러한 연산들은 회로의 동일한 기능 블록에 의해 병렬로 또는 서로에 대해 순차적으로 동작하는 회로의 순차적 블록들에 의해 수행될 수 있다는 것이 당업자에 의해 인식될 것이다. 소스 결합 연산은 제1 소스 데이터 요소들 중의 각각의 대응하는 제1 소스 데이터 요소를 제2 소스 데이터 요소들과 결합하여 중간 데이터 요소들을 생성한다. 따라서, 각각의 중간 데이터 요소는 대응하는 제1 소스 데이터 요소 및 제2 소스 데이터 요소들 중 하나 이상의 요소들에 의존한다. 결합 연산은 제2 소스 데이터 요소들 중의 각각의 제2 소스 데이터 요소를, 또는 제2 소스 데이터 요소들의 서브세트만을 사용할 수 있다. 결과적으로, 중간 데이터 요소들의 수는 제1 소스 데이터 요소들의 수와 동일하다. 결합 연산은 또한 중간 데이터 요소들 각각을 함께 결합함으로써 결과 데이터 요소를 생성하는 중간 결합 연산을 포함한다. 따라서, 중간 결합 연산들(비록 이것이 복수의 소스 벡터 레지스터들에 있는 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에 대해 순차적으로 또는 병렬로 반복되지만)에 의해 단일 결과 데이터 요소가 생성된다.
몇몇 구성에서, 소스 결합 연산은 곱셈 연산이고, 제1 소스 데이터 요소들 중의 대응하는 제1 소스 데이터 요소를 제2 소스 데이터 요소들과 결합하는 것은 대응하는 제1 소스 데이터 요소와 제2 소스 데이터 요소들 중의 대응하는 제2 소스 데이터 요소를 곱하여 중간 데이터 요소들을 생성하는 것을 포함한다. 따라서 중간 데이터 요소들은 하나 이상의 추가 소스 벡터 레지스터들의 요소들과 곱해진 복수의 소스 벡터들 각각의 동일한 위치들로부터 취해진 요소들을 포함한다. 이러한 구성들에서, 중간 데이터 요소들 내의 요소들은 다음 식에 의해 표현될 수 있으며:
[식 1]
즉, I j,i = S j,i × F j,i 이며, 여기서 Ij,i는 복수의 소스 벡터 레지스터들 각각의 j번째 위치로부터 추출된 데이터 요소들에 대응하는 중간 데이터 요소들 중의 i번째 요소이고, Sj,i는 복수의 소스 벡터들 중의 i번째 소스 벡터의 j번째 요소이고, Fj,i는 복수의 소스 벡터들의 j번째 데이터 요소 위치로부터 추출된 제1 소스 데이터 요소들을 수반하는 결합 연산들을 위해 추출된 제2 소스 데이터 요소들 중의 i번째 요소이다. 몇몇 구성에서, 데이터 요소들 Fj,i는 j의 모든 값들에 대해 동일한 데이터 요소들이다. 대안적인 구성에서, 요소들 Fj,i는 j의 각각의 값에 대해 하나 이상의 추가 소스 벡터 레지스터들의 상이한 부분으로부터 추출된 상이한 데이터 요소들이다. 그러한 구성에서, 하나 이상의 추가 소스 벡터 레지스터들은 벡터 결합 명령어에 응답하여 복수의 소스 벡터 레지스터들 중 하나와 각각 곱해질 데이터 요소들의 세트를 포함한다.
몇몇 대안적인 구성에서, 소스 결합 연산들은 제2 소스 데이터 요소들로부터 하나 이상의 제1 스케일링 값들을 추출하는 것; 제2 소스 데이터 요소들로부터 하나 이상의 제2 스케일링 값들을 추출하는 것; 하나 이상의 제1 스케일링 값들 중의 대응하는 제1 스케일링 값을 제1 소스 데이터 요소들 중의 대응하는 제1 소스 데이터 요소에 더하여 대응하는 중간 스케일링된 요소들을 생성하는 덧셈 연산, 및 대응하는 제1 소스 데이터 요소로부터 대응하는 제1 스케일링 값을 빼서 대응하는 중간 스케일링된 요소들을 생성하는 뺄셈 연산 중 하나를 수행하는 것; 대응하는 중간 스케일링된 요소들 각각에 하나 이상의 제2 스케일링 중의 대응하는 제2 스케일링 값을 곱하여 중간 데이터 요소들 중의 대응하는 중간 데이터 요소들을 생성하는 것을 포함하는 스케일링 연산들이다. 따라서 중간 데이터 요소들은 제2 소스 데이터 요소들에 저장된(그리고 하나 이상의 추가 소스 벡터 레지스터들로부터 추출된) 정보에 기초한 (제1 복수의 소스 벡터 레지스터들로부터 추출된) 제1 소스 데이터 요소들의 스케일링에 대응한다. 이러한 대안적인 구성들에서, 중간 데이터 요소들 내의 요소들은 다음 식에 의해 표현될 수 있으며:
[식 2]
즉, I i,j = (S j,i ± F1 i )F2 i 이며, 여기서 F1i 및 F2i는, 각각, 제2 소스 데이터 요소들로부터 추출된 하나 이상의 제1 스케일링 값들 및 제2 소스 데이터 요소들로부터의 하나 이상의 제2 스케일링 값들이다. 복수의 소스 벡터들 중의 i번째 소스 벡터의 j번째 요소에 대응하는 제1 소스 데이터 값들 Si,j는 대응하는 제1 스케일링 값(즉, i번째 소스 벡터 레지스터로부터 추출된 제1 소스 데이터 요소들에 대해 사용될 제1 스케일링 값)의 덧셈 또는 뺄셈을 통해 수정되고, 이어서 대응하는 제2 스케일링 값(즉, i번째 소스 벡터 레지스터로부터 추출된 제1 소스 데이터 요소들에 대해 사용될 제2 스케일링 값)과 곱해진다. 따라서 중간 데이터 요소들은 제2 소스 데이터 요소들의 스케일링된 버전에 대응한다. 그러한 구성들은 데이터 요소들이 복수의 소스 레지스터들에 압축된 형태로 저장되는 것을 가능하게 하는 데 사용될 수 있으며, 결합 명령어는 추가 연산(이 경우에 중간 결합 연산)이 적용되기 전에 먼저 데이터 요소들을 압축 해제하는 데 사용될 수 있다. 몇몇 구성에서, 하나 이상의 제1 스케일링 값들은 복수의 소스 벡터 레지스터들 각각에 대응하는 단일 제1 스케일링 값일 수 있고, 제2 스케일링 값은 복수의 소스 벡터 레지스터들 각각에 대응하는 단일 제2 스케일링 값일 수 있다. 그러한 구성들에서, 중간 데이터 요소들은 다음 식을 사용하여 표현될 수 있으며:
[식 3]
즉, I i,j = (S j,i ± F1)F2이며, 여기서 F1 및 F2는, 각각, 단일 제1 스케일링 값 및 단일 제2 스케일링 값이다.
중간 결합 연산들은 다양하게 정의될 수 있으며, 몇몇 구성에서 식 1에 제시된 바와 같은 소스 결합 연산들과 결합될 수 있거나, 다른 구성에서 식 2 또는 식 3에 제시된 바와 같은 소스 결합 연산들과 결합될 수 있다. 몇몇 예시적인 구성에서, 중간 결합 연산들은 누산 연산들이며, 중간 데이터 요소들을 결합하여 결과 데이터 요소를 생성하는 것은 중간 데이터 요소들을 누산하는 것을 포함한다. 따라서 중간 결합 연산들은, 복수의 소스 벡터 레지스터들의 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에 대해, 모든 중간 데이터 요소들을 취하고 그들을 누산하여 단일 결과 데이터 요소를 생성한다. 수학적으로, 누산 연산은 다음과 같이 표현될 수 있으며:
[식 4]
즉, R j = 모든 i (I j,i )에 대한 합이며, 여기서 Rj는 하나 이상의 목적지 벡터 레지스터들의 j번째 요소이고, Ij,i는 식 1 내지 식 3 중 임의의 것에 의해 설명된 바와 같이 복수의 소스 벡터 레지스터들 각각의 j번째 위치로부터 추출된 데이터 요소들에 대응하는 중간 데이터 요소들 중의 i번째 요소이다. Ij,i가 식 1에 따라 설명되는 경우, 결합 연산들은 제1 소스 데이터 요소들 각각이 제2 소스 데이터 요소들과 내적되는 내적 연산들의 시퀀스를 포함한다는 것이 인식되어야 한다. 따라서, 벡터 결합 연산은 제1 세트의 벡터들 - 제1 세트의 벡터들 각각은 복수의 소스 벡터 레지스터들의 동일한 위치들로부터의 데이터 요소들을 포함함 - 과, 하나 이상의 추가 소스 벡터 레지스터들에 포함된 제2 벡터 사이의 복수의 내적 연산들로서의 역할을 한다. 그렇기 때문에, 벡터 결합 명령어는, 복수의 입력 벡터 레지스터들 각각이 행렬의 열의 요소들을 포함하고 하나 이상의 추가 소스 벡터 레지스터들이 벡터의 요소들을 포함하는 행렬-벡터 곱셈 연산을 수행하는 데 사용될 수 있다.
몇몇 예시적인 구성에서, 중간 데이터 요소들은 제1 중간 데이터 요소들이고, 중간 결합 연산들은 제1 중간 데이터 요소들을 결합하여 제2 중간 데이터 요소를 생성하는 제1 중간 결합 연산들; 및 제2 중간 데이터 요소를 하나 이상의 목적지 레지스터들의 데이터 요소 위치로부터 추출된 목적지 데이터 요소와 결합하는 제2 중간 결합 연산들을 포함한다. 이러한 방식으로, 목적지 레지스터들은 복수의 소스 벡터 레지스터들 및 하나 이상의 추가 소스 벡터 레지스터들과 결합될 데이터 요소들의 추가 세트를 저장하는 데 사용될 수 있다. 이것은 벡터 결합 명령어에 응답할 때 처리 장치의 개선된 유연성을 제공한다.
제1 중간 결합 연산들 및 제2 중간 결합 연산들은 다양하게 정의될 수 있다. 몇몇 예시적인 구성에서, 제1 중간 결합 연산들은 누산 연산들이며, 제1 중간 데이터 요소들을 결합하여 제2 중간 데이터 요소를 생성하는 것은 제1 중간 요소들을 누산하는 것을 포함한다. 그러한 구성에서, 제2 중간 데이터 요소들은 다음과 같이 표현될 수 있으며:
[식 5]
즉, I2 j = 모든 i (I j,i )에 대한 합이며, 여기서 I2j는 복수의 소스 벡터 레지스터들 각각의 j번째 위치로부터 추출된 데이터 요소들에 대응하는 제2 중간 데이터 요소들 중의 요소이고, Ij,i는 식 1 내지 식 3 중 임의의 것에 의해 설명된 바와 같이 복수의 소스 벡터 레지스터들 각각의 j번째 위치로부터 추출된 데이터 요소들에 대응하는 중간 데이터 요소들 중의 i번째 요소이다.
제2 중간 결합 연산은 다양하게 정의될 수 있다. 몇몇 예시적인 구성에서, 제2 중간 결합 연산은 제2 중간 데이터 요소들의 값들을 마스킹하는 마스킹 연산이거나, 제2 중간 데이터 요소를 스케일링하는 스케일링 연산 또는 곱셈 중 하나이다. 몇몇 구성에서, 제2 중간 결합 연산은 누산 연산이며, 제2 중간 데이터 요소를 목적지 데이터 요소와 결합하는 것은 제2 중간 데이터 요소를 목적지 데이터 요소와 누산하는 것을 포함한다. 그러한 구성에서, 결과 데이터 요소는 다음과 같이 표현될 수 있으며:
[식 6]
즉, R j = Rj + 모든 i (I2 j,i )에 대한 합이며, 여기서 용어 Rj = Rj + Xj는 값 Rj가 Rj의 기존 값을 Xj와 누산함으로써 생성된다는 것을 의미하는 것으로 해석되어야 한다는 점에 유의해야 한다. 이러한 방식으로, 벡터 결합 명령어는, 식 1에 제시된 바와 같이, I2j,i가 Ij,i에 기초하여 정의될 때, 누산 내적 연산들의 시퀀스 또는 누산 행렬-벡터 곱 연산을 수행하도록 제공될 수 있다.
결합 연산들이 제1 결합 연산들과 제2 결합 연산들로서 분할되는 구성들에 대해, 제1 및 제2 처리 연산들은 순차적으로 또는 병렬로 수행될 수 있다. 몇몇 구성에서, 각각의 데이터 요소 위치에 대해, 적어도 제1 결합 연산들의 서브세트가 제2 결합 연산들과 병렬로 수행된다. 제1 결합 연산들의 서브세트는 각각의 연산의 서브세트를 지칭할 수 있으며, 따라서 각각의 제1 결합 연산의 일부가 제2 결합 연산의 일부와 병렬로 수행된다. 대안적으로 또는 추가적으로, 처리 회로는 제1 결합 연산들의 서브세트가 완전한 제2 결합 연산들과 병렬로 수행되는 완전한 결합 연산들의 서브세트를 포함하도록 배열될 수 있다. 예를 들어, 제1 결합 연산들이 곱셈 연산들이고 제2 결합 연산들이 누산 연산들인 구성에서, 제1 및 제2 결합 연산들은 제1 결합 연산들의 곱셈 연산을 제2 결합 연산들의 결합 연산과 병렬로 수행하도록 하나 이상의 융합 곱셈 누산 회로들을 사용하여 구현될 수 있다. 이러한 방식으로, 결합 연산들은 간편하고 효율적인 방식으로 회로에서 구현될 수 있다.
몇몇 구성에서, 결합 연산들은, 결과 데이터 요소로서, 제1 소스 데이터 요소들과 제2 소스 데이터 요소들의 내적을 생성하는 내적 연산을 포함한다. 그러한 구성에서, 내적 연산은 임의의 내적 회로를 사용하여 구현될 수 있다. 몇몇 예시적인 구성에서 내적 연산들은 위에서 제시된 바와 같이 제1 및 제2 결합 연산들로 분할될 수 있는 반면, 다른 구성에서 내적 연산들은 내적 연산의 곱셈 및 덧셈 단계들에 대한 모든 필요한 회로를 통합하는 단일 기능 회로에 의해 수행될 수 있다.
하나 이상의 목적지 레지스터들의 결과 데이터 요소들은 다양하게 정의될 수 있으며, 몇몇 구성에서, 하나 이상의 목적지 레지스터들 전체에 분포된다. 몇몇 구성에서, 결과 데이터 요소들의 크기는 벡터 결합 명령어에서 지정된다. 몇몇 예시적인 구성에서, 각각의 결과 데이터 요소의 결과 데이터 요소 크기는 각각의 소스 데이터 요소의 소스 데이터 요소 크기와 동일하다. 그러한 구성에서, 하나 이상의 목적지 레지스터들은 복수의 소스 벡터 레지스터들 각각과 동일한 크기(비트들의 수 및 데이터 요소들의 수)의 단일 목적지 레지스터이다. 몇몇 구성에서, 각각의 결과 데이터 요소의 결과 데이터 요소 크기는 각각의 소스 데이터 요소의 소스 데이터 요소 크기보다 더 크다. 그러한 구성에서, 벡터 결합 명령어들은 데이터 요소들과 연관된 비트들의 수를 확대하는 확대 명령어들이며, 결과 데이터 요소들은 복수의 목적지 레지스터들에 걸쳐 분산된다.
예를 들어, 몇몇 구성에서, 소스 데이터 요소 크기는 8-비트의 것이고 결과 데이터 요소 크기는 32-비트이며; 소스 데이터 요소 크기는 16-비트이고 결과 데이터 요소 크기는 64-비트이다. 몇몇 구성에서, 하나 이상의 목적지 레지스터들 중의 목적지 레지스터들의 수는 결과 데이터 요소 크기와 소스 데이터 요소 크기의 비율에 기초하여 결정된다. 결과 및 소스 데이터 요소 크기들의 전술된 세트들 각각에서, 결과 데이터 요소 크기는 소스 데이터 요소 크기의 4배이고, 따라서 하나 이상의 목적지 레지스터들은 4개의 목적지 레지스터들을 포함한다. 이러한 방식으로, 결합 연산들이 정밀도의 손실 없이 수행되는 것을 가능하게 하도록 하나 이상의 목적지 레지스터들에 충분한 수의 비트들을 제공하는 것이 가능하다.
목적지 레지스터에서의 결과 요소들의 분포는 다양하게 정의될 수 있다. 몇몇 예시적인 구성에서, 하나 이상의 목적지 레지스터들은 목적지 레지스터들의 수와 동일한 행들의 수, 및 각각의 목적지 레지스터에서의 데이터 요소들의 수와 동일한 열들의 수를 포함하는 결과 어레이를 형성하도록 배열되며; 결과 데이터 요소들은 결과 어레이에 행-우선 순서(row-major order)로 배열된다. 이러한 방식으로, 결과 요소들은 그들이 소스 레지스터들에서 나타나는 순서와 동일한 순서로 있도록 하나 이상의 목적지 레지스터들에 배열될 수 있다. 몇몇 대안적인 구성에서, 하나 이상의 목적지 레지스터들은 목적지 레지스터들의 수와 동일한 행들의 수, 및 각각의 목적지 레지스터에서의 데이터 요소들의 수와 동일한 열들의 수를 포함하는 결과 어레이를 형성하도록 배열되며; 결과 데이터 요소들은 결과 어레이에 열-우선 순서(column-major order)로 배열된다. 이러한 방식으로 하나 이상의 목적지 레지스터들 내에 결과 데이터 요소들을 배열함으로써, 결과 데이터 요소들은, 목적지 레지스터 내에, 소스 데이터 요소들이 추출되는 위치에 더 가까운 위치에 저장되며, 따라서 더 간편한 설계가 실현될 수 있다.
몇몇 예시적인 구성에서, 처리 회로는 하나 이상의 추가 소스 벡터 레지스터들에 있는 모든 데이터 요소들을 사용한다. 그러나, 몇몇 구성에서 하나 이상의 추가 소스 벡터 레지스터들의 데이터 요소들의 서브세트만이 사용된다. 소스 요소들의 선택은 데이터 처리 장치에 하드 코딩될 수 있다. 그러나, 몇몇 구성에서 벡터 결합 명령어는 하나 이상의 추가 소스 벡터 레지스터들에서 제2 소스 데이터 요소들의 위치들을 지정한다. 이것은 개선된 유연성을 제공하며, 동일한 추가 소스 벡터 레지스터가 복수의 벡터 결합 연산들에 대해 사용되는 것을 가능하게 할 수 있다. 몇몇 구성에서, 하나 이상의 추가 소스 벡터 레지스터들에서 지정된 위치들은 하나 이상의 추가 소스 벡터 레지스터들 내의 특정 위치들에 대응한다. 대안적으로, 위치들은 하나 이상의 추가 소스 벡터 레지스터들의 복수의 서브섹션들 각각 내의 상대적 위치들을 지칭한다. 이것은, 하나 이상의 추가 소스 벡터 레지스터들의 상이한 부분이 각각의 연산에 대해 사용되고, 위치들이 연산의 현재 인스턴스에 대해 판독되는 위치에 대해 지정되는 반복된 벡터 결합 연산들을 수행하기 위한 특별히 효율적인 장치를 제공한다. 몇몇 예시적인 구성에서, 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들, 및 하나 이상의 목적지 레지스터들 각각은 청크들로 분할될 수 있다. 예를 들어, 레지스터들(하나 이상의 추가 소스 벡터 레지스터들, 복수의 소스 벡터 레지스터들, 및 목적지 레지스터들을 포함함) 각각은 4개의 128-비트 청크들로 분할될 수 있고, 벡터 결합 명령어에서 지정된 위치는 복수의 소스 벡터 레지스터들 각각의 128-비트 청크들과 관련하여 (예를 들어, 식별된 하나 이상의 데이터 요소들의 복제에 의해) 사용될, 제2 소스 데이터 요소들로서 128-비트 청크들 각각 내로부터 추출될, 하나 이상의 데이터 요소들을 식별한다. 예를 들어, 요소들이 8-비트이고 4개의 순차적 데이터 요소들이 각각의 128-비트 청크로부터(청크당 총 16개 8-비트 요소들로) 추출되는 경우, 각각의 청크 내에는 선택될 수 있는 4개의 위치가 있다. 이 경우에, 상대적 위치는 (예를 들어) 각각의 128-비트 청크 내의 제3 상대적 위치로 설정될 수 있다. 이 경우에, 데이터 요소들 8-11(즉, 제1 128-비트 청크의 제3 위치 내로부터의)이 선택되고 (예를 들어, 하나 이상의 추가 소스 벡터 레지스터들로부터 추출된 데이터 요소들 8-11을 4회 복제함으로써, 또는 동일한 추출된 데이터 요소들의 반복된 사용을 통해) 복수의 소스 벡터 레지스터들에서 데이터 요소들의 제1 128-비트 청크와 연관된 결합 연산들에서 적용될 것이며, 이어서 제1 128-비트 청크와 연관된 결합 연산들로부터의 결과 데이터 요소들이 하나 이상의 목적지 레지스터들의 제1 128-비트 청크에 저장될 것이다. 데이터 요소들 24-27(즉, 제2 128-비트 청크의 제3 위치 내로부터의)이 선택되고 (예를 들어, 하나 이상의 추가 소스 벡터 레지스터들로부터 추출된 데이터 요소들 24-27을 4회 복제함으로써, 또는 동일한 추출된 데이터 요소들의 반복된 사용을 통해) 복수의 소스 벡터 레지스터들에서 데이터 요소들의 제2 128-비트 청크와 연관된 결합 연산들에서 적용될 것이며, 이어서 제2 128-비트 청크와 연관된 결합 연산들로부터의 결과 데이터 요소들이 하나 이상의 목적지 레지스터들의 제2 128-비트 청크에 저장될 것이다. 데이터 요소들 40-43이 선택되고 (예를 들어, 하나 이상의 추가 소스 벡터 레지스터들로부터 추출된 데이터 요소들 40-43을 4회 복제함으로써, 또는 동일한 데이터 요소들의 반복된 사용을 통해) 복수의 소스 벡터 레지스터들에서 데이터 요소들의 제3 128-비트 청크와 연관된 결합 연산들에서 적용될 것이며, 이어서 제3 128-비트 청크와 연관된 결합 연산들로부터의 결과 데이터 요소들이 하나 이상의 목적지 레지스터들의 제3 128-비트 청크에 저장될 것이다. 데이터 요소들 56-59가 선택되고 (예를 들어, 하나 이상의 추가 소스 벡터 레지스터들로부터 추출된 데이터 요소들 56-59를 4회 복제함으로써, 또는 동일한 데이터 요소들의 반복된 사용을 통해) 복수의 소스 벡터 레지스터들에서 데이터 요소들의 제4 128-비트 청크와 연관된 결합 연산들에서 적용될 것이며, 이어서 제4 128-비트 청크와 연관된 결합 연산들로부터의 결과 데이터 요소들이 하나 이상의 목적지 레지스터들의 제4 128-비트 청크에 저장될 것이다. 128-비트 크기가 예로서 사용되며 (하나 이상의 추가 소스 벡터 레지스터들 중 하나의 크기보다 작거나, 그와 동일하거나, 그보다 큰) 임의의 청크 크기가 사용될 수 있다는 것을 당업자가 손쉽게 알 수 있을 것이다.
소스 벡터 레지스터들의 수 및 하나 이상의 추가 소스 벡터 레지스터들에 사용되는 소스 데이터 요소들의 수는 앞서 설명된 구성들 중 임의의 것에 따라 다양하게 정의될 수 있지만, 몇몇 예시적인 구성에서 복수의 소스 벡터 레지스터들은 2개의 소스 벡터 레지스터들을 포함하고, 하나 이상의 추가 소스 벡터 레지스터들은 각각 2개의 소스 데이터 요소들을 포함한다. 다른 예시적인 구성에서, 복수의 소스 벡터 레지스터들은 4개의 소스 벡터 레지스터들을 포함하고, 하나 이상의 추가 소스 벡터 레지스터들은 각각 4개의 소스 데이터 요소들을 포함한다.
각각의 요소의 숫자 포맷은 다양하게 정의될 수 있으며, 몇몇 예시적인 구성에서, 각각의 데이터 벡터의 각각의 요소는 다음 중 하나를 포함한다: 부호를 가진 정수 값; 및 부호를 갖지 않은 정수 값. 더욱이, 몇몇 예시적인 구성에서 추가 벡터 레지스터의 각각의 요소는 다음 중 하나를 포함한다: 부호를 가진 정수 값; 및 부호를 갖지 않은 정수 값. 따라서, 상이한 구성들은 복수의 소스 벡터 레지스터들의 그리고 추가 벡터 레지스터에 대한 각각의 데이터 벡터의 임의의 조합을 제공한다. 따라서, 몇몇 구성에서, 각각의 데이터 벡터의 각각의 요소는 부호를 가진 정수 값이고 추가 벡터 레지스터의 각각의 요소는 부호를 가진 정수 값이며; 다른 구성에서 각각의 데이터 벡터의 각각의 요소는 부호를 가진 정수 값이고 추가 벡터 레지스터의 각각의 요소는 부호를 갖지 않은 정수 값이며; 다른 구성에서 각각의 데이터 벡터의 각각의 요소는 부호를 갖지 않은 정수 값이고 추가 벡터 레지스터의 각각의 요소는 부호를 가진 정수 값이며; 다른 예시적인 구성에서 각각의 데이터 벡터의 각각의 요소는 부호를 갖지 않은 정수 값이고 추가 벡터 레지스터의 각각의 데이터 요소는 부호를 갖지 않은 정수 값이다.
몇몇 예시적인 구성에서, 처리 회로는 각각의 요소 위치에 대한 각각의 결과 데이터를 순차적으로 생성하도록 배열되어, 감소된 회로 풋프린트를 야기한다. 다른 예시적인 구성에서, 처리 회로는 각각의 데이터 요소 위치에 대한 결과 데이터 요소를 병렬로 생성하도록 구성된다. 결과 데이터 요소들을 병렬로 생성하는 것은 개선된 확장성과 함께 벡터 결합 명령어들의 더 빠른 연산을 야기한다.
논의된 바와 같이, 제2 소스 데이터 요소들의 수는 다양하게 정의될 수 있으며, 벡터 결합 명령어의 일부로서 지정될 수 있다. 그러나, 몇몇 구성에서 하나 이상의 추가 소스 벡터 레지스터들로부터 추출된 제2 소스 데이터 요소들의 수는 복수의 소스 레지스터들 내의 소스 레지스터들의 수와 동일하다. 이 옵션은 내적 연산들 또는 행렬-벡터 곱 계산들을 수행할 때 특히 유용하다.
몇몇 구성에서, 목적지 레지스터들은 벡터 레지스터들이다. 그러나, 몇몇 구성에서 하나 이상의 목적지 레지스터들은 하나 이상의 타일 레지스터들의 하나 이상의 수평 또는 수직 타일 슬라이스들이며, 하나 이상의 타일 레지스터들 각각은 데이터 요소들의 수직으로 그리고 수평으로 어드레싱 가능한 2차원 어레이를 포함한다. 개념적으로 타일 레지스터들은 벡터 레지스터들에 대한 것인데, 왜냐하면 벡터 레지스터들이 스칼라 레지스터들에 대한 것이기 때문이다. 타일 레지스터들은 스칼라 데이터 요소들의 2차원 어레이를 제공하며, 행렬-벡터 또는 행렬-행렬 계산들에 특별히 효율적이다. 각각의 타일 레지스터는 통째로 또는 타일 레지스터의 수직 또는 수평 슬라이스들(각각, 열 또는 행에 대응함)의 면에서 어드레싱될 수 있다. 타일 레지스터들을 저장 목적지로서 제공함으로써, 후속 산술 또는 논리 처리 연산들은 결과 데이터 요소들을 재순서화하거나 재배열하는 추가 연산들에 대한 요구 없이 결과 데이터 요소들에 기초할 수 있다. 오히려, 적절한 행 또는 열(수평 또는 수직 타일 슬라이스)이 타일 레지스터로부터 선택될 수 있다.
제2 소스 데이터 요소들이 하나 이상의 추가 소스 벡터 레지스터들로부터 추출되게 하는 방법은 다양하게 정의될 수 있다. 몇몇 구성에서, 하나 이상의 추가 소스 벡터 레지스터들은 복수의 소스 벡터 레지스터들과 동일한 수의 벡터 레지스터들을 포함하며; 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하는 것은 각각의 추가 소스 벡터 레지스터의 데이터 요소 위치로부터 제2 소스 데이터 요소들을 추출하는 것을 포함한다. 그러한 구성에서, 하나 이상의 추가 소스 벡터 레지스터들은 복수의 소스 벡터 레지스터들과 동일한 방식으로 처리된다. 따라서, 각각의 데이터 요소 위치에 대해, 제1 소스 데이터 요소들은 복수의 소스 벡터 레지스터들 각각에 대해 1개의 요소를 포함하며, 여기서 요소는 복수의 소스 벡터 레지스터들 각각의 동일한 위치로부터 추출된다. 유사하게, 각각의 데이터 요소 위치에 대해 제2 소스 데이터 요소들은 하나 이상의 소스 벡터 레지스터들 각각에 대해 1개의 요소를 포함하며, 여기서 하나 이상의 추가 소스 벡터 레지스터들 각각으로부터 추출된 요소는 하나 이상의 추가 소스 벡터 레지스터들의 동일한 위치로부터 추출되었다.
몇몇 대안적인 구성에서, 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하는 것은 각각의 데이터 요소 위치에 대해 소스 데이터 요소들의 동일한 세트를 추출하는 것을 포함한다. 그러한 구성에서, 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하는 단계를 반복해서 수행하는 것은 필요하지 않을 수 있다. 오히려, 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에서 결합 연산들에 사용되는 추출은 한 번 수행될 수 있다. 그러한 구성에서, 하나 이상의 추가 소스 벡터 레지스터들의 수는 다양하게 정의될 수 있다. 몇몇 구성에서, 복수의 추가 소스 벡터 레지스터들이 정의될 수 있다. 다른 구성에서, 하나 이상의 추가 소스 벡터 레지스터들은 단일의 추가 소스 벡터 레지스터를 포함한다. 이러한 접근법은 더 적은 벡터 레지스터들을 수반하는 더 간편한 구현을 제공한다.
이제 특정한 예시적인 구성들이 첨부 도면을 참조하여 설명될 것이다.
도 1은 본 기술들의 다양한 예들을 구현할 수 있는 처리 장치(10)를 개략적으로 예시한다. 장치는 데이터 처리 회로(12)를 포함하며, 이 데이터 처리 회로(12)는 그것이 실행하는 명령어들의 시퀀스에 응답하여 데이터 항목들에 대해 데이터 처리 동작들을 수행한다. 이러한 명령어들은 데이터 처리 장치가 액세스하는 메모리(14)로부터 검색되고, 당업자가 친숙할 방식으로, 페치 회로(16)가 이러한 목적으로 제공된다. 더욱이, 페치 회로(16)에 의해 검색된 명령어들은 명령어 디코더 회로(18)(달리 디코딩 회로로 지칭됨)로 전달되며, 이 명령어 디코더 회로(18)는 처리 회로(12)뿐만 아니라, 레지스터들(20)의 세트 및 로드/저장 유닛(22)의 구성 및 동작의 다양한 태양들을 제어하도록 배열되는 제어 신호들을 생성한다. 일반적으로, 데이터 처리 회로(12)는 파이프라인 방식으로 배열될 수 있지만, 그의 세부 사항은 본 기술들과는 관련이 없다. 당업자는 도 1이 나타내는 일반적인 구성에 익숙할 것이며, 여기서는 그의 추가의 상세한 설명은 단지 간략함을 위해 생략된다. 레지스터들(20)은, 도 1에서 알 수 있는 바와 같이, 각각 다수의 데이터 요소들을 위한 저장소를 포함하여, 따라서 처리 회로는 지정된 레지스터 내의 지정된 데이터 요소에 데이터 처리 동작들을 적용할 수 있거나, 지정된 레지스터 내의 지정된 그룹의 데이터 요소들("벡터")에 데이터 처리 동작들을 적용할 수 있다. 특히, 예시된 데이터 처리 장치는 벡터화된 데이터 처리 연산들의 수행에 관한 것이고, 구체적으로 레지스터들(20)에 보유된 데이터 요소들에 관한, 복소수 처리 명령어들의 실행과 관련되며, 그의 추가 설명이 아래에서 몇몇 특정 실시예를 참조하여 보다 상세하게 이어질 것이다. 명령어들의 실행 시에 데이터 처리 회로(12)에 의해 요구되는 데이터 값들, 및 그러한 데이터 처리 명령어들의 결과로서 생성된 데이터 값들은 로드/저장 유닛(22)에 의해 메모리(14)에 기입되고 그로부터 판독된다. 일반적으로 도 1에서의 메모리(14)는, 본 기술들의 명령어들이 전형적으로 처리 회로가 이어서 실행하는 미리 정의된 시퀀스의 명령어들("프로그램")의 일부로서 저장될 수 있는 컴퓨터 판독가능 저장 매체의 예로서 보여질 수 있다는 점에 또한 유의한다. 그러나 처리 회로는 RAM 내의, ROM 내의, 네트워크 인터페이스를 통해 등등과 같은, 다양한 상이한 소스들로부터 그러한 프로그램에 액세스할 수 있다. 본 개시는 처리 회로(12)가 실행할 수 있는 다양한 새로운 명령어들을 설명하며, 이어지는 도면들은 이러한 명령어들의 특성, 그러한 명령어들의 실행을 지원하기 위한 데이터 처리 회로에 있어서의 변화 등에 대한 추가 설명을 제공한다.
도 2는 몇몇 예시적인 구성에 따른 도 1의 처리 회로(30)의 추가 세부 사항을 개략적으로 예시한다. 특히, 처리 회로(30)는 복수의 소스 벡터 레지스터들, 즉 소스 벡터 레지스터 A(32) 및 소스 벡터 레지스터 B(34)를 구비한다. 처리 회로(30)는 또한 추가 소스 벡터 레지스터(36)를 구비한다(몇몇 구성에서, 추가 소스 벡터 레지스터는 하나 이상의 추가 소스 벡터 레지스터들일 수 있다). 처리 회로(30)는, 하나 이상의 목적지 레지스터들에 저장할 결과 데이터 요소들을 생성하는 결합 연산들(40(A), 40(B), 40(C), 40(D))을 수행하도록, 디코딩 회로에 의해 생성된 제어 신호들에 의해 제어된다. 결합 연산들(40(A), 40(B), 40(C), 40(D))은 각각 소스 벡터 레지스터 A(32) 및 소스 벡터 레지스터 B(34)의 데이터 요소 위치들 중 하나에 있는 데이터 요소들에 대해 수행된다. 더욱이, 각각의 결합 연산(40(A), 40(B), 40(C), 40(D))은 추가 소스 벡터 레지스터(36)의 요소들에 기초한다. 특히, 결합 연산(40(A))은, 입력들로서, 소스 벡터 레지스터 A(32)로부터의 요소들(32(A)), 소스 벡터 레지스터 B(34)로부터의 요소(34(A)), 및 추가 소스 벡터 레지스터(36)로부터의 요소들(36(C) 및 36(D))을 취한다. 이러한 요소들은 결합 연산(40(A))에 의해 결합되어 결과 데이터 요소를 생성한다. 결합 연산(40(B))은, 입력들로서, 소스 벡터 레지스터 A(32)로부터의 요소들(32(B)), 소스 벡터 레지스터 B(34)로부터의 요소(34(B)), 및 추가 소스 벡터 레지스터(36)로부터의 요소들(36(C) 및 36(D))을 취한다. 이러한 요소들은 결합 연산(40(B))에 의해 결합되어 결과 데이터 요소를 생성한다. 결합 연산(40(C))은, 입력들로서, 소스 벡터 레지스터 A(32)로부터의 요소들(32(C)), 소스 벡터 레지스터 B(34)로부터의 요소(34(C)), 및 추가 소스 벡터 레지스터(36)로부터의 요소들(36(C) 및 36(D))을 취한다. 이러한 요소들은 결합 연산(40(C))에 의해 결합되어 결과 데이터 요소를 생성한다. 결합 연산(40(D))은, 입력들로서, 소스 벡터 레지스터 A(32)로부터의 요소들(32(D)), 소스 벡터 레지스터 B(34)로부터의 요소(34(D)), 및 추가 소스 벡터 레지스터(36)로부터의 요소들(36(C) 및 36(D))을 취한다. 이러한 요소들은 결합 연산(40(D))에 의해 결합되어 결과 데이터 요소를 생성한다.
도 3은 결합 연산들(40)이 소스 결합 연산들(44, 46) 및 중간 결합 연산들(42)을 포함하는 몇몇 예시적인 구성에 따른 처리 회로(48)의 세부 사항을 개략적으로 예시한다. 소스 결합 연산들(44, 46)은 각각 소스 벡터 레지스터 A(32) 또는 소스 벡터 레지스터 B(34)의 대응하는 요소를 추가 소스 레지스터(36)의 요소들과 결합한다. 예시된 예에서, 소스 결합 연산들(44, 46)은, 입력들로서, 추가 소스 레지스터(36)의 2개의 요소를 취한다. 그러나, 이것은 단지 예시 목적이며, 소스 결합 연산들(44, 46)은 각각 추가 소스 레지스터로부터의 요소들의 임의의 동일한 또는 상이한 서브세트를 취할 수 있다는 것이 당업자에 의해 인식될 것이다. 소스 결합 연산들은 소스 벡터 레지스터 A(32), 소스 벡터 레지스터 B(34) 및 추가 소스 벡터 레지스터(36)로부터 추출된 데이터 요소들을 결합하여 중간 데이터 요소들을 생성한다. 중간 데이터 요소들은 중간 결합 연산들(42)에 공급되며, 이들 각각은 하나 이상의 목적지 레지스터들에 저장될 결과 데이터 요소를 생성한다.
처리 회로(48)는, 소스 벡터 레지스터 A(32) 및 소스 벡터 레지스터 B(34) 각각 내의 각각의 요소 위치에 대해, 소스 결합 연산들(44 및 46) 및 중간 결합 연산들(42)을 포함하는 결합 연산들을 수행한다. 특히, 요소 위치가 소스 벡터 레지스터 A(32) 내의 데이터 요소(32(A)) 및 소스 벡터 레지스터 B(34) 내의 데이터 요소(34(A))에 대응하는 최하위 위치일 때, 소스 결합 연산(44(A))은 소스 벡터 레지스터 A(32)의 데이터 요소(32(A))를 추가 소스 벡터 레지스터(36)로부터의 데이터 요소들(36(C) 및 36(D))과 결합한다. 유사하게, 소스 결합 연산(46(A))은 소스 벡터 레지스터 B(34)의 데이터 요소(34(A))를 추가 소스 벡터 레지스터(36)로부터의 데이터 요소들(36(D) 및 36(C))과 결합한다. 소스 결합 연산들(44(A) 및 46(A))의 출력은 중간 데이터 요소들을 생성하며, 이들은 중간 결합 연산(42(A))에 공급되어 하나 이상의 목적지 레지스터들에 저장될 결과 데이터 요소를 생성한다.
유사하게, 요소 위치가 소스 벡터 레지스터 A(32) 내의 데이터 요소(32(B)) 및 소스 벡터 레지스터 B(34) 내의 데이터 요소(34(B))에 대응하는 두 번째 최하위 위치일 때, 소스 결합 연산(44(B))은 소스 벡터 레지스터 A(32)의 데이터 요소(32(B))를 추가 소스 벡터 레지스터(36)로부터의 데이터 요소들(36(C) 및 36(D))과 결합한다. 유사하게, 소스 결합 연산(46(B))은 소스 벡터 레지스터 B(34)의 데이터 요소(34(B))를 추가 소스 벡터 레지스터(36)로부터의 데이터 요소들(36(D) 및 36(C))과 결합한다. 소스 결합 연산들(44(B) 및 46(B))의 출력은 중간 데이터 요소들을 생성하며, 이들은 중간 결합 연산(42(B))에 공급되어 하나 이상의 목적지 레지스터들에 저장될 결과 데이터 요소를 생성한다.
유사하게, 요소 위치가 소스 벡터 레지스터 A(32) 내의 데이터 요소(32(C)) 및 소스 벡터 레지스터 B(34) 내의 데이터 요소(34(C))에 대응하는 두 번째 최상위 위치일 때, 소스 결합 연산(44(C))은 소스 벡터 레지스터 A(32)의 데이터 요소(32(C))를 추가 소스 벡터 레지스터(36)로부터의 데이터 요소들(36(C) 및 36(D))과 결합한다. 유사하게, 소스 결합 연산(46(C))은 소스 벡터 레지스터 B(34)의 데이터 요소(34(C))를 추가 소스 벡터 레지스터(36)로부터의 데이터 요소들(36(D) 및 36(C))과 결합한다. 소스 결합 연산들(44(C) 및 46(C))의 출력은 중간 데이터 요소들을 생성하며, 이들은 중간 결합 연산(42(C))에 공급되어 하나 이상의 목적지 레지스터들에 저장될 결과 데이터 요소를 생성한다.
유사하게, 요소 위치가 소스 벡터 레지스터 A(32) 내의 데이터 요소(32(D)) 및 소스 벡터 레지스터 B(34) 내의 데이터 요소(34(D))에 대응하는 최상위 위치일 때, 소스 결합 연산(44(D))은 소스 벡터 레지스터 A(32)의 데이터 요소(32(D))를 추가 소스 벡터 레지스터(36)로부터의 데이터 요소들(36(C) 및 36(D))과 결합한다. 유사하게, 소스 결합 연산(46(D))은 소스 벡터 레지스터 B(34)의 데이터 요소(34(D))를 추가 소스 벡터 레지스터(36)로부터의 데이터 요소들(36(D) 및 36(C))과 결합한다. 소스 결합 연산들(44(D) 및 46(D))의 출력은 중간 데이터 요소들을 생성하며, 이들은 중간 결합 연산(42(D))에 공급되어 하나 이상의 목적지 레지스터들에 저장될 결과 데이터 요소를 생성한다.
전술된 결합 연산들은 소스 벡터 레지스터 A(32) 및 소스 벡터 레지스터 B에서 최하위 위치, 두 번째 최하위 위치, 두 번째 최상위 위치, 및 최상위 위치 각각에 대해 별개의 결합 유닛들에 의해 수행된다. 그러나, 단일 세트의 결합 회로 블록들이 제공될 수 있으며(예를 들어, 소스 결합 요소들(44(A) 및 46(A)) 및 단일 중간 결합 연산(42(A))), 그의 입력들은 예를 들어 디멀티플렉서들의 시퀀스를 통해 공급될 수 있고, 중간 결합 연산(44(A))의 출력은 하나의 이상의 목적지 레지스터들의 각각의 결과 요소 위치로 다중화될 수 있다는 것이 당업자에 의해 인식될 것이다.
도 4a는 본 기술의 다양한 구성에 따른 벡터 결합 명령어에 응답하여 내적 연산들의 시퀀스를 수행하도록 구성된 처리 장치(50)의 사용을 개략적으로 예시한다. 처리 장치(50)는, 명령어들을 디코딩하고 처리 회로(54)에 제어 신호들을 제공하는 디코딩 회로(56)를 포함한다. 처리 장치(50)는 데이터 벡터들을 저장하는 데 사용되는 레지스터들(52)의 시퀀스를 추가로 포함한다. 예시된 구성에서, 데이터 처리 장치(50)는 행렬-벡터 곱셈에 대응하는 내적 연산들의 시퀀스를 수행하는 데 사용된다. 특히, 데이터 처리 장치(50)는 행렬(58)에 벡터(60)를 곱한 결과를 계산하는 데 사용된다. 수학적으로, 이 연산은 행렬(58)과 벡터(60)의 각각의 행의 내적을 계산하기 위해 내적들의 시퀀스를 수행함으로써 수행된다.
행렬(58)은 행렬(58)의 제1 열이 소스 벡터 레지스터 A(62)에 저장되고 행렬(58)의 제2 열이 소스 벡터 레지스터 B(64)에 저장되도록 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B(64)를 포함하는 복수의 소스 벡터 레지스터들에 저장된다. 벡터(60)는 단일의 추가 소스 벡터 레지스터(66)에 저장된다. 예시된 실시예에서, 벡터(60)의 2개의 요소는 추가 소스 벡터 레지스터(66)의 2개의 최하위 요소들로서 저장된다. 그러나, 이것은 단지 예시 목적이며, 추가 소스 벡터 레지스터 내의 임의의 위치들이 상호교환적으로 사용될 수 있다(그리고 선택적으로 벡터 결합 명령어에서 지정될 수 있다)는 것이 당업자에 의해 인식될 것이다. 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B(64)를 포함하는 복수의 소스 벡터 레지스터들, 및 추가 소스 벡터 레지스터는 데이터 처리 장치(50)의 레지스터 저장소에 레지스터들(52)로서 저장되는 레지스터들이다.
저장된 벡터 레지스터들(52)을 갖는 데이터 처리 장치(50)는 벡터 결합 명령어에 응답한다. 벡터 결합 명령어는 디코딩 회로(56)에 의해 수신되며, 처리 회로(54)로 하여금 소스 벡터 레지스터들의 각각의 데이터 요소 위치에 대해 연산들의 시퀀스를 수행하게 한다. 이 경우에, 처리 회로는 4개의 소스 벡터 레지스터 위치들 각각에 대해 하나씩, 연산들의 4개 시퀀스를 (선택적으로 병렬로) 수행한다. 예시된 실시예에서, 결합 연산들은 결과 데이터 요소들을 생성하기 위해 내적 명령어들을 또는, 대안적으로, 곱셈 연산들을 소스 결합 연산들로서, 그리고 누산 연산들을 중간 결합 연산들로서 포함한다. 결과 데이터 요소들은 (예를 들어, 벡터 결합 명령어에서 정의된 바와 같이) 소스 벡터 요소들보다 2배 넓고, 따라서 결과 데이터 요소들에 충분한 저장 공간을 제공하기 위해 2개의 목적지 벡터 레지스터들을 요구한다. 이 경우에, 목적지 벡터 레지스터들은 결과 데이터 요소들(68(A), 68(B))을 포함하는 결과 벡터 레지스터 A(68), 및 결과 데이터 요소들(70(A) 및 70(B))을 포함하는 결과 벡터 레지스터 B(70)를 포함한다.
디코딩 회로(56)는 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B로부터 각각 제1 소스 데이터 요소들 A1,1 및 A1,2를 추출하고, 추가 소스 벡터 레지스터(66)로부터 제2 소스 데이터 요소들 b1 및 b2를 추출함으로써 결과 데이터 요소(68(B))를 생성하도록 처리 회로(54)를 제어한다. 디코딩 회로(56)는 또한 내적 연산들을 수행함으로써 제1 소스 데이터 요소들과 제2 소스 데이터 요소들을 결합하여 결과 데이터 요소(68(B))를 생성하도록 처리 회로(54)를 제어하며, 결과 데이터 요소(68(B))에 계산 A1,1b1+A1,2b2의 값이 저장된다. 따라서, 이러한 데이터 요소는 행렬(58)에 벡터(60)를 곱하는 것으로부터 기인하는 결과 행렬(72)의 제1 값을 포함한다.
디코딩 회로(56)는 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B(64)의 대응하는 위치들로부터 요소들을 추출하는 동일한 연산들의 시퀀스를 수행함으로써 결과 데이터 요소들(68(A), 70(B) 및 70(A))을 생성하도록 처리 회로(54)를 제어한다. 이러한 연산들은 각각의 소스 벡터 레지스터 위치에 대해 병렬로 또는 순차적으로 수행될 수 있다. 특히, 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B로부터 각각 제1 소스 데이터 요소들 A2,1 및 A2,2를 추출하고, 제1 소스 요소들과 이전에 추출된 제2 소스 요소들의 내적을 수행함으로써, 처리 회로는 A2,1b1+A2,2b2의 값을 갖는 결과 벡터 레지스터 A(68)에 저장되는 결과 데이터 요소(68(A))를 생성할 수 있다. 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B로부터 각각 제1 소스 데이터 요소들 A3,1 및 A3,2를 추출하고, 제1 소스 요소들과 이전에 추출된 제2 소스 요소들의 내적을 수행함으로써, 처리 회로는 A3,1b1+A3,2b2의 값을 갖는 결과 벡터 레지스터 B(70)에 저장되는 결과 데이터 요소(70(B))를 생성할 수 있다. 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B로부터 각각 제1 소스 데이터 요소들 A4,1 및 A4,2를 추출하고, 제1 소스 요소들과 이전에 추출된 제2 소스 요소들의 내적을 수행함으로써, 처리 회로는 A4,1b1+A4,2b2의 값을 갖는 결과 벡터 레지스터 A(70)에 저장되는 결과 데이터 요소(70(A))를 생성할 수 있다.
도 4b는 하나 이상의 추가 소스 벡터 레지스터들이 2개의 추가 소스 벡터 레지스터들을 포함하는 구성을 개략적으로 예시한다. 예시된 구성들 각각에 대해, 하나 이상의 추가 소스 벡터 레지스터들이 벡터 결합 명령어에서 지정될 수 있다는 것이 당업자에 의해 인식될 것이다. 예시된 구성에서, 데이터 처리 장치(50)는 2개의 행렬들로부터의 요소들의 결합에 대응하는 결합 연산들의 시퀀스를 수행하는 데 사용된다. 특히, 데이터 처리 장치(50)는 행렬(58)에 행렬(600)을 곱한 결과를 계산하는 데 사용된다. 수학적으로, 이 연산은 행렬(58)의 각각의 행과 행렬(600)의 각각의 행의 내적을 계산하기 위해 내적들의 시퀀스를 수행함으로써 수행된다.
행렬(58)은 행렬(58)의 제1 열이 소스 벡터 레지스터 A(62)에 저장되고 행렬(58)의 제2 열이 소스 벡터 레지스터 B(64)에 저장되도록 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B(64)를 포함하는 복수의 소스 벡터 레지스터들에 저장된다. 행렬(600)은 행렬(600)의 제1 열이 추가 소스 벡터 레지스터 A(660)에 저장되고 행렬(600)의 제2 열이 추가 소스 벡터 레지스터 B(670)에 저장되도록 복수의 추가 소스 벡터 레지스터들에 저장된다. 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B(64)를 포함하는 복수의 소스 벡터 레지스터들, 및 추가 소스 벡터 레지스터 A(660) 및 추가 소스 벡터 레지스터 B(670)를 포함하는 복수의 추가 소스 벡터 레지스터들은 데이터 처리 장치(50)의 레지스터 저장소에 레지스터들(52)로서 저장된다.
저장된 벡터 레지스터들(52)을 갖는 데이터 처리 장치(50)는 벡터 결합 명령어에 응답한다. 벡터 결합 명령어는 디코딩 회로(56)에 의해 수신되며, 처리 회로(54)로 하여금 소스 벡터 레지스터들의 각각의 데이터 요소 위치에 대해 연산들의 시퀀스를 수행하게 한다. 이 경우에, 처리 회로는 4개의 소스 벡터 레지스터 위치들 각각에 대해 하나씩, 연산들의 4개 시퀀스를 (선택적으로 병렬로) 수행한다. 예시된 실시예에서, 결합 연산들은 결과 데이터 요소들을 생성하기 위해 내적 명령어들을 또는, 대안적으로, 곱셈 연산들을 소스 결합 연산들로서, 그리고 누산 연산들을 중간 결합 연산들로서 포함한다. 결과 데이터 요소들은 (예를 들어, 벡터 결합 명령어에서 정의된 바와 같이) 소스 벡터 요소들보다 2배 넓고, 따라서 결과 데이터 요소들에 충분한 저장 공간을 제공하기 위해 2개의 목적지 벡터 레지스터들을 요구한다. 이 경우에, 목적지 벡터 레지스터들은 결과 데이터 요소들(68(A), 68(B))을 포함하는 결과 벡터 레지스터 A(68), 및 결과 데이터 요소들(70(A) 및 70(B))을 포함하는 결과 벡터 레지스터 B(70)를 포함한다.
디코딩 회로(56)는 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B로부터 각각 제1 소스 데이터 요소들 A1,1 및 A1,2를 추출하고, 추가 소스 벡터 레지스터 A(660) 및 추가 소스 벡터 레지스터 B(670)로부터 각각 제2 소스 데이터 요소들 B1,1 및 B1,2를 추출함으로써 결과 데이터 요소(68(B))를 생성하도록 처리 회로(54)를 제어한다. 디코딩 회로(56)는 또한 내적 연산들을 수행함으로써 제1 소스 데이터 요소들과 제2 소스 데이터 요소들을 결합하여 결과 데이터 요소(68(B))를 생성하도록 처리 회로(54)를 제어하며, 결과 데이터 요소(68(B))에 계산 A1,1B1,1-+A1,2B1,2의 값이 저장된다. 따라서, 이러한 데이터 요소는 행렬(58)에 벡터(60)를 곱하는 것으로부터 기인하는 결과 행렬(72)의 제1 값을 포함한다.
디코딩 회로(56)는 소스 벡터 레지스터 A(62), 소스 벡터 레지스터 B(64), 추가 소스 벡터 레지스터 A(660), 및 추가 소스 벡터 레지스터 B(670)의 대응하는 위치들로부터 요소들을 추출하는 동일한 연산들의 시퀀스를 수행함으로써 결과 데이터 요소들(68(A), 70(B) 및 70(A))을 생성하도록 처리 회로(54)를 제어한다. 이러한 연산들은 각각의 소스 벡터 레지스터 위치에 대해 병렬로 또는 순차적으로 수행될 수 있다. 특히, 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B로부터 각각 제1 소스 데이터 요소들 A2,1 및 A2,2를 추출하고, 제1 소스 요소들과 추가 소스 벡터 레지스터 A(660) 및 추가 소스 벡터 레지스터 B(670)로부터 추출된 제2 소스 요소들 B-2,1 및 B2,2의 내적을 수행함으로써, 처리 회로는 A2,1B2,1+A2,2B2,2의 값을 갖는 결과 벡터 레지스터 A(68)에 저장되는 결과 데이터 요소(68(A))를 생성할 수 있다. 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B로부터 각각 제1 소스 데이터 요소들 A3,1 및 A3,2를 추출하고, 제1 소스 요소들과 추가 소스 벡터 레지스터 A(660) 및 추가 소스 벡터 레지스터 B(670)로부터 추출된 제2 소스 요소들 B-3,1 및 B3,2의 내적을 수행함으로써, 처리 회로는 A3,1B3,1+A3,2B3,2의 값을 갖는 결과 벡터 레지스터 B(70)에 저장되는 결과 데이터 요소(70(B))를 생성할 수 있다. 소스 벡터 레지스터 A(62) 및 소스 벡터 레지스터 B로부터 각각 제1 소스 데이터 요소들 A4,1 및 A4,2를 추출하고, 제1 소스 요소들과 추가 소스 벡터 레지스터 A(660) 및 추가 소스 벡터 레지스터 B(670)로부터 추출된 제2 소스 요소들 B-4,1 및 B4,2의 내적을 수행함으로써, 처리 회로는 A4,1B4,1+A4,2B4,2의 값을 갖는 결과 벡터 레지스터 B(70)에 저장되는 결과 데이터 요소(70(A))를 생성할 수 있다.
도 5는 다양한 예시적 구성들에 따른 데이터 처리 장치(80)에 대해 제공되는 레지스터들의 추가 세부 사항을 개략적으로 예시한다. 전술된 바와 같은 디코딩 회로(92) 및 처리 회로(90)에 더하여, 처리 장치(80)는 벡터 레지스터 저장소(82) 및 타일 레지스터 저장소(86)를 구비한다. 벡터 레지스터 저장소(82)는 N개의 벡터 레지스터들(84(1), 84(2), ..., 84(N))을 포함한다. 타일 레지스터 저장소(86)는 타일 레지스터들(88(1), ..., 88(M))을 포함한다. 제공되는 벡터 및 타일 레지스터들의 수는 구성에 따라 다를 수 있다. 각각의 벡터 레지스터는 복수의 요소들을 포함하며, 벡터 레지스터 기준으로 또는 벡터 요소 기준으로 어드레싱될 수 있다. 타일 레지스터들(88)은 요소들의 2차원 어레이로서 배열된다. 각각의 타일 레지스터는 타일 기준으로, 요소 기준으로, 또는 타일 레지스터의 행(수평 슬라이스) 또는 열(수직 슬라이스)의 면에서 어드레싱될 수 있다.
도 6은 본 기술의 다양한 예시적인 구성에 따른 처리 회로의 연산을 개략적으로 예시한다. 예시된 구성에서, 결합 연산들은 곱셈 연산들(96, 98)인 제1 결합 연산들 및 덧셈 연산들(100)인 제2 결합 연산들을 포함한다. 처리 회로는 소스 벡터 레지스터 A(90) 및 소스 벡터 레지스터 B(92)를 포함하는 복수의 소스 벡터 레지스터들, 및 추가 소스 벡터 레지스터(94)를 결합하는 벡터 결합 명령어에 응답한다. 처리 회로는 소스 벡터 레지스터들(90, 92) 각각과 동일한 크기의 동일한 수의 요소들을 포함하는 결과 벡터 레지스터 A(102)로 결과 요소들을 출력하도록 구성된다. 동작 시에, 처리 회로는 소스 벡터 레지스터 A(90)의 요소들을 추가 소스 벡터 레지스터(94)의 요소 b1과 결합하는 곱셈 연산들(98), 및 소스 벡터 레지스터 B(92)의 요소들을 추가 소스 벡터 레지스터(94)의 요소 b2와 결합하는 곱셈 연산들(96)을 수행한다. 곱셈 연산들의 대응하는 세트들의 결과들은 누산 연산(100)을 통해 결합되어, 결과 벡터 레지스터 A(102)에 저장되는 결과 데이터 요소들을 생성한다.
도 6의 처리 회로는, 각각이 결과 데이터 요소들 중 하나와 연관된(그리고 참조 번호의 끝에 있는 괄호 안에 포함된 문자에 의해 식별되는) 결합 연산들의 4개 세트를 수행하는 회로를 제공한다. 최상위(가장 왼쪽) 결과 데이터 요소는 곱셈 연산들(96(D) 및 98(D)), 및 곱셈 연산들(96(D) 및 98(D))의 출력들을 결합하는 누산 연산(100(D))을 사용하여 추가 소스 벡터 레지스터(94)의 대응하는 요소들과 결합된 소스 벡터 레지스터 A(90) 및 소스 벡터 레지스터 B(92)의 최상위 요소들로부터 생성된다. 유사하게, 결과 벡터 레지스터(102)의 두 번째 최상위 요소는 곱셈 연산들(96(C) 및 98(C)), 및 곱셈 연산들(96(C) 및 98(C))의 출력들을 결합하는 누산 연산(100(C))을 사용하여 추가 소스 벡터 레지스터(94)의 대응하는 요소들과 결합된 소스 벡터 레지스터 A(90) 및 소스 벡터 레지스터 B(92)의 두 번째 최상위 요소들로부터 생성된다. 유사하게, 결과 벡터 레지스터(102)의 두 번째 최하위 요소는 곱셈 연산들(96(B) 및 98(B)), 및 곱셈 연산들(96(B) 및 98(B))의 출력들을 결합하는 누산 연산(100(B))을 사용하여 추가 소스 벡터 레지스터(94)의 대응하는 요소들과 결합된 소스 벡터 레지스터 A(90) 및 소스 벡터 레지스터 B(92)의 두 번째 최하위 요소들로부터 생성된다. 마지막으로, 최하위(가장 오른쪽) 결과 데이터 요소는 곱셈 연산들(96(A) 및 98(A)), 및 곱셈 연산들(96(A) 및 98(A))의 출력들을 결합하는 누산 연산(100(A))을 사용하여 추가 소스 벡터 레지스터(94)의 대응하는 요소들과 결합된 소스 벡터 레지스터 A(90) 및 소스 벡터 레지스터 B(92)의 최하위 요소들로부터 생성된다.
도 7은 다양한 예시적인 구성에 따른 처리 회로에 의해 수행되는 연산들의 세부 사항을 개략적으로 예시한다. 도 7의 처리 회로는 도 6과 관련하여 설명된 것들과 동일한 소스 결합 연산들을 포함한다. 도 6의 중간 결합 연산들은 도 6의 중간 결합 연산들(100)과 동일한 제1 중간 결합 연산들(100)을 포함한다. 또한, 도 7의 처리 회로는, 예시된 실시예에서, 누산 연산들인 제2 중간 결합 연산들(104)을 구비한다. 제2 중간 결합 연산들은 제1 중간 결합 연산들(100)로부터의 출력을, 목적지 벡터 레지스터(102)에 이미 존재하는 데이터 요소의 값과 결합한다. 결과 벡터 레지스터(102)의 결과 데이터 요소들은 각각 소스 벡터 레지스터들(90, 92)의 데이터 요소들과 동일한 크기를 갖는다.
도 7의 처리 회로는, 각각이 결과 데이터 요소들 중 하나와 연관된 결합 연산들의 4개 세트를 수행하는 회로를 제공한다. 최하위 결과 데이터 요소는 곱셈 연산들(96(D) 및 98(D)), 및 곱셈 연산들(96(D) 및 98(D))의 출력들을 결합하는 누산 연산(100(D)), 및 누산 연산(100(D))의 출력과 결과 벡터 레지스터(102) 내의 기존 값을 누산하는 누산 연산(104(D))을 사용하여 추가 소스 벡터 레지스터(94)의 대응하는 요소들과 결합된 소스 벡터 레지스터 A(90) 및 소스 벡터 레지스터 B(92)의 최하위 요소들로부터 생성된다. 유사하게, 결과 벡터 레지스터(102)의 두 번째 최하위 요소는 곱셈 연산들(96(C) 및 98(C)), 및 곱셈 연산들(96(C) 및 98(C))의 출력들을 결합하는 누산 연산(100(C)), 및 누산 연산(100(C))의 출력과 결과 벡터 레지스터(102) 내의 기존 값을 누산하는 누산 연산(104(C))을 사용하여 추가 소스 벡터 레지스터(94)의 대응하는 요소들과 결합된 소스 벡터 레지스터 A(90) 및 소스 벡터 레지스터 B(92)의 두 번째 최하위 요소들로부터 생성된다. 유사하게, 결과 벡터 레지스터(102)의 두 번째 최상위 요소는 곱셈 연산들(96(B) 및 98(B)), 및 곱셈 연산들(96(B) 및 98(B))의 출력들을 결합하는 누산 연산(100(B)), 및 누산 연산(100(B))의 출력과 결과 벡터 레지스터(102) 내의 기존 값을 누산하는 누산 연산(104(B))을 사용하여 추가 소스 벡터 레지스터(94)의 대응하는 요소들과 결합된 소스 벡터 레지스터 A(90) 및 소스 벡터 레지스터 B(92)의 두 번째 최상위 요소들로부터 생성된다. 마지막으로, 최상위 결과 데이터 요소는 곱셈 연산들(96(A) 및 98(A)), 및 곱셈 연산들(96(A) 및 98(A))의 출력들을 결합하는 누산 연산(100(A)), 및 누산 연산(100(A))의 출력과 결과 벡터 레지스터(102) 내의 기존 값을 누산하는 누산 연산(104(A))을 사용하여 추가 소스 벡터 레지스터(94)의 대응하는 요소들과 결합된 소스 벡터 레지스터 A(90) 및 소스 벡터 레지스터 B(92)의 최상위 요소들로부터 생성된다. 누산 연산들(100 및 104)과 곱셈 연산들(96 및 98)은 분리된 별개의 논리 블록들로서, 또는 누산 연산들(100 및 104) 및 곱셈 연산들(96 및 98) 각각을 참조하여 설명된 바와 같은 누산 및 곱셈의 단계들을 수행하는 단일 결합 회로로서 제공될 수 있다. 더욱이, 누산 및 곱셈 회로들의 단일의 완전한 세트, 예를 들어 스위치(디멀티플렉서)를 사용하여 선택된 소스 벡터 레지스터 A 및 소스 벡터 레지스터 B의 피연산자들 및 스위치(멀티플렉서)를 사용하여 목적지 레지스터 내의 대응하는 위치들로 공급된 결과 데이터 요소들로 전술된 단계들을 순차적으로 수행하기 위한 곱셈 회로들(96(A) 및 98(A)) 및 누산 유닛들(100(A) 및 104(A))이 제공될 수 있다.
도 8은 다양한 예시적인 구성에 따른 처리 회로에 의해 수행되는 연산들의 세부 사항을 개략적으로 예시한다. 도 8의 처리 회로는 도 6과 관련하여 설명된 바와 같은 소스 결합 연산들 및 중간 결합 연산들을 포함한다. 중간 결합 연산들은 도 7과 관련하여 설명된 제2 중간 결합 연산들을 동일하게 포함할 수 있다. 처리 회로는 입력 소스 레지스터들(90, 92)의 데이터 요소들보다 2배 넓은 결과 데이터 요소들을 생성하도록 구성된다. 결과 데이터 요소들은 목적지 레지스터 A(106) 및 목적지 레지스터 B(108)에 저장된다. 목적지 레지스터 A(106) 및 목적지 레지스터 B(108)는 목적지 레지스터들의 수와 동일한 행들의 수, 및 각각의 목적지 레지스터에서의 데이터 요소들의 수와 동일한 열들의 수를 포함하는 결과 어레이를 형성하도록 배열된다. 더욱이, 처리 회로는 결과 데이터 요소들을 결과 어레이에 행-우선 순서로 배열하도록 구성된다. 특히, 소스 레지스터 B(92)의 요소들 A1,2 및 A2,2 및 소스 레지스터 A(90)의 요소들 A1,1 및 A2,1과 연관된 결과 데이터 요소들은 목적지 레지스터 A(106)에 저장된다. 유사하게, 소스 레지스터 B(92)의 요소들 A3,2 및 A4,2 및 소스 레지스터 A(90)의 요소들 A3,1 및 A4,1과 연관된 결과 데이터 요소들은 목적지 레지스터 B(108)에 저장된다.
도 9는 다양한 예시적인 구성에 따른 처리 회로에 의해 수행되는 연산들의 세부 사항을 개략적으로 예시한다. 도 9의 처리 회로는 도 6 및 도 8과 관련하여 설명된 것들과 동일한 소스 결합 연산들 및 중간 결합 연산들을 포함한다. 처리 회로는 입력 소스 레지스터들(90, 92)의 데이터 요소들보다 2배 넓은 결과 데이터 요소들을 생성하도록 구성된다. 결과 데이터 요소들은 목적지 레지스터 A(106) 및 목적지 레지스터 B(108)에 저장된다. 목적지 레지스터 A(106) 및 목적지 레지스터 B(108)는 목적지 레지스터들의 수와 동일한 행들의 수, 및 각각의 목적지 레지스터에서의 데이터 요소들의 수와 동일한 열들의 수를 포함하는 결과 어레이를 형성하도록 배열된다. 더욱이, 처리 회로는 결과 데이터 요소들을 결과 어레이에 열-우선 순서로 배열하도록 구성된다. 특히, 소스 레지스터 B(92)의 요소들 A1,2 및 A3,2 및 소스 레지스터 A(90)의 요소들 A1,1 및 A3,1과 연관된 결과 데이터 요소들은 목적지 레지스터 A(106)에 저장된다. 유사하게, 소스 레지스터 B(92)의 요소들 A2,2 및 A4,2 및 소스 레지스터 A(90)의 요소들 A2,1 및 A4,1과 연관된 결과 데이터 요소들은 목적지 레지스터 B(108)에 저장된다.
도 10은 다양한 예시적인 구성에 따른 처리 회로에 의해 수행되는 연산들의 세부 사항을 개략적으로 예시한다. 도 10의 처리 회로는 도 6, 도 8 및 도 9와 관련하여 설명된 소스 결합 연산들 및 중간 결합 연산들과 기능적으로 동등한 소스 결합 연산들 및 중간 결합 연산들을 포함한다. 몇몇 구성에서, 도 10의 중간 결합 연산들은 또한 도 7과 관련하여 설명된 제2 중간 결합 연산들을 통합하도록 수정될 수 있다는 점에 유의한다. 도 10의 처리 회로는, 적어도 소스 결합 연산들의 서브세트가 중간 결합 연산들과 병렬로 수행된다는 점에서, 이전의 실시예들과는 상이하다. 특히, 소스 결합 연산들은 곱셈 연산들이고, 중간 결합 연산들은 누산 연산들이다. 소스 벡터 레지스터 B(92)와 연관된 소스 결합 연산들(96)은 2개의 입력, 즉 소스 벡터 레지스터 B(92)로부터의 하나 그리고 추가 소스 벡터 레지스터(94)로부터의 하나를 취하는 곱셈 연산들로서 수행된다. 소스 벡터 레지스터 A(90)와 연관된 소스 결합 연산들과 중간 결합 연산들은 각각 융합 곱셈 누산(FMA) 유닛들(110)에 의해 병렬로 수행된다. 각각의 융합 곱셈 누산 유닛(110)은 곱셈들(112)을 수행하는 회로 및 누산들(114)을 수행하는 회로를 포함한다. 융합 곱셈 누산 유닛(110(A))은 소스 결합 연산(96(A)) 및 소스 벡터 A(90)로부터 입력들을 취하고, 결과 데이터 요소를 목적지 레지스터 A(106)로 출력한다. 융합 곱셈 누산 유닛(110(B))은 소스 결합 연산(96(B)) 및 소스 벡터 A(90)로부터 입력들을 취하고, 결과 데이터 요소를 목적지 레지스터 A(106)로 출력한다. 융합 곱셈 누산 유닛(110(C))은 소스 결합 연산(96(C)) 및 소스 벡터 A(90)로부터 입력들을 취하고, 결과 데이터 요소를 목적지 레지스터 B(108)로 출력한다. 융합 곱셈 누산 유닛(110(D))은 소스 결합 연산(96(D)) 및 소스 벡터 A(90)로부터 입력들을 취하고, 결과 데이터 요소를 목적지 레지스터 B(108)로 출력한다. 예시된 실시예에서, 결과 요소들은 도 8과 관련하여 논의된 바와 같이 행-우선 순서로 출력된다. 그러나, 데이터 요소들은 임의의 크기의 결과 데이터 요소들을 저장하도록 또한 구성될 수 있는 목적지 레지스터들(106, 108)로 열-우선 순서로 출력될 수 있고, 중간 결합 연산들은 또한 결과들을 목적지 레지스터들(106 108)에 누산하는 제2 중간 결합 연산을 포함할 수 있다는 것이 당업자에 의해 인식될 것이다.
도 11a 및 도 11b는 스케일링 연산들이 수행되는 본 기술에 따른 처리 장치의 세부 사항을 개략적으로 예시한다. 도 11a는 스케일링 값들의 단일 세트가 명령어에서 지정되는 경우를 개략적으로 예시하고, 도 11b는 스케일링 값들의 한 세트가 각각의 입력 벡터 레지스터에 대해 제공되는 경우를 개략적으로 예시한다.
도 11a는 본 기술의 다양한 구성에 따른 처리 회로에 의해 수행되는 연산들의 세부 사항을 개략적으로 예시한다. 예시된 실시예에서, 처리 회로는 소스 결합 연산들 및 중간 결합 연산들을 포함하며, 여기서 소스 결합 연산들은 덧셈/뺄셈 연산들(116, 118), 및 곱셈 연산들(120, 122)을 수반하는 스케일링 연산들이다. 연산들은 복수의 소스 벡터 레지스터들, 즉 소스 벡터 레지스터 A(90) 및 소스 벡터 레지스터 B(92)에서의 각각의 데이터 요소 위치에 대해 수행된다. (참조 번호의 끝에 있는 괄호 안의 동일한 문자에 의해 식별되는) 연산들의 각각의 세트는 복수의 소스 벡터 레지스터들 각각의 위치로부터 제1 소스 데이터 요소들을 추출하고 추가 소스 벡터 레지스터(94)로부터 제2 소스 데이터 요소들을 추출하는 것을 포함한다. 연산들은 추가 소스 벡터 레지스터(94)로부터 추출된 제2 소스 데이터 요소들로부터 제1 스케일링 값(이 경우에 b2)을 추출하는 것을 수반한다. 제1 스케일링 값은 제1 소스 데이터 요소들 중 하나와 함께 덧셈/뺄셈 유닛들(116, 118)에 입력된다. 각각의 제1 소스 데이터 요소는 덧셈/뺄셈 유닛들(116, 118)에 의한 제1 스케일링 값의 덧셈/뺄셈을 통해 스케일링된다. 연산들은 제2 소스 데이터 요소들로부터 제2 스케일링 값(이 경우에 b1)을 추출하는 것을 추가로 수반한다. 덧셈/뺄셈 연산들(116, 118)의 결과는 곱셈 유닛들(120, 122)에 공급되어, 덧셈/뺄셈 연산의 결과에 제2 스케일링 값을 곱하여 중간 데이터 요소들을 생성한다. 중간 데이터 요소들은 곱셈 유닛들(120, 122)의 출력들을 결합하기 위해 중간 결합 연산을 수행하는 결합 유닛들(124)에 공급된다. 수행되는 중간 결합 연산은 본 명세서에 설명된 연산들 중 임의의 것일 수 있다. 예를 들어, 중간 결합 연산은 곱셈, 누산 연산 또는 다른 수학적 또는 논리적 연산일 수 있다. 누산 연산들(124)로부터의 출력은 목적지 레지스터들(106, 108)에 저장된다.
소스 벡터 레지스터 A(90)의 최하위 위치로부터의 요소 A4,2는 덧셈/뺄셈 유닛(116(D))을 사용하여 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(120(D))을 사용하여 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 유사하게, 소스 벡터 레지스터 B(92)의 최하위 위치로부터의 요소 A4,1은 덧셈/뺄셈 유닛(118(D))을 사용하여 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(122(D))을 사용하여 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 곱셈 유닛(120(D)) 및 곱셈 유닛(122(D))에 의해 출력된 중간 데이터 요소들은 결합 연산(124(D))을 통해 결합되어 목적지 레지스터 B(108)에 저장되는 결과 데이터 요소 을 생성하며, 여기서 은 임의의 결합 연산을 표시하기 위해 사용된다.
소스 벡터 레지스터 A(90)의 최하위 위치로부터의 요소 A3,2는 덧셈/뺄셈 유닛(116(C))을 사용하여 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(120(C))을 사용하여 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 유사하게, 소스 벡터 레지스터 B(92)의 최하위 위치로부터의 요소 A3,1은 덧셈/뺄셈 유닛(118(C))을 사용하여 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(122(C))을 사용하여 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 곱셈 유닛(120(C)) 및 곱셈 유닛(122(C))에 의해 출력된 중간 데이터 요소들은 결합 연산(124(C))을 통해 결합되어 목적지 레지스터 B(108)에 저장되는 결과 데이터 요소 을 생성한다.
소스 벡터 레지스터 A(90)의 최하위 위치로부터의 요소 A2,2는 덧셈/뺄셈 유닛(116(B))을 사용하여 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(120(B))을 사용하여 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 유사하게, 소스 벡터 레지스터 B(92)의 최하위 위치로부터의 요소 A2,1은 덧셈/뺄셈 유닛(118(B))을 사용하여 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(122(B))을 사용하여 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 곱셈 유닛(120(B)) 및 곱셈 유닛(122(B))에 의해 출력된 중간 데이터 요소들은 결합 연산(124(B))을 통해 결합되어 목적지 레지스터 A(108)에 저장되는 결과 데이터 요소 을 생성한다.
소스 벡터 레지스터 A(90)의 최하위 위치로부터의 요소 A1,2는 덧셈/뺄셈 유닛(116(A))을 사용하여 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(120(A))을 사용하여 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 유사하게, 소스 벡터 레지스터 B(92)의 최하위 위치로부터의 요소 A1,1은 덧셈/뺄셈 유닛(118(A))을 사용하여 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(122(A))을 사용하여 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 곱셈 유닛(120(A)) 및 곱셈 유닛(122(A))에 의해 출력된 중간 데이터 요소들은 결합 연산(124(A))을 통해 결합되어 목적지 레지스터 A(108)에 저장되는 결과 데이터 요소 을 생성한다.
도 11a에 예시된 구성에서, 소스 벡터 레지스터 A(90) 및 소스 벡터 레지스터 B 각각은 동일한 제1 스케일링 값 및 동일한 제2 스케일링 값에 의해 스케일링된다. 도 11b에 예시된 대안적인 구성에서, 소스 벡터 레지스터 A(90)는 대응하는 제1 스케일링 값 b4 및 대응하는 제2 스케일링 값 b3에 의해 스케일링되는 반면, 소스 벡터 레지스터 B(92)는 대응하는 제1 스케일링 값 b2 및 대응하는 제2 스케일링 값 b1에 의해 스케일링된다. 스케일링 값들 b1, b2, b3, 및 b4는 각각 추가 소스 벡터 레지스터(94)에 저장된다. 대안적인 구성에서, 제1 스케일링 값들 b2 및 b4는 하나의 추가 소스 벡터 레지스터에 저장될 수 있고, 제2 스케일링 값들 b1 및 b3은 상이한 추가 소스 벡터 레지스터에 저장될 수 있다. 다른 구성에서, 4개의 스케일링 값들 각각은 별개의 소스 벡터 레지스터에 저장될 수 있다. 도 11b에 예시된 회로의 동작은 도 11a와 관련하여 설명된 회로와 유사하다.
도 11b에서, 소스 벡터 레지스터 A(90)의 최하위 위치로부터의 요소 A4,2는 덧셈/뺄셈 유닛(116(D))을 사용하여 대응하는 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(120(D))을 사용하여 대응하는 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 유사하게, 소스 벡터 레지스터 B(92)의 최하위 위치로부터의 요소 A4,1은 덧셈/뺄셈 유닛(118(D))을 사용하여 대응하는 제1 스케일링 값 b4와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(122(D))을 사용하여 대응하는 제2 스케일링 값 b3과 결합되어 중간 데이터 요소를 생성한다. 곱셈 유닛(120(D)) 및 곱셈 유닛(122(D))에 의해 출력된 중간 데이터 요소들은 결합 연산(124(D))을 통해 결합되어 목적지 레지스터 B(108)에 저장되는 결과 데이터 요소 을 생성하며, 여기서 은 임의의 결합 연산을 표시하기 위해 사용된다.
소스 벡터 레지스터 A(90)의 최하위 위치로부터의 요소 A3,2는 덧셈/뺄셈 유닛(116(C))을 사용하여 대응하는 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(120(C))을 사용하여 대응하는 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 유사하게, 소스 벡터 레지스터 B(92)의 최하위 위치로부터의 요소 A3,1은 덧셈/뺄셈 유닛(118(C))을 사용하여 대응하는 제1 스케일링 값 b4와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(122(C))을 사용하여 대응하는 제2 스케일링 값 b3과 결합되어 중간 데이터 요소를 생성한다. 곱셈 유닛(120(C)) 및 곱셈 유닛(122(C))에 의해 출력된 중간 데이터 요소들은 결합 연산(124(C))을 통해 결합되어 목적지 레지스터 B(108)에 저장되는 결과 데이터 요소 을 생성한다.
소스 벡터 레지스터 A(90)의 최하위 위치로부터의 요소 A2,2는 덧셈/뺄셈 유닛(116(B))을 사용하여 대응하는 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(120(B))을 사용하여 대응하는 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 유사하게, 소스 벡터 레지스터 B(92)의 최하위 위치로부터의 요소 A2,1은 덧셈/뺄셈 유닛(118(B))을 사용하여 대응하는 제1 스케일링 값 b4와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(122(B))을 사용하여 대응하는 제2 스케일링 값 b3과 결합되어 중간 데이터 요소를 생성한다. 곱셈 유닛(120(B)) 및 곱셈 유닛(122(B))에 의해 출력된 중간 데이터 요소들은 결합 연산(124(B))을 통해 결합되어 목적지 레지스터 A(108)에 저장되는 결과 데이터 요소 을 생성한다.
소스 벡터 레지스터 A(90)의 최하위 위치로부터의 요소 A1,2는 덧셈/뺄셈 유닛(116(A))을 사용하여 대응하는 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(120(A))을 사용하여 대응하는 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 유사하게, 소스 벡터 레지스터 B(92)의 최하위 위치로부터의 요소 A1,1은 덧셈/뺄셈 유닛(118(A))을 사용하여 대응하는 제1 스케일링 값 b2와 결합되어 중간 스케일링된 요소를 생성한다. 중간 스케일링된 요소는 곱셈 유닛(122(A))을 사용하여 대응하는 제2 스케일링 값 b1과 결합되어 중간 데이터 요소를 생성한다. 곱셈 유닛(120(A)) 및 곱셈 유닛(122(A))에 의해 출력된 중간 데이터 요소들은 결합 연산(124(A))을 통해 결합되어 목적지 레지스터 A(108)에 저장되는 결과 데이터 요소 을 생성한다.
도 12는 본 기술의 다양한 구성에 따른 처리 회로에 의해 수행되는 연산들의 추가 세부 사항을 개략적으로 예시한다. 도 12의 벡터 결합 연산은 복수의 소스 벡터 레지스터들(130) 및 추가 소스 벡터 레지스터(132)로부터의 데이터 요소들을 결합한다. 각각의 소스 벡터 레지스터(130)는 결합 회로(136)를 사용하여 추가 소스 레지스터(132)의 상이한 요소와 결합된다. 이 경우에, 결합 연산들은 곱셈 연산들이고, 중간 데이터 요소들(134)을 야기한다. 소스 벡터 레지스터 A(130(A))는 결합 회로(136(A))를 사용하여 추가 소스 벡터 레지스터(132)의 최상위(가장 왼쪽) 요소와 곱해져 중간 데이터 요소들(134(A))을 생성한다. 소스 벡터 레지스터 B(130(B))는 결합 회로(136(B))를 사용하여 추가 소스 벡터 레지스터(132)의 두 번째 최상위 요소와 곱해져 중간 데이터 요소들(134(B))을 생성한다. 소스 벡터 레지스터 C(130(C))는 결합 회로(136(C))를 사용하여 추가 소스 벡터 레지스터(132)의 두 번째 최하위 요소와 곱해져 중간 데이터 요소(134(C))를 생성한다. 소스 벡터 레지스터 D(130(D))는 결합 회로(136(D))를 사용하여 추가 소스 벡터 레지스터(132)의 최하위(가장 오른쪽) 요소와 곱해져 중간 데이터 요소(134(D))를 생성한다. 중간 데이터 요소들은 복수의 소스 벡터 레지스터들의 요소들과 동일한 폭의 요소들일 수 있거나, 소스 데이터 요소들보다 더 넓을 수 있다.
중간 데이터 요소들(134)은 중간 결합 회로(140)를 사용하여 결합된다. 예시된 실시예에서, 결합 연산들은 누산 연산들이다. 중간 결합 회로(140(A))는 중간 데이터 요소들(134)의 각각의 세트의 최상위 요소들을 결합하여 결과 데이터 요소(142(A))를 생성한다. 중간 결합 회로(140(B))는 중간 데이터 요소들(134)의 각각의 세트의 두 번째 최상위 요소들을 결합하여 결과 데이터 요소(142(B))를 생성한다. 중간 결합 회로(140(C))는 중간 데이터 요소들(134)의 각각의 세트의 두 번째 최하위 요소들을 결합하여 결과 데이터 요소(142(C))를 생성한다. 중간 결합 회로(140(D))는 중간 데이터 요소들의 각각의 세트의 최하위 요소들을 결합하여 결과 데이터 요소(142(D))를 생성한다. 이러한 방식으로 생성된 결과적인 데이터 요소들은 소스 벡터 레지스터들(130) 및 추가 소스 벡터 레지스터(132)에서의 동일한 요소 위치의 요소들로부터 형성된 벡터들 사이에서 수행되는 내적 연산들의 시퀀스에 대응한다. 결과 데이터 요소들은 결과 어레이(142)에 저장되며, 이는 벡터 레지스터들의 어레이 또는 하나 이상의 타일 레지스터들의 수평 또는 수직 슬라이스들의 어레이일 수 있다.
도 13은 명령어들의 시퀀스에 응답하여 처리 장치에 의해 수행되는 단계들의 시퀀스를 개략적으로 예시한다. 흐름은 단계 S100에서 시작되며, 여기서 다음 명령어가 디코딩 회로에 의해 수신된다. 이어서 흐름은 단계 S102로 진행하며, 여기서 수신된 명령어가 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들 및 하나 이상의 목적지 레지스터들을 지정하는 벡터 결합 명령어인지가 결정된다. 명령어가 벡터 결합 명령어가 아닌 것으로 결정되는 경우, 흐름이 다음 명령어를 기다리기 위해 단계 S100으로 복귀하기 전에 특정 명령어 및 그것이 속한 명령어 세트 아키텍처의 요건에 기초하여 디코딩 회로에 의해 명령어가 발행될 것이다. 단계 S102에서, 명령어가 벡터 결합 명령어인 것으로 결정되는 경우, 흐름은 단계 S104로 진행하며, 여기서, 소스 벡터들의 각각의 위치 i에 대해, 단계들의 시퀀스가 (선택적으로 병렬로) 수행된다. 흐름은 (각각의 위치 i에 대해) 단계 S106으로 진행하며, 여기서 복수의 소스 벡터 레지스터들 각각의 위치 i로부터 제1 소스 데이터 요소들이 추출된다. 이어서 흐름은 단계 S108로 진행하며, 여기서 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들이 추출된다. 이어서 흐름은 단계 S110으로 진행하며, 여기서 결합 연산들이 수행되어 결과 데이터 요소를 생성한다. 결합 연산들은 제1 소스 데이터 요소들 및 제2 소스 데이터 요소들의 각각의 데이터 요소를 결합하는 것을 수반한다. 이어서 흐름은 단계 S112로 진행하며, 여기서 결과 데이터 요소는 하나 이상의 목적지 벡터 레지스터들의 위치 i에 저장된다. 이어서 흐름은 다음 명령어를 기다리기 위해 단계 S100으로 복귀한다.
도 14는 사용될 수 있는 시뮬레이터 구현예를 예시한다. 앞서 설명된 실시예들은 관심이 있는 기술들을 지원하는 특정 처리 하드웨어를 동작시키기 위한 장치 및 방법들과 관련하여 본 발명을 구현하지만, 본 명세서에서 설명되는 실시예들에 따라 컴퓨터 프로그램의 사용을 통해 구현되는 명령어 실행 환경을 제공하는 것이 또한 가능하다. 그러한 컴퓨터 프로그램들은, 그들이 하드웨어 아키텍처의 소프트웨어 기반 구현예를 제공하는 한, 종종 시뮬레이터들로 지칭된다. 다양한 시뮬레이터 컴퓨터 프로그램들은 에뮬레이터들, 가상 머신들, 모델들, 및 동적 이진 변환기(dynamic binary translator)들을 포함한 이진 변환기들을 포함한다. 전형적으로, 시뮬레이터 구현예는 호스트 하드웨어(515) 상에서 실행되어, 호스트 운영 체제(호스트 OS)(510)를 선택적으로 실행하여, 시뮬레이터 프로그램(505)을 지원할 수 있다. 몇몇 배열들에서, 하드웨어와 제공된 명령어 실행 환경 사이에 다수의 시뮬레이션 계층들이 있을 수 있고/있거나, 동일한 호스트 프로세서 상에 제공된 다수의 별개의 명령어 실행 환경들이 있을 수 있다. 역사적으로, 강력한 프로세서들이 합리적인 속도로 실행되는 시뮬레이터 구현예들을 제공하기 위해 요구되었지만, 그러한 접근법은 호환성 또는 재사용 이유들을 위해 다른 프로세서에 고유한 코드를 실행하려는 요구가 있을 때와 같은 소정 상황들에서 정당화될 수 있다. 예를 들어, 시뮬레이터 구현예는 호스트 프로세서 하드웨어에 의해 지원되지 않는 추가적인 기능을 명령어 실행 환경에 제공할 수 있거나, 또는 상이한 하드웨어 아키텍처와 전형적으로 연관된 명령어 실행 환경을 제공할 수 있다. 시뮬레이션의 개요가 문헌["Some Efficient Architecture Simulation Techniques", Robert Bedichek, Winter 1990 USENIX Conference, Pages 53 - 63]에서 주어진다.
실시예들이 특정 하드웨어 구성들 또는 특징부들을 참조하여 앞서 설명된 범위 내에서, 시뮬레이션된 실시예에서, 동등한 기능이 적합한 소프트웨어 구성들 또는 특징부들에 의해 제공될 수 있다. 예를 들어, 특정 회로는 시뮬레이션된 실시예에서 컴퓨터 프로그램 로직으로서 구현될 수 있다. 유사하게, 레지스터 또는 캐시와 같은 메모리 하드웨어가 시뮬레이션된 실시예에서 소프트웨어 데이터 구조로서 구현될 수 있다. 전술된 실시예들에서 언급된 하드웨어 요소들 중 하나 이상의 하드웨어 요소들이 호스트 하드웨어(예를 들어, 호스트 프로세서(730)) 상에 존재하는 배열들에서, 몇몇 시뮬레이션된 실시예들은, 적합한 경우, 호스트 하드웨어를 사용할 수 있다.
시뮬레이터 프로그램(505)은 컴퓨터-판독가능 저장 매체(이는 비일시적 매체일 수 있음) 상에 저장될 수 있으며, 타겟 코드(500)에 프로그램 인터페이스(명령어 실행 환경)를 제공하는데, 이는 시뮬레이터 프로그램(505)에 의해 모델링되는 하드웨어 아키텍처의 애플리케이션 프로그램 인터페이스와 동일하다. 시뮬레이터 프로그램(505)은 명령어들을 디코딩하는 디코딩 로직(520); 및 명령어들에 의해 지정된 벡터 처리 연산들을 입력 데이터 벡터들 - 입력 데이터 벡터들은 입력 데이터 벡터들 내의 각자의 위치들에서 복수의 입력 데이터 항목들을 포함함 - 에 선택적으로 적용하는 처리 로직(530)을 포함한다. 디코딩 로직(520)은, 각각이 복수의 데이터 요소 위치들 내에 소스 데이터 요소들을 포함하는 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들, 및 하나 이상의 목적지 레지스터들을 지정하는 벡터 결합 명령어에 응답하여, 처리 로직(530)으로 하여금, 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에 대해, 각각의 소스 벡터 레지스터의 데이터 요소 위치로부터 제1 소스 데이터 요소들을 추출하고; 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하고; 결합 연산들을 수행하여 결과 데이터 요소를 생성하고 - 결과 데이터 요소는 제1 소스 데이터 요소들 및 제2 소스 데이터 요소들의 각각의 요소를 결합함으로써 계산됨 -; 결과 데이터 요소를 하나 이상의 목적지 레지스터들의 데이터 요소 위치에 저장하게 하는 제어 신호들을 생성하도록 구성된다. 이에 따라, 전술된 복소수 처리 명령어들을 포함한, 타겟 코드(500)의 프로그램 명령어들은 시뮬레이터 프로그램(505)을 사용하여 명령어 실행 환경 내로부터 실행될 수 있으며, 따라서 위에서 논의된 장치의 하드웨어 특징을 실제로 포함하지 않는 호스트 하드웨어(515)가 이러한 특징들을 에뮬레이션할 수 있다.
간략하게 전체적으로 요약하면, 처리 장치, 방법 및 컴퓨터 프로그램이 제공된다. 장치는 명령어들을 디코딩하는 디코딩 회로; 및 명령어들에 의해 지정된 벡터 처리 연산들을 적용하는 처리 회로를 포함한다. 디코딩 회로는, 각각이 복수의 데이터 요소 위치들 내에 소스 데이터 요소들을 포함하는 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들, 및 하나 이상의 목적지 레지스터들을 지정하는 벡터 결합 명령어에 응답하여, 처리 회로로 하여금, 각각의 데이터 요소 위치에 대해, 각각의 소스 벡터 레지스터의 데이터 요소 위치로부터 제1 소스 데이터 요소들을 추출하고; 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하고; 제1 소스 데이터 요소들 및 제2 소스 데이터 요소들의 각각의 요소를 결합함으로써 결과 데이터 요소를 생성하고; 결과 데이터 요소를 하나 이상의 목적지 레지스터들의 데이터 요소 위치에 저장하게 하도록 구성된다.
본 출원에서, 단어들 "... 하도록 구성된"은 장치의 요소가 정의된 동작을 수행할 수 있는 구성을 갖는다는 것을 의미하는 데 사용된다. 이러한 맥락에서, "구성"은 하드웨어 또는 소프트웨어의 상호접속의 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 처리 디바이스가 기능을 수행하도록 프로그래밍될 수 있다. "하도록 구성된"은, 장치 요소가, 정의된 동작을 제공하기 위해 어떤 방식으로든 변경될 필요가 있음을 암시하지는 않는다.
예시적인 실시예들이 첨부 도면들을 참조하여 본 명세서에서 상세히 설명되었지만, 본 발명은 그러한 정확한 실시예들로 제한되지 않으며, 첨부된 청구항들에 의해 한정된 바와 같은 본 발명의 범위 및 사상으로부터 벗어남이 없이 실시예들에서 다양한 변경들, 추가들 및 수정들이 당업자에 의해 이루어질 수 있다는 것이 이해되어야 한다. 예를 들어, 본 발명의 범위로부터 벗어남이 없이 독립 청구항들의 특징들과 종속 청구항들의 특징들의 다양한 조합이 이루어질 수 있다.

Claims (29)

  1. 처리 장치로서,
    명령어들을 디코딩하는 디코딩 회로; 및
    상기 명령어들에 의해 지정된 벡터 처리 연산들을 입력 데이터 벡터들 - 상기 입력 데이터 벡터들은 상기 입력 데이터 벡터들 내의 각자의 위치들에서 복수의 입력 데이터 항목들을 포함함 - 에 선택적으로 적용하는 처리 회로를 포함하며,
    상기 디코딩 회로는, 각각이 복수의 데이터 요소 위치들 내에 소스 데이터 요소들을 포함하는 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들, 및 하나 이상의 목적지 레지스터들을 지정하는 벡터 결합 명령어에 응답하여, 상기 처리 회로로 하여금, 상기 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에 대해,
    각각의 소스 벡터 레지스터의 상기 데이터 요소 위치로부터 제1 소스 데이터 요소들을 추출하고,
    상기 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하고,
    결합 연산들을 수행하여 결과 데이터 요소를 생성하고 - 상기 결과 데이터 요소는 상기 제1 소스 데이터 요소들 및 상기 제2 소스 데이터 요소들의 각각의 요소를 결합함으로써 계산됨 -,
    상기 결과 데이터 요소를 상기 하나 이상의 목적지 레지스터들의 상기 데이터 요소 위치에 저장하게 하는
    제어 신호들을 생성하도록 구성되는, 처리 장치.
  2. 제1항에 있어서, 상기 결합 연산들은,
    중간 데이터 요소들을 생성하는 소스 결합 연산들 - 각각의 중간 데이터 요소는 상기 제1 소스 데이터 요소들 중의 대응하는 제1 소스 데이터 요소를 상기 제2 소스 데이터 요소들과 결합함으로써 생성됨 -,
    상기 중간 데이터 요소들을 결합하여 상기 결과 데이터 요소를 생성하는 중간 결합 연산들을 포함하는, 처리 장치.
  3. 제2항에 있어서,
    상기 소스 결합 연산들은 곱셈 연산들이고,
    상기 제1 소스 데이터 요소들 중의 상기 대응하는 제1 소스 데이터 요소를 상기 제2 소스 데이터 요소들과 결합하는 것은 상기 대응하는 제1 소스 데이터 요소와 상기 제2 소스 데이터 요소들 중의 대응하는 제2 소스 데이터 요소를 곱하여 상기 중간 데이터 요소들을 생성하는 것을 포함하는, 처리 장치.
  4. 제2항에 있어서, 상기 소스 결합 연산들은 스케일링 연산들이며, 상기 스케일링 연산들은,
    상기 제2 소스 데이터 요소들로부터 하나 이상의 제1 스케일링 값들을 추출하는 것,
    상기 제2 소스 데이터 요소들로부터 하나 이상의 제2 스케일링 값들을 추출하는 것,
    상기 하나 이상의 제1 스케일링 값들 중의 대응하는 제1 스케일링 값을 상기 제1 소스 데이터 요소들 중의 대응하는 제1 소스 데이터 요소에 더하여 대응하는 중간 스케일링된 요소들을 생성하는 덧셈 연산, 및 상기 대응하는 제1 소스 데이터 요소로부터 상기 대응하는 제1 스케일링 값을 빼서 상기 대응하는 중간 스케일링된 요소들을 생성하는 뺄셈 연산 중 하나를 수행하는 것,
    상기 대응하는 중간 스케일링된 요소들 각각에 상기 하나 이상의 제2 스케일링 값들 중의 대응하는 제2 스케일링 값을 곱하여 상기 중간 데이터 요소들 중의 대응하는 중간 데이터 요소들을 생성하는 것을 포함하는, 처리 장치.
  5. 제2항 내지 제4항 중 어느 한 항에 있어서,
    상기 중간 결합 연산들은 누산 연산들이고,
    상기 중간 데이터 요소들을 결합하여 상기 결과 데이터 요소를 생성하는 것은 상기 중간 데이터 요소들을 누산하는 것을 포함하는, 처리 장치.
  6. 제2항 내지 제4항 중 어느 한 항에 있어서, 상기 중간 데이터 요소들은 제1 중간 데이터 요소들이고, 상기 중간 결합 연산들은,
    상기 제1 중간 데이터 요소들을 결합하여 제2 중간 데이터 요소를 생성하는 제1 중간 결합 연산들, 및
    상기 제2 중간 데이터 요소를 상기 하나 이상의 목적지 레지스터들의 상기 데이터 요소 위치로부터 추출된 목적지 데이터 요소와 결합하는 제2 중간 결합 연산들을 포함하는, 처리 장치.
  7. 제6항에 있어서,
    상기 제1 중간 결합 연산들은 누산 연산들이고,
    상기 제1 중간 데이터 요소들을 결합하여 상기 제2 중간 데이터 요소를 생성하는 것은 상기 제1 중간 요소들을 누산하는 것을 포함하는, 처리 장치.
  8. 제6항 또는 제7항에 있어서,
    상기 제2 중간 결합 연산은 누산 연산이고,
    상기 제2 중간 데이터 요소를 상기 목적지 데이터 요소와 결합하는 것은 상기 제2 중간 데이터 요소를 상기 목적지 데이터 요소와 누산하는 것을 포함하는, 처리 장치.
  9. 제2항 내지 제8항 중 어느 한 항에 있어서, 각각의 데이터 요소 위치에 대해, 적어도 상기 소스 결합 연산들의 서브세트가 상기 중간 결합 연산들과 병렬로 수행되는, 처리 장치.
  10. 제1항에 있어서, 상기 결합 연산들은, 상기 결과 데이터 요소로서, 상기 제1 소스 데이터 요소들과 상기 제2 소스 데이터 요소들의 내적을 생성하는 내적 연산을 포함하는, 처리 장치.
  11. 제1항 내지 제10항 중 어느 한 항에 있어서, 각각의 결과 데이터 요소의 결과 데이터 요소 크기는 각각의 소스 데이터 요소의 소스 데이터 요소 크기와 동일한, 처리 장치.
  12. 제1항 내지 제10항 중 어느 한 항에 있어서, 각각의 결과 데이터 요소의 결과 데이터 요소 크기는 각각의 소스 데이터 요소의 소스 데이터 요소 크기보다 큰, 처리 장치.
  13. 제12항에 있어서,
    상기 소스 데이터 요소 크기는 8-비트이고 상기 결과 데이터 요소 크기는 32-비트인 것, 및
    상기 소스 데이터 요소 크기는 16-비트이고 상기 결과 데이터 요소 크기는 64-비트인 것 중 하나인, 처리 장치.
  14. 제11항 내지 제13항 중 어느 한 항에 있어서, 상기 하나 이상의 목적지 레지스터들 중의 목적지 레지스터들의 수는 상기 결과 데이터 요소 크기와 상기 소스 데이터 요소 크기의 비율에 기초하여 결정되는, 처리 장치.
  15. 제14항에 있어서,
    상기 하나 이상의 목적지 레지스터들은 상기 목적지 레지스터들의 수와 동일한 행들의 수, 및 각각의 목적지 레지스터에서의 데이터 요소들의 수와 동일한 열들의 수를 포함하는 결과 어레이를 형성하도록 배열되고,
    결과 데이터 요소들은 상기 결과 어레이에 행-우선 순서(row-major order)로 배열되는, 처리 장치.
  16. 제14항에 있어서,
    상기 하나 이상의 목적지 레지스터들은 상기 목적지 레지스터들의 수와 동일한 행들의 수, 및 각각의 목적지 레지스터에서의 데이터 요소들의 수와 동일한 열들의 수를 포함하는 결과 어레이를 형성하도록 배열되고,
    결과 데이터 요소들은 상기 결과 어레이에 열-우선 순서(column-major order)로 배열되는, 처리 장치.
  17. 제1항 내지 제16항 중 어느 한 항에 있어서, 상기 벡터 결합 명령어는 상기 하나 이상의 추가 소스 벡터 레지스터들에서 상기 제2 소스 데이터 요소들의 위치들을 지정하는, 처리 장치.
  18. 제1항 내지 제17항 중 어느 한 항에 있어서, 상기 복수의 소스 벡터 레지스터들은 2개의 소스 벡터 레지스터들을 포함하고, 상기 하나 이상의 추가 소스 벡터 레지스터들은 각각 2개의 소스 데이터 요소들을 포함하는, 처리 장치.
  19. 제1항 내지 제17항 중 어느 한 항에 있어서, 상기 복수의 소스 벡터 레지스터들은 4개의 소스 벡터 레지스터들을 포함하고, 상기 하나 이상의 추가 소스 벡터 레지스터들은 각각 4개의 소스 데이터 요소들을 포함하는, 처리 장치.
  20. 제1항 내지 제19항 중 어느 한 항에 있어서, 각각의 데이터 벡터의 각각의 요소는,
    부호를 가진 정수 값, 및
    부호를 갖지 않은 정수 값
    중 하나를 포함하는, 처리 장치.
  21. 제1항 내지 제20항 중 어느 한 항에 있어서, 상기 하나 이상의 추가 벡터 레지스터들의 각각의 요소는,
    부호를 가진 정수 값, 및
    부호를 갖지 않은 정수 값
    중 하나를 포함하는, 처리 장치.
  22. 제1항 내지 제21항 중 어느 한 항에 있어서, 상기 처리 회로는 각각의 데이터 요소 위치에 대한 상기 결과 데이터 요소를 병렬로 생성하도록 구성되는, 처리 장치.
  23. 제1항 내지 제22항 중 어느 한 항에 있어서, 상기 하나 이상의 추가 소스 벡터 레지스터들로부터 추출된 제2 소스 데이터 요소들의 수는 상기 복수의 소스 레지스터들 내의 소스 레지스터들의 수와 동일한, 처리 장치.
  24. 제1항 내지 제23항 중 어느 한 항에 있어서, 상기 하나 이상의 목적지 레지스터들은 하나 이상의 타일 레지스터들의 하나 이상의 수평 또는 수직 타일 슬라이스들이며, 상기 하나 이상의 타일 레지스터들 각각은 데이터 요소들의 수직으로 그리고 수평으로 어드레싱 가능한 2차원 어레이를 포함하는, 처리 장치.
  25. 제1항 내지 제24항 중 어느 한 항에 있어서,
    상기 하나 이상의 추가 소스 벡터 레지스터들은 상기 복수의 소스 벡터 레지스터들과 동일한 수의 벡터 레지스터들을 포함하고,
    상기 하나 이상의 추가 소스 벡터 레지스터들로부터 상기 제2 소스 데이터 요소들을 추출하는 것은 각각의 추가 소스 벡터 레지스터의 상기 데이터 요소 위치로부터 상기 제2 소스 데이터 요소들을 추출하는 것을 포함하는, 처리 장치.
  26. 제1항 내지 제24항 중 어느 한 항에 있어서, 상기 하나 이상의 추가 소스 벡터 레지스터들로부터 상기 제2 소스 데이터 요소들을 추출하는 것은 각각의 데이터 요소 위치에 대해 소스 데이터 요소들의 동일한 세트를 추출하는 것을 포함하는, 처리 장치.
  27. 제26항에 있어서, 상기 하나 이상의 추가 소스 벡터 레지스터들은 단일의 추가 소스 벡터 레지스터를 포함하는, 처리 장치.
  28. 명령어들을 디코딩하는 디코딩 회로, 및 상기 명령어들에 의해 지정된 벡터 처리 연산들을 입력 데이터 벡터들 - 상기 입력 데이터 벡터들은 상기 입력 데이터 벡터들 내의 각자의 위치들에서 복수의 입력 데이터 항목들을 포함함 - 에 선택적으로 적용하는 처리 회로를 포함하는 처리 장치를 동작시키기 위한 방법으로서,
    상기 디코딩 회로를 사용하여, 각각이 복수의 데이터 요소 위치들 내에 소스 데이터 요소들을 포함하는 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들, 및 하나 이상의 목적지 레지스터들을 지정하는 벡터 결합 명령어에 응답하여, 상기 처리 회로로 하여금, 상기 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에 대해,
    각각의 소스 벡터 레지스터의 상기 데이터 요소 위치로부터 제1 소스 데이터 요소들을 추출하는 단계;
    상기 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하는 단계;
    결합 연산들을 수행하여 결과 데이터 요소를 생성하는 단계 - 상기 결과 데이터 요소는 상기 제1 소스 데이터 요소들 및 상기 제2 소스 데이터 요소들의 각각의 요소를 결합함으로써 계산됨 -; 및
    상기 결과 데이터 요소를 상기 하나 이상의 목적지 레지스터들의 상기 데이터 요소 위치에 저장하는 단계
    를 수행하게 하는 제어 신호들을 생성하는 단계를 포함하는, 방법.
  29. 명령어 실행 환경을 제공하도록 호스트 처리 장치를 제어하기 위한 컴퓨터 프로그램으로서,
    명령어들을 디코딩하는 디코딩 로직; 및
    상기 명령어들에 의해 지정된 벡터 처리 연산들을 입력 데이터 벡터들 - 상기 입력 데이터 벡터들은 상기 입력 데이터 벡터들 내의 각자의 위치들에서 복수의 입력 데이터 항목들을 포함함 - 에 선택적으로 적용하는 처리 로직을 포함하며,
    상기 디코딩 로직은, 각각이 복수의 데이터 요소 위치들 내에 소스 데이터 요소들을 포함하는 복수의 소스 벡터 레지스터들, 하나 이상의 추가 소스 벡터 레지스터들, 및 하나 이상의 목적지 레지스터들을 지정하는 벡터 결합 명령어에 응답하여, 상기 처리 로직으로 하여금, 상기 복수의 데이터 요소 위치들 중의 각각의 데이터 요소 위치에 대해,
    각각의 소스 벡터 레지스터의 상기 데이터 요소 위치로부터 제1 소스 데이터 요소들을 추출하고,
    상기 하나 이상의 추가 소스 벡터 레지스터들로부터 제2 소스 데이터 요소들을 추출하고,
    결합 연산들을 수행하여 결과 데이터 요소를 생성하고 - 상기 결과 데이터 요소는 상기 제1 소스 데이터 요소들 및 상기 제2 소스 데이터 요소들의 각각의 요소를 결합함으로써 계산됨 -,
    상기 결과 데이터 요소를 상기 하나 이상의 목적지 레지스터들의 상기 데이터 요소 위치에 저장하게 하는
    제어 신호들을 생성하도록 구성되는, 컴퓨터 프로그램.
KR1020247005230A 2021-07-21 2022-06-22 벡터 결합 명령어를 위한 처리 장치, 방법 및 컴퓨터 프로그램 KR20240027145A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2110506.9 2021-07-21
GB2110506.9A GB2609200B (en) 2021-07-21 2021-07-21 A processing apparatus, method and computer program for a vector combining instruction
PCT/GB2022/051584 WO2023002145A1 (en) 2021-07-21 2022-06-22 A processing apparatus, method and computer program for a vector combining instruction

Publications (1)

Publication Number Publication Date
KR20240027145A true KR20240027145A (ko) 2024-02-29

Family

ID=77443392

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020247005230A KR20240027145A (ko) 2021-07-21 2022-06-22 벡터 결합 명령어를 위한 처리 장치, 방법 및 컴퓨터 프로그램

Country Status (7)

Country Link
EP (1) EP4374251A1 (ko)
KR (1) KR20240027145A (ko)
CN (1) CN117677932A (ko)
GB (1) GB2609200B (ko)
IL (1) IL309765A (ko)
TW (1) TW202305588A (ko)
WO (1) WO2023002145A1 (ko)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6901422B1 (en) * 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US8984043B2 (en) * 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
US10338919B2 (en) * 2017-05-08 2019-07-02 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations

Also Published As

Publication number Publication date
WO2023002145A1 (en) 2023-01-26
GB2609200A (en) 2023-02-01
IL309765A (en) 2024-02-01
GB202110506D0 (en) 2021-09-01
TW202305588A (zh) 2023-02-01
EP4374251A1 (en) 2024-05-29
CN117677932A (zh) 2024-03-08
GB2609200B (en) 2023-08-23

Similar Documents

Publication Publication Date Title
CN110770701B (zh) 基于寄存器的矩阵乘法
JP7253492B2 (ja) データ処理装置における乗累算
US11074214B2 (en) Data processing
EP3499362B1 (en) Vector add-with-carry instruction
EP3655852B1 (en) Vector interleaving in a data processing apparatus
KR20240027145A (ko) 벡터 결합 명령어를 위한 처리 장치, 방법 및 컴퓨터 프로그램
EP4095719A1 (en) Sparse matrix multiplication in hardware
KR102586259B1 (ko) 레지스터 기반의 복소수 처리
US20210334102A1 (en) Generating a vector predicate summary
WO2023242531A1 (en) Technique for performing outer product operations
TW202411860A (zh) 多外積指令
GB2617828A (en) Technique for handling data elements stored in an array storage
GB2617829A (en) Technique for handling data elements stored in an array storage
GB2622581A (en) Multiple-outer-product instruction