KR20100101586A - 데이터 처리에 있어서 레지스터 시프트 및 회전을 포함하는 방법 및 명령어 세트 - Google Patents

데이터 처리에 있어서 레지스터 시프트 및 회전을 포함하는 방법 및 명령어 세트 Download PDF

Info

Publication number
KR20100101586A
KR20100101586A KR1020107011708A KR20107011708A KR20100101586A KR 20100101586 A KR20100101586 A KR 20100101586A KR 1020107011708 A KR1020107011708 A KR 1020107011708A KR 20107011708 A KR20107011708 A KR 20107011708A KR 20100101586 A KR20100101586 A KR 20100101586A
Authority
KR
South Korea
Prior art keywords
register
bits
writing
shift
contents
Prior art date
Application number
KR1020107011708A
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 KR20100101586A publication Critical patent/KR20100101586A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • 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

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)
  • Executing Machine-Instructions (AREA)

Abstract

M 비트를 갖는 제 1 레지스터와 N 비트를 갖는 제 2 레지스터를 식별하는 단계를 포함하는 방법이 개시된다. 프로세스는 또한, 제 2 레지스터로부터의 K 비트(여기서, K ≤ N)를 제 1 레지스터로 시프트하는 단계를 포함한다. 시프트 연산은, 제 1 레지스터로부터 K...N-1 비트를 읽는 단계와, 상기 K...N-1 비트를 제 1 레지스터의 O...N-K-1 비트 위치에 기록하는 단계와, 제 2 레지스터로부터 K 비트를 읽는 단계와, 제 2 레지스터로부터의 상기 K 비트를 제 1 레지스터의 N-K...N-1 미트 위치에 기록하는 단계를 포함하는 좌-시프트 연산, 또는, 제 1 레지스터로부터 O...N-K-1 비트를 읽는 단계와, 상기 O...N-K-1 비트를 제 1 레지스터의 K...N-1 비트 위치에 기록하는 단계와, 제 2 레지스터로부터 K 비트를 읽는 단계와, 제 2 레지스터로부터의 상기 K 비트를 제 1 레지스터의 O...K-1 비트 위치에 기록하는 단계를 포함하는 우-시프트 연산을 실행한다.

Description

