KR20190119075A - 데이터 처리장치에서의 요소 바이 벡터 연산 - Google Patents

데이터 처리장치에서의 요소 바이 벡터 연산 Download PDF

Info

Publication number
KR20190119075A
KR20190119075A KR1020197026458A KR20197026458A KR20190119075A KR 20190119075 A KR20190119075 A KR 20190119075A KR 1020197026458 A KR1020197026458 A KR 1020197026458A KR 20197026458 A KR20197026458 A KR 20197026458A KR 20190119075 A KR20190119075 A KR 20190119075A
Authority
KR
South Korea
Prior art keywords
data
source register
data processing
register
group
Prior art date
Application number
KR1020197026458A
Other languages
English (en)
Other versions
KR102584031B1 (ko
Inventor
그리고리오스 맥클리스
니겔 존 스테펜스
제이콥 이펜
엠보우 욜
데이비드 헤나 만셀
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20190119075A publication Critical patent/KR20190119075A/ko
Application granted granted Critical
Publication of KR102584031B1 publication Critical patent/KR102584031B1/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/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45541Bare-metal, i.e. hypervisor runs directly on hardware

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)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

데이터 처리장치, 데이터 처리장치의 동작방법, 비일시적 컴퓨터 판독 가능한 저장매체, 및 명령이 제공된다. 명령은, 제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스를 지정한다. 이 명령에 응답하여, 제어신호들을 발생하여, 처리회로가 제1 소스 레지스터 및 제2 소스 레지스터에서 각 데이터 그룹에 대해 데이터 처리 연산을 수행하게 하여 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생한다. 상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각은, 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹은 복수의 데이터 요소들을 포함한다. 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소이다. 레지스터 폭이 증가하는 것처럼 쉽게 확장 가능한 요소-바이-벡터 연산에 대한 기술.

Description

