KR20240065083A - 순열 명령 - Google Patents

순열 명령 Download PDF

Info

Publication number
KR20240065083A
KR20240065083A KR1020247008792A KR20247008792A KR20240065083A KR 20240065083 A KR20240065083 A KR 20240065083A KR 1020247008792 A KR1020247008792 A KR 1020247008792A KR 20247008792 A KR20247008792 A KR 20247008792A KR 20240065083 A KR20240065083 A KR 20240065083A
Authority
KR
South Korea
Prior art keywords
register
permutation
elements
instruction
parameter
Prior art date
Application number
KR1020247008792A
Other languages
English (en)
Inventor
스리제쉬 수다르사난
디팍 매튜
마크 호프만
제랄드 스위니
순다르 라잔 발라수브라마니안
홍펑 동
유롱 쑨
세예드메흐디 사데그자데
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20240065083A publication Critical patent/KR20240065083A/ko

Links

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/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
    • 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/3012Organisation of register space, e.g. banked or distributed register file

Landscapes

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

Abstract

디바이스는 벡터 레지스터 파일, 메모리 및 프로세서를 포함한다. 벡터 레지스터 파일은 복수의 벡터 레지스터들을 포함한다. 메모리는 순열 명령을 저장하도록 구성된다. 프로세서는 순열 명령의 주기성 파라미터에 액세스하도록 구성된다. 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 복수의 데이터 소스들의 카운트를 나타낸다. 프로세서는 또한, 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해, 복수의 데이터 소스들의 카운트에 적어도 부분적으로 기초하여, 복수의 데이터 소스들 중 데이터 소스를 선택하고, 선택된 데이터 소스의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅하도록, 순열 명령을 실행하도록 구성된다.

Description