데이터 처리에 있어서 레지스터 시프트 및 회전을 포함하는 방법 및 명령어 세트{METHOD AND INSTRUCTION SET INCLUDING REGISTER SHIFTS AND ROTATES FOR DATA PROCESSING}
본 발명은 처리장치를 위한 레지스터 시프트(shift) 및 회전(rotate)을 포함하는 방법 및 명령어 세트에 관한 것이며, 더욱 상세하게는, 단일 명령어, 다중 데이터 디지털 신호 처리장치(Single Instruction, Multiple Date Digital Signal Processor, "SIMD DSP")를 위한 방법 및 명령어 세트에 관한 것이다.
필터링과 같은 특정 키 디지털 신호 처리 알고리즘은, 어레이(array)의 모든 요소들이 또 다른 어레이의 "흘러간(streamed)" 과거 요소들이 되도록 하는 메커니즘을 필요로 한다. 본 발명은 레지스터 요소들이 시프트 및/또는 회전되도록 하는 레지스터 파일을 이용함으로써, SIMD DSP와 같은 처리장치에서 이러한 메커니즘을 효율적으로 할 수 있는 기법들을 제공한다.
SIMD 처리장치가 서로 다른 다양한 응용예에 이용된다는 것이 해당업계 종사자에게 이해되어야 한다. 다양한 응용예들 중에서도, SIMD 처리장치는 그래픽 처리에 이용된다. 물론, SIMD 처리장치는 폭넓은 다양한 데이터 처리 알고리즘 및 함수들에 이용될 수 있는 것이고, 오로지 그래픽 처리에만 한정되는 것은 아니다.
해당업계 종사자에게, 많은 디지털 신호 처리장치("DSP") 알고리즘이 아래의 코드 세그먼트 1과 유사한 구현예들을 갖는 것으로 알려져 있다.
for( i = 0; i < M; i++ ) {
sum = 0 ;
for( j = 0; j < N; j++ ) {
sum += a[i+j] * b[j] ;
}
z [ i ] = sum;
} ,
코드 세그먼트 1
코드 세그먼트 1의 명령어 세트가 필터를 위한 코드를 제공한다. 이러한 코드 세그먼트는 사소한 수정을 거쳐 상관 관계(correlation) 또는 컨벌루션(convolution)을 구현하는데 이용될 수 있음이 해당업계 종사자에게 이해되어야 한다. 디지털 신호 처리장치("DSP")에서 실행되는 경우, 코드 세그먼트 1을 이용하는 모든 연산들이 통상적으로 포화될 것이다.
또한, 감소 유닛(reduction unit)을 갖는 단일 명령어, 다중 데이터("SIMD") 처리장치가, 아래에 제시되는 코드 세그먼트 2를 따라 기술되는 작용(behvior)을 갖는 명령어를 통상적으로 포함한다는 것이 해당업계 종사자에게 이해되어야 한다.
for ( j = 0 ; j < L ; j++ ) {
acO += v0 [i] * v3 [j] ;
}
코드 세그먼트 2
코드 세그먼트 2에서, v0 및 v3 은 어레이의 L 요소들을 보유하는 SIMD 레지스터이다. 변수 acO는 연산의 결과를 저장하는 누산기 레지스터이다. 코드 세그먼트 2에서, 누산기는 16-비트 값을 저장한다. 물론, 상기 누산기가 대안적으로 32-비트 값을 저장할 수 있음이 해당업계 종사자에게 이해되어야 한다. 이러한 명령어의 포화 변형 형태(saturating variant)가 "rmulreds"라고 표시된다.
rmulreds 명령어를 이용하여 필터의 내부 루프를 효율적으로 구현하는 것이 가능함이 해당업계 종사자에게 이해되어야 한다. 대부분의 필터에 있어서, N은 일반적으로 48 미만이다. 따라서, 내부 루프는 통상적으로 많아야 3 개의 rmulreds 명령어를 필요로 할 것이다. (주의: 16-비트 값에 있어서, 3 x 16 = 48). 물론, 세 개의 rmulreds 명령어를 이용하여, 누산기를 초기화하고 최종 누산 결과를 저장하기 위한 요구사항에 의해 필터의 성능이 좌우되기 시작한다.
이러한 현상을 예시적으로 설명하기 위하여, N=16인 예시가 고려된다. 의사 어셈블러 언어를 이용하여, 아래에 제시되는 코드 세그먼트 3과 동일하거나 이와 등가인 명령어 세트가 생성될 수 있다.
load v3 , &b[0] # loads b[0] . . . b[15] into SIMD v0;
# done once per filter
LO:
set acO := 0 # sum = 0
load v0,&a[j] # loads a[j+0] ..a[j+15] into SIMD v0
rmulreds ac0,v0,v3 # the entire inner loop
store ac0,&z[j] # z[j] := 16 bits of acO
loop j,M,L0 # do this M times
코드 세그먼트 3
코드 세그먼트 3에 포함되어있는 바와 같이, rmulreds 명령어는 하나의 명령어로 필터의 전체 내부 루프를 처리할 책임이 있다. 그러나, 외부 루프의 단일 반복(iteration)은 코드 세그먼트 3에 또한 상술되어 있는 5 개의 명령어를 필요로 한다.
코드 세그먼트 3에 있어서, 누산기 설정(set up), 레지스터 로드(load), 연산에 대한 제어 제공을 위해 수반되는 오버헤드(overhead)로 인해, 5 개의 명령어가 외부 루프에 대해 요구된다. 16 개의 곱셈-및-덧셈 함수 각각 및 모든 사이클을 실행하는 대신에, 처리장치에서 이용 가능한 병렬 처리(parallelism)의 양에 따라, 지속되는 필터의 성능이 낮아질 수 있고, 일부 경우에서는 훨씬 낮아질 수 있다. 따라서, 병렬 처리는 코드 세그먼트 또는 알고리즘의 실행의 최적화를 위하여 최소한 한 번의 기회를 제공한다.
"a"에 대한 값을 v0에 로드함으로써 최적화를 위한 또 다른 기회를 제공한다. 볼 수 있는 바와 같이, v0는 한 번의 반복에서 a[j+O], a[j+1],..., a[j+15]를 포함한다. 후속 반복에서, a[j+1],...,a[j+15], a[j+16]가 로드된다. 이들 요소 중 (대부분이 아니라면)많은 요소들이 동일하다는 것이 해당업계 종사자에게 이해되어야 한다. 따라서, 최소한 이러한 이유로, 반복 내에서 또는 반복하는 동안에 공통 요소들의 재사용을 허용하는 메커니즘의 발전에 대한 관심이 커져 왔다.
공통 요소들을 재사용함으로써, 그 밖의 다른 것을 중에서, 명령어 세트를 실행하는 장치에 의한 전력 소비가 감소된다는 것이 즉시 분명해져야 한다. 따라서, 최소한 이러한 이유로, 적어도 공통 요소들을 재사용하도록 설계된 알고리즘에 대한 필요성이 발전되어 왔다.
일반적으로, 특정 명령어 세트, 알고리즘, 또는 코드 세그먼트를 실행하는 장치의 전력 소비의 감소가, 코드 디자이너와, 코드가 실행되는 장치의 엔지니어를 위한 최소한 하나의 배려이다.
따라서, 본 발명의 하나 이상의 특징은, 알고리즘의 처리상의 오버헤드 부담을 감소시킴으로써 이들 알고리즘의 성능을 개선하는 것이다.
본 발명의 또 다른 특징은, 성능 필터의 실행을 위해 요구되는 명령어들의 오버헤드를 감소시킴으로써 성능 필터(알고리즘의 한 유형)를 개선하는 것이다.
본 발명의 일 실시예에서, 시프트하는 능력을 SIMD 파일에 부가함으로써 성능 필터의 연산이 개선된다.
본 발명의 추가적인 특징은, 그 밖의 다른 것들 중에서, 연산 가능한 또는 그 밖에, 특정 알고리즘 상에 놓이는 로드(load)의 개수를 감소시키는 것을 포함한다.
본 발명의 또 다른 특징은, 반복하는 동안에 공통 요소들의 재사용을 허용함으로써 회전하는 레지스터 쌍들이 알고리즘 상에 놓이는 로드의 개수를 감소시키는 동일한 능력을 갖는 변형 형태를 포함한다.
본 발명의 추가적인 하나의 특징은, 그 밖의 다른 것들 중에서, 명령어 세트를 실행하는 장치에 의한 전력 소비를 감소시키기 위하여 공통 요소들의 재사용을 제공하는 것이다.
본 발명의 추가적인 특징들이 본 발명의 설명과 첨부되는 도면으로부터 명백해질 것이다.
본 발명이 도면과 함께 논의되며, 도면에서 동일한 요소를 언급하기 위하여 동일한 도면 부호가 사용되었다.
도 1은 본 발명의 일 실시예를 도시하는 흐름도이다.
도 2는 도 1의 루프 A에 대한 논리 흐름을 도시하는 흐름도이다.
도 3은 도 1의 루프 B에 대한 논리 흐름을 도시하는 흐름도이다.
도 4는 본 발명의 또 다른 실시예를 도시하는 흐름도이다.
도 5는 도 4의 루프 C에 대한 논리 흐름을 도시하는 흐름도이다.
도 6은 도 4의 루프 D에 대한 논리 흐름을 도시하는 흐름도이다.
도 7은 본 발명에 따른 시프트(shift) 연산에 대한 하나의 의도된 실시예의 흐름도이다.
도 8은 본 발명에 따른 좌-시프트(left shift) 연산의 흐름도이다.
도 9는 본 발명에 따른 우-시프트(right shift) 연산의 흐름도이다.
도 10은 본 발명에 따른 또 다른 시프트 연산의 흐름도이다.
도 11은 본 발명에 따른 회전 연산의 흐름도이다.
도 12는 본 발명에 따른 도 11로부터 이어지는 회전 연산 흐름도의 제 2 부분이다.
이하의 설명으로부터 분명해지는 바와 같이, SIMD DSP 등의 처리장치 내의 데이터 처리를 돕기 위하여 이용될 수 있는 많은 기법들이 존재한다. 본 발명은 신호 처리를 돕기 위하여 "시프트(shifting)", "회전(rotating)", 및 시프트와 회전의 조합으로 일컬어지는 기법들의 양상을 포함한다. 이들 기법의 응용예의 한 결과가, 처리하는 동안 재사용될 수 있는 데이터의 어레이를 생성하는 것이며, 이로 인해 상기 데이터에 대한 총 처리 시간을 감소시킬 수 있다. 처리 시간이 감소되는 경우, 그 밖의 다른 이익들 중에서, 특정 명령어 세트를 실행하는 장치에 의한 전체 소비 전력이 현실화된다.
이하의 설명으로부터 분명해지는 바와 같이, 수정된 데이터 어레이를 생성함으로써, 명령어 세트가, 상기 명령어 세트의 연산과 관련되는 누산기를 초기화하기 위하여 감소된 요구사항을 갖는 데이터의 다중 스트림을 처리할 수 있도록 한다. 본 발명에 포함된 기법들에 의해, 이러한 처리의 그 밖의 다른 이점 또한 제공됨이 해당업계 종사자에 의해 이해되어야 한다.
Ⅰ. 시프트
어레이 내의 데이터 요소를 시프트하여 시프트된 새로운 어레이를 생성함으로써 데이터 처리를 돕는다. 일단 새로운 데이터 어레이가 생성되면, 두 어레이들은 처리장치 내에서 서로 "통과"할 수 있다(예를 들어, 이들 두 어레이는 처리되는 동안 서로 간섭하지 않고 독립적으로 처리될 수 있다).
값의 어레이가, 데이터 요소 또는 연산자(operator)를 포함하는 2 또는 3차원 행렬을 통상적으로 포함한다. 또한, 값의 어레이를 포함하는 데이터 구조가 관련 기술 내의 일부 맥락에서 "레지스터"로서 언급될 수도 있다. 레지스터가 다수의 요소를 포함하며, 이들 요소 각각이 데이터 또는 연산자를 통상적으로 포함한다. 복합적인 데이터 환경에서, 레지스터 내의 요소가 그 자체로 별개의 레지스터일 수도 있음이 해당업계 종사자에게 이해되어야 한다.
시프트는, 특정 개수의 요소들에 의해 레지스터 내에서 왼쪽으로 또는 오른쪽으로 요소들의 요소별 시프트(element-wise shift)가 이루어지는 연산을 말한다. 시프트가 SIMD 레지스터 내에서 수행됨으로써, 상기 SIMD 레지스터 내의 요소들의 요소별 시프트의 결과를 가져올 수 있다.
요소들의 가장 기본적인 시프트는, 요소들이 하나의 어레이 장소 만큼 왼쪽으로 또는 오른쪽으로 이동되는 것이다. 물론, 전술된 바와 같이, 시프트는 많은 개수의 어레이 장소 또는 요소일 수 있다. 둘 이상의 어레이 장소의 시프트가 이루어질 수 있도록 의도되었다. 따라서, 1을 초과하는 임의의 개수의 어레이 장소 만큼의 시프트가 본 발명에 내포되도록 의도되었다.
하나의 요소만큼의 좌-시프트가, 이하의 코드 세그먼트 4에 나타난 바와 같이 표현될 수 있다.
for ( j = 0 ; j < L-1 ; j ++ ) {
v4 [j] = v4 [j+l] ;
}
코드 세그먼트 4
이와 유사하게, 하나의 요소만큼의 우-시프트가, 이하의 코드 세그먼트 5에 나타난 바와 같이 표현될 수 있다.
for( j = L-1; j >= 0; J-- ) {
v5 [j+l] = v5 [j] ;
}
코드 세그먼트 5
좌-시프트 연산 또는 우-시프트 연산 중 하나의 경우에서, 최종 요소와 제 1 요소가 정의되지 않는다. 이들이 정의되어있지 않기 때문에, 끝이 잘린 형태의 누산기가 이들 제 1 요소 및 마지막 요소로 이동될 수 있다.
[0045] 이를 염두에 두고, 16-비트 결과를 갖는 포화 알고리즘에 있어서, 누산기의 상위 16 비트가 특별히 관심 있는 부분이다. 따라서, SIMD-레지스터 시프트 명령어(rshift)가 이하의 코드 세그먼트 6에 나타난 바와 같이 쓰여질 수 있다.
for( j = 0; j < 15; j++ ) {
v4 [j] = v4 [j+l] ;
}
v4 [15] = ac0≫16;
코드 세그먼트 6
누산기의 저장 내용을 지우(clear)기 위하여 rshift 명령어의 변형 형태(rshiftO)가 추가적으로 이용될 수 있다. rshiftO 명령어를 이용하여, 이하의 코드 세그먼트 7에 나타난 바와 같이 루프가 다시 쓰여질 수 있다.
load v3,&b[0] # loads b[0] ..b[15] into SIMD v0 ;
# done once per filter
set acO := 0 # sum = 0, first time
Ll:
LO:
load v0,&a[16*k+j] # SIMD load starting at a[16*k+j] rmulreds ac0,v0,v3 # the entire inner loop
rshiftO v4,ac0,0 # shift upper 16 bits of acO into v4 loop j,16,L0 # do this 16 times
store v4,&z[16*k] # 16 accumulates are stored
# into z[16*k] at once
loop k,M/16,Ll
코드 세그먼트 7
코드 세그먼트 7을 코드 세그먼트 3돠 비교하면, 루프가 두 부분, 즉, 16 번 실행하는 내부 루프와 M/16 번가량 실행하는 외부 루프로 분할되어 있음을 알 수 있다. 이는, 누산기로부터의 16개의 값을 SIMD 레지스터로 시프트하고, 이러한 값들이 동일한 루프 내에 저장될 수 있도록 한다. 이들 값을 시프트하고 동일한 루프 내에 저장함으로써, 전력이 보존된다.
Ⅱ. 회전
전력을 보존하기 위해 가능한 또 다른 방법은, 기술된 시프트 메커니즘의 변형 형태를 이용하는 것이다. 이러한 변형 형태에서, 반복하는 동안 로드의 선택된 값이 재사용될 수 있다. 재사용 패턴이 필터에 포함될 수 있다. 특히, 정의되지 않은 값을 입력 어레이(a)로부터의 그 다음 요소로 채우기 위하여 명령어를 이용하여 값을 1만큼 왼쪽으로 시프트하도록 의도된다. 이하에서 좀 더 상세히 논의되는 바와 같이, 이러한 변형 형태가 본 발명 개시 내용의 목적을 위해 "회전"으로서 언급된다
본 발명에 있어서, 단일 명령어 세트에서 값의 시프트 및 로딩을 함께 조합하도록 의도된다. 예를 들어, 표적 레지스터로부터의 값을 시프트하고, 또한, 메모리로부터의 단일 16-비트 요소를 상기 표적 레지스터로 입력(또는, 로드)하도록 의도된다.
이러한 접근법과 관련하여, 좀 더 효율적인 메커니즘은, 또 다른 레지스터로부터의 값을 표적 레지스터로 이동(또는, 시프트-인(shift in))시키고, 마찬가지로 상기 표적 레지스터로부터의 값을 그 밖의 다른 하나의 레지스터로 이동시키는 것이다. 이러한 논리를 따라, 명령어 세트가 이하의 코드 세그먼트 8에서 나타나는 바와 같이 쓰여질 수 있다.
for( j = 0; j < 15; j++ ) {
v0[j] = v0[j+l] ;
}
v0 [15] = vl[0] ;
for( j = 0; j < 15; j++ ) {
vl[j] = vl[j+l] ;
}
코드 세그먼트 8
이러한 접근법은 전적으로 이론적 관점에 의한 것이지만, 하드웨어에서의 이러한 접근법의 구현예가 다수의 과제를 제시한다. 특히, 코드 세그먼트 8의 의미론이 레지스터 파일 내의 최종 값으로부터 하나의 값을 상기 레지스터 파일 내의 제 1 값으로 전달할 것을 요구한다. 이는, 회로 관점에서, 레지스터 파일 내의 최종 값으로부터 제 1 값까지 뻗어 있는 긴 통신 리드(lead) 또는 통신선의 이용을 필요로 한다. 긴 회로 리드는 일부 경우들에서 최소한, 처리 지연, 추가적인 전력 소비, 및 제작 비용을 증가시키는 경향을 갖는다. 따라서, 가능하면 이러한 리드를 피하는 것이 현명하다.
따라서, 이러한 공학적 과제를 피하기 위하여, 하나의 대안적 접근법은 우-시프트 연산과 함께 좌-시프트 연산을 이용하여 두 레지스터를 연결하는 것이다. 이러한 접근법의 예시가 이하에서 제시되는 코드 세그먼트 9에서 구현된다.
for( j = 0; j < 15; j++ ) {
v0[j] = v0[j+l] ;
}
v0[15] = v1[15] ;
for( j = 15; j > 0; J-- ) {
vl[j+l] = vl[j] ;
}
코드 세그먼트 9
코드 세그먼트 9에 제시된 의미론이 이용되는 경우, 요소들이 한 줄로 늘어선다(line up). 물론, 정의되지 않은 요소(v1[0])가 남아 있음이 해당업계 종사자에게 이해될 수 있다. 이러한 요소의 주소를 설정하기 위하여, v1[0]가 vO[O]와 같은 값으로 채워질 수 있다. 이러한 접근법이, 아래에 제시되는 코드 세그먼트 10에 약술되어 있다.
t = v0 [0] ;
for( j = 0; j < 15; j++ ) {
v0[j] = v0[j+1];
}
v0[15] = vl[15] ;
for( j = 15; j > 0; j-- ) {
Vl [j+1] = vl[j] ;
}
Vl [O] = t ;
코드 세그먼트 10
본 발명에 있어서, SIMD 레지스터 내의 이러한 쌍을 이룬 시프트가 "회전"으로서 언급된다. 특히, 쌍을 이룬 시프트는 한 쌍의 SIMD 레지스터의 요소들을 회전시킨다.
회전을 효과적으로 이용하기 위하여, SIMD 레지스터를 역으로 로드하여 최하위 메모리 위치에서의 요소가 제 1 요소 대신 최종 요소를 향하도록 하는 것이 현명하다. 역으로 로드하는 명령어가 사용되는 경우, 루프에 대해 설정된 명령어는 이하의 코드 세그먼트 11에서 제시되는 바와 같이 다시 쓰여질 수 있다.
load v3 ,&b [0] # loads b [0] . . . b [15] into SIMD v0 ;
# done once per filter
set acO := 0 # sum = 0, first time
load vO,&a[O] # first load
Ll:
loadrev vl, &a [16*k+16] # SIMD load in reverse order
LO:
rmulreds ac0,v0,v3 # the entire inner loop
rshiftO v4,ac0,0 # shift upper 16 bits of acO into v4
rrot v0,v1,1 # rotate the pair v0,vl by 1
loop j,16,L0 # do this 16 times
store v4,&z[16*k] # 16 accumulates are stored
# into z[16*k] at once
loop k,M/16,Ll
코드 세그먼트 11
Ⅲ. 본 발명에 대한 추가적 세부 설명
본 발명의 일 실시예에서 전술된 시프트 및 회전 특성에 대한 논의를 고려하며, 이들 특성들에 대한 추가적 수정 형태를 포함한다. 특히, 일 실시예에서, 본 발명은 레지스터에 의해 시프트 방향을 제한한다. 이러한 실시예에서, 오직 짝수의 레지스터만이 왼쪽으로 시프트될 수 있고 오직 홀수의 레지스터만이 오른쪽으로 시프트될 수 있다.
사전 문제로서, 본 발명의 이러한 실시예에서, 실시예의 세부 사항이 이하에서 더욱 상세히 설명되며, v0 및 v3 각각이 16 개의 16-비트 값들을 가지고 있을 수 있다. 물론, 본 발명의 범위를 벗어나지 않는 한 더 크거나 더 작은 비트 값들이 이용될 수 있음이 해당업계 종사자에게 이해되어야 한다.
이에 더하여, 본 발명의 목적을 위해, SIMD 레지스터 시프트 명령어가 "rshift"로서 언급된다. rshift 명령어는 전술된 코드 세그먼트 6에서와 동일하다.
더욱이, 전술된 바와 같이, 코드 세그먼트 3에 포함되어 있는 바와 같이, rmulreds 명령어는 하나의 명령어로 필터의 전체 내부 루프를 처리할 책임이 있다. 외부 루프의 단일 반복이 5 개의 명령어를 필요로하는 것 또한 세그먼트 3과 함께 논의되었다. 사이클 당 세 개의 명령어를 발하는 본 발명의 이러한 실시예 상에서, 오버헤드(overhead)가 최고 성능을 반으로 저하시킬 것이다.
이에 더하여, 이러한 실시예에서, 회전이 인접 레지스터들로 제한되어, v0는 오직 v1과 함께 회전될 수 있고, v2는 오직 v3와 함께 회전될 수 있다. 상기 실시예에서 이러한 기능을 수행하는 명령어 세트가 rrot 명령어로서 언급된다. 이러한 실시예에 있어서, rrot 레지스터는 쌍을 식별하기 위하여 오직 하나의 레지스터-이름만을 특정한다. 따라서, rrot v0, v1, 1은 rrot v0, 1로 쓰여진다.
본 발명의 이러한 실시예는 1, 2, 또는 4만큼 시프트 및/또는 회전할 수 있도록 한다. 특정 알고리즘이 자신들을 서로 다른 시프트에 적합하도록 한다는 것이 이해될 수 있다. 예를 들어, 복소수 감소(complex reduction)는 실수 및 허수의 쌍과 관계된다. 따라서, 이러한 쌍들은 자연적으로 2만큼의 시프트/감소에 적합하다. 1만큼의 시프트를 제공 또는 달성하기 위하여 데시메이션 필터(decimating filter)가 이용된다. 그러나, 2/4 만큼 데시메이트(decimate)하기 위한 회전(rotate)은 2/4이다.
1/2/4 만큼 시프트하는 동안, 16/32/64 비트가 누산기로부터 선택된다. 이러한 선택은 명령어의 중간 필드에 의해 제어된다.
이와 유사하게, 1/2/4 만큼 회전하는 동안, 2/4 요소들이 표적 장소로 회전되는 방법이 중간 필드에 의해 제어된다.
일부 명령어 세트가 시프트 및 회전 작용(behavior)을 아마도 그 밖의 다른 특정 연산, 함수, 또는 계산과 조합할 것이라는 것 또한 의도되었다. 특히, rmulredsir 명령어는, 누산기를 시프트시키고, 곱셈 및 덧셈을 하기 전에 상기 누산기의 저장 내용을 제거(clear)하며, 그 후 상기 누산기의 제 1 인수(argument)를 회전시킨다. 따라서, 어셈블리 코드에 기록되어 있는 경우, 전체 내부 루프가 이하에 재현되어 있는 코드 세그먼트 12에 의해 대체될 수 있다.
LO:
rmulredslr v4,ac0,v0,v3
loop j,16,LO
코드 세그먼트 12
코드 세그먼트 12에 의해 제시되는 명령어를 이용하여, 필터는, 상기 필터가 16 개의 rmulredslr 명령어를 실행하기 위한 17 개의 사이클을 지속시킬 수 있도록 기록될 수 있다. 상기 필터는 사이클 당 약 15 개의 곱셈을 포함한다.
지금부터 본 발명은 본 명세서에 첨부된 도면과 함께, 전술된 내용에 대하여 기술할 것이다. 도 1-3은 코드 세그먼트 7에 의해 약술된 명령어 세트의 양상과 관련된다. 도 4-6은 코드 세그먼트 11에 의해 약술된 명령어 세트의 양상과 관련된다.
도 1은 코드 세그먼트 7에 의해 구현되는 기본 논리의 흐름도를 제공한다. 기본 명령어(10)가 블록(12)에서 시작하며, 이어서 블록(14)에서 연산의 결과를 저장하는 누산기를 제공한다. 블록(14)으로부터, 방법은, 복수의 요소를 포함하는 최초 어레이를 제공하는 단계인 블록(16)으로 나아간다. 블록(16)으로부터, 상기 방법은, 누산기를 초기화하는 단계인 블록(18)으로 나아간다. 블록(18)으로부터, 상기 방법은, 도 2에 상술되어 있는 제 1 루프(A)의 실행 단계인 블록(20)으로 나아간다. 루프 A는 M 번 실행된다. 블록(20)으로부터, 상기 방법은, 도 3에 상술되어 있는 루프 B의 실행 단계인 블록(22)으로 나아간다. 루프 B는 M/X 번 실행된다. X는 임의의 수이지만, M 미만이거나 M 과 동일한 숫자라고 기대된다. 블록(22)에서 루프 B의 실행 이후에, 상기 방법은 블록(24)에서 종료된다.
도 2는 26이 가리키는 루프 A 에서 실행되는 방법에 대한 기본 흐름도를 제공한다. 루프 A는 블록(28)에서 시작하며, 이어서 블록(30)에서 데이터를 최초 어레이의 요소들로 로딩한다. 블록(30) 이후에, 상기 방법은, 최종 어레이를 생성하기 위하여 최초 어레이 내의 요소들의 데이터에 대한 연산의 실행 단계인 블록(32)으로 나아간다. 최종 어레이의 요소들은 최종 어레이 내의 최초 장소에 위치된다. 블록(32) 이후에, 상기 방법은, 하나 이상의 어레이 장소의 요소들을 초기 장소로부터 왼쪽 또는 오른쪽으로 시프트시키기 위하여 최종 어레이에 대한 시프트 연산을 수행하는 단계인 블록(34)으로 나아간다. 전술된 바와 같이, 이러한 시프트는 명령어 세트(10)를 실행하는 요구사항에 따라 둘 이상의 위치일 수 있다. 블록(34)으로부터, 루프 A(26)의 상기 방법은, 시프트된 요소들의 어레이를 생성하는 단계인 블록(36)으로 나아간다. 일단 시프트된 요소들의 어레이가 생성되면, 상기 방법은, 시프트된 어레이가 누산 어레이(accumulate array)로 이동되는 블록(38)으로 나아간다. 그 후 루프 A(26)는 블록(40)에서 종료된다.
도 3은, 42가 가리키는 루프 B에서 실행되는 방법에 대한 기본 흐름도를 제공한다. 루프 B는 블록(44)에서 시작된다. 그 후 루프 B는 누산 어레이를 저장하는 단계인 블록(46)으로 나아간다. 블록(46) 이후, 루프 B는 블록(46)에서 종료된다.
도 4는 코드 세그먼트 11에 의해 구현되는 기본 논리의 흐름도를 제공한다. 기본 명령어(50)가 블록(52)에서 시작하며, 이어서, 블록(54)에서, 연산의 결과를 저장하는 누산기를 제공한다. 블록(54)으로부터, 상기 방법은, 복수의 요소들을 포함하는 최초 어레이를 제공하는 단계인 블록(56)으로 나아간다. 블록(56)으로부터, 상기 방법은, 상기 누산기를 초기화하는 단계인 블록(58)으로 나아간다. 블록(58)으로부터, 상기 방법은, 데이터를 최초 어레이의 요소들로 로딩하는 단계인 블록(60)으로 나아간다. 블록(60)으로부터, 상기 방법은, 도 5에 상술되어 있는 제 1 루프(C)의 실행 단계인 블록(62)으로 나아간다. 루프 C는 M 번 실행된다. 블록(62)으로부터, 상기 방법은, 도 6에 상술되어 있는 루프 D의 실행 단계인 블록(64)으로 나아간다. 루프 D는 M/X 번 실행된다. X는 임의의 숫자이지만, M 미만이거나 M과 동일한 숫자라고 기대된다. 블록(64)에서 루프 D의 실행 이후에, 상기 방법은 블록(66)에서 종료된다.
도 5는 68이 가리키는 루프 C에서 실행되는 방법에 대한 기본 흐름도를 제공한다. 루프 C는 블록(70)에서 시작하며, 이어서, 블록(72)에서, 최종 어레이를 생성하기 위하여 최초 어레이 내의 요소들의 데이터에 대한 연산을 실행한다. 최종 어레이 내의 요소들은 최종 어레이 내의 최초 장소에 위치된다. 블록(72) 이후에, 상기 방법은, 하나 이상의 어레이 장소의 요소들을 최초 장소로부터 왼쪽 또는 오른쪽으로 시프트시키기 위하여 최종 어레이에 대한 시프트 연산을 실행하는 단계인 블록(76)으로 나아간다. 전술된 바와 같이, 이러한 시프트는, 명령어 세트(50)를 실행하는 요구사항에 따라 둘 이상의 위치일 수 있다. 블록(76)으로부터, 루프 C의 상기 방법은, 시프트된 요소들의 어레이를 생성하는 단계인 블록(78)으로 나아간다. 일단 시프트된 요소들의 어레이가 생성되면, 상기 방법은, 시프트된 어레이가 누산 어레이로 이동되는 단계인 블록(80)으로 나아간다. 상기 누산 어레이는 그 후 블록(82)에서 저장된다. 그 후 루프 C는 블록(84)에서 종료된다.
도 6은 86이 가리키는 루프 D에서 실행되는 방법에 대한 기본 흐름도를 제공한다. 루프 D는 블록(88)에서 시작된다. 루프 B는 그 후, 역순 어레이를 형성하기 위하여, 최초 어레이 내의 요소들로부터의 데이터를 역순으로 로딩하는 단계인 블록(90)으로 나아간다. 블록(90) 이후, 루프 D는 블록(92)에서 종료된다.
도 7은 본 발명에 의해 의도된 추가적 실시예에 대한 흐름도를 제공한다. 이러한 실시예는, 본 발명과 관련해 사용되는 바와 같이, "시프트"의 하나 이상의 정의를 도시한다.
도 7에서, 프로세스(100)가 블록(102)에서 시작된다. 블록(102)에서 시작된 이후에, 상기 프로세스는, M 비트를 갖는 하나 이상의 제 1 레지스터가 식별되는 단계인 블록(104)으로 나아간다. 블록(104) 이후, 상기 프로세스는, N 비트를 갖는 하나 이상의 제 2 레지스터가 식별되는 단계인 블록(106)으로 나아간다. "식별"은 레지스터 생성, 계산, 또는 위치 설정을 포함할 수 있다. 바꾸어 말하면, "식별"은, 메모리로부터 데이터의 검색(retrieval), 또는 계산, 처리, 또는 그 밖의 다른 방법에 의한 레지스터의 형성을 폭넓게 포함하도록 의도된다.
블록(106) 이후에, 상기 프로세스는, 좌-시프트 또는 우-시프트가 실행되는 단계인 블록(108)으로 나아간다. 대안적으로, 좌-시프트 및 우-시프트 모두가 이용될 수도 있다. 일반적으로, 시프트는 제 2 레지스터로부터의 K 비트(여기서, K ≤ N)를 시프트하는 단계를 포함한다. 특히, 시프트는, 도 8과 관련해 설명되는 좌-시프트(112) 또는 도 9와 관련해 설명되는 우-시프트(126) 중 하나일 수 있다.
좌-시프트 연산(112)에 있어서, 도 8에서 상술되는 바와 같이, 시프트 연산은 블록(114)에서 시작된다. 블록(114)에서의 시작된 이후에, 좌-시프트는, 제 1 레지스터의 선택된 내용(content)를 포함하는 비트(K...N-1)가 읽히는 단계인 블록(116)으로 나아간다. 그 후, 블록(118)에서, 비트(K...N-1)가 제 1 레지스터의 비트 위치(0...N-K-1)에 기록된다. 블록(120)에서, 제 2 레지스터로부터 K 비트가 읽힌다. 블록(122)에서, 제 2 비트로부터의 상기 K 비트가 제 1 레지스터의 비트 위치(N-K...N-1)에 기록된다. 좌-시프트 연산(112)은 블록(124)에서 종료된다.
우-시프트 연산(126)이 도 9와 관련해 설명된다. 우-시프트 연산(126)은 블록(128)에서 시작된다. 블록(128)에서 시작된 이후에, 우-시프트 연산(126)은, 제 1 레지스터의 선택된 내용을 포함하는 비트(0...N-K-1)가 읽히는 단계인 블록(130)으로 나아간다. 우-셔터 연산(126)은 그 후, 비트(0...N-K-1)가 제 1 레지스터의 비트 위치(K...N-1)에 기록되는 단계인 블록(132)으로 나아간다. 블록(132) 이후에, 블록(134)에서 K 비트가 제 2 레지스터로부터 읽힌다. 그 후, 블록(136)에서, 제 2 레지스터로부터의 상기 K 비트가 제 1 레지스터의 비트 위치(0...K-1)에 기록된다. 우-시프트 연산(126)은 블록(138)에서 종료된다.
좌·우 시프트의 이러한 논의와 관련하여, 시프트는 감소 연산(reducing operation) 또한 포함할 수 있다. 감소 연산에서, 복수의 제 1 레지스터들로부터의 내용이 읽히고 그 후 K 비트가 단일 스칼라 레지스터에 기록된다. 바꾸어 말하면, 연산을 위한 입력은 단일 레지스터보다는 복수의 레지스터로부터 유래될 수 있다.
시프트 연산과 관련하여, K 비트가 제 2 레지스터로부터 제 1 레지스터에 기록된 이후에 제 2 레지스터의 내용이 0으로 설정될 수 있음이 또한 의도되었다. 또한 이러한 연산이 감소 연산에 포함될 수 있음이 해당업계 종사자에게 이해되어야 한다.
본 명세서에 기술된 방법의 연산이 2진 환경에서 수행되기 때문에, K에 대한 값이 2의 임의의 요소일 수 있음이 의도된다. 따라서, 기본 원리에서, K에 대한 값이 2b 비트로 표현되는 값이도록 의도된다(여기서, b는 정수). 오늘날 대부분의 처리장치가 16 비트 표준을 이용하여 연산하기 때문에, b의 값은 4이다(b=4). 그러나, 본 발명은 16 비트 환경에 한정되지 않음이 해당업계 종사자에게 이해되어야 한다. 32 비트(b=5), 64 비트(b=6), 128 비트(b=7), 또는 더 큰 환경에서 이용될 수도 있다. 이를 염두에 두고, 대부분의 공통 처리 환경이 16 비트, 32 비트, 및 64 비트 처리를 포함할 것임이 의도된다.
좌 · 우 시프트와 관련해 논의된 읽기 함수들과 관련하여, K 비트가 미리 지정된 함수를 따라 제 2 레지스터의 서로 다른 위치로부터 읽힐 수 있다. 바꾸어 말하면, 일련의 인접 비트들이 본 명세서에서 논의된 방법으로 처리될 가능성이 높지만, 읽기 함수의 특정 순서에 어떠한 제한이 있는 것은 아니다. 본 발명의 범위를 벗어나지 않는 한 적합한 임의의 함수가 오버레이(overlay)로서 행동할 수 있음이 해당업계 종사자에게 이해되어야 한다. 이에 더하여, 어느 위치로부터 K 비트가 읽혀지는지를 판단하는 함수 또한 K의 값을 결정하기 위하여 이용될 수 있다.
제 1 레지스터는 벡터 레지스터일 수 있고, 제 2 레지스터는 스칼라 레지스터일 수 있음이 해당업계 종사자에게 이해될 수 있다. 본 발명의 범위를 벗어나지 않는 한 그 밖의 다른 변형 형태 또한 이용될 수 있다.
도 10은 본 발명에 의해 의도된 또 다른 실시예에 대한 흐름도를 제공한다. 이러한 실시예는 본 발명과 관련하여 시프트 연산에 대한 하나 이상의 그 밖의 다른 실시예를 예시한다.
도 10과 관련해, 시프트 연산(140)이 블록(142)에서 시작된다. 그 후 시프트 연산(140)은, K 비트 이상을 포함하는 하나 이상의 제 1 레지스터가 식별되는 단계인 블록(142)으로 나아간다. 그 후, 블록(146)에서, K 비트를 초과하는 비트에 대한 저장 장소를 정의하는 하나 이상의 제 2 레지스터가 식별된다. 블록(148)에서, 제 1 레지스터로부터 K 비트가 읽히고 상기 K 비트가 제 2 레지스터에 기록됨으로써 상기 K 비트를 시프트 할 수 있고, 여기서, 제 2 레지스터의 내용은 제 1 레지스터의 내용에 대하여 K 비트만큼 왼쪽으로 시프트되거나 오른쪽으로 시프트된다. 블록(150)에서, 제 2 레지스터 내의 결과적(resulting) 공백이 제 1 레지스터로부터의 K 비트로 채워진다. 시프트 연산(140)은 블록(156)에서 종료된다.
시프트 연산(140)에 대한 계속된 참조로서, 제 1 레지스터는 한 쌍 이상의 제 1 레지스터일 것이고, 제 2 레지스터는 한 쌍 이상의 제 2 레지스터일 것이 의도된다. 이러한 변형 형태에서, 시프트는, K 비트가 제 1 레지스터 쌍으로부터 읽히고 제 2 레지스터 쌍에 기록되도록 한다. 제 2 레지스터 쌍의 내용은, 제 1 레지스터 쌍에 대하여 K 비트만큼 왼쪽으로 시프트되거나 오른쪽으로 시프트된다. 전술된 바와 같이, 제 2 레지스터 쌍 내의 결과적 공백은 제 1 레지스터 쌍으로부터의 K 비트로 채워진다.
이러한 실시예와 관련하여, 제 2 레지스터 쌍 중 한 레지스터의 내용이 왼쪽으로 시프트되고, 제 2 레지스터 쌍 중 나머지 레지스터의 내용이 오른쪽으로 시프트된다. 이번 실시예가 오직 쌍을 이룬 레지스터의 이용을 의도하였지만, 하나 이상의 레지스터는 제 1 쌍의 레지스터들과 쌍을 이룰 수 없고, 제 2 상의 레지스터들과도 쌍을 이룰 수 없음이 의도된다. 언급된 바와 같이, 모든 레지스터들은 레지스터 쌍일 수 있고, 이로 인해 모든 제 1 레지스터 쌍들을 모든 제 2 레지스터 쌍들과 정렬시킬 수 있다.
추가적으로, 연산은, 제 2 레지스터 쌍의 내용이 왼쪽으로 시프트되는지 또는 오른쪽으로 시프트되는지의 선택이 미리 지정되어 있는 명령어 세트 또는 함수를 포함할 것으로 의도된다. 이러한 변형 형태에서, 제 2 레지스터 쌍은 제 2 의 좌-시프트 레지스터와 제 2 의 우-시프트 레지스터를 포함한다. 제 2 의 좌-시프트 레지스터와 제 2 의 우-시프트 레지스터 각각은 제 1 레지스터 쌍 중 상보적인 레지스터들과 쌍을 이룬다. 이전 실시예와 마찬가지로, 제 1 레지스터로부터의 내용이 기록되는 제 2 레지스터 내의 장소에서의 연산에 의해 K의 값이 결정된다.
또 다른 하나의 의도된 변형 형태에서, K의 값을 결정할 때, 시프트와 함께 실행되는 임의의 계산에 대한 제어 또한 제공될 수 있다. 이러한 점에서, 시프트 연산의 특성을 바꾸기 위하여 연산에 포함되는 함수 또는 계산 오버레이가 존재할 수 있다. 이는, 제 1 레지스터 쌍으로부터의 내용이 기록되는 제 2 레지스터 쌍 내의 위치를 바꿀 수도 있음이 의도된다.
본 발명에 따른 회전 연산(158)의 흐름도를 총괄하여 제공하는 도 11 및 12가 참조된다.
회전 연산(158)에 대한 사전 이해를 제공하기 위하여, 이하의 기본 사항이 제공된다. 회전 연산(158)에 있어서, 둘 이상의 레지스터, 제 1 레지스터 및 제 2 레지스터가 존재한다. 간결성을 위해, 모든 레지스터는 0...N-1로부터 N 비트를 포함한다. 이에 더하여, K ≤ N 이다. 레지스터 내의 비트가 두 그룹, 즉, (1) 0...K-1 비트, 및 (2) K...N-1 비트로 나누어질 수 있다. 두 레지스터의 초기 설정이 표 1에서 보이는 바와 같이 나타난다.
레지스터 1 X Y
레지스터 2 A B
X 와 B 가 0...K-1 비트를 가리키고, Y 와 A 가 K...N-1 비트를 가리킨다. 회전이 종결된 이후, 레지스터들은 표 2에서 보이는 바와 같이 나타날 것이다.
레지스터 1 Y B
레지스터 2 X A
이는 단일 회전임이 이해되어야 한다. 2중 회전(double rotation)이 표 3에서 나타나고, 3중 회전(triple rotation)이 표 4에 의해 제시된다.
레지스터 1 B A
레지스터 2 Y X
레지스터 1 A X
레지스터 2 B Y
4중 회전이 초기 설정을 원 상태로 되돌릴 것임이 이해되어야 한다.
도 11 및 12로 되돌아오면, 회전 연산(158)이 블록(160)에서 시작된다. 이러한 연산에 대한 논의와 관련하여, 제 1 및 제 2 레지스터가 식별될 것임이언급되어 있다. 이러한 단계들이 전술되었기 때문에 도 11 또는 12에는 포함되지 않는다. 그러나, 회전 연산(158)의 실행과 관련하여 최소한 제 1 레지스터와 제 2 레지스터가 식별된다.
블록(162)에서, 0...K-1 비트가 읽힌다. 0...K-1 비트는 제 1 레지스터의 내용의 일부를 포함한다. 블록(164)에서, K...N-1 비트가 읽힌다. K...N-1 비트 또한 제 1 레지스터의 내용의 일부를 포함한다. 블록(166)에서, 0...K-1 비트 가 읽힌다. 0...K-1 비트는 제 2 레지스터의 일부를 포함한다. 블록(168)에서, K...N-1 비트가 읽힌다. K...N-1 비트 또한 제 2 레지스터의 일부분 이상을 포함한다. 프로세스(158)가 블록(170)에서 기록 부분으로 전환된다.
언급된 바와 같이, 회전은 단일, 2중, 또는 3중 회전일 수 있다. 도 12에서 도시되는 단일 회전에 있어서, 블록(172)에서, 0...K-1 비트가 제 1 레지스터로부터 제 2 레지스터의 0...K-1 비트 위치에 기록된다. 블록(174)에서, K...N-1 비트가 제 1 레지스터로부터 제 1 레지스터의 0...K-1 비트 위치에 기록된다. 블록(176)에서, K...N-1 비트가 제 2 레지스터로부터 제 1 레지스터의 K...N-1 비트 위치에 기록된다. 블록(178)에서 0...K-1 비트가 제 2 레지스터로부터 제 2 레지스터의 K...N-1 비트 위치에 기록된다. 단일 회전 프로세스(158)는 블록(180)에서 종결된다.
2중 시프트를 달성하기 위하여, 0...K-1 비트가 제 1 레지스터로부터 제 2 레지스터의 K...N-1 비트 위치에 기록되고, K...N-1 비트가 제 1 레지스터로부터 제 2 레지스터의 0...K-1 비트 위치에 기록되며, K...N-1 비트가 제 2 레지스터로부터 제 1 레지스터의 0...K-1 비트 위치에 기록되고, 0...K-1 비트가 제 2 레지스터로부터 제 1 레지스터의 K...N-1 비트 위치에 기록된다. 3중 회전에 있어서, 0...K-1 비트가 제 1 레지스터로부터 제 1 레지스터의 K...N-1 비트 위치에 기록되고, K...N-1 비트가 제 1 레지스터로부터 제 2 레지스터의 K...N-1 비트 위치에 기록되며, K...N-1 비트가 제 2 레지스터로부터 제 2 레지스터의 0...K-1 비트 위치에 기록되고, 0...K-1 비트가 제 2 레지스터로부터 제 1 레지스터의 0...K-1 비트 위치에 기록된다.
이러한 서로 다른 회전 모두가 제 1 및 제 2 레지스터들 중 서로 다른 레지스터들에 대하여 이용 가능한 것은 아닐 것이라는 것이 이해되어야 한다. 예를 들어, N≫K 인 경우, 회전은, 지나치게 많은 비트가 특정 레지스터에 대하여 시프트되는 결과를 가져올 수 있다. 이러한 연산은 유용한 결과를 가져오지 않을 것이고, 따라서 통상적으로 달성되지 않을 것이다.
도 11 및 12는 반시계 방향 회전을 도시한다는 것 역시 이해되어야 한다. 시계 방향 회전 역시 본 발명의 범위 내에 해당한다는 것이 의도되었다. 분명하게, 회전이 시계 방향이든 반시계 방향이든, 표 1-4에서 제시되는 바와 같이, 서로 다른 순서라 하더라도 레지스터 내용에 대한 동일한 순열(permutation)이 형성될 것이다.
전술된 내용으로부터 이해될 수 있는 바와 같이, 시프트 및 회전 함수들이 조합될 수 있고, 이로 인해 역시 본 발명의 범위 내인 추가적 처리 이점들을 얻을 수 있다.
의도된 본 발명의 한 예시에서, 방법은, 하나 이상의 시프트 연산과 함께 조합된 회전 연산(158)을 포함한다. 회전 연산(158)이 시프트 연산과 조합되는 경우, 상기 시프트 연산은 제 1 및 제 2 레지스터들의 별개의 세트에 대해 수행된다. 바꾸어 말하면, 상기 시프트 연산은 회전 연산과는 다른 제 1 및 제 2 레지스터들 중 서로 다른 레지스터들에 대하여 수행된다. 명확성을 위해, 상기 "다른" 제 1 및 제 2 레지스터들은 제 3 및 제 4 레지스터들을 가리킨다.
이를 염두에 두고, 시프트 연산이 이하를 따라 회전 연산과 병렬로 수행될 수 있다. K 비트(여기서, K < N)가 하나 이상의 제 4 레지스터로부터 하나 이상의 제 3 레지스터로 시프트될 수 있다. 이러한 시프트 연산에서, 상기 K 비트는 좌-시프트 연산 또는 우-시프트 연산을 따라 시프트된다.
좌-시프트 연산에 있어서, K...N-1 비트가 읽힌다. 이러한 비트들은 제 3 레지스터의 선택된 내용을 포함한다. 그 후, K...N-1 비트가 제 3 레지스터의 0...N-K-1 비트 위치에 기록된다. 이에 뒤이어, 제4 레지스터로부터의 k 비트가 읽히고, 제 4 레지스터로부터의 상기 K 비트가 제 3 레지스터의 N-K...N-1 비트 위치에 기록된다.
우-시프트 연산에 있어서, 0...N-K-1 비트가 읽힌다. 이러한 비트들은 제 3 레지스터의 선택된 내용을 포함한다. 그 후, 0...N-K-1 비트가 제 3 레지스터의 K...N-1 비트 위치에 기록된다. 그 다음, 제 4 레지스터로부터 K 비트가 읽힌다. 마지막으로, 제 4 레지스터로부터의 상기 K 비트가 제 3 레지스터로부터의 0...K-1 비트 위치에 기록된다.
이전과 같이, 제 3 레지스터 내의 임의의 결과적 공백이 제 4 레지스터로부터의 K 비트로 채워질 수 있다. 시프트 및 회전 함수들이 동시에 수행될 수도 있다. 이전과 같이, 좌-시프트 또는 우-시프트 중 하나 이상과 함께 실행되는 임의의 계산에 대한 제어가 제공될 수도 있다.
본 발명은 본 명세서에 기술된 실시예에만 오직 한정되는 것으로 의도되지 않았다. 이와 반대로, 본 발명은 현재 개발되어 있거나 또는 미래에 개발될 임의의 등가물을 포함하는 것으로 의도되었음이 해당업계 종사자에게 이해될 것이다.