데이터 처리장치에서의 요소 바이 벡터 연산
본 개시내용은, 데이터 처리에 관한 것이다. 특히, 본 개시내용은 요소-바이(by)-벡터 연산들을 행하는 데이터 처리장치에 관한 것이다.
데이터 처리장치는, 행렬 곱셈 연산들을 포함할 수 있는 산술 연산들을 수행하는데 필요할 수도 있다. 이 연산들은, 다양한 상황들에서 응용성을 찾을 수 있다. 이러한 행렬 곱셈들을 지원하도록 구현될 필요가 있을지도 모르는 하나의 기능은, 단일 요소와 전체 벡터를 조합하는 연산, 예를 들면 하나의 벡터의 모든 요소들을 또 하나의 벡터의 단일의 요소와 곱셈하는 연산을 지원하는 능력이다. 그렇지만, 이러한 기능성을 제공하는 기존의 기술들은, 큰 벡터들에 대해 잘 크기를 조정하지 못한다.
여기서 설명된 적어도 일례에서 제공하는 데이터 처리장치는: 복수의 레지스터들을 갖는 레지스터 저장회로; 제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 복수의 레지스터들에 지정하는 데이터 처리 명령에 응답하여, 제어신호들을 발생하는 디코더 회로-상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함함-; 및 제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생하는 처리회로를 구비하고, 상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소이다.
여기서 설명된 적어도 일례에서 제공하는 데이터 처리방법은, 제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 복수의 레지스터들에 지정하는 데이터 처리 명령을 디코딩하여, 제어신호들을 발생하는 단계-상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함함-; 및 제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생하는 단계-상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소임-를 포함한다.
여기서 설명된 적어도 일례에서는, 데이터 처리장치에 의해 실행될 때, 제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 복수의 레지스터들에 지정하는 데이터 처리 명령에 응답하여, 제어신호들의 발생을 야기시키고-상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함함-; 제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들의 발생을 야기시키는-상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소임-적어도 하나의 데이터 처리 명령을 포함하는 프로그램을 비일시적 방식으로 저장하는 컴퓨터 판독 가능한 저장매체를 제공한다.
여기서 설명된 적어도 일례에서 제공하는 데이터 처리장치는: 복수의 레지스터들에 데이터를 저장하는 수단; 제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 상기 데이터를 저장하는 수단에 지정하는 데이터 처리 명령을 디코딩하여, 제어신호들을 발생하는 수단-상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함함-; 및 제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생하는 수단-상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소임-을 구비한다.
본 발명을 아래의 첨부도면들에 도시된 것처럼 그 실시예들을 참조하여 예로만 한층 더 설명하겠다:
도 1은 본 기술들의 각종 예들을 구체화할 수 있는 데이터 처리장치를 개략적으로 도시한 것이고;
도 2는 일 실시예에서 데이터 준비 명령의 사용을 개략적으로 도시한 것이고;
도 3은 도 2의 실시예의 변형 예를 개략적으로 도시한 것이고;
도 4a는 데이터 처리 명령의 일례를 개략적으로 도시한 것이고, 도 4b는 일 실시예에서 해당 데이터 처리 명령의 실행의 구현을 도시한 것이고;
도 5a 및 5b는 일부 실시예들에서 데이터 요소들의 연산 유닛들에의 라우팅이 제공될 수 있는 2가지 방식을 개략적으로 도시한 것이고;
도 6a 및 6b는 도 4a 및 4b를 참조하여 설명된 데이터 처리 명령의 2개의 다른 예들과 그들의 실행을 개략적으로 도시한 것이고;
도 7a는 데이터 처리 명령의 일례를 개략적으로 도시한 것이고, 도 7b는 일 실시예에서 해당 데이터 처리 명령의 실행의 구현을 도시한 것이고;
도 8은 일 실시예의 방법에 따라 취해진 단계들의 시퀀스를 도시한 것이고;
도 9a는 일 실시예에 따른 데이터 처리 명령의 실행을 개략적으로 도시한 것이고, 도 9b는 이러한 명령의 2개의 예를 도시한 것이고;
도 10은 도 9b의 데이터 처리 명령들의 실행의 실시예들에서 일부의 변형을 개략적으로 도시한 것이고;
도 11은 일 실시예에서 "내적" 데이터 처리 명령에 대한 2개의 128비트 소스 레지스터들을 갖는 보다 복잡한 예를 개략적으로 도시한 것이고;
도 12는 도 11의 실시예의 변형 예를 도시한 것이고;
도 13은 도 11 및 도 12에 도시된 예들의 다른 변형 예를 도시한 것이고;
도 14는 일 실시예의 방법에 따라 취해진 단계들의 시퀀스를 도시한 것이고;
도 15a는 일부 실시예들에서 제공한 데이터 처리 명령의 실행을 개략적으로 도시한 것이고, 도 15b는 대응한 명령의 예를 도시한 것이고;
도 16은 단순 행렬형 곱셈연산의 형태로, 도 15a의 실시예의 시각화의 일례를 도시한 것이고;
도 17은 2개의 데이터 요소들만이 제1 및 제2 소스 레지스터의 각각으로부터 얻어지는, 도 15a에 도시된 예들의 보다 단순한 변형 예를 도시한 것이고;
도 18은 보다 많은 데이터 요소들이 상기 소스 레지스터들의 각각으로부터 추출되는, 도 15a에 도시된 예의 다른 변형 예를 도시한 것이고;
도 19는 수행되는 일부의 특정한 곱셈 연산들의 보다 많은 상세내용을 제공하는, 데이터 처리 명령의 실행의 실시예의 일례를 도시한 것이고;
도 20은 2개의 소스 레지스터들의 내용이 2개의 독립적 레인들에서 데이터 요소들을 갖는 것으로서 취급되는, 데이터 처리 명령의 실행의 실시예의 일례를 도시한 것이고;
도 21은 일 실시예의 방법에 따라 취해진 단계들의 시퀀스를 도시한 것이고;
도 22는 일 실시예에 따른 가상 머신 구현을 도시한 것이다.
여기서 설명된 적어도 하나의 실시예의 예에서 제공하는 데이터 처리장치는: 복수의 레지스터들을 갖는 레지스터 저장회로; 제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 복수의 레지스터들에 지정하는 데이터 처리 명령에 응답하여, 제어신호들을 발생하는 디코더 회로-상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함함-; 및 제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생하는 처리회로-상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소임-를 구비한다.
이렇게 하여 제공된 명령은, 제2 소스 레지스터에서의 대응한 데이터 그룹으로부터 선택된 요소로 제1 소스 레지스터에서의 각 데이터 그룹의 벡터 요소들에 관한 데이터 처리 연산의 수행을 야기시킨다. 즉시 인덱스 값을 사용하여 제1 소스 레지스터에서의 각 요소 그룹 내부의 데이터 요소(즉, 그룹 전부에서 모든 요소 위치)를 선택한다. 달리 말하면, 명령은 요소들의 그룹 내부의 요소-바이-벡터 연산의 수행을 야기시키고, (요소 선택을 포함하는) 정확한 동일한 연산은 벡터에서 각 그룹에 걸쳐 복제된다. 이것은, 상기 요소-바이-벡터 연산의 구현을 위한 효율적인 메카니즘, 구체적으로, 레지스터 폭(즉, 벡터 길이)이 증가하는 것처럼, 제공하는데, 그 이유는 본 기술이 쉽게 확장 가능하기 때문이다. 게다가, 이와 같은 그룹화된 요소-바이-벡터 명령이, 동등한 정상 벡터 연산과 비교하여 별도의 지연시간 없이, 데이터 처리장치에서 단일의 마이크로연산으로서 구현 가능할 것이라고 예상될 수 있는 것이 일반적이라는 것을 주목해야 하는데, 왜냐하면 처리된 데이터 요소들의 선택 및 복제는, 상기 마이크로연산 구현이 가능한 크기에 한정되게 규정될 수 있는 "데이터 그룹" 레벨로 규정 및 구현되기 때문이다.
데이터 처리장치는, 이 데이터 처리 명령의 실행을 지원하는 다양한 방식, 이를테면 특히, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 상기 선택된 데이터 요소가 조작되어 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소에 적용되는 방식으로, 배치되어도 된다. 일부 실시예들에서, 상기 처리회로는, 제어신호들에 응답하여, 상기 선택된 데이터 요소의 다수의 인스턴스들을 다수의 데이터 연산회로들에 공급하는 데이터 요소 조작회로를 구비하고, 각 데이터 연산회로는, 제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각각의 데이터 그룹에 대해 데이터 처리 연산을 수행하는 회로다.
데이터 처리 명령에서 사용한 소스 레지스터들이 자유롭게 지정되어도 되고, 본 기술들은 내부의 데이터 값들이 일치해야 하는 포맷에 제약을 부과하지 않지만, 그럼에도 불구하고 본 기술들은, 데이터 처리 명령의 실행이, 소스 레지스터들의 내용이 미리 특별한 포맷을 취하게 함으로써 개선될 수도 있다는 것을 식별하고 있다. 이에 따라, 일부 실시예들에서, 상기 디코더 회로는, 데이터 준비 명령에 응답하여, 추가의 제어신호들을 발생하고, 이때의 데이터 준비 명령은 메모리 장소와 타겟 레지스터를 지정하고, 상기 처리회로는 상기 추가의 제어신호들에 응답하여, 소정의 크기를 갖는 대상 데이터 그룹 항목을 메모리 장소로부터 검색하고 대상 데이터 그룹 항목의 복제에 의해 타겟 레지스터를 채우는 회로다. 달리 말하면, 본 기술들은, 지정된 대상 데이터 그룹 항목을 검색하여 타겟 레지스터의 폭에 걸쳐 복제하도록 배치된 또 하나의 명령, 즉 데이터 준비 명령을 제공한다. 타겟 레지스터는, 제1 소스 레지스터이어도 된다. 따라서, 제1 소스 레지스터의 내용은, 데이터 준비 명령에 의해 미리 셋업될 수 있어, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 상기 선택된 데이터 요소는, 이후의 데이터 처리 명령의 실행 전에, 제1 소스 레지스터의 데이터 그룹들에 걸쳐 해당 위치에 이미 복제된다.
제1 소스 레지스터와 제2 소스 레지스터의 각각과 데이터 그룹의 소정의 크기와의 사이의 크기 비율(해당 소정의 크기의 적어도 2배)을 규정하는 정수배는, 데이터 처리장치에 여러 가지로 규정 및 보유되어도 되지만, 일부 실시예들에서 레지스터 저장회로는 정수배의 표시를 저장하는 제어 레지스터를 구비한다.
또한, 본 기술들은, 전용 제어 명령이 이 정수배의 수정을 허용하도록 제공되어도 되는 것을 제공하고, 일부 실시예들에서, 상기 디코더 회로는, 제어 명령에 응답하여, 데이터 처리장치에 대한 소정의 최대값까지 상기 정수배의 표시를 수정하는 회로다.
데이터 처리 연산의 결과는 다양한 방식으로 사용되어도 되지만, 일부 실시예들에서 데이터 처리 명령은 복수의 레지스터들에서 결과 레지스터를 한층 더 지정하고, 상기 처리회로는 제어신호들에 한층 더 응답하여, 데이터 처리 연산의 결과를 결과 레지스터에 적용하는 회로다. 상기 처리회로는, 제어신호들에 응답하여, 데이터 처리 연산의 결과를 결과 레지스터에 저장하는 회로이어도 된다. 또는, 상기 처리회로는, 제어신호들에 응답하여, 데이터 처리 연산의 결과를 제2 소스 레지스터에 적용하여도 된다. 달리 말하면, 제2 소스 레지스터는, 누적 레지스터를 제공하여도 된다.
데이터 처리 연산은, 그 오퍼랜드들로서 제1 소스 레지스터 및 제2 소스 레지스터(및 즉시 인덱스 값)의 내용만을 취하여도 되지만, 이 오퍼랜들에 한정되지 않고, 일부 실시예들에서 데이터 처리 명령은 복수의 레지스터들에서 적어도 하나의 추가의 소스 레지스터를 한층 더 지정하고, 상기 처리회로는 제어신호들에 응답하여, 적어도 하나의 추가의 소스 레지스터에서 한층 더 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여, 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생하고, 상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은 적어도 하나의 추가의 소스 레지스터의 데이터 그룹에서의 각 데이터 요소를 더 포함한다.
이 추가의 소스 레지스터는, 데이터 처리 연산에서 다양한 역할을 할 수도 있다. 일부 실시예들에서, 상기 처리회로는, 제어신호들에 응답하여, 데이터 처리 연산의 결과를 이전의 내용과 적어도 하나의 추가의 소스 레지스터에 누적하는 회로다.
데이터 처리 연산은, 산술연산이어도 되고, 예를 들면 곱셈연산이어도 된다. 데이터 처리 연산은, 제1 소스 레지스터와 제2 소스 레지스터의 각각으로부터 적어도 제1 데이터 요소와 제2 데이터 요소를 추출하는 것; 적어도 제1 데이터 요소 쌍들과 제2 데이터 요소 쌍들을 함께 곱셈하는 곱셈연산들을 수행하는 것; 및 곱셈연산들의 결과들을 합산하는 것을 포함하는, 내적연산이어도 된다.
일부 실시예들에서, 곱셈연산들은, 제1 데이터 요소 쌍들, 제2 데이터 요소 쌍들, 제3 데이터 요소 쌍들 및 제4 데이터 요소 쌍들을 함께 곱셈하는 것을 포함한다.
일부 실시예들에서, 데이터 처리 명령은 복수의 레지스터들에서의 누적 레지스터를 한층 더 지정하고, 데이터 처리 연산은, 누적값을 누적 레지스터로부터 로딩하는 것; 곱셈연산들의 결과들을 누적값과 합산하는 것; 및 합산하는 것의 결과를 누적 레지스터에 저장하는 것을 한층 더 포함하는, 내적 및 누적 연산이다.
일부 실시예들에서, 데이터 처리 연산은, 곱셈-누적 연산이다.
일부 실시예들에서, 제1 소스 레지스터와 제2 소스 레지스터에서 각 상기 데이터 그룹에서의 데이터 요소는 복소수를 표현하는 한 쌍의 데이터 값들이고, 데이터 처리 연산은 복소수들의 곱셈-누적이다. 달리 말하면, (2개의 개별 데이터 값들로 표현된) "복소수 쌍"은 본 기술들에 의해 데이터 요소로서 취급되어도 되어, 설명된 요소-바이-벡터 연산들도 복소수들에 적용되어도 된다. 따라서, 대응한 전용 명령은, 복소값들에 작용하는 데이터 처리 연산(예를 들면, 복소수들의 곱셈 누적)이 실시되는 복소수 요소들을 식별하기 위해서도 제공될 수 있다.
일부 실시예들에서, 데이터 처리 명령은 회전 파라미터를 한층 더 지정하고, 상기 처리회로는, 회전 파라미터에 응답하여, 복소수들의 곱셈-누적을, 선택된 데이터 값들의 치환과 데이터 처리 연산이 실시되는 그들의 부호들을 사용하여 수행하는 회로다. 이것은, 데이터 처리 명령에 의해 수행될 수 있는 복소수 연산들의 다양성에 융통성을 부여하고, 예를 들면 대상 복소수 쌍 데이터 값들이 부호들 없이, 또한, 프로그래머에 직접 이용 가능하게 되도록 복소수 쌍 데이터 값들의 부호들의 회전 치환마다, 제공되게 한다.
일부 실시예들에서, 데이터 처리 연산은 논리연산이다.
여기서 설명한 적어도 하나의 실시예의 예에서 제공하는 데이터 처리방법은, 제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 복수의 레지스터들에 지정하는 데이터 처리 명령을 디코딩하여, 제어신호들을 발생하는 단계-상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함함-; 및 제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생하는 단계-상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소임-를 포함한다.
여기서 설명한 적어도 하나의 실시예의 예에서 제공하는, 데이터 처리장치에 의해 실행될 때, 제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 복수의 레지스터들에 지정하는 데이터 처리 명령에 응답하여, 제어신호들의 발생을 야기시키고-상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함함-; 제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들의 발생을 야기시키는-상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소임- 적어도 하나의 데이터 처리 명령을 포함하는 프로그램을 비일시적 방식으로 저장하는 컴퓨터 판독 가능한 저장매체를 제공한다.
여기서 설명된 적어도 하나의 실시예의 예에서 제공하는 데이터 처리장치는: 복수의 레지스터들에 데이터를 저장하는 수단; 제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 상기 데이터를 저장하는 수단에 지정하는 데이터 처리 명령을 디코딩하여, 제어신호들을 발생하는 수단-상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함함-; 및 제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생하는 수단을 구비하고, 상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소이다.
여기서 설명된 적어도 하나의 실시예의 예는, 데이터 처리장치상에서 실행하는 컴퓨터 프로그램에 의해 제공되고, 상술한 데이터 처리장치들 하나에 대응한 명령 실행 환경을 제공하는, 가상 머신을 제공한다.
이하, 일부의 특별한 실시예들에 대해 도면들을 참조하여 설명한다.
도 1은 본 기술들의 각종 예들을 구체화할 수도 있는 데이터 처리장치를 개략적으로 도시한 것이다. 데이터 처리장치는, 실행하는 명령들의 시퀀스에 응답하여 데이터 항목들에 관해 데이터 처리 연산들을 수행하는 처리회로(12)를 구비한다. 이 명령들은 데이터 처리장치가 액세스하는 메모리(14)로부터 검색되고, 본 기술분야에서 통상의 기술의 하나가 익숙한 방식으로, 페치회로(16)는 이 목적을 위해 제공된다. 이 페치회로(16)에 의해 검색된 다른 명령들은 디코드 회로(18)에 건네져, 이 디코드 회로는 상기 처리회로(12)의 구성과 동작의 각종 국면들을 제어하도록 구성된 제어신호들을 발생한다. 일 세트의 레지스터들(20)과 로드/스토어 유닛(22)도 도시되어 있다. 본 기술분야에서 통상의 기술의 하나는, 도 1이 나타내고 그의 한층 상세 내용 설명이 간략을 기하기 위해서만 생략되는 일반적인 구성에 익숙할 것이다. 도 1에 도시된 실시예들에서 레지스터들(20)은, 정수배(24)와 데이터 그룹 사이즈(25)의 한쪽 또는 양쪽을 위한 스토리지를 구비할 수 있고, 이것의 이용에 대해서는 일부의 특정한 실시예들을 참조하여 아래에 보다 상세히 설명하겠다. 명령들의 실행에서 처리회로(12)에서 필요로 한 데이터와, 그 데이터 처리 명령들의 결과로서 발생된 데이터 값들은, 로드/스토어 유닛(22)에 의해 메모리(14)에 기록 및 이 메모리로부터 판독된다. 또한, 일반적으로 도 1에서의 메모리(14)는, 본 기술들의 명령들을, 전형적으로 상기 처리회로가 실행하는 미리 결정된 명령들의 시퀀스("프로그램")의 일부로서 저장할 수 있는 컴퓨터 판독 가능한 저장매체의 일례로서 보일 수 있다는 것을 주목한다. 그렇지만, 그 처리회로는 다양한 상이한 소스들로부터의 상기와 같은 프로그램, 이를테면 RAM, ROM에 네트워크 인터페이스 등을 거쳐 액세스하여도 된다. 본 개시내용은 처리회로(12)가 실행할 수 있는 각종 신규의 명령들을 설명하고, 후속하는 도면들이 이 명령들의 유형, 그 명령들의 실행을 지원하기 위해서 데이터 처리회로에서의 변형들 등의 추가의 설명을 제공한다.
도 2는 데이터 준비 명령(32)의 사용을 개략적으로 도시한 것이다. 데이터 준비 명령(32)은, (데이터 준비 명령으로서 정의하는) 오피코드 부분(34), 레지스터 지정자(specifier)(36) 및 메모리 장소 지정자(38)를 포함한다. 이러한 명령의 본 실시예의 데이터 처리장치에 의한 실행은, (지정된 메모리 장소에서 참조하고, 예를 들면 정의된 데이터 그룹 사이즈에 따라, 하나보다 많은 어드레스에 걸쳐 연장하는) 메모리(30)에 저장되는 데이터 그룹(40)이 식별되게 하고, (이렇게 도시된 실시예에서) 2개의 데이터 요소 b0, b1(도면에서는 42와 44로 도시됨)을 포함한다. 또한, 그 명령의 실행은, 각기 데이터 요소 b0, b1으로 구성된 상기 반복 데이터 그룹들(46, 48, 50, 52)에 의해 도 2에 도시된 것처럼, 이 데이터 그룹(40)이 지정된 레지스터에 복사되게 하고, 게다가 해당 레지스터의 폭에 걸쳐 복제되게 한다.
도 3은 이러한 데이터 준비 명령이 데이터 그룹들의 상이한 사이즈들이 복사 및 복제되게 할 수도 있다는 것을 입증하는, 도 2의 실시예의 변형 예를 개략적으로 도시한 것이다. 도 3의 도시된 예에서, 상기 명령(60)은, 오피코드(62), 레지스터 지정자(64), 및 지정된 메모리 장소(66)로 이루어진, 동일한 구조를 갖는다. 그 명령(60)의 실행은 메모리 장소(66)가 액세스되게 하고, 그 장소에 저장된(즉, 예를 들면 해당 메모리 장소에 시작하고 소정수의 그 데이터 요소들에서 연장된) 데이터 그룹(68)은 데이터 요소들 c0, c1, c2, c3(도면에서는 70, 72, 74, 76으로 도시됨)를 포함한다. 이 데이터 그룹(68)은, 타겟 레지스터의 폭에 걸쳐 복사 및 복제되고, 이 데이터 그룹(78, 80, 82, 84)의 반복하는 사본들로 도시되어 있다. 다시 도 1에서, 데이터 그룹 사이즈는 상기 레지스터들(20)에서 전용 스토리지 장소(25)에 보유된 값으로 미리 정의될 수 있다는 것을 주목한다. 끝으로, 도 2 및 도 3의 예들은 복제의 임의의 특별한 데이터 그룹 폭들 또는 배수들에 한정되지 않는다는 것을 알아야 한다. 단, 오늘날의 상황에서 유용한 단지 일례를 설명하기 위해서, 그 복제는 128비트들의 폭에 대해 일어날 수 있다. 영국 캠브릿지의 ARM® 리미티드에서 제공한 확장 가능한 벡터 확장(SVE)의 맥락에서, 이 폭은 SVE벡터 그래뉼 사이즈에 해당한다. 또한, ARM® 리미티드에서 제공한 ASMID 명령들의 맥락에서, 이것은 ASIMD 레지스터의 사이즈에 해당한다. 이에 따라, 본 기술들은, 다음의 그룹들 타입들의 로딩 및 복제를 가능하게 한다: 2개의 64비트 데이터 요소들; 4개의 32비트 데이터 요소들; 8개의 16비트 데이터 요소들; 또는 16개의 8비트 데이터 요소들.
도 4a는 데이터 처리 명령의 일례를 개략적으로 도시한 것이고, 도 4b는 일 실시예에서 해당 데이터 처리 명령의 실행의 구현을 도시한 것이다. 이 데이터 처리 명령은, 오피코드(102), 제1 레지스터 지정자(104), 제2 레지스터 지정자(106), 인덱스 지정자(108), 및 선택적인 변형 예로서 결과 레지스터 지정자(110)를 포함한다. 도 4b는 이 명령의 실행은 레지스터 A 및 레지스터 B에서의 데이터 그룹들이 액세스되게 하는 것을 도시한 것으로, 레지스터 A에서 각 데이터 그룹에서의 모든 데이터 요소들, 즉 본 예에서는 제1 데이터 그룹(112)에서 데이터 요소 a0, a1과 제2 데이터 그룹(114)에서는 데이터 요소 a2, a3가 액세스되게 하는 한편, 레지스터 B에서는 선택된 데이터 요소만, 즉 데이터 요소 b1가 데이터 그룹(116, 118)의 각각에서 액세스된다. 이렇게 하여 액세스된 이 데이터 요소들은, 레지스터 B로부터 취해진 데이터 요소들과 레지스터 A로부터 취해진 데이터 그룹들에 대해 데이터 처리 연산을 적용하는 연산 유닛들(120, 122, 124, 126)에 의해 도 4b에 표현된 상기 처리회로의 연산회로에 건네진다. 상술한 것처럼, 상기 명령(100)은 (식별자(110)에 의해) 결과 레지스터를 지정하여도 되고, 이 연산들의 결과들은 결과 레지스터(128)의 각각의 데이터 요소들에 기록된다. 실제로, 일부의 실시예들에서, 결과 레지스터(128) 및 레지스터 A는 하나의 동일한 레지스터이어도 되어서, 예를 들면 곱셈 누적 연산이 (점선 화살표로 도 4에 개략적으로 도시된 것처럼) 해당 레지스터의 내용에 대해 수행될 수 있다. 또한, 도 4b에 도시된 레지스터들은, 그 명령의 예에 의해 액세스된 부분을 넘어 (양측에) 연장할 가능성이 있는 것처럼 의도적으로 도시되어 있다는 것을 주목한다. 이것은, (상술한 확장 가능한 벡터 확장(SVE) 등의) 일부의 구현들에서 그 벡터 사이즈가 미지정될 수도 있다는 사실에 해당한다. 예를 들면, SVE 예에서 가령, 2개의 64비트 데이터 요소들(b0, b1)의 그룹에 대한 명령의 연산을 도시한 것으로서 도 4b를 취하면, 목적지용 벡터 사이즈는 128비트로부터 (128비트 단위로) 최대 2048비트까지 어떠한 비트일 수도 있다.
도 4b에 도시된 예가 레지스터 B의 내용으로부터 사용되는 선택된(복제된) 데이터 요소의 특별한 예를 들지만, 일반적으로 레지스터 B에서의 임의의 데이터 요소가 상기 연산 유닛들(120-126) 중 어느 하나에 대한 입력으로서 사용되는 능력을 다목적, 플렉시블 데이터 처리장치가 구비하는 것이 명백히 바람직하다. 도 5a 및 5b는, 이것이 달성될 수도 있는 2가지 방식을 개략적으로 도시한 것이다. 도 5a는, 예를 들면 레지스터에 각각의 데이터 요소들을 저장할 수도 있는, (예를 들면, 단일의 곱셈-가산 유닛들이어도 되는) 일 세트의 연산 유닛들(140, 142, 144, 146)에 접속된, 일 세트의 스토리지 구성요소들(130, 132, 134, 136)을 도시한 것이다. 스토리지 유닛들(130-136)과 기능 유닛들(140-146) 사이의 접속들은, 도 5a에 직접 및 멀티플렉서(148)를 거쳐 중재되게 도시되어 있다. 이에 따라, 이 구성은, 개개의 스토리지 유닛들(130-136) 중 어느 하나의 내용이, 각기 각각의 기능 유닛에 대한 제1 입력으로서 기능 유닛들(140-146) 중 어느 하나에 제공될 수 있고, 스토리지 유닛들(130-136)의 내용이 기능 유닛들(140-146)의 제2 입력으로서 각각 제공될 수 있는 것을 제공한다. 그 기능 유닛들(140-146)에서 수행한 처리의 결과는, 스토리지 유닛들(150-156)에 전송되고, 이 스토리지 유닛들은 예를 들면 각각의 데이터 요소들을 레지스터에 저장하여도 된다. 멀티플렉서(148)와 그 기능유닛들(140-146)의 각각은, 상술한 입력들을 유연하게 선택할 수 있도록 도시된 제어신호들에 의해 제어된다.
도 5b는 스토리지 유닛들(160, 162, 164, 166)의 각각이, 각각의 제어신호와 각각의 스토리지 유닛들(180, 182, 184, 186)에 건네지는 결과에 의해 각각 제어된 상기 기능 유닛들(170, 172, 174, 176)의 각각에 직접 접속되는 도 5a의 구성과 다른 구성을 개략적으로 도시한 것이다. 도 5b로 도시된 해결방법은, 도 5b의 예의 멀티플렉서(148)를 사용할 필요가 없고 이 멀티플렉서와 관련된 지연에 대한 필요가 없지만, 요구된 보다 복잡한 배선을 희생한다. 이 때문에, 도 5a 및 도 5b의 예들의 양쪽은, 특히 주목 데이터 요소들의 수가 증가하는 경우, 입력 스토리지 유닛들, 연산 유닛들, 및 출력 스토리지 유닛들의 완전 플렉시블하고 설정 가능한 세트를 구현하려고 할 때 일어날 수도 있는 복잡성을 도시한 것이다. 예를 들면, 도 5a의 예를 취하고 입력 스토리지 유닛들, 연산 유닛들, 및 출력 스토리지 유닛들의 수를 각각 8까지 두 배로 하는 것에 의해, 여덟 배의 입력 멀티플렉서에 대한 필요가 생기게 될 것이다. 한편, 도 5b의 해결방법을 취하는 상기와 같은 8 와이드(wide) 구현은, 각 입력 스토리지 유닛으로부터 각 연산 유닛까지의 8개의 경로들, 즉 총 64개의 경로들과, 8개의 상이한 입력들을 수신하고 그들 사이에서 선택 가능하는 것이 필요한 각 연산 유닛도 필요로 할 것이다. 이 때문에, 레지스터 폭에 걸쳐 데이터 부분들(예를 들면, 데이터 그룹들)을 재사용하는 본 기술들의 실시예들에서 취한 해결방법은 상기 요구된 제어 유닛들에의 다수의 입력들과 복잡성에 제한들이 부과되는 것을 가능하게 한다는 것을 알 것이다. 게다가 하지만, 상술한 SVE/ASIMD 문맥에서, 도 4a의 그룹지어진 요소-바이(by)-벡터 명령은, 동등한 정상 벡터 연산과 비교하여 별도의 지연시간 없이 단일의 마이크로연산으로서 구현될 수 있기를 예상할 수 있다는 것을 주목해야 하는데, 그 이유는 상기 선택 및 복제가 SVE 벡터 그래뉼내에서 머무르고 ASIMD가 이미 128비트들내에서(예를 들면, "(요소에 의해) FMLA" 명령을 사용하여) 행하는 메카니즘을 갖기 때문이다. 이 때문에, 도 4a에 도시된 명령은, 별도의 복제(DUP) 명령 후 정상 벡터 연산을 수행하는 시퀀스보다 효율적일 것이라고 예상될 수 있다.
도 6a 및 6b는, 도 4a 및 4b를 참조하여 일례를 설명하였던 데이터 처리 명령의 2개의 또 다른 예들을 개략적으로 도시한 것이다. 도 6a의 예에서, 명령(200)은, 오피코드(202), 제1 레지스터 지정자(204), 제2 레지스터 지정자(206), 즉시 인덱스 값(208) 및 결과 레지스터 지정자(210)를 포함한다. 도 6a의 하부는 이 명령(200)의 실행을 개략적으로 도시한 것이고, 여기서, 레지스터 B의 반복 서브부분(데이터 그룹)내에서 그 지정된 데이터 요소(인덱스 1)가 선택되고 이 데이터 요소는 레지스터 A의 각각의 데이터 그룹으로 표현된 벡터와 곱해져, 결과 레지스터의 내용을 채우는 각각의 결과 데이터 그룹들을 발생한다. 도 6a에서, 각각의 데이터 요소들과 데이터 그룹들 사이에서 수행된 연산은, 비록 이것에 대해 곱셈인 것에 대해 상기 예를 들었지만 그 밖의 연산들이 가능하고 생각된다는 것을 가리키는 일반적 연산기호
Figure pct00001
로 도시되어 있다.
본 기술들은 하나의 벡터만을 지정하는 상기와 같은 데이터 처리 명령에 한정되고, 도 6b는 오피코드(222), 제1 레지스터 지정자(224), 제2 레지스터 지정자(226), 제3 레지스터 지정자(228) 및 인덱스 지정자(230)를 포함하는 데이터 처리 명령(220)이 제공되는 일례를 도시한 것이다. 도 6b의 하부는, 도 6a에 도시된 것과 마찬가지로, 어떻게 제1 레지스터(B)에서의 상기 선택된 데이터 요소(b1)가 레지스터 A와 C로부터 취해진 데이터 그룹들(벡터들)과 조합되고 결과 값이 발생되는지를 도시한 것이다. 단지 변형 예를 설명하는 목적들로만, 도 6b의 예에서 결과 레지스터는 명령(220)에서 지정되지만, 디폴트(소정의) 결과 레지스터는 이 목적을 위해 일시적으로 사용된다. 더욱이, 상기 구성요소들의 조합이 상기 일반적 연산 기호
Figure pct00002
에 의해 다시 도 6b에 도시되어 있지만, 이 연산이 실행되는 특별한 명령에 따라 다양한 형태를 취할 수 있다는 것을 다시 알아야 하고, 이것이 실제로 곱셈연산이지만, 그것은 임의의 다른 타입의 산술연산(가산, 감산 등)일 수 있거나, 논리적 연산(ADD, XOR 등)일 수 있다.
도 7a는 데이터 처리 명령의 다른 예를 개략적으로 도시한 것이고, 도 7b는 일 실시예에서 해당 데이터 처리 명령의 실행의 구현을 도시한 것이다. 이 데이터 처리 명령은, 복소수들에 대한 요소-바이-벡터 연산을 지원하도록 구성되고, 여기서는 FCMLA(fused complex multiply-accumulate) 명령이라고 한다. 도 7a에 도시된 것처럼, FCMLA 명령(220)의 예는, 오피코드(222), 회전 지정자(224), 제1 레지스터(A) 지정자(226), 제2 레지스터(B) 지정자(228), 인덱스 지정자(230) 및 누적 레지스터 지정자(232)를 포함한다. 도 7b는, 이 명령의 실행은 레지스터 A와 레지스터 B에서의 데이터 그룹들이 액세스되게 하는 것을 도시하고, 이 명령에서의 데이터 그룹은 다수의 복소수 요소들을 규정한다. 복소수 요소는, 한 쌍의 요소들로 표현된다(도 7b에서 라벨 "복소수 쌍"을 참조). 도 7b의 예에서, 레지스터 B의 복소수 쌍들은, (b3,b2) 및 (b1,b0)이고, 복소수 쌍(b3,b2)이 선택된다. 레지스터 A의 복소수 쌍들은 (a7,a6), (a5,a4), (a3,a2) 및 (a1,a0)이다. 레지스터 A와 B로부터 선택된 복소수 쌍들(인덱스(230)에 의해 식별된, 레지스터 A로부터의 모든 복소수 쌍들과, 레지스터 B의 데이터 그룹들로부터의 선택된 복소수 쌍)은 복소수(complex) 단일 곱셈-누적(CFMA)유닛들(234, 236, 238, 240)에 전달되고, 이때의 레지스터 A로부터의 각 복소수 쌍은, 각각, 각 CFMA 유닛에의 하나의 입력을 형성하고, 레지스터 B에서 하나의 데이터 그룹으로부터의 선택된 복소수 쌍은 CFMA 유닛(234, 236)에의 또 하나의 입력을 형성하고 레지스터 B에서 다음 데이터 그룹으로부터의 다른 나머지 선택된 복소수 쌍은 CFMA 유닛들(238,240)에의 또 하나의 입력을 형성한다. 복소수 단일 곱셈-누적 연산들의 각 결과들은 상기 지정된 누적 레지스터에서 각각의 복소수 쌍들로서 누적되고 나서, 각각이 각각의 CFMA 유닛들의 각각에의 제3 입력을 형성한다. (상기 명령에서 선택사항으로 지정되는) 회전 파라미터(224)는, 다음과 같이 연산을 변경하는 ((c1,c0)가 연산전에 누적값인 경우, 단지 제1 쌍을 도시하는) 2비트 제어 값이다:
Figure pct00003
도 8은, 일 실시예의 방법에 따라 취해진 단계들의 시퀀스를 도시한 것이다. 흐름은 단계 250에서 시작되어 데이터 로딩(준비) 명령이 디코딩되고 단계 260에서는 대응한 제어 신호들이 발생된다. 그 후, 단계 270에서, 이 제어신호들은, 지정된 데이터 그룹이, 명령 지정 장소로부터의 메모리로부터 로딩되고 제어 레지스터 지정 사이즈를 갖게 한다(예를 들면, 이것의 예들에 대해 도 2 및 도 3을 참조). 그 후, 제어신호들은, 한층 더, 로딩된 데이터 그룹이 (데이터 로딩(준비) 명령에서 지정된) 지정 타겟 레지스터의 단계 280에서 벡터 폭을 가로질러 복제되게 한다. 그 후, 데이터 로딩 명령의 실행이 완료된다. 흐름은 단계 290으로 진행되어 요소-바이-벡터 데이터 처리 명령이 디코딩된다. 그 후, 대응한 제어 신호들은 단계 300에서 발생되고, 이후에 단계 310에서 상기 요소-바이-벡터 명령에 의해 지정된 연산은, 그 명령에서 지정된 제1 레지스터의 각 데이터 그룹에서의 인덱싱된 요소와, 그 명령에서 지정된 제2 레지스터의 각 데이터 그룹에서의 각 데이터 요소와의 사이에서 행해진다.
도 9a는 본 기술들에 따라 상이한 데이터 처리 명령의 실행을 개략적으로 도시한 것이다. 도 9b는 이러한 명령의 2개의 예, 즉 제1 데이터 처리 명령의 예(320)는, 오피코드(322), 제1 레지스터 지정자(324), 제2 레지스터 지정자(326) 및 (선택사항으로) 출력 레지스터 지정자(328)를 포함한다. 도 9b에 도시된 제2 데이터 처리 명령의 예(330)는 오피코드(332), 출력 레지스터 지정자(334), 및 누적 레지스터 지정자(336)를 포함한다. 이들에 대해 도 9a를 참조하여 설명한다. 데이터 처리 명령에 의해 지정된 제1 및 제2 소스 레지스터들은, 레인들로 그룹화된 데이터 요소 부분들로 각각 세분된, 도 9a의 상부에 도시되어 있다. 데이터 처리 명령에 응답하여, 데이터 처리장치(즉, 디코더 회로에서 발생한 상기 제어신호들의 제어하에 처리회로)는, 제1 소스 레지스터와 제2 소스 레지스터의 각각으로부터 일 세트의 데이터 요소들을 검색한다. 도 9a에 도시된 예에서, 일 세트의 4개의 데이터 요소들은, 제1 및 제2 소스 레지스터의 각 레인으로부터 검색된다. 이들은 곱셈 연산을 행하도록 배치된, 연산 유닛들(340, 342, 344, 346)에서 쌍별로 합친다. 이 곱셈 연산들의 결과는 합산 유닛(248)에서 합치고, 끝으로 이렇게 발생된 결과 값은 출력 레지스터의 대응한 레인에 기록된다. 다시 말하면, "내적" 연산이 실시된다. 도 9a의 레인들의 라벨링은, 4개의 곱셈 유닛들(340-346)과 합산 유닛(348)이 데이터 처리장치의 처리회로에 설치된 상기와 같은 유닛들의 일 세트만을 표현하고 이에 대응하게 이들은 데이터 처리장치가 레지스터마다 처리할 수 있는 각 레인에 일치하도록 반복된다는 사실을 도시한 것이다. 각 레지스터에서 레인들의 수는, 데이터 요소들의 상대폭, 각 레인에서의 데이터 요소들의 수, 및 이용 가능한 레지스터 폭에 따라 자유롭게 정의되어도 된다는 사실에 대응한 도 9a에 명확하게 도시되지 않는 것이 의도적이다. 이 때문에, 축적기 폭으로 동일 폭 연산과 마찬가지로 작용한다(예를 들면, 32비트 와이드 레인들에서 8비트 값들(가령, 정수들)의 예에서는, 32비트 정수 연산과 마찬가지로 작용한다)는 것을 알 수 있다. 그렇지만, 각 레인내에서, 32×32 곱셈이 행해지는 대신에, 32비트 소스 레인들은, 4개의 별개의 8비트 값들로 구성되는 것으로 하고, 내적 연산은 이들 2개의 "미니-벡터들"에 대해 행해진다. 그후, 결과는 누적기 값으로부터 대응한 32비트 레인에 누적된다. 본 도면에서는 단지 단일의 32비트 레인내에서의 그 연산만을 명시적으로 도시하는 것이라는 것을 알 것이다. 128비트 벡터 길이의 일례를 들면, 상기 명령은, 유사한 동시대의 명령들보다 3-4배 복잡한 32 연산들(16 곱셈들 및 16 가산들)을 효과적으로 행할 것이다. 영국 캠브릿지 ARM 리미티드사에서 제공한 확장 가능한 벡터 확장(SVE)과 같은 보다 긴 벡터를 가능하게 하는 아키텍처로 구현되었으면, 이에 따라 이들의 보다 긴 벡터는, 효과적인 연산 카운트를 증가시킬 것이다. 또한, 32비트 레인의 구체적인 예가 도시되지만, (입력과 출력 양쪽에서의) 많은 상이한 폭 조합, 예를 들면 16비트 x 16비트 ->64비트 또는 16비트 x 16비트->32비트가 가능하다는 것을 알아야 한다. "바이(By) 요소" 형태들도, (가령, 단일의 32비트 레인이 상기 오퍼랜드들 중 하나에 대해 복제되는 것과 같은 경우) 제안되어 있다. 도 9a에서 출력 레지스터를 제2 레지스터에 연결하는 점선 화살표는, 실제로 제2 레지스터가 출력 레지스터일 수도 있어, 이 레지스터의 내용에 대해 누적 연산이 행해지게 하는 것을 허용한다는 사실을 개략적으로 표현한 것이다. 도 9b의 고려사항으로 돌아가면, 여기서는 2개의 별개의 명령을 도시한 것을 주목한다. 일반적으로, 도시된 제1 명령은, 도 9a에 도시된 연산들 모두를 실시시키지만, 도 9b에 도시된 제1 명령이 단지 곱셈과 합산 연산만을 실시시키고 출력 레지스터에 결과를 포함하여 누적 레지스터에 적용하는 이후의 누적연산이 해당 태스크에 대해 구체적으로 제안된 도시된 제2 명령에 의해 실시되어도 되는 실시예들도 제공된다.
도 10은 도 9b에 도시된 데이터 처리 명령들의 실행의 실시예들에서 일부의 변형을 개략적으로 도시한 것이다. 여기서, 단지 명백하게 도시하기 위해서, 2개의 소스 레지스터(350, 352) 각각에서 액세스된 데이터 요소들의 수는, 2개까지 감소된다. 이에 대응하게, 단지 2개의 곱셈 유닛(354, 356)은 (레인마다) 제공되고, 1개의 합산 유닛(358)은 (레인마다) 제공된다. 실행된 특별한 데이터 처리 명령에 따라, "내적" 연산의 결과는, 지정된 출력 레지스터(360)에 (지정된 경우) 기록되어도 되거나, 이와는 달리 (그렇게 지정된 경우) 누적 레지스터(362)에 기록되어도 된다. 후자의 경우에, 누적 레지스터가 명시되는 경우, 이 누적 레지스터의 내용은, 진행중인 누적이 실시될 수 있도록, 상기 합산 유닛(358)에 추가의 입력으로서 취해질 수도 있다.
도 11은 2개의 128비트 레지스터(380, 382)가 상술한 "내적" 데이터 처리 연산 명령들 중 하나에 대한 소스 레지스터들인 보다 복잡한 예를 개략적으로 도시한 것이다. 이 소스 레지스터들(380, 382)의 각각은 4개의 독립적인 레인들(레인 0-3)의 면에서 취급되고, 이 레인들의 각각의 내용은 그 2개의 소스 레지스터들로부터 동일한 레인의 각각의 내용이 인접한 저장 버퍼들에 전송되도록 임시 저장 버퍼들(384-398)에 넣어진다. 그 후, 각 저장 버퍼내의 내용 데이터 요소들(본 예에서 각각 4개의 데이터 요소들)은 레인(400, 402, 404, 406)마다 제공된 일 세트의 4개의 곱셈 유닛들에 각각의 입력들을 제공한다. 그 후, 이것들의 출력은 각각의 합산 유닛들(408, 410, 412, 414)에 공급되고, 이 합산 유닛들의 각각의 출력은 누적 레지스터(416)의 각각의 대응한 레인에 전달된다. 누적 레지스터(416)의 각각의 레인들은, 제2 타입의 입력을 합산 유닛들(누적기들)(408-414)내에 제공한다. 도 12는 도 11과 동일한 기본적 구성을 도시한 것이고 실제로 동일한 세부부품들은 동일한 참조부호로 나타내고 여기서 다시 설명하지는 않는다. 도 12와 도 11간의 차이는, 128비트 레지스터(380)(소스 레지스터)의 4개의 레인들의 각각의 내용이 사용되지만, 제2의 128비트 소스 레지스터(382)로부터의 제1 레인 내용만이 사용되고 이 내용은 임시 저장 유닛들(386, 390, 394, 398)의 각각에 복제된다는 것이다. 본 예에서 소스 레지스터(382)로부터의 내용을 제공하는 레인(만)으로서 선택된 이 레인은, 상기 명령에 의해 지정된다. 본 예 설명을 위해 선택되어 있는 이 특별한 레인(레인 0)과 관련된 의미가 없고 소스 레지스터(382)의 그 밖의 레인들 중 어느 하나가 마찬가지로 잘 지정될 수 있다는 것을 알 것이다. 그 선택된 레인의 지정은, 예를 들면 도 4a의 명령 예에 도시된 것처럼, 그 명령에서의 인덱스 값의 설정에 의해 행해진다.
도 11 및 도 12에 도시된 예들에 관한 추가의 변형이 도 13에 도시되어 있다. 또한, 여기서는, 동일한 세부부품들이 재사용되고, 동일한 참조부호가 부여되며, 간략을 기하기 위해 다시 설명되지 않는다. 도 11 및 도 12의 예들에 대해 도 13에 도시된 차이는, 소스 레지스터들(380, 382)의 각각의 4개의 레인들 자체가 2개의 데이터 그룹들(여기서는, "청크들"이라고도 하고, 본 도면에서는 청크 0과 청크 1로 라벨이 붙여짐)에서 취급되는 것이다. 이것은, 그 레지스터(380)의 내용이 처리되는 방식에 영향을 미치지 않고, 그의 4개의 레인들의 내용은 이전처럼 임시 저장 유닛들(384, 388, 396)에 전송된다. 그렇지만, 여기서는, 도 12의 예로 도입된 것처럼 단일의 레인 내용의 추출과 복제는, 데이터 그룹 단위("청크" 단위)로 행해져, 레지스터(382)의 레인 0의 내용이 임시 저장 버퍼들(394, 398)에 복제 및 전송되는 한편, 청크 1에서의 레인 2의 내용은 임시 저장 버퍼들(386, 390)에 복제 및 전송된다. 도 13에 도시된 연산은, 4개의 처리 유닛들(120-126)에 의해 실시된 해당 도면에서의 "연산"이 상기 설명된 내적 연산을 포함하는 경우에, 보다 일반적으로 도시된 도 4b의 구체적인 예라고 생각될 수 있다는 것을 주목해야 할 것이다. 또, 이렇게 도시된 예( 각 청크의 "제1" 레인들로서, 레인 2 및 0)에서 선택된 특별한 레인들과 관련된 의미가 없고, 이들은, 예를 들면 도 4a의 명령 예에 도시된 것처럼, 상기 명령에서의 인덱스 값의 설정에 의해 지정되어 있다는 것을 알 것이다. 끝으로, 도 13에 도시된 데이터 처리 명령의 실행은, 소스 레지스터들의 내용을 적절하게 준비하기 위해서, 도 2 및 도 3에 도시되며 상술한 것들과 같은, 데이터 준비 명령의 실행 뒤에 있어도 유용하다는 것을 주목한다.
도 14는 도 9a-도 13을 참조하여 상술한 것과 같은 내적 연산을 수행하기 위해 데이터 처리 명령을 실행할 때 일 실시예의 방법에 따라 취해지는 단계들의 시퀀스를 도시한 것이다. 흐름은 단계 430에서 시작되어 그 명령이 디코딩되고, 단계 440에서는 대응한 제어 신호들이 발생된다. 그 후, 단계 450에서, 다수의 데이터 요소들이 레인 단위로 상기 명령에 지정된 제1 소스 레지스터와 제2 소스 레지스터로부터 추출되고, 단계 460에서는, 제1 및 제2 소스 레지스터들의 각각의 쌍들은 내적 연산의 제1 부분을 행하기 위해서 각 레인에서 함께 곱해진다. 그 후, 단계 470에서, 각각의 곱셈기 연산들의 결과들은 레인 단위로 다시 함께 가산되고, 상기 명령에도 지정된 입력 누적 레지스터로부터 검색되어 있는 누적기 값에 (본 예에서) 가산된다.
도 15a는 일부 실시예들에서 제공한 데이터 처리 명령의 실행을 개략적으로 도시한 것이다. 도 15b는 대응한 명령의 예를 도시한 것이다. 본 명령(500)의 예는, 오피코드(502), 제1 소스 레지스터 지정자(504), 제2 소스 레지스터 지정자(506), 및 일 세트의 누적 레지스터 지정자(508)를 포함한다. 도 15a의 예에서 구현된 제 1 및 제2 소스 레지스터(510, 512)는, 데이터 처리 명령의 실행에 응답하여, 데이터 요소들을 추출하는 본 도면의 상부에 도시되어 있다. 모든 (4개의) 데이터 요소들은 제1 소스 레지스터(510)로부터 개별적으로 추출되고, 제2 소스 레지스터(512)의 전체 내용을 구성하는 그 4개의 데이터 요소들은 블록으로서 추출된다. 제2 소스 레지스터(512)의 내용은, 4개의 연산 유닛들, 즉 단일의 곱셈-가산(FMA) 유닛(514, 516, 518 및 520)의 각각에 전달된다. 제1 소스 레지스터(510)로부터 추출된 4개의 데이터 요소들의 각각은, FMA 유닛들(514-520)의 각 유닛에 전달된다. FMA 유닛들 514 및 520의 각각은, 도시된 것처럼, 각각의 제어신호들에 의해 제어된다. 이에 따라, 도 15a의 예에서의 데이터 처리 명령의 실행은, (4개의 FMA 유닛들로 나타낸) 데이터 처리회로가 4개의 벡터-바이-요소 곱셈/누적 연산을 동시에 행하게 한다. 본 기술들은 다수의 4개에 한정되는 것이 아니라, 이것은 부하에 대한 양호한 정합: 이러한 동시대의 처리 장치들에서 일반적으로 이용 가능한 계산 비율이라고 확인되었다는 것을 주목해야 한다. 상기 FMA 유닛들의 출력은, 상기 명령에서 지정된 상기 일 세트의 누적 레지스터들의 각 레지스터에 적용된다(도 15b에서 항목(508)을 참조). 더욱이, 이 4개의 누적 레지스터들(522, 524, 526, 528)의 내용은, FMA 유닛들(514-520)의 각각에의 다른 입력을 형성하여, 이 레지스터들의 각각의 내용에 관해 누적이 실시된다.
도 16은, 대상 행렬 A와 대상 행렬 B가 서로 곱셈되어 결과 행렬 C를 생성하는, 단순 행렬형 곱셈의 예를 표현하는 도 15의 예의 시각화 예를 도시한 것이다. 이를 위한 준비에 있어서, 행렬 A의 열(음영부분)은 레지스터 v0에 로딩되어 있고, 행렬 B의 행(음영부분)은 벡터 v2에 로딩되어 있다. 결과 행렬 C에 대한 누적기들은, 상기 레지스터들 v4-v7에 기억된다. 비록 행렬 A로부터 로딩된 값들이 열로서 도시되어 있지만, 그 행렬들은, 각 소스 어레이로부터의 인접 벡터 로드들이 행해질 수 있도록 쉽게 치환 및/또는 교차 배치된다는 것을 주목한다. 이와 관련하여, 행렬 곱셈은 O(n3) 연산이고 이 때문에 처리용 행렬 데이터를 준비하는 보조 태스크들은 O(n2) 연산이어서 충분히 큰 n에 대해서도 무시 가능한 부담일 것이라는 것을 주목해야 한다. 도시된 예에 대응한 명령은, FMA4 v4-v7, v2, vO[0-3]로서 표현될 수 있다. 여기서, FMA4는, 본 명령의 라벨(또는 동등하게 오피코드)을 표현하고, v4-v7은 일 세트의 누적 레지스터들이고, v2는 완전한 내용이 취해지는 소스 레지스터이고, v0는 일 세트의 데이터 요소들(인덱싱된 0-3)이 취해지는 소스 레지스터다. 그 후, 이 명령의 실행은 4개의 연산들이 생긴다:
v4 +=v2*v0[0],
v5 +=v2*v0[1],
v6 +=v2*v0[2], 및
v7 +=v2*v0[3].
도 17은, 도 15a에 도시된 예들의 단순한 버전을 표현하는 것으로, 본 예에서, 단지 2개의 데이터 요소들만이 제1 소스 레지스터(540) 및 제2 소스 레지스터(542)의 각각으로부터 얻어진다. 레지스터(542)로부터 추출된 데이터 요소들 모두는 FMA 유닛들 544 및 546의 각각에 전달되고, 레지스터(540)로부터의 제1 데이터 요소는 FMA 유닛 544에 전달되고 제2 데이터 요소는 FMA 유닛 546에 전달된다. 상기 누적 레지스터들(548, 550)의 내용은 각각의 FMA 유닛들의 각각에의 추가의 입력을 제공하고, 그 누적 결과는 각각 각각의 누적 레지스터에 적용된다. 반대로, 도 18은, 보다 많은 데이터 요소들이, 이들(본 예에서는 8개)이 소스 레지스터(560, 562)의 각각으로부터 추출되면서 소스 레지스터들의 각각으로부터 추출되는 일례를 도시한 것이다. 레지스터(562)의 완전한 내용이 FMA 유닛들(564-578)의 각각에 제공되고, 레지스터(560)로부터 선택된 각각의 데이터 요소가 다른 나머지 입력으로서 제공된다. 곱셈-가산의 결과는, 각각의 누적 레지스터들(580-594)에 누적된다.
도 19는 일례에서 행해진 일부의 특정한 곱셈 연산들의 보다 상세내용을 나타내는 예를 도시한 것이다. 여기서, 2개의 소스 레지스터 v0 및 v2는, 각기 2개의 별개의 데이터 그룹들에서 취급된다. 레지스터 v0의 2개의 데이터 그룹들도, 선택된 데이터 요소가 복제되는 레지스터의 부분들을 표현하고, 도 19의 예에서 이것은 각 부분의 "제1" 데이터 요소, 즉 각각 요소 [0]과 요소 [4]이다. 그 선택된 데이터 요소는, 인덱스에 의해 상기 명령에서 지정될 수 있다. 따라서, 도 19에 도시된 데이터 연산에서 제1 단계에서, 레지스터 v0의 이들 2개의 데이터 그룹들의 데이터 요소는, 도시된 것처럼 각 부분의 폭에 걸쳐 복제된다. 그 후, 이들은 그 입력들을 4개의 곱셈기들(600, 602, 604, 606)에 제공하고, 다른 나머지 입력은 레지스터 v2의 내용에 의해 제공된다. 그 후, v2의 각각의 데이터 요소들과 v0의 각각의 데이터 요소들과의 곱셈이 행해지고, 그 결과들이 타겟 레지스터들(v4-v7)에 적용되고, 여기서 2개의 데이터 그룹들로의 세부분할은 각 누적 레지스터의 데이터 그룹마다 라벨이 붙여진 특정한 계산에 의해 도시된 것처럼 이들 4개의 누적 레지스터들에 유지된다. 도 19에 도시된 데이터 처리 명령의 실행은, 소스 레지스터들의 내용을 적절하게 준비하기 위해서, 도 2 및 도 3에 도시되고 상술한 것들과 같은, 데이터 준비 명령의 실행 뒤에 있어도 되는 것이 유용하다는 것을 주목한다.
도 20은, 2개의 소스 레지스터(620, 622)의 내용이 2개의 독립적인 레인들(레인 0과 레인 1)에서 데이터 요소들을 포함하는 것으로서 취급되는 일례를 도시한 것이다. 각 레인내에서, 2개의 서브부분들이 규정되고 내용의 이 "레이닝(laning)"은 계산 전체에 걸쳐, 즉 FMA 유닛들(624, 626, 628, 630)을 통해, 끝으로 누적 레지스터들(632, 634)에 유지된다.
도 21은 도 15a 내지 도 20의 예들에 대해 설명된 것과 같은 데이터 처리 명령을 처리할 때 일 실시예의 방법에 따라 취해지는 단계들의 시퀀스를 도시한 것이다. 흐름은 단계 650에서 시작되어 데이터 처리 명령이 디코딩되고, 단계 652에서 대응한 제어신호들이 발생된다. 그 후, 단계 654에서, N개의 데이터 요소들은 데이터 처리 명령에 지정된 제1 소스 레지스터로부터 추출되고, 단계 656에서, 그 N개의 데이터 요소들은 데이터 처리 명령에 지정된 제2 소스 레지스터의 내용과 곱해진다. 그 후, 단계 658에서, 이 곱셈 연산의 N개의 결과 값들은, 데이터 처리 명령에 지정된 N개의 각각의 누적 레지스터들의 내용에 적용된다. 소스 레지스터들의 내용을 적절하게 준비하기 위해서, 도 21에 대해 설명된 것과 같은 명령의 실행과, 마찬가지로 도 14에 대해 설명된 것과 같은 명령의 실행은, 도 2 및 도 3에 도시되고 상술한 것들과 같은, 데이터 준비 명령의 실행 뒤에 있어도 유용한 것이라는 것을, 선행하는 설명에 비추어 보아 알 것이다.
도 22는 이용할 수도 있는 가상 머신 구현을 도시한 것이다. 상술한 실시예들은 관련된 기술들을 지원하는 특정한 처리 하드웨어를 동작시키는 장치 및 방법들의 관점에서 본 기술들을 구현하는 것이 일반적이지만, 하드웨어 디바이스들의 소위 가상 머신 구현을 제공하는 것도 가능하다. 이들 가상 머신 구현들은, 가상 머신 프로그램(710)을 지원하는 호스트 운영체계(720)를 전형적으로 동작시키는 호스트 프로세서(730)상에서 동작한다. 이것은 아주 강력한 프로세서들이 합리적 속도로 실행하는 가상 머신 구현을 지원하기 위해서 제공되는 것이 필요할 수도 있지만, 이러한 해결방법은, 특정한 상황에서, 이를테면, 호환성 또는 재사용 목적을 위해 또 하나의 프로세서 고유의 코드를 실행하기를 바라는 경우에 정당화될 수도 있다. 가상 머신 프로그램(710)은, 이 가상 머신 프로그램(710)에 의해 모형이 만들어지는 상기 디바이스인 실제의 하드웨어에 의해 제공될 애플리케이션 프로그램 인터페이스와 같은 애플리케이션 프로그램(700)에 대해 애플리케이션 프로그램 인터페이스를 제공한다. 따라서, 상술한 프로세서 상태 체크 명령어의 하나 이상의 예들을 포함하는 프로그램 명령어들은, 상기 가상 머신 프로그램(710)을 사용하여 가상 머신 하드웨어와의 상호작용을 모형으로 만들기 위해 상기 애플리케이션 프로그램(700)내로부터 실행되어도 된다.
전반적으로 간단히 요약하여, 데이터 처리장치, 데이터 처리장치의 동작방법, 비일시적 컴퓨터 판독 가능한 저장매체, 및 명령이 제공된다. 명령은, 제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스를 지정한다. 이 명령에 응답하여, 제어신호들을 발생하여, 처리회로가 제1 소스 레지스터 및 제2 소스 레지스터에서 각 데이터 그룹에 대해 데이터 처리 연산을 수행하게 하여 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생한다. 상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각은, 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹은 복수의 데이터 요소들을 포함한다. 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소이다. 레지스터 폭이 증가하는 것처럼 쉽게 확장 가능한 요소-바이-벡터 연산에 대한 기술.
본 출원에서, "...하도록 구성된"과 "하도록 배치된"의 단어는, 장치의 요소가 명시된 연산을 실시할 수 있는 구성을 갖는다는 것을 의미하는데 사용된다. 이와 관련해서, "구성"은, 하드웨어 또는 소프트웨어의 상호연결의 배치 또는 방식을 의미한다. 예를 들면, 상기 장치는 상기 명시된 연산을 제공하는 전용 하드웨어를 가져도 되거나, 프로세서 또는 다른 처리 디바이스는 그 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된" 또는 "하도록 배치된"은, 상기 장치 요소들이 임의의 방식으로 상기 명시된 연산을 제공하기 위해서 변경될 필요가 있다는 것을 암시하지는 않는다.
여기서는 실시예들을 첨부도면을 참조하여 상세히 설명하였지만, 본 발명은 구체적인 실시예들에 한정되지 않고, 첨부된 청구항에서 기재된 것과 같은 본 발명의 범위로부터 벗어나지 않고 당업자가 변경, 부가 및 수정을 여러 가지로 실시할 수 있다는 것을 알 수 있다. 예를 들면, 본 발명의 범위로부터 벗어나지 않고 종속항의 특징들과 독립항의 특징들을 여러 가지로 조합할 수 있다.