순열 명령
[0001] 본 출원은 2021년 9월 24일자로 출원된 공동 소유의 미국 정규 특허 출원 제17/448,816호로부터의 우선권의 이익을 주장하며, 그 내용은 그 전체가 인용에 의해 본원에 명백히 포함된다.
[0002] 본 개시내용은 일반적으로 순열 명령(permutation instruction)에 관한 것이다.
[0003] 기술의 진보들은 더 작고 더 강력한 컴퓨팅 디바이스들을 초래하였다. 예를 들어, 작고 경량이며 사용자들에 의해 쉽게 휴대되는 모바일 폰 및 스마트 폰과 같은 무선 전화들, 태블릿들 및 랩탑 컴퓨터들을 포함하여 다양한 휴대용 개인 컴퓨팅 디바이스들이 현재 존재한다. 이러한 디바이스들은 무선 네트워크들을 통해 음성 및 데이터 패킷들을 전달할 수 있다. 추가로, 이러한 많은 디바이스들은 디지털 스틸 카메라, 디지털 비디오 카메라, 디지털 레코더 및 오디오 파일 플레이어와 같은 추가 기능을 통합한다. 또한, 이러한 디바이스들은 인터넷에 액세스하는 데 사용될 수 있는 웹 브라우저 애플리케이션과 같은 소프트웨어 애플리케이션들을 포함하여 실행 가능한 명령들을 프로세싱할 수 있다. 이와 같이, 이러한 디바이스들은 상당한 컴퓨팅 기능들을 포함할 수 있다.
[0004] 이러한 컴퓨팅 디바이스들은 다양한 시간들에 캡처된 센서 데이터와 같은 다수의 데이터 값들에 대해 동일한 동작들(예를 들어, 필터링)을 수행하는 기능을 종종 통합한다. 동작을 수행하기 위해 메모리로부터 각각의 데이터 값을 순차적으로 검색하는 것은 시간 소모적이고 일부 실시간 애플리케이션들을 비실용적으로 만들 수 있다.
[0005] 본 개시내용의 일 구현에 따르면, 디바이스는 벡터 레지스터 파일, 메모리 및 프로세서를 포함한다. 벡터 레지스터 파일은 복수의 벡터 레지스터들을 포함한다. 메모리는 순열 명령을 저장하도록 구성된다. 프로세서는 순열 명령의 주기성 파라미터(periodicity parameter)에 액세스하도록 구성된다. 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 복수의 데이터 소스들의 카운트(count)를 나타낸다. 프로세서는 또한, 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소(element)들 중 각각의 특정 요소에 대해, 복수의 데이터 소스들의 카운트에 적어도 부분적으로 기초하여 복수의 데이터 소스들 중 데이터 소스를 선택하고, 선택된 데이터 소스의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅(populate)하도록, 순열 명령을 실행하도록 구성된다.
[0006] 본 개시내용의 다른 구현에 따르면, 방법은 디바이스에서, 순열 명령에 액세스하는 단계를 포함한다. 본 방법은 디바이스에서 순열 명령의 주기성 파라미터에 액세스하는 단계를 추가로 포함한다. 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 복수의 벡터 레지스터들 중의 벡터 레지스터들의 카운트를 나타낸다. 본 방법은 또한, 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해, 벡터 레지스터들의 카운트에 적어도 부분적으로 기초하여 복수의 벡터 레지스터들 중의 벡터 레지스터를 선택하고, 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅하도록 순열 명령을 실행하는 단계를 포함한다.
[0007] 본 개시내용의 다른 구현에 따르면, 비-일시적인 컴퓨터-판독가능 매체는 명령들을 저장하고, 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금 순열 명령의 주기성 파라미터에 액세스하게 한다. 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 복수의 벡터 레지스터들 중의 벡터 레지스터들의 카운트를 나타낸다. 명령들은 또한, 프로세서에 의해 실행될 때 프로세서로 하여금 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해, 벡터 레지스터들의 카운트에 적어도 부분적으로 기초하여 복수의 벡터 레지스터들 중의 벡터 레지스터를 선택하고, 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅하도록 순열 명령을 실행하게 한다.
[0008] 본 개시내용의 다른 구현에 따르면, 장치는 순열 명령의 주기성 파라미터에 액세스하기 위한 수단을 포함한다. 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 복수의 벡터 레지스터들 중의 벡터 레지스터들의 카운트를 나타낸다. 장치는 또한, 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해, 벡터 레지스터들의 카운트에 적어도 부분적으로 기초하여 복수의 벡터 레지스터들 중의 벡터 레지스터를 선택하고, 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅하도록 순열 명령을 실행하기 위한 수단을 포함한다.
[0009] 본 개시내용의 다른 양태들, 이점들 및 특징들은 다음 섹션들: 도면들의 간단한 설명, 상세한 설명 및 청구항들을 포함하는 전체 출원의 검토 후에 명백해질 것이다.
[0010] 도 1은 본 개시내용의 일부 예들에 따라 순열 명령을 실행하도록 동작 가능한 디바이스의 특정의 예시적인 양태의 블록도이다.
[0011] 도 2는 본 개시내용의 일부 예들에 따라 도 1의 디바이스에 의한 순열 명령의 실행의 예의 예시적인 양태의 도면이다.
[0012] 도 3은 본 개시내용의 일부 예들에 따라 다른 순열 명령을 실행하도록 동작 가능한 도 1의 디바이스의 예시적인 양태의 블록도이다.
[0013] 도 4는 본 개시내용의 일부 예들에 따라 도 1 및 도 3의 디바이스에 의한 순열 명령의 실행의 다른 예의 예시적인 양태의 도면이다.
[0014] 도 5는 본 개시내용의 일부 예들에 따라 도 1 및 도 3의 디바이스에 의한 순열 명령의 실행 동안 사용되는 레지스터 선택 데이터의 예의 예시적인 양태의 도면이다.
[0015] 도 6은 본 개시내용의 일부 예들에 따라 도 1의 디바이스에 의한 순열 명령의 실행의 예의 예시적인 양태의 도면이다.
[0016] 도 7은 본 개시내용의 일부 예들에 따라 도 1의 디바이스에 의한 순열 명령의 실행 이전의 회전 명령(rotation instruction)의 실행의 예의 예시적인 양태의 도면이다.
[0017] 도 8은 본 개시내용의 일부 예들에 따라 행렬 전치(matrix transpose)를 수행하기 위한 도 1의 디바이스에 의한 순열 명령의 실행의 예의 예시적인 양태의 도면이다.
[0018] 도 9는 본 개시내용의 일부 예들에 따라 행렬 전치를 수행하기 위한 도 1의 디바이스에 의한 순열 명령의 실행의 다른 예의 예시적인 양태의 도면이다.
[0019] 도 10은 본 개시내용의 일부 예들에 따라 도 1의 디바이스에 의해 수행될 수 있는 순열 명령을 실행하는 방법의 특정 구현의 도면이다.
[0020] 도 11은 본 개시내용의 일부 예들에 따라 순열 명령을 실행하도록 동작 가능한 디바이스의 특정의 예시적인 예의 블록도이다.
[0021] 메모리로부터 다양한 시간들에서 캡처된 센서 데이터와 같은 다수의 데이터 값들의 각각을 순차적으로 검색하고 검색된 각각의 데이터 값에 대해 동일한 동작(예를 들어, 필터링)을 수행하는 것은 시간 소모적일 수 있고 프로세서에서 만족스럽지 못한 동작 실행 속도를 초래할 수 있다. 벡터 레지스터들을 사용하여 순열 명령들을 수행하는 시스템들 및 방법들이 개시된다. 일부 시스템들에서, 동시에 메모리로부터 다수의 데이터 값들을 로딩하는 데 사용할 수 있는 벡터 레지스터들(예를 들어, 소스 벡터 레지스터들)을 사용하여 개선된 속도가 획득되고, 동작(예를 들어, 필터링 동작)이 소스 벡터 레지스터들의 요소들에 대해 병렬로 수행될 수 있다. 예를 들어, 후속 프로세싱을 위해 센서 데이터의 3 개의 데이터 값 중 하나는 선택(예를 들어, 필터링)되어야 한다. 특정 예에서, 센서 데이터의 0번째부터 31번째 데이터 값들은 제1 소스 벡터 레지스터로 로딩되고, 센서 데이터의 32번째부터 63번째 데이터 값들은 제2 소스 벡터 레지스터로 로딩되고, 센서 데이터의 64번째부터 95번째 데이터 값들은 제3 소스 벡터 레지스터로 로딩된다.
[0022] 일부 상황들에 있어서, 데이터 값들에 대한 컴퓨테이션들을 수행하기 전, 데이터 값들에 대한 컴퓨테이션들을 수행한 후, 또는 둘 모두에 있어서 소스 데이터의 데이터 값들을 필터링하고 재정렬함으로써 소스 데이터에 대한 동작들의 수행과 연관된 복잡성이 상당히 감소될 수 있다. 소스 데이터의 이러한 필터링 및 재정렬은 순열 명령을 사용하여 수행될 수 있다. 예를 들어, 순열 명령은 다운샘플링 연산(downsampling operation), 행렬 전치 또는 고속 푸리에 커널 연산 도중 또는 이들의 준비로 수행될 수 있다. 순열 명령은, 레지스터 순서 벡터 레지스터 및 요소 순서 벡터 레지스터와 함께 사용되어, 레지스터 순서 벡터 레지스터에 의해 표시된 레지스터 선택 순서에 기초하여 소스 벡터 레지스터들의 선택된 요소들을 제1 결과 벡터 레지스터로 복사(예컨대, 선택된 요소들로부터의 데이터 값들을 복사하고, 그리고 요소 순서 벡터 레지스터에 의해 표시된 요소 선택 순서에 기초하여 제1 결과 벡터 레지스터로부터의 엘리먼트들을 제2 결과 벡터 레지스터로 복사(예컨대, 요소들로부터 데이터 값들을 복사)할 수 있다.
[0023] 일부 양태들에서, 레지스터 순서 벡터 레지스터의 각각의 요소는 특정 소스 벡터 레지스터를 나타내는 값을 저장한다. 일 예에서, 레지스터 순서 벡터 레지스터는 레지스터 순서 벡터의 0번째, 3번째, 6번째 등의 요소들의 각각이 제1 소스 벡터 레지스터를 나타내는 값(예를 들어, 0)을 저장하고, 레지스터 순서 벡터의 1번째, 4번째, 7번째 등의 요소들의 각각이 제2 소스 벡터 레지스터를 나타내는 값(예를 들어, 1)을 저장하고, 레지스터 순서 벡터 레지스터의 2번째, 5번째, 8번째 등의 요소들의 각각이 제3 소스 벡터 레지스터를 나타내는 값(예를 들어, 2)을 저장하도록, 값들 0, 1, 2, 0, 1, 2, 0, 1, 2,...를 저장한다. 표시된 소스 레지스터의 대응하는 요소에 저장된 데이터 값은 제1 결과 벡터 레지스터의 대응하는 요소에 복사된다. 예를 들어, 레지스터 순서 벡터 레지스터의 0번째, 1번째, 2번째 요소들에 저장된 값들(예를 들어, )은 각각 제1 소스 벡터 레지스터, 제2 소스 벡터 레지스터 및 제3 소스 벡터 레지스터를 나타낸다. (강조(굵게 그리고 밑줄 표시)는 일부 요소들의 값들에 적용되며; 이러한 강조는 이러한 요소들에 대한 독자의 주의를 환기시키기 위해서만 제공되며, 이러한 요소들의 임의의 특정 속성 또는 이러한 요소들에 대해 수행되는 임의의 동작을 나타내지는 않음에 유의한다).
[0024] 레지스터 순서 벡터 레지스터에 기초하여, 제1 소스 벡터 레지스터의 0번째 요소에 저장된 값들(예를 들어, 센서 데이터의 0번째 데이터 값), 제2 소스 벡터 레지스터의 1번째 요소(예를 들어, 센서 데이터의 33번째 데이터 값) 및 제3 소스 벡터 레지스터의 2번째 요소(예를 들어, 센서 데이터의 66번째 데이터 값)는 제1 결과 벡터 레지스터의 0번째 요소, 1번째 요소 및 2번째 요소에 각각 복사된다.
[0025] 유사하게, 레지스터 순서 벡터 레지스터의 3번째, 4번째 및 5번째 요소들에 저장된 값들(예를 들어, )은 각각 제1 소스 벡터 레지스터, 제2 소스 벡터 레지스터 및 제3 소스 벡터 레지스터를 각각 나타낸다. 제1 소스 벡터 레지스터의 3번째 요소에 저장된 값(예를 들어, 센서 데이터의 3번째 데이터 값), 제2 소스 벡터 레지스터의 4번째 요소에 저장된 값(예를 들어, 센서 데이터의 36번째 데이터 값) 및 제3 소스 벡터 레지스터의 5번째 요소에 저장된 값(예를 들어, 센서 데이터의 69번째 데이터 값)은 제1 결과 벡터 레지스터의 3번째 요소, 4번째 요소 및 5번째 요소에 각각 복사된다. 이러한 방식으로, 소스 벡터 레지스터들에 저장된 모든 관심 데이터 값들은 제1 결과 벡터 레지스터에서 인터리빙(interleaving)된다. 예를 들어, 제1 결과 벡터 레지스터는 센서 데이터의 0번째, 33번째, 66번째, 3번째, 36번째, 69번째 등의 데이터 값들을 포함한다.
[0026] 요소 순서 벡터 레지스터의 각각의 요소는 제1 결과 벡터 레지스터의 특정 인덱스를 나타낸다. 데이터 값은 제1 결과 벡터 레지스터의 표시된 요소로부터 제2 결과 벡터 레지스터의 대응하는 요소로 복사된다. 일 예로서, 0 , 3 , 6 , 9, 12, 15, 18, 21, 24, 27, 1, 4, 7, 10, 13, 16,...의 값들을 저장하는 요소 순서 벡터 레지스터에 기초하여, 제1 결과 벡터 레지스터의 0번째 요소에 저장된 값(예를 들어, 센서 데이터의 0번째 데이터 값)은 제2 결과 벡터 레지스터의 0번째 요소에 복사되고, 제1 결과 벡터 레지스터의 3번째 요소에 저장된 값(예를 들어, 센서 데이터의 3번째 데이터)은 제2 결과 벡터 레지스터의 1번째 요소에 복사되고, 제1 결과 벡터 레지스터의 6번째 요소에 저장된 값(예를 들어, 센서 데이터의 6번째 데이터 값)은 제2 결과 벡터 레지스터의 2번째 요소에 복사되는 등이다. 예를 들어, 제1 소스 벡터 레지스터부터 제1 결과 벡터 레지스터의 모든 데이터 값들이 제2 결과 벡터 레지스터로 순서대로 복사된다. 유사하게, 제2 소스 벡터 레지스터의 모든 데이터 값들에 후속하여 제3 소스 벡터 레지스터의 모든 데이터 값들이 제1 결과 벡터 레지스터로부터 제2 결과 벡터 레지스터로 순서대로 복사된다. 제2 결과 벡터 레지스터는 센서 데이터의 앞선 데이터 값들로부터 센서 데이터의 더 늦은 데이터 값들로 순서대로 관심 데이터 값들을 포함한다.
[0027] 소스 벡터 레지스터들의 요소들에 저장된 데이터 값들은 제1 결과 벡터 레지스터에 병렬로 복사될 수 있고, 후속하여 제1 결과 벡터 레지스터로부터 제2 결과 벡터 레지스터로 병렬로 복사될 수 있다. 레지스터 순서 벡터 레지스터와 요소 순서 벡터 레지스터의 각각은 소스 벡터 레지스터만큼 많은 요소들을 포함한다.
[0028] 일부 경우들에서 레지스터 선택 순서 및 요소 선택 순서를 나타내기 위해 사용될 수 있는 주기성 파라미터(예를 들어, 스칼라 파라미터)를 포함하는 순열 명령이 개시된다. 레지스터 선택 순서 및 요소 선택 순서를 나타내기 위해 스칼라 주기성 파라미터를 사용하는 기술적 효과는 레지스터 순서 벡터 레지스터 및 요소 순서 벡터 레지스터가 사용되는 상술한 구현에 비해 메모리 사용량을 감소시키는 것이다.
[0029] 일부 예들에서, 순열 명령은 또한 레지스터 개시 파라미터(start parameter)를 포함한다. 레지스터 개시 파라미터는 제1 결과 벡터 레지스터의 초기 요소를 파퓰레이팅하는 데 사용되는 개시 소스 벡터 레지스터(예를 들어, 제1 소스 벡터 레지스터)를 나타낸다. 주기성 파라미터는 소스 데이터(예를 들어, 센서 데이터)를 포함하는 소스 벡터 레지스터의 카운트(예를 들어, 3 개의 소스 벡터 레지스터들)를 나타낸다.
[0030] 일부 예들에서, 명령 관리자는 개시 소스 벡터 레지스터(예를 들어, 벡터 레지스터 0) 및 소스 벡터 레지스터들의 카운트(예를 들어, 3)에 기초하여 레지스터 선택 순서를 결정한다. 예를 들어, 레지스터 선택 순서는 개시 소스 벡터 레지스터(예를 들어, 벡터 레지스터 0)로부터 시작하여 소스 벡터 레지스터들의 카운트에 도달될 때까지(예를 들어, 벡터 레지스터 1 및 벡터 레지스터 2) 후속 소스 벡터 레지스터들을 포함하며, 그 후 0, 1, 2, 0, 1, 2, 0, 1, 2 등의 레지스터 선택 순서와 같이 반복된다. 따라서, 주기성 파라미터는 (레지스터 순서 벡터 레지스터 대신) 사용되어 순차적이고 반복적인 레지스터 선택 순서를 나타낼 수 있다. 다른 예들에서, 명령 관리자는 소스 벡터 레지스터들의 카운트들을 레지스터 선택 순서들에 맵핑하는 레지스터 선택 데이터에 기초하여 레지스터 선택 순서를 결정한다.
[0031] 일부 예들에서, 순열 명령은 인터셉트 파라미터(intercept parameter), 스텝 파라미터(step parameter), 또는 둘 모두를 포함한다. 인터셉트 파라미터는 제2 결과 벡터 레지스터의 초기 요소(예를 들어, 0번째 요소)를 파퓰레이팅하는 데 사용되는 제1 결과 벡터 레지스터의 개시 요소(예를 들어, 0번째 요소)를 나타낸다. 스텝 파라미터는 제2 결과 벡터 레지스터의 후속 요소를 파퓰레이팅하는 데 사용되는 제1 결과 벡터 레지스터의 다음 요소에 대한 스텝(또한 "스텝 크기"라고 칭함)에 포함되는 요소들의 카운트(예를 들어, 3 개의 요소들)를 나타낸다. 스텝은 제2 결과 벡터 레지스터의 요소들이 파퓰레이팅될 때까지 제1 결과 벡터 레지스터의 끝에 도달 시 래핑 어라운드(wrapping around)한다.
[0032] 명령 관리자는 개시 요소(예를 들어, 요소 0)와 각각의 스텝에 포함되는 요소들의 카운트(예를 들어, 3 개의 요소들)에 기초하여 요소 선택 순서를 결정한다. 예를 들어, 요소 선택 순서는 개시 요소(예를 들어, 요소 0)로부터 시작하여 각각의 스텝에서의 후속 요소들을 포함한다(예를 들어, 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 1, 4, 7, 10, 13, 16,...). 따라서, 인터셉트 파라미터, 스텝 파라미터 또는 둘 모두가 균일하게 스테핑된(stepped) 요소 선택 순서를 나타내기 위해 (요소 순서 벡터 레지스터 대신) 사용될 수 있다.
[0033] 일부 양태들에서, 레지스터 개시 파라미터, 주기성 파라미터, 인터셉트 파라미터 및 스텝 파라미터의 각각은 스칼라 레지스터에 저장될 수 있는 스칼라 값에 대응한다. 레지스터 선택 순서를 나타내기 위해 2 개까지의 스칼라 값들(예를 들어, 개시 파라미터, 주기성 파라미터 또는 둘 모두)을 저장하는 것은 스칼라 값들의 훨씬 더 많은 카운트(예를 들어, 32)를 저장할 수 있는 벡터 레지스터(예를 들어, 레지스터 순서 벡터 레지스터)를 사용하는 것보다 적은 메모리를 사용한다. 유사하게, 요소 선택 순서를 나타내기 위해 2 개까지의 스칼라 값들(예를 들어, 인터셉트 파라미터, 스텝 파라미터 또는 둘 모두)을 저장하는 것은 훨씬 더 큰 카운트(예를 들어, 32)의 스칼라 값들을 저장할 수 있는 벡터 레지스터(예를 들어, 요소 순서 벡터 레지스터)를 사용하는 것보다 적은 메모리를 사용한다.
[0034] 본 개시내용의 특정 양태들이 도면들을 참조하여 아래에 설명된다. 설명에서, 공통의 특징은 공통 참조 번호들에 의해 지정된다. 본원에서 사용되는 바와 같이, 다양한 용어는 특정한 구현을 설명하기 위한 목적으로만 사용되며, 구현들을 제한하려는 의도는 아니다. 예를 들어, 단수형("a", "an" 및 "the")은 문맥상 달리 명백히 명시되지 않는 한 복수형도 포함하도록 의도된다. 추가로, 본원에 설명된 일부 특징들은 일부 구현들에서는 단수이고 다른 구현들에서는 복수이다. 예시하자면, 도 11은 하나 이상의 마이크로폰들(도 11의 "마이크로폰(들)"(1190))을 포함하는 디바이스(1100)를 묘사하며, 이는 일부 구현들에서 디바이스(1100)가 단일 마이크로폰(1190)을 포함하고 다른 구현들에서는 디바이스(1100)가 다수의 마이크로폰들(1190)을 포함한다는 것을 나타낸다.
[0035] 본원에 사용되는 바와 같이, "포함하다(comprise)", "포함하다(comprises)" 및 "포함하는(comprising)"은 "포함하다(include)", "포함하다(includes)" 또는 "포함하는(including)"과 상호 교환 가능하게 사용될 수 있다. 또한, "여기서(wherein)"라는 용어는 "여기서(where)"와 상호 교환 가능하게 사용될 수 있다. 본원에 사용되는 바와 같이, "예시적인"은 예, 구현 및/또는 양태를 나타내며, 선호도 또는 바람직한 구현을 제한하거나 나타내는 것으로 해석되어서는 안된다. 본원에서 사용되는 바와 같이, 구조, 구성 요소, 동작 등과 같은 요소를 수식하는 데 사용되는 서수 용어(예를 들어, "제1", "제2", "제3" 등)는 그 자체로 다른 요소에 대한 해당 요소의 임의의 우선 순위 또는 순서를 나타내는 것이 아니라 동일한 이름을 갖는(그러나 서수 용어 사용의 경우) 다른 요소로부터 해당 요소를 단지 구별할 뿐이다. 본원에서 사용되는 바와 같이, "세트"라는 용어는 특정 요소의 하나 이상을 지칭하며, "복수"라는 용어는 다수(예를 들어, 2 개 이상)의 특정 요소를 지칭한다.
[0036] 본원에서 사용되는 바와 같이, "커플링된(coupled)"은 "통신 가능하게 커플링된", "전기적으로 커플링된" 또는 "물리적으로 커플링된"을 포함할 수 있고, 또한(또는 대안적으로) 이들의 임의의 조합들을 포함할 수 있다. 2 개의 디바이스들(또는 구성 요소들)은 하나 이상의 다른 디바이스들, 구성 요소들, 와이어들, 버스들, 네트워크들(예를 들어, 유선 네트워크, 무선 네트워크, 또는 이들의 조합) 등을 통해 직접적으로 또는 간접적으로 커플링(예를 들어, 통신 가능하게 커플링, 전기적으로 커플링 또는 물리적으로 커플링)될 수 있다. 전기적으로 커플링된 2 개의 디바이스들(또는 구성 요소들)은 동일한 디바이스 또는 상이한 디바이스들에 포함될 수 있으며, 예시적이며 비제한적인 예들로서 전자 기기들, 하나 이상의 커넥터들 또는 유도성 커플링을 통해 연결될 수 있다. 일부 구현들에서, 전기 통신과 같이 통신 가능하게 커플링된 2 개의 디바이스들(또는 구성 요소들)은 하나 이상의 와이어들, 버스들, 네트워크들 등을 통해 직접적으로 또는 간접적으로 신호들(예를 들어, 디지털 신호들 또는 아날로그 신호들)을 전송하고 수신할 수 있다. 본원에서 사용되는 바와 같이, "직접 커플링된"은 개재 구성 요소들 없이 커플링(예를 들어, 통신 가능하게 커플링, 전기적으로 커플링 또는 물리적으로 커플링)된 2 개의 디바이스들을 포함할 수 있다.
[0037] 본 개시내용에서, "결정하는", "계산하는", "추정하는", "시프팅하는", "조정하는" 등과 같은 용어들은 하나 이상의 동작들이 어떻게 수행되는지를 설명하는 데 사용될 수 있다. 이러한 용어들은 제한적인 것으로 해석되어서는 안되며, 유사한 동작들을 수행하기 위해 다른 기법들이 이용될 수도 있다는 점에 유의해야 한다. 추가적으로, 본원에서 지칭되는 바와 같이, "생성하는", "계산하는", "추정하는", "사용하는", "선택하는", "액세스하는" 및 "결정하는"은 상호 교환 가능하게 사용될 수 있다. 예를 들어, 파라미터(또는 신호)를 '생성하는', '계산하는', '추정하는', 또는 '결정하는' 것은 파라미터(또는 신호)를 능동적으로 생성하거나, 추정하거나, 계산하거나 결정하는 것을 지칭할 수 있거나, 다른 구성 요소 또는 디바이스에 의해서와 같이 이미 생성된 파라미터(또는 신호)를 사용하거나, 선택하거나 액세스하는 것을 지칭할 수 있다.
[0038] 도 1을 참조하면, 디바이스(102)의 특정의 예시적인 양태의 도면(100)이 도시된다. 디바이스(102)는 메모리(132)에 커플링된 프로세서(190)를 포함한다. 특정 양태에서, 메모리(132)는 순열 명령(134)을 저장하도록 구성된다. 일부 구현들에서, 순열 명령(134)은 명령 세트 아키텍처(ISA: instruction set architecture)에 추가될 수 있다. 일부 구현들에서, 프로세서(190)는 ISA를 구현하는 벡터 프로세서에 대응한다. 예를 들어, 프로세서(190)는 벡터들에 대해 효율적으로 동작하도록 구성된다. 특정 양태에서, 프로세서(190)는 메모리(132)로부터 벡터 레지스터로 그리고 그 반대로 벡터(예를 들어, 큰 1차원 데이터 어레이)를 효율적으로 복사하고, 단일 명령 다중 데이터(SIMD: single instruction multiple data) 구성에서 다수의 병렬 컴퓨테이션 레인(lane)들을 사용하는 것과 같이 벡터 레지스터로부터 다수의 데이터 값들의 병렬 프로세싱을 수행하도록 구성된다.
[0039] 디바이스(102)는 또한 프로세서(190)에 커플링된 벡터 레지스터 파일(138)을 포함한다. 일부 구현들에서, 벡터 레지스터 파일(138)은 프로세서(190)에 통합된다. 벡터 레지스터 파일(138)은 복수의 벡터 레지스터들(142)을 포함한다. 일부 예들에서, 복수의 벡터 레지스터들(142)의 각각의 벡터 레지스터는 요소들의 동일한 카운트를 포함한다(예를 들어, 각각의 벡터 레지스터는 32 개의 데이터 값들을 보유하기 위해 32 개의 요소들을 포함하도록 크기가 지정됨). 본원의 예에서는 복수의 벡터 레지스터들(142)의 각각이 32 개의 요소들을 포함하는 것으로 설명되지만, 다른 예들에서는 복수의 벡터 레지스터들(142) 중 하나 이상이 32 개 미만의 요소들 또는 32 개 초과의 요소들을 포함할 수 있다.
[0040] 복수의 벡터 레지스터들(142)은 순열 명령(134)에 의해 프로세싱될 소스 데이터(예를 들어, 메모리(132)로부터 검색되거나 다른 디바이스로부터 수신됨)를 저장하도록 구성된 복수의 소스 벡터 레지스터들(146)을 포함한다. 특정 양태에서, 복수의 소스 벡터 레지스터들(146)은 소스 벡터 레지스터(146A) 및 소스 벡터 레지스터(146N)를 포함하는 하나 이상의 추가 소스 벡터 레지스터들(146)을 포함한다.
[0041] 복수의 벡터 레지스터들(142)은 순열 명령(134)의 실행의 중간 결과 또는 최종 결과를 저장하도록 구성된 복수의 순열 결과 레지스터들(148)을 포함한다. 예를 들어, 복수의 순열 결과 레지스터들(148) 중 순열 결과 레지스터(148A)는 순열 명령(134)의 중간 결과를 저장하도록 구성되고, 복수의 순열 결과 레지스터들(148) 중 순열 결과 레지스터(148B)는 순열 명령(134)의 최종 결과를 저장하도록 구성된다. 2 개의 벡터 레지스터들을 포함하는 복수의 순열 결과 레지스터들(148)이 예시적인 예로서 제공되며; 다른 예들에서 복수의 순열 결과 레지스터들(148)은 2 개 초과의 벡터 레지스터들을 포함할 수 있다.
[0042] 순열 명령(134)은 op코드(135) 및 레지스터 개시 파라미터(152), 주기성 파라미터(154), 인터셉트 파라미터(156) 또는 스텝 파라미터(158) 중 하나 이상을 포함한다. op코드(135)(예컨대, 연산 코드)는 순열 명령(134)의 식별자에 대응한다. 레지스터 개시 파라미터(152)는 복수의 소스 벡터 레지스터들(146) 중 하나(예를 들어, 소스 벡터 레지스터(146A))가 개시 레지스터(162)로서 지정된다는 것을 나타내도록 구성된다. 개시 레지스터(162)(예를 들어, 소스 벡터 레지스터(146A))는 순열 결과 레지스터(148A)의 초기 요소를 파퓰레이팅하는 데 사용된다. 예를 들어, 레지스터 개시 파라미터(152)는 개시 레지스터(162)로서 지정된 소스 벡터 레지스터(146)(예를 들어, 소스 벡터 레지스터(146A))의 인덱스를 나타낸다. 주기성 파라미터(154)는 순열 명령(134)에 의해 프로세싱될 소스 데이터(예를 들어, 센서 데이터)를 포함하는 복수의 벡터 레지스터들(142) 중 소스 벡터 레지스터(146)의 카운트(예를 들어, 벡터 레지스터 카운트(164))를 나타내도록 구성된다.
[0043] 인터셉트 파라미터(156)는 순열 결과 레지스터(148A)의 하나의 요소가 개시 요소(166)로서 지정됨을 나타내도록 구성된다. 개시 요소(166)는 순열 결과 레지스터(148B)의 초기 요소(예를 들어, 0번째 요소)를 파퓰레이팅하는 데 사용된다. 예를 들어, 인터셉트 파라미터(156)는 개시 요소(166)로서 지정된 순열 결과 레지스터(148A)의 요소의 인덱스를 나타낸다. 스텝 파라미터(158)는 순열 결과 레지스터(148B)의 후속 요소를 파퓰레이팅하는 데 사용되는 순열 결과 레지스터(148A)의 다음 요소에 대한 스텝에 포함될 순열 결과 레지스터(148A)의 요소들의 카운트에 대응하는 스텝 요소 카운트(168)를 나타내도록 구성된다.
[0044] 메모리(132)는 도 5를 참조하여 추가로 설명되는 바와 같이, 복수의 벡터 레지스터 카운트들(172)을 복수의 레지스터 선택 순서들(174)에 맵핑하는 레지스터 선택 데이터(176)를 저장하도록 구성된다. 예를 들어, 벡터 레지스터 카운트(172A)는 레지스터 선택 순서(174A)에 맵핑되고, 하나 이상의 추가 벡터 레지스터 카운트들(172)은 하나 이상의 추가 레지스터 선택 순서들에 맵핑되고, 벡터 레지스터 카운트(172N)는 레지스터 선택 순서(174N)에 맵핑되거나, 이들의 조합으로 이루어진다. 특정 구현에서, 벡터 레지스터 파일(138)의 임의의 벡터 레지스터들은 소스 벡터 레지스터로서 사용될 수 있고, 레지스터 선택 데이터(176)는 임의의 개수의 벡터 레지스터 카운트들에 대한 레지스터 선택 순서들에 대한 맵핑을 포함할 수 있다. 레지스터 선택 데이터(176)에 포함된 맵핑들의 수(예를 들어, 카운트)는 벡터 레지스터 파일(138)의 소스 벡터 레지스터들의 수(예를 들어, 카운트)와 매칭되거나 매칭되지 않을 수 있다. 예를 들어, 소스 벡터 레지스터(146N)에 대한 "N"은 벡터 레지스터 카운트(172N)에 대한 "N"과 동일한 수 또는 상이한 수를 지칭할 수 있다. 예시적인 예에서, 벡터 레지스터 카운트(164)는 벡터 레지스터 파일(138)의 3 개의 벡터 레지스터들이 소스 벡터 레지스터들로서 사용될 것임을 나타내고 레지스터 선택 데이터(176)는 무한한 수의 벡터 레지스터 카운트들에 대한 맵핑을 포함한다. 예시하자면, 레지스터 선택 데이터(176)는 1, 2, 3, 4, 5, 8 등과 같은 특정 벡터 레지스터 카운트들에 대한 맵핑뿐만 아니라 "임의의 다른" 벡터 레지스터 카운트에 대한 맵핑도 포함한다. 3 개의 소스 벡터 레지스터들 및 무한한 수의 벡터 레지스터 카운트들에 대한 맵핑들이 예시적인 예로서 제공되며, 다른 예들에서는 벡터 레지스터 파일(138)의 임의의 수의 벡터 레지스터들이 소스 벡터 레지스터들로서 사용될 수 있고 레지스터 선택 데이터(176)는 임임의 수의 벡터 레지스터 카운트들에 대한 맵핑을 포함할 수 있다.
[0045] 프로세서(190)는 순열 명령(134)을 실행하도록 구성된 명령 관리자(140)를 포함한다. 특정 양태에서, 명령 관리자(140)는 순열 명령(134)을 페칭(fetching)하는 것, 개시 레지스터(162), 벡터 레지스터 카운트(164), 개시 요소(166), 스텝 요소 카운트(168) 또는 이들의 조합을 결정하기 위해 순열 명령(134)을 디코딩하는 것, 메모리(132) 또는 다른 디바이스로부터 순열 명령(134)에 대한 소스 데이터를 갖는 복수의 소스 벡터 레지스터들(146)을 로딩하는 것, 개시 레지스터(162), 벡터 레지스터 카운트(164), 개시 요소(166), 스텝 요소 카운트(168), 또는 이들의 조합에 기초하여 순열 명령(134)을 실행하는 것, 또는 순열 결과 레지스터(148B)로부터의 결과를 메모리(132) 또는 다른 디바이스로 출력하는 것 중 하나 이상을 수행하도록 구성된다.
[0046] 명령 관리자(140)는 특정 요소 인덱스에 대응하는 소스 벡터 레지스터들(146)의 단일 요소로부터의 값을 순열 결과 레지스터(148A)에 복사하도록 구성된다. 즉, 동일한 요소 인덱스에 대응하는 다수의 소스 벡터 레지스터들의 요소들로부터의 값들은 순열 결과 레지스터(148A)에 복사되지 않는다. 예시하자면, 일부 구현들에서 소스 벡터 레지스터들(146)은 소스 데이터의 첫 번째 "열"이 소스 벡터 레지스터들(146)의 0번째 요소에 저장된 값들에 의해 형성되고, 소스 데이터의 두 번째 열이 소스 벡터 레지스터들(146)의 1번째 요소들에 저장된 값들에 의해 형성되는 등으로 정렬된다. 소스 데이터의 각각의 열은 순열 명령(134)의 실행을 위한 관심 있는 단일 데이터 값을 포함할 수 있다.
[0047] 일부 경우들에 있어서, 다수의 소스 벡터 레지스터들은 동일한 인덱스(예를 들어, "0")에 대응하는 요소들에 "관심 값들"(예를 들어, 결과에 포함될 값들)을 포함한다. 예를 들어, 관심 있는 다수의 값들이 소스 데이터의 동일한 "열"에 포함된다. 예시하자면, 첫 번째 관심 데이터 값이 소스 벡터 레지스터(146A)의 특정 인덱스(예를 들어, "0")에 대응하는 소스 벡터 레지스터(146A)의 요소(예를 들어, 0번째 요소)에 포함되고, N번째 관심 데이터 값은 특정 인덱스(예를 들어, "0")에 대응하는 소스 벡터 레지스터(146N)의 요소(예를 들어, 0번째 요소)에 포함된다.
[0048] 일부 구현들에서, 명령 관리자(140)는 순열 명령(134)의 실행 이전에 복수의 소스 벡터 레지스터들(146)에 저장된 소스 데이터의 값들을 사전-프로세싱(pre-process)하도록 구성된다. 사전-프로세싱은 각각의 관심 데이터 값이 상이한 인덱스에 대응하는 요소에 저장되도록 복수의 소스 벡터 레지스터들(146)에 저장된 소스 데이터의 값들의 포지션들을 변경하는 것을 포함할 수 있다. 예를 들어, 명령 관리자(140)는 도 7을 참조하여 추가로 설명되는 바와 같이, 순열 명령(134)의 실행 이전에 복수의 소스 벡터 레지스터들(146) 중 하나 이상에 저장된 값들의 포지션들을 회전시키기 위해 회전 명령(136)을 실행하도록 구성된다. 예시하자면, 회전 명령(136)의 실행에 후속하여, 관심 있는 N번째 데이터 값은 관심 있는 나머지 값들을 저장하는 복수의 소스 벡터 레지스터(146)의 요소들의 인덱스와 구별되는 인덱스(예를 들어, "N")에 대응하는 소스 벡터 레지스터(146N)의 요소(예를 들어, N번째 요소)에 저장된다.
[0049] 명령 관리자(140)는 순열 명령(134)의 수행 동안, 개별 인덱스에 대응하는 소스 벡터 레지스터들(146)의 요소로부터 관심 값들의 각각을 복사할 수 있다. 일부 구현들에서, 회전 명령(136) 및 순열 명령(134)은 명령 큐(queue)에 저장된다. 명령 관리자(140)는 명령 큐의 순열 명령(134)의 포지션에 대한 회전 명령(136)의 포지션이 순열 명령(134)의 수행 이전에 회전 명령(136)이 수행되어야 함을 나타낸다는 결정에 응답하여 순열 명령(134)을 수행하기 전에 회전 명령(136)을 수행한다.
[0050] 순열 명령(134)을 실행하는 것은 개시 레지스터(162)(예를 들어, 레지스터 개시 파라미터(152)에 의해 표시됨), 벡터 레지스터 카운트(164)(예를 들어, 주기성 파라미터(154)에 의해 표시됨), 레지스터 선택 데이터(176) 또는 이들의 조합에 기초하여 레지스터 선택 순서(184)를 결정하고, 레지스터 선택 순서(184)에 기초하여 복수의 소스 벡터 레지스터들(146)의 요소로부터 순열 결과 레지스터(148A)의 요소들로 데이터 값들을 복사하는 것을 포함한다. 순열 명령(134)을 실행하는 것은 또한 개시 요소(166)(예를 들어, 인터셉트 파라미터(156)에 의해 표시됨), 스텝 요소 카운트(168)(예를 들어, 스텝 파라미터(158)에 의해 표시됨) 또는 둘 모두에 기초하여 요소 선택 순서(186)를 결정하고, 요소 선택 순서(186)에 기초하여 순열 결과 레지스터(148A)의 요소들로부터 순열 결과 레지스터(148B)의 요소들에 데이터 값들을 복사하는 것을 포함한다.
[0051] 일부 구현들에서, 디바이스(102)는 다양한 유형들의 디바이스들 중 하나에 대응하거나 이에 포함된다. 예시적인 예에서, 디바이스(102)의 하나 이상의 구성 요소들(예를 들어, 프로세서(190), 메모리(132), 벡터 레지스터 파일(138) 또는 이들의 조합)은 헤드셋 디바이스, 모바일 폰, 태블릿 컴퓨터 디바이스, 웨어러블 전자 디바이스, 음성-제어 스피커 시스템, 카메라 디바이스, 가상 현실 헤드셋, 혼합 현실 헤드셋, 증강 현실 헤드셋 또는 차량 중 적어도 하나에 통합된다.
[0052] 동작 동안, 명령 관리자(140)는 개시 레지스터(162)를 결정한다. 일부 예들에서, 순열 명령(134)은 레지스터 개시 파라미터(152)를 포함하고, 명령 관리자(140)는 개시 레지스터(162)를 결정하기 위해 레지스터 개시 파라미터(152)에 액세스한다. 예시하자면, 명령 관리자(140)는 레지스터 개시 파라미터(152)가 소스 벡터 레지스터(146A)의 제1 소스 레지스터 인덱스(예를 들어, 0)를 나타낸다는 결정에 응답하여, 레지스터 개시 파라미터(152)가 소스 벡터 레지스터(146A)가 개시 레지스터(162)로서 지정된다는 것을 나타낸다고 결정한다. 다른 예들에서, 레지스터 개시 파라미터(152)는 순열 명령(134)에 없으며, 명령 관리자(140)는 레지스터 개시 파라미터(152)가 순열 명령(134)에 없다는 결정에 응답하여 디폴트 소스 레지스터 인덱스(예를 들어, 0)에 대응하는 디폴트 벡터 레지스터(예를 들어, 소스 벡터 레지스터(146A))가 개시 레지스터(162)로서 사용된다고 결정한다. 개시 레지스터(162)는 순열 결과 레지스터(148A)의 초기 요소(예를 들어, 0번째 요소)를 파퓰레이팅하는 데 사용된다.
[0053] 명령 관리자(140)는 벡터 레지스터 카운트(164)를 결정한다. 예를 들어, 명령 관리자(140)는 순열 명령(134)에 대한 소스 데이터를 저장하는 복수의 소스 벡터 레지스터들(146)의 벡터 레지스터 카운트(164)를 결정하기 위해 순열 명령(134)의 주기성 파라미터(154)에 액세스한다.
[0054] 명령 관리자(140)는 개시 요소(166)를 결정한다. 특정 양태에서, 복수의 벡터 레지스터들(142)의 각각은 복수의 요소들(예를 들어, 32 개의 요소들)을 포함한다. 벡터 레지스터(142)의 각각의 요소는 요소 인덱스(예를 들어, 0 내지 31의 값)를 갖는다(예를 들어, 이에 기초하여 식별 가능함). 일부 예들에서, 순열 명령(134)은 인터셉트 파라미터(156)를 포함하고, 명령 관리자(140)는 개시 요소(166)를 결정하기 위해 인터셉트 파라미터(156)에 액세스한다. 예시하자면, 명령 관리자(140)는 인터셉트 파라미터(156)가 특정 요소 인덱스(예를 들어, 0)를 포함하는 것으로 결정하는 것에 응답하여, 인터셉트 파라미터(156)가 특정 요소 인덱스를 갖는 순열 결과 레지스터(148A)의 특정 요소가 개시 요소(166)로서 지정된다는 것을 나타내는 것으로 결정한다. 다른 예들에서, 인터셉트 파라미터(156)는 순열 명령(134)에 없으며, 명령 관리자(140)는 인터셉트 파라미터(156)가 순열 명령(134)에 없다는 결정에 응답하여, 디폴트 요소 인덱스(예를 들어, 0)에 대응하는 순열 결과 레지스터(148A)의 디폴트 요소(예를 들어, 0번째 요소)가 개시 요소(166)로서 사용되는 것으로 결정한다. 개시 요소(166)는 순열 결과 레지스터(148B)의 초기 요소(예를 들어, 0번째 요소)를 파퓰레이팅하는 데 사용된다.
[0055] 명령 관리자(140)는 스텝 요소 카운트(168)를 결정한다. 일부 예들에서, 순열 명령(134)은 스텝 파라미터(158)를 포함하고, 명령 관리자(140)는 스텝 요소 카운트(168)를 결정하기 위해 스텝 파라미터(158)에 액세스한다. 스텝 요소 카운트(168)는 순열 결과 레지스터(148B)의 후속 요소를 파퓰레이팅하는 데 사용되는 순열 결과 레지스터(148A)의 다음 요소로의 스텝에 포함될 요소들의 카운트를 나타낸다. 예를 들어, 개시 레지스터(162)가 순열 결과 레지스터(148B)의 0번째 요소를 파퓰레이팅하기 위해 순열 결과 레지스터(148A)의 0번째 요소에 대응하는 경우, 순열 결과 레지스터(148A)의 다음 요소는 순열 결과 레지스터(148B)의 1번째 요소를 파퓰레이팅하기 위해 순열 결과 레지스터(148A)의 0번째 + 스텝 요소 카운트(168) 요소에 대응한다. 일부 구현들에서, 주기성 파라미터(154) 및 스텝 파라미터(158)는 오버로딩(overloading)된다. 예를 들어, 순열 명령(134)에 의해 표시된 단일 값은 주기성 파라미터(154) 및 스텝 파라미터(158) 모두에 대응한다. 예시하자면, 스텝 파라미터(158)는 주기성 파라미터(154)와 동일한 값을 갖는다. 일부 구현들에서, 순열 명령(134)은 스텝 파라미터(158)가 순열 명령(134)에 없다는 결정에 응답하여, 주기성 파라미터(154)에 기초하여 스텝 요소 카운트(168)를 결정한다. 특정 예에서, 스텝 요소 카운트(168)는 벡터 레지스터 카운트(164)에 기초한다(예를 들어, 이와 같음).
[0056] 일부 양태들에서, 도 2, 도 4 및 도 6을 참조하여 추가로 설명되는 바와 같이, 벡터 레지스터 카운트(164)와 동일한 값을 갖는 스텝 요소 카운트(168)는 순열 결과 레지스터(148A)에 저장된 특정 소스 벡터 레지스터(146)의 모든 값들을 순열 결과 레지스터(148B)의 연속 요소들의 세트로 복사하는 것에 대응한다. 예시하자면, 순열 결과 레지스터(148B)에 저장된 값들은 순열 결과 레지스터(148A)에 저장된 값들의 순열에 대응한다. 일부 양태들에서, 도 8 및 도 9를 참조하여 추가로 설명되는 바와 같이, 벡터 레지스터 카운트(164)와 상이한 값을 갖는 스텝 요소 카운트(168)는 순열 결과 레지스터(148B)의 비연속 요소들에 저장된 특정 소스 벡터(146)로부터 복사된 적어도 일부 요소들에 대응한다. 일부 예들에서, 도 8을 참조하여 추가로 설명되는 바와 같이, 특정 값(예를 들어, 1)을 갖는 스텝 요소 카운트(168)는 순열 결과 레지스터(148A)로부터의 요소들은 순열 없이 순열 결과 레지스터(148B)로 복사하는 것에 대응한다.
[0057] 도 5를 참조하여 추가로 설명되는 바와 같이, 명령 관리자(140)는 레지스터 선택 데이터(176)에 기초하여 벡터 레지스터 카운트(164)에 대응하는 레지스터 선택 순서(184)를 결정한다. 레지스터 선택 순서(184)는 순열 결과 레지스터(148A)의 요소들에 대한 레지스터 인덱스들을 나타낸다. 예를 들어, 도 2를 참조하여 추가로 설명되는 바와 같이, 순열 결과 레지스터(148A)의 요소 "i"에 대한 레지스터 인덱스는 (예를 들어, 레지스터 개시 파라미터(152)에 의해 표시된 바와 같이) 개시 레지스터(162), (예를 들어, 주기성 파라미터(154)에 의해 표시된 바와 같이) 벡터 레지스터 카운트(164) 또는 둘 모두의 관점에서 레지스터 선택 순서(184)에 의해 주어진다. 레지스터 선택 순서(184)는 순열 결과 레지스터(148A)의 각각의 요소에 대응하는 특정 소스 벡터 레지스터(146)를 나타낸다.
[0058] 명령 관리자(140)는 개시 요소(166) 및 스텝 요소 카운트(168)에 기초하여 요소 선택 순서(186)를 결정한다. 요소 선택 순서(186)는 순열 결과 레지스터(148A)의 개시 요소(166) 및 순열 결과 레지스터의 이전에 표시된 요소에 추가된 스텝 요소 카운트(168)에 대응하는 순열 결과 레지스터(148A)의 다음 요소들을 나타낸다. 도 2를 참조하여 추가로 설명되는 바와 같이, 요소 선택 순서(186)는 순열 결과 레지스터(148A)의 각각의 요소가 요소 선택 순서(186)에 의해 표시될 때까지 순열 결과 레지스터(148A)의 요소들의 끝에 도달한 후 래핑 어라운드(warpping around)된다. 예를 들어, 도 2를 참조하여 추가로 설명되는 바와 같이, 요소 선택 순서(186)는 순열 결과 레지스터(148B)의 요소들에 대한 요소 인덱스들을 나타내며, 여기서 "i"는 순열 결과 레지스터(148B)의 요소의 인덱스에 대응하고 순열 결과 레지스터(148B)의 요소 i에 대한 요소 인덱스는 (예를 들어, 인터셉트 파라미터(156)에 의해 표시된 바와 같이) 개시 요소(166), (예를 들어, 스텝 파라미터(158)에 의해 표시된 바와 같이) 스텝 요소 카운트(168) 또는 둘 모두의 관점에서 주어진다. 요소 선택 순서(186)는 순열 결과 레지스터(148B)의 각각의 요소에 대응하는 특정 요소 인덱스를 나타낸다.
[0059] 명령 관리자(140)는 도 2를 참조하여 추가로 설명되는 바와 같이, 레지스터 선택 순서(184)에 기초하여 순열 결과 레지스터(148A)를 파퓰레이팅하도록 순열 명령(134)을 실행한다. 예를 들어, 도 2를 참조하여 추가로 설명되는 바와 같이, 명령 관리자(140)는 순열 결과 레지스터(148A)의 각각의 특정 요소에 대해, 레지스터 선택 순서(184)에 기초하여 복수의 소스 벡터 레지스터들(146) 중 소스 벡터 레지스터를 선택하고, 소스 벡터 레지스터의 대응하는 요소에 기초하여 특정 요소를 파퓰레이팅한다.
[0060] 도 2를 참조하여 추가로 설명되는 바와 같이, 순열 명령(134)의 실행 동안, 명령 관리자(140)는 요소 선택 순서(186)에 기초하여 순열 결과 레지스터(148B)의 요소들을 파퓰레이팅한다. 예를 들어, 도 2를 참조하여 추가로 설명되는 바와 같이, 명령 관리자(140)는 순열 결과 레지스터(148B)의 특정 요소(예를 들어, i)에 대해 그리고 요소 선택 순서(186)에 기초하여 순열 결과 레지스터(148A)의 요소를 선택하고, 순열 결과 레지스터(148A)의 선택된 요소에 기초하여 순열 결과 레지스터(148B)의 특정 요소를 파퓰레이팅한다.
[0061] 순열 명령(134)은 레지스터 선택 순서(184) 및 요소 선택 순서(186)를 특정하기 위해 벡터 레지스터들을 사용하지 않고 소스 데이터에 대해 동작들이 수행될 수 있게 한다. 특정 양태에서, 명령 관리자(140)는 복수의 소스 벡터 레지스터들(146) 중 하나 이상과 병렬로 메모리(132)(또는 다른 디바이스)로부터 소스 데이터를 로딩한다. 일부 구현들에서, 명령 관리자(140)는 순열 명령(134)의 실행 동안 복수의 소스 벡터 레지스터들(146)의 요소들에 기초하여 병렬로 순열 결과 레지스터(148A)의 요소들을 파퓰레이팅하고, 순열 결과 레지스터(148A)의 요소들의 값들의 순열에 기초하여 병렬로 순열 결과 레지스터(148B)의 요소들을 파퓰레이팅한다.
[0062] 순열 결과 레지스터들(148)을 파퓰레이팅하기 위해 소스 벡터 레지스터들(146)로부터 데이터를 복사하는 순열 명령(134)이 예시적인 예들로서 제공된다. 일부 구현들에서, 순열 명령(134)은 순열 결과 레지스터들(148)을 파퓰레이팅하기 위해 복수의 데이터 소스들로부터 데이터를 복사하기 위해 (소스 벡터 레지스터들(146)로부터 데이터를 복사하는 것으로 설명된 바와 같이) 유사한 동작들을 수행하는 데 사용될 수 있다. 예를 들어, (레지스터 개시 파라미터(152)와 유사한) 개시 파라미터는 개시 데이터 소스를 나타내고, 주기성 파라미터(154)는 데이터 소스 카운트를 나타내거나 둘 모두를 나타낸다. 명령 관리자(140)는 데이터 소스 카운트들을 선택 순서들에 맵핑하는 (예를 들어, 레지스터 선택 데이터(176)와 유사한) 선택 데이터에 대한 액세스를 갖는다. 선택 순서는 순열 결과 레지스터(148A)를 파퓰레이팅하기 위한 데이터 소스들의 선택 순서를 나타낸다. 데이터 소스는 소스 벡터 레지스터(146), 디바이스(102)의 다른 구성 요소, 다른 디바이스, 다른 시스템 또는 이들의 조합을 포함할 수 있다.
[0063] 도 2를 참조하면, 순열 명령(134)의 실행의 예(200)가 도시된다. 예를 들어, 도 1의 명령 관리자(140)는 소스 벡터 레지스터들(146A―C)에 저장된 소스 데이터에 대한 순열 명령(134)을 실행한다. 순열 명령(134)을 실행하는 것은 아래에 더욱 상세히 설명되는 바와 같이, (예를 들어, 레지스터 개시 파라미터(152)에 의해 표시된) 개시 레지스터(162) 및 (예를 들어, 주기성 파라미터(154)에 의해 표시된) 벡터 레지스터 카운트(164)에 기초하여 순열 결과 레지스터(148A)를 파퓰레이팅하는 것과, 후속하여 (예를 들어, 인터셉트 파라미터(156)에 의해 표시된) 개시 요소(166) 및 (예를 들어, 스텝 파라미터(158)에 의해 표시된) 스텝 요소 카운트(168)에 기초하여 순열 결과 레지스터(148B)를 파퓰레이팅하는 것을 포함한다.
[0064] 예(200)에서, 소스 벡터 레지스터(146A), 소스 벡터 레지스터(146B) 및 소스 벡터 레지스터(146C)는 각각 데이터 값들 i0―i31, j0―j31 및 k0―k31을 저장한다. 소스 벡터 레지스터(146A), 소스 벡터 레지스터(146B) 및 소스 벡터 레지스터(146C)는 제1 소스 레지스터 인덱스(예를 들어, 0), 제2 소스 레지스터 인덱스(예를 들어, 1) 및 제3 소스 레지스터 인덱스(예를 들어, 2)에 각각 대응한다(예를 들어, 이에 기초하여 고유하게 식별 가능함). 주기성 파라미터(154)는 3의 벡터 레지스터 카운트(164)를 나타낸다. 예를 들어, 주기성 파라미터(154)는 3 개의 소스 벡터 레지스터들이 순열 명령(134)에 대한 소스 데이터를 저장한다는 것을 나타낸다. 소스 데이터를 저장하는 3 개의 소스 벡터 레지스터들이 예시적이고 비제한적인 예로서 제공되지만, 다른 예들에서는 3 개 미만 또는 3 개 초과의 소스 벡터 레지스터들이 순열 명령(134)에 대한 소스 데이터를 저장할 수 있다.
[0065] 도 5를 참조하여 추가로 설명되는 바와 같이, 명령 관리자(140)는 레지스터 선택 데이터(176)에 기초하여 벡터 레지스터 카운트(164)에 대응하는 레지스터 선택 순서(184)를 결정한다. 레지스터 선택 순서(184)는 순열 결과 레지스터(148A)의 요소들에 대한 레지스터 인덱스들을 나타내며, 여기서 "i"는 순열 결과 레지스터(148A)의 요소의 인덱스에 대응하고 순열 결과 레지스터(148A)의 요소 i에 대한 레지스터 인덱스는 3의 벡터 레지스터 카운트(164)에 대응하는 ((레지스터 개시 파라미터(152) + i) % 3)에 의해 주어지며, 여기서 "%"는 모듈러스 연산자에 대응한다.
[0066] 예(200)에서, 레지스터 개시 파라미터(152)는 0의 레지스터 인덱스에 대응하는 개시 레지스터(162)를 나타내는 0의 값을 갖는다. 레지스터 선택 순서(184)는 순열 결과 레지스터(148A)의 각각의 요소에 대응하는 특정 소스 벡터 레지스터(146)를 나타낸다. 일부 예들에서, 레지스터 선택 순서(184)(예를 들어, 0, 1, 2, 0, 1, 2, 0, 1, 2,...)는 개시 레지스터(162)에서 시작하여, 벡터 레지스터 카운트(164)(예를 들어, 3 개의 소스 벡터 레지스터들)가 충족될 때까지 복수의 소스 벡터 레지스터들(146)의 각각의 연속적인 소스 벡터 레지스터를 나타내고, 반복된다. 다른 예들에서, 도 6을 참조하여 추가로 설명되는 바와 같이, 레지스터 선택 순서(184)(예를 들어, 0, 2, 4, 1, 3, 0, 2, 4, 1, 3,...)는 개시 레지스터(162)에서 시작하고, 벡터 레지스터 카운트(164)(예를 들어, 5 개의 소스 벡터 레지스터들)에 대응하는 복수의 소스 벡터 레지스터들(146)의 반복되고 순서대로가 아닌 시퀀스를 포함한다.
[0067] 일부 예들에서, 명령 관리자(140)는 순열 결과 레지스터(148A)의 각각의 요소에 대응하는 레지스터 선택 순서(184)의 값들(예를 들어, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1)을 계산하고, 레지스터 선택 순서(184)의 해당 값들을 레지스터 순서 벡터 레지스터에 저장한다. 이러한 예들에서, 순열 결과 레지스터(148A)의 요소들은 레지스터 순서 벡터 레지스터에 저장된 레지스터 선택 순서(184)의 값들에 기초하여 병렬로 파퓰레이팅될 수 있다. 다른 예들에서, 명령 관리자(140)는 순열 결과 레지스터(148A)의 각각의 요소에 대해 한 번에 하나씩 대응하는 소스 벡터 레지스터를 결정하고 스칼라 값으로서 한 번에 레지스터 선택 순서(184)의 하나의 값을 저장하는 데 사용될 수 있는 공식 또는 함수로서 레지스터 선택 순서(184)(예를 들어, i%3)를 저장한다. 이러한 예들에서, 순열 결과 레지스터(148A)의 요소들은 레지스터 선택 순서(184)의 저장된 스칼라 값에 기초하여 한 번에 하나의 요소씩 순차적으로 파퓰레이팅될 수 있다.
[0068] 예(200)에서, 인터셉트 파라미터(156)는 0의 개시 요소(166)를 나타내는 0의 값을 갖고, 스텝 파라미터(158)는 3의 스텝 요소 카운트(168)를 나타내는 3의 값을 갖는다. 명령 관리자(140)는 (인터셉트 파라미터(156)에 의해 표시됨) 개시 요소(166) 및 (스텝 파라미터(158)에 의해 표시된) 스텝 요소 카운트(168)에 기초하여 요소 선택 순서(186)를 결정한다. 예를 들어, 요소 선택 순서(186)는 순열 결과 레지스터(148B)의 요소들에 대한 요소 인덱스들을 나타내며, 여기서 "i"는 순열 결과 레지스터(148B)의 요소의 인덱스에 대응하고 순열 결과 레지스터(148B)의 요소 i에 대한 요소 인덱스는 ((인터셉트 파라미터(156) + 스텝 파라미터(158) * i) % 32) 또는 (3i % 32)에 의해 주어진다.
[0069] 요소 선택 순서(186)는 순열 결과 레지스터(148B)의 각각의 요소에 대응하는 특정 요소 인덱스를 나타낸다. 일부 예들에서, 요소 선택 순서는 186(예를 들어, 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 2, 5, 8, 11, 14, 17, 20, 23, 26, 29)는 개시 요소(166)(예를 들어, 0)에서 시작하여, 순열 결과 레지스터(148A)의 30번째 요소까지 3의 배수가 이어지며, 스텝 요소 카운트(168)에 기초하여 순열 결과 레지스터(148A)의 요소들을 통해 계속해서 스테핑(stepping)하도록 래핑 어라운드한다.
[0070] 일부 예들에서, 명령 관리자(140)는 순열 결과 레지스터(148B)의 각각의 요소에 대응하는 요소 선택 순서(186)의 값들(예를 들어, 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 1, 4, 7, 10, 13, 16, 18, 22, 25, 28, 31, 2, 5, 8, 11, 14, 17, 19, 23, 26, 29)을 계산하고, 요소 선택 순서(186)의 값들을 요소 순서 벡터 레지스터에 저장한다. 이러한 예들에서, 순열 결과 레지스터(148B)의 요소들은 요소 순서 벡터 레지스터에 저장된 요소 선택 순서(186)의 값들에 기초하여 병렬로 파퓰레이팅될 수 있다. 다른 예들에서, 명령 관리자(140)는 순열 결과 레지스터(148B)의 각각의 요소에 대해 한 번에 하나씩 순열 결과 레지스터(148A)의 대응하는 요소를 결정하고 스칼라 값으로서 한 번에 요소 선택 순서(186)의 하나의 값을 저장하는 데 사용될 수 있는 공식 또는 함수로서 요소 선택 순서(186)(예를 들어, 3i % 32)를 저장한다. 이러한 예들에서, 순열 결과 레지스터(148B)의 요소들은 요소 선택 순서(186)의 저장된 스칼라 값에 기초하여 한 번에 하나씩 순차적으로 파퓰레이팅될 수 있다.
[0071] 명령 관리자(140)는 레지스터 선택 순서(184)에 기초하여 순열 결과 레지스터(148A)를 파퓰레이팅하도록 순열 명령(134)을 실행한다. 예를 들어, 명령 관리자(140)는 순열 결과 레지스터(148A)의 각각의 특정 요소에 대해 레지스터 선택 순서(184)(예를 들어, i%3)에 기초하여 복수의 소스 벡터 레지스터들(146) 중 소스 벡터 레지스터를 선택하고, 소스 벡터 레지스터의 대응하는 요소에 기초하여 특정 요소를 파퓰레이팅한다. 예시하자면, 명령 관리자(140)는 레지스터 선택 순서(184)가 특정 레지스터 인덱스(예를 들어, i%3)가 순열 결과 레지스터(148A)의 특정 요소(예를 들어, 인덱스 i를 가짐)에 대응한다는 것을 나타내는 것으로 결정한다. 명령 관리자(140)는 특정 레지스터 인덱스(예를 들어, i%3)와 연관된 소스 벡터 레지스터(146)를 선택하고, 선택된 소스 벡터 레지스터(146)의 대응하는 요소(예를 들어, 인덱스 i를 가짐)로부터의 값을 순열 결과 레지스터(148A)의 특정 요소(예를 들어, 인덱스 i를 가짐)에 복사한다.
[0072] 예(200)에서, 명령 관리자(140)는 레지스터 선택 순서(184)가 제1 레지스터 인덱스(예를 들어, 0)가 순열 결과 레지스터(148A)의 0번째 요소에 대응함(예를 들어, i = 0, i%3 = 0%3 = 0)을 나타내는 것으로 결정한다. 명령 관리자(140)는 첫 번째 레지스터 인덱스(예를 들어, 0)를 갖는 소스 벡터 레지스터(146A)를 선택하고, 소스 벡터 레지스터(146A)의 0번째 요소로부터의 데이터 값(예를 들어, i0)을 순열 결과 레지스터(148A)의 0번째 요소에 복사한다. 다른 예로서, 명령 관리자(140)는 레지스터 선택 순서(184)가 제2 레지스터 인덱스(예를 들어, 1)가 순열 결과 레지스터(148A)의 1번째 요소(예를 들어, i = 1, i%3 = 1)에 대응함을 나타내는 것으로 결정한다. 명령 관리자(140)는 두 번째 레지스터 인덱스(예를 들어, 1)를 갖는 소스 벡터 레지스터(146B)를 선택하고, 소스 벡터 레지스터(146B)의 1번째 요소로부터의 데이터 값(예를 들어, j1)을 순열 결과 레지스터(148A)의 1번째 요소에 복사한다. 마찬가지로, 명령 관리자(140)는 세 번째 레지스터 인덱스(예를 들어, 2%3 = 2)를 갖는 소스 벡터 레지스터(146C)의 2번째 요소로부터의 데이터 값(예를 들어, k2)을 순열 결과 레지스터(148A)의 2번째 요소에 복사한다. 명령 관리자(140)는 첫 번째 레지스터 인덱스(예를 들어, 3%3 = 0)를 갖는 소스 벡터 레지스터(146A)의 3번째 요소로부터의 데이터 값(예를 들어, i3)을 순열 결과 레지스터(148A)의 3번째 요소에 복사하고, 순열 결과 레지스터(148A)의 모든 요소들이 파퓰레이팅될 때까지 계속된다. 이해의 용이성을 위해 순열 결과 레지스터(148A)의 각각의 요소를 순차적으로 파퓰레이팅하는 관점에서 설명되었지만, 일부 구현들에서는 일부 또는 모든 데이터 값들이 소스 벡터 레지스터들(146A―C)로부터 순차적이 아니라 병렬적으로 순열 결과 레지스터(148A)로 복사될 수 있다는 것을 이해해야 한다.
[0073] 명령 관리자(140)는 순열 명령(134)의 실행 동안 요소 선택 순서(186)에 기초하여 순열 결과 레지스터(148B)의 요소들을 파퓰레이팅한다. 일부 양태들에서, 요소 선택 순서(186)는 순열 결과 레지스터(148A)의 요소들에 저장된 데이터 값들의 순열에 대응한다. 예를 들어, 명령 관리자(140)는 순열 결과 레지스터(148B)의 특정 요소(예를 들어, i)에 대해 그리고 요소 선택 순서(186)에 기초하여 순열 결과 레지스터(148A)의 요소(예를 들어, 3i%32)를 선택하고, 순열 결과 레지스터(148A)의 선택된 요소에 기초하여 순열 결과 레지스터(148B)의 특정 요소를 파퓰레이팅한다. 예시하자면, 명령 관리자(140)는 요소 선택 순서(186)가 특정 요소 인덱스(예를 들어, 3i%32)가 순열 결과 레지스터(148B)의 특정 요소(예를 들어, 인덱스 i를 가짐)에 대응함을 나타내는 것으로 결정한다. 명령 관리자(140)는 특정 요소 인덱스(예를 들어, 3i%32)와 연관된 순열 결과 레지스터(148A)의 특정 요소를 선택하고, 순열 결과 레지스터(148A)의 선택된 요소(예를 들어, 인덱스 3i%32를 가짐)로부터의 데이터 값을 순열 결과 레지스터(148B)의 특정 요소(예를 들어, 인덱스 i를 가짐)에 복사한다.
[0074] 명령 관리자(140)는 요소 선택 순서(186)(예를 들어, i=0, 3i%32 = 0%32 = 0)가 첫 번째 요소 인덱스(예를 들어, 0)가 순열 결과 레지스터(148B)의 0번째 요소에 대응함을 나타내는 것으로 결정한다. 명령 관리자(140)는 첫 번째 요소 인덱스(예를 들어, 0)를 갖는 순열 결과 레지스터(148A)의 0번째 요소를 선택하고, 순열 결과 레지스터(148A)의 0번째 요소부터의 데이터 값(예를 들어, i0)을 순열 결과 레지스터(148B)의 0번째 요소에 복사한다. 다른 예로서, 명령 관리자(140)는 요소 선택 순서(186)(예를 들어, i = 1, 3i%32 = 3%32 = 3)가 두 번째 레지스터 인덱스(예를 들어, 3)가 순열 결과 레지스터(148B)의 1번째 요소에 대응함을 나타내는 것으로 결정한다. 명령 관리자(140)는 두 번째 레지스터 인덱스(예를 들어, 3)를 갖는 순열 결과 레지스터(148A)의 3번째 요소를 선택하고, 순열 결과 레지스터(148A)의 3번째 요소로부터의 데이터 값(예를 들어, i3)을 순열 결과 레지스터(148B)의 1번째 요소에 복사하고, 순열 결과 레지스터(148B)의 모든 요소들이 파퓰레이팅될 때까지 계속된다. 이해의 용이성을 위해 순열 결과 레지스터(148B)의 각각의 요소를 순차적으로 파퓰레이팅하는 관점에서 설명되었지만, 일부 구현들에서는 일부 또는 모든 데이터 값들이 순열 결과 레지스터(148A)로부터 순차적이 아니라 병렬적으로 순열 결과 레지스터(148B)로 복사될 수 있다는 것을 이해해야 한다. 따라서 순열 결과 레지스터(148B)는 필터링된 데이터 값들(예를 들어, 3 개의 소스 데이터 값 중 하나씩)을 순서대로 포함한다.
[0075] 예(200)에서, 레지스터 개시 파라미터(152)(예를 들어, 0), 주기성 파라미터(154)(예를 들어, 3), 인터셉트 파라미터(156)(예를 들어, 0) 및 스텝 파라미터(158)(예를 들어, 3)는 x[3n]을 선택하는 것과 같이 소스 데이터에 대한 필터링 동작을 수행하는 것에 대응하며, 여기서 "x"는 소스 데이터에 대응하고 "n"은 0 이상의 정수이다. 예를 들어, x[3n]을 선택하는 것은 x[0], x[3], x[6] 등을 선택하거나, 순열 결과 레지스터(148B)를 파퓰레이팅하기 위해 0번째 데이터 값으로 시작하는 3개의 소스 데이터 값 중 하나씩을 선택하는 것에 대응한다. 예시적인 예에서, 정수 n >=0에 대해 resultdata[n] = x[3n]이며, 여기서 "resultdata"는 순열 결과 레지스터(148B)(예를 들어, 최종 결과)에 대응한다. 순열 결과 레지스터(148B)의 특정 요소 "n"은 소스 데이터에 인덱스 "3n"을 갖는 데이터 값을 저장하기 위한 것이다. 예를 들어, resultdata[0] = x[0], resultdata[1] = x[3], resultdata[2] = x[6] 등이다.
[0076] 레지스터 선택 순서(184)가 예시적인 예로서 레지스터 개시 파라미터(152) 및 주기성 파라미터(154)(예를 들어, 레지스터 선택 순서(184) = (레지스터 개시 파라미터(152) + i)%(주기성 파라미터(154)))에 기초한 것으로 설명되어 있지만, 더욱 일반적인 예에서 레지스터 선택 순서(184)는 레지스터 선택 순서(184) = (개시 레지스터(162) + i)%(벡터 레지스터 카운트(164))와 같이 개시 레지스터(162) 및 벡터 레지스터 카운트(164)에 기초하여 설명될 수 있다. 유사하게, 요소 선택 순서(186)는 인터셉트 파라미터(156) 및 스텝 파라미터(158)(예를 들어, 요소 선택 순서(186) = (인터셉트 파라미터(156) + 스텝 파라미터(158) * i) % 32)에 기초한 것으로 설명되지만, 보다 일반적인 예에서 요소 선택 순서(186)는 요소 선택 순서(186) = (개시 요소(166) + 스텝 요소 카운트(168) * i) % 32와 같이 개시 요소(166) 및 스텝 요소 카운트(168)에 기초하여 설명될 수 있다.
[0077] 순열 명령(134)은 레지스터 선택 순서(184) 및 요소 선택 순서(186)를 특정하기 위해 벡터 레지스터들을 사용하지 않고 소스 데이터에 대한 동작들이 수행될 수 있게 한다. 특정 양태에서, 명령 관리자(140)는 소스 데이터를 메모리(132)(또는 다른 디바이스)로부터 복수의 소스 벡터 레지스터들(146) 중 하나 이상으로 병렬로 로딩한다. 일부 구현들에서, 명령 관리자(140)는 순열 명령(134)의 실행 동안 복수의 소스 벡터 레지스터들(146)의 요소들에 기초하여 병렬로 순열 결과 레지스터(148A)의 요소들을 파퓰레이팅하고, 순열 결과 레지스터(148A)의 요소들의 값들의 순열에 기초하여 순열 결과 레지스터(148B)의 요소들을 병렬로 파퓰레이팅한다.
[0078] 일부 구현들에서, 명령 관리자(140)는 순열 명령(134)의 실행 동안 복수의 소스 벡터 레지스터들(146)의 요소에 기초하여 순열 결과 레지스터(148A)의 요소들을 직렬로 파퓰레이팅한다. 예를 들어, 명령 관리자(140)는 순열 명령(134)의 실행 동안, 레지스터 선택 순서(184)에 기초하여 소스 벡터 레지스터(146A)를 선택하고, 소스 벡터 레지스터(146A)에 기초하여 순열 결과 레지스터(148A)의 제1 요소를 파퓰레이팅한다. 순열 결과 레지스터(148A)의 제1 요소를 파퓰레이팅한 후, 명령 관리자(140)는 레지스터 선택 순서(184)에 기초하여 소스 벡터 레지스터(146B)를 선택하고, 소스 벡터 레지스터(146B)에 기초하여 순열 결과 레지스터(148A)의 제2 요소를 파퓰레이팅하는 등이다. 이러한 구현들에서, 순열 결과 레지스터(148A)의 다음 요소에 대응하는 것으로 레지스터 선택 순서(184)(예를 들어, 함수 또는 공식)에 의해 표시된 소스 벡터 레지스터는 다음 소스 벡터 레지스터를 선택하기 위해 한 번에 하나씩 결정될 수 있다. 다음에 선택된 소스 벡터 레지스터의 인덱스는 벡터 레지스터(예를 들어, 0, 1, 2, 0, 1, 2, 0, 1, 2,...와 같은 32 개의 값들을 나타냄)를 사용하여 순열 결과 레지스터(148A)의 각각의 요소에 대응하는 각각의 소스 벡터 레지스터의 인덱스들을 저장하는 대신 스칼라 값(예를 들어, 0, 1 또는 2 중 하나를 나타냄)으로서 저장될 수 있다.
[0079] 일부 구현들에서, 명령 관리자(140)는 순열 명령(134)의 실행 동안 순열 결과 레지스터(148A)의 요소들의 값들의 순열에 기초하여 순열 결과 레지스터(148B)의 요소들을 직렬로 파퓰레이팅한다. 예를 들어, 명령 관리자(140)는 순열 명령(134)의 실행 동안 요소 선택 순서(186)에 기초하여 순열 결과 레지스터(148A)의 제1 요소(예를 들어, 0번째 요소)를 선택하고, 순열 결과 레지스터(148A)의 제1 요소로부터의 값(예를 들어, i0)을 순열 결과 레지스터(148B)의 제1 요소(예를 들어, 0번째 요소)로 복사한다. 순열 결과 레지스터(148B)의 제1 요소를 파퓰레이팅한 후, 명령 관리자(140)는 요소 선택 순서(186)에 기초하여 순열 결과 레지스터(148A)의 제2 요소(예를 들어, 3번째 요소)를 선택하고, 순열 결과 레지스터(148A)의 제2 요소(예를 들어, 3번째 요소)로부터의 값(예를 들어, i3)을 순열 결과 레지스터(148B)의 제2 요소(예를 들어, 1번째 요소)로 복사하는 등이다. 이러한 구현들에서, 순열 결과 레지스터(148B)의 다음 요소에 대응하는 것으로 요소 선택 순서(186)(예를 들어, 함수 또는 공식)에 의해 표시된 다음 요소 인덱스는 순열 결과 레지스터(148A)의 다음 요소를 선택하기 위해 한 번에 하나씩 결정될 수 있다. 다음으로 선택된 요소의 인덱스는 벡터 레지스터(예를 들어, 0, 3, 6, 9, 12, 15, 18, 21, 24,...와 같은 32 개의 값들을 나타냄)를 사용하여 순열 결과 레지스터(148B)의 각각의 요소에 대응하는 순열 결과 레지스터(148A)의 각각의 요소의 인덱스들을 저장하는 대신 스칼라 값(예를 들어, 0 내지 31 중 하나를 나타냄)으로 저장될 수 있다.
[0080] 도 3을 참조하면, 디바이스(102)의 특정의 예시적인 양태의 도면(300)이 도시된다. 명령 관리자(140)는 순열 명령(334)을 실행하도록 구성된다. 순열 명령(334)은 도 1 및 도 2의 순열 명령(134)의 파라미터들의 단일 세트와 비교하여 파라미터들의 다수의 세트들을 포함한다. 순열 명령(334)은 또한 op코드(335)를 포함한다. op코드(335)는 순열 명령(334)의 식별자에 대응한다.
[0081] 일부 구현들에서, 순열 명령(334)은 파라미터들의 제1 세트(예를 들어, 레지스터 개시 파라미터(152A), 주기성 파라미터(154A), 인터셉트 파라미터(156A), 스텝 파라미터(158A) 또는 이들의 조합)) 및 파라미터들의 제2 세트(예를 들어, 레지스터 개시 파라미터(152B), 주기성 파라미터(154B), 인터셉트 파라미터(156B), 스텝 파라미터(158B) 또는 이들의 조합)를 포함한다.
[0082] 도 4는 아래에서 더욱 상세히 설명되는 바와 같이, 소스 벡터 레지스터들(146A―C)에 저장된 소스 데이터에 대한 순열 명령(334)을 실행하는 양태들을 예시하고 레지스터 개시 파라미터(152A) 및 주기성 파라미터(154A)에 기초하여 순열 결과 레지스터(148A)를 파퓰레이팅하고 레지스터 개시 파라미터(152B) 및 주기성 파라미터(154B)에 기초하여 순열 결과 레지스터(148C)를 파퓰레이팅하고, 후속하여 인터셉트 파라미터(156A) 및 스텝 파라미터(158A)에 기초하여 순열 결과 레지스터(148B)를 파퓰레이팅하고 인터셉트 파라미터(156B) 및 스텝 파라미터(158B)에 기초하여 순열 결과 레지스터(148D)를 파퓰레이팅하는 것을 포함하는 명령 관리자(140)의 동작의 예(400)를 묘사한다.
[0083] 예(400)에서, 레지스터 개시 파라미터(152A)(예를 들어, 0), 주기성 파라미터(154A)(예를 들어, 3), 인터셉트 파라미터(156A)(예를 들어, 0) 및 스텝 파라미터(158A)(예를 들어, 3)는 x[3n]을 선택하거나 0번째 데이터 값으로 시작하여 3 개의 소스 데이터 값 중 하나씩 선택하는 것과 같은 소스 데이터에 대한 첫 번째 필터링 동작에 대응한다. 레지스터 개시 파라미터(152B)(예를 들어, 2), 주기성 파라미터(154B)(예를 들어, 3), 인터셉트 파라미터(156B)(예를 들어, 1) 및 스텝 파라미터(158B)(예를 들어, 3)는 x[3n+1]을 선택하는 것과 같은 소스 데이터에 대한 두 번째 필터링 동작을 수행하는 것에 대응하며, 여기서 "x"는 소스 데이터에 대응하고 "n"은 0 이상의 정수이다. 예를 들어, x[3n+1]을 선택하는 것은 x[1], x[4], x[7] 등을 선택하거나 1번째 데이터 값으로 시작하여 3 개의 소스 데이터 값 중 하나씩 선택하는 것에 대응한다.
[0084] 도 3으로 돌아가서, 명령 관리자(140)는 복수의 소스 벡터 레지스터(146)에 저장된 소스 데이터에 대해 2 개의 동작들(예를 들어, 제1 필터링 동작 및 제2 필터링 동작)을 수행하기 위해 순열 명령(334)을 실행하도록 구성된다. 예를 들어, 명령 관리자(140)는 파라미터들의 제1 세트에 기초하여, 도 1을 참조하여 설명한 것과 유사한 동작들을 수행함으로써 순열 결과 레지스터(148B)에서 제1 필터링 동작의 제1 최종 결과들을 생성하기 위해 순열 명령(334)을 실행하도록 구성된다. 예시하자면, 명령 관리자(140)는 (예를 들어, 레지스터 개시 파라미터(152A) 또는 디폴트 값에 의해 표시된) 개시 레지스터(162A)를 결정하고 (예를 들어, 주기성 파라미터(154A)에 의해 표시된) 벡터 레지스터 카운트(164A)를 결정하도록 구성된다. 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 레지스터 선택 데이터(176), 개시 레지스터(162A) 및 벡터 레지스터 카운트(164A)에 기초하여 레지스터 선택 순서(184A)를 결정하도록 구성된다. 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 순열 명령(334)의 실행 동안 레지스터 선택 순서(184A)에 기초하여 순열 결과 레지스터(148A)를 파퓰레이팅함으로써 제1 중간 결과를 생성하도록 구성된다. 예를 들어, 도 4의 예(400)에 도시된 바와 같이, 순열 결과 레지스터(148A)는 순서를 벗어나 관심 있는 모든 데이터 값(예를 들어, 0번째 데이터 값으로부터 시작하여 3 개의 소스 데이터 값 중 하나씩)을 포함한다.
[0085] 명령 관리자(140)는 (예를 들어, 인터셉트 파라미터(156A) 또는 디폴트 값에 의해 표시된) 개시 요소(166A)를 결정하고, (예를 들어, 스텝 파라미터(158A), 주기성 파라미터(154A) 또는 디폴트 값에 의해 표시된) 스텝 요소 카운트(168A)를 결정하도록 구성된다. 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 개시 요소(166A) 및 스텝 요소 카운트(168A)에 기초하여 요소 선택 순서(186A)를 결정하도록 구성된다. 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 순열 명령(334)의 실행 동안 요소 선택 순서(186A)에 기초하여 순열 결과 레지스터(148B)를 파퓰레이팅함으로써 제1 최종 결과를 생성하도록 구성된다. 예를 들어, 도 4의 예(400)에 도시된 바와 같이, 순열 결과 레지스터(148B)는 관심 있는 모든 데이터 값(예를 들어, 0번째 데이터 값으로부터 시작하여 3 개의 소스 데이터 값마다 하나씩)을 순서대로 포함한다.
[0086] 특정 예에서, 명령 관리자(140)는 파라미터들의 제2 세트에 기초하여 도 1을 참조하여 설명된 바와 같은 유사한 동작들을 수행함으로써 순열 결과 레지스터(148D)에서 제2 필터링 동작의 제2 최종 결과들을 생성하기 위해 순열 명령(334)을 실행하도록 구성된다. 예시하자면, 명령 관리자(140)는 (예를 들어, 레지스터 개시 파라미터(152B) 또는 디폴트 값에 의해 표시된) 개시 레지스터(162B)를 결정하고, (예를 들어, 주기성 파라미터(154B)에 의해 표시된) 벡터 레지스터 카운트(164B)를 결정하도록 구성된다. 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 레지스터 선택 데이터(176), 개시 레지스터(162B) 및 벡터 레지스터 카운트(164B)에 기초하여 레지스터 선택 순서(184B)를 결정하도록 구성된다. 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 순열 명령(334)의 실행 동안 레지스터 선택 순서(184B)에 기초하여 순열 결과 레지스터(148C)를 파퓰레이팅함으로써 제2 중간 결과를 생성하도록 구성된다. 예를 들어, 도 4의 예(400)에 도시된 바와 같이, 순열 결과 레지스터(148C)는 순서를 벗어나 관심 있는 모든 데이터 값(예를 들어, 1번째 데이터 값으로부터 시작하여 3 개의 소스 데이터 값 중 하나씩)을 포함한다.
[0087] 명령 관리자(140)는 (예를 들어, 인터셉트 파라미터(156B) 또는 디폴트 값에 의해 표시된) 개시 요소(166B)를 결정하고, (예를 들어, 스텝 파라미터(158B), 주기성 파라미터(154B) 또는 디폴트 값에 의해 표시된) 스텝 요소 카운트(168B)를 결정하도록 구성된다. 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 개시 요소(166B) 및 스텝 요소 카운트(168B)에 기초하여 요소 선택 순서(186B)를 결정하도록 구성된다. 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 순열 명령(334)의 실행 동안 요소 선택 순서(186B)에 기초하여 순열 결과 레지스터(148D)를 파퓰레이팅함으로써 제2 최종 결과를 생성하도록 구성된다. 예를 들어, 도 4의 예(400)에 도시된 바와 같이, 순열 결과 레지스터(148D)는 관심 있는 모든 데이터 값(예를 들어, 1번째 데이터 값으로부터 시작하여 3 개의 소스 데이터 값마다 하나씩)을 순서대로 포함한다.
[0088] 파라미터들의 2 개의 세트들을 포함하는 순열 명령(334)은 예시적이고 비제한적인 예로서 제공된다. 다른 예들에서, 순열 명령은 소스 데이터에 대해 2 개 초과의 동작들을 수행하는 최종 결과들을 생성하기 위해 파라미터들의 2 개 초과의 세트들을 포함할 수 있다.
[0089] 예(400)에서, 주기성 파라미터(154B)는 주기성 파라미터(154A)와 동일한 값을 나타내므로, 레지스터 선택 순서(184B)는 레지스터 선택 순서(184A)와 유사한 패턴(예를 들어, (레지스터 개시 파라미터 + i) % 주기성 파라미터))을 따른다. 레지스터 개시 파라미터(152B)가 레지스터 개시 파라미터(152A)에 의해 표시된 값(예를 들어, 0)과 상이한 값(예를 들어, 2)을 나타내기 때문에, 레지스터 선택 순서(184B)는 레지스터 선택 순서(184A)와 상이한 값들을 나타낸다. 일부 예들에서, 레지스터 선택 순서는 도 5를 참조하여 추가로 설명되는 바와 같이, (예를 들어, (레지스터 개시 파라미터 + i) % 주기성 파라미터 대신) 상이한 패턴을 따를 수 있다.
[0090] 도 5를 참조하면, 레지스터 선택 데이터(176)의 예(500)가 도시된다. 레지스터 선택 데이터(176)는 복수의 벡터 레지스터 카운트들(172)을 복수의 레지스터 선택 순서들(174)에 맵핑한다.
[0091] 레지스터 선택 데이터(176)는 벡터 레지스터 카운트(172A)(예를 들어, 5)가 ((레지스터 개시 파라미터(152) + 2i) % (주기성 파라미터(154)) 또는 ((레지스터 개시 파라미터(152) + 2i) % 5)와 같은 레지스터 선택 순서(174A)에 대응함을 나타내며, 여기서 "i"는 요소 인덱스에 대응하고 레지스터 선택 순서(174A)는 요소 인덱스 i에 대응하는 소스 레지스터 인덱스를 나타낸다.
[0092] 일부 예들에서, 다수의 벡터 레지스터 카운트들(172)은 동일한 패턴에 대응하지만 동일한 레지스터 개시 파라미터(152)에 대한 상이한 소스 레지스터 인덱스 값들을 나타내는 레지스터 선택 순서(174)에 대응할 수 있다. 예를 들어, 벡터 레지스터 카운트(172B)(예를 들어, 9)는 레지스터 선택 순서(174B)(예를 들어, (레지스터 개시 파라미터(152) + 7i) % 9)에 대응하고, 벡터 레지스터 카운트(172C)(예를 들어, 15)는 레지스터 선택 순서(174C)(예를 들어, (레지스터 개시 파라미터(152) + 7i) % 15)에 대응한다. 레지스터 선택 순서(174B) 및 레지스터 선택 순서(174C)의 각각은 동일한 레지스터 선택 순서 패턴(예를 들어, (레지스터 개시 파라미터(152) + 7i) % 주기성 파라미터(154))에 대응한다. 레지스터 선택 순서(174B) 및 레지스터 선택 순서(174C)는 주기성 파라미터(154)에 의해 표시된 상이한 값들에 기초하기 때문에, 레지스터 선택 순서(174B) 및 레지스터 선택 순서(174C)는 동일한 레지스터 개시 파라미터(152)에 대해 상이한 소스 레지스터 인덱스 값들을 나타낸다.
[0093] 일부 예들에서, 다수의 벡터 레지스터 카운트들(172)은 동일한 패턴에 대응하고 동일한 레지스터 개시 파라미터(152)에 대한 동일한 소스 레지스터 인덱스 값들을 나타내는 레지스터 선택 순서들(174)에 대응할 수 있다. 예를 들어, 벡터 레지스터 카운트들(172N)의 각각(예를 들어, 6, 7, 10-14 및 17 이상)은 레지스터 선택 순서(174N)(예를 들어, (레지스터 개시 파라미터(152) + i) % 32)에 대응한다. 레지스터 선택 순서(174N)는 주기성 파라미터(154)와 독립적이기 때문에, 레지스터 선택 순서(174N)는 동일한 레지스터 개시 파라미터(152)에 대한 벡터 레지스터 카운트들(172N)의 각각에 대해 동일한 소스 레지스터 인덱스 값들을 나타낸다.
[0094] 복수의 레지스터 선택 순서들(174)이 예시적인 예로서 레지스터 개시 파라미터(152), 주기성 파라미터(154) 또는 둘 모두의 관점에서 설명된다. 보다 일반적인 경우들에 있어서, 복수의 레지스터 선택 순서들(174)은 개시 레지스터(162), 벡터 레지스터 카운트(164) 또는 둘 모두의 관점에서 설명될 수 있다.
[0095] 특정 양태에서, 레지스터 선택 데이터(176)는 다음 식들에 기초하여 결정된다. 소스 벡터 레지스터들(146)의 각각은 32 개의 요소들을 포함한다. 복수의 소스 벡터 레지스터들(146)에 저장된 소스 데이터의 데이터 값의 소스 데이터 인덱스는 32v + i에 대응하며, 여기서 "v"는 소스 레지스터 인덱스에 대응하고 "i"는 데이터 값이 저장되는 요소 인덱스에 대응한다. 예를 들어, 35의 소스 데이터 인덱스를 갖는 데이터 값(예를 들어, 35번째 소스 데이터 값)은 "1"의 소스 레지스터 인덱스를 갖는 소스 벡터 레지스터(146)의 "3"의 요소 인덱스를 갖는 요소에 저장된다(예를 들어, v = 1, i = 3, 32v + i = 32 + 3 = 35). 필터링 동작에 대한 관심 있는 각각의 데이터 값 "x[mn]"은 이하에 대응한다:
32v + i = mn 식 1
[0096] 여기서 "m"은 벡터 레지스터 카운트(164)에 대응하고, "n"은 0 이상의 정수 값에 대응한다. 식 1은 mn ― 32v = i와 같이 재배열될 수 있다. 9의 벡터 레지스터 카운트(164)에 대해, 필터링 동작은 이하에 대응한다:
9n ― 32v = i 식 2
[0097] 9의 벡터 레지스터 카운트(164) 및 1의 요소 인덱스 i에 대응하는 복수의 소스 벡터 레지스터들(146)의 소스 데이터의 1번째 열에 대해, 필터링 동작은 이하에 대응한다:
9n ― 32v = 1 식 3
[0098] 9의 벡터 레지스터 카운트(164)의 경우, 관심 있는 0번째 데이터 값은 소스 벡터 레지스터(146A)의 요소 0에 저장되고, 관심 있는 1번째 데이터 값은 소스 벡터 레지스터(146A)의 요소 9에 저장되는 등이다. 식 3은 n = 25 및 v = 7에 대해 충족된다. 예를 들어, 9의 벡터 레지스터 카운트(164)의 경우, 1의 요소 인덱스를 갖는 관심 있는 데이터 값은 관심 있는 25번째 소스 데이터 값(n = 25에 대응)이며, 7의 소스 레지스터 인덱스(v = 7에 대응)에 대응하는 소스 벡터 레지스터에 있다. 식 3은 다음과 같이 다시 작성될 수 있다:
식 4
[0099] 여기서 이고 이다. 식 4에 i를 곱하면 이하에 대응한다:
식 5
[0100] 식 5는 0부터 31까지의 i의 모든 값들에 대해 충족된다. 9의 벡터 레지스터 카운트(164), 0의 레지스터 개시 파라미터(152) 및 0부터 31까지의 i의 모든 값들에 대해, 레지스터 선택 순서(174B)는 에 대응하며, 여기서 이다. 예시하자면, 레지스터 선택 순서(174B)는 이하에 대응한다:
(7i) % 9 식 6
[0101] 벡터 레지스터 카운트(164)의 다른 값들에 대한 레지스터 선택 순서들(174)은 유사한 방식으로 결정될 수 있다.
[0102] 도 6을 참조하면, 도 1의 순열 명령(134)의 실행의 예(600)가 도시된다. 예를 들어, 도 1의 명령 관리자(140)는 순열 명령(134)의 실행 동안 예(600)에 예시된 하나 이상의 동작들을 수행한다. 일부 예에서, 도 3의 순열 명령(334)의 실행 동안 유사한 동작들이 수행될 수 있다. 예(600)에서, 레지스터 개시 파라미터(152)(예를 들어, 0), 주기성 파라미터(154)(예를 들어, 5), 인터셉트 파라미터(156)(예를 들어, 0) 및 스텝 파라미터(158)(예를 들어, 5)는 x[5n]을 선택하는 것과 같이 소스 데이터에 대해 필터링 동작을 수행하는 것에 대응하며, 여기서 "x"는 소스 데이터에 대응하고 "n"은 0 이상의 정수이다. 예를 들어, x[5n]을 선택하는 것은 x[0], x[5], x[10] 등을 선택하거나 0번째 데이터 값에서 시작하여 5 개의 소스 데이터 값 중 하나씩 선택하는 것에 대응한다.
[0103] 소스 데이터는 소스 벡터 레지스터(146A), 소스 벡터 레지스터(146B), 소스 벡터 레지스터(146C), 소스 벡터 레지스터(146D) 및 소스 벡터 레지스터(146E)에 저장된다. 소스 벡터 레지스터(146A), 소스 벡터 레지스터(146B), 소스 벡터 레지스터(146C), 소스 벡터 레지스터(146D) 및 소스 벡터 레지스터(146E)는 제1 소스 레지스터 인덱스(예를 들어, 0), 제2 소스 레지스터 인덱스(예를 들어, 1), 제3 소스 레지스터 인덱스(예를 들어, 2), 제4 소스 레지스터 인덱스(예를 들어, 3) 및 제5 소스 레지스터 인덱스(예를 들어, 4)에 각각 대응한다.
[0104] 순열 결과 레지스터(148A)는 비연속 소스 레지스터 인덱스 값들에 대응하는 소스 벡터 레지스터들로부터 요소들의 값들을 복사함으로써 파퓰레이팅된다. 예를 들어, 도 1의 명령 관리자(140)는 레지스터 선택 순서(184)에 기초하여, 제1 소스 레지스터 인덱스(예를 들어, 0)에 대응하는 소스 벡터 레지스터(146A)의 0번째 요소의 값(예를 들어, i0)을 순열 결과 레지스터(148A)의 0번째 요소에 복사하고, 제3 소스 레지스터 인덱스(예를 들어, 2)에 대응하는 소스 벡터 레지스터(146C)의 1번째 요소의 값(예를 들어, k1)을 순열 결과 레지스터(148A)의 1번째 요소에 복사한다.
[0105] 인터셉트 파라미터(156)는 개시 요소(166)(예를 들어, 0)를 나타내고, 스텝 파라미터(158)는 스텝 요소 카운트(168)(예를 들어, 5)를 나타낸다. 순열 결과 레지스터(148B)는 개시 요소(166)(예를 들어, 0번째 요소)로 시작하고, 이어서 스텝 요소 카운트(168)(예를 들어, 5)의 배수들인 요소 인덱스들을 갖는 요소들이 후속되는 순열 결과 레지스터(148A)로부터의 값들을 복사하고, 스텝 요소 카운트(168)(예를 들어, 5)에 기초하여 순열 결과 레지스터(148A)의 요소들을 통해 계속해서 스테핑하도록 래핑 어라운드함으로써 파퓰레이팅된다. 따라서, 순열 결과 레지스터(148A)는 0번째 소스 데이터 값으로부터 시작하여 5 개의 소스 데이터 값 중 하나씩의 순서대로 저장한다.
[0106] 도 7을 참조하면, 순열 명령(134)의 실행 이전에 회전 명령(136)의 실행의 예(700)가 도시된다. 특정 양태에서, 도 1의 명령 관리자(140)는 순열 명령(134)의 실행 이전에 복수의 소스 벡터 레지스터(146) 중 하나 이상의 값들의 포지션들을 회전시키기 위해 회전 명령(136)을 실행한다. 일부 예들에서, 명령 관리자(140)는 도 3의 순열 명령(334)의 실행 이전에 회전 명령(136)을 실행할 수 있다.
[0107] 예(700)에서, 레지스터 개시 파라미터(152)(예를 들어, 0), 주기성 파라미터(154)(예를 들어, 4), 인터셉트 파라미터(156)(예를 들어, 0) 및 스텝 파라미터(158)(예를 들어, 4)를 갖는 순열 명령(134)은 x[4n]을 선택하는 것과 같이 소스 데이터에 대한 필터링 동작을 수행하는 것에 대응하며, 여기서 "x"는 소스 데이터에 대응하고 "n"은 0 이상의 정수이다. 예를 들어, x[4n]을 선택하는 것은 x[0], x[4], x[8] 등을 선택하거나, 0번째 데이터 값에서 시작하여 4 개의 소스 데이터 값 중 하나씩 선택하는 것에 대응한다.
[0108] 소스 데이터의 각각의 열은 순열 명령(134)에 대한 관심 있는 다수의 데이터 값들을 포함한다. 본원에서 사용되는 "관심 있는 데이터 값"은 순열 명령 실행의 최종 결과에 포함될 데이터 값에 대응한다. 예를 들어, 동일한 요소 인덱스(예를 들어, 0, 4, 8, 12, 16, 20, 24 또는 28)에 대응하는 다수의 소스 벡터 레지스터들(146)의 요소들은 관심 있는 데이터 값들을 포함한다. 예시하자면, 소스 벡터 레지스터(146A), 소스 벡터 레지스터(146B), 소스 벡터 레지스터(146C) 및 소스 벡터 레지스터(146D) 각각의 0번째 요소는 관심 있는 데이터 값을 포함한다.
[0109] 명령 관리자(140)는 소스 벡터 레지스터(146B), 소스 벡터 레지스터(146C) 및 소스 벡터 레지스터(146D)에 저장된 값들의 포지션들을 각각 1, 2 및 3만큼 회전시키기 위해 회전 명령(136)을 수행한다. 회전 명령(136)의 실행에 후속하여, 복수의 소스 벡터 레지스터들(146)의 소스 데이터의 각각의 열은 관심 있는 단일 데이터 값을 포함한다. 예를 들어, 동일한 요소 인덱스(예를 들어, 0-31)에 대응하는 다수의 소스 벡터 레지스터들(146)의 요소들 중 단일 요소는 관심 있는 데이터 값을 포함한다. 예시하자면, 소스 벡터 레지스터(146A), 소스 벡터 레지스터(146B), 소스 벡터 레지스터(146C) 및 소스 벡터 레지스터(146D) 중 하나의 0번째 요소는 관심 있는 데이터 값을 포함한다. 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 복수의 소스 벡터 레지스터들(146)의 소스 데이터에 기초하여 순열 결과 레지스터(148A)를 파퓰레이팅하도록 순열 명령(134)을 실행하고, 순열 결과 레지스터(148A)의 값들의 순열에 기초하여 순열 결과 레지스터(148B)를 파퓰레이팅한다.
[0110] 도 8 및 도 9는 행렬 전치에 대응하는 순열 명령(134)의 다중 실행들의 예들을 예시한다. 도 8은 순열 명령(134)의 제1 실행이 순열 결과 레지스터(148B)에서 출력을 생성하는 것을 묘사한다. 도 9는 순열 명령(134)의 제2 실행이 순열 결과 레지스터(148D)에서 출력을 생성하는 것을 묘사한다. 도 9의 예에서, 순열 결과 레지스터(148B), 순열 결과 레지스터(148D), 순열 결과 레지스터(148F) 및 순열 결과 레지스터(148G)의 조합은 소스 벡터 레지스터들(146A―D)에 저장된 행렬의 전치에 대응한다.
[0111] 도 8을 참조하면, 순열 명령(134)의 실행의 예(800)가 도시된다. 특정 양태에서, 도 1의 명령 관리자(140)는 복수의 소스 벡터 레지스터들(146) 중 하나 이상의 값들의 행렬 전치를 수행하기 위해 순열 명령(134)을 실행한다.
[0112] 순열 명령(134)의 제1 실행에서, 첫 번째 열(예를 들어, 0번째 열)은 관심 있는 열에 대응하고, 소스 데이터의 관심 있는 이전 열 이후의 4 개의 열 중 하나씩의 열(예를 들어, 벡터 레지스터 카운트(164)에 대응)은 관심 있는 열에 대응한다. 관심 있는 열의 각각의 값은 관심 있는 데이터 값에 대응한다. 유사하게, 도 9를 참조하여 추가로 설명되는 바와 같이, 순열 명령(134)의 제2 실행의 경우, 두 번째 열(예를 들어, 1번째 열)은 관심 있는 열에 대응하고, 관심 있는 이전 열 이후의 4 개의 열 중 하나씩의 열(예를 들어, 벡터 레지스터 카운트(164)에 대응)은 관심 있는 열에 대응한다.
[0113] 명령 관리자(140)는 도 7을 참조하여 설명된 바와 같이, 순열 명령(134)의 실행 이전에 회전 명령(136)을 실행한다. 예를 들어, 명령 관리자(140)는 소스 벡터 레지스터(146B), 소스 벡터 레지스터(146C) 및 소스 벡터 레지스터(146D)에 저장된 값들의 포지션들을 각각 1, 2 및 3만큼 회전시키기 위해 회전 명령(136)을 수행한다. 회전 명령(136)의 실행에 후속하여, 복수의 소스 벡터 레지스터들(146)의 소스 데이터의 각각의 열은 순열 명령(134)의 특정 실행을 위한 관심 있는 단일 데이터 값을 포함한다.
[0114] 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 순열 명령(134)의 제1 실행 동안 레지스터 개시 파라미터(152)(예를 들어, 0) 및 주기성 파라미터(154)(예를 들어, 4)에 기초하여 순열 결과 레지스터(148A)를 파퓰레이팅한다. 예를 들어, 순열 명령(134)의 제1 실행을 위한 관심 있는 각각의 열은 순열 결과 레지스터(148A)에 포함된다. 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 순열 명령(134)의 제1 실행 동안 인터셉트 파라미터(156)(예를 들어, 0) 및 스텝 파라미터(158)(예를 들어, 1)에 기초하여 순열 결과 레지스터(148B)를 파퓰레이팅한다. 예를 들어, 인터셉트 파라미터(156)의 특정 값(예를 들어, 0)과 스텝 파라미터(158)의 특정 값(예를 들어, 1)은 순열 없이 순열 결과 레지스터(148A)의 요소들의 값들을 순열 결과 레지스터(148B)에 복사하는 것에 대응한다. 순열 결과 레지스터(148B)는 순열 명령(134)의 제1 실행을 위한 소스 데이터의 관심 있는 각각의 열의 전치에 대응한다. 예를 들어, 순열 결과 레지스터(148B)는 순열 명령(134)의 제1 실행을 위한 소스 데이터의 관심 있는 각각의 열을 포함하는 행을 나타낸다.
[0115] 도 9를 참조하면, 순열 명령(134)의 실행의 예(900)가 도시된다. 예시하자면, 예(900)는 복수의 소스 벡터 레지스터들(146) 중 하나 이상의 값들의 행렬 전치를 수행하기 위해 명령 관리자(140)에 의한 순열 명령(134)의 제2 실행에 대응한다.
[0116] 도 8을 참조하여 설명된 바와 같이, 회전 명령(136)의 실행에 후속하여, 복수의 소스 벡터 레지스터들(146)의 소스 데이터의 각각의 열은 순열 명령(134)의 제2 실행을 위한 관심 있는 단일 데이터 값을 포함한다.
[0117] 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 순열 명령(134)의 제2 실행 동안 레지스터 개시 파라미터(152)(예를 들어, 3) 및 주기성 파라미터(154)(예를 들어, 4)에 기초하여 순열 결과 레지스터(148C)를 파퓰레이팅한다. 예를 들어, 순열 명령(134)의 제2 실행을 위한 관심 있는 각각의 열은 순열 결과 레지스터(148C)에 포함된다. 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 순열 명령(134)의 제2 실행 동안 인터셉트 파라미터(156)(예를 들어, 1) 및 스텝 파라미터(158)(예를 들어, 1)에 기초하여 순열 결과 레지스터(148D)를 파퓰레이팅한다. 순열 결과 레지스터(148D)는 순열 명령(134)의 제2 실행을 위한 소스 데이터의 관심 있는 각각의 열의 전치에 대응한다. 예시하자면, 순열 결과 레지스터(148D)는 순열 명령(134)의 제2 실행을 위한 소스 데이터의 각각의 관심 있는 열을 포함하는 행을 나타낸다.
[0118] 도 9의 예(950)에서, 순열 명령(134)의 다중 실행들 후에, 순열 결과 레지스터(148B)는 순열 명령(134)의 제1 실행을 위한 소스 데이터의 관심 있는 각각의 열을 포함하는 첫 번째 행을 나타내고, 순열 결과 레지스터(148D)는 순열 명령(134)의 제2 실행을 위한 소스 데이터의 관심 있는 각각의 열을 포함하고, 순열 결과 레지스터(148F)는 순열 명령(134)의 제3 실행을 위한 소스 데이터의 관심 있는 각각의 열을 포함하는 세 번째 행을 나타내고, 순열 결과 레지스터(148G)는 순열 명령(134)의 제4 실행을 위한 소스 데이터의 관심 있는 각각의 열을 포함하는 네 번째 행을 나타낸다. 첫 번째 행, 두 번째 행, 세 번째 행 및 네 번째 행의 조합은 소스 벡터 레지스터들(146A―D)의 소스 데이터(사전-회전)의 행렬 전치에 대응한다. 일부 양태들에서, 행렬 전치는 순열 명령(134)의 4 개의 호출들과 비교하여 순열 명령(334)의 2 개의 호출들에 의해 수행될 수 있다.
[0119] 행렬 전치를 수행하기 위해 순열 명령(예를 들어, 순열 명령(134) 또는 순열 명령(334))을 사용하는 것이 예시적인 예로서 제공된다. 순열 명령은 다운샘플링 연산, 고속 푸리에 커널 연산, 또는 다양한 다른 연산들과 같은 다른 연산들을 수행하는 동안 또는 이들의 준비로 사용될 수 있다. 예를 들어, 순열 명령은 도 2를 참조하여 설명된 바와 같이, 다운샘플링 연산(예를 들어, 1/3만큼 다운샘플링)의 일부로서 필터링을 수행하는 데 사용될 수 있다. 다른 예로서, 순열 명령은 고속 푸리에 커널 연산을 수행하는 것의 일부로서 짝수 데이터 값들을 하나 이상의 제1 순열 결과 레지스터들에 대해 필터링하고 홀수 데이터 값들을 하나 이상의 제2 순열 결과 레지스터들에 대해 필터링하는 데 사용될 수 있다.
[0120] 도 10을 참조하면, 순열 명령을 실행하는 방법(1000)의 특정 구현이 도시된다. 특정 양태에서, 방법(1000)의 하나 이상의 동작들은 도 1의 명령 관리자(140), 프로세서(190), 디바이스(102) 중 적어도 하나, 또는 이들의 조합에 의해 수행된다.
[0121] 본 방법(1000)은 1002에서, 순열 명령에 액세스하는 단계를 포함한다. 예를 들어, 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 명령 큐(queue)로부터 순열 명령(134)을 수신한다.
[0122] 본 방법(1000)은 1004에서, 순열 명령의 주기성 파라미터에 액세스하는 단계를 포함한다. 예를 들어, 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 순열 명령(134)의 주기성 파라미터(154)에 액세스한다. 주기성 파라미터(154)는 순열 명령(134)에 대한 소스 데이터를 포함하는 복수의 소스 벡터 레지스터들(146)의 벡터 레지스터 카운트(164)를 나타낸다. 다른 예로서, 명령 관리자(140)는 도 3을 참조하여 설명된 바와 같이, 순열 명령(334)의 주기성 파라미터(154A) 및 주기성 파라미터(154B)에 액세스한다. 주기성 파라미터(154A)는 순열 명령(334)의 실행 동안 순열 결과 레지스터(148A) 및 순열 결과 레지스터(148B)를 파퓰레이팅하기 위한 소스 데이터를 포함하는 복수의 소스 벡터 레지스터들(146)의 벡터 레지스터 카운트(164A)를 나타낸다. 주기성 파라미터(154B)는 순열 명령(334)의 실행 동안 순열 결과 레지스터(148C) 및 순열 결과 레지스터(148D)를 파퓰레이팅하기 위한 소스 데이터를 포함하는 복수의 소스 벡터 레지스터들(146)의 벡터 레지스터 카운트(164B)를 나타낸다.
[0123] 본 방법(1000)은 또한 1006에서, 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해, 벡터 레지스터들의 카운트에 적어도 부분적으로 기초하여 복수의 벡터 레지스터들 중 벡터 레지스터를 선택하고, 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅하도록 순열 명령을 실행하는 단계를 포함한다. 예를 들어, 명령 관리자(140)는 도 1을 참조하여 설명된 바와 같이, 순열 결과 레지스터(148A)의 각각의 요소에 대해, 벡터 레지스터 카운트(164)에 적어도 부분적으로 기초하여 복수의 소스 벡터 레지스터들(146) 중 하나를 선택하고, 복수의 소스 벡터 레지스터들(146) 중 선택된 하나의 대응하는 요소의 값에 기초하여 순열 결과 레지스터(148A)의 특정 요소를 파퓰레이팅하도록 순열 명령(134)을 실행한다. 다른 예로서, 명령 관리자(140)는 순열 결과 레지스터(148A)의 각각의 요소에 대해, 벡터 레지스터 카운트(164A)에 적어도 부분적으로 기초하여 복수의 소스 벡터 레지스터들(146) 중 하나를 선택하고, 복수의 소스 벡터 레지스터들(146) 중 선택된 하나의 대응하는 요소의 값에 기초하여 순열 결과 레지스터(148A)의 특정 요소를 파퓰레이팅하도록 순열 명령(334)을 실행한다. 명령 관리자(140)는 순열 결과 레지스터(148C)의 각각의 요소에 대해, 벡터 레지스터 카운트(164B)에 적어도 부분적으로 기초하여 복수의 소스 벡터 레지스터들(146) 중 하나를 선택하고, 복수의 소스 벡터 레지스터들(146) 중 선택된 하나의 대응하는 요소의 값에 기초하여 순열 결과 레지스터(148C)의 특정 요소를 파퓰레이팅하도록 순열 명령(334)을 실행한다.
[0124] 본 방법(1000)은 벡터 레지스터 카운트(164)에 적어도 부분적으로 기초하여 순열 결과 레지스터(148A)의 요소에 대해 복수의 소스 벡터 레지스터들(146) 중 하나의 선택을 가능하게 한다. 스칼라 값으로서 저장될 수 있는 벡터 레지스터 카운트(164)에 기초하여 소스 벡터 레지스터를 선택하는 것은 순열 결과 레지스터(148A)의 각각의 요소에 대한 소스 벡터 레지스터를 나타내는 벡터 레지스터에 기초하여 소스 벡터 레지스터를 선택하는 것에 비해 메모리 사용량을 감소시킨다.
[0125] 도 10의 방법(1000)은 필드-프로그래밍 가능 게이트 어레이(FPGA: field programmable gate array) 디바이스, 주문형 집적 회로(ASIC: application―specific integrated circuit), 중앙 처리 장치(CPU: central processing unit), 디지털 신호 프로세서(DSP: digital signal processor), 그래픽 처리 장치(GPU: graphics processing unit)와 같은 프로세싱 유닛, 제어기, 다른 하드웨어 디바이스, 펌웨어 디바이스 또는 이들의 임의의 조합에 의해 구현될 수 있다. 일 예로서, 도 10의 방법(1000)은 도 11을 참조하여 설명되는 바와 같이, 명령들을 실행하는 프로세서에 의해 수행될 수 있다.
[0126] 도 11을 참조하면, 디바이스의 특정한 예시적인 구현의 블록도가 묘사되고 일반적으로 1100으로 지정된다. 다양한 구현들에서, 디바이스(1100)는 도 11에 예시된 것보다 더 많거나 더 적은 구성 요소들을 가질 수 있다. 예시적인 구현에서, 디바이스(1100)는 디바이스(102)에 대응할 수 있다. 예시적인 구현에서, 디바이스(1100)는 도 1 내지 도 10을 참조하여 설명된 하나 이상의 동작들을 수행할 수 있다.
[0127] 특정 구현에서, 디바이스(1100)는 프로세서(1106)(예를 들어, CPU)를 포함한다. 디바이스(1100)는 하나 이상의 추가 프로세서들(1110)(예를 들어, 하나 이상의 DSP들, 하나 이상의 GPU들 또는 이들의 조합)을 포함할 수 있다. 특정 양태에서, 도 1의 프로세서(190)는 프로세서(1106), 프로세서들(1110) 또는 이들의 조합에 대응한다. 특정 양태에서, 프로세서(1110)는 명령 관리자(140)를 포함한다. 프로세서(1110)는 또한 음성 코더("보코더(vocoder)") 인코더(1136), 보코더 디코더(1138) 또는 둘 모두를 포함하는 음성 및 음악 코더-디코더(CODEC)(1108)를 포함할 수 있다.
[0128] 디바이스(1100)는 벡터 레지스터 파일(138), 메모리(132) 및 CODEC(1134)을 포함할 수 있다. 메모리(132)는 명령 관리자(140)를 참조하여 설명된 기능을 구현하기 위해 하나 이상의 추가 프로세서들(1110)(또는 프로세서(1106))에 의해 실행 가능한 명령들(1156)을 포함할 수 있다. 디바이스(1100)는 트랜시버(1150)를 통해 안테나(1152)에 커플링된 모뎀(1148)을 포함할 수 있다.
[0129] 디바이스(1100)는 디스플레이 제어기(1126)에 커플링된 디스플레이(1128)를 포함할 수 있다. 하나 이상의 스피커들(1192), 하나 이상의 마이크로폰들(1190) 또는 이들의 조합이 CODEC(1134)에 커플링될 수 있다. CODEC(1134)은 디지털-대-아날로그 컨버터(DAC: digital-to-analog converter)(1102), 아날로그―대디지털 컨버터(ADC: analog-to-digital converter)(1104) 또는 둘 모두를 포함할 수 있다. 특정 구현에서, CODEC(1134)은 하나 이상의 마이크로폰들(1190)로부터 아날로그 신호들을 수신하고, 아날로그―대-디지털 컨버터(1104)를 사용하여 아날로그 신호들을 디지털 신호들로 변환하고, 디지털 신호들을 음성 및 음악 codec(1108)에 제공할 수 있다. 음성 및 음악 codec(1108)은 디지털 신호들을 프로세싱할 수 있다. 특정 구현에서, 음성 및 음악 codec(1108)은 디지털 신호들을 CODEC(1134)에 제공할 수 있다. CODEC(1134)은 디지털―대-아날로그 컨버터(1102)를 사용하여 디지털 신호들을 아날로그 신호들로 변환할 수 있고, 아날로그 신호들을 하나 이상의 스피커들(1192)에 제공할 수 있다.
[0130] 특정 구현에서, 디바이스(1100)는 시스템-인-패키지(system-in-package) 또는 시스템-온-칩(system-on-chip) 디바이스(1122)에 포함될 수 있다. 특정 구현에서, 메모리(132), 벡터 레지스터 파일(138), 프로세서(1106), 프로세서들(1110), 디스플레이 제어기(1126), CODEC(1134) 및 모뎀(1148)은 시스템-인-패키지 또는 시스템-온-칩 디바이스(1122)에 포함된다. 특정 구현에서, 입력 디바이스(1130) 및 전원(1144)이 시스템-온-칩 디바이스(1122)에 커플링된다. 또한, 특정 구현에서, 도 11에 예시된 바와 같이, 디스플레이(1128), 입력 디바이스(1130), 하나 이상의 스피커들(1192), 하나 이상의 마이크로폰들(1190), 안테나(1152) 및 전원(1144)은 시스템-온-칩 디바이스(1122) 외부에 있다. 특정 구현에서, 디스플레이(1128), 입력 디바이스(1130), 하나 이상의 스피커들(1192), 하나 이상의 마이크로폰들(1190), 안테나(1152) 및 전원(1144)의 각각은 인터페이스 또는 제어기와 같은 시스템-온-칩 디바이스(1122)의 구성 요소에 커플링될 수 있다.
[0131] 디바이스(1100)는 스마트 스피커, 스피커 바(bar), 모바일 통신 디바이스, 스마트 폰, 셀룰러 폰, 랩탑 컴퓨터, 컴퓨터, 태블릿, 퍼스널 디지털 어시스턴트(personal digital assistant), 디스플레이 디바이스, 텔레비전, 게이밍 콘솔, 음악 플레이어, 라디오, 디지털 비디오 플레이어, 디지털 비디오 디스크(DVD: digital video disc) 플레이어, 튜너, 카메라, 내비게이션 디바이스, 차량, 헤드셋, 증강 현실 헤드셋, 혼합 현실 헤드셋, 가상 현실 헤드셋, 항공기(aerial vehicle), 홈 자동화 시스템, 음성-활성화 디바이스, 무선 스피커 및 음성 활성화 디바이스, 휴대용 전자 디바이스, 자동차, 컴퓨팅 디바이스, 통신 디바이스, 사물 인터넷(IoT: internet-of-things) 디바이스, 가상 현실(VR: virtual reality) 디바이스, 기지국, 모바일 디바이스 또는 이들의 임의의 조합을 포함할 수 있다.
[0132] 설명된 구현들과 관련하여, 장치는 순열 명령의 주기성 파라미터에 액세스하기 위한 수단을 포함하며, 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 복수의 벡터 레지스터들 중 벡터 레지스터들의 카운트를 나타낸다. 예를 들어, 액세스하기 위한 수단은 도 1의 명령 관리자(140), 프로세서(190), 디바이스(102)의 하나 이상의 구성 요소들, 프로세서(1106), 프로세서들(1110), 디바이스(1100), 순열 명령의 주기성 파라미터에 액세스하도록 구성된 하나 이상의 다른 회로들 또는 구성 요소들, 또는 이들의 임의의 조합에 대응할 수 있다.
[0133] 장치는 또한 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해, 카운트에 적어도 부분적으로 기초하여 복수의 벡터 레지스터들 중 벡터 레지스터를 선택하고, 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅하도록 순열 명령을 실행하기 위한 수단을 포함한다. 예를 들어, 실행하기 위한 수단은 도 1의 명령 관리자(140), 프로세서(190), 디바이스(102)의 하나 이상의 구성 요소들, 프로세서(1106), 프로세서들(1110), 디바이스(1100), 순열 명령의 주기성 파라미터에 액세스하도록 구성된 하나 이상의 다른 회로들 또는 구성 요소들, 또는 이들의 임의의 조합에 대응할 수 있다.
[0134] 일부 구현들에서, 비-일시적인 컴퓨터-판독가능 매체(예를 들어, 메모리(132)와 같은 컴퓨터-판독가능 저장 디바이스)는 명령들(예를 들어, 명령들(1156))을 포함하며, 명령들은 하나 이상의 프로세서들(예를 들어, 프로세서(190), 하나 이상의 프로세서들(1110), 프로세서(1106) 또는 이들의 조합)에 의해 실행될 때, 하나 이상의 프로세서들로 하여금 순열 명령(예를 들어, 순열 명령(134), 순열 명령(334) 또는 둘 모두)의 주기성 파라미터(예를 들어, 주기성 파라미터(154), 주기성 파라미터(154A), 주기성 파라미터(154B) 또는 이들의 조합)에 액세스하게 한다. 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 복수의 벡터 레지스터들(예를 들어, 복수의 소스 벡터 레지스터들(146)) 중 벡터 레지스터들의 카운트(예를 들어, 벡터 레지스터 카운트(164), 벡터 레지스터 카운트(164A), 벡터 레지스터 카운트(164B) 또는 이들의 조합)를 나타낸다. 명령은 또한 하나 이상의 프로세서들에 의해 실행될 때, 하나 이상의 프로세서들로 하여금 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터(예를 들어, 순열 결과 레지스터(148A), 순열 결과 레지스터(148C) 또는 둘 모두)의 다수의 요소들의 각각의 특정 요소에 대해, 카운트에 적어도 부분적으로 기초하여 복수의 벡터 레지스터들 중의 벡터 레지스터를 선택하고, 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅하도록 순열 명령을 실행하게 한다.
[0135] 본 개시내용의 특정 양태들은 상호 관련된 조항들의 세트들로 아래에 설명된다:
[0136] 조항 1에 따르면, 디바이스 복수의 벡터 레지스터들을 포함하는 벡터 레지스터 파일; 순열 명령을 저장하도록 구성된 메모리; 및 프로세서를 포함하고, 프로세서는: 순열 명령의 주기성 파라미터에 액세스하고 ― 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 복수의 데이터 소스들의 카운트를 나타냄 ―; 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해: 복수의 데이터 소스들의 카운트에 적어도 부분적으로 기초하여, 복수의 데이터 소스들 중 데이터 소스를 선택하고; 선택된 데이터 소스의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅하도록 순열 명령을 실행하도록 구성된다.
[0137] 조항 2는 조항 1의 디바이스를 포함하며, 여기서 복수의 데이터 소스들은 복수의 벡터 레지스터들 중 다수의 벡터 레지스터들을 포함한다.
[0138] 조항 3은 조항 1 또는 조항 2의 디바이스를 포함하며, 여기서 순열 명령은 다운샘플링 연산, 행렬 전치 또는 고속 푸리에(fourier) 커널 연산 동안 또는 이들의 준비로 실행된다.
[0139] 조항 4는 조항 1 내지 조항 3 중 어느 하나의 디바이스를 포함하며, 여기서 프로세서는: 순열 명령의 개시 파라미터에 액세스하고 ― 개시 파라미터는 제1 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한 소스 데이터를 포함하는 복수의 데이터 소스들 중 특정 데이터 소스를 나타냄 ―; 개시 파라미터에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 나머지 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 복수의 데이터 소스들의 요소들을 선택하도록 추가로 구성된다.
[0140] 조항 5는 조항 1 내지 조항 4 중 어느 하나의 디바이스를 포함하며, 여기서 프로세서는 복수의 데이터 소스들의 카운트에 기초하여 선택 순서를 결정하고; 선택 순서에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 복수의 데이터 소스들의 요소들을 선택하도록 추가로 구성된다.
[0141] 조항 6은 조항 5의 디바이스를 포함하며, 여기서 메모리는 데이터 소스들의 카운트들에 대응하는 데이터 소스 선택의 순서들을 나타내는 선택 데이터를 저장하도록 구성되고, 프로세서는 선택 데이터에 기초하여 복수의 데이터 소스들의 카운트에 대응하는 선택 순서를 결정하도록 구성된다.
[0142] 조항 7은 조항 1 내지 조항 6 중 어느 하나의 디바이스를 포함하며, 여기서 프로세서는 제1 순열 결과 레지스터의 요소들의 값들의 순열에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하도록 순열 명령을 실행하도록 추가로 구성된다.
[0143] 조항 8은 조항 7의 디바이스를 포함하며, 여기서 프로세서는 인터셉트(intercept) 파라미터에 액세스하고 ― 인터셉트 파라미터는 제2 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한, 제1 순열 결과 레지스터의 특정 요소를 나타냄 ―; 인터셉트 파라미터에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하도록 추가로 구성된다.
[0144] 조항 9는 조항 7 또는 조항 8의 디바이스를 포함하며, 여기서 프로세서는: 순열 명령의 스텝 파라미터에 액세스하고 ― 스텝 파라미터는 요소 선택 순서를 나타냄 ―; 요소 선택 순서에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하도록 추가로 구성된다.
[0145] 조항 10은 조항 7 내지 조항 9 중 어느 하나의 디바이스를 포함하며, 여기서 프로세서는: 복수의 데이터 소스들의 카운트에 기초하여 요소 선택 순서를 결정하고; 요소 선택 순서에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하도록 추가로 구성된다.
[0146] 조항 11은 조항 1 내지 조항 10 중 어느 하나의 디바이스를 포함하며, 여기서 프로세서는 순열 명령을 실행하기 전에, 소스 데이터를 포함하는 복수의 데이터 소스들 중 적어도 하나의 데이터 소스의 요소들의 값들을 사전-프로세싱하도록 구성된다.
[0147] 조항 12는 조항 1 내지 조항 11 중 어느 하나의 디바이스를 포함하며, 여기서 프로세서는 순열 명령을 실행하기 전에, 소스 데이터를 포함하는 복수의 데이터 소스들 중 적어도 하나의 데이터 소스의 값들의 포지션들을 회전시키는 회전 명령을 실행하도록 구성된다.
[0148] 조항 13은 조항 1 내지 조항 12 중 어느 하나의 디바이스를 포함하며, 순열 명령은 제2 주기성 파라미터를 포함하고, 제2 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 제2 복수의 데이터 소스들의 제2 카운트를 나타내고, 순열 명령을 실행하는 것은 제2 복수의 데이터 소스들의 제2 카운트에 기초하여, 복수의 데이터 소스들의 요소들의 값들에 기초하여 복수의 벡터 레지스터들 중 특정 순열 결과 레지스터의 요소들을 파퓰레이팅하는 것을 포함한다.
[0149] 조항 14에 따르면, 방법은 디바이스에서, 순열 명령에 액세스하는 단계; 디바이스에서, 순열 명령의 주기성 파라미터에 액세스하는 단계 ― 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 복수의 벡터 레지스터들 중의 벡터 레지스터들의 카운트를 나타냄 ―; 디바이스에서, 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해: 벡터 레지스터들의 카운트에 적어도 부분적으로 기초하여, 복수의 벡터 레지스터들 중의 벡터 레지스터를 선택하고; 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅하도록 순열 명령을 실행하는 단계를 포함한다.
[0150] 조항 15는 조항 14의 방법을 포함하며, 디바이스에서, 순열 명령의 레지스터 개시 파라미터에 액세스하는 단계 ― 레지스터 개시 파라미터는 제1 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한 소스 데이터를 포함하는 벡터 레지스터들 중 특정 벡터 레지스터를 나타냄 ―; 및 레지스터 개시 파라미터에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 나머지 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 벡터 레지스터들의 요소들을 선택하는 단계를 추가로 포함한다.
[0151] 조항 16은 조항 14 또는 조항 15의 방법을 포함하며, 디바이스에서, 벡터 레지스터들의 카운트에 기초하여 레지스터 선택 순서를 결정하는 단계; 및 레지스터 선택 순서에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 벡터 레지스터들의 요소들을 선택하는 단계를 추가로 포함한다.
[0152] 조항 17은 조항 16의 방법을 포함하며, 레지스터 선택 데이터에 기초하여, 벡터 레지스터들의 카운트에 대응하는 레지스터 선택 순서를 결정하는 단계를 추가로 포함하고, 레지스터 선택 데이터는 벡터 레지스터들의 카운트들에 대응하는 레지스터 선택의 순서들을 나타낸다.
[0153] 조항 18은 조항 14 내지 조항 17 중 어느 하나의 방법을 포함하며, 여기서 순열 명령을 실행하는 단계는 제1 순열 결과 레지스터의 요소들의 값들의 순열에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하는 단계를 포함한다.
[0154] 조항 19는 조항 18의 방법을 포함하며, 인터셉트 파라미터에 액세스하는 단계 ― 인터셉트 파라미터는 제2 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한, 제1 순열 결과 레지스터의 특정 요소를 나타냄 ―; 및 인터셉트 파라미터에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하는 단계를 추가로 포함한다.
[0155] 조항 20은 조항 18 또는 조항 19의 방법을 포함하며, 순열 명령의 스텝 파라미터에 액세스하는 단계 ― 스텝 파라미터는 요소 선택 순서를 나타냄 ―; 및 요소 선택 순서에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하는 단계를 추가로 포함한다.
[0156] 조항 21은 조항 18 내지 조항 20 중 어느 하나의 방법을 포함하며, 디바이스에서, 벡터 레지스터들의 카운트에 기초하여 요소 선택 순서를 결정하는 단계; 및 요소 선택 순서에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하는 단계를 추가로 포함한다.
[0157] 조항 22는 조항 14 내지 조항 21 중 어느 하나의 방법을 포함하며, 순열 명령을 실행하기 전에, 소스 데이터를 포함하는 벡터 레지스터들 중 적어도 하나의 벡터 레지스터의 요소들의 값들을 사전-프로세싱하는 단계를 추가로 포함한다.
[0158] 조항 23은 조항 14 내지 조항 22 중 어느 하나의 방법을 포함하며, 순열 명령을 실행하기 전에, 소스 데이터를 포함하는 벡터 레지스터들 중 적어도 하나의 벡터 레지스터의 값들의 포지션들을 회전시키는 회전 명령을 실행하는 단계를 추가로 포함한다.
[0159] 조항 24에 따르면, 디바이스는 명령들을 저장하도록 구성된 메모리; 및 조항 14 내지 조항 23 중 어느 하나의 방법을 수행하기 위한 명령들을 실행하도록 구성된 프로세서를 포함한다.
[0160] 조항 25에 따르면, 비-일시적인 컴퓨터-판독가능 매체는 프로세서에 의해 실행될 때 프로세서로 하여금 조항 14 내지 조항 23 중 어느 하나의 방법을 수행하게 하는 명령들을 저장한다.
[0161] 조항 26에 따르면, 장치는 조항 14 내지 조항 23 중 어느 하나의 방법을 수행하기 위한 수단을 포함한다.
[0162] 조항 27에 따르면, 명령들을 저장하는 비-일시적인 컴퓨터-판독가능 매체는 명령들을 저장하고, 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금: 순열 명령의 주기성 파라미터에 액세스하게 하고 ― 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 복수의 벡터 레지스터들 중의 벡터 레지스터들의 카운트를 나타냄 ―; 그리고 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해: 벡터 레지스터들의 카운트에 적어도 부분적으로 기초하여, 복수의 벡터 레지스터들 중의 벡터 레지스터를 선택하고; 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅하도록 순열 명령을 실행하게 한다.
[0163] 조항 28은 조항 27의 비-일시적인 컴퓨터-판독가능 매체를 포함하며, 여기서 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금: 순열 명령의 레지스터 개시 파라미터에 액세스하게 하고 ― 레지스터 개시 파라미터는 제1 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한 소스 데이터를 포함하는 벡터 레지스터들 중 특정 벡터 레지스터를 나타냄 ―; 그리고 레지스터 개시 파라미터에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 나머지 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 벡터 레지스터들의 요소들을 선택하게 한다.
[0164] 조항 29는 조항 27 또는 조항 28의 비-일시적인 컴퓨터-판독가능 매체를 포함하며, 여기서 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금: 벡터 레지스터들의 카운트에 기초하여 레지스터 선택 순서를 결정하게 하고; 그리고 레지스터 선택 순서에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 벡터 레지스터들의 요소들을 선택하게 한다.
[0165] 조항 30은 조항 29의 비-일시적인 컴퓨터-판독가능 매체를 포함하며, 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금, 레지스터 선택 데이터에 기초하여, 벡터 레지스터들의 카운트에 대응하는 레지스터 선택 순서를 결정하게 하고, 여기서 레지스터 선택 데이터는 벡터 레지스터들의 카운트들에 대응하는 레지스터 선택의 순서들을 나타낸다.
[0166] 조항 31은 조항 27 내지 조항 30 중 어느 하나의 비-일시적인 컴퓨터-판독가능 매체를 포함하며, 여기서 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금, 제1 순열 결과 레지스터의 요소들의 값들의 순열에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하도록 순열 명령을 실행하게 한다.
[0167] 조항 32는 조항 31의 비-일시적인 컴퓨터-판독가능 매체를 포함하며, 여기서 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금: 인터셉트 파라미터에 액세스하게 하고 ― 인터셉트 파라미터는 제2 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한, 제1 순열 결과 레지스터의 특정 요소를 나타냄 ―; 그리고 인터셉트 파라미터에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하게 한다.
[0168] 조항 33은 조항 31 또는 조항 32의 비-일시적인 컴퓨터-판독가능 매체를 포함하며, 여기서 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금: 순열 명령의 스텝 파라미터에 액세스하게 하고 ― 스텝 파라미터는 요소 선택 순서를 나타냄 ―; 그리고 요소 선택 순서에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하게 한다.
[0169] 조항 34는 조항 31 내지 조항 33 중 어느 하나의 비-일시적인 컴퓨터-판독가능 매체를 포함하며, 여기서 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금: 벡터 레지스터들의 카운트에 기초하여 요소 선택 순서를 결정하게 하고; 그리고 요소 선택 순서에 적어도 부분적으로 기초하여, 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하게 한다.
[0170] 조항 35는 장치를 포함하고, 장치는 순열 명령의 주기성 파라미터에 액세스하기 위한 수단 ― 주기성 파라미터는 순열 명령에 대한 소스 데이터를 포함하는 복수의 벡터 레지스터들 중의 벡터 레지스터들의 카운트를 나타냄 ―; 및 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해: 벡터 레지스터들의 카운트에 적어도 부분적으로 기초하여, 복수의 벡터 레지스터들 중의 벡터 레지스터를 선택하고; 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 특정 요소를 파퓰레이팅하도록 순열 명령을 실행하기 위한 수단을 포함한다.
[0171] 조항 36은 조항 35의 장치를 포함하며, 여기서 액세스하기 위한 수단 또는 실행하기 위한 수단 중 적어도 하나는 통신 디바이스, 컴퓨터, 디스플레이 디바이스, 텔레비전, 게이밍 콘솔, 디지털 비디오 플레이어, 카메라, 내비게이션 디바이스, 차량, 헤드셋, 증강 현실 헤드셋, 혼합 현실 헤드셋, 가상 현실 헤드셋, 항공기, 홈 자동화 시스템, 음성-활성화 디바이스, 사물 인터넷(IoT: internet-of-things) 디바이스, 가상 현실(VR: virtual reality) 디바이스, 기지국 또는 모바일 디바이스 중 적어도 하나에 통합된다.
[0172] 본 기술 분야의 통상의 기술자는 본원에 개시된 구현들과 관련하여 설명된 다양한 예시적인 논리 블록들, 구성들, 모듈들, 회로들 및 알고리즘 단계들이 전자 하드웨어, 프로세서에 의해 실행되는 컴퓨터 소프트웨어 또는 이들의 조합들로 구현될 수 있음을 추가로 이해할 것이다. 다양한 예시적인 구성 요소들, 블록들, 구성들, 모듈들, 회로들 및 단계들은 일반적으로 그 기능의 관점에서 설명되었다. 이러한 기능이 하드웨어 또는 프로세서 실행 가능 명령들로 구현되는지는 전체 시스템에 부과되는 특정 애플리케이션 및 설계 제약 사항들에 따른다. 본 기술 분야의 통상의 기술자는 각각의 특정 애플리케이션에 대해 다양한 방식으로 설명된 기능을 구현할 수 있으며, 이러한 구현 결정들은 본 개시내용의 범위로부터 벗어나는 것으로 해석되어서는 안된다.
[0173] 본원에 개시된 구현들과 관련하여 설명된 방법 또는 알고리즘의 단계들은 하드웨어, 프로세서에 의해 실행되는 소프트웨어 모듈, 또는 이 둘의 조합으로 직접 구현될 수 있다. 소프트웨어 모듈은 랜덤 액세스 메모리(RAM: random access memory), 플래시 메모리, 판독-전용 메모리(ROM: read-only memory), 프로그래밍 가능 판독-전용 메모리(PROM: programmable read-only memory), 소거 가능 프로그래밍 가능 판독-전용 메모리(EPROM: erasable programmable read-only memory), 전기적 소거 가능 프로그래밍 가능 판독-전용 메모리(EEPROM: electrically erasable programmable read-only memory), 레지스터들, 하드 디스크, 이동식 디스크, 컴팩트 디스크 판독-전용 메모리(CD―ROM: compact disc read-only memory) 또는 해당 기술 분야에 알려진 비-일시적인 저장 매체의 임의의 다른 형태에 상주할 수 있다. 예시적인 저장 매체는 프로세서가 저장 매체로부터 정보를 판독하고 저장 매체에 정보를 기입할 수 있도록 프로세서에 커플링된다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다. 프로세서 및 저장 매체는 주문형 집적 회로(ASIC: application-specific integrated circuit)에 상주할 수 있다. ASIC는 컴퓨팅 디바이스 또는 사용자 단말에 상주할 수 있다. 대안적으로, 프로세서 및 저장 매체는 컴퓨팅 디바이스 또는 사용자 단말에서 이산 구성 요소들로서 상주할 수 있다.
[0174] 개시된 양태들의 이전 설명은 본 기술 분야의 통상의 기술자가 개시된 양태들을 만들거나 사용할 수 있도록 제공된다. 이러한 양태들에 대한 다양한 수정들은 본 기술 분야의 통상의 기술자에게 쉽게 명백할 것이며, 본원에 정의된 원리들은 본 개시내용의 범위를 벗어나지 않고 다른 양태들에 적용될 수 있다. 따라서, 본 개시내용은 본원에 나타낸 양태들로 제한되도록 의도되지 않고, 이하의 청구항들에 의해 정의된 원리들 및 새로운 특징들과 일치하는 가능한 가장 넓은 범위에 따라야 한다.

Claims (30)

  1. 디바이스로서,
    복수의 벡터 레지스터들을 포함하는 벡터 레지스터 파일;
    순열 명령(permutation instruction)을 저장하도록 구성된 메모리; 및
    프로세서를 포함하고, 상기 프로세서는:
    상기 순열 명령의 주기성 파라미터(periodicity parameter)에 액세스하고 ― 상기 주기성 파라미터는 상기 순열 명령에 대한 소스 데이터를 포함하는 복수의 데이터 소스들의 카운트(count)를 나타냄 ―; 그리고
    상기 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소(element)들 중 각각의 특정 요소에 대해:
    상기 복수의 데이터 소스들의 카운트에 적어도 부분적으로 기초하여, 상기 복수의 데이터 소스들 중 데이터 소스를 선택하고; 그리고
    상기 선택된 데이터 소스의 대응하는 요소의 값에 기초하여 상기 특정 요소를 파퓰레이팅(populate)하도록
    상기 순열 명령을 실행하도록 구성되는, 디바이스.
  2. 제1 항에 있어서,
    상기 복수의 데이터 소스들은 상기 복수의 벡터 레지스터들 중 다수의 벡터 레지스터들을 포함하는, 디바이스.
  3. 제1 항에 있어서,
    상기 순열 명령은 다운샘플링 연산(downsampling operation), 행렬 전치(matrix transpose) 또는 고속 푸리에 커널 연산(fast fourier kernel operation) 동안 또는 이들의 준비로 실행되는, 디바이스.
  4. 제1 항에 있어서,
    상기 프로세서는:
    상기 순열 명령의 개시 파라미터(start parameter)에 액세스하고 ― 상기 개시 파라미터는 상기 제1 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한 소스 데이터를 포함하는 상기 복수의 데이터 소스들 중 특정 데이터 소스를 나타냄 ―; 그리고
    상기 개시 파라미터에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 나머지 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 상기 복수의 데이터 소스들의 요소들을 선택하도록 추가로 구성되는, 디바이스.
  5. 제1 항에 있어서,
    상기 프로세서는:
    상기 복수의 데이터 소스들의 카운트에 기초하여 선택 순서를 결정하고; 그리고
    상기 선택 순서에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 상기 복수의 데이터 소스들의 요소들을 선택하도록 추가로 구성되는, 디바이스.
  6. 제5 항에 있어서,
    상기 메모리는 데이터 소스들의 카운트들에 대응하는 데이터 소스 선택의 순서들을 나타내는 선택 데이터를 저장하도록 구성되고, 상기 프로세서는 상기 선택 데이터에 기초하여 상기 복수의 데이터 소스들의 카운트에 대응하는 상기 선택 순서를 결정하도록 구성되는, 디바이스.
  7. 제1 항에 있어서,
    상기 프로세서는 상기 제1 순열 결과 레지스터의 요소들의 값들의 순열에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하도록 상기 순열 명령을 실행하도록 추가로 구성되는, 디바이스.
  8. 제7 항에 있어서,
    상기 프로세서는:
    인터셉트 파라미터(intercept parameter)에 액세스하고 ― 상기 인터셉트 파라미터는 상기 제2 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한, 상기 제1 순열 결과 레지스터의 특정 요소를 나타냄 ―; 그리고
    상기 인터셉트 파라미터에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 상기 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하도록 추가로 구성되는, 디바이스.
  9. 제7 항에 있어서,
    상기 프로세서는:
    상기 순열 명령의 스텝 파라미터(step parameter)에 액세스하고 ― 상기 스텝 파라미터는 요소 선택 순서를 나타냄 ―; 그리고
    상기 요소 선택 순서에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 상기 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하도록 추가로 구성되는, 디바이스.
  10. 제7 항에 있어서,
    상기 프로세서는:
    상기 복수의 데이터 소스들의 카운트에 기초하여 요소 선택 순서를 결정하고; 그리고
    상기 요소 선택 순서에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 상기 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하도록 추가로 구성되는, 디바이스.
  11. 제1 항에 있어서,
    상기 프로세서는 상기 순열 명령을 실행하기 전에, 소스 데이터를 포함하는 상기 복수의 데이터 소스들 중 적어도 하나의 데이터 소스의 요소들의 값들을 사전―프로세싱(pre-process)하도록 구성되는, 디바이스.
  12. 제1 항에 있어서,
    상기 프로세서는 상기 순열 명령을 실행하기 전에, 소스 데이터를 포함하는 상기 복수의 데이터 소스들 중 적어도 하나의 데이터 소스의 값들의 포지션들을 회전(rotate)시키는 회전 명령을 실행하도록 구성되는, 디바이스.
  13. 제1 항에 있어서,
    상기 순열 명령은 제2 주기성 파라미터를 포함하고, 상기 제2 주기성 파라미터는 상기 순열 명령에 대한 소스 데이터를 포함하는 제2 복수의 데이터 소스들의 제2 카운트를 나타내고, 상기 순열 명령을 실행하는 것은 상기 제2 복수의 데이터 소스들의 제2 카운트에 기초하여, 상기 제2 복수의 데이터 소스들의 요소들의 값들에 기초하여 상기 복수의 벡터 레지스터들 중 특정 순열 결과 레지스터의 요소들을 파퓰레이팅하는 것을 포함하는, 디바이스.
  14. 방법으로서,
    디바이스에서, 순열 명령에 액세스하는 단계;
    상기 디바이스에서, 상기 순열 명령의 주기성 파라미터에 액세스하는 단계 ― 상기 주기성 파라미터는 상기 순열 명령에 대한 소스 데이터를 포함하는 복수의 벡터 레지스터들 중의 벡터 레지스터들의 카운트를 나타냄 ―; 및
    상기 디바이스에서, 상기 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해:
    상기 벡터 레지스터들의 카운트에 적어도 부분적으로 기초하여, 상기 복수의 벡터 레지스터들 중의 벡터 레지스터를 선택하고; 그리고
    상기 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 상기 특정 요소를 파퓰레이팅하도록
    상기 순열 명령을 실행하는 단계를 포함하는, 방법.
  15. 제14 항에 있어서,
    상기 디바이스에서, 상기 순열 명령의 레지스터 개시 파라미터에 액세스하는 단계 ― 상기 레지스터 개시 파라미터는 상기 제1 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한 소스 데이터를 포함하는 상기 벡터 레지스터들 중 특정 벡터 레지스터를 나타냄 ―; 및
    상기 레지스터 개시 파라미터에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 나머지 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 상기 벡터 레지스터들의 요소들을 선택하는 단계를 더 포함하는, 방법.
  16. 제14 항에 있어서,
    상기 디바이스에서, 상기 벡터 레지스터들의 카운트에 기초하여 레지스터 선택 순서를 결정하는 단계; 및
    상기 레지스터 선택 순서에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 상기 벡터 레지스터들의 요소들을 선택하는 단계를 더 포함하는, 방법.
  17. 제16 항에 있어서,
    레지스터 선택 데이터에 기초하여, 상기 벡터 레지스터들의 카운트에 대응하는 상기 레지스터 선택 순서를 결정하는 단계를 더 포함하고, 상기 레지스터 선택 데이터는 벡터 레지스터들의 카운트들에 대응하는 레지스터 선택의 순서들을 나타내는, 방법.
  18. 제14 항에 있어서,
    상기 순열 명령을 실행하는 단계는 상기 제1 순열 결과 레지스터의 요소들의 값들의 순열에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하는 단계를 포함하는, 방법.
  19. 제18 항에 있어서,
    인터셉트 파라미터에 액세스하는 단계 ― 상기 인터셉트 파라미터는 상기 제2 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한, 상기 제1 순열 결과 레지스터의 특정 요소를 나타냄 ―; 및
    상기 인터셉트 파라미터에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 상기 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하는 단계를 더 포함하는, 방법.
  20. 제18 항에 있어서,
    상기 순열 명령의 스텝 파라미터에 액세스하는 단계 ― 상기 스텝 파라미터는 요소 선택 순서를 나타냄 ―; 및
    상기 요소 선택 순서에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 상기 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하는 단계를 더 포함하는, 방법.
  21. 명령들을 저장하는 비-일시적인 컴퓨터-판독가능 저장 매체로서,
    상기 명령들은 프로세서에 의해 실행될 때 상기 프로세서로 하여금:
    순열 명령의 주기성 파라미터에 액세스하게 하고 ― 상기 주기성 파라미터는 상기 순열 명령에 대한 소스 데이터를 포함하는 복수의 벡터 레지스터들 중의 벡터 레지스터들의 카운트를 나타냄 ―; 그리고
    상기 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해:
    상기 벡터 레지스터들의 카운트에 적어도 부분적으로 기초하여, 상기 복수의 벡터 레지스터들 중의 벡터 레지스터를 선택하고; 그리고
    상기 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 상기 특정 요소를 파퓰레이팅하도록
    상기 순열 명령을 실행하게 하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  22. 제21 항에 있어서,
    상기 명령들은 상기 프로세서에 의해 실행될 때 상기 프로세서로 하여금:
    상기 순열 명령의 레지스터 개시 파라미터에 액세스하게 하고 ― 상기 레지스터 개시 파라미터는 상기 제1 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한 소스 데이터를 포함하는 상기 벡터 레지스터들 중 특정 벡터 레지스터를 나타냄 ―; 그리고
    상기 레지스터 개시 파라미터에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 나머지 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 상기 벡터 레지스터들의 요소들을 선택하게 하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  23. 제21 항에 있어서,
    상기 명령들은 상기 프로세서에 의해 실행될 때 상기 프로세서로 하여금:
    상기 벡터 레지스터들의 카운트에 기초하여 레지스터 선택 순서를 결정하게 하고; 그리고
    상기 레지스터 선택 순서에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 요소들을 파퓰레이팅하기 위한 소스 데이터를 포함하는 상기 벡터 레지스터들의 요소들을 선택하게 하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  24. 제23 항에 있어서,
    상기 명령들은 상기 프로세서에 의해 실행될 때 상기 프로세서로 하여금, 레지스터 선택 데이터에 기초하여, 상기 벡터 레지스터들의 카운트에 대응하는 상기 레지스터 선택 순서를 결정하게 하고, 상기 레지스터 선택 데이터는 벡터 레지스터들의 카운트들에 대응하는 레지스터 선택의 순서들을 나타내는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  25. 제21 항에 있어서,
    상기 명령들은 상기 프로세서에 의해 실행될 때 상기 프로세서로 하여금, 상기 제1 순열 결과 레지스터의 요소들의 값들의 순열에 기초하여 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하도록 상기 순열 명령을 실행하게 하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  26. 제25 항에 있어서,
    상기 명령들은 상기 프로세서에 의해 실행될 때 상기 프로세서로 하여금:
    인터셉트 파라미터에 액세스하게 하고 ― 상기 인터셉트 파라미터는 상기 제2 순열 결과 레지스터의 초기 요소를 파퓰레이팅하기 위한, 상기 제1 순열 결과 레지스터의 특정 요소를 나타냄 ―; 그리고
    상기 인터셉트 파라미터에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 상기 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하게 하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  27. 제25 항에 있어서,
    상기 명령들은 상기 프로세서에 의해 실행될 때 상기 프로세서로 하여금:
    상기 순열 명령의 스텝 파라미터에 액세스하게 하고 ― 상기 스텝 파라미터는 요소 선택 순서를 나타냄 ―; 그리고
    상기 요소 선택 순서에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 상기 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하게 하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  28. 제25 항에 있어서,
    상기 명령들은 상기 프로세서에 의해 실행될 때 상기 프로세서로 하여금:
    상기 벡터 레지스터들의 카운트에 기초하여 요소 선택 순서를 결정하게 하고; 그리고
    상기 요소 선택 순서에 적어도 부분적으로 기초하여, 상기 제1 순열 결과 레지스터의 요소들의 값들에 기초하여 상기 제2 순열 결과 레지스터의 요소들을 파퓰레이팅하게 하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  29. 장치로서,
    순열 명령의 주기성 파라미터에 액세스하기 위한 수단 ― 상기 주기성 파라미터는 상기 순열 명령에 대한 소스 데이터를 포함하는 복수의 벡터 레지스터들 중의 벡터 레지스터들의 카운트를 나타냄 ―; 및
    상기 복수의 벡터 레지스터들 중 제1 순열 결과 레지스터의 다수의 요소들 중 각각의 특정 요소에 대해:
    상기 벡터 레지스터들의 카운트에 적어도 부분적으로 기초하여, 상기 복수의 벡터 레지스터들 중의 벡터 레지스터를 선택하고; 그리고
    상기 선택된 벡터 레지스터의 대응하는 요소의 값에 기초하여 상기 특정 요소를 파퓰레이팅하도록
    상기 순열 명령을 실행하기 위한 수단을 포함하는, 장치.
  30. 제29 항에 있어서,
    상기 액세스하기 위한 수단 또는 상기 실행하기 위한 수단 중 적어도 하나는 통신 디바이스, 컴퓨터, 디스플레이 디바이스, 텔레비전, 게이밍 콘솔, 디지털 비디오 플레이어, 카메라, 내비게이션 디바이스, 차량, 헤드셋, 증강 현실 헤드셋, 혼합 현실 헤드셋, 가상 현실 헤드셋, 항공기(aerial vehicle), 홈 자동화 시스템, 음성―활성화 디바이스, 사물 인터넷(IoT: internet―of―things) 디바이스, 가상 현실(VR: virtual reality) 디바이스, 기지국 또는 모바일 디바이스 중 적어도 하나에 통합되는, 장치.
KR1020247008792A 2021-09-24 2022-08-24 순열 명령 KR20240065083A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/448,816 2021-09-24
US17/448,816 US11900111B2 (en) 2021-09-24 2021-09-24 Permutation instruction
PCT/US2022/075406 WO2023049593A1 (en) 2021-09-24 2022-08-24 Permutation instruction

Publications (1)

Publication Number Publication Date
KR20240065083A true KR20240065083A (ko) 2024-05-14

Family

ID=83438622

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020247008792A KR20240065083A (ko) 2021-09-24 2022-08-24 순열 명령

Country Status (6)

Country Link
US (1) US11900111B2 (ko)
EP (1) EP4405807A1 (ko)
KR (1) KR20240065083A (ko)
CN (1) CN117940896A (ko)
TW (1) TW202318182A (ko)
WO (1) WO2023049593A1 (ko)

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0463965B1 (en) * 1990-06-29 1998-09-09 Digital Equipment Corporation Branch prediction unit for high-performance processor
US7197625B1 (en) 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US9529571B2 (en) 2011-10-05 2016-12-27 Telefonaktiebolaget Lm Ericsson (Publ) SIMD memory circuit and methodology to support upsampling, downsampling and transposition
US9639503B2 (en) 2013-03-15 2017-05-02 Qualcomm Incorporated Vector indirect element vertical addressing mode with horizontal permute
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
US10467006B2 (en) * 2015-12-20 2019-11-05 Intel Corporation Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor
US10863199B2 (en) * 2018-03-26 2020-12-08 Qualcomm Incorporated Minimization of transform memory and latency via parallel factorizations
US11392378B2 (en) * 2019-07-25 2022-07-19 Arm Limited Executing a set of load operations for a gather-load instruction and controlling handling of another instruction that depends on completion of the gather-load instruction

Also Published As

Publication number Publication date
TW202318182A (zh) 2023-05-01
WO2023049593A1 (en) 2023-03-30
EP4405807A1 (en) 2024-07-31
US20230102564A1 (en) 2023-03-30
US11900111B2 (en) 2024-02-13
CN117940896A (zh) 2024-04-26

Similar Documents

Publication Publication Date Title
US11907830B2 (en) Neural network architecture using control logic determining convolution operation sequence
KR102596644B1 (ko) 메모리 대역폭 활용을 감소시키기 위해 활성화 데이터의 압축 및 압축 해제를 사용하는 신경망 프로세서
CN111656367A (zh) 神经网络加速器的系统和体系结构
JP3027970B2 (ja) デイジタル信号プロセツサメモリ管理ユニツトおよびその方法
EP3033670B1 (en) Vector accumulation method and apparatus
WO2004053841A2 (en) Apparatus and method for matrix data processing
KR102690005B1 (ko) 벡터 셔플 방법, 프로세서 및 전자기기
CN115039121A (zh) 混合卷积运算
JP2023513608A (ja) アドレス生成方法及びユニット、深層学習処理器、チップ、電子機器並びにコンピュータプログラム
JP2007521549A (ja) 画像処理用可変タップ・フィルタ・アーキテクチャ
KR20240065083A (ko) 순열 명령
CN112612427B (zh) 一种车辆停靠点数据处理方法、装置、存储介质及终端
WO2023116400A1 (zh) 向量运算方法、向量运算器、电子设备和存储介质
JP6687803B2 (ja) 区分線形近似のためのシステムおよび方法
CN117980897A (zh) 适用于基-3蝶形计算的指令
US6789097B2 (en) Real-time method for bit-reversal of large size arrays
US20230350640A1 (en) System and method of rotating vector input
WO2009144681A1 (en) Vector shuffle with write enable
CN113258902B (zh) 一种处理器、滤波方法及相关设备
US20230097103A1 (en) Fast fourier transform using phasor table
CN109698890A (zh) 图像文件保存方法及装置
GB2611751A (en) Neural network processing
JP2004302772A (ja) ベクトルプロセッサおよびアドレス指定方法
JPH0644130A (ja) アドレス生成回路