Claims (28)

  1. 처리 방법에 있어서, 상기 방법은,
    M 비트를 갖는 하나 이상의 제 1 레지스터를 식별하는 단계와,
    N 비트를 갖는 하나 이상의 제 2 레지스터를 식별하는 단계와,
    제 2 레지스터로부터의 K 비트(여기서, K ≤ N)를 제 1 레지스터로 시프트하는 단계
    를 포함하며, 여기서, 상기 K 비트는
    (1) 제 1 레지스터의 선택된 내용을 포함하는 K...N-1 비트를 읽는 단계와,
    상기 K...N-1 비트를 제 1 레지스터의 0...N-K-1 비트 위치에 기록하는 단계와,
    제 2 레지스터로부터 k 비트를 읽는 단계와,
    제 2 레지스터로부터의 상기 K 비트를 제 1 레지스터의 N-K...N-1 비트 위치에 기록하는 단계
    를 포함하는 좌-시프트(left shift) 실행 단계, 또는,
    (2) 제 1 레지스터의 선택된 내용을 포함하는 0...N-K-1 비트를 읽는 단계와,
    상기 0...N-K-1 비트를 제 1 레지스터의 K...N-1 비트 위치에 기록하는 단계와,
    제 2 레지스터로부터 K 비트를 읽는 단계와,
    제 2 레지스터로부터의 상기 K 비트를 제 1 레지스터의 0...K-1 비트 위치에 기록하는 단계
    를 포함하는 우-시프트(right shift) 실행 단계
    중 하나 이상의 단계를 따라 시프트되는 것을 특징으로 하는 처리 방법.
  2. 제 1 항에 있어서,
    시프트 단계는, 제 2 레지스터로부터의 K 비트를 제 1 레지스터에 기록한 이후에, 제 2 레지스터의 내용을 0으로 설정하는 단계를 추가로 포함하는 것을 특징으로 하는 처리 방법.
  3. 제 1 항에 있어서,
    상기 K 비트는 2b 비트를 포함하는 것을 특징으로 하는 처리 방법.
  4. 제 3 항에 있어서,
    상기 b는 3, 4, 5, 또는 6인 것을 특징으로 하는 처리 방법.
  5. 제 4 항에 있어서,
    상기 K 비트는, 미리 지정된 함수를 따라 제 2 레지스터 내의 서로 다른 위치로부터 읽히는 것을 특징으로 하는 처리 방법.
  6. 제 5 항에 있어서,
    K의 값 또한, 미리 지정된 함수에 의해 결정되는 것을 특징으로 하는 처리 방법.
  7. 제 1 항에 있어서,
    좌-시프트 또는 우-시프트 중 오직 하나만이 실행되는 것을 특징으로 하는 처리 방법.
  8. 제 1 항에 있어서,
    제 1 레지스터는 벡터 레지스터이고, 제 2 레지스터는 스칼라 레지스터인 것을 특징으로 하는 처리 방법.
  9. 처리 방법에 있어서,
    K 비트 이상의 원 내용(original content)을 포함하는 하나 이상의 제 1 레지스터를 식별하는 단계와,
    K 비트 이상에 대한 저장 장소를 정의하는 하나 이상의 제 2 레지스터를 식별하는 단계와,
    제 1 레지스터로부터 K 비트를 읽는 단계와,
    상기 K 비트를 제 2 레지스터에 기록하는 단계와,
    상기 K 비트를 제 2 레지스터에 기록하는 단계에서, 제 2 레지스터의 내용이 왼쪽으로 시프트되거나, 오른쪽으로 시프트되거나, 왼쪽 또는 오른쪽으로 시프트되도록, 상기 K 비트를 제 1 레지스터의 원 내용(original content)에 대하여 K 비트만큼 시프트하는 단계와,
    제 2 레지스터 내의 결과적 공백(resulting vacancy)을 제 1 레지스터의 원 내용으로부터의 K 비트로 채우는 단계
    를 포함하는 것을 특징으로 하는 처리 방법.
  10. 제 9 항에 있어서,
    제 1 레지스터는 하나 이상의 제 1 레지스터 쌍을 포함하고,
    제 2 레지스터 쌍은 하나 이상의 제 2 레지스터 쌍을 포함하며,
    시프트 단계는, K 비트가, 제 1 레지스터 쌍으로부터 읽히고, 제 2 레지스터 쌍에 기록되도록 하고,
    제 2 레지스터 쌍의 내용은, 제 1 레지스터 쌍의 원 내용에 대하여 K 비트만큼 왼쪽으로 시프트되거나, 오른쪽으로 시프트되거나, 왼쪽 또는 오른쪽으로 시프트되며,
    제 2 레지스터 쌍 내의 결과적 공백은 제 1 레지스터 쌍의 원 내용으로부터의 K 비트로 채워지는 것을 특징으로 하는 처리 방법.
  11. 제 10 항에 있어서,
    제 2 레지스터 쌍 중 하나의 레지스터의 내용은 왼쪽으로 시프트되고, 제 2 레지스터 쌍 중 나머지 레지스터의 내용은 오른쪽으로 시프트되는 것을 특징으로 하는 처리 방법.
  12. 제 10 항에 있어서,
    하나 이상의 추가적인 레지스터가, 제 1 쌍의 레지스터들과 쌍을 이루지 않고 제 2 상의 레지스터들과도 쌍을 이루지 않는 것을 특징으로 하는 처리 방법.
  13. 제 11 항에 있어서,
    모든 레지스터들이 레지스터 쌍이고, 이로 인해, 모든 제 1 레지스터 쌍들이 모든 제 2 레지스터 쌍들과 정렬되는 것을 특징으로 하는 처리 방법.
  14. 제 11 항에 있어서,
    제 2 레지스터 쌍들의 내용이 왼쪽으로 시프트되는지 또는 오른쪽으로 시프트되는지에 대한 선택이 미리 지정되어 있는 것을 특징으로 하는 처리 방법.
  15. 제 14 항에 있어서,
    제 2 레지스터 쌍은, 제 2 의 좌-시프트 레지스터와 제 2 의 우-시프트 레지스터를 포함하는 것을 특징으로 하는 처리 방법.
  16. 제 15 항에 있어서,
    상기 제 2 의 좌-시프트 레지스터와 상기 제 2 의 우-시프트 레지스터 각각은 제 1 레지스터 쌍 중 상보적 레지스터들과 쌍을 이루는 것을 특징으로 하는 처리 방법.
  17. 제 9 항에 있어서,
    K의 값과, 제 1 레지스터로부터의 원 내용이 기록되는 제 2 레지스터 내의 위치를 결정하는 단계를 추가로 포함하는 것을 특징으로 하는 처리 방법.
  18. 제 17 항에 있어서,
    결정하는 단계는 또한, 시프트 단계와 함께 실행되는 임의의 계산을 제어하는 단계를 포함하는 것을 특징으로 하는 처리 방법.
  19. 제 10 항에 있어서,
    K의 값과, 제 1 쌍의 레지스터들로부터의 원 내용이 기록되는 제 2 쌍의 레지스터들 내의 위치를 결정하는 단계를 추가로 포함하는 것을 특징으로 하는 처리 방법.
  20. 처리 방법에 있어서, 상기 방법은,
    하나 이상의 제 1 레지스터를 식별하는 단계와,
    하나 이상의 제 2 레지스터를 식별하는 단계와,
    회전 연산을 실행하는 단계
    를 포함하며, 상기 회전 연산을 실행하는 단계는,
    제 1 레지스터의 내용을 포함하는 0...K-1 비트를 읽는 단계와,
    제 1 레지스터의 내용을 포함하는 K...N-1 비트를 읽는 단계와,
    제 2 레지스터의 내용을 포함하는 0...K-1 비트를 읽는 단계와,
    제 2 레지스터의 내용을 포함하는 K...N-1 비트를 읽는 단계와,
    (1) 제 1 레지스터로부터의 0...K-1 비트를 제 2 레지스터의 0...K-1 비트 위치에 기록하는 단계와,
    제 1 레지스터로부터의 K...N-1 비트를 제 1 레지스터의 0...K-1 비트 위치에 기록하는 단계와,
    제 2 레지스터로부터의 K...N-1 비트를 제 1 레지스터의 K...N-1 비트 위치에 기록하는 단계와,
    제 2 레지스터로부터의 0...K-1 비트를 제 2 레지스터의 K...N-1 비트 위치에 기록하는 단계,
    (2) 제 1 레지스터로부터의 0...K-1 비트를 제 2 레지스터의 K...N-1 비트 위치에 기록하는 단계와,
    제 1 레지스터로부터의 K...N-1 비트를 제 2 레지스터의 0...K-1 비트에 기록하는 단계와,
    제 2 레지스터로부터의 K...N-1 비트를 제 1 레지스터의 0...K-1 비트 위치에 기록하는 단계와,
    제 2 레지스터로부터의 0...K-1 비트를 제 1 레지스터의 K...N-1 비트 위치에 기록하는 단계, 또는,
    (3) 제 1 레지스터로부터의 0...K-1 비트를 제 1 레지스터의 K...N-1 비트 위치에 기록하는 단계와,
    제 1 레지스터로부터의 K...N-1 비트를 제 2 레지스터의 K...N-1 비트 위치에 기록하는 단계와,
    제 2 레지스터로부터의 K...N-1 비트를 제 2 레지스터의 0...K-1 비트 위치에 기록하는 단계와,
    제 2 레지스터로부터의 0...K-1 비트를 제 1 레지스터의 0...K-1 비트 위치에 기록하는 단계
    중 하나 이상의 단계
    에 의한 것을 특징으로 하는 처리 방법.
  21. 제 20 항에 있어서,
    하나 이상의 제 4 레지스터로부터의 K 비트(여기서, K≤N)를 하나 이상의 제 3 레지스터로 시프트하는 단계로서, 여기서, 상기 K 비트는,
    (1) 제 3 레지스터의 선택된 내용을 포함하는 K...N-1 비트를 읽는 단계와,
    상기 K...N-1 비트를 제 3 레지스터의 0...N-K-1 비트 위치에 기록하는 단계와,
    제 4 레지스터로부터의 K 비트를 읽는 단계와,
    제 4 레지스터로부터의 상기 K 비트를 제 3 레지스터의 N-K...N-1 비트 위치에 기록하는 단계
    를 포함하는 좌-시프트 실행 단계, 또는
    (2) 제 3 레지스터의 선택된 내용을 포함하는 0...N-K-1 비트를 읽는 단계와,
    상기 0...N-K-1 비트를 제 3 레지스터의 K...N-1 비트 위치에 기록하는 단계와,
    제 4 레지스터로부터의 K 비트를 읽는 단계와,
    제 4 레지스터로부터의 상기 K 비트를 제 3 레지스터의 0...K-1 비트 위치에 기록하는 단계
    를 포함하는 우-시프트 실행 단계
    중 하나 이상의 단계를 따라 시프트되는 것을 특징으로 하는 처리 방법.
  22. 제 21 항에 있어서,
    시프트하는 단계는, 제 4 레지스터로부터의 상기 K 비트를 제 3 레지스터에 기록한 이후에, 제 4 레지스터의 내용을 0으로 설정하는 단계를 추가로 포함하는 것을 특징으로 하는 처리 방법.
  23. 제 21 항에 있어서,
    상기 K 비트는 2b 비트를 포함하는 것을 특징으로 하는 처리 방법.
  24. 상기 b는 3, 4, 5, 또는 6인 것을 특징으로 하는 처리 방법.
  25. 제 24 항에 있어서,
    상기 K 비트는, 미리 지정된 함수를 따라 제 4 레지스터 내의 서로 다른 위치로부터 읽히는 것을 특징으로 하는 처리 방법.
  26. 제 25 항에 있어서,
    K의 값 또한 미리 지정된 함수에 의해 결정되는 것을 특징으로 하는 처리 방법.
  27. 제 21 항에 있어서,
    좌-시프트 또는 우-시프트 중 오직 하나만이 실행되는 것을 특징으로 하는 처리 방법.
  28. 제 21 항에 있어서,
    제 3 레지스터는 벡터 레지스터이고, 제 4 레지스터는 스칼라 레지스터인것을 특징으로 하는 처리 방법.