Claims (24)

  1. 복수의 레지스터들을 갖는 레지스터 저장회로;
    제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 복수의 레지스터들에 지정하는 데이터 처리 명령에 응답하여, 제어신호들을 발생하는 디코더 회로를 구비하고,
    상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함하고;
    제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생하는 처리회로를 더 구비하고,
    상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소인, 데이터 처리장치.
  2. 제 1 항에 있어서,
    처리회로는, 제어신호들에 응답하여, 상기 선택된 데이터 요소의 다수의 인스턴스들을 다수의 데이터 연산회로들에 공급하는 데이터 요소 조작회로를 구비하고, 각 데이터 연산회로는, 제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각각의 데이터 그룹에 대해 데이터 처리 연산을 수행하는 회로인, 데이터 처리장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    디코더 회로는, 데이터 준비 명령에 응답하여, 추가의 제어신호들을 발생하고, 이때의 데이터 준비 명령은 메모리 장소와 타겟 레지스터를 지정하고,
    처리회로는 추가의 제어신호들에 응답하여, 소정의 크기를 갖는 대상 데이터 그룹 항목을 메모리 장소로부터 검색하고 대상 데이터 그룹 항목의 복제에 의해 타겟 레지스터를 채우는 회로인, 데이터 처리장치.
  4. 제 3 항에 있어서,
    타겟 레지스터는, 제1 소스 레지스터인, 데이터 처리장치.
  5. 선행하는 청구항 중 어느 한 항에 있어서,
    레지스터 저장회로는 정수배의 표시를 저장하는 제어 레지스터를 구비하는, 데이터 처리장치.
  6. 제 5 항에 있어서,
    디코더 회로는, 제어 명령에 응답하여, 데이터 처리장치에 대한 소정의 최대값까지 상기 정수배의 표시를 수정하는 회로인, 데이터 처리장치.
  7. 선행하는 청구항 중 어느 한 항에 있어서,
    데이터 처리 명령은 복수의 레지스터들에서 결과 레지스터를 한층 더 지정하고,
    처리회로는 제어신호들에 한층 더 응답하여, 데이터 처리 연산의 결과를 결과 레지스터에 적용하는 회로인, 데이터 처리장치.
  8. 제 7 항에 있어서,
    처리회로는, 제어신호들에 응답하여, 데이터 처리 연산의 결과를 결과 레지스터에 저장하는 회로인, 데이터 처리장치.
  9. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
    처리회로는, 제어신호들에 응답하여, 데이터 처리 연산의 결과를 제2 소스 레지스터에 적용하는 회로인, 데이터 처리장치.
  10. 선행하는 청구항 중 어느 한 항에 있어서,
    데이터 처리 명령은 복수의 레지스터들에서 적어도 하나의 추가의 소스 레지스터를 한층 더 지정하고,
    처리회로는, 제어신호들에 응답하여, 적어도 하나의 추가의 소스 레지스터에서 한층 더 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여, 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생하고,
    상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은 적어도 하나의 추가의 소스 레지스터의 데이터 그룹에서의 각 데이터 요소를 더 포함하는, 데이터 처리장치.
  11. 제 10 항에 있어서,
    처리회로는, 제어신호들에 응답하여, 데이터 처리 연산의 결과를 이전의 내용과 적어도 하나의 추가의 소스 레지스터에 누적하는 회로인, 데이터 처리장치.
  12. 제 1 항 내지 제 11 항 중 어느 한 항에 있어서,
    데이터 처리 연산은 산술연산인, 데이터 처리장치.
  13. 제 12 항에 있어서,
    데이터 처리 연산은 곱셈연산인, 데이터 처리장치.
  14. 청구항 8에 종속하는 경우, 제 12 항에 있어서,
    데이터 처리 연산은,
    제1 소스 레지스터와 제2 소스 레지스터의 각각으로부터 적어도 제1 데이터 요소와 제2 데이터 요소를 추출하는 것;
    적어도 제1 데이터 요소 쌍들과 제2 데이터 요소 쌍들을 함께 곱셈하는 곱셈연산들을 수행하는 것; 및
    곱셈연산들의 결과들을 합산하는 것을 포함하는, 내적연산인, 데이터 처리장치.
  15. 제 14 항에 있어서,
    곱셈연산들은, 제1 데이터 요소 쌍들, 제2 데이터 요소 쌍들, 제3 데이터 요소 쌍들 및 제4 데이터 요소 쌍들을 함께 곱셈하는 것을 포함하는, 데이터 처리장치.
  16. 제 14 항 또는 제 15 항에 있어서,
    데이터 처리 명령은 복수의 레지스터들에서의 누적 레지스터를 한층 더 지정하고, 데이터 처리 연산은,
    누적값을 누적 레지스터로부터 로딩하는 것;
    곱셈연산들의 결과들을 누적값과 합산하는 것; 및
    합산하는 것의 결과를 누적 레지스터에 저장하는 것을 한층 더 포함하는, 내적 및 누적 연산인, 데이터 처리장치.
  17. 청구항 8에 종속하는 경우, 제 12 항에 있어서,
    데이터 처리 연산은, 곱셈-누적 연산인, 데이터 처리장치.
  18. 제 17 항에 있어서,
    제1 소스 레지스터와 제2 소스 레지스터에서 각 상기 데이터 그룹에서의 데이터 요소는 복소수를 표현하는 한 쌍의 데이터 값들이고, 데이터 처리 연산은 복소수들의 곱셈-누적인, 데이터 처리장치.
  19. 제 18 항에 있어서,
    데이터 처리 명령은 회전 파라미터를 한층 더 지정하고, 상기 처리회로는, 회전 파라미터에 응답하여, 복소수들의 곱셈-누적을, 선택된 데이터 값들의 치환과 데이터 처리 연산이 실시되는 그들의 부호들을 사용하여 수행하는 회로인, 데이터 처리장치.
  20. 제 1 항 내지 제 11 항 중 어느 한 항에 있어서,
    데이터 처리 연산은 논리연산인, 데이터 처리장치.
  21. 제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 복수의 레지스터들에 지정하는 데이터 처리 명령을 디코딩하여, 제어신호들을 발생하는 단계-상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함함-; 및
    제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생하는 단계-상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소임-를 포함하는, 데이터 처리방법.
  22. 데이터 처리장치에 의해 실행될 때,
    제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 복수의 레지스터들에 지정하는 데이터 처리 명령에 응답하여, 제어신호들의 발생을 야기시키고-상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함함-;
    제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들의 발생을 야기시키는-상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소임-
    적어도 하나의 데이터 처리 명령을 포함하는 프로그램을 비일시적 방식으로 저장하는 컴퓨터 판독 가능한 저장매체.
  23. 복수의 레지스터들에 데이터를 저장하는 수단;
    제1 소스 레지스터, 제2 소스 레지스터, 및 인덱스로 이루어진 상기 데이터를 저장하는 수단에 지정하는 데이터 처리 명령을 디코딩하여, 제어신호들을 발생하는 수단-상기 제1 소스 레지스터와 상기 제2 소스 레지스터의 각각이 데이터 그룹의 소정의 크기의 적어도 2배 정수배인 크기를 갖고, 각 데이터 그룹이 복수의 데이터 요소들을 포함함-; 및
    제어신호들에 응답하여, 제1 소스 레지스터와 제2 소스 레지스터에서의 각 상기 데이터 그룹에 대해 데이터 처리 연산을 수행하여 그 데이터 처리 연산의 결과를 형성하는 각각의 결과 데이터 그룹들을 발생하는 수단-상기 데이터 그룹마다 데이터 처리 연산의 오퍼랜드들은, 인덱스에 의해 제1 소스 레지스터의 데이터 그룹에서 식별된 선택된 데이터 요소와, 제2 소스 레지스터의 데이터 그룹에서의 각 데이터 요소임-을 구비하는, 데이터 처리장치.
  24. 데이터 처리장치상에서 실행하는 컴퓨터 프로그램에 의해 제공되고, 청구항 1 내지 20, 또는 청구항 23 중 어느 한 항의 데이터 처리장치에 대응한 명령 실행 환경을 제공하는, 가상 머신.
