KR20190026830A - 벡터 레지스터 액세스 - Google Patents

벡터 레지스터 액세스 Download PDF

Info

Publication number
KR20190026830A
KR20190026830A KR1020197003387A KR20197003387A KR20190026830A KR 20190026830 A KR20190026830 A KR 20190026830A KR 1020197003387 A KR1020197003387 A KR 1020197003387A KR 20197003387 A KR20197003387 A KR 20197003387A KR 20190026830 A KR20190026830 A KR 20190026830A
Authority
KR
South Korea
Prior art keywords
access
vector
register
registers
columns
Prior art date
Application number
KR1020197003387A
Other languages
English (en)
Other versions
KR102379885B1 (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 KR20190026830A publication Critical patent/KR20190026830A/ko
Application granted granted Critical
Publication of KR102379885B1 publication Critical patent/KR102379885B1/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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address 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/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/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/30105Register structure
    • 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
    • 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/30141Implementation provisions of register files, e.g. ports
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • 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

Landscapes

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

Abstract

벡터 레지스터들의 세트를 포함하는 장치가 제공되며, 상기 벡터 레지스터들의 각각은 복수의 부분들로 구성되는 벡터를 저장하도록 구성된다. 상기 벡터 레지스터들의 세트는 논리적으로 복수의 열들로 분할되고, 그 열들의 각각은 각 벡터의 동일한 부분을 저장하도록 배열된다. 상기 장치는 또한 복수의 액세스 블록들을 포함하는 레지스터 액세스 회로를 구비한다. 각 액세스 블록은 상기 벡터 레지스터들 중 적어도 한개의 다른 벡터 레지스터에 액세스할 때보다 상기 벡터 레지스터들 중 한개의 벡터 레지스터에 액세스할 때 상이한 열의 부분에 액세스하도록 구성된다. 레지스터 액세스 회로는 벡터 레지스터들과 열들 중 어느 한개의 부분들에 동시에 액세스하도록 구성된다.

Description

벡터 레지스터 액세스
본 기술은 데이터 처리에 관한 것으로, 특히 벡터 레지스터들의 액세스에 관한 것이다.
벡터 레지스터 파일은 다수의 벡터 레지스터를 포함하며, 그 각각은 다수의 부분을 각각 포함하는 하나 이상의 벡터를 저장할 수 있다. 예를 들어, 벡터는 적색 값, 녹색 값, 청색 값 및 알파 값을 제공함으로써 픽셀 컬러를 나타낼 수 있으며, 그 값의 각각은 8비트(bits)이다. 이러한 방식으로, 예를 들어 이미지에서의 각 픽셀의 컬러를 표현하기 위해 다수의 상이한 픽셀 컬러가 제공될 수 있다. 한 번에 한개의 벡터 레지스터에 대한 처리를 수행하는 것이 이전에 제안되었다. 그러나, 종종 상이한 액세스 패턴을 제공하는 것이 바람직하다. 예를 들어, 어떤 명령들은 동시에 단일 벡터의 모든 구성요소(예를 들어, 단일 픽셀의 표현)에 대한 액세스를 원할 수도 있지만, 다른 명령들은 동시에 다중(예를 들어, 4) 벡터의 단일 구성요소(예를 들어, 알파 값)에 대한 액세스를 원할 수도 있다.
제1 예시적인 구성에서 보면, 장치는, 복수의 부분들을 포함하는 벡터를 각각 저장하도록 구성되며, 각 벡터의 동일한 부분을 저장하도록 각각 배열되어 있는 복수의 열들로 논리적으로 분할되는, 벡터 레지스터들의 세트와, 복수의 액세스 블록들을 포함하는 레지스터 액세스 회로를 구비하고, 각 액세스 블록은, 상기 벡터 레지스터들 중 한개에 액세스할 때, 상기 벡터 레지스터들 중 적어도 한개의 다른 벡터 레지스터에 액세스할 때와는 상이한 열의 부분에 액세스하도록 구성되며, 상기 레지스터 액세스 회로는 상기 벡터 레지스터들 및 상기 열들 중 어느 한개의 부분들에 동시에 액세스하도록 구성된다.
제2 예시적인 구성에서 보면, 장치를 제조하는 방법이 제공되는데, 이 방법은, 복수의 부분들을 포함하는 벡터를 각각 저장하도록 구성되고, 각 벡터의 동일한 부분을 저장하도록 각각 배열되는 복수의 열들로 논리적으로 분할되는, 벡터 레지스터들의 세트를 제공하는 단계와, 복수의 액세스 블록들을 포함하는 레지스터 액세스 회로를 제공하는 단계를 포함하고, 각 액세스 블록은, 상기 벡터 레지스터들 중 한개에 액세스할 때, 상기 벡터 레지스터들 중 적어도 한개의 다른 벡터 레지스터에 액세스할 때와는 상이한 열의 부분에 액세스하도록 구성되며, 상기 레지스터 액세스 회로는 상기 벡터 레지스터들 및 상기 열들 중 어느 한개의 부분들에 동시에 액세스하도록 구성된다.
제3 예시적인 구성에서 보면, 복수의 부분들을 포함하는 벡터를 각각 저장하고, 각 벡터의 동일한 부분을 저장하도록 각각 배열되는 복수의 열들로 논리적으로 분할되는, 벡터 레지스터 수단들의 세트와, 상기 벡터 레지스터 수단들 및 상기 열들 중 어느 한개의 부분들에 동시에 액세스하고, 상기 벡터 레지스터들 중 한개의 벡터 레지스터에 액세스할 때, 상기 벡터 레지스터들 중 적어도 한개의 다른 벡터 레지스터에 액세스할 때와는 상이한 열의 부분에 액세스하기 위한 복수의 액세스 블록 수단을 포함하는 레지스터 액세스 수단을 구비하는, 장치가 제공된다.
본 기술은 단지 예시로서, 첨부도면에 도시한 바와 같이 본 기술의 실시 예를 참조하여 더 설명될 것이다.
도 1은 벡터 명령들의 처리를 지원하는 데이터 처리 장치의 일례를 개략적으로 도시한다.
도 2는 벡터 명령들의 오버랩된 실행의 예를 도시한 것이다.
도 3은 상이한 프로세서 구현들 사이에서 또는 명령들의 실행의 상이한 인스턴스들 사이의 런타임(run time)에서 연속적인 벡터 명령들 간의 중복량을 스케일링하는 3가지 예를 도시한 것이다.
도 4는 스칼라 명령의 실행이 두 벡터 명령들 간의 중복을 깨는 예를 도시한 것이다.
도 5는 벡터 레지스터들의 세트가 논리적으로 다수의 섹션으로 배열될 수 있는 방법을 개략적으로 도시하는 도면이다.
도 6은 메모리로부터 벡터 레지스터들로 로딩된 데이터에 대해 디인터리브 동작을 집합적으로 수행하도록 일 실시 예에서 로드 명령들의 그룹이 어떻게 배열될 수 있는지를 개략적으로 도시하는 도면이다.
도 7a 내지 도 7g는 데이터 요소들의 상이한 크기들에 대한 재배열 명령들의 그룹 내의 개개의 명령들과 관련될 수 있는 상이한 데이터 요소 액세스 패턴들을 도시한 것이다.
도 8은 일 실시 예에 따른 4(VLD4n 명령들)의 스트라이드(stride)을 갖는 벡터 로드 명령들 중 하나를 실행할 때 메모리에서 액세스될 어드레스를 식별하기 위해 패턴 ID 및 비트(beat) ID 정보가 어떻게 어드레스 워드 오프셋(address word offset)을 생성하는데 사용될 수 있는지를 나타내는 도면이다.
도 9는 본 발명에 따른 VLD4n 명령의 실행 중에 액세스할 벡터 레지스터들의 적절한 부분을 결정하는데 사용될 수 있는 회로를 도시한 것이다.
도 10은 일 실시 예에 따른 벡터 로드 및 곱셈 - 누적 명령들이 어떻게 중복될 수 있는지를 나타내는 타이밍도이다.
도 11a 내지 11d는 일 실시 예에 따라 제공될 수 있는 로드 및 저장 명령들의 다양한 예시적인 인코딩들을 도시한 것이다.
도 12는 일 실시 예에 따른 재배열 명령들의 그룹을 처리할 때 도 1의 명령 디코더의 동작을 도시하는 흐름도이다.
도 13은 일 실시 예에 따라 수행될 수 있는 데이터 확장 동작을 도시한 것이다.
도 14a 및 14b는 일 실시 예에 따른 재배열 명령들의 그룹의 실행 중에 수행되는 동작들에 영향을 미치기 위해 어떻게 술어 정보(predicated information)가 사용될 수 있는지를 도시한 것이다.
도 15는 일 실시 예에 따른 기록 액세스 회로를 갖는 벡터 레지스터 파일의 일부를 개략적으로 도시한 것이다.
도 16은 일 실시 예에 따른 판독 액세스 회로를 갖는 벡터 레지스터 파일의 일부를 개략적으로 도시한 것이다.
도 17은 일 실시 예에 따른 기록 액세스 회로를 갖는 벡터 레지스터 파일을 개략적으로 도시한 것이다.
도 18은 일 실시 예에 따른 판독 액세스 회로를 갖는 벡터 레지스터 파일을 개략적으로 도시한 것이다.
도 19a는 벡터 레지스터 파일이 워드들을 나타내는 텍스트 형식으로 도시되어 있는 벡터 레지스터 파일 내의 단일 트위스트의 예를 도시한 것이다.
도 19b는 벡터 레지스터 파일이 바이트를 나타내는 텍스트 형식으로 도시되어 있는 벡터 레지스터 파일 내의 단일 트위스트의 예를 도시한 것이다.
도 20은 벡터 레지스터 파일이 바이트 형식으로 도시되어 있는 벡터 레지스터 파일 내의 이중 트위스트의 예를 도시한 것이다.
도 21은 일 실시 예에 따른 회로가 이중 트위스트를 수행하는 벡터 레지스터 파일의한 섹션을 개략적으로 도시한 것이다.
도 22는 일 실시 예에 따른 트위스트를 수행하는 프로세스가 임의의 횟수로 네스트된 트위스팅(nested twisting)을 수행하도록 일반화될 수 있는 방법을 도시하는 도면이다.
도 23은 일 실시 예에 따른 레지스터 액세스 회로의 예로서 판독 액세스 회로를 개략적으로 도시한 것이다.
도 24는 일 실시 예에 따른 레지스터 액세스 회로의 일례로서의 기록 액세스 회로를 개략적으로 도시한 것이다.
도 25는 일 실시 예에 따른 제조 방법을 도시하는 흐름도이다.
도 26은 사용할 수 있는 가상 머신 구현을 도시한 것이다.
첨부된 도면을 참조하여 실시 예를 설명하기 전에, 다음의 실시 예 및 관련 이점에 대한 설명이 제공된다.
한개의 예시적인 구성에 따라, 벡터 레지스터들의 세트 - 상기 벡터 레지스터들의 각각은 복수의 부분들을 포함하는 벡터를 저장하도록 구성되고, 상기 벡터 레지스터들의 세트는 복수의 열들로 논리적으로 분할되며, 상기 열들의 각각은 각 벡터의 동일한 부분을 저장하도록 구성되고 -와; 복수의 액세스 블록들을 포함하는 레지스터 액세스 회로를 구비하는, 장치가 제공되고, 각 액세스 블록은 상기 벡터 레지스터들 중 하나에 액세스할 때 상기 벡터 레지스터들 중 적어도 한개의 다른 벡터 레지스터에 액세스할 때와 상이한 열의 한 부분에 액세스하도록 구성되며; 상기 레지스터 액세스 회로는 상기 벡터 레지스터들 및 상기 열들 중 어느 한개의 열의 부분들에 동시에 액세스하도록 구성된다.
벡터 레지스터들의 세트는 (물리적으로 필요하기보다는) 논리적으로 복수의 열들로 분할되고, 열들의 각각은 각 벡터의 동일한 부분을 저장하는 것으로 간주 될 수 있다. 예를 들어, 각각이 자체 128-bit 벡터 레지스터에 저장된 벡터들의 그룹에 대해서는, 제1 열은 이들 벡터의 각각의 제1 32비트(bits)(0-31)를 저장할 수 있고, 제2 열은 이들 벡터의 각각의 제2 32비트(bits)(32-63)를 저장할 수 있다. 벡터 레지스터가 복수의 스칼라 레지스터를 제공함으로써 구현되는 경우도 있지만, 이들 열은 스칼라 레지스터의 폭과 상이한 폭을 가질 수 있다. "논리적으로 분할된"이라는 용어는 물리적 배열을 암시할 수 있는 "열(column)"과 같은 용어의 사용에도 불구하고, 레지스터들 자체가 어떤 특정 방식으로 물리적으로 배열될 필요가 없음을 강조하기 위해 사용된다. 레지스터 액세스 회로는 벡터 레지스터들의 부분들에 대한 액세스를 제공하고, 레지스터 액세스 회로는 다수의 액세스 블록들을 가지며, 그것의 각각은 벡터 레지스터들의 상이한 부분들을 액세스한다. 각 액세스 블록은 한개의 벡터 레지스터에서 한개의 열에 액세스하고 또 다른 벡터 레지스터에서 상이한 열에 액세스하여, "트위스트(twist)"를 형성하도록 연결되어 있다. 이러한 방식으로, 레지스터 액세스 회로가 행(row)의 적어도 한 부분에 액세스할 수 있고 또한 열(column)의 적어도 한 부분에 액세스하는 것이 가능하다. 또한, 이들 2가지 형태의 액세스 중 어느 것이 사용되는지에 관계없이, 그 부분들은, 2개의 언급된 그룹들 중 하나로부터 상이한 부분이 레지스터 액세스 회로의 다중 포트에 제공된다는 점에서 동시에 또는 실질적으로 동시에 액세스 가능하다. 따라서, 회로는 다수의 상이한 액세스 패턴을 제공할 수 있다.
일부 실시 예에서, 벡터 레지스터들의 세트는 적어도 한개의 섹션을 포함하며, 여기서 각 섹션은 상이한 열들을 포함하고; 장치는 각 섹션에 대한 레지스터 액세스 회로를 구비하고, 각 레지스터 액세스 회로는 그 레지스터 액세스 회로와 관련된 섹션의 부분들에 액세스하도록 구성된다. 벡터 레지스터들은 복수의 섹션으로 논리적으로 분할될 수도 있으며, 이들 섹션의 각각은 여러 개의 상이한 열로 구성된다. 레지스터 액세스 회로는 그러한 각 섹션에 대해 제공된다. 이 방식으로, 벡터 레지스터들을 분할할 수 있다. 이러한 배열은 각 벡터의 크기가 각 벡터 레지스터의 용량(capacity)보다 작은 경우에 사용될 수 있다. 여러 섹션을 가진 배열을 사용하여 한 레지스터의 아래쪽 절반과 또 다른 벡터 레지스터의 위쪽 절반에 동시에 액세스할 수 있다. 이것은 레지스터 파일에 액세스하는 명령들의 실행이 오버랩되어 제1 명령의 제2 부분이 제2 명령의 제1 부분과 동시에 실행되는 경우에 유용할 수 있다. 이러한 오버랩된 실행은 더 많은 수의 명령들의 더 작은 부분들이 동시에 실행되도록 확장될 수 있다.
일부 실시 예에서, 각 액세스 블록은 벡터 레지스터들 중의 하나에 액세스할 때 각 섹션에 포함된 열의 수에서 1을 뺀 것과 같은 수의 다른 벡터 레지스터에 액세스할 때와 상이한 열의 부분에 액세스하도록 구성된다. 이들 실시 예에서, 증가된 수의 열에 의해, 증가된 수의 부분들이 있다. 그러나, 부분들의 열 또는 부분들의 행에 동시에 액세스할 수 있는 것이 바람직하다. 따라서, 더 복잡한 "트위스트" 패턴은 M 열의 세트에 대해, 이들 열의 각각이 M개의 인접한 벡터 레지스터들의 세트에서 한 번만 액세스되는 결과를 가져온다. 예를 들어, 섹션에 4개의 열(또는 부분)이 있는 경우 그 섹션 내의 각 액세스 블록은 벡터 레지스터 0-3을 통해 한 번만 이들 열의 각각에 액세스할 것이다.
일부 실시 예들에서, 제1 액세스 블록은 제1 벡터 레지스터의 제1 열에 액세스하고 제2 벡터 레지스터의 제2 열에 액세스하도록 구성되며; 제2 액세스 블록은 제1 벡터 레지스터의 제2 열에 액세스하고 제2 벡터 레지스터의 제1 열에 액세스하도록 구성된다. 이들 실시 예에서, 액세스 블록들 중 하나와 관련된 트위스트는 동일한 섹션 내의 액세스 블록들 중 또 다른 하나에 의해 수행된 트위스트와 반대이다.
일부 실시 예에서, 각 섹션은 논리적으로 N개의 열로 분할되고; N개의 열은 log2(N) 레벨을 갖는 네스트된 구조로 논리적으로 배열되며, 여기서 N은 4보다 크거나 같고 2의 정수 거듭제곱(integer power of 2)이며; 제1 레벨에서, N개의 열은 제1 레벨에 대한 적어도 한개의 열의 제1 세트와 제1 레벨에 대한 적어도 한개의 열의 제2 세트 사이에서 균등하게 분할되며; 각 부모 레벨의 적어도 한개의 열의 세트의 각각은 대응하는 자식 레벨에 대한 적어도 한개의 열의 제1 세트와 그 대응하는 자식 레벨에 대한 적어도 한개의 열의 제2 세트로 다시 동등하게 분할되고; 액세스 블록들의 각각은 각 벡터 레지스터에 대해, 한개의 열을 방문하도록 구성되고, 상기 한개의 열은 각 레벨에 대해, 소정 수의 벡터 레지스터의 절반에 대한 적어도 한개의 열의 제2 세트를 방문하기 전에 소정 수의 벡터 레지스터의 절반에 대한 적어도 한개의 열의 제1 세트를 방문하는 제약에 의해 고유하게 식별되고; 소정 수는 2X와 동일하며, 여기서 X는 각 레벨에서 상이하고 1 내지 log2(N)의 범위 내에 있다. 그러한 실시 예들에서, 단일 트위스트는 주어진 열 또는 주어진 행 내의 필요한 수의 부분들에 대한 액세스를 제공하기에 충분하지 않다. 예를 들어, 주어진 행 또는 열 내의 4개의 부분이 동시에 액세스되어야 하는 경우, 섹션을 4개의 열로 분할하고 제2 트위스트 내에 네스트된 제1 트위스트를 제공하는 것, 즉 액세스 패턴들의 필요한 어레이를 제공하는 것이 필요할 수도 있다. 실제로, 이것은 일반적으로 다수의 네스트된 트위스트로 확장되므로, 네스트된 구조를 제공할 수 있다. N개의 열(여기서 N은 4보다 크거나 같고 2의 정수 거듭제곱)을 포함하는 네스트된 구조 내에서, N 열은 log2(N) 레벨에서 논리적으로 배열될 수 있다. 제1 레벨에서, 모든 열은 제1 세트와 제2 세트 사이에서 동등하게 반으로 분할된다. 각 자식 레벨에서, 예를 들어, 제1 레벨 후의 각 레벨에서, 부모 레벨로부터의 적어도 한개의 열의 세트들의 각각은, 대응하는 자식 레벨에 대한 적어도 한개의 열의 제1 세트와 그 대응하는 자식 레벨에 대한 적어도 한개의 열의 제2 세트로 동등하게 분할된다. 이 방식으로, 네스트된 구조가 생성되며, 각 자식 레벨은 그 부모 레벨과 비교하여 열의 세트들의 수를 두 배로 만든다. 이와 같이 제1 레벨과 마지막(최상위) 레벨을 제외한 모든 레벨은 각각 그들 바로 위 및 아래에 있는 레벨에 대한 자식 레벨 및 부모 레벨 둘 다이다. 또 다른 방식으로 보면, 최상위 레벨에서 제1 레벨까지의 각 하위 레벨에서, 이전 레벨로부터의 열의 세트들이 함께 쌍을 이루므로, 각 하위 레벨에서, 세트들의 수는 모든 열이 각각 N/2개의 열을 갖는 두 개의 반쪽으로 분할될 때까지 절반이 된다. 이를 염두에 두고, 액세스 패턴들을 정의할 수 있다. 특히, 액세스 블록들의 각각은, 각 벡터 레지스터에 대해, 한개의 열을 방문하도록 구성된다. 한개의 열은, 각 레벨에 대해, 미리 결정된 수의 벡터 레지스터들의 절반에 대한 적어도 한개의 열의 제2 세트를 방문하기 전에 미리 결정된 수의 벡터 레지스터들의 절반에 대한 적어도 한개의 열의 제1 세트가 방문되는 제약에 의해 고유하게 식별된다. 따라서, M개의 상이한 열들을 방문하려면 최소한 M개의 상이한 벡터 레지스터를 방문해야 한다.
소정의 수는 2X와 같으며, 여기서 X는 레벨마다 다르며 1 - log2(N)의 범위에 있다. 따라서, 예를 들어, 3레벨을 갖는 실시 예에서, 제2 레벨에서는, 2개의 열의 2개의 제1 세트 및 2개의 열의 2개의 제2 세트가 있다. 유사한 수의 벡터 레지스터들에 대한 적어도 한개의 열의 2개의 제2 세트를 방문하기 전에 적어도 한개의 열의 2개의 제1 세트가 1, 2 또는 4개의 벡터 레지스터에 대해 방문된다.
일부 실시 예에서, 벡터 레지스터들의 세트는 2개의 섹션을 포함한다; N은 값 4를 갖는다. 2개의 섹션의 각각에서, 액세스 패턴은 4개의 레지스터마다 반복되어 2레벨의 트위스팅의 네스팅(nesting)을 초래한다.
일부 실시 예에서, 레지스터 액세스 회로는 벡터 레지스터에 저장된 데이터 요소들을 출력하기 위한 판독 액세스 회로를 구비하고; 상기 레지스터 액세스 회로는 데이터 요소들을 상기 벡터 레지스터들에 입력하기 위한 기록 액세스 회로를 구비한다. 이들 실시 예들 중 일부에서, 판독 회로 및 기록 회로는 서로 분리되어 있으며, 각각 벡터 레지스터들에 액세스할 때 서로 상이한 접속을 사용한다.
일부 실시 예에서, 판독 액세스 회로는 복수의 열의 각각에 대해 한개의 액세스 블록을 구비한다. 열의 수는 전형적으로 동시에 액세스되기를 원하는 부분들의 수를 나타낸다. 각 동시 액세스는 별도의 액세스 블록을 필요로 한다. 따라서, 일부 실시 예에서는, 벡터 레지스터들로부터 판독하기 위해 한개의 액세스 블록이 열마다 제공된다.
일부 실시 예에서, 판독 액세스 회로는 복수의 열의 각각에 대해 최대 한개의 액세스 블록을 구비한다. 이전한 설명한 바와 같이, 액세스 블록의 수는 주어진 섹션 내에서 동시에 발생하기를 원하는 행 또는 열에 대한 동시 액세스의 수를 나타낸다. 일부 실시 예에서, 최대 동시 액세스의 수는 트위스트 패턴당 하나이다. 따라서, 이들 실시 예에서는, 이것보다 더 많은 액세스 블록을 제공할 필요가 없다.
일부 실시 예들에서, 판독 액세스 회로 내의 액세스 블록들은 멀티플렉서들을 구비한다. 각 멀티플렉서에 대한 입력은 멀티플렉서가 접속되는 부분들과 대응한다. 그것에 의해, 멀티플렉서는 어느 입력이 선택되었는지를 나타내는 선택 신호에 의거하여, 멀티플렉서가 접속되는 부분들 사이에서 스위칭한다. 각 액세스 블록은 동시에 필요하지 않은 부분들에 접속하도록 구성된다. 이러한 방식으로, 원하는 결합(예를 들어, 열의 부분들 또는 행의 부분들)을 상이한 액세스 블록들에 접속함으로써, 이들 부분을 동시에 액세스할 수 있게 하는 것이 가능하다.
일부 실시 예에서, 벡터 레지스터들의 세트는 적어도 한개의 섹션을 구비하며, 여기서 각 섹션은 상이한 열을 포함하며; 상기 장치는 각 섹션에 대한 레지스터 액세스 회로를 구비하고, 각 레지스터 액세스 회로는 그 레지스터 액세스 회로와 관련된 섹션 내의 부분들에 액세스하도록 구성되며; 각 섹션에 대해 판독 액세스 회로는 판독 액세스 회로 내의 액세스 블록들의 각각으로부터의 출력들을 재배열하기 위한 재배열 회로를 구비한다. 일부 실시 예에서는, 설명한 방식으로 액세스 블록들을 접속함으로써, 부분들의 일부가 출력되는 순서가 부정확할 수 있다. 일반적으로, 그 순서는 부분들의 몇몇 쌍이 교환되도록 할 것이다. 이를 수정하기 위해, 재배열 회로가 액세스 블록들을 재정렬하기 위해 제공될 수 있다.
재배열 회로를 제공할 수 있는 여러 가지 다양한 옵션이 있다. 그러나, 일부 실시 예에서는, 재배열 회로가 크로스바 멀티플렉서이다. 종종, 이러한 멀티플렉서는 벡터 레지스터들에 인터리브되는(interleaved) 실제(Real)/이상(Imaginary)의 구성요소를 교환(swap)해야 하는 복잡한 ADD/MUL 명령들뿐만 아니라 로드 명령들에 대한 엔디안 스왑(endian swaps)을 처리하기 위해서 어쨌든 제공될 수 있다. 따라서, 이러한 멀티플렉서의 사용은 전체 회로 크기를 증가시키지 않을 수 있다.
일부 실시 예에서, 기록 액세스 회로는 복수의 열의 각각에 대해 한개의 액세스 블록을 구비한다. 판독 액세스 회로와 마찬가지로, 액세스 블록의 수는 전형적으로 주어진 섹션 내에서 동시에 액세스되기를 원하는 행 또는 열의 수를 나타낸다. 각 동시 액세스는 별도의 액세스 블록을 필요로 한다. 따라서, 일부 실시 예에서는, 벡터 레지스터들에 기록하기 위해 한개의 액세스 블록이 열마다 제공된다.
일부 실시 예들에서, 기록 액세스 회로는 복수의 열들의 각각에 대해 많아야 한개의 액세스 블록을 구비한다. 액세스 블록의 수는 벡터 레지스터들의 부분들이 동시에 액세스될 수 있는 범위를 제어한다. 일부 실시 예에서, 최대 동시 액세스의 수는 각 부분(열)마다 하나이다. 따라서, 그러한 실시 예들에서는, 열당 하나씩 더 많은 액세스 블록을 제공할 필요가 없을 수도 있다.
일부 실시 예에서, 벡터 레지스터들의 세트는 적어도 한개의 섹션을 구비하며, 여기서 각 섹션은 상이한 열을 포함하며; 상기 장치는 각 섹션에 대한 레지스터 액세스 회로를 구비하고, 각 레지스터 액세스 회로는 그 레지스터 액세스 회로와 관련된 섹션 내의 부분들에 액세스하도록 구성되며; 각 섹션에 대해 기록 액세스 회로는 기록 액세스 회로 내의 액세스 블록들의 각각에 대한 입력들을 재배열하기 위한 재배열 회로를 구비한다. 이전에 설명한 바와 같이, 판독 액세스 회로의 경우와 마찬가지로, 부분들의 몇몇의 출력이 반전될 수 있고, 레지스터들에 대한 입력 또한 반전되어야 할 수도 있다. 따라서, 사용자가 특정 순서로 입력을 제공하도록 요구하기보다는, 입력이 의도된 순서로 제공될 수 있고, 재배열 회로가 데이터가 벡터 레지스터들의 정확한 부분들에 저장되도록 부분들을 재정렬할 수 있다.
재배열 회로를 제공할 수 있는 여러 가지 다양한 옵션이 있다. 그러나, 일부 실시 예에서, 재배열 회로는 크로스바 멀티플렉서이다. 종종, 이러한 멀티플렉서는 벡터 레지스터들에 인터리브되는 실제/이상의 구성요소를 교환(swap)해야 하는 복잡한 ADD/MUL 명령들뿐만 아니라, 저장 명령들에 대한 엔디안 스왑(endian swaps)을 처리하기 위해서 어쨌든 제공될 수 있다. 따라서, 이러한 멀티플렉서의 사용은 전체 회로 크기를 증가시키지 않을 수 있다.
벡터 레지스터들에는 여러 가지 다양한 구성이 있다. 그러나, 일부 실시 예에서, 벡터 레지스터들은 128-bit 레지스터이다.
마찬가지로, 벡터 레지스터를 구현할 수 있는 여러 가지 다양한 방법이 있다. 그러나, 일부 실시 예에서, 벡터 레지스터들의 각각은 복수의 32-bit 레지스터를 구비한다.
지금부터는 특정 실시 예에 대해서 도면을 참조하여 설명할 것이다.
도 1은 벡터 명령들의 처리를 지원하는 데이터 처리 장치(2)의 예를 개략적으로 도시한 것이다. 이것은 설명의 용이함을 위해 간략화된 도면이며, 실제로는 장치가 간결함을 위해 도 1에 도시되지 않은 많은 구성 요소들을 가질 수 있음을 이해할 것이다. 장치(2)는 명령 디코더(6)에 의해 디코딩되는 명령들에 응답하여 데이터 처리를 수행하는 처리 회로(4)를 구비한다. 프로그램 명령들은 메모리 시스템(8)으로부터 페치(fetched)되고 명령 디코더에 의해 디코딩되어 아키텍처(architecture)에 의해 정의된 방식으로 명령들을 처리하는 처리 회로(4)를 제어하는 제어 신호들을 생성한다. 예를 들어, 디코더(6)는 디코딩된 명령들의 연산코드(opcode) 및 명령들의 어떤 추가 제어 필드를 해석하여 처리 회로(4)로 하여금 산술 연산, 로드/저장 연산 또는 논리 연산과 같은 연산을 수행하기 위해 적절한 하드웨어 유닛을 활성화하게 하는 제어 신호들을 생성할 수 있다.
상기 장치는 처리 회로(4)에 의해 처리될 데이터 값들을 저장하기 위한 레지스터들(10)의 세트 및 처리 회로의 동작을 구성하기 위한 제어 정보를 갖는다. 산술 또는 논리 명령에 응답하여, 처리 회로(4)는 레지스터(10)로부터 피연산자를 판독하고 명령들의 결과를 레지스터(10)에 다시 기록한다. 로드/저장 명령에 응답하여, 데이터 값은 처리 회로를 통해서 레지스터(10)와 메모리 시스템(8) 사이에서 이동한다. 메모리 시스템(8)은 주메모리뿐만 아니라 하나 이상의 캐시 레벨도 포함할 수 있다.
레지스터(10)는 단일 데이터 요소를 포함하는 스칼라 값들을 저장하기 위한 다수의 스칼라 레지스터를 구비하는 스칼라 레지스터 파일(12)을 포함한다. 명령 디코더(6) 및 처리 회로(4)에 의해 지원되는 일부 명령들은 스칼라 레지스터에 다시 기록되는 스칼라 결과를 생성하기 위해 스칼라 레지스터(12)로부터 판독된 스칼라 피연산자를 처리하는 스칼라 명령이다.
레지스터(10)는 또한 다중 데이터 요소들을 구비하는 벡터(본 명세서에서는 벡터 값이라고도 함)를 저장하기 위한 다수의 벡터 레지스터를 각각 포함하는 벡터 레지스터 파일(14)을 포함한다. 벡터 명령에 응답하여, 명령 디코더(6)는 벡터 레지스터들(14) 중 하나로부터 판독된 벡터 피연산자의 각 요소들에 대해 벡터 처리의 다수의 레인(lane)을 수행하여 스칼라 레지스터(12)에 기록될 스칼라 결과 또는 벡터 레지스터(14)에 기록될 또 다른 벡터 결과를 생성하도록 처리 회로(4)를 제어한다. 일부 벡터 명령은 하나 이상의 스칼라 피연산자로부터 벡터 결과를 생성할 수 있거나, 또는 벡터 레지스터 파일(14)로부터 판독된 벡터 피연산자들에 대한 벡터 처리의 레인들뿐만 아니라 스칼라 레지스터 파일 내의 스칼라 피연산자에 대한 추가적인 스칼라 연산도 수행할 수 있다. 따라서, 일부 명령들은 하나 이상의 소스 레지스터들 중 적어도 하나와 명령의 목적지 레지스터가 벡터 레지스터(14)이고, 하나 이상의 소스 레지스터들 중 다른 하나와 목적지 레지스터가 스칼라 레지스터(12)인 혼합 - 스칼라 벡터 명령들일 수 있다.
벡터 명령들은 또한 벡터 레지스터들(14)과 메모리 시스템(8) 내의 위치들 사이에서 데이터 값이 전달되게 하는 벡터 로드/저장 명령들을 포함한다. 로드/저장 명령들은 메모리 내의 위치들이 인접한 어드레스 범위에 대응하는 인접한 벡터 로드/저장 명령, 또는 다수의 개별 어드레스(discrete address)를 지정하는 분산/수집형 벡터 로드/저장 명령을 포함할 수 있고 이들 각각의 어드레스로부터의 데이터를 벡터 레지스터의 각 요소로 로드하거나 벡터 레지스터의 각 요소로부터의 데이터를 개별 어드레스에 저장하도록 처리 회로(4)를 제어할 수 있다.
처리 회로(4)는 상이한 데이터 요소 크기의 범위를 갖는 벡터의 처리를 지원할 수 있다. 예를 들어, 128-bit 벡터 레지스터(14)는 16개의 8-bit 데이터 요소, 8개의 16-bit 데이터 요소, 4개의 32-bit 데이터 요소 또는 2개의 64-bit 데이터 요소로 분할될 수 있다. 레지스터 뱅크(10) 내의 제어 레지스터는 사용되는 현재 데이터 요소 크기를 지정할 수 있거나, 또는 택일적으로 이것은 실행될 주어진 벡터 명령의 파라미터일 수 있다.
레지스터(10)는 또한 처리 회로(4)의 처리를 제어하기 위한 다수의 제어 레지스터를 포함한다. 예를 들어, 이들은 처리되고 있는 현재의 실행 포인트에 대응하는 명령의 어드레스를 나타내는 프로그램 카운터 어드레스를 저장하기 위한 프로그램 카운터 레지스터(16), 함수 호출(function call)의 처리 후 처리가 진행되는 리턴 어드레스를 저장하는 링크 레지스터(18), 및 스택 데이터 구조의 메모리 시스템(8) 내의 위치를 나타내는 스택 포인터 레지스터(20)를 포함할 수 있다. 이들은 저장될 수 있는 제어 정보의 유형 중 일부일 뿐이며, 실제로 아키텍처의 주어진 명령 세트는 아키텍처에 의해 정의된 것과 같이 많은 다른 제어 파라미터를 저장할 수 있다. 예를 들어, 제어 레지스터는 벡터 레지스터의 전체 폭, 또는 벡터 처리의 주어진 인스턴스(instance)에 대해 사용되고 있는 현재의 데이터 요소 크기를 지정할 수 있다.
처리 회로(4)는 상이한 클래스의 명령들을 처리하기 위한 다수의 별개의 하드웨어 블록들을 포함할 수 있다. 예를 들어, 도 1에 도시된 바와 같이, 메모리 시스템(8)과 상호 작용하는 로드/저장 명령은 전용 로드/저장 유닛(LSU)(25)에 의해 처리될 수 있지만, 산술 또는 논리 명령은 하나 이상의 다른 유닛(30)에 의해 처리될 수 있다. 이들 다른 유닛은 ALU(arithmetic logic unit))을 포함할 수 있고, ALU 자체는 곱셈을 포함하는 연산을 수행하기 위한 MAC(multiply-accumulate unit), 및 다른 종류의 ALU 연산을 처리하기 위한 또 다른 유닛으로 더 분할될 수 있다. 부동 소수점 명령을 처리하기 위해 부동 소수점 유닛을 제공할 수도 있다. 어떤 벡터 처리도 수반하지 않는 순수 스칼라 명령들은 벡터 명령들과 비교하여 별도의 하드웨어 블록으로 처리되거나, 또는 동일한 하드웨어 블록을 재사용할 수 있다.
DSP(digital signal processing)와 같은 몇몇 애플리케이션에서는, 거의 같은 수의 ALU와 로드/저장 명령이 있을 수 있으므로, MAC와 같은 일부 큰 블록들은 상당한 시간 동안 유휴 상태로 둘 수 있다. 실행 자원이 더 높은 성능을 얻기 위해 벡터 레인(vector lane)의 수로 스케일(scaled)되기 때문에 이러한 비효율성은 벡터 아키텍처에서 악화될 수 있다. 소형 프로세서(예를 들면, 단일 쟁점, 인오더(in-order) 코어)에서는 완전히 스케일 아웃된 벡터 파이프라인(fully scaled out vector pipeline)의 영역 오버헤드는 금지(prohibitive)될 수 있다. 도 2에 도시한 바와 같이, 이용가능한 실행 자원을 더 잘 활용하면서 영역 영향을 최소화하는 한 가지 방법은 명령들의 실행을 오버랩하는 것이다. 이 예에서는, 3개의 벡터 명령은 로드 명령 VLDR, 곱셈 명령 VMUL 및 시프트 명령 VSHR을 포함하며, 이들 명령들은 그들 사이에 데이터 의존도가 있더라도 동시에 실행될 수 있다. 이것은 VMUL의 요소 1이 Q1 레지스터의 전체가 아니라 Q1의 요소 1에만 의존하므로 VLUL의 실행이 완료되기 전에 VMUL의 실행이 시작될 수 있기 때문입니다. 명령들이 오버랩도록 허용함으로써, 멀티플라이어(multipliers)와 같은 비싼 블록은 더 많은 시간 활성화될 수 있다.
따라서, 마이크로 아키텍처 구현이 벡터 명령들의 오버랩 실행을 가능하게 하는 것이 바람직할 수 있다. 그러나 아키텍처가 일정한 양의 명령 오버랩이 있다고 가정하면, 이것은 마이크로 아키텍처 구현이 실제로 아키텍처에 의해 가정된 명령 오버랩의 양과 일치하는 경우 높은 효율성을 제공할 수 있지만, 상이한 오버랩을 사용하거나 전혀 오버랩하지 않는 상이한 마이크로 아키텍처로 스케일될 경우 문제가 발생할 수 있다.
대신에, 아키텍처는 도 3의 예에 나타낸 것처럼 다양한 상이한 오버랩을 지원할 수 있다. 벡터 명령의 실행은 "비트(beats)"라고 불리는 부분으로 분할되며, 각 비트(beat)는 소정의 크기의 벡터의 일부의 처리에 대응한다. 비트(beat)는 완전히 실행되거나 전혀 실행되지 않으며, 부분적으로는 실행될 수 없는 벡터 명령의 원자 부분(atomic part)이다. 1비트(beat)에서 처리된 벡터의 부분의 크기는 아키텍처에 의해 정의되며, 벡터의 임의 부분(fraction)일 수 있다. 도 3의 예에서, 비트(beat)는 벡터 폭의 1/4에 해당하는 처리로서 정의되므로, 벡터 명령당 4비트(beats)가 있다. 분명히, 이것은 단지 한개의 예일 뿐이며 다른 아키텍처들은 상이한 비트(beats)의 수, 예를 들어, 2 또는 8을 사용할 수 있다. 1비트(beat)에 해당하는 벡터의 부분은 처리 중인 벡터의 데이터 요소 크기보다 크거나 작을 수 있다. 따라서, 요소 크기가 구현(implementation)마다 다르거나 런타임 시 상이한 명령들 간에 다르더라도, 비트(beat)는 벡터 처리의 일정한 고정된 폭이다. 만약 1비트(beat)에서 처리되고 있는 벡터의 부분이 다중 데이터 요소들을 포함한다면, 각각의 요소들 사이의 경계에서 캐리 신호들(carry signals)을 디스에이블하여 각 요소가 독립적으로 처리되도록 보장할 수 있다. 만약 한 비트(beat)에서 처리된 벡터의 부분이 요소의 부분에만 해당하고 하드웨어가 여러 비트(beats)를 병렬로 계산하기에 불충분하면, 한 비트(beat) 동안 생성되는 캐리 출력은, 2비트(beat)의 결과가 함께 데이터 요소를 형성하도록 다음 처리 비트(beat)에 대한 캐리 입력으로서 입력될 수 있다.
도 3에 나타낸 바와 같이, 처리 회로(4)의 상이한 마이크로 아키텍처 구현은 추상적 아키텍처 클럭(abstract architectural clock)의 한 "틱(tick)"에서 상이한 수의 비트(beats)를 실행할 수 있다. 여기서, "틱"은 아키텍처 상태 발단(architectural state advancement)의 유닛에 대응한다(예를 들면, 간단한 아키텍처에서 각 틱은 다음 명령을 가리키도록 프로그램 카운터를 갱신하는 것을 포함하여, 명령 실행과 관련된 모든 아키텍처 상태를 갱신하는 인스턴스에 대응할 수 있다). 파이프라이닝(pipelining)과 같은 공지된 마이크로 아키텍처 기법은 단일 틱 (tick)이 하드웨어 레벨에서 수행하기 위해 다중 클럭 사이클을 필요로 할 수 있고, 실제로는 하드웨어 레벨에서 단일 클럭 사이클이 다중 명령의 여러 개의 부분을 처리할 수 있다는 것을 당업자는 이해할 것이다. 그러나, 그러한 마이크로 아키텍처 기술은 아키텍처 레벨에서는 틱이 원자(atomic)이기 때문에 소프트웨어에는 보이지 않는다. 일관성을 위해 이러한 마이크로 아키텍처는 이 개시에 대한 추가 설명 중에는 무시된다.
도 3의 하부 예에 도시된 바와 같이, 일부 구현은 한개의 틱 내에서 병렬로 모든 비트(beats)를 처리하기 위한 충분한 하드웨어 자원을 제공함으로써, 동일한 틱(tick)으로 벡터 명령의 4개의 비트(beats) 모두를 스케줄링할 수 있다. 이것은 고성능 구현에 적합할 수 있다. 이 경우, 전체 명령을 한개의 틱으로 완료할 수 있기 때문에 아키텍처 레벨에서 명령들 간의 오버랩이 필요하지 않다.
반면에, 더 면적 면에서 효율적인 구현은 틱당 2개의 비트(beasts)만을 처리할 수 있는 더 좁은 처리 유닛을 제공할 수 있으며, 도 3의 중간 예에 도시된 바와 같이, 명령 실행은 제1 명령의 제3 또는 제4 비트(beats)와 병렬로 수행되는 제2 벡터 명령의 제1 및 제2 비트(beats)와 오버랩될 수 있고, 여기서 이들 명령들은 처리 회로 내의 상이한 실행 유닛상에서 실행된다(예를 들어, 도 3에서, 제1 명령은 로드/저장 유닛(25)을 사용하여 실행된 로드 명령이고 제2 명령은 다른 유닛들(30) 중 하나를 형성하는 MAC 유닛을 사용하여 실행된 곱셈 누적 명령이다).
훨씬 더 에너지/면적 면에서 효율적인 구현은 더 좁고 한 번에 한 비트(beat)만 처리할 수 있는 하드웨어 유닛을 제공할 수 있으며, 이 경우 한개의 비트(beat)가 틱마다 처리될 수 있으며, 도 3의 상단 예에 나타낸 것과 같이 명령 실행이 오버랩되고 한 비트(beat)씩 엇갈리게 된다(이것은 상기의 도 2에 도시된 예와 같다).
도 3에 도시된 오버랩은 단지 일부 예일 뿐이며, 다른 구현도 가능하다는 것을 이해할 것이다. 예를 들어, 처리 회로(4)의 일부 구현은 동일한 틱에서 병렬로 다중 명령들의 이중 발행을 지원할 수 있으므로, 명령들의 더 큰 스루풋(throughput)이 있다. 이 경우, 한개의 사이클에서 함께 시작하는 두 개 이상의 벡터 명령들은 다음 사이클에서 시작하는 두 개 이상의 벡터 명령과 오버랩되는 일부 비트(beats)를 가질 수 있다.
상이한 성능 포인트(performance points)로 스케일(scale)하도록 구현마다 오버랩의 양을 변화시키는 것뿐만 아니라, 벡터 명령들 간의 오버랩의 양도 프로그램 내의 벡터 명령들의 실행의 상이한 인스턴스들 사이에서 런타임 시 변경할 수 있다. 따라서, 처리 회로(4)에는 주어진 명령이 이전 명령에 대해 실행되는 타이밍을 제어하기 위해 도 1에 도시된 것과 같은 비트(beat) 제어 회로(30)가 제공될 수 있다. 이것은 명령에 이용 가능한 자원에 의존하거나, 또는 구현하기 더 어려운 특정 코너 케이스에서 명령들을 오버랩하지 않도록 선택할 자유를 마이크로 아키텍처에 준다. 예를 들어, 동일한 자원을 필요로 하는 주어진 유형(예를 들어, 곱셉 누적)의 연속적인(back to back) 명령들이 있으며 이용 가능한 모든 MAC 또는 ALU 자원이 이미 또 다른 명령에 의해 사용되고 있으면, 다음 명령의 실행을 시작하기에 충분한 여유 자원(free resources)이 없을 수도 있으므로 오버랩하는 것보다는, 제2 명령의 발행이 제1 명령이 완료할 때까지 대기할 수 있다.
도 4에 도시된 바와 같이, 두 개의 벡터 명령들 사이의 오버랩은 개재(intervening) 스칼라 명령이 있는 경우에도 방지될 수 있다. 이것은 스칼라 명령이 벡터 명령의 마지막 비트(beat)의 결과에 의존할 수 있고 제2 벡터 명령이 그것의 모든 비트(beats)에서 스칼라 결과에 의존할 수 있으므로, 벡터 명령과 스칼라 명령이 오버랩하는 것을 방지하는 것이 더 안전할 수 있기 때문이다.
상술한 바와 같이 오버랩이 허용되는 경우, 동시에 실행되는 다중 명령들이 있을 수 있다. 프로그램 카운터(16)는 아직 완료되어야 할 적어도 한개의 비트(beat)를 갖는 가장 오래된 미완료 명령의 어드레스를 추적할 수 있다. 벡터 명령이 그것의 최종 비트(beat)를 완료하면 프로그램 카운터가 증가할 수 있다.
표준 벡터 로드/저장 동작 및 분산/수집형의 벡터 로드/저장 동작을 수행하는 것 이외에, LSU(25)는 지정된 벡터들의 데이터 요소들이 메모리 시스템(8)과 메모리 레지스터들의 세트(14) 사이에서 이동함에 따라 재배열 동작을 수행하도록 구성될 수 있고, 이는 벡터들의 데이터 요소들이 그들에 대한 추가 벡터 연산의 효율적인 수행을 용이하게 하는 방식으로 벡터 레지스터들 내에 배열되는 것을 보장하는데 도움을 줄 수 있다. 데이터 요소들은 데이터 구조를 형성하는 것으로 간주될 수 있다. 예를 들어, 오디오 데이터를 고려하면, 데이터 구조는 상이한 오디오 채널과 관련된 다수의 데이터 요소를 포함할 수 있다. 예를 들어, 간단한 스테레오 오디오를 고려하면, 각 데이터 구조는 좌측 채널에 대한 데이터 요소 및 우측 채널에 대한 데이터 요소를 포함할 수 있다. 유사하게, 이미지 데이터를 고려할 때, 데이터 구조는 적색, 녹색, 청색 및 알파(RGBA) 데이터 요소 구성소자들과 같은 여러 개의 구성소자를 구비할 수 있다. 데이터 요소들이 메모리 시스템 내에서 특정 방식으로 구성되는 경우가 종종 있지만, 벡터 레지스터들 내에서 이들 데이터 요소를 다르게 구성하는 것이 바람직하다. 예를 들어, 각 데이터 구조의 데이터 요소들은 메모리에 연속적으로 배열될 수 있지만, 벡터 레지스터들 내에서 다중 데이터 구조로부터의 대응하는 데이터 요소들이 각 벡터 레지스터 내에 연속적으로 배열되도록 개개의 데이터 요소를 재배열하는 것이 바람직할 수 있다. 따라서, 앞서 설명된 이미지 데이터 예를 고려하면, 한개의 벡터 레지스터 내에 인접하여 배치될 다수의 데이터 구조의 R 성분과 관련된 일련의 데이터 요소들, 또 다른 벡터 레지스터 내에 인접하여 배열될 G 성분과 관련된 일련의 데이터 요소들 등을 준비하는 것이 바람직할 수 있다. 이러한 예에서, 벡터 로드 동작 중에 액세스된 다수의 데이터 구조 내의 데이터 요소들이 메모리로부터 벡터 레지스터들로 이동함에 따라 디인터리브될 수 있고, 벡터 저장 동작 중에 벡터 레지스터들로부터 메모리에 다시 저장됨에 따라 인터리브될 수 있다.
LSU(25) 내에서 이러한 재배열 동작을 지원함으로써, 이것은, 데이터 요소들을 다음의 처리에 필요한 방식으로 배열하기 위해서 벡터 레지스터들 내에 저장한 후에는 데이터 요소들에 대한 다수의 추가 조작을 수행하기 위한 추가 명령을 실행할 필요가 없으므로, 성능을 상당히 향상시킬 수 있다. 그러나, 그러한 벡터 로드 또는 저장 명령에 의해 요구되는 계산량은 상당히 크며, 특정 구현 예에서는 명령이 여러 사이클 동안 멈추는(stall) 것을 의미할 수도 있다. 이로 인해 성능 문제가 발생할 수 있으며, 이는 메모리와 산술 연산의 오버랩 실행을 허용하는 시스템에서 더 악화될 수 있다.
후술하는 실시 예들에 의하면, 한개의 모놀리식(monolithic) 로드 또는 저장 명령을 사용하는 대신에, 재배열 동작은 다중 명령들로 효과적으로 분할되므로, 재배열 명령들의 그룹을 형성하는 복수의 재배열 명령들의 실행 결과로서 재배열 동작이 수행된다. 그룹 내의 각 재배열 명령은 그룹 내의 각 다른 재배열 명령에 의해 정의된 데이터 요소 액세스 패턴과 상이한 데이터 요소 액세스 패턴을 정의한다. 재배열 액세스 패턴은 메모리에서 액세스될 데이터 요소들의 어드레스와 평가될 벡터 레지스터들의 특정 부분 둘 다를 식별하는데 사용된다.
도 5는 일 실시 예에 따른 벡터 레지스터들의 세트(14)를 도시한 것이다. 이 실시 예에서, 8개의 벡터 레지스터 Q0 내지 Q7가 제공되고, 도 5에 도시된 실시 예에서는, 각 벡터 레지스터는 여러 개의 스칼라 레지스터들로 형성된다. 따라서, 벡터 레지스터 QO(50)는 4개의 스칼라 레지스터들 55, 60, 65, 70으로 형성된다. 스칼라 레지스터들은 독립적으로 액세스될 수 있으며, 실제로 원한다면 스칼라 레지스터들 내의 개개의 부분이 액세스될 수 있다. 도 5의 실시 예에서, 각 벡터 레지스터는 여러 개의 스칼라 레지스터로 구성되지만, 이것은 요구사항은 아니고, 그렇지만 벡터 레지스터들이 구성되며, 벡터 레지스터 세트는 벡터 레지스터들 내의 개개의 부분이 다른 부분과 관계없이 갱신될 수 있도록 배열된다.
각 벡터 레지스터 내에 저장된 데이터 요소들의 수는 데이터 요소들의 크기에 의존할 것이며, 일 실시 예에서는 여러 개의 상이한 크기의 데이터 요소들이 지원된다. 예를 들어, 일 실시 예에서, 벡터 레지스터는 길이가 128비트(bits)이고 시스템에 의해 처리되는 데이터 요소들은 64-bit 데이터 요소, 32-bit 데이터 요소, 16-bit 데이터 요소 또는 8-bit 데이터 요소일 수 있다. 이것은 단지 예시일 뿐이며, 다른 실시 예에서는 벡터 레지스터의 크기 및 지원되는 데이터 요소의 크기가 다를 수 있다는 것을 이해할 것이다. 도 5의 특정 예를 고려할 때, 스칼라 레지스터들 55, 60, 65, 70의 각각은 32-bit 레지스터들이며, 따라서 데이터 요소 크기가 32비트(bits) 이하일 때, 각 스칼라 레지스터는 하나 이상의 데이터 요소들을 저장할 것이다.
후술하는 바와 같이, 벡터 레지스터들의 세트(14)는 논리적으로 다수의 섹션, 예를 들어 도 5에 도시된 제1 섹션(75) 및 제2 섹션(80)으로 구성되는 것으로 간주될 수 있다. 벡터 레지스터들은 논리적으로 도 5의 2개의 섹션으로 분할된 것으로 도시되어 있지만, 그들은 원하는 경우 2개보다 많은 섹션으로 분할될 수 있다. 나중에 더 자세히 논의되는 것처럼, 그룹 내의 개개의 재배열 명령에 대한 액세스 패턴의 적절한 선택에 의해, 그룹 내의 각 재배열 명령의 실행 중에, 메모리 내의 인접한 단어들에 대해 개별 액세스가 수행되도록 배열될 수 있고, 이들 개별 액세스가 벡터 레지스터들 내의 상이한 섹션 75, 80에 일어나도록 배열될 수 있다. 이것은 그러한 메모리 액세스 명령들과 산술 명령들의 오버랩을 용이하게 한다. 예를 들어, 그러한 한개의 재배열 명령이 제2 섹션(80)에 액세스하고 있는 동안, 제1 섹션(75)에 액세스하는 산술 명령이 실행될 수 있다.
도 6은 일 실시 예에 따라 재배열 명령들의 그룹이 디인터리브(de-interleave) 동작을 수행하도록 어떻게 배열될 수 있는지를 도시하는 도면이다. 특히, 2개의 벡터 로드(VLD) 명령은 집합적으로 실행될 때 디인터리브 동작을 수행하는 명령들의 그룹을 형성하다. 이들 VLD 명령은 VLD2n 명령이며, "2"는 2의 스트라이드(stride), 즉 각 데이터 구조에 2개의 데이터 요소가 있다는 것을 나타낸다. "VLD20" 명령 내의 "0"은 벡터 로드 명령이 그룹 내의 제1 명령이라는 것을 식별하고, 따라서 특정 액세스 패턴 식별자를 효과적으로 식별한다. 마찬가지로 "VLD21" 명령은 그룹 내의 제2 명령이며, "1"은 효과적으로 상이한 액세스 패턴 식별자를 제공하다.
도 6으로부터 알 수 있듯이, 두 명령은 모두 32-bit 데이터 요소에 대하여 작동하는 것을 식별하고, 동일한 두 벡터 레지스터(이 예에서는 QO 및 Q1)를 식별하다. 베이스 어드레스는 또한 스칼라 레지스터 Rn의 콘텐츠로 지정된다. 제2 명령의 종료시에 "!"은 그 명령의 실행에 의해 레지스터 Rn 내의 베이스 어드레스도 갱신되는 것을 식별한다.
도 6에 도시된 실시 예에 따르면, 두 벡터 로드 명령들과 관련된 액세스 패턴에 의해 2개의 64-bit 인접한 메모리 액세스가 수행되는 것으로 가정한다. 따라서, 메모리 단어 크기가 32비트(bits)라고 가정하면, 제1 액세스는 2개의 인접한 32-bit 메모리 단어들에 액세스할 것이고, 제2 액세스는 추가 2개의 인접한 32-bit 메모리 단어들에 액세스할 것이다. 데이터 요소 크기도 32비트(bits)이기 때문에, 이것은 각 액세스가 두 개의 인접한 32-bit 데이터 요소들에 액세스할 것이라는 것을 의미한다.
도 6에 도시된 특정 액세스 패턴에 따라, 제1 VLD2n 명령의 실행은 데이터 구조(105)가 LSU(25)의 액세스/재배열 동작(130)에 의해 그 제1 명령의 제1 액세스를 처리하는 동안 액세스되게 하고, 그 다음에 데이터 구조(120)가 그 제1 명령의 제2 액세스 중에 액세스되게 한다. 액세스 패턴은 또한 제1 데이터 구조(105)의 2개의 데이터 요소들(이 예에서는, 데이터 구조들이 좌측 및 우측 오디오 성분으로 형성된 오디오 데이터를 나타내는 것으로 가정한다)이 도 6에서의 레지스터 콘텐트(140)로 나타낸 것처럼, 2개의 벡터 레지스터 Q0 및 Q1 내의 제1 레인(lane)으로 로드되게 할 것이다(여기서 "x"는 이들 요소에 대해 어떤 갱신도 수행되지 않고 이전 값이 보존되는 것을 나타냄). 이하의 설명에서, 벡터 레지스터 내의 산술 연산을 수행할 때, 각 레인의 데이터 요소들 내에서 병렬로 연산이 수행될 수 있기 때문에, 벡터 레지스터 내의 각 데이터 요소 위치는 레인(lane)이라고 지칭될 것이다.
레지스터 콘텐트(145)에 의해 도시된 바와 같이, 일단 제1 명령의 제2 액세스가 수행되었으면, 데이터 구조(120)의 데이터 요소들은 벡터 레지스터들의 최종 레인 내에 위치된다. 앞서 언급된 도 5로부터 명백한 것처럼, 제1 벡터 로드 명령의 제1 액세스는 벡터 레지스터(14)의 제1 섹션(75)에 액세스하는 반면, 제2 액세스는 제2 섹션(80)에 액세스한다.
유사하게, 도 6에 도시된 바와 같이, 제2 벡터 로드 명령을 실행한 결과로서 로드/저장 유닛(130)의 액세스/재배열 동작이 수행될 때, 제1 액세스는 데이터 구조(110)에 액세스하여, 레지스터 콘텐트(150)로 나타낸 것처럼 제2 레인 내에 2개의 데이터 요소를 저장하고, 그 다음에 제2 액세스는 데이터 구조(115)에 액세스하여 벡터 레지스터 콘텐트(155)로 나타낸 것처럼 제3 레인 내에 데이터 요소들을 저장한다. 다시, 제1 액세스는 벡터 레지스터들의 제1 섹션(75)에 액세스하는 반면, 제2 액세스는 제2 섹션(80)을 액세스하는 것으로 보여질 수 있다.
도 3을 참조하여 앞서 논의된 틱당 4비트(beats) 접근법을 채택하고, 적어도 쿼드 뱅크된(quad banked) 메모리 시스템인 메모리 시스템을 가정할 때, 이러한 액세스 패턴은 각 비트(beat)와 연관된 어드레스들이 상이한 메모리 뱅크들에 액세스할 것이기 때문에 각 명령의 제1 및 제2 액세스가 동시에 발생하도록 허용할 것이다. 대신 도 3을 참조하여 이전에도 설명한 바와 같이 틱당 2비트(beat) 구성이 사용되는 경우, 각 명령에 대한 제1 및 제2 액세스가 순차적으로 발생할 수 있다. 메모리가 적어도 2개의 메모리 뱅크를 구비하는 경우, 도 6에 도시된 패턴의 사용은 각 액세스 중에 2개의 메모리 뱅크가 액세스되도록 허용함으로써, 성능을 향상시킬 것이다.
재배열 명령들의 그룹을 집합적으로 형성하는 재배열 명령들의 각각과 연관된 액세스 패턴들은 다양한 형태를 취할 수 있다. 앞서 언급한 바와 같이, 그룹 내의 각 재배열 명령은 그룹 내의 각 다른 재배열 명령에 의해 정의된 데이터 요소 액세스 패턴과 상이한 데이터 요소 액세스 패턴을 정의할 것이며, 일 실시 예에서 이것은 그룹 내의 각 재배열 명령의 실행 중에 상이한 데이터 요소들이 메모리와 다중 벡터 레지스터들 사이에서 이동되는 것을 보장한다. 또한, 각 재배열 명령의 수행 중에 하나보다 많은 벡터 레지스터가 액세스되도록 액세스 패턴이 정의된다. 일 실시 예에서, 액세스 패턴은, 각 재배열 명령의 실행에 의해 적어도 한개의 데이터 요소가 재배열 동작에 수반되는 다중 벡터 레지스터의 각각에서 액세스되도록 하는 것이다. 이러한 접근법은 액세스 패턴을 더 간단하게 구현할 수 있는 것으로 밝혀졌다.
도 7a 내지 도 7g는 다양한 상이한 데이터 요소 크기에 대해, 그룹 내의 상이한 재배열 명령들의 각각과 관련될 수 있는 액세스 패턴의 다양한 상이한 예들을 도시한 것이다. 이들은 단지 예시적인 것이며, 많은 상이한 액세스 패턴도 사용될 수 있다는 것을 이해할 것이다. 이들 도면은 그룹 내의 각 재배열 명령의 실행 중에 벡터 레지스터들의 어느 부분이 액세스되는지에 패턴이 어떻게 영향을 미치는지를 보여주고, 또 어느 메모리 어드레스가 액세스되는지를 나타낸다. 도 7a는 32-bit 데이터 요소들 및 액세스 벡터 레지스터들 Q0 및 Q1에서 동작하는 그룹 내에서 2개의 벡터 로드 명령을 실행할 때 채택된 벡터 레지스터 액세스 패턴을 도시한 것으로, 이들 패턴은 도 6에 개략적으로 도시된 것들에 대응한다. 특히, 액세스 패턴(200)은 4개의 부분(205, 210, 215, 220)으로 구성된다. 제1 벡터 로드 명령이 실행될 때, 제1 액세스는, 블록 205로 나타낸 것처럼, 베이스 어드레스에 대한 메모리 오프셋 0 및 4에서의 어드레스에 액세스하고, 그 콘텐츠를 스칼라 레지스터 S0 및 S0에 저장한다. 그 다음에 제1 명령의 제2 액세스는, 블록 210으로 나타낸 것처럼, 오프셋 24 및 28에서 메모리에 액세스하고, 스칼라 레지스터 S3 및 S7에 그 콘텐츠를 저장한다. 비록 도 7a에서 (벡터 레지스터 Q0 및 Q1을 구성하는) SO 내지 S7이 액세스되지만, 액세스된 스칼라 레지스터들은 재배열 명령들에 의해 지정된 벡터 레지스터들에 의존한다는 것을 이해할 것이다. 또 다른 예에서는, 재배열 명령들은, 예를 들어, 목적지 벡터 레지스터들로서 Q1 및 Q2를 지정할 수 있으며, 그 경우 스칼라 레지스터 S4 내지 S11가 액세스될 것이다.
앞서 논의된 도 6으로부터 명백한 것처럼, 제1 명령의 실행은 베이스 레지스터 콘텐츠가 갱신되게 하지 않으므로, 제2 명령이 실행될 때 오프셋은 여전히 동일한 베이스 어드레스에 대해서 계산된다. 따라서, 제2 명령의 제1 액세스는, 블록 215으로 나타낸 것처럼, 검색된 데이터 요소들이 스칼라 레지스터 S1 및 S5에 저장되어 있는 상태에서, 베이스 어드레스에 대한 메모리 오프셋 8 및 12에서 어드레스들에 액세스할 것이다. 유사하게, 블록 220으로 나타낸 것처럼, 콘텐츠가 스칼라 레지스터 S2 및 S6에 저장되어 있는 상태에서 제2 액세스는 메모리가 오프셋 16 및 20에서 액세스되게 할 것이다. 도 5의 이전 논의로부터 명백한 것처럼, 설명을 용이하게 하기 위해 스칼라 레지스터 번호를 참조하지만, 이들 스칼라 레지스터는 효과적으로 2개의 벡터 레지스터 Q0 및 Q1를 형성하므로, 스칼라 레지스터 번호는 단지 벡터 레지스터들의 상이한 부분을 식별하는 것으로 이해될 것이다.
도 7b는 벡터 레지스터 Q0 내지 Q3에 액세스하는 4개의 벡터 로드 명령의 그룹이 (즉, 예를 들어 앞서 설명한 RGBA 예의 경우와 같이, 각 데이터 구조가 4개의 데이터 요소를 포함하는) 4의 스트라이드(stride)로 벡터 로딩을 구현하는데 사용될 때 사용될 수 있는 또 다른 일련의 벡터 레지스터 액세스 패턴(225)을 도시한 것이다. 다시, 데이터 요소들은 크기가 32비트(bits)라고 가정하다. 제1 명령이 실행되면, 그것은 박스 230, 235로 나타낸 2개의 액세스를 수행하여, 베이스 어드레스에 대한 0 및 4의 오프셋으로 2개의 데이터 요소를 검색하고 그들을 스칼라 레지스터 위치 S0 및 S4에 저장하며, 그 다음에 제2 액세스에서는 베이스 어드레스에 대한 메모리 오프셋 40 및 44에서 2개의 데이터 요소에 액세스하고 그들을 스칼라 레지스터들 S10 및 S14에 저장하다. 제2 명령이 실행되면, 그것은 블록 240 및 245로 나타낸 액세스를 수행한다. 마찬가지로, 제3 명령이 실행되면, 그것은 블록 250, 255로 나타낸 2개의 액세스를 수행한다. 마지막으로, 제4 명령이 실행되면, 그것은 블록 260 및 265으로 나타낸 2개의 액세스를 수행한다.
집합적으로 모든 액세스 패턴이 사용된다면, 어떤 액세스 패턴이 그룹 내의 어떤 명령과 관련되는지는 중요하지 않다는 것이 인식될 것이다. 이 의견은 도 7a 내지 도 7g의 모든 예에 동일하게 적용된다.
VLD2n 명령들에 대해 도 6을 참조하여 앞서 설명한 바와 같은 표현을 사용하면, 도 7b에 개략적으로 나타낸 액세스들의 패턴을 수행하기 위해 사용된 4개의 벡터 로드 명령은 다음과 같은 형태를 취할 수 있다:
VLD40.32 {Q0-Q3}, [Rn]
VLD41.32 {Q0-Q3}, [Rn]
VLD42.32 {Q0-Q3}, [Rn]
VLD43.32 {Q0-Q3}, [Rn]!
도 7b로부터 명백한 것처럼, 각각의 VLD4n 명령이 실행될 때, 그것은 도 7b에 도시된 패턴에 따라 4개의 벡터 레지스터의 1/4에 기록된다. 도 7a 및 도 7b의 리뷰로부터 명백한 것처럼, VLD2n 및 VLD4n 명령들의 그룹의 모두에 대해, 각각의 명령은 2개의 64-bit 인접한 메모리 액세스를 수행한다. 또한, 어드레스 비트(address bits)[3:2]는 단일 명령에 의해 수행되는 모든 단어 액세스마다 상이하며, 이는 메모리 서브 시스템이 다중 메모리 뱅크를 채택할 때 메모리 서브 시스템에 더 효율적으로 액세스하도록 해준다. 또한, 메모리 및 레지스터 액세스 패턴은 모두 비트 로직(bit-wise logic)으로 쉽게 계산될 수 있도록 설계된다. 이것은 VLD4n 명령들의 그룹을 참조하여 예로서 도 8 및 9에서 나중에 설명될 것이다.
각 명령이, 실행될 때, 벡터 레지스터 파일의 각 절반에 64비트(bits)를 저장하는 것으로도 보인다. 이것은, 이중 비트 아키텍처(dual beat architecture)에서는 레지스터 파일의 중심선을 가로지르는 액세스가 없기 때문에, 명령들은 추가의 의존도 체킹 또는 스톨(extra dependency checking or stalling) 없이 이전에 기술된 메모리와 산술 연산의 오버랩된 실행과 호환 가능하다. 이러한 요소들은 명령을 쉽게 구현하게 해주며, 메모리 서브 시스템의 효율적인 사용을 허용하다.
도 7c 및 7d는 데이터 요소 크기가 32비트(bits)가 아닌 16비트(bits)일 때, VLD2n 및 VLD4n 명령의 그룹에 대해 사용될 수 있는 등가 액세스 패턴 300, 310을 도시한 것이다. 도 7c를 고려하면, 액세스 패턴 300은 제1 VLD 명령의 2개의 액세스에 의해 액세스되는 블록 302, 304, 및 제2 VLD 명령의 2개의 액세스에 의해 액세스되는 블록 306, 308으로 구성된다.
유사하게, 도 7d를 고려하면, 액세스 패턴 310은 제1 명령의 2개의 액세스와 관련된 블록 312, 314, 다음 명령의 2개의 액세스와 관련된 블록 316, 318, 제3 명령의 2개의 액세스와 관련된 블록 320, 322, 및 제4 명령의 2개의 액세스와 관련된 블록 324, 326으로 구성된다.
도 7c 및 도 7d와 도 7a 및 도 7b와의 비교로부터 분명한 것처럼, 데이터 요소 크기가 도 7a 및 도 7b의 예에서 32비트(bits)와는 대조적으로, 도 7c 및 도 7d의 예에서는 16비트(bits)이므로, 베이스 어드레스 오프셋은 도 7a 및 도 7b의 각각의 블록 내에서 4씩 증가하는 것과는 대조적으로, 도 7c 및 7d의 각각의 블록에서 2씩 증가한다.
앞의 예에서 각 명령은 두 개의 액세스를 수행하지만, 원하는 경우 2개보다 많은 액세스가 각 명령에 대해 수행될 수 있다. 예를 들어, 도 7e는 일련의 대안적인 액세스 패턴(330)을 나타내며, 여기서 4개의 액세스(각각 32-bit 인접한 액세스임)는 각 명령과 관련되어 있다. 다시, 액세스들은 다중 메모리 뱅크들 사이에서 나눠질 수 있다.
도 7f 및 7g는 데이터 요소 크기가 8비트(bits)일 때 VLD2n 및 VLD4n 명령에 대해 채택될 수 있는 예시적인 액세스 패턴 400, 410을 도시한 것이다. 따라서, 도 7f를 고려하면, 제1 VLD2n 명령은 제1 액세스 중에 블록 402가 액세스하게 하고, 제2 액세스 중에 블록 404가 액세스되게 하며, 제2 VLD2n 명령은 제1 액세스 중에 블록 406이 액세스되게 하고 제2 액세스 중에 블록 408이 액세스되게 한다.
도 7g는 4개의 VLD4n 명령들의 그룹에 대한 일련의 액세스 패턴(410)을 나타낸다. 제1 VLD4n 명령은 블록 412가 제1 액세스 중에 액세스되게 하고, 블록 414가 제2 액세스 중에 액세스되게 하며, 제2 VLD4n 명령은 제1 액세스 중에 블록 416이 액세스되게 하고, 제2 액세스 중에 블록 418이 액세스되게 한다. 유사하게, 제3 VLD4n 명령은 제1 액세스 중에 블록 420이 액세스되게 하고, 제2 액세스 중에 블록 422가 액세스되게 하며, 최종 VLD4n 명령은 제1 액세스 중에 블록 424가 액세스되게 하고, 제2 액세스 중에 블록 426이 액세스되게 한다. 앞에서 언급했듯이, 원하는 경우 어느 액세스 패턴이 그룹 내의 어느 명령과 관련되어 있는지는 달라질 수 있다.
도 7a 내지도 7g는 벡터 로드 명령들의 그룹과 관련하여 사용된 액세스 패턴들을 도시하지만, 동일한 액세스 패턴이 벡터 저장 명령들의 대응하는 그룹들에 대해 사용될 수 있으며, 유일한 차이점은 데이터가 메모리로부터 벡터 레지스터들로 이동하는 것이 아니라, 벡터 레지스터들로부터 메모리로 다시 이동된다는 것이다.
도 8은 특정 명령에 의해 지정된 패턴 식별자 및 명령의 어느 비트(beat)가 현재 처리되고 있는지를 식별하는 비트(beat) 식별자 비트(bits)를 사용하여 메모리 내에 어드레스 워드 오프셋이 어떻게 생성될 수 있는지와, 그에 따라 패턴을 통해서 어디까지 프로세스가 도달했는지를 나타내는 도면이다. 도시된 로직은 도 7b에 도시된 메모리 액세스 패턴을 생성하는데 사용되는 VLD4n 명령의 그룹에 사용된다. 2 bit 패턴 ID 값(505)은 비트(beat) ID의 bit 1과 함께, 가산기(510)의 입력에 제공된다. 비트(beat) ID의 bit 0은 경로 502를 통해 출력되고, 비트(beat) ID의 beat 1은 경로 500을 통해 출력된다. 가산기는 경로 515를 통해 출력을 생성한다. 총체적으로, 출력 500, 515, 520은 도 8에 도시된 어드레스 워드 오프셋을 형성하므로, 4 bit 어드레스 워드 오프셋을 생성한다. 그 다음에 그 값에 4를 곱하여 바이트 어드레스(byte address)를 얻는데, 이것은 액세스할 실제 메모리 어드레스를 식별하기 위해서 레지스터 Rn 내의 베이스 어드레스에 추가된다.
도 7b의 블록 230 및 235로 나타낸 특정 패턴의 제1 및 제2 액세스를 예로서 고려하면, 제1 32-bit 비트(beat)에 대해서는 생성된 어드레스 워드 오프셋은 0000이다(패턴 ID는 이 패턴에 대해서 00이라고 가정하고 있다). 다음의 비트(beat)에 대해서는, 0에서 1로 변경되는 비트(beat) ID bit 0으로 인해 오프셋이 0001이다. 다음의 비트(beat)에 대해서는, 비트(beat) ID bit 0은 0으로 돌아가지만 비트(beat) ID bit 1은 1의 값으로 변경된다. 이것은 어드레스 워드 오프셋이 1010이 되게 하는데, 이것은 4로 곱해질 때 도 7b의 블록 235에서 첫 번째 단어 액세스에 대해 도시된 것처럼 40의 바이트 어드레스 오프셋을 제공한다. 그 다음, 최종 비트(beat)에 대해서는, 비트(beat) ID bit 0은 1011의 어드레스 워드 오프셋을 제공하는 1로 변경되어, 블록 235에서 최종 워드 액세스와 관련된 44의 바이트 어드레스 오프셋을 식별한다.
도 8의 어드레스 생성 로직의 상기 설명은 32-bit 데이터 요소들이 동작하는 도 7b의 예를 참조하고 있지만, 동일한 어드레스 생성 로직은, 도 7d 또는 도 7g의 액세스 패턴을 사용할 때 상이한 크기의 데이터 요소들, 예를 들어 16-bit 또는 8-bit 데이터 요소들에서 동작하는 VLD4n 명령에 사용될 수 있다. 그러나, 도 7e의 대안적인 액세스 패턴이 사용되었으면, 어드레스 생성 로직은 이에 따라 수정될 필요가 있다.
도 9는 VLD4n 명령들의 그룹을 실행할 때 액세스될 벡터 레지스터들 내의 특정 부분들을 식별하는데 사용될 수 있는 로직을 도시한 블록도이다. 앞서 논의된 비트 식별자 비트(beat identifier bits) 및 패턴 식별자 비트(bits) 이외에도, 요소 식별자 비트(bits)도 제공되지만, 이들 비트(bits)는 데이터 요소 크기가 32비트(bits)보다 작을 때만 사용된다. 다양한 비트(beat) ID 및 패턴 ID 비트(bits)는 도 9에 도시된 게이트 535, 540, 545를 사용하여 논리적으로 결합된다. x 레지스터 식별자는 벡터 레지스터 내의 4개의 스칼라 레지스터 중 어느 것이 도 5의 우측에서 시작하여, 액세스되어야 하는지를 식별한다. 그러므로, 00의 x 레지스터 식별자는 벡터 레지스터의 가장 우측 스칼라 레지스터를 식별할 것이고, 01의 x 레지스터 식별자는 좌측 등으로의 다음 스칼라 레지스터를 식별할 것이다. y 레지스터 오프셋 비트(bits)는 명령에 의해 식별된 제1 Q 레지스터에 관한 오프셋을 식별하다. 일부 명령은 QO을 제1 레지스터로서 지정할 수 있지만, 이것은 필수적이지 않으므로, 순전히 예시로써 제1 벡터 레지스터는 Q4일 수 있으며, y 레지스터 오프셋은 Q4에 관하여 도 5에 나타낸 수직 방향으로 지정된다. x 요소 오프셋 비트(bits)는, 데이터 요소 크기가 16 또는 8 비트(bits)인 상황에서, 식별된 스칼라 레지스터들 중 어느 부분이 액세스되는지를 식별하는 데 사용된다. 도 9에서 알 수 있는 바와 같이, 크기 정보는 멀티플렉서 550, 560, 570, 580의 각각에 대한 제어 입력으로서 제공되고, 데이터 요소 크기가 32 비트(bits)일 때, 두 멀티플렉서 570 및 580으로부터의 출력은 논리 0 값이므로, x 요소 오프셋은 어떤 효과도 없다. 16-bit 데이터 요소들에 대해서는, x 요소 오프셋 bit 0은 멀티플렉서 580의 출력에 의해 제어되고, x 요소 오프셋 bit 1은 멀티플렉서 570으로부터의 출력에 의해 0으로 고정된다. 그러나, 8-bit 데이터 요소들에 대해서는, 멀티플렉서들 570, 580 둘 모두는 그들의 최하위 입력에 의존하는 출력을 생성할 것이고, 따라서 x 요소 오프셋 값의 양쪽 비트(bits)가 사용된다.
이전의 논의에서 명백한 것처럼, 패턴 ID 값은 특정 명령의 연산코드에 의해 효과적으로 지정된다. 비트(beat) ID 및 요소 ID 정보는 다양한 방식으로 유지될 수 있고, 예를 들어, 각 재배열 명령을 실행할 때 LSU(25)에 의해 참조되는 로컬 카운터에 유지될 수 있다.
도 9의 로직은 도 7b, 7d 또는 7g의 액세스 패턴을 각각 사용할 때 32-bit, 16-bit 또는 8-bit 데이터 요소들과 같이, 상이한 크기의 데이터 요소들에서 동작하는 VLD4n 명령에 사용될 수 있다. 그러나, 도 7e의 대안적인 액세스 패턴이 사용되었으면, 도 9의 로직은 그에 따라 수정될 필요가 있다.
도 10은 메모리(예를 들어, 좌측 및 우측 오디오 채널)로부터 데이터를 디 인터리브(de-interleave)하고 데이터에 대해 곱셉 누적 연산을 수행하는 일부 예시적인 코드를 도시한다. 도시된 바와 같이, VLD2n 명령들은 두 개의 명령의 그룹으로서 배열되며, 이 그룹은 도 10에 도시된 코드의 섹션에서 두 번 실행된다. 도면의 우측 섹션에 표시된 것처럼, 이러한 재배열 명령들의 새로운 그룹은 메모리 인터페이스와 곱셈 누적 하드웨어 둘 모두가 어떤 멈춤도 없이 100%의 시간 동안 바쁘게 지낼 수 있게 한다. 도시된 예에서는 틱 배열(arrangement)당 2개의 비트(beats)가 사용되고, 따라서 각 VLD 명령은 적절한 곱셈 누적 명령과 오버랩될 수 있고, 이들 2개의 명령은 벡터 레지스터들의 상이한 섹션에 액세스한다.
도 11a 내지 도 11d는 일 실시 예에서 2의 스트라이드(2개의 벡터 명령이 한개의 그룹을 형성하도록 배열되는 경우) 및 4의 스트라이드(4개의 벡터 명령이 한개의 그룹을 형성하도록 배열되는 경우)에 대해, 제공될 수 있는 벡터 로드 및 벡터 저장 명령의 특정 인코딩을 도시한다. 도 11a의 VLD2n 명령을 먼저 고려하면, 각 VLD2n 명령은, 실행될 때, 두 개의 64-bit 인접한 데이터 블록이 메모리로부터 로드되어 두 개의 목적지 레지스터의 일부에 기록되게 한다. 기록된 목적지 레지스터들의 일부 및 기본 어드레스 레지스터로부터의 오프셋은 "팻(pat)" 파라미터에 의해 결정된다. 명령이 동일한 베이스 어드레스 및 목적지 레지스터로 두 번 실행되지만, 상이한 "팻" 값이 있는 경우, 효과(effect)는 메모리로부터 데이터를 로드하고 그것을 2의 스트라이드로 지정된 레지스터들에 디인터리브하는 것이다. 베이스 어드레스 레지스터는 32 바이트(bytes)의 데이터가 처리되었다는 것을 표시하고 VLD2n 명령들의 다음의 그룹에 대해 준비된 베이스 레지스터 내의 포인터를 갱신하기 위해, 그룹에서 제2 명령을 실행할 때 32씩 선택적으로 증가할 수 있다.
도 11b의 VLD4n 명령을 고려하면, 그러한 명령이 실행될 때마다 그것은 메모리로부터 두 개의 64-bit 인접한 블록의 데이터를 로드하지만, 이 경우에 4개의 목적지 레지스터의 일부에 데이터를 기록한다. 기록된 목적지 레지스터의 일부와, 베이스 어드레스 레지스터로부터의 오프셋은, "팻" 파라미터에 의해 결정된다. 명령이 동일한 베이스 어드레스 및 목적지 레지스터들로 4번 실행되지만, 상이한 "팻" 값이 있는 경우, 효과는 메모리로부터 데이터를 로드하고 그것을 4의 스트라이드로 지정된 레지스터에 디인터리브하는 것이다. 베이스 어드레스 레지스터는 64 바이트의 데이터가 처리되었다는 것을 식별하기 위해, 그룹에서 마지막 명령을 실행할 때 선택적으로 64씩 증가할 수 있다.
도 11c의 벡터 저장 명령(VST2)을 고려하면, 이 명령이 실행될 때마다 그것은 2개의 소스 레지스터의 여러 개의 부분으로 구성된 메모리에 2개의 64-bit 인접한 블록의 데이터를 저장한다. 판독된 소스 레지스터의 일부와, 베이스 어드레스 레지스터로부터의 오프셋은 "팻" 파라미터에 의해 결정된다. 명령이 동일한 베이스 어드레스와 소스 레지스터로 두 번 실행되지만, 상이한 "팻" 값이 있는 경우, 효과는 지정된 레지스터들로부터 데이터를 2의 스트라이드로 인터리브하고 그 결과의 데이터를 메모리에 저장하는 것이다. 베이스 어드레스 레지스터는 선택적으로 32씩 증가할 수 있다.
도 11d의 VST4 명령을 고려할 때, 이것은 실행될 때마다 2개의 64-bit 인접한 블록의 데이터를 메모리에 다시 저장하고, 이 경우에 인접한 블록들이 4개의 소스 레지스터의 여러 개의 부분으로부터의 데이터로 구성된다. 판독된 소스 레지스터의 일부와, 베이스 어드레스 레지스터로부터의 오프셋은 "팻" 파라미터에 의해 결정된다. 명령이 동일한 베이스 어드레스 및 소스 레지스터로 4번 실행되지만, 상이한 "팻" 값이 있는 경우, 효과는 지정된 레지스터로부터의 데이터 요소들을 4의 스트라이드로 인터리브하고 그 결과의 데이터를 메모리에 저장하는 것이다. 베이스 어드레스 레지스터는 선택적으로 64씩 증가할 수 있다.
도 12는 앞서 언급된 그룹의 재배열 명령들을 포함하는 프로그램 명령들의 시퀀스를 디코딩할 때 디코더(6)의 동작을 도시하는 흐름도이다. 스텝 650에서, 현재 명령이 분석되고, 그 후 스텝 655에서 그 명령이 그룹의 재배열 명령인지를 판정한다. 그렇지 않다면, 스텝 660에서, 관련 실행 유닛에 대한 제어 신호들을 생성하기 위해 명령을 고려하여 표준 디코드 동작이 수행되고, 그 후에 스텝 665에서 디코더는 다음 명령으로 이동한 후 스텝 650으로 복귀한다.
스텝 655에서 분석중인 현재 명령이 그룹의 재배열 명령이라고 판정되면, 스텝 670에서 그룹의 어느 멤버가 명령인지를 식별하는데, 이는 앞서 언급한 "팻" 값을 참조하여 이루어진다. 그 후에, 스텝 675에서, 데이터 요소 액세스 패턴 표시는 그룹의 어느 멤버가 명령인지에 따라 생성되고, 스텝 680에서 데이터 요소 액세스 패턴 표시기(indicator)를 포함하는 로드 저장 유닛에 대한 제어 신호들을 생성하기 위해 나머지 디코드 동작이 수행된다.
일 실시 예에서, 도 8 및 도 9의 초기 설명에서 알 수 있는 바와 같이, 스텝 675에서 생성된 데이터 요소 액세스 패턴 표시자는, LSU가 적절한 메모리 액세스 및 레지스터 액세스 패턴을 생성하기 위해 이 정보를 비트(beat) 식별자(및 선택적으로 요소 식별자 정보)와 결합하여 사용하여, 단지 명령 연산코드(opcode)로부터 추출된 "팻" 비트(bits)에 의해 효과적으로 형성될 수 있다.
스텝 680 이후에, 프로세스는 스텝 665를 통해 스텝 650으로 되돌아간다.
전술한 바와 같이, 그룹 내의 하나 이상의 명령은 지정된 베이스 어드레스 레지스터 내의 베이스 어드레스를 갱신하도록 배열될 수 있다. 한개의 특정 실시 예에서, 그룹 내의 마지막 명령은 베이스 어드레스 레지스터 갱신을 수행하는데 사용되고, 베이스 어드레스 값이 갱신되는 양은 그룹 내의 재배열 명령에 의해 수행되는 모든 액세스를 고려한다.
원하는 경우, 이러한 로드 또는 저장 명령을 실행할 때 수행되는 동작은 데이터 확대 또는 데이터 축소 기능을 포함하도록 확장될 수도 있다. 이것은 데이터가 벡터 레지스터에 저장되는 포맷과 상이한 포맷으로 메모리에 저장되는 경우 유용할 수 있다. 예를 들어, 그것은 벡터 레지스터 내에 있는 것보다 더 잘린 형태(more truncated form)로 메모리에 저장될 수 있다. 도 13은 데이터가 메모리로부터 벡터 레지스터로 로드됨에 따라 데이터 확대를 수행하려고 할 때 수행될 수 있는 일련의 스텝을 나타낸다. 특히, 그룹 내의 각 재배열 명령을 실행할 때 수행되는 메모리에 대한 각각의 액세스 중에, 도 13의 프로세스가 수행될 수 있다. 스텝 700에서, 관련 데이터 요소들은 메모리 위치로부터 취득되는데, 여기서 각 데이터 요소가 제1 크기를 갖는다. 그 후, 스텝 705에서, 제2 크기의 데이터 요소들을 생성하기 위해 데이터 확대 동작이 이들 데이터 요소에 대해 수행된다(예를 들어, 제로 확장(zero extending) 또는 부호 확장(sign extending)에 의해 검색된 값이 메모리를 형성한다).
그 후, 스텝 710에서, 기록될 벡터 레지스터 부분이 데이터 요소 액세스 패턴 정보(및 도 9를 참조하여 앞서 논의된 비트(beat) 정보 등)로부터 결정되고, 그 다음에 스텝 715에서 확대된 데이터 요소들이 식별된 벡터 레지스터 부분들에 기록된다.
원하는 경우 동등한 데이터 축소 기능이 수행될 수 있으며, 여기서 검색된 데이터를 확장하는 제로 또는 부호 대신에, 검색된 데이터 요소들의 절단(truncation)이 수행된다는 것을 이해할 것이다. 일 실시 예에서, 데이터는 메모리로부터 벡터 레지스터로 검색될 때 확대될 수 있고 벡터 레지스터로부터 메모리로 다시 저장될 때 축소될 수 있지만, 대안적인 실시 예에서는 데이터는 메모리로부터 검색될 때 데이터가 축소될 수 있고, 메모리에 다시 저장될 때 확대될 수 있다.
원하는 경우, 재배열 명령들의 그룹은 액세스된 어드레스 범위 내의 하나 이상의 데이터 구조가 처리로부터 배제되게 하도록 술어 정보(predicate information)에 의해 한정될 수 있다. 도 7a 내지 도 7g에서의 이전에 도시된 액세스 패턴으로부터 명백한 바와 같이, 처리(processing)로부터 하나 이상의 데이터 구조를 배제하고자 할 때, 이것이 그룹 내의 임의의 개개의 명령에 대해 수행된 처리에 어떤 영향을 미치는지에 관한 판정은 액세스 패턴에 의존할 것이다. 예를 들어, 액세스 패턴이 도 7b에 도시된 형태를 취할 수 있는 VLD4n 명령들의 그룹을 고려하고, 제2 레인에 배치될 데이터 구조를 처리에서 배제하는 것으로 판정되면, 이것은 블록 250과 연관된 액세스를 수행하는 VLD4n 명령의 제1 액세스 및 블록 260과 연관되는 VLD4n 명령의 제1 액세스에 영향을 미칠 것이다. 그러나, 다른 VLD4n 명령은 정상적으로 실행될 수 있다.
일 실시 예에서, 도 14a에 도시된 바와 같은 술어 레지스터(750)는 술어 값을 지정하는데 사용될 수 있다. 일 실시 예에서, 이것은 16-bit 레지스터일 수 있고, 술어 레지스터의 어떤 비트(bits)가 사용되는지는 데이터 요소들의 크기에 의존할 것이다. 예를 들어, 벡터 레지스터들이 128 비트(bits) 폭이고 데이터 요소들이 크기가 32 비트(bits)인 경우, 벡터 레지스터당 4개의 데이터 요소가 존재하며, LSU는 술어 정보를 평가할 때 오직 술어 레지스터(750)의 네 번째 비트(bit)마다 참조하도록 배열될 수 있다. 마찬가지로, 16-bit 데이터 요소들에 대해서는, 모든 다른 비트(bit)를 보기 위해 배열될 수 있지만, 8-bit 데이터 요소들에 대해서는, 술어 레지스터의 모든 비트(bits)를 보기 위해 배열될 수 있다. 이것은 LSU에 의해 참조될 필요가 있는 술어 정보를 구현하는 단지 예시적인 방법일 뿐이며, 술어 정보를 표현하는 어떤 다른 방법이 사용될 수도 있다는 것을 이해할 것이다.
도 14b는 그룹 내의 각 재배열 명령의 실행 중에 술어 정보가 어떻게 사용되는지를 개략적으로 나타내는 흐름도이다. 스텝 760에서, 현재의 명령이 프리디케이트(predicated)되는지 여부가 판정된다. 일 실시 예에서, 개별 명령이 술어 레지스터(750)를 설정하는데 사용되며, 일 실시 예에서 그 명령은 또한 다음의 "M" 명령들이 프리디케이트되어야 한다는 것을 식별한다. 따라서, 일례로서, 그러한 명령은 VLD4n 명령들의 그룹 이전에 실행되어, 4개의 VLD4n 명령들의 그룹이 프리디케이트되어야 하다는 것을 식별한다.
현재의 명령이 프리디케이트되지 않는다고 판정되면, 프로세스는 스텝 775로 진행하고 여기서 LSU는 필요한 로드 또는 저장 동작 및 관련 재배열을 수행하기 위해 메모리에 대하여 하나 이상의 액세스를 수행하여 필요한 데이터 요소에 액세스한다.
그러나, 스텝 760에서 현재 명령이 프리디케이트되었다고 판정되면, 스텝 765에서 명령에 의해 처리되고 있는 데이터 요소 크기에 따라 술어 레지스터의 어떤 비트(bits)가 사용되는지가 판정된다. 그 후, 스텝 770에서, 현재의 명령과 관련된 액세스 패턴 정보와 함께 관련 술어 비트(predicate bits)가 분석되어 만약 있다면 명령을 실행하기 위해 필요한 액세스에 대한 술어 비트(bits)의 효과를 판정한다. 도 7b를 참조하여 설명한 상기 언급된 예를 참조하여, 이것은, 술어 정보가 제2 레인과 관련된 데이터 구조를 처리하는 것을 배제하려고 하면, 블럭 250에 대한 액세스를 수행하는 VLD4n 명령이 실행될 때 그것의 제1 액세스가 필요하지 않다고 판정할 것이고, 마찬가지로 블록 260에 대한 액세스를 수행하는 VLD4n 명령이 실행될 때 그것의 제1 액세스가 필요하지 않는다고 판정할 것이라는 것을 의미할 것이다.
스텝 770에서의 분석 후에, 스텝 775에서 메모리에 대한 하나 이상의 액세스가 필요한 데이터 요소에 액세스하도록 수행된다. 상기 술어 정보는 원칙적으로 하나 이상의 재배열 명령들에 대해 어떠한 액세스도 수행될 필요가 없다는 것을 의미할 수 있고, 따라서 그러한 경우에는 스텝 775에서 어떠한 액세스도 수행되지 않을 것이라는 것을 알 수 있다.
상술한 실시 예들로부터, 벡터 로드 및 저장 명령을 사용하여 (인터리브 및 디인터리브 동작과 같은) 재배열 동작을 수행하려고 할 때, 필요한 재배열 동작을 시행하기 위해 그룹으로 배열된 다수의 개별 명령을 사용함으로써 처리를 향상시킬 수 있다는 것을 이해할 것이다. 특히, 이러한 접근법은 로드 또는 저장 명령을 실행할 때 스톨 사이클(stall cycles)이 도입될 가능성을 상당히 감소시킬 수 있다. 또한, 각 명령과 관련된 액세스 패턴들을 적절하게 배열함으로써, 메모리와 산술 명령들의 오버랩된 실행을 가능하게 하는 아키텍처와 명령들이 호환 가능하게 함으로써, 성능을 더 향상시킬 수 있다. 이전에 설명한 접근법을 채용함으로써, 명령들이 쉽게 실행될 수 있고 메모리 서브 시스템의 효율적인 사용을 가능하게 한다.
이하의 실시 예는 벡터 레지스터들의 세트에 액세스하기 위한 새로운 배열을 기술한다. 이러한 접근법은 다양한 상황에서 유용할 수 있다. 한개의 예로서, 이전에 설명한 다양한 데이터 요소 액세스 패턴의 사용을 용이하게 할 수 있다.
도 15는 일 실시 예에 따른 기록 액세스 회로를 갖는 벡터 레지스터 파일(800)의 일부를 개략적으로 도시한 것이다. 벡터 레지스터 파일(800)은 다수의 벡터 레지스터들로 구성되며, 각 벡터 레지스터는 다수의 스칼라 레지스터들로 구성된다. 도 15에 도시된 실시 예에서, 벡터 레지스터 파일(800)의 부분은 도 15 내에서 행(rows)으로 표시된 4개의 벡터 레지스터 805, 810, 815, 820의 부분들을 나타낸다. 각 벡터 레지스터 805, 810, 815, 820은 다수의 스칼라 레지스터들을 사용함으로써 벡터를 저장한다. 예를 들어, 제1 벡터 레지스터(805)는 부분적으로 2개의 스칼라 레지스터 - s0 및 s1로 구성되며, 제2 벡터 레지스터(810)는 부분적으로 2개의 다른 스칼라 레지스터 -s4 및 s5로 구성된다. 벡터 레지스터 파일(800) 외에, (레지스터 액세스 회로의 일례인) 기록 액세스 회로(830)가 제공된다. 기록 액세스 회로는 제1 액세스 블록(835) 및 제2 액세스 블록(840)을 포함하며, 도 24를 참조하여 보다 상세하게 설명될 것이다. 각 액세스 블록은 한 번에 벡터의 한 부분에 액세스할 수 있다. 따라서, 동시에 액세스될 수 있는(예를 들어, 기록될 수 있는) 데이터의 양이 제한된다. 특히, 제1 액세스 블록(835)과 제2 액세스 블록(840)에 동시에 제공되는 벡터 레지스터 파일(800)에 동시에 데이터를 기록하는 것만 가능하다. 이 예에서는, 편의상, 한개의 부분은 스칼라 레지스터와 동일한 크기라고 가정한다. 도 15의 실시 예에서, 레지스터 파일(800)의 부분은 2개의 열 845, 850을 포함한다. 각 열은 각 벡터의 동일한 부분을 저장한다. 이 예에서, 부분 크기는 스칼라 레지스터 크기와 같기 때문에, 열은 스칼라 레지스터 s0, s1, s4, s5, s8, s9, s12, s13과 정렬된다.
도 15에 도시된 바와 같이, 스칼라 레지스터들은 2개의 포트 835, 840 중 하나에 배선된다. 도 15의 예에서, 스칼라 레지스터 s0, s5, s8 및 s13은 제1 액세스 블록(835)에 배선되는 반면, 스칼라 레지스터 s1, s4, s9 및 s12은 제2 액세스 블록(840)에 배선된다. 도식적인 관점에서 도 15를 참조하여 도시된 배선은, 다수의 트위스트(twists)를 포함한다는 것을 알 수 있을 것이다. 즉, 단순히 서로 위 또는 아래에 있는 모든 스칼라 레지스터를 동일한 포트에 배선하지 않음으로써, 배선의 논리적 트위스팅(logical twisting)이 발생한다. 이러한 방식으로, 기록 액세스 회로가 스칼라 레지스터 s0 및 s1과 같은 행(즉, 동일한 벡터 레지스터의 부분)에 있는 스칼라 레지스터에 동시에 기록하는 것이 가능하다. 동일한 기록 액세스 회로는 스칼라 레지스터 s0 및 s4와 같은 열에 있는 스칼라 레지스터들에도 동시에 기록 가능하다. 이것은 스칼라 레지스터 쌍 s0 및 s4 및 스칼라 레지스터 쌍 s0 및 s1이 상이한 포트 835 및 840에 배선되기 때문이다. 배선의 트위스팅은 여기에 언급되어 있지만, 배선은 실제로 물리적으로 트위스트될 필요는 없다는 점에 유념한다. 스칼라 레지스터 자체가 배선이 직선이 되도록 물리적으로 재정렬(reordered)(논리적 ID(indentities)/어드레스를 리네임(renaming)하면서)되고, 동일한 효과를 발생한다는 것을 이해할 것이다.
유사한 개념이 도 16에 도시된 바와 같이 레지스터 액세스 회로의 다른 예인 판독 액세스 회로(855)에 적용된다. 이 예에서, 판독 액세스 회로(855)는 또한 제1 액세스 블록(860) 및 제2 액세스 블록(865)을 갖는다. 스칼라 레지스터 - s0, s5, s8 및 s13의 일부는 제1 액세스 블록(860에 접속되고, 다른 레지스터 - s1, s4, s9 및 s12는 제2 액세스 블록(865)에 접속된다. 따라서, 두 개의 스칼라 레지스터가 동시에 액세스(예를 들어, 판독)될 수 있고, 트위스트된 배선에 의해, 레지스터 s4 및 s8과 같은 열에 있는 2개의 레지스터, 또는 레지스터 s4 및 s5와 같은 벡터 레지스터 805, 810, 815, 820 중 하나로부터 두 개의 레지스터 중 하나를 판독하는 것이 가능하다. 이것은 동일한 열에 있는 레지스터들이 연결되어 있는 액세스 블록을 엇갈리게 하기 때문이고 또한 각 열 내의 레지스터들이 연결되어 있는 액세스 블록을 엇갈리게 하기 때문이다. 도 15 및 도 16에 도시된 실시 예에서, 배선이 유사한 방식으로 설정되었지만, 상이한 물리적 배선이 도 15의 기록 액세스 회로(830) 및 도 16의 판독 액세스 회로(855)와 관련하여 사용된다. 그러나, 이것은 필수적인 것은 아니며, 다른 실시 예들은 기록 액세스 회로(830) 및 판독 액세스 회로(855) 모두에 대해 정확히 동일한 배선을 사용할 수 있다.
도 17은 일 실시 예에 따른 기록 액세스 회로를 갖는 벡터 레지스터 파일(800)을 개략적으로 도시한 것이다. 벡터 레지스터 파일(800)은 제1 기록 액세스 회로(880)를 갖는 제1 섹션(870) 및 제2 기록 액세스 회로(885)를 갖는 제2 섹션(875)으로 구성된다. 기록 회로들 880, 885의 각각은 그 연관된 섹션의 부분인 열의 부분에만 액세스한다. 예를 들어, 제1 기록 액세스 회로(880)는 제1 섹션(870) 내의 열의 부분들에만 액세스하고 제2 기록 액세스 회로(885)는 제2 섹션(875) 내의 열의 부분들에만 액세스한다. 따라서, 트위스트는 섹션의 경계를 가로 질러 연장되지 않는다는 것을 이해할 수 있을 것이다.
도 18은 제1 판독 액세스 회로(890) 및 제2 판독 액세스 회로(895)를 갖는 벡터 레지스터 파일(800)을 개략적으로 도시한 것이다. 도 17에 도시된 실시 예의 경우에서와 같이, 제1 판독 액세스 회로(890)는 제1 섹션(870) 내부의 열의 부분들에 액세스하고, 제2 판독 액세스 회로(895)는 제2 섹션(875) 내부의 열의 부분들에 액세스한다.
도 19a는 벡터 레지스터 파일 내의 단일 트위스트(single twist)의 예를 도시한 것으로, 여기서 벡터 레지스터 파일은 단어를 나타내는 텍스트 포맷으로 도시되어 있다. 도 19a의 예에서, 각 벡터는 4개의 열에 걸쳐 분포된 4개의 부분을 포함한다. 이전과 마찬가지로, 각 열은 각 벡터의 동일한 부분을 저장하다. 그러나, 라벨(labels) A, B, C 및 D는 동일한 포트를 통해 액세스되는 부분들을 설명하기 위해 제공되었다. 따라서, Q0에서 Q7까지의 벡터 레지스터를 통해 위쪽으로 향할 때, A로 표시된 둥근 부분이 제3 및 제4 열 사이에서 어떻게 엇갈리는지를 알 수 있다. 벡터 레지스터 파일은 각 부분의 패턴이 21, 즉 2열에 걸쳐 분포되기 때문에 단일 트위스트를 갖는다고 한다.
도 19b는 벡터 레지스터 파일의 단일 트위스트의 예를 나타낸 것으로, 여기서 벡터 레지스터 파일은 바이트를 나타내는 텍스트 형식으로 표시되어 있다. 도 19b는, 도 19b가 벡터 레지스터 파일을 바이트 형식으로 나타낸다는 것을 제외하고, 도 19a에 대응한다. 특히 각 단어는 4바이트로 구성되어 있다는 것으로 나타나 있다(즉, 각 단어는 32비트(bits)이다). 각 단어를 구성하는 4개의 바이트는 각 라벨의 끝에 번호가 매겨진 접미사를 추가함으로써 표시된다. 예를 들어, A라는 단어는 A0, Al, A2 및 A3이라는 표시된 바이트로 구성된다. 다시, 단일 트위스트 패턴은 A 단어를 구성하는 모든 바이트를 동그라미로 표시해서 보여준다. 다시, 그 패턴이 2열에 걸쳐 분포되어 있다는 것을 알 수 있다.
경우에 따라, 벡터 레지스터 파일에 대해 더 넓은 범위의 액세스 패턴을 제공해야 할 수도 있다. 예를 들어, 벡터가 각각 16-bits 8개의 데이터 요소로 구성되면, 각 벡터는 128-bit가 될 것이다. 따라서, 두 개의 섹션에 대해서는, 각 섹션은 64-bit가 된다. 따라서 각 벡터의 각 액세스된 부분이 16-bits가 되어야 하므로, 각 섹션에는 64/16 = 4열이 있어야 할 것이다. 같은 열로부터의 부분들에 동시에 액세스할 수 있게 하고, 동일한 회로가 동일한 지수(quotient) 레지스터로부터의 부분들에 동시에 액세스할 수 있게 하기 위해서, 단일 트위스트보다 많이 제공해야 한다. 특히, 제2 32-bit 트위스트 패턴 내에 있는 제1 16-bit 트위스트 패턴을 제공해야 할 것이다.
도 20은 도 19b에 도시된 총 4개의 열(섹션당 2개)과 대조적으로 총 8개의 열(섹션당 4개)을 사용함에도 불구하고 편의상 도 19b와 동일한 라벨링을 사용하는 그러한 한개의 패턴을 도시한 것이다. 도 20의 예는 A 요소 모두를 포함하고 1+2 열과 3+4 열을 번갈아가며 있는, 타원의 제1 32-bit 트위스트 패턴을 나타낸다. 16-bit 트위스트 패턴(직사각형으로 표시)은 더 복잡하며, 판독 또는 기록 액세스 회로의 포트 중 하나에 연결되는 접속부를 나타낸다. 특히, 각 타원 내부에 있는 두 쌍의 열에 대해서는, 액세스 회로는 2개의 벡터 레지스터마다 좌측 쌍과 우측 쌍 사이를 번갈아가며 나온다. 예를 들어, 벡터 레지스터 QO에서, 우측 타원의 우측 쌍이 접속된다. 이것은 2개 이상의 벡터 레지스터(즉, 벡터 레지스터 Q2에서) 다음에 우측 타원의 좌측 쌍과 번갈아가며 나온다. 추가 2개의 레지스터(즉, 벡터 레지스터 Q4에서) 다음에, 우측 타원의 우측 쌍에 다시 액세스한다. 좌측 타원에 관해서 유사한 패턴이 발생한다. 특히, 벡터 레지스터 Ql에서, 좌측 타원의 우측 쌍이 접속되고, 이것은 좌측 타원의 좌측 쌍이 접속되도록 추가 2개의 레지스터(즉, 벡터 레지스터 Q3에서) 다음에 번갈아가며 나온다. 한 번 더, 이것은 추가 2개의 벡터 레지스터(즉, 벡터 레지스터 Q5에서) 다음에 좌측 타원의 우측 쌍과 다시 번갈아가며 나온다. 대안적으로 보면, 1, 3, 2, 4 열(우측에서 좌측으로 열을 카운트)은 액세스 회로의 포트 중 하나에 의해 벡터 레지스터 QO - Q3 전체에 걸쳐 액세스된다. 즉, 액세스 블록은 각 벡터 레지스터 QO - Q3 전체에 걸쳐 각 섹션 내부의 상이한 열에 액세스한다. 벡터 레지스터 Q3 다음에, 패턴은 반복된다.
섹션 내부의 각 열에 대해서는, 배선 패턴이 반복되기 전에 "통과해야(passed through)" 하는 벡터 레지스터의 수는 열의 수와 동일하다는 것을 알 수 있다.
도 20에서, "트위스팅 크기(twisting size)", 즉 트위스팅의 영향하에 있는 부분의 크기가 데이터 요소 크기와 상이할 수 있음이 또한 명백하다는 것에 유념한다. 이것은 특정 배선의 배열로 벡터 레지스터 파일을 생성하면, 발생할 수 있는 트위스팅의 정도(및 열 수)가 고정되기 때문이다. 이 시점에서, 벡터 레지스터 파일은 데이터 요소의 크기에 불가지론적이게(agnostic) 된다. 특히, 도 20에서와 같이, 부분 크기가 16-bits인 경우, 도 10에서와 같이 동일한 레지스터 파일이 16-bit 데이터 요소 또는 32-bit 데이터 요소를 다시 저장하는 데 사용될 수 있다.
도 21은 일 실시 예에 따라 회로가 이중 트위스트를 수행하는 벡터 레지스터 파일(900)의 한 섹션을 개략적으로 도시한 것이다. 예를 들어, 도 21의 개략도는 이중 트위스트 패턴과 대응할 수 있다. 도 21에 도시된 실시 예에서, 벡터 레지스터는 각각 32-bits 복수의 스칼라 레지스터 s0, s1, s4, s5, s8, s9, s12, s13으로 구성된다. 그러나, 각 부분의 크기는 16-bits이다. 결과적으로, 스칼라 레지스터들의 각각은 2개의 부분을 저장하고 도 21에 도시된 섹션은 4개의 열을 포함한다. 도 21에 도시된 실시 예는 4개의 상이하게 정형화된 라인 905,910,915,920을 도시한 것이다. 라인 905, 910, 915, 920의 각각은 액세스 회로의 동일한 액세스 블록에 접속되는 부분들 또는 배선을 나타낸다. 라인들 905 중 하나는 도 20과 관련하여 도시된 접속 패턴과 대응한다는 것을 알 수 있다. 그 특정 라인은 벡터 레지스터 Q0, Q1, Q2에서(아래에서 위로) 1, 3, 2 및 4 열(우측에서 좌측으로)에 각각 접속한다. 도 21의 상단 벡터 레지스터(Q3) 위에 나타낸 것처럼, 4개의 벡터 레지스터 다음에, 각 라인의 액세스 패턴 자체가 반복한다.
레지스터 액세스 회로의 동일한 액세스 블록에 동시에 액세스할 필요가 없는 벡터 레지스터들의 부분들을 배선하여, 동시에 행 또는 열의 부분들에 액세스할 수 있게 하기 위해서, 단일 트위스트 패턴 및 이중 트위스트 패턴이 어떻게 구현될 수 있는지를 보여 주었다. 그러나, 네스트된(nested) 트위스트 패턴의 개념은 무한히 확장될 수 있다. 예를 들어, 네스트된 트위스팅의 제3 레벨을 추가하여 부분/열의 수를 두 배로 만들면, 열 또는 행의 단일 섹션 내부의 23 = 8 8-bit 부분에 동시에 액세스할 수 있다.
도 22는 일 실시 예에 따라 임의의 횟수로 네스트된 트위스팅을 수행하도록 트위스트를 수행하는 프로세스가 일반화될 수 있는 방법을 도시하는 도면이다. 도 22는 레지스터 파일(925)의 일부를 도시한 것이다. 스칼라 레지스터들 s0, s1, s2 및 s3을 포함하는 단일 벡터 레지스터(930)가 도시되어 있다. 레지스터 파일은 각각 8개의 열로 이루어지는 2개의 섹션 935, 940을 포함한다. 그러나, 동일한 원칙이 단일 섹션에 적용될 수 있다. 열은 네스트된 구조로 논리적으로 함께 그룹화된 것으로 생각할 수 있다. 네스트된 구조는 log2(N) 레벨을 가지며, 여기서 N은 섹션 내부의 열 수이다. 그러므로, 이 경우, 네스트된 구조는 log2(8)=3 레벨 945, 950, 955를 갖는다. 레벨의 수는 네스팅(nesting)의 깊이(depth)에도 대응한다. 따라서, 이 특정 예에서, 네스팅은 3 레벨로 깊어질 것이다. 제1 레벨(945)에서, N= 8 열은 적어도 한개의 열(980)의 제1 세트와 적어도 한개의 열(985)의 제2 세트 사이에서 동일하게 분할된다. 함께, 이들은 제1 레벨(945)에서 결합된 그룹 980, 985를 형성한다. 각 부모(parent) 레벨(예를 들어, 제2 레벨(950))의 세트의 각각은 적어도 한개의 열의 제1 세트와 대응하는 자식(child) 레벨(예를 들어, 제3 레벨(955))에 대한 적어도 한개의 열의 제2 세트로 균등하게 분할된다. 예를 들어, 도 22에서, 부모 레벨(950)에서, 적어도 한개의 열(970)의 세트들 중 하나는 자식 레벨 5에서 적어도 한개의 열(960)의 제1 세트 및 적어도 한개의 열(965)의 제2 세트로 분할된다. 주어진 레벨 L에서 결합된 그룹의 수는 2L과 동일하다. 그러므로, 부모 레벨에서의 다른 세트들에 대해서도 동일한 분할 프로세스가 적용된다.
레벨 945, 950 및 955는 완전히 개념적이며 단지 점점 커지는(또는 점점 더 작아지는) 세트에서 열들을 그룹화하기 위한 목적으로만 사용된다는 것을 이해할 수 있을 것이다.
제자리에 있는 이 구조에 의해, 액세스 회로의 액세스 블록(다음 도면에 기술)과 벡터 레지스터들의 상이한 부분들 사이의 배선을 설명할 수 있다. 각 액세스 블록은 각 벡터 레지스터에 대해 한개의 열을 방문하도록 구성된다. 그 액세스 블록/벡터 레지스터 결합에 대해 방문한 한개의 열은, 각 레벨에서 적어도 한개의 열의 제1 세트가 같은 수의 벡터 레지스터에 대해 적어도 한개의 열의 제2 세트를 방문하기 전에 소정의 수의 벡터 레지스터 절반에 대해 방문된다는 요건 또는 제한에 의해 고유하게 식별 가능하다. 미리 결정된 수는 2X와 같고 여기서 X는 레벨마다 다르며 1 - log2(N) 범위에 있다. 따라서, 미리 결정된 수는 2-8 범위에 있다. 그러므로, 각 액세스 블록은 제2 세트(들)(985) 내의 동일한 수의 열을 방문하기 전에, 예를 들어 제1 세트(들)(980) 내의 1-4 열을 방문한다. 제2 레벨(950)에서의 2개의 제1 세트 및 2개의 제2 세트와 제3 레벨(955)에서의 4개의 제1 세트 및 4개의 제 2 세트에 대해서도 마찬가지이다.
도 22에 도시된 결합된 그룹 970, 975는 열 970의 제1 세트 및 열 975의 제2 세트로 구성되고, 네스트된 구조의 제2 레벨에서 발생한다. 따라서, 일 예에서, 4개의 벡터 레지스터 전반에 걸쳐, 한개의 액세스 블록은 열 960, 그 다음에 열 965, 그 다음에 결합된 그룹 975의 두 개의 열에 액세스할 수 있다. 제2 예에서, 한개의 액세스 블록은 열 960, 그 다음에 결합 그룹 975의 열 중 하나, 그 다음에 열 965, 그 다음에, 결합된 그룹 975 내의 다른 열에 액세스할 수 있다. 각 열은 단일 벡터 레지스터에 대한 단일 액세스 블록에 의해서만 방문되고, 따라서 제1 예에서, 또 다른 액세스 블록은 결합된 그룹 975 내의 2개의 상이한 열, 그 다음에 열 960, 그 다음에 열 965에 액세스할 수 있다.
한 배선 예에서, 한 섹션 내의 각 액세스 블록은 제1 세트로부터의 열을 방문하고 또 다른 2M-1 벡터 레지스터 내에서는, 대응하는 제2 세트로부터의 열을 방문하며, 여기서 M은 주어진 레벨이다. 예를 들어, 제1 액세스 블록이 제1 레벨(945)의 제1 세트(980)로부터의 열을 방문하고, 21-1 = 1 벡터 레지스터 내에서는, 제1 레벨(945)의 대응하는 제2 세트(985)의 열이 방문될 것이다. 즉, 각 벡터 레지스터 전반에 걸쳐, 액세스 블록은 제1 세트(980) 및 제2 세트(985)의 열들 사이에서 번갈아가며 나올 것이다. 유사하게, 제2 레벨(950)에서, 제1 세트(970)의 열을 방문한 후에, 22-1 = 2 벡터 레지스터 내부에서는, 대응하는 제2 세트(975)의 열이 방문될 것이다.
따라서, 네스팅의 임의의 깊이에 대해 배선 패턴이 어떻게 생성될 수 있는지를 알 수 있다.
도 23은 일 실시 예에 따른 레지스터 액세스 회로의 일례로서 판독 액세스 회로 또는 판독 포트를 개략적으로 도시한 것이다. 도 23에 도시된 실시 예에서, 판독 액세스 회로는 제1 섹션 내의 4개의 액세스 블록(990,995,1000,1005) 및 제2 섹션 내의 대체 액세스 블록(990', 995', 1000', 1005')을 포함한다. 각 액세스 블록은 멀티플렉서로서 구현된다. 섹션당 4개의 액세스 블록이 존재한다는 것은 한 섹션에 4개의 열 있는 곳에 이러한 회로가 사용된다는 것을 나타낸다. 즉, 이러한 회로는 도 21에 도시된 레지스터 파일(900)과 같이, 이중 네스팅이 발생하는 곳에 사용된다. 한 섹션 내의 액세스 블록들의 각각은 이전에 설명한 바와 같이 그 섹션 내의 벡터 레지스터들 전체에 걸쳐 있는 복수의 부분에 접속된다. 트위스팅이 발생하는 곳에서는, 부분들이 출력되는 순서가 반전될 수 있다는 것을 이해할 것이다. 예를 들어, 도 18을 참조하면, 벡터 레지스터 Q0에 액세스할 때, 부분들은 s3, s2, s1, s0의 순(즉, 내림차순)으로 나올 것이다. 그러나, 벡터 레지스터 Q1에 액세스할 때는, 부분들은 s6, s7, s4, s5의 순(비내림차순)으로 나올 것이다. 이를 수정하기 위해, 각 섹션에는 (재배열 회로의 일례인) 크로스바 멀티플렉서(1010)가 제공되며, 이것은 그 섹션의 액세스 블록 990, 995, 1000, 1005의 출력을 재정렬할 수 있다. 그 다음에, 크로스바 멀티플렉서(1010)로부터의 출력은 스칼라 값을 제공할 수 있게 하는, 양쪽 추가 멀티플렉서(1015)에 제공된다. 출력은 또한 함께 병합되고 그룹 판독 포트에 제공되어, 4개의 선택된 값을 모두 (즉, 열 또는 행으로부터) 판독할 수 있게 한다.
도 24는 일 실시 예에 따른 레지스터 액세스 회로의 일례로서의 기록 액세스 회로를 개략적으로 도시한 것이다. 도 23에 도시된 판독 회로와 마찬가지로, 도 24에 도시된 기록 회로는 부분들의 재정렬과 관련하여 유사한 문제를 갖는다. 특히, 부분들은 한개의 순서로 벡터 레지스터 파일(900)에 제공될 수도 있지만, 전술한 배선의 결과로서 재정렬되어야 할 수도 있다. 이를 보상하기 위해, 벡터 레지스터 파일(900)에 기록되기 전에 입력들을 재배열하기 위해 크로스바 멀티플렉서(1020)(재배열 회로의 예)가 제공된다.
도 25는 일 실시 예에 따른 제조 방법을 나타내는 흐름도(1025)이다. 제1 스텝(1030)에서는, 벡터 레지스터의 세트가 제공된다. 벡터 레지스터들의 각각은 복수의 부분을 포함하는 벡터를 저장하도록 배열된다. 제2 스텝(1035)에서는, 벡터 레지스터들의 각 섹션에 대한 레지스터 액세스 회로가 제공된다. 제3 스텝(1040)에서는, 액세스 블록들의 각각은 다른 벡터 레지스터들 중 적어도 하나에 액세스할 때보다 벡터 레지스터들 중 하나에 액세스할 때 상이한 열의 벡터 레지스터들의 부분들에 액세스하도록 배열된다. 결과적으로, 레지스터 액세스 회로는 벡터 레지스터들 또는 열들 중 어느 한개에서 벡터 레지스터들의 부분들에 동시에 액세스하도록 배열된다.
도 26은 사용될 수 있는 가상 머신 구현을 나타낸다. 앞선 기술된 실시 예는 관련된 기술을 지원하는 특정 프로세싱 하드웨어를 동작시키는 장치 및 방법의 관점에서 본 발명을 구현하지만, 하드웨어 디바이스의 소위 가상 머신 구현을 제공하는 것도 가능하다. 이들 가상 머신 구현은 가상 머신 프로그램(1300)을 지원하는 호스트 오퍼레이팅 시스템(1400)을 실행하는 호스트 프로세서(1500)상에서 실행된다. 일반적으로, 크고 강력한 프로세서는 적절한 속도로 실행되는 가상 머신 구현을 제공해야 하지만, 이러한 접근법은 호환성 또는 재사용 이유로 또 다른 프로세서에 고유한 코드를 실행하려고 하는 경우와 같이, 특정 상황에서 정당화될 수 있다. 가상 머신 프로그램(1300)은 가상 머신 프로그램(1300)에 의해 모델링되는 디바이스인 실제 하드웨어에 의해 제공될 하드웨어 인터페이스와 동일한 게스트 프로그램(guest program)(1200)에 가상 하드웨어 인터페이스를 제공한다. 따라서, 상술한 재배열 명령을 포함하는 프로그램 명령들은 가상 머신 하드웨어와의 상호작용을 모델링하기 위해 가상 머신 프로그램(1300)을 사용하여 게스트 프로그램(1200) 내에서 실행될 수 있다. 게스트 프로그램(1200)은 베어 메탈(bare metal) 프로그램일 수 있거나, 또는 택일적으로 호스트 OS(1400)가 가상 머신 애플리케이션(1300)을 실행하는 방법과 유사한 방식으로 애플리케이션을 실행하는 게스트 오퍼레이팅 시스템일 수 있다. 또한, 상이한 타입의 가상 머신이 있으며, 일부 타입에서는, 가상 머신은 호스트 OS(1400)에 대한 필요 없이 호스트 하드웨어(1500)상에서 직접 실행된다.
본원에서, "... 구성된(to configured)"라는 단어는 장치의 구성 요소가 정의된 동작을 수행할 수 있는 구성을 갖다는 것을 의미하는 것으로 사용된다. 이 문맥에서, "구성"은 하드웨어 또는 소프트웨어의 상호접속의 방식 또는 배열을 의미하다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 또는 프로세서 또는 다른 처리 장치가 기능을 수행하도록 프로그래밍될 수 있다. "구성된(configured to)"은 정의된 동작을 제공하기 위해 장치 소자가 어떤 식으로든 변경되어야 함을 의미하지는 않는다.
본 발명의 예시적인 실시 예가 첨부된 도면을 참조하여 본원에서 상세하게 설명되었지만, 본 발명은 이러한 정확한 실시 예에 한정되지 않으며, 다양한 변경, 추가 및 수정이 첨부된 청구항에 의해 정의된 바와 같이 본 발명의 범위 및 사상으로부터 벗어나지 않고 본 기술분야의 당업자에 의해 본원에서 달성될 수 있음을 이해해야 한다. 예를 들어, 종속항의 특징들의 다양한 조합이 본 발명의 범위를 벗어나지 않고 독립항의 특징으로 만들어질 수 있다.

Claims (20)

  1. 복수의 부분들을 포함하는 벡터를 각각 저장하도록 구성되며, 각 벡터의 동일한 부분을 저장하도록 각각 배열되어 있는 복수의 열들로 논리적으로 분할되는, 벡터 레지스터들의 세트와,
    복수의 액세스 블록들을 포함하는 레지스터 액세스 회로를 구비하고,
    각 액세스 블록은, 상기 벡터 레지스터들 중 한개에 액세스할 때, 상기 벡터 레지스터들 중 적어도 한개의 다른 벡터 레지스터에 액세스할 때와는 상이한 열의 부분에 액세스하도록 구성되며,
    상기 레지스터 액세스 회로는 상기 벡터 레지스터들 및 상기 열들 중 어느 한개의 부분들에 동시에 액세스하도록 구성되는, 장치.
  2. 제 1 항에 있어서,
    상기 벡터 레지스터들의 세트는 적어도 한개의 섹션을 포함하며, 각 섹션은 상이한 열들을 포함하고,
    상기 장치는 각 섹션에 대한 레지스터 액세스 회로를 구비하고, 각 레지스터 액세스 회로는 이 레지스터 액세스 회로와 관련된 섹션의 부분들에 액세스하도록 구성되는, 장치.
  3. 제 2 항에 있어서,
    각 액세스 블록은, 상기 벡터 레지스터들 중 하나에 액세스할 때, 각 섹션 내에 포함된 열들의 수에서 1을 뺀 것과 같은 수의 다른 벡터 레지스터들에 액세스할 때와 상이한 열의 부분에 액세스하도록 구성되는, 장치.
  4. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    제1 액세스 블록은 제1 벡터 레지스터의 제1 열에 액세스하고 제2 벡터 레지스터의 제2 열에 액세스하도록 구성되고, 제2 액세스 블록은 상기 제1 벡터 레지스터의 상기 제2 열에 액세스하고 상기 제2 벡터 레지스터의 상기 제1 열에 액세스하도록 구성되는, 장치.
  5. 제 2 항 또는 제 3 항에 있어서,
    각 섹션은 논리적으로 N개의 열들로 분할되고,
    상기 N개의 열들은 log2(N) 레벨을 갖는 네스트된 구조(nested sturcture)로 논리적으로 배열되며, 이때 N은 4보다 크거나 같고 2의 정수 거듭제곱이며,
    제1 레벨에서, 상기 N개의 열들은 상기 제1 레벨에 대한 적어도 한개의 열의 제1 세트와 상기 제1 레벨에 대한 적어도 한개의 열의 제2 세트 사이에서 균등하게 분할되며,
    각 부모 레벨의 적어도 한개의 열의 세트들의 각각은 대응하는 자식 레벨에 대한 적어도 한개의 열의 제1 세트와 이 대응하는 자식 레벨에 대한 적어도 한개의 열의 제2 세트로 다시 동등하게 분할되며,
    상기 액세스 블록들의 각각은, 각 벡터 레지스터에 대해, 한개의 열을 방문하도록 구성되고, 상기 한개의 열은, 각 레벨에 대해, 소정의 수의 벡터 레지스터들의 절반에 대한 적어도 한개의 열의 제2 세트들을 방문하기 전에 소정의 수의 벡터 레지스터들의 절반에 대한 적어도 한개의 열의 제1 세트들을 방문하는 제약에 의해 고유하게 식별되며,
    상기 소정의 수는 2X와 동일하고, 이때 X는 레벨마다 상이하며 1 내지 log2(N)의 범위 내에 있는, 장치.
  6. 제 5 항에 있어서,
    상기 벡터 레지스터들의 세트는 2개의 섹션을 포함하고,
    N은 값 4를 갖는, 장치.
  7. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 레지스터 액세스 회로는 상기 벡터 레지스터들에 저장된 데이터 요소들을 출력하는 판독 액세스 회로를 구비하고,
    상기 레지스터 액세스 회로는 상기 벡터 레지스터들에 데이터 요소들을 입력하는 기록 액세스 회로를 구비하는, 장치.
  8. 제 7 항에 있어서,
    상기 판독 액세스 회로는 상기 복수의 열들의 각각에 대해 한개의 액세스 블록을 구비하는, 장치.
  9. 제 7 항 또는 제 8 항에 있어서,
    상기 판독 액세스 회로는 상기 복수의 열들의 각각에 대해 최대 한개의 액세스 블록을 구비하는, 장치.
  10. 제 7 항 내지 제 9 항 중 어느 한 항에 있어서,
    상기 판독 액세스 회로 내의 액세스 블록들은 멀티플렉서들을 구비하는, 장치.
  11. 제 7 항 내지 제 10 항 중 어느 한 항에 있어서,
    상기 벡터 레지스터들의 세트는 적어도 한개의 섹션을 구비하고, 이때 각 섹션은 상이한 열들로 구성되며,
    상기 장치는 각 섹션에 대한 레지스터 액세스 회로를 구비하고, 각 레지스터 액세스 회로는 이 레지스터 액세스 회로와 관련된 섹션의 부분들에 액세스하도록 구성되며,
    각 섹션에 대해, 상기 판독 액세스 회로는 상기 판독 액세스 회로 내의 액세스 블록들의 각각으로부터의 출력들을 재배열하는 재배열 회로를 구비하는, 장치.
  12. 제 11 항에 있어서,
    상기 재배열 회로는 크로스바 멀티플렉서인, 장치.
  13. 제 7 항에 있어서,
    상기 기록 액세스 회로는 상기 복수의 열들의 각각에 대해 한개의 액세스 블록을 구비하는, 장치.
  14. 제 12 항 또는 제 13 항에 있어서,
    상기 기록 액세스 회로는 상기 복수의 열들의 각각에 대해 최대 한개의 액세스 블록을 구비하는, 장치.
  15. 제 13 항 또는 제 14 항에 있어서,
    상기 벡터 레지스터들의 세트는 적어도 한개의 섹션을 구비하고, 이때 각 섹션은 상이한 열들을 포함하며,
    상기 장치는 각 섹션에 대한 레지스터 액세스 회로를 구비하고, 각 레지스터 액세스 회로는 이 레지스터 액세스 회로와 관련된 섹션의 부분들에 액세스하도록 구성되며,
    각 섹션에 대해, 상기 기록 액세스 회로는 상기 기록 액세스 회로 내의 액세스 블록들의 각각으로의 입력들을 재배열하는 재배열 회로를 구비하는, 장치.
  16. 제 15 항에 있어서,
    상기 재배열 회로는 크로스바 멀티플렉서인, 장치.
  17. 제 1 항 내지 제 16 항 중 어느 한 항에 있어서,
    상기 벡터 레지스터들은 128-bit 레지스터들인, 장치.
  18. 제 1 항 내지 제 17 항 중 어느 한 항에 있어서,
    상기 벡터 레지스터들의 각각은 복수의 32-bit 레지스터들을 구비하는, 장치.
  19. 장치를 제조하는 방법으로서,
    복수의 부분들을 포함하는 벡터를 각각 저장하도록 구성되고, 각 벡터의 동일한 부분을 저장하도록 각각 배열되는 복수의 열들로 논리적으로 분할되는, 벡터 레지스터들의 세트를 제공하는 단계와,
    복수의 액세스 블록들을 포함하는 레지스터 액세스 회로를 제공하는 단계를 포함하고,
    각 액세스 블록은, 상기 벡터 레지스터들 중 한개에 액세스할 때, 상기 벡터 레지스터들 중 적어도 한개의 다른 벡터 레지스터에 액세스할 때와는 상이한 열의 부분에 액세스하도록 구성되며,
    상기 레지스터 액세스 회로는 상기 벡터 레지스터들 및 상기 열들 중 어느 한개의 부분들에 동시에 액세스하도록 구성되는, 제조방법.
  20. 복수의 부분들을 포함하는 벡터를 각각 저장하고, 각 벡터의 동일한 부분을 저장하도록 각각 배열되는 복수의 열들로 논리적으로 분할되는, 벡터 레지스터 수단들의 세트와,
    상기 벡터 레지스터 수단들 및 상기 열들 중 어느 한개의 부분들에 동시에 액세스하고, 상기 벡터 레지스터들 중 한개의 벡터 레지스터에 액세스할 때, 상기 벡터 레지스터들 중 적어도 한개의 다른 벡터 레지스터에 액세스할 때와는 상이한 열의 부분에 액세스하기 위한 복수의 액세스 블록 수단을 포함하는 레지스터 액세스 수단을 구비하는, 장치.
KR1020197003387A 2016-07-08 2017-06-15 벡터 레지스터 액세스 KR102379885B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1611946.3A GB2552154B (en) 2016-07-08 2016-07-08 Vector register access
GB1611946.3 2016-07-08
PCT/GB2017/051752 WO2018007784A1 (en) 2016-07-08 2017-06-15 Vector register access

Publications (2)

Publication Number Publication Date
KR20190026830A true KR20190026830A (ko) 2019-03-13
KR102379885B1 KR102379885B1 (ko) 2022-03-30

Family

ID=56890758

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197003387A KR102379885B1 (ko) 2016-07-08 2017-06-15 벡터 레지스터 액세스

Country Status (7)

Country Link
US (1) US10963251B2 (ko)
EP (1) EP3482289A1 (ko)
JP (2) JP7213095B2 (ko)
KR (1) KR102379885B1 (ko)
CN (1) CN109416634B (ko)
GB (1) GB2552154B (ko)
WO (1) WO2018007784A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113808000B (zh) * 2021-11-19 2022-04-26 北京壁仞科技开发有限公司 数据管理装置及数据管理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010040919A (ko) * 1998-02-13 2001-05-15 어드밴스드 마이크로 디바이시즈, 인코포레이티드 동일한 논리 공간을 점유하는 다중 레지스터 파일을포함하는 마이크로프로세서
KR20080042837A (ko) * 2005-08-11 2008-05-15 코레소닉 에이비 복소 벡터 명령을 실행하도록 구성된 클러스터된 simd마이크로아키텍쳐를 포함하는 프로그램 가능한 디지털 신호프로세서
KR20150070302A (ko) * 2012-10-18 2015-06-24 퀄컴 인코포레이티드 벡터 레지스터 파일의 엘리먼트 뱅크에의 어드레스 라인의 선택적 커플링

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58134357A (ja) * 1982-02-03 1983-08-10 Hitachi Ltd ベクトルプロセッサ
US5019968A (en) * 1988-03-29 1991-05-28 Yulan Wang Three-dimensional vector processor
US5887183A (en) * 1995-01-04 1999-03-23 International Business Machines Corporation Method and system in a data processing system for loading and storing vectors in a plurality of modes
US6901422B1 (en) * 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US6898691B2 (en) 2001-06-06 2005-05-24 Intrinsity, Inc. Rearranging data between vector and matrix forms in a SIMD matrix processor
GB2383145B (en) 2001-10-31 2005-09-07 Alphamosaic Ltd Data access in a processor
US6573846B1 (en) * 2001-12-31 2003-06-03 Apple Computer, Inc. Method and apparatus for variable length decoding and encoding of video streams
US20110087859A1 (en) 2002-02-04 2011-04-14 Mimar Tibet System cycle loading and storing of misaligned vector elements in a simd processor
US7386703B2 (en) * 2003-11-18 2008-06-10 International Business Machines Corporation Two dimensional addressing of a matrix-vector register array
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
JP3985797B2 (ja) * 2004-04-16 2007-10-03 ソニー株式会社 プロセッサ
US7284092B2 (en) * 2004-06-24 2007-10-16 International Business Machines Corporation Digital data processing apparatus having multi-level register file
US9557994B2 (en) 2004-07-13 2017-01-31 Arm Limited Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number
US20070011442A1 (en) * 2005-07-06 2007-01-11 Via Technologies, Inc. Systems and methods of providing indexed load and store operations in a dual-mode computer processing environment
US8898212B2 (en) 2008-10-24 2014-11-25 Freescale Semiconductor, Inc Methods and apparatus for reordering data
GB2470780B (en) * 2009-06-05 2014-03-26 Advanced Risc Mach Ltd A data processing apparatus and method for performing a predetermined rearrangement operation
US20110072236A1 (en) * 2009-09-20 2011-03-24 Mimar Tibet Method for efficient and parallel color space conversion in a programmable processor
GB2476800A (en) * 2010-01-07 2011-07-13 Linear Algebra Technologies Ltd Sparse matrix vector multiplier using a bit map of non-zero elements to control scheduling of arithmetic operations
CN102012803B (zh) * 2010-11-25 2014-09-10 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
US9098265B2 (en) * 2012-07-11 2015-08-04 Arm Limited Controlling an order for processing data elements during vector processing
CN107562444B (zh) 2012-12-26 2020-12-18 英特尔公司 合并相邻的聚集/分散操作
US20150356054A1 (en) 2013-01-10 2015-12-10 Freescale Semiconductor, Inc. Data processor and method for data processing
CN103279327B (zh) * 2013-04-28 2015-11-25 中国人民解放军信息工程大学 面向异构simd扩展部件的自动向量化方法
CN103389967B (zh) * 2013-08-21 2016-06-01 中国人民解放军国防科学技术大学 一种基于sram的矩阵转置的装置及方法
US9207880B2 (en) * 2013-12-27 2015-12-08 Intel Corporation Processor with architecturally-visible programmable on-die storage to store data that is accessible by instruction
JP6253514B2 (ja) 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ
US9996347B2 (en) * 2014-12-24 2018-06-12 Intel Corporation Hardware apparatuses and methods relating to elemental register accesses
US9952831B1 (en) * 2017-02-16 2018-04-24 Google Llc Transposing in a matrix-vector processor

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010040919A (ko) * 1998-02-13 2001-05-15 어드밴스드 마이크로 디바이시즈, 인코포레이티드 동일한 논리 공간을 점유하는 다중 레지스터 파일을포함하는 마이크로프로세서
KR20080042837A (ko) * 2005-08-11 2008-05-15 코레소닉 에이비 복소 벡터 명령을 실행하도록 구성된 클러스터된 simd마이크로아키텍쳐를 포함하는 프로그램 가능한 디지털 신호프로세서
KR20150070302A (ko) * 2012-10-18 2015-06-24 퀄컴 인코포레이티드 벡터 레지스터 파일의 엘리먼트 뱅크에의 어드레스 라인의 선택적 커플링

Also Published As

Publication number Publication date
JP2022062067A (ja) 2022-04-19
JP2019519864A (ja) 2019-07-11
US20190250914A1 (en) 2019-08-15
GB201611946D0 (en) 2016-08-24
JP7213095B2 (ja) 2023-01-26
EP3482289A1 (en) 2019-05-15
CN109416634B (zh) 2023-07-18
WO2018007784A1 (en) 2018-01-11
KR102379885B1 (ko) 2022-03-30
GB2552154B (en) 2019-03-06
GB2552154A (en) 2018-01-17
US10963251B2 (en) 2021-03-30
CN109416634A (zh) 2019-03-01

Similar Documents

Publication Publication Date Title
KR102379896B1 (ko) 재배열 동작을 수행하기 위한 장치 및 방법
US9557994B2 (en) Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number
US7219214B2 (en) Data processing apparatus and method for moving data elements between a chosen lane of parallel processing in registers and a structure within memory
CN114003547A (zh) 可重构并行处理
US20050198473A1 (en) Multiplexing operations in SIMD processing
GB2411973A (en) Constant generation in SIMD processing
GB2409059A (en) A data processing apparatus and method for moving data between registers and memory
GB2411975A (en) Arithmetic data processing apparatus for returning the high half of a result after data processing
WO2017021675A1 (en) Element size increasing instruction
GB2411976A (en) Moving data between registers and memory using an alignment specifier
GB2411974A (en) Performing data shift operations in parallel
JP2022062067A (ja) ベクトルレジスタのアクセス
KR102591988B1 (ko) 데이터 처리장치에서의 벡터 인터리빙
JPH0218732B2 (ko)

Legal Events

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