KR1020107011708A 2007-12-05 2008-12-04 데이터 처리에 있어서 레지스터 시프트 및 회전을 포함하는 방법 및 명령어 세트 KR20100101586A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US99247907P 2007-12-05 2007-12-05
US60/992,479 2007-12-05

Publications (1)

Publication Number Publication Date
KR20100101586A true KR20100101586A (ko) 2010-09-17

Family

ID=40718164

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107011708A KR20100101586A (ko) 2007-12-05 2008-12-04 데이터 처리에 있어서 레지스터 시프트 및 회전을 포함하는 방법 및 명령어 세트

Country Status (4)

Country Link
US (2) US8407456B2 (ko)
EP (1) EP2232361A1 (ko)
KR (1) KR20100101586A (ko)
WO (1) WO2009073787A1 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9792118B2 (en) 2013-11-15 2017-10-17 Qualcomm Incorporated Vector processing engines (VPEs) employing a tapped-delay line(s) for providing precision filter vector processing operations with reduced sample re-fetching and power consumption, and related vector processor systems and methods
US9619227B2 (en) * 2013-11-15 2017-04-11 Qualcomm Incorporated Vector processing engines (VPEs) employing tapped-delay line(s) for providing precision correlation / covariance vector processing operations with reduced sample re-fetching and power consumption, and related vector processor systems and methods
US10496311B2 (en) 2017-01-19 2019-12-03 International Business Machines Corporation Run-time instrumentation of guarded storage event processing
US10725685B2 (en) * 2017-01-19 2020-07-28 International Business Machines Corporation Load logical and shift guarded instruction
US10496292B2 (en) 2017-01-19 2019-12-03 International Business Machines Corporation Saving/restoring guarded storage controls in a virtualized environment
US10732858B2 (en) 2017-01-19 2020-08-04 International Business Machines Corporation Loading and storing controls regulating the operation of a guarded storage facility
US10452288B2 (en) 2017-01-19 2019-10-22 International Business Machines Corporation Identifying processor attributes based on detecting a guarded storage event
US10579377B2 (en) 2017-01-19 2020-03-03 International Business Machines Corporation Guarded storage event handling during transactional execution
GB2601466A (en) * 2020-02-10 2022-06-08 Xmos Ltd Rotating accumulator
US20230350640A1 (en) * 2022-05-02 2023-11-02 Qualcomm Incorporated System and method of rotating vector input

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US5991531A (en) 1997-02-24 1999-11-23 Samsung Electronics Co., Ltd. Scalable width vector processor architecture for efficient emulation
US6088782A (en) * 1997-07-10 2000-07-11 Motorola Inc. Method and apparatus for moving data in a parallel processor using source and destination vector registers
US6304956B1 (en) * 1999-03-25 2001-10-16 Rise Technology Company Using two barrel shifters to implement shift, rotate, rotate with carry, and shift double as specified by the X86 architecture
US7818356B2 (en) * 2001-10-29 2010-10-19 Intel Corporation Bitstream buffer manipulation with a SIMD merge instruction
GB2409059B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
GB2411978B (en) * 2004-03-10 2007-04-04 Advanced Risc Mach Ltd Inserting bits within a data word
US7395531B2 (en) * 2004-06-07 2008-07-01 International Business Machines Corporation Framework for efficient code generation using loop peeling for SIMD loop code with multiple misaligned statements
US7610472B2 (en) * 2005-06-05 2009-10-27 Apple Inc. Performing variable and/or bitwise shift operation for a shift instruction that does not provide a variable or bitwise shift option