KR1020197026458A 2017-02-23 2018-02-02 데이터 처리장치에서의 요소 바이 벡터 연산 KR102584031B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GR20170100081 2017-02-23
GR20170100081 2017-02-23
PCT/GB2018/050311 WO2018154273A1 (en) 2017-02-23 2018-02-02 Element by vector operations in a data processing apparatus

Publications (2)

Publication Number Publication Date
KR20190119075A true KR20190119075A (ko) 2019-10-21
KR102584031B1 KR102584031B1 (ko) 2023-10-04

Family

ID=61188842

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197026458A KR102584031B1 (ko) 2017-02-23 2018-02-02 데이터 처리장치에서의 요소 바이 벡터 연산

Country Status (8)

Country Link
US (1) US11327752B2 (ko)
EP (1) EP3586228B1 (ko)
JP (1) JP7148526B2 (ko)
KR (1) KR102584031B1 (ko)
CN (1) CN110312993B (ko)
IL (1) IL267998B2 (ko)
TW (1) TWI780116B (ko)
WO (1) WO2018154273A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10963256B2 (en) * 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
CN111198670B (zh) 2018-11-20 2021-01-29 华为技术有限公司 执行矩阵乘法运算的方法、电路及soc
US20210334072A1 (en) * 2020-04-22 2021-10-28 Facebook, Inc. Mapping convolution to connected processing elements using distributed pipelined separable convolution operations
US11263291B2 (en) 2020-06-26 2022-03-01 Intel Corporation Systems and methods for combining low-mantissa units to achieve and exceed FP64 emulation of matrix multiplication
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030097391A1 (en) * 2001-11-21 2003-05-22 Ashley Saulsbury Methods and apparatus for performing parallel integer multiply accumulate operations
US20050125631A1 (en) * 2003-12-09 2005-06-09 Arm Limited Data element size control within parallel lanes of processing
JP2005174292A (ja) * 2003-12-09 2005-06-30 Arm Ltd データシフト操作
KR20150110599A (ko) * 2013-01-23 2015-10-02 인터내셔널 비지네스 머신즈 코포레이션 벡터 갈로이스 필드 멀티플라이 섬 및 어큐물레이트 명령

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0589159A (ja) * 1992-01-10 1993-04-09 Hitachi Ltd データ処理システム
GB2409062C (en) * 2003-12-09 2007-12-11 Advanced Risc Mach Ltd Aliasing data processing registers
GB2409059B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
GB2409066B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
US20080071851A1 (en) 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
GB2458665B (en) * 2008-03-26 2012-03-07 Advanced Risc Mach Ltd Polynomial data processing operation
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
GB2474901B (en) * 2009-10-30 2015-01-07 Advanced Risc Mach Ltd Apparatus and method for performing multiply-accumulate operations
PL3422178T3 (pl) 2011-04-01 2023-06-26 Intel Corporation Przyjazny dla wektorów format instrukcji i jego wykonanie
EP2584460A1 (en) * 2011-10-20 2013-04-24 ST-Ericsson SA Vector processing system comprising a replicating subsystem and method
WO2013095669A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Multi-register scatter instruction
US9424327B2 (en) * 2011-12-23 2016-08-23 Intel Corporation Instruction execution that broadcasts and masks data values at different levels of granularity
WO2013095607A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Instruction execution unit that broadcasts data values at different levels of granularity
EP3001306A1 (en) * 2014-09-25 2016-03-30 Intel Corporation Bit group interleave processors, methods, systems, and instructions
EP3001307B1 (en) * 2014-09-25 2019-11-13 Intel Corporation Bit shuffle processors, methods, systems, and instructions
US20160179523A1 (en) 2014-12-23 2016-06-23 Intel Corporation Apparatus and method for vector broadcast and xorand logical instruction
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
US10503502B2 (en) * 2015-09-25 2019-12-10 Intel Corporation Data element rearrangement, processors, methods, systems, and instructions
US11029949B2 (en) * 2015-10-08 2021-06-08 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit
US11216720B2 (en) * 2015-10-08 2022-01-04 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit that manages power consumption based on memory accesses per period
US10509765B2 (en) * 2015-10-08 2019-12-17 Via Alliance Semiconductor Co., Ltd. Neural processing unit that selectively writes back to neural memory either activation function output or accumulator value
US10565494B2 (en) * 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
KR102425668B1 (ko) * 2017-02-23 2022-07-28 에이알엠 리미티드 데이터 처리장치에서의 곱셈-누적
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030097391A1 (en) * 2001-11-21 2003-05-22 Ashley Saulsbury Methods and apparatus for performing parallel integer multiply accumulate operations
US20050125631A1 (en) * 2003-12-09 2005-06-09 Arm Limited Data element size control within parallel lanes of processing
JP2005174292A (ja) * 2003-12-09 2005-06-30 Arm Ltd データシフト操作
KR20150110599A (ko) * 2013-01-23 2015-10-02 인터내셔널 비지네스 머신즈 코포레이션 벡터 갈로이스 필드 멀티플라이 섬 및 어큐물레이트 명령

Also Published As

Publication number Publication date
JP2020508514A (ja) 2020-03-19
IL267998B1 (en) 2023-08-01
JP7148526B2 (ja) 2022-10-05
KR102584031B1 (ko) 2023-10-04
CN110312993A (zh) 2019-10-08
EP3586228B1 (en) 2023-03-29
EP3586228A1 (en) 2020-01-01
WO2018154273A1 (en) 2018-08-30
US11327752B2 (en) 2022-05-10
TW201832071A (zh) 2018-09-01
CN110312993B (zh) 2024-04-19
US20190377573A1 (en) 2019-12-12
IL267998A (en) 2019-09-26
IL267998B2 (en) 2023-12-01
TWI780116B (zh) 2022-10-11

Similar Documents

Publication Publication Date Title
KR102492356B1 (ko) 데이터 처리장치에서의 산술 확대
KR102584031B1 (ko) 데이터 처리장치에서의 요소 바이 벡터 연산
KR102425668B1 (ko) 데이터 처리장치에서의 곱셈-누적
EP3655852B1 (en) Vector interleaving in a data processing apparatus
US11106465B2 (en) Vector add-with-carry instruction
TWI773783B (zh) 用於基於暫存器的複數處理的設備、方法、積體電路、電腦程式及電腦可讀取儲存媒體
GR20170200090U (el) Λειτουργιες στοιχειου κατα διανυσμα σε μια διαταξη επεξεργασιας δεδομενων
TW202305588A (zh) 用於向量組合指令之處理設備、方法、及電腦程式

Legal Events

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