KR102584035B1 - 스플라이스 동작을 수행하는 장치 및 방법 - Google Patents

스플라이스 동작을 수행하는 장치 및 방법 Download PDF

Info

Publication number
KR102584035B1
KR102584035B1 KR1020187004344A KR20187004344A KR102584035B1 KR 102584035 B1 KR102584035 B1 KR 102584035B1 KR 1020187004344 A KR1020187004344 A KR 1020187004344A KR 20187004344 A KR20187004344 A KR 20187004344A KR 102584035 B1 KR102584035 B1 KR 102584035B1
Authority
KR
South Korea
Prior art keywords
vector
data
register
data elements
control
Prior art date
Application number
KR1020187004344A
Other languages
English (en)
Other versions
KR20180033526A (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 KR20180033526A publication Critical patent/KR20180033526A/ko
Application granted granted Critical
Publication of KR102584035B1 publication Critical patent/KR102584035B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing

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

스플라이스 동작을 수행하기 위한 장치 및 방법이 제공되며, 상기 장치는 벡터 재 - 게이트들의 세트 및 하나 이상의 제어 레지스터들을 갖는다. 프로세싱 회로는 적어도 제1 벡터 레지스터 및 적어도 하나의 제어 레지스터를 식별하는 스플라이스(splice) - 인스트럭션을 포함하는 명령들의 시퀀스를 실행하도록 배치된다. 제1 벡터 레지스터는 벡터 길이를 갖는 데이터 요소들의 제1 벡터를 저장하고, 적어도 하나의 제어 레지스터는 데이터 요소들의 제1 벡터 내의 순차적 데이터 요소 위치들을 점유하는 하나 이상의 데이터 요소를 식별하는 제어 데이터를 저장한다. 프로세싱 회로는 스플라이스 명령의 실행에 응답하여 적어도 하나의 제어 레지스터에서 제어 데이터에 의해 식별된 각각의 데이터 요소를 제1 벡터로부터 추출하고 추출 된 데이터 요소를 결과 벡터의 순차적 데이터 요소 위치 내에서 출력한다 상기 제1 벡터로부터 상기 추출 된 데이터 요소들에 의해 점유되지 않은 나머지 결과 벡터 데이터 요소 위치들로 제2 벡터로부터의 데이터 요소들이 출력되는 것을 특징으로하는 방법.

Description

스플라이스 동작을 수행하는 장치 및 방법
본 기술은 스플라이스(splice) 동작을 수행하는 장치 및 방법에 관한 것이다.
모뎀 데이터 처리 시스템에 있어서, 제1 벡터 내에서 특정 수의 연속적인 데이터 요소를 추출하기 위해 스플라이스 동작을 수행할 수 있고, 그 후에 추출된 데이터 요소를 결과 벡터 내에서 제2 벡터의 데이터 요소와 함께 출력할 수 있는 것이 유용하다 벡터. 이러한 스플라이스 동작을 수행하는 효율적이고 유연한 방법을 제공하는 것이 바람직할 것이다.
제 1 예시적인 구성에서는, 벡터 레지스터들의 세트와, 하나 이상의 제어 레지스터들과, 적어도 제1 벡터 레지스터 및 적어도 하나의 제어 레지스터를 식별하는 스플라이스 명령(splice instruction)을 포함하는 명령들의 시퀀스를 실행하는 프로세싱 회로를 구비하는 장치가 제공되고, 상기 제1 벡터 레지스터는 벡터 길이를 갖는 데이터 요소들의 제1 벡터를 저장하고, 상기 적어도 하나의 제어 레지스터는 벡터 길이에 관계없이, 데이터 요소들의 제1 벡터 내의 순차적 데이터 요소 위치들을 점유하는 하나 이상의 데이터 요소들을 식별하는 제어 데이터를 저장하며, 상기 제어 데이터는 상기 제1 벡터 레지스터 내의 주어진 데이터 요소의 위치를 식별하는 위치 데이터와, 상기 위치 데이터와는 다른, 상기 데이터 요소들의 제1 벡터로부터 추출되는 데이터 요소들의 수를 식별하는 길이 데이터를 포함하고, 상기 프로세싱 회로는 상기 스플라이스 명령의 실행에 응답하여 상기 적어도 하나의 제어 레지스터 내의 제어 데이터에 의해 식별된 각각의 데이터 요소를 제1 벡터로부터 추출하고, 또한 제2 벡터로부터 데이터 요소들을 포함하는 데이터 요소들의 결과 벡터 레지스터 내에서 추출된 데이터 요소들을 출력하고, 상기 프로세싱 회로는, 상기 위치 데이터 및 상기 길이 데이터에 의해 어떤 값들이 지정되는지에 관계없이, 상기 결과 벡터 레지스터의 제1 단부에서 시작하는 상기 결과 벡터 레지스터의 순차적인 데이터 요소들 위치 내에서 추출된 데이터 요소들을 출력하도록 구성된다.
다른 예시적인 구성에서는, 벡터 레지스터들의 세트 및 하나 이상의 제어 레지스터들을 갖는 장치 내에서 스플라이스 동작을 수행하는 방법이 제공되고, 상기 방법은, 적어도 제1 벡터 레지스터 및 적어도 하나의 제어 레지스터를 식별하는 스플라이스 명령을 실행하는 단계를 포함하고, 상기 제1 벡터 레지스터는 벡터 길이를 갖는 데이터 요소들의 제1 벡터를 저장하고, 상기 적어도 하나의 제어 레지스터는, 벡터 길이에 관계없이, 데이터 요소들의 제1 벡터 내의 순차적 데이터 요소 위치들을 차지하는 하나 이상의 데이터 요소들을 식별하는 제어 데이터를 저장하고, 상기 제어 데이터는 상기 제1 벡터 레지스터 내의 주어진 데이터 요소의 위치를 식별하는 위치 데이터와, 상기 위치 데이터와는 다른, 상기 데이터 요소들의 제1 벡터로부터 추출되는 데이터 요소들의 수를 식별하는 길이 데이터를 포함하고, 상기 스플라이스 명령의 실행은, 상기 적어도 하나의 제어 레지스터 내의 제어 데이터에 의해 식별된 각 데이터 요소를 제1 벡터로부터 추출하고, 또한 제2 벡터로부터의 데이터 요소들을 포함하는 데이터 요소들의 결과 벡터 레지스터 내에서 추출된 데이터 요소들을 출력하고, 상기 방법은, 상기 위치 데이터 및 상기 길이 데이터에 의해 어떤 값들이 지정되는지에 관계없이, 상기 결과 벡터 레지스터의 제1 단부에서 시작하는 상기 결과 벡터 레지스터의 순차적 데이터 요소 위치들 내에서 추출된 데이터 요소들을 출력하는 단계를 더 포함한다.
또 다른 예시적인 구성에서는, 벡터 레지스터 수단의 세트와, 하나 이상의 제어 레지스터 수단과, 적어도 제1 벡터 레지스터 수단 및 적어도 하나의 제어 레지스터 수단을 식별하는 스플라이스 명령을 포함하는 명령들의 시퀀스를 실행하기 위한 처리 수단을 구비하는 장치가 제공되고, 상기 제1 벡터 레지스터 수단은 벡터 길이를 갖는 데이터 요소들의 제1 벡터를 저장하고, 상기 적어도 하나의 제어 레지스터 수단은, 벡터 길이에 관계없이, 데이터 요소들의 제1 벡터 내의 순차적 데이터 요소 위치들을 차지하는 하나 이상의 데이터 요소들을 식별하는 제어 데이터를 저장하고, 상기 제어 데이터는 상기 제1 벡터 레지스터 내의 주어진 데이터 요소의 위치를 식별하는 위치 데이터와, 상기 위치 데이터와는 다른, 상기 데이터 요소들의 제1 벡터로부터 추출되는 데이터 요소들의 수를 식별하는 길이 데이터를 포함하고, 상기 프로세싱 수단은, 상기 스플라이스 명령의 실행에 응답하여, 상기 적어도 하나의 제어 레지스터 수단 내의 제어 데이터에 의해 식별된 각 데이터 요소를 제1 벡터로부터 추출하고, 또한 제2 벡터로부터의 데이터 요소들을 포함하는 데이터 요소들의 결과 벡터 레지스터 수단 내에서 추출된 데이터 요소들을 출력하고, 상기 프로세싱 수단은 상기 위치 데이터 및 상기 길이 데이터에 의해 어떤 값들이 지정되는지에 관계없이, 상기 결과 벡터 레지스터 수단의 제1 단부에서 시작하는 상기 결과 벡터 레지스터 수단의 순차적 데이터 요소 위치들 내에서 추출된 데이터 요소들을 출력하도록 구성된다.
대안적인 구성에서는, 데이터 처리 장치에 의해 실행될 때, 청구항 1의 장치에 대응하는 명령 실행 환경을 제공하는 가상 머신을 제공하는 비일시적 컴퓨터 판독 가능한 기억매체에 기억된 컴퓨터 프로그램이 제공된다.
본 기술은 첨부된 도면에 도시된 실시 예를 참조하여 단지 예시적으로 더 설명될 것이다.
도 1은 일 실시 예에 따른 장치의 블록도이다.
도 2 내지 4는 예시적인 실시 예에 따른 스플라이스 명령에 의해 수행되는 동작을 개략적으로 도시한 것이다.
도 5는 일 실시 예에 따른 도 1의 벡터 순열 유닛을 나타내는 도면이다.
도 6은 일 실시 예에 따라, 도 5의 벡터 순열 유닛이 도 2에 개략적으로 설명된 동작을 수행하는 데 사용되는 방법을 나타내는 도면이다.
도 7은 대체 실시 예에 따른 도 1의 벡터 순열 유닛을 나타내는 도면이다.
도 8은 일 실시 예에 따라 슬라이딩 윈도우 동작을 수행하기 위해 어떻게 스플라이스 명령들의 시퀀스가 실행될 수 있는지를 개략적으로 도시하는 도면이다.
도 9a 내지 도 9d는 벡터 길이에 관계없이, 다양한 다른 실시 예에 따라, 데이터 요소들의 제1 벡터로부터 추출되어야 하는 순차적인 데이터 요소 위치를 차지하는 데이터 요소를 식별하기 위해 스플라이스 명령에 의해 특정될 수 있는 제어 레지스터의 예시적인 배열을 도시한 것이다.
도 10은 일 실시 예에서 사용될 수 있는 가상 머신 구현을 도시한 것이다.
첨부된 도면을 참조하여 실시 예를 설명하기 전에, 다음의 실시 예에 대한 설명이 제공된다.
일 실시 예에 있어서, 벡터 레지스터 세트 및 하나 이상의 제어 레지스터를 갖는 장치가 제공된다. 장치 내의 프로세싱 회로는 적어도 제1 벡터 레지스터 및 적어도 하나의 제어 레지스터를 식별하는 스플라이스 명령을 포함하는 명령들의 시퀀스를 실행하도록 배치된다. 제1 벡터 레지스터는 벡터 길이를 갖는 데이터 요소들의 제1 벡터를 저장하고, 적어도 하나의 제어 레지스터는 벡터 길이에 관계없이, 데이터 요소들의 제1 벡터 내의 순차적 데이터 요소 위치들을 차지하는 하나 이상의 데이터 요소를 식별하는 제어 데이터를 저장한다. 스플라이스 명령을 실행할 때, 프로세싱 회로는 적어도 하나의 제어 레지스터 내의 제어 데이터에 의해 식별된 각각의 데이터 요소를 제1 벡터로부터 추출하고, 그 다음에 추출된 데이터 요소를, 제2 벡터로부터의 데이터 요소들을 또한 포함하는 데이터 요소들의 결과 벡터 내에서 출력한다. 제2 벡터는 미리 결정될 수 있거나 또는 스플라이스 명령에 의해 특정될 수 있다.
본 명세서에서 "활성 데이터 요소"라는 문구는 또한 제어 데이터에 의해 제1 벡터로부터 추출되는 데이터 요소인 것으로 식별된 데이터 요소를 나타내기 위해 사용될 것이다.
적어도 하나의 제어 레지스터 내의 제어 데이터가 벡터 길이를 참조하지 않고 활성 데이터 요소를 식별하기 때문에, 이것은 활성 데이터 요소가 제1 벡터 내에서 어떻게 선택될 수 있는지에 대해 상당한 유연성을 제공한다. 특히, 스플라이스 명령에 의해 정의된 스플라이스 동작을 수행할 때, 제1 벡터 내의 순차적 데이터 요소 위치를 차지하는 활성 데이터 요소의 임의의 시퀀스가 선택될 수 있다.
이러한 접근법에 의해, 활성 데이터 요소의 경계는 벡터 길이의 지식에 의존하지 않고 특정될 수 있다. 그 결과, 그러한 하나의 장치가 또 다른 장치에 의해 작동되는 벡터와 다른 길이를 갖는 벡터 상에서 작동하더라도, 스플라이스 명령은 다양한 상이한 장치 내에서 사용될 수 있다. 결과적으로, 상술한 실시 예의 스플라이스 명령은 벡터 길이에 무관한 것으로서, 프로그래머는 그러한 스플라이스 명령을 이용해서 벡터 길이에 무관한 방식으로 제1 및 제2 벡터로부터의 부분을 함께 스플라이스할 수 있다.
일 실시 예에 있어서, 데이터 요소들의 크기는 암시적일 수 있다. 그러나, 대안적인 실시 예에 있어서 이러한 정보는 스플라이스 명령 내에서 인코딩될 수 있으므로, 순전히 예로서 데이터 요소 크기를 8, 16, 32 또는 64 비트라고 식별할 수 있다.
일 실시 예에 있어서, 프로세싱 회로는 결과 벡터의 제1 단부에서 시작하는 결과 벡터의 순차적 데이터 요소 위치들 내에서 추출된 데이터 요소들을 출력하도록 구성된다. 이러한 구성에 있어서, 제2 벡터로부터의 데이터 요소들은 제1 벡터로부터 추출된 데이터 요소에 의해 점유되지 않는 나머지 데이터 요소 위치들을 차지할 것이다.
일 실시 예에 있어서, 스플라이스 명령은 데이터 요소들의 제2 벡터를 저장하는 제2 벡터 레지스터를 더 식별한다. 그 후, 프로세싱 회로는 스플라이스 명령의 실행에 응답하여 추출된 데이터 요소들에 의해 점유되지 않은 결과 벡터 내의 각각의 데이터 요소 위치에, 데이터 요소들의 제2 벡터로부터의 데이터 요소를 포함한다.
결과 벡터 내에 포함되도록 선택된 제2 벡터로부터의 데이터 요소는 다양한 방식으로 선택될 수 있다. 그러나, 일 실시 예에 있어서, 프로세싱 회로는 데이터 요소들의 제2 벡터의 제1 단부에서 시작하는 순차적 데이터 요소들을 결과 벡터 내에 포함하도록 구성된다.
장치 내의 하나 이상의 제어 레지스터는 다양한 형태를 취할 수 있지만, 일 실시 예에서는 적어도 하나의 프리디케이트 레지스터(predicate register)를 구비하며, 각 프리디케이트 레지스터는 데이터 요소들의 벡터 내의 각 데이터 요소 위치에 대한 프리디케이트 데이터를 저장하는데 사용된다. 따라서, 프리디케이트 레지스터 내의 프리디케이트 데이터는 Boolean(즉, 참/거짓) 조건들의 벡터를 특정하고, 데이터 요소들의 관련 벡터 내의 각 데이터 요소는 이들 Boolean 조건 중 하나와 관련되어 있다. 일 실시 예에 있어서는, 프리디케이트 데이터 내의 프리디케이트 조건들의 항목들의 수와 그 프리디케이트 데이터에 의해 제어되는 관련 벡터 내의 데이터 요소들의 수와의 사이에 1:1 관계가 있을 수 있지만, 이것은 필수적이지 않으며, 대안적인 실시 예들에서 프리디케이트 자료의 단일 항목은 다중 자료 요소들에 적용되는 조건을 제공할 수 있다. 또한, 일 실시 예에서, 프리디케이트 데이터 내의 각 프리디케이트 항목은 단일 비트의 형태를 취하지만, 각 프리디케이트 항목이 단지 단일 비트에 의해 특정될 필요는 없다.
제어 레지스터가 적어도 하나의 프리디케이트 레지스터를 포함하는 그러한 실시 예에 있어서는, 스플라이스 명령으로 식별된 적어도 하나의 제어 레지스터는 하나의 그러한 프리디케이트 레지스터를 구비할 수 있고, 프로세싱 회로는 스플라이스 명령의 실행에 응답하여 제1 벡터로부터 추출될 각 데이터 요소를 프리디케이트 데이터로부터 결정한다.
이러한 프리디케이트 레지스터를 사용하여, 단일 레지스터만을 사용하여 각 활성 데이터 요소를 지정할 수 있다. 따라서, 이것은 활성 데이터 요소들을 식별하기 위한 특히 효율적인 인코딩을 제공한다. 또한, 종종 스칼라 레지스터(scalar registers)(활성 데이터 요소를 식별하기 위해 제어 데이터를 지정하는 데 사용할 수도 있음)보다 시스템 내에 제공되는 프리디케이트 레지스터가 적은 경우가 종종 있어, 명령 내의 인코딩 효율성이 더 향상되는데, 왜냐하면 명령 내의 더 적은 비트가 프리디케이트 레지스터를 식별하는 데 필요하기 때문이다. 또한, 프리디케이트 데이터의 특성으로 인해, 식별된 활성 데이터 요소가 벡터의 단부를 스팬(span)할 수 없으므로, 자동으로 범위를 벗어난 인덱스와 같은 조건을 확인할 필요가 없다.
프리디케이트 데이터는 다양한 방식으로 배열될 수 있지만, 일 실시 예에서는 데이터 요소들의 제1 벡터로부터 추출될 데이터 요소를 결정하는데 사용되는 위치 및 길이 정보를 제공한다. 프리디케이트 데이터를 사용하여 활성 데이터 요소를 지정할 수 있는 유연한 방식으로 인해, 활성 데이터 요소들의 시작 위치를 벡터 레지스터 내의 임의의 데이터 요소 위치라고 식별할 수 있으며, 더 나아가서 활성 데이터 요소들의 수는 벡터 내의 임의의 원하는 수일 수 있다.
여기에서, 스플라이스 동작을 수행할 때 식별되는 활성 데이터 요소들의 시퀀스는 스플라이스 세그먼트(splice segment)라고 지칭될 것이다. 스플라이스 명령으로 특정된 프리디케이트를 사용하여 스플라이스 동작을 제어함으로써, 스플라이스 세그먼트가 벡터의 단부를 스팬할 수 없다는 것을 보장하면서, 벡터 길이 불가지론 코드에서 스플라이스 명령을 사용할 수 있다.
위치 및 길이 정보가 프리디케이트 데이터에 의해 지정될 수 있는 다수의 방식이 있다. 일 실시 예에서, 프리디케이트 데이터는 제1 추출 데이터 요소 위치 및 마지막 추출 데이터 요소 위치를 식별하고, 프로세싱 회로는 추출될 데이터 요소로서, 제1 추출 데이터 요소 위치와 마지막 추출 데이터 요소 위치와의 사이의 데이터 요소들의 시퀀스를 결정한다. 프리디케이트 데이터 내의 각 프리디케이트 항목이 단일 비트인 예시적인 실시 예를 고려하면, 제1 추출 데이터 요소 위치는 제1 값(예를 들어, 로직 1 값)으로 설정되는 제1 프리디케이트 비트에 의해 식별될 수 있고, 마지막 추출 데이터 요소 위치는 그 제1 값으로 설정되는 마지막 프리디케이트 비트에 의해 식별될 수 있다. 재개(intervening) 프리디케이트 비트의 값은 무시할 수 있다.
일 실시 예에서, 스플라이스 명령의 실행 중에 활성 데이터 요소를 식별하는데 필요한 제어 데이터는 프리디케이트 레지스터를 참조하여 특정될 수 있지만, 대안적인 실시 예에서는 상이한 제어 레지스터가 사용될 수 있다. 특히, 일 실시 예에서, 하나 이상의 제어 레지스터는 데이터 값을 저장하기 위한 하나 이상의 스칼라 레지스터를 포함할 수 있다. 이러한 실시 예에서, 스플라이스 명령으로 식별된 적어도 하나의 제어 레지스터는 적어도 하나의 스칼라 레지스터를 포함할 수 있고, 프로세싱 회로는 스플라이스 명령의 실행에 응답하여 제1 벡터로부터 추출될 각 데이터 요소를 결정할 때 각각의 식별된 스칼라 레지스터 내의 데이터 값을 사용한다
이러한 스칼라 레지스터를 사용하여 필요한 제어 데이터를 제공하는 데는 여러 가지 방법이 있다. 일 실시 예에서, 스플라이스 명령은 저장된 데이터 값이 데이터 요소들의 제1 벡터로부터 추출될 하나 이상의 데이터 요소를 결정하는데 사용되는 위치 및 길이 정보를 제공하는 제1 및 제2 스칼라 레지스터를 식별한다.
예를 들어, 일 실시 예에서, 제1 및 제2 스칼라 레지스터 내의 저장된 데이터 값들은 제1 추출 데이터 요소 위치 및 마지막 추출 데이터 요소 위치를 식별하고, 프로세싱 회로는, 추출될 데이터 요소들로서, 제1 추출 데이터 요소 위치와 마지막 추출 데이터 요소 위치 사이의 데이터 요소들의 시퀀스를 결정한다. 대안적인 실시 예에서, 스칼라 레지스터들 중 하나는 시작 위치를 식별하는데 사용될 수 있고, 다른 스칼라 레지스터는 그 위치에서 시작하는 활성 데이터 요소로서 포함될 데이터 요소들의 수를 식별하는 스칼라 값을 제공할 수 있다.
또 다른 대안적인 실시 예에 있어서는, 스플라이스 명령으로 식별된 적어도 하나의 제어 레지스터는 프리디케이트 레지스터와 스칼라 레지스터 모두를 포함할 수 있고, 식별된 스칼라 레지스터 내의 데이터 값을 식별된 프리디케이트 레지스터 내의 프리디케이트 데이터와 결합하여 사용하여 데이터 요소들의 제1 벡터로부터 추출될 하나 이상의 데이터 요소를 결정한다. 예를 들어, 스칼라 레지스터 또는 프리디케이트 레지스터는 시작 위치를 식별하기 위해 사용될 수 있고, 다른 레지스터는 단부 위치를 나타내기 위해, 또는 식별된 시작 위치에서 시작하는 포함될 활성 데이터 요소들의 수를 나타내는 길이 정보를 제공하기 위해 사용된다.
스플라이스 명령이 제1 벡터 레지스터와 제2 벡터 레지스터를 모두 특정하는 실시 예에 있어서, 일 실시 예에서는 제1 벡터 레지스터와 제2 벡터 레지스터 모두가 동일한 벡터 레지스터인 것으로 식별될 수 있다. 이러한 접근법에 의해, 데이터 요소들이 벡터 내에서 나타나는 순서를 변경하기 위해 스플라이스 명령을 사용하여 회전 동작을 수행하는 것이 가능하다.
일 실시 예에서, 스플라이스 명령(및 지정된 경우 실제로 제2 벡터 레지스터)에 의해 지정된 제1 벡터 레지스터는 그 자체가 데이터 요소들의 벡터 내에 위치된 각각의 데이터 요소에 대한 프리디케이트 데이터를 저장하는데 사용되는 프리디케이트 레지스터일 수 있다. 따라서, 이러한 스플라이스 명령들은 데이터 요소들의 벡터 오퍼랜드에 대해 작동할 뿐만 아니라, 프리디케이트 벡터들에 대해서도 작동하기 위해서 사용될 수 있으며, 여기서 지정된 제어 레지스터(그 자체가 프리디케이트 레지스터일 수 있음)에 의해 식별된 제어 데이터가 지정된 프리디케이트 벡터(들) 내의 프리디케이트 데이터의 항목에 관해서 수행될 스플라이싱(splicing)을 식별한다. 스플라이스 명령에 의해 식별된 제1 벡터 레지스터 그 자체가 프리디케이트 레지스터인 하나의 그러한 실시 예에 있어서는, 제1 벡터 레지스터 내의 각 데이터 요소는 단일 비트를 포함할 수 있으며, 그 단일 비트는 프리디케이트 데이터의 한 항목을 나타낸다.
하나의 예시적인 사용 예에 있어서, 프로세싱 회로는 이전의 반복 중에 추출을 위해 식별된 하나 이상의 데이터 요소들과 다른 데이터 요소들의 제1 벡터로부터 추출될 하나 이상의 데이터 요소들을 식별하는 스플라이스 명령에 의해 식별된 적어도 하나의 제어 레지스터 내의 각각의 반복 제어 데이터에서, 다수의 반복의 각각에서 스플라이스 명령을 실행하도록 구성될 수 있다. 이러한 접근법에 의해, 일련의 스플라이스 명령을 사용하여 지정된 벡터 오퍼랜드에 대해 슬라이딩 윈도우 동작을 효율적으로 구현할 수 있다.
스플라이스 명령을 실행하는데 사용되는 프로세싱 회로는 다양한 형태를 취할 수 있지만, 일 실시 예에서는 벡터 순열 회로를 구비한다.
벡터 순열 회로는 다양한 형태를 취할 수 있지만, 일 실시 예에서는, 데이터 요소들의 제1 벡터에 대하여 제1 시프트 연산을 수행하는 제1 시프트 회로 및 데이터 요소들의 제2 벡터에 대하여 제2 시프트 연산을 수행하는 제2 시프트 회로와, 상기 제1 및 제2 시프트 회로에 의해 출력된 벡터들로부터 결과 벡터를 생성하는 결합 회로를 구비한다. 또한, 분석 회로는 데이터 요소들의 제1 벡터로부터 추출될 하나 이상의 데이터 요소를 결정하기 위해서 적어도 하나의 제어 레지스터 내의 제어 데이터를 분석하고, 그 분석에 의존하여 제1 및 제2 시프트 회로의 동작을 제어하는 제어 신호들을 발행하는 데에 사용된다. 따라서, 제1 및 제2 시프트 회로의 동작을, 지정된 제어 레지스터(들)에 의해 제공되는 제어 데이터에 따라 제어할 수 있어, 결합 회로에 의해 결합될 수 있는 변경된 벡터들을 창출하기 위해서 제1 및 제2 벡터에 대해 적절한 시프트 동작을 수행한다. 일 실시 예에서, 제1 벡터에 대해 수행된 시프트는 제2 벡터에 대해 수행된 시프트와 반대 방향이다.
결합 회로는 다양한 형태를 취할 수 있지만, 일 실시 예에서는 제1 및 제2 시프트 회로의 출력으로부터 도출되는 2개의 제공된 입력 벡터에 대해 논리 OR 연산을 수행하도록 구성된다.
일 실시 예에 있어서, 벡터 순열 회로는 제1 마스크 벡터를 생성하기 위해 제1 시프트 회로에 의해 출력된 벡터에 대해 제1 마스크 연산을 수행하는 제1 마스크 회로 및 제2 마스크 벡터를 생성하기 위해 제2 시프트 회로에 의해 출력된 벡터에 대해 제2 마스크 연산을 수행하는 제2 마스크 회로를 더 구비하고, 결합 회로는 제1 및 제2 마스크 벡터를 결합함으로써 결과 벡터를 생성하도록 구성된다.
따라서, 일 실시 예에서, 스플라이스 명령에 의해 정의된 스플라이스 동작을 구현하기 위한 필요한 동작은(필요에 따라 선택적으로 부가적인 마스킹 동작을 갖는) 시프트 및 OR 동작을 사용하여 용이하게 수행될 수 있고, 시프트 동작은 병렬로 수행될 수 있다는 것을 알 수 있다.
그러나, 이러한 방식으로 벡터 순열 회로를 구성할 필요는 없으며, 실제로 벡터 순열 회로에 대해서 다양한 다른 구성이 제공될 수 있다. 하나의 예시적인 구성에 있어서, 벡터 순열 회로는 데이터 요소들의 제1 벡터 및 데이터 요소들의 제2 벡터로부터 결과 벡터를 생성하는 프로그램 가능한 크로스바 회로, 및 데이터 요소들의 제1 벡터로부터 추출될 하나 이상의 데이터 요소들을 결정하기 위해서 적어도 하나의 제어 레지스터를 분석하고, 그 분석에 의존하여 프로그램 가능한 크로스바 회로의 동작을 제어하는 제어 신호를 발행하는 분석 회로를 구비할 할 수 있다. 따라서, 이러한 실시 예에서는, 크로스바 회로는 분석 회로의 제어하에 필요에 따라 구성됨으로써, 제1 벡터로부터의 식별된 활성 데이터 요소들의 필요한 슬라이싱을, 제2 벡터로부터의 필요한 개수의 데이터 요소들로 수행한다. 일부 실시 예에서는, 다른 목적을 위해 장치 내에 이미 설치된 크로스바 회로를 재사용하는 것이 가능할 수 있다.
특정 실시 예는 이제 도면을 참조하여 설명될 것이다.
도 1은 기술한 실시 예의 기술들이 사용될 수 있는 시스템의 블록도이다. 도 1에 도시된 예에 있어서, 시스템은 파이프라인 프로세서의 형태를 취한다. 명령들은 페치 회로(10)에 의해 명령 캐시(15)(통상적으로 레벨 2 캐시(50)와 같은 캐시의 하나 이상의 추가 레벨을 통해 메모리(55)에 결합됨)로부터 페치되고, 여기서 그들은 파이프라인 프로세서 내의 다운스트림 실행 자원(downstream execution resources)을 제어하기 위한 적절한 제어 신호를 생성하여 명령들에 의해 요구되는 연산을 수행하기 위해서 각 명령을 디코딩하는 디코드 회로(20)를 통과한다. 디코딩된 명령들을 형성하는 제어 신호들은 파이프라인 프로세서 내의 하나 이상의 실행 파이프라인 30, 35, 40, 80에 발행하기 위한 발행 스테이지 회로(25)로 전달된다.
발행 스테이지 회로(25)는 연산에 의해 요구되는 데이터 값들이 저장될 수 있는 레지스터들(60)에 대한 액세스를 갖는다. 특히, 벡터 연산을 위한 소스 오퍼랜드는 벡터 레지스터(65) 내에 저장될 수 있고, 스칼라 연산을 위한 소스 오퍼랜드는 스칼라 레지스터(75)에 저장될 수 있다. 또한, 특정 벡터 연산을 수행할 때 처리되는 벡터 오퍼랜드의 데이터 요소들에 대한 제어 정보로서 사용하기 위해, 하나 이상의 프리디케이트가 프리디케이트 레지스터(70)에 저장될 수 있다. 또한, 예를 들어 도 9a 내지 도 9d를 참조하여 후술하는 바와 같이, 스칼라 레지스터들 중 하나 이상은 또한 특정 벡터 연산의 수행 중에 사용하기 위해 그러한 제어 정보를 도출하기 위해서 사용되는 데이터 값을 저장하는데 사용될 수 있다.
소스 오퍼랜드 및 임의의 관련 제어 정보는 경로(47)를 통해 발행 스테이지 회로로 라우팅될 수 있어서, 각 디코딩된 명령을 구현하기 위해 수행될 연산(들)을 식별하는 제어 신호들과 함께 적절한 실행 유닛에 디스패치될 수 있다. 도 1에 나타낸 다양한 실행 유닛 30, 35, 40, 80은 벡터 오퍼랜드로 동작하는 벡터 처리 유닛이라고 가정되지만, 장치에 의해 지원되는 임의의 스칼라 연산을 처리하기를 원한다면 별도의 실행 유닛(도시되지 않음)이 제공될 수 있다.
다양한 벡터 연산을 고려하면, 산술 연산은 산술 논리 연산이 이들 소스 오퍼랜드에 대해 수행될 수 있게 하기 위해, 필요한 소스 오퍼랜드(및 프리디케이트와 같은 임의의 제어 정보)와 함께 예를 들어 산술 논리 유닛(ALU)(30)에 전달될 수 있으며, 그 결과 값은 전형적으로 벡터 레지스터 뱅크(65)의 지정된 레지스터(20)에 저장하기 위한 목적지 오퍼랜드로서 출력된다.
ALU(30) 이외에도, 다른 실행 유닛(35), 예를 들어, 디코딩된 부동 소수점 명령에 응답하여 부동 소수점 연산을 수행하는 부동 소수점 유닛(FPU), 및 벡터 오퍼랜드에 대해 소정의 순열 연산을 수행하는 벡터 순열 유닛(80)이 제공될 수 있다. 또한,(데이터 캐시(45) 및 레벨 2 캐시(50)와 같은 캐시의 임의의 재개 추가 레벨을 통해) 메모리(55)로부터의 데이터 값을 레지스터 세트(60) 내의 특정 레지스터로 로드하기 위해 로드 동작을 수행하고, 이들 레지스터로부터의 데이터 값을 다시 메모리(55)에 저장하기 위해 저장 동작을 수행하는 로드/저장 유닛(LSU)(40)이 사용된다.
도 1에 도시된 시스템은 명령들의 시퀀스가 프로그램 순서대로 실행되는 순차(in-order) 프로세싱 시스템이거나, 또는 다양한 명령들이 실행되는 순서가 성능을 향상시킬 목적으로 재정렬될 수 있게 하는 비순차(out-of-order) 시스템일 수 있다. 본 기술분야의 당업자가 이해할 수 있는 바와 같이, 비순차 시스템에 있어서는, 추가적인 구조들(도 1에 명시적으로 도시되지 않음), 예를 들어 명령들에 의해 지정된 구조적 레지스터들(architectural registers)을 레지스터 뱅크(45) 내의 물리적 레지스터들의 풀(pool)(전형적으로 물리적 레지스터들의 풀은 구조적 레지스터들의 수보다 크다)로부터의 물리적 레지스터들에 매핑하는 레지스터 리네이밍(renaming) 회로를 설치함으로써, 특정 위험을 제거하여, 비순차 처리의 사용을 더 용이하게 할 것이다. 또한, 일반적으로 재정렬 버퍼는 비순차 실행을 추적하고, 다양한 명령들의 실행 결과가 원래의 프로그램 순서로 커밋(committed)될 수 있도록 설치될 것이다.
기술된 실시 예에 있어서는, 도 1의 회로는 벡터 레지스터(65)에 저장된 벡터 오퍼랜드에 대한 벡터 연산을 실행하도록 구성되며, 여기서 벡터 오퍼랜드는 복수의 데이터 요소를 포함한다. 이러한 벡터 오퍼랜드에 대해 수행된(산술 연산과 같은) 특정 벡터 연산에 대해서는, 필요한 연산이 벡터 오퍼랜드 내의 다양한 데이터 요소에 병렬로(또는 반복적으로) 적용될 수 있다. 프리디케이트 정보는 벡터 내의 어떤 데이터 요소가 특정 벡터 연산에 대한 활성 데이터 요소인지를 식별하는 데 사용되므로, 연산이 적용되어야 하는 데이터 요소이다.
일 실시 예에 있어서는, 도 1의 회로에 의해 실행되는 명령들의 시퀀스는 적어도 하나의 스플라이스 명령을 포함할 수 있다. 각각의 스플라이스 명령은 벡터 레지스터 뱅크(65) 및 적어도 하나의 제어 레지스터 내의 적어도 제1 벡터 레지스터를 식별할 것이다. 제어 레지스터는 프리디케이트 레지스터들(70) 중 하나의 형태를 취할 수 있거나, 후술하는 바와 같이 대신에 하나 이상의 스칼라 레지스터들(75)에 의해, 또는 프리디케이트 레지스터와 스칼라 레지스터의 결합에 의해 특정될 수 있다. 이러한 스플라이스 명령이 디코드 회로(20)에 의해 디코드될 때, 발행 스테이지 회로(25)는 나중에 벡터 순열 유닛(80)에 적절한 제어 신호를 발행하여 그 스플라이스 명령에 의해 요구된 스플라이스 동작을 구현하기 위해 필요한 동작이 수행되게 할 것이다. 특히, 적어도 하나의 제어 레지스터에 의해 지정된 제어 데이터는 스플라이스 명령에 의해 특정된 데이터 요소들의 제1 벡터 내의 순차적 데이터 요소 위치들을 점유하는 하나 이상의 활성 데이터 요소들을 식별하는데 사용된다. 제어 데이터는 벡터 길이와 관계없이 활성 데이터 요소들을 식별하는 방식으로 구성되므로, 벡터 길이를 참조하지 않고 이들 활성 데이터 요소를 식별할 수 있다. 벡터 순열 유닛은, 제1 벡터 내에서 활성 데이터 요소들을 식별한 후, 제1 벡터로부터 활성 데이터 요소를 추출하여 이들을 결과 벡터 내에서 출력하며, 결과 벡터 내의 나머지 데이터 요소 위치는 제2 벡터로부터의 데이터 요소로 채워져 있다. 제2 벡터는 미리 결정될 수 있거나 대안적으로 스플라이스 명령에 의해 특정될 수 있다.
도 2는 스플라이스 명령의 예시적인 형태 및 수행된 결과 연산을 도시한 것이다. 특히, 스플라이스 명령은 벡터 레지스터 뱅크(65) 내로부터 2개의 벡터 소스 레지스터(100, 105)를 지정하고, 또한 프리디케이트 레지스터(70) 내에서 프리디케이트 레지스터(110)를 지정한다. 이 프리디케이트 레지스터는 Psp 레지스터라고 칭하며, 해당 프리디케이트 레지스터의 내용에는 스플라이스 제어 데이터가 포함되어 있다는 것을 나타낸다. 프리디케이트 데이터의 예시적인 형태가 도 2에 도시되어 있다. 특히, 이 실시 예에 있어서, 프리디케이트 데이터 내의 논리 1 값의 제1 및 마지막 발생은 스플라이스 세그먼트(115)를 식별하는데 사용된다. 일 실시 예에 있어서, 이들 2개의 논리 1 값 사이의 재개 프리디케이트 값은 중요하지 않으며 논리 1 값 또는 논리 0 값일 수 있다.
따라서, 제1 및 마지막 로직 1 값은 관련된 제1 소스 벡터(100) 내의 제1 및 마지막 활성 데이터 요소 위치를 식별하는 것으로 볼 수 있다. 따라서, 이 예에 있어서, 오른쪽으로부터 데이터 요소 위치에 번호를 매기는 것으로, 도 2의 프리디케이트 레지스터(110) 내의 프리디케이트의 특정 예가 데이터 요소 위치 2 및 4를 제1 및 마지막 활성 데이터 요소의 데이터 요소 위치라고 식별하는 것을 볼 수 있다. 따라서, 벡터 순열 유닛은 제1 벡터(100)의 위치 2, 3, 4로부터 데이터 요소들을 추출하고, 지정된 목적지 벡터 레지스터(120) 내의 미리 결정된 위치에 그들을 출력할 것이다. 이 실시 예에서는, 추출된 값이 목적지 벡터(120) 내의 최하위 데이터 요소 위치로부터 시작하는 데이터 요소 위치(125)를 점유하는데 사용되는 것으로 상정하지만, 대안적인 실시 예에서는, 상이한 위치, 예를 들어 목적지 벡터 내의 특정 수의 최상위 비트 위치를 택일적으로 점유할 수 있다는 것을 인식할 것이다. 목적지 레지스터(120) 내의 나머지 데이터 요소 위치(130)는 제2 소스 벡터 레지스터 내의 데이터 요소 위치 0에서 시작하는, 제2 소스 벡터 레지스터(105)로부터의 데이터 요소들로 벡터 순열 유닛에 의해 채워진다. 따라서, 도 2에 도시된 바와 같이, 벡터 순열 유닛(80)으로부터의 출력 결과 벡터(120)는 "mlkjiedc"의 형태를 취한다.
도 2의 검토로부터, 활성 데이터 요소를 식별하는 데 필요한 위치 및 길이 정보는 벡터 길이와 관계없이 지정되므로, 벡터 길이를 알 필요없이 프리디케이트로부터 결정될 수 있음을 알 수 있다. 스플라이싱(splicing)은 소스 벡터 레지스터 내의 임의 위치에서 어떤 길이에서든 수행될 수 있으며, 특히 벡터의 한쪽 단부에 맞춰질 필요가 없다.
일 실시 예에서, 벡터 길이(즉, 각 벡터 내의 데이터 요소의 개수) 및 데이터 요소의 크기는 암시적일 수 있다. 그러나, 대안적인 실시 예에서는 이러한 정보는 명령 내에서 인코딩될 수 있다. 예를 들어, 명령 인코딩은 데이터 요소 크기(예를 들어, 8, 16, 32 또는 64 비트)를 식별하는 정보를 포함할 수 있고, 벡터 길이는 지정된 데이터 요소 크기와 명령에서 참조된 벡터 레지스터들의 크기로부터 결정된다.
또한, 도 2의 예에서는, 프리디케이트 레지스터 및 소스 벡터 레지스터가 동일한 수의 요소를 가지기 때문에, 범위를 벗어난 인덱스 조건의 바운더리 케이스(boundary case)가 자동으로 처리되고, 따라서 이 형식에서는 명령이 범위를 벗어난 인덱스 예외를 발생시킬 수 없다.
게다가, 그러한 스플라이스 명령은, 액세스 가능한 벡터 길이에 의거하여, 또는 프로그래머 또는 알고리즘에 의해 요구되는 대로, 프리디케이트가 동적으로 구성될 수 있기 때문에, 제네릭 라이브러리 코드(generic library code)에서 사용될 수 있다. 이와 같이 지정된 프리디케이트에 의해, 스플라이스 명령은 벡터 길이에 영향을 받지 않는 방식으로 상이한 벡터 레지스터의 부분을 추출하여 연결하기 위해 사용되며, 두 부분의 위치 및 길이는 지정된 프리디케이트 레지스터 내의 프리디케이트 데이터에 의해 제어된다.
도 2의 예에서, 제1 및 제2 소스 벡터는 벡터 레지스터(65) 내에 유지되는 데이터 요소들의 벡터를 포함하지만, 대안적인 실시 예에서는, 이들 제1 및 제2 벡터 레지스터는, 도 3에 개략적으로 도시된 바와 같이, 프리디케이트 레지스터 세트(70) 내의 프리디케이트 레지스터들을 실제로 지정할 수 있다. 이 예에서, 각각의 소스 벡터는 2개의 소스 프리디케이트 레지스터 140, 145에 의해 나타낸 바와 같이, 프리디케이트 항목의 벡터를 나타낸다. 이전처럼, 스플라이스 프리디케이트 레지스터(150)는 제1 소스 레지스터(140) 내의 액티브 데이터 요소를 식별하는 스플라이스 세그먼트(155)를 식별하기 위해서 사용되는 프리디케이트를 제공한다. 그 결과, 이들 식별된 활성 데이터 요소들(이 예에서 각각의 데이터 요소는 단일 비트 값이다)은 목적지 프리디케이트 레지스터(160)의 부분(165)에서 출력되고, 나머지 부분(170)은 제2 소스 레지스터의 데이터 요소 위치 0에서 시작하는, 제2 소스 레지스터(145)로부터의 데이터 요소로 채워진다.
도 4에 도시된 바와 같이, 스플라이스 명령은 제1 벡터 레지스터 및 제2 벡터 레지스터 모두와 동일한 레지스터(175)를 지정함으로써, 회전을 수행하는데 사용될 수 있다. 이 예에서, 스플라이스 프리디케이트(180)는 소스 레지스터(175) 내의 특정 개수의 최상위 데이터 요소 위치를 포함하는 스플라이스 세그먼트를 식별한다. 따라서, 이들 데이터 요소는 결과 레지스터(185)내의 최하위 데이터 요소 위치로 이동되고, 나머지 데이터 요소 위치는 최하위 데이터 요소 위치로부터 시작하여, 소스 레지스터의 내용에 의해 채워진다.
스플라이스 명령의 실행 중에 상술한 스플라이스 동작을 수행하기 위해 사용되는 벡터 순열 유닛(80)은 다양한 형태를 취할 수 있다. 하나의 예시적인 구성이 도 5에 도시되어 있으며, 여기서 벡터 순열 유닛은 벡터 소스 레지스터 200, 205 중의 하나와 각각 관련된 2개의 시프트/회전 회로 블록 215, 220, 관련된 마스크 회로 225, 230, 및 2개의 마스크 회로로부터의 출력들을 결합하는 결합 회로 235를 포함하고, 이 예에서는 결합 회로는 논리 OR 회로(235)의 형태를 취한다. OR 회로(235)로부터의 출력은 목적지 레지스터(245)에 저장된다. 벡터 순열 유닛(80)은 또한 스플라이스 프리디케이트 레지스터(210)에 의해 지정된 프리디케이트 데이터를 수신하는 프리디케이트 분석 회로(240)를 포함한다. 특히, 프리디케이트 데이터는 스플라이스 세그먼트를 식별하기 위해 분석되고, 이것은 시프트/회전 회로(220)에 대한 적절한 제어 신호를 생성하는데 사용된다. 특히, 시프트/회전 회로(220)는 스플라이스 세그먼트에 의해 식별된 활성 데이터 요소를, 최하위 데이터 요소 위치에서 시작하는 다수의 데이터 요소 위치로 이동시키기에 충분한 우측 시프트를 수행하게 된다. 반대로, 시프트/회전 회로(215)는 제2 소스 레지스터 내의 소정 수의 최하위 데이터 요소를 결과 벡터에 대한 나머지 데이터 요소 위치로 이동시키기에 충분한 좌측 시프트를 수행하도록 구성된다.
프리디케이트 분석 회로(240)는 또한 2개의 시프트/회전 회로 250, 220으로부터의 출력에서 임의의 불필요한 데이터 요소가 소정의 값, 예를 들어 도 5에 도시된 실시 예에서는 모두 0으로 설정되는 것을 보장하기 위해, 2개의 마스크 회로 225, 230에 대한 제어 신호를 생성하고, 여기서 결합 회로는 OR 회로(235)의 형태를 취한다. 그 다음, OR 회로는 결과 벡터 레지스터(245)에 저장될 결과 벡터를 생성하기 위해 마스크 회로의 출력에 대해 논리 OR 연산을 수행한다.
도 6은 도 2를 참조하여 앞서 논의된 동작을 수행하기 위해 도 5의 회로가 어떻게 사용되는지를 도시한 것이다. 특히, 프리디케이트 분석 회로(240)는 시프트 /회전 회로(220)가 2개의 데이터 요소 위치들에 의해 우측 시프트를 수행하게 하고, 이것은 스플라이스 프리디케이트 레지스터(210)에 의해 지정된 프리디케이트 내의 선행 0(leading zeros)의 개수에 근거하여 결정된다. 반대로, 시프트/회전 회로(215)는 프리디케이트 내의 스플라이스 세그먼트의 길이에 근거하여 결정된, 3만큼 좌측 시프트를 수행한다. 양 시프트/회전 회로 215, 220으로부터의 출력이 도 6에 도시되어있다. 문자 "x"는 이들 데이터 요소 위치에서 데이터 요소에 대한 "상관없음(do not care)" 상태를 나타낸다. 특히, 이들 데이터 요소의 값에 관계없이, 이들 데이터 요소 값은 관련된 마스크 회로 225, 230에 의해 마스크될 것이다.
프리디케이트 분석 회로(240)는 마스크 회로(230)에 제어 신호를 전송하여 마스크의 우측 3 비트가 설정되게 하고, 따라서 데이터 요소들 "edc"이 마스크 회로로부터 출력되게 하며, 다른 모든 데이터 요소는 논리 0 값으로 설정된다. 도 6의 마스크 회로의 출력에 표시된 0 값은 단일 비트 값이 아니지만, 각 0은 대응하는 데이터 요소에 대한 모든 0 값을 나타내며, 일반적으로 단일 비트 이상일 수 있다. 예를 들어, 일 실시 예에서, 벡터 내의 각 데이터 요소는 길이가 1 바이트이다. 마스크 회로(230)에 제공된 제어 신호는 프리디케이트 레지스터 회로(210) 내의 프리디케이트 데이터로부터 프리디케이트 분석 회로(240)에 의해 결정된 스플라이스 세그먼트의 크기, 이 예에서는 3개의 데이터 요소의 길이를 갖는 스플라이스 세그먼트의 크기로부터 결정된다.
마스크 회로(230)에 대한 마스크 제어 신호를 생성한 후, 프리디케이트 분석 회로는, 마스크 회로(225)에 대한 적절한 제어 신호를 생성하여, 마스크 회로(225)에 의해 구현된 마스크가 마스크 회로(230)에 의해 적용된 마스크의 역이 되도록 한다. 그 결과, 마스크 회로(225)로부터의 출력은 도 6에 도시된 바와 같다. 그 후, OR 회로(235)는 도 6의 목적지 레지스터(245) 내에 도시된 출력 벡터 "mlkjiedc"를 생성하기 위해 2개의 입력 벡터에 대해 논리 OR 연산을 수행한다.
필요한 벡터 순열 회로는 시프트, 마스크 및 OR 회로 블록을 사용하여 효율적으로 구성될 수 있고, 시프트 동작은 병렬로 수행될 수 있음이 상기의 설명으로부터 이해될 것이다(실제로 마스크 동작이 가능함). 그러나, 벡터 순열 유닛은 대신에 여러 가지 대안 형태를 취할 수 있다. 하나의 특정 예가 도 7에 도시되어 있는데, 여기서 벡터 순열 유닛(80)은 프리디케이트 레지스터(210)에 의해 제공된 프리디케이트 데이터의 분석에 근거하여 프리디케이트 분석 회로(270)에 의해 동작이 제어되는 크로스바(260)라고도 불리는 프로그래머블 네트워크를 포함한다. 프리디케이트 데이터에 의해 식별된 스플라이스 세그먼트의 식별에 의거하여, 프리디케이트 분석 회로(270)는, 양쪽 소스 레지스터들 200, 205로부터의 적절한 데이터 요소들이 결과 벡터 레지스터(245)에 저장된 결과 벡터 내의 필요한 출력 데이터 요소 위치들에 제공되도록 프로그래머블 크로스바를 구성할 수 있다.
도 8은 슬라이딩 윈도우(sliding window) 동작을 구현하는데, 특히 각 반복 시에 상이한 프리디케이트 데이터를 갖는 스플라이스 명령의 반복 실행에 의해 상술한 스플라이스 명령들이 어떻게 사용될 수 있는지를 나타낸다. 먼저, 2개의 소스 레지스터 300, 305가 소스 벡터들로 로딩되며, 이 예에서 각 소스 벡터는 8개의 데이터 요소들을 포함한다. 이 예에서, 이들 소스 레지스터로부터 한 번에 3개의 데이터 요소를 추출하는 것이 바람직하다고 가정한다. 제1 반복 시에, 스플라이스 명령은 모두 1로 설정된 스플라이스 프리디케이트(splice predicate)로 실행되어, 소스 레지스터(300)의 내용이 목적지 레지스터(310) 내에 저장되게 한다. 다음 동작은 레지스터(310) 내의 최하위 3개의 데이터 요소 위치를 차지하는 3개의 데이터 요소에 대해 수행될 수 있고, 나머지 데이터 요소들은 무시된다.
다음 반복 시에, 스플라이스 명령은 목적지 레지스터(315)가 도 8에 도시된 데이터 요소로 채워지게 하는 "11111000"의 프리디케이트로 실행된다. 특히, 최하위 3개의 데이터 요소 위치는 이제 데이터 요소 "fed"를 포함하므로, 이들 데이터 요소는 레지스터(315) 내의 나머지 데이터 요소들을 무시하고 후속 연산을 수행할 수 있다.
제3 반복 시에는, 스플라이스 명령은 "11000000"의 스플라이스 프리디케이트로 실행된다. 이것에 의해 제1 소스 레지스터(300)로부터 데이터 요소 "g" 및 "h"만이 추출되고, 목적지 레지스터(320) 내의 나머지 데이터 요소는 제2 소스 레지스터(305)로부터 제공된다. 지금은 목적지 레지스터(320) 내의 하위 3개의 데이터 요소 위치가 이후의 연산에서 연산될 수 있는, 데이터 요소 "ihg"를 포함하며, 레지스터(320)의 나머지 내용이 무시되는 경우이다. 따라서, 이러한 스플라이스 명령의 사용은 슬라이딩 윈도우 타입의 동작, 이 경우에는 3개의 데이터 요소의 블록을 식별하는 윈도우를 수행하기 위한 특히 효율적인 구현을 제공한다는 것을 알 수 있다.
도 8에 도시된 제3 반복 후에, 슬라이딩 윈도우 동작이 계속될 필요가 있으면, 2개의 소스 레지스터 300, 305의 내용을 업데이트할 필요가 있다. 특히, 일례에 있어서, 제2 소스 레지스터(305)의 원래의 내용은 제1 소스 레지스터(300)로 이동될 수 있고, 그 후 추가의 벡터 데이터가 제2 소스 레지스터에 로딩된다. 다음 반복 시에는, 스플라이스 명령은 "11111110"의 스플라이스 프리디케이트로 실행될 수 있어, 결과 벡터에서의 최하위 3개의 데이터 요소 위치가 데이터 요소 "lkj"에 의해 점유되게 한다.
상기 예들에 있어서는, 스플라이스 명령에 대해 요구된 스플라이스 제어 정보가 프리디케이트 레지스터(350)를 참조하여 도 9a에 도시된 예에 따라 단일 프리디케이트 레지스터에 의해 지정된다고 가정되었다. 도 9a의 예에 있어서는, 프리디케이트가 도 2를 참조하여 앞서 논의된 것과 동일한 형태를 취한다고 가정한다. 그러나, 대안적인 실시 예에서는, 스플라이스 명령은 다수의 상이한 방식으로 필요한 스플라이스 제어 정보를 특정할 수 있다. 예를 들어, 도 9b에 도시된 바와 같이, 2개의 스칼라 레지스터 355, 360의 내용을 사용하여 필요한 스플라이스 제어 정보를 지정할 수 있다. 도 9b에 도시된 예에서는, 각 스칼라 레지스터는 스칼라 값, 시작 데이터 요소 위치를 식별하는 제1 스칼라 레지스터 및 종료 데이터 요소 위치를 식별하는 제2 스칼라 레지스터를 저장한다. 도 9a의 예와 일관되게, 제1 스칼라 레지스터는 데이터 요소 위치 2를 식별하고 제2 스칼라 레지스터는 데이터 요소 위치 4를 식별한다. 대안적인 실시 예에서는, 제2 스칼라 레지스터가 종료 위치 대신에 길이를 특정하도록 구성될 수 있음을 이해할 것이다.
도 9c에 도시된 것과 같은 대안적인 실시 예에서는, 프리디케이트 레지스터와 소스 레지스터의 결합은 필요한 스플라이스 제어 정보를 특정하기 위해 사용될 수 있다. 도 9c에 도시된 예에서는, 소스 레지스터(365)는 시작 데이터 요소 위치,이 예에서는 데이터 요소 위치 2를 식별한다. 스플라이스 프리디케이트 레지스터(370)는 종료 데이터 요소 위치, 이 예에서는 4(도 9c에 나타낸 바와 같이)를 식별하고, 또는 택일적으로 이 예에서는 3의 길이가 되는 길이를 특정할 수 있다. 프길이를 식별하도록 리디케이트 레지스터(370)를 준비하고, 그 후에 스칼라 레지스터(365)가 시작 위치를 식별하는 것은, 일부 실시 예에서는 예를 들어 도 8의 슬라이딩 윈도우 구성에 유용할 수 있다. 특히, 스플라이스 명령의 각 반복의 경우에는, 각 반복 시에 길이가 3이 될 것이기 때문에, 프리디케이트 레지스터 내용을 업데이트할 필요가 없다. 대신에, 새로운 시작 데이터 요소 위치를 식별하기 위해 각 반복에서 단지 스칼라 레지스터를 업데이트할 수 있다.
도 9d는 스칼라 레지스터(375)가 길이(이 예에서는 3)를 정의하고, 프리디케이트(380)가 시작 요소 위치(이 예에서는 위치 2)를 식별하는 추가의 대안을 도시한 것이다.
도 9b 내지 도 9d의 제어 레지스터의 형태 중 임의의 것을 사용할 때, 도 5 또는 도 7의 분석 회로 240, 270는 더 이상 프리디케이트 분석을 수행하지 않지만(또는 단지 수행하지만), 필요한 제어 데이터를 제공하는 임의의 스칼라 레지스터를 분석하고 있다는 것을 이해할 수 있을 것이다.
상술한 실시 예로부터, 기술된 스플라이스 명령을 실행하도록 장치를 배열함으로써, 이것은, 스플라이스 동작을 수행할 때 순차적인 데이터 요소 위치를 차지하는 활성 데이터 요소의 임의의 시퀀스가 선택되게 하는, 벡터 길이를 참조하지 않고 지정된 제어 데이터가 활성 데이터 요소를 식별하기 때문에, 제1 벡터 내에서 활성 데이터 요소가 어떻게 선택되는지에 대해 많은 유연성을 제공한다는 것을 알 수 있다. 활성 데이터 요소의 경계는 벡터 길이에 대한 어떤 지식에든 의존하지 않고 특정될 수 있으며, 결과적으로 각각의 장치가 동일한 길이를 갖는 벡터들에 대해 동작하는지 또는 일부 장치가 어떤 다른 장치에 의해 동작되는 벡터들과 상이한 길이의 벡터들에 대해 동작하는지 여부에 관계없이, 스플 라이스 명령은 다양한 상이한 장치와 함께 사용될 수 있다. 따라서 결과적인 스플라이스 동작이 벡터 길이 불가지론 방식으로 수행될 수 있기 때문에, 제네릭 라이브러리 코드에서 이러한 스플라이스 명령을 사용하는 것이 용이해진다. 기술된 스플라이스 명령은 많은 상황, 예를 들어 필터, 문자열 처리, 희박 어레이(sparse arrays)의 처리 등과 같은 슬라이딩 윈도우 연산을 사용하는 알고리즘에서 유용하다. 또한, 그것은 명령 세트에서 명시적으로 벡터 요소 회전/시프트 명령의 필요성을 대체한다.
도 10은 사용될 수 있는 가상 머신 구현을 나타낸다. 앞서 기술된 실시 예들은 관련 기술들을 지원하는 특정 프로세싱 하드웨어를 동작시키는 장치 및 방법들에 관하여 본 발명을 구현하지만, 하드웨어 장치들의 소위 가상 머신 구현을 제공하는 것도 가능하다. 이러한 가상 머신 구현은 가상 머신 프로그램(405)을 지원하는 호스트 오퍼레이팅 시스템(410)을 실행하는 호스트 프로세서(415)상에서 실행된다. 일반적으로, 커다란 강력한 프로세서는 합리적인 속도로 실행하는 가상 머신 구현을 제공할 필요가 있지만, 그러한 접근은 호환성 또는 재사용을 위해 또 다른 프로세서 고유한 코드를 실행하려는 경우와 같은, 특정 상황에 맞춰질 수 있다. 가상 머신 프로그램(405)은 가상 기계 프로그램(405)에 의해 모델링되는 장치인 실제 하드웨어에 의해 제공되는 응용 프로그램 인터페이스와 동일한 응용 프로그램(400)에 응용 프로그램 인터페이스를 제공한다. 따라서, 상술한 스플라이스 명령을 포함하는 프로그램 명령은, 가상 머신 프로그램(405)을 사용하여 애플리케이션 프로그램(400) 내에서 실행되어 가상 머신 하드웨어와의 상호 작용을 모델링 할 수 있다.
본원에서, "... 구성된(to configured)"라는 단어는 장치의 구성요소가 정의된 동작을 수행할 수 있는 구성을 갖는 것을 의미하는 것으로 사용된다. 이 문맥에서 "구성"은 하드웨어 또는 소프트웨어의 상호접속의 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 또는 프로세서 또는 다른 처리 장치가 기능을 수행하도록 프로그래밍될 수 있다. "구성됨"은 정의된 동작을 제공하기 위해 장치 요소가 어떤 식으로든 변경되어야 함을 의미하지는 않는다.
본 발명의 예시적인 실시 예가 첨부된 도면을 참조하여 본원에 상세히 설명되었지만, 본 발명은 이러한 정확한 실시 예에 한정되지 않으며, 다양한 변경, 추가 및 수정이, 첨부된 청구 범위에 의해 정의된 것과 같이 본 발명의 범위 및 사상으로부터 벗어나지 않고 본 기술 분야에서 통상의 지식을 가진 당업자에 의해 이루어질 수 있음을 이해해야 한다. 예를 들어, 종속항의 특징의 다양한 조합이 본 발명의 범위를 벗어나지 않고 독립항의 특징으로 만들어질 수 있다.

Claims (22)

  1. 벡터 레지스터들의 세트와,
    하나 이상의 제어 레지스터들과,
    적어도 제1 벡터 레지스터 및 적어도 하나의 제어 레지스터를 식별하는 스플라이스 명령(splice instruction)을 포함하는 명령들의 시퀀스를 실행하는 프로세싱 회로를 구비하고, 상기 제1 벡터 레지스터는 벡터 길이를 갖는 데이터 요소들의 제1 벡터를 저장하고, 상기 적어도 하나의 제어 레지스터는 벡터 길이에 관계없이, 데이터 요소들의 제1 벡터 내의 순차적 데이터 요소 위치들을 차지하는 하나 이상의 데이터 요소들을 식별하는 제어 데이터를 저장하며,
    상기 제어 데이터는 상기 제1 벡터 레지스터 내의 주어진 데이터 요소의 위치를 식별하는 위치 데이터와, 상기 위치 데이터와는 다른, 상기 데이터 요소들의 제1 벡터로부터 추출되는 데이터 요소들의 수를 식별하는 길이 데이터를 포함하고,
    상기 프로세싱 회로는 상기 스플라이스 명령의 실행에 응답하여 상기 적어도 하나의 제어 레지스터 내의 제어 데이터에 의해 식별된 각각의 데이터 요소를 제1 벡터로부터 추출하고, 또한 제2 벡터로부터 데이터 요소들을 포함하는 데이터 요소들의 결과 벡터 레지스터 내에서 추출된 데이터 요소들을 출력하고,
    상기 프로세싱 회로는, 상기 위치 데이터 및 상기 길이 데이터에 의해 어떤 값들이 지정되는지에 관계없이, 상기 결과 벡터 레지스터의 제1 단부에서 시작하는 상기 결과 벡터 레지스터의 순차적인 데이터 요소들 위치 내에서 추출된 데이터 요소들을 출력하도록 구성되는 것을 특징으로 하는, 장치.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 스플라이스 명령은 데이터 요소들의 제2 벡터를 저장하는 제2 벡터 레지스터를 더 식별하고, 상기 프로세싱 회로는 상기 스플라이스 명령의 실행에 응답하여, 상기 추출된 데이터 요소들에 의해 점유되지 않은 상기 결과 벡터 레지스터 내의 각 데이터 요소 위치들에서, 데이터 요소들의 제2 벡터로부터의 데이터 요소를 포함하는 것을 특징으로 하는, 장치.
  4. 제 3 항에 있어서,
    상기 프로세싱 회로는 데이터 요소들의 제2 벡터의 제1 단부에서 시작하는 순차적 데이터 요소들을 상기 결과 벡터 레지스터 내에 포함하도록 구성되는 것을 특징으로 하는, 장치.
  5. 제 1 항에 있어서,
    상기 하나 이상의 제어 레지스터들은 적어도 하나의 프리디케이트 레지스터(predicate register)를 포함하고, 각 프리디케이트 레지스터는 데이터 요소들의 벡터 내의 각 데이터 요소 위치에 대한 프리디케이트 데이터를 저장하는데 사용되며,
    상기 스플라이스 명령으로 식별된 상기 적어도 하나의 제어 레지스터는 상기 적어도 하나의 프리디케이트 레지스터 중 하나를 구비하고, 상기 프로세싱 회로는 상기 스플라이스 명령의 실행에 응답하여 상기 프리디케이트 데이터로부터 제1 벡터로부터 추출될 각 데이터 요소를 결정하는 것을 특징으로 하는, 장치.
  6. 제 5 항에 있어서,
    상기 프리디케이트 데이터는 데이터 요소들의 제1 벡터로부터 추출될 하나 이상의 데이터 요소들을 결정하는데 사용되는 위치 및 길이 정보를 제공하는 것을 특징으로 하는, 장치.
  7. 제 6 항에 있어서,
    상기 프리디케이트 데이터는 제1 추출 데이터 요소 위치 및 마지막 추출 데이터 요소 위치를 식별하고, 상기 프로세싱 회로는, 추출될 데이터 요소들로서, 상기 제1 추출 데이터 요소 위치와 상기 마지막 추출 데이터 요소 위치 사이의 데이터 요소들의 시퀀스를 결정하는 것을 특징으로 하는, 장치.
  8. 제 1 항에 있어서,
    상기 하나 이상의 제어 레지스터들은 데이터 값들을 저장하기 위한 하나 이상의 스칼라 레지스터들을 구비하고,
    상기 스플라이스 명령으로 식별된 상기 적어도 하나의 제어 레지스터는 적어도 하나의 스칼라 레지스터를 구비하고, 상기 프로세싱 회로는 상기 스플라이스 명령의 실행에 응답하여 제1 벡터로부터 추출될 각 데이터 요소를 결정할 때 각 식별된 스칼라 레지스터 내의 데이터 값을 이용하는 것을 특징으로 하는, 장치.
  9. 제 8 항에 있어서,
    상기 스플라이스 명령은 저장된 데이터 값들이 데이터 요소들의 제1 벡터로부터 추출될 하나 이상의 데이터 요소들을 결정하는데 사용되는 위치 및 길이 정보를 제공하는 제1 및 제2 스칼라 레지스터를 식별하는 것을 특징으로 하는, 장치.
  10. 제 9 항에 있어서,
    상기 제1 및 제2 스칼라 레지스터 내의 저장된 데이터 값들은 제1 추출 데이터 요소 위치와 마지막 추출 데이터 요소 위치를 식별하고, 상기 프로세싱 회로는, 추출될 데이터 요소들로서, 상기 제1 추출 데이터 요소 위치와 상기 마지막 추출 데이터 요소 위치 사이의 데이터 요소들의 시퀀스를 결정하는 것을 특징으로 하는, 장치.
  11. 제 5 항에 있어서,
    상기 하나 이상의 제어 레지스터들은 데이터 값들을 저장하기 위한 하나 이상의 스칼라 레지스터들을 구비하고,
    상기 스플라이스 명령으로 식별된 상기 적어도 하나의 제어 레지스터는 적어도 하나의 스칼라 레지스터를 구비하고, 상기 프로세싱 회로는 상기 스플라이스 명령의 실행에 응답하여 제1 벡터로부터 추출될 각 데이터 요소를 결정할 때 각 식별된 스칼라 레지스터 내의 데이터 값을 이용하는 것이고,
    상기 스플라이스 명령으로 식별된 상기 적어도 하나의 제어 레지스터는 상기 적어도 하나의 프리디케이트 레지스터 중 하나와 상기 스칼라 레지스터들 중 하나를 구비하고, 식별된 스칼라 레지스터 내의 데이터 값은 식별된 프리디케이트 레지스터 내의 프리디케이트 데이터와 결합하여 사용되어 데이터 요소들의 제1 벡터로부터 추출될 하나 이상의 데이터 요소들을 결정하는 것을 특징으로 하는, 장치.
  12. 제 3 항에 있어서,
    상기 제1 벡터 레지스터와 상기 제2 벡터 레지스터는 동일한 벡터 레지스터 인 것을 특징으로 하는, 장치.
  13. 제 1 항에 있어서,
    상기 제1 벡터 레지스터는 데이터 요소들의 벡터 내의 각 데이터 요소 위치에 대한 프리디케이트 데이터를 저장하는데 사용되는 프리디케이트 레지스터인 것을 특징으로 하는, 장치.
  14. 제 13 항에 있어서,
    각 데이터 요소는 단일 비트로 구성되는 것을 특징으로 하는, 장치.
  15. 제 1 항에 있어서,
    상기 프로세싱 회로는 복수의 반복의 각각에서 상기 스플라이스 명령을 실행하도록 구성되고, 각 반복 시에 상기 스플라이스 명령에 의해 식별된 상기 적어도 하나의 제어 레지스터 내의 제어 데이터는 이전의 반복 시에 추출을 위해 식별된 하나 이상의 데이터 요소들과 다른 데이터 요소들의 제1 벡터로부터 추출될 하나 이상의 데이터 요소들을 식별하는 것을 특징으로 하는, 장치.
  16. 제 1 항에 있어서,
    상기 프로세싱 회로는 벡터 순열 회로를 구비하는 것을 특징으로 하는, 장치.
  17. 제 3 항에 있어서,
    상기 프로세싱 회로는 벡터 순열 회로를 구비하고, 상기 벡터 순열 회로는,
    데이터 요소들의 제1 벡터에 대하여 제1 시프트 연산을 수행하는 제1 시프트 회로와 데이터 요소들의 제2 벡터에 대하여 제2 시프트 연산을 수행하는 제2 시프트 회로와,
    상기 제1 및 제2 시프트 회로에 의해 출력된 벡터들로부터 상기 결과 벡터레지스터를 생성하는 결합 회로와,
    데이터 요소들의 제1 벡터로부터 추출될 하나 이상의 데이터 요소들을 결정하기 위해서 상기 적어도 하나의 제어 레지스터 내의 제어 데이터를 분석하고, 상기 분석에 의존해서 상기 제1 및 제2 시프트 회로의 동작을 제어하기 위한 제어 신호들을 발행하는 분석 회로를 구비하는 것을 특징으로 하는, 장치.
  18. 제 17 항에 있어서,
    상기 벡터 순열 회로는,
    제1 마스크 벡터(masked vector)를 생성하기 위해 상기 제1 시프트 회로에 의해 출력된 벡터에 대하여 제1 마스크 연산을 수행하는 제1 마스크 회로와 제2 마스크 벡터를 생성하기 위해 상기 제2 시프트 회로에 의해 출력된 벡터에 대하여 제2 마스크 연산을 수행하는 제2 마스크 회로를 더 구비하고,
    상기 결합 회로는 상기 제1 및 제2 마스크 벡터를 결합함으로써 상기 결과 벡터 레지스터를 생성하도록 구성되는 것을 특징으로 하는, 장치.
  19. 제 3 항에 있어서,
    상기 프로세싱 회로는 벡터 순열 회로를 구비하고, 상기 벡터 순열 회로는,
    데이터 요소들의 제1 벡터 및 데이터 요소들의 제2 벡터로부터 상기 결과 벡터 레지스터를 생성하는 프로그래머블 크로스바 회로와,
    데이터 요소들의 제1 벡터로부터 추출될 하나 이상의 데이터 요소들을 결정하기 위해서 상기 적어도 하나의 제어 레지스터를 분석하고, 상기 분석에 의거하여 상기 프로그래머블 크로스바 회로의 동작을 제어하기 위한 제어 신호들을 발행하는 분석 회로를 구비하는 것을 특징으로 하는, 장치.
  20. 벡터 레지스터들의 세트 및 하나 이상의 제어 레지스터들을 갖는 장치 내에서 스플라이스 동작을 수행하는 방법으로서, 상기 방법은,
    적어도 제1 벡터 레지스터 및 적어도 하나의 제어 레지스터를 식별하는 스플라이스 명령을 실행하는 단계를 포함하고, 상기 제1 벡터 레지스터는 벡터 길이를 갖는 데이터 요소들의 제1 벡터를 저장하고, 상기 적어도 하나의 제어 레지스터는, 벡터 길이에 관계없이, 데이터 요소들의 제1 벡터 내의 순차적 데이터 요소 위치들을 차지하는 하나 이상의 데이터 요소들을 식별하는 제어 데이터를 저장하고,
    상기 제어 데이터는 상기 제1 벡터 레지스터 내의 주어진 데이터 요소의 위치를 식별하는 위치 데이터와, 상기 위치 데이터와는 다른, 상기 데이터 요소들의 제1 벡터로부터 추출되는 데이터 요소들의 수를 식별하는 길이 데이터를 포함하고,
    상기 스플라이스 명령의 실행은,
    상기 적어도 하나의 제어 레지스터 내의 제어 데이터에 의해 식별된 각 데이터 요소를 제1 벡터로부터 추출하고,
    또한 제2 벡터로부터의 데이터 요소들을 포함하는 데이터 요소들의 결과 벡터 레지스터 내에서 추출된 데이터 요소들을 출력하고,
    상기 방법은, 상기 위치 데이터 및 상기 길이 데이터에 의해 어떤 값들이 지정되는지에 관계없이, 상기 결과 벡터 레지스터의 제1 단부에서 시작하는 상기 결과 벡터 레지스터의 순차적 데이터 요소 위치들 내에서 추출된 데이터 요소들을 출력하는 단계를 더 포함하는 것을 특징으로 하는, 방법.
  21. 벡터 레지스터 수단의 세트와,
    하나 이상의 제어 레지스터 수단과,
    적어도 제1 벡터 레지스터 수단 및 적어도 하나의 제어 레지스터 수단을 식별하는 스플라이스 명령을 포함하는 명령들의 시퀀스를 실행하기 위한 프로세싱 수단을 구비하고, 상기 제1 벡터 레지스터 수단은 벡터 길이를 갖는 데이터 요소들의 제1 벡터를 저장하고, 상기 적어도 하나의 제어 레지스터 수단은, 벡터 길이에 관계없이, 데이터 요소들의 제1 벡터 내의 순차적 데이터 요소 위치들을 차지하는 하나 이상의 데이터 요소들을 식별하는 제어 데이터를 저장하고,
    상기 제어 데이터는 상기 제1 벡터 레지스터 내의 주어진 데이터 요소의 위치를 식별하는 위치 데이터와, 상기 위치 데이터와는 다른, 상기 데이터 요소들의 제1 벡터로부터 추출되는 데이터 요소들의 수를 식별하는 길이 데이터를 포함하고,
    상기 프로세싱 수단은, 상기 스플라이스 명령의 실행에 응답하여, 상기 적어도 하나의 제어 레지스터 수단 내의 제어 데이터에 의해 식별된 각 데이터 요소를 제1 벡터로부터 추출하고, 또한 제2 벡터로부터의 데이터 요소들을 포함하는 데이터 요소들의 결과 벡터 레지스터 수단 내에서 추출된 데이터 요소들을 출력하고,
    상기 프로세싱 수단은 상기 위치 데이터 및 상기 길이 데이터에 의해 어떤 값들이 지정되는지에 관계없이, 상기 결과 벡터 레지스터 수단의 제1 단부에서 시작하는 상기 결과 벡터 레지스터 수단의 순차적 데이터 요소 위치들 내에서 추출된 데이터 요소들을 출력하도록 구성되는 것을 특징으로 하는, 장치.
  22. 데이터 처리 장치에 의해 실행될 때, 청구항 1의 장치에 대응하는 명령 실행 환경을 제공하는 가상 머신을 제공하는 비일시적 컴퓨터 판독 가능한 기억매체에 기억된 컴퓨터 프로그램.
KR1020187004344A 2015-07-31 2016-06-15 스플라이스 동작을 수행하는 장치 및 방법 KR102584035B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1513497.6 2015-07-31
GB1513497.6A GB2540939B (en) 2015-07-31 2015-07-31 An apparatus and method for performing a splice operation
PCT/GB2016/051772 WO2017021677A1 (en) 2015-07-31 2016-06-15 An apparatus and method for performing a splice operation

Publications (2)

Publication Number Publication Date
KR20180033526A KR20180033526A (ko) 2018-04-03
KR102584035B1 true KR102584035B1 (ko) 2023-10-04

Family

ID=54062946

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187004344A KR102584035B1 (ko) 2015-07-31 2016-06-15 스플라이스 동작을 수행하는 장치 및 방법

Country Status (9)

Country Link
US (1) US20180210733A1 (ko)
EP (1) EP3314395B1 (ko)
JP (1) JP6971220B2 (ko)
KR (1) KR102584035B1 (ko)
CN (1) CN107851019B (ko)
GB (1) GB2540939B (ko)
IL (1) IL256554B (ko)
TW (1) TWI716425B (ko)
WO (1) WO2017021677A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11182200B2 (en) * 2017-06-29 2021-11-23 Texas Instruments Incorporated Streaming engine with short cut start instructions
GB2564853B (en) * 2017-07-20 2021-09-08 Advanced Risc Mach Ltd Vector interleaving in a data processing apparatus
WO2019229538A2 (zh) * 2018-05-30 2019-12-05 赛灵思公司 数据转换结构、方法及其片上实现
GB2580068B (en) 2018-12-20 2021-02-24 Advanced Risc Mach Ltd Generating a vector predicate summary
CN111538817A (zh) * 2019-01-18 2020-08-14 北京京东尚科信息技术有限公司 人机交互方法和装置
CN111813446A (zh) * 2019-04-12 2020-10-23 杭州中天微系统有限公司 一种数据加载和存储指令的处理方法和处理装置
CN111813447B (zh) 2019-04-12 2022-11-08 杭州中天微系统有限公司 一种数据拼接指令的处理方法和处理装置
CN111814093A (zh) * 2019-04-12 2020-10-23 杭州中天微系统有限公司 一种乘累加指令的处理方法和处理装置
CN112446497B (zh) * 2019-09-02 2024-02-27 中科寒武纪科技股份有限公司 数据块拼接方法、相关设备及计算机可读介质
US11086625B2 (en) 2019-09-10 2021-08-10 Apple Inc. Compression assist instructions
CN111443948B (zh) * 2020-03-30 2022-09-09 龙芯中科技术股份有限公司 指令执行方法、处理器和电子设备
CN114296798A (zh) * 2021-12-10 2022-04-08 龙芯中科技术股份有限公司 向量移位方法、处理器及电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040098556A1 (en) * 2001-10-29 2004-05-20 Buxton Mark J. Superior misaligned memory load and copy using merge hardware

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5781457A (en) * 1994-03-08 1998-07-14 Exponential Technology, Inc. Merge/mask, rotate/shift, and boolean operations from two instruction sets executed in a vectored mux on a dual-ALU
US5751614A (en) * 1994-03-08 1998-05-12 Exponential Technology, Inc. Sign-extension merge/mask, rotate/shift, and boolean operations executed in a vectored mux on an ALU
US6643765B1 (en) * 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US6115812A (en) * 1998-04-01 2000-09-05 Intel Corporation Method and apparatus for efficient vertical SIMD computations
US5996057A (en) * 1998-04-17 1999-11-30 Apple Data processing system and method of permutation with replication within a vector register file
US6308253B1 (en) * 1999-03-31 2001-10-23 Sony Corporation RISC CPU instructions particularly suited for decoding digital signal processing applications
US7685212B2 (en) * 2001-10-29 2010-03-23 Intel Corporation Fast full search motion estimation with SIMD merge instruction
US20130212355A1 (en) * 2002-02-04 2013-08-15 Tibet MIMAR Conditional vector mapping in a SIMD processor
JP3958662B2 (ja) * 2002-09-25 2007-08-15 松下電器産業株式会社 プロセッサ
GB2411978B (en) * 2004-03-10 2007-04-04 Advanced Risc Mach Ltd Inserting bits within a data word
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
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
US20070106883A1 (en) * 2005-11-07 2007-05-10 Choquette Jack H Efficient Streaming of Un-Aligned Load/Store Instructions that Save Unused Non-Aligned Data in a Scratch Register for the Next Instruction
US8078836B2 (en) * 2007-12-30 2011-12-13 Intel Corporation Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits
US20090182982A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Rotate Then Insert Selected Bits Facility and Instructions Therefore
US8356160B2 (en) * 2008-01-15 2013-01-15 International Business Machines Corporation Pipelined multiple operand minimum and maximum function
US20120254589A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian System, apparatus, and method for aligning registers
PL3422178T3 (pl) * 2011-04-01 2023-06-26 Intel Corporation Przyjazny dla wektorów format instrukcji i jego wykonanie
TWI636362B (zh) * 2011-06-24 2018-09-21 林正浩 高性能快取方法和裝置
CN104303141A (zh) * 2011-12-22 2015-01-21 英特尔公司 用于从寄存器提取写掩码的系统、装置和方法
CN104025039B (zh) * 2011-12-22 2018-05-08 英特尔公司 打包数据操作掩码串接处理器、方法、系统及指令
US9342479B2 (en) * 2012-08-23 2016-05-17 Qualcomm Incorporated Systems and methods of data extraction in a vector processor
CN102843147B (zh) * 2012-09-27 2016-06-22 中国传媒大学 循环右移累加基的dtmb中ldpc编码器和编码方法
CN102857235B (zh) * 2012-09-27 2015-03-25 中国传媒大学 基于共享寄存器的dtmb中ldpc编码器和编码方法
US9250916B2 (en) * 2013-03-12 2016-02-02 International Business Machines Corporation Chaining between exposed vector pipelines
US9639503B2 (en) * 2013-03-15 2017-05-02 Qualcomm Incorporated Vector indirect element vertical addressing mode with horizontal permute

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040098556A1 (en) * 2001-10-29 2004-05-20 Buxton Mark J. Superior misaligned memory load and copy using merge hardware

Also Published As

Publication number Publication date
IL256554A (en) 2018-02-28
WO2017021677A1 (en) 2017-02-09
TWI716425B (zh) 2021-01-21
IL256554B (en) 2020-03-31
KR20180033526A (ko) 2018-04-03
GB201513497D0 (en) 2015-09-16
JP6971220B2 (ja) 2021-11-24
GB2540939A (en) 2017-02-08
CN107851019B (zh) 2022-06-28
TW201721410A (zh) 2017-06-16
EP3314395B1 (en) 2022-02-23
GB2540939B (en) 2019-01-23
US20180210733A1 (en) 2018-07-26
EP3314395A1 (en) 2018-05-02
CN107851019A (zh) 2018-03-27
JP2018521426A (ja) 2018-08-02

Similar Documents

Publication Publication Date Title
KR102584035B1 (ko) 스플라이스 동작을 수행하는 장치 및 방법
US10776124B2 (en) Handling exceptional conditions for vector arithmetic instruction
KR102256188B1 (ko) 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법
EP2569694B1 (en) Conditional compare instruction
JP2018531467A6 (ja) ベクトル演算命令の例外条件処理
US20120260061A1 (en) Data processing apparatus and method for performing vector operations
KR20130112009A (ko) 벡터 분할 루프들의 성능 향상
WO2017064455A1 (en) Vector data transfer instruction
US9965275B2 (en) Element size increasing instruction
CN108140011B (zh) 向量加载指令
KR20180137521A (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
KR101016257B1 (ko) 프로세서 및 정보 처리 장치
KR100316710B1 (ko) 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치
KR20180035211A (ko) 벡터 산술 명령
US9600280B2 (en) Hazard check instructions for enhanced predicate vector operations
JP7245817B2 (ja) データ処理装置における連続値の照合

Legal Events

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