Also Published As

Publication number Publication date
WO2009073787A1 (en) 2009-06-11
US20100228938A1 (en) 2010-09-09
US8407456B2 (en) 2013-03-26
US20130151821A1 (en) 2013-06-13
EP2232361A1 (en) 2010-09-29

Similar Documents

Publication Publication Date Title
KR20100101586A (ko) 데이터 처리에 있어서 레지스터 시프트 및 회전을 포함하는 방법 및 명령어 세트
CN111213125B (zh) 使用simd指令进行高效的直接卷积
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
JP5047944B2 (ja) データアクセス及び置換ユニット
US8271571B2 (en) Microprocessor
KR20140001910A (ko) 데이터 처리장치 및 방법
US11189004B2 (en) Task execution in a SIMD processing unit with parallel groups of processing lanes
US11681497B2 (en) Concurrent multi-bit adder
US7512771B2 (en) Mapping circuitry and method comprising first and second candidate output value producing units, an in-range value determining unit, and an output value selection unit
EP2602710A1 (en) Method of encoding register instruction fields
KR102560424B1 (ko) 와이드 데이터 타입들의 비교
US6938149B2 (en) Renaming apparatus and processor
US8700688B2 (en) Polynomial data processing operation
KR20230078131A (ko) 반복 배열 ntt를 이용한 동형 암호 연산 장치 및 방법
CN110147248B (zh) 利用amd gpu汇编指令加速的单精度矩阵乘优化方法和系统
JP4901891B2 (ja) 画像処理プロセッサ
CN104767544A (zh) 一种实现解扰解扩的方法和矢量运算器
JP2005107926A (ja) ベクトルプロセッサ、デジタルデータ処理方法およびデジタルデータ処理プログラム

Legal Events

Date Code Title Description
N234 Change of applicant [patent]: notification of change of applicant and registration of full transfer of right
N231 Notification of change of applicant
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid