KR102286101B1 - 데이터 처리장치 및 내로우잉 앤 라운딩 산술연산을 행하는 방법 - Google Patents

데이터 처리장치 및 내로우잉 앤 라운딩 산술연산을 행하는 방법 Download PDF

Info

Publication number
KR102286101B1
KR102286101B1 KR1020140088816A KR20140088816A KR102286101B1 KR 102286101 B1 KR102286101 B1 KR 102286101B1 KR 1020140088816 A KR1020140088816 A KR 1020140088816A KR 20140088816 A KR20140088816 A KR 20140088816A KR 102286101 B1 KR102286101 B1 KR 102286101B1
Authority
KR
South Korea
Prior art keywords
bit
value
stage
data element
rounding
Prior art date
Application number
KR1020140088816A
Other languages
English (en)
Other versions
KR20150015369A (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 KR20150015369A publication Critical patent/KR20150015369A/ko
Application granted granted Critical
Publication of KR102286101B1 publication Critical patent/KR102286101B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • G06F7/501Half or full adders, i.e. basic adder cells for one denomination
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • G06F7/501Half or full adders, i.e. basic adder cells for one denomination
    • G06F7/503Half or full adders, i.e. basic adder cells for one denomination using carry switching, i.e. the incoming carry being connected directly, or only via an inverter, to the carry output under control of a carry propagate signal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • G06F7/505Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
    • G06F7/506Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination with simultaneous carry generation for, or propagation over, two or more stages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

처리장치는, 적어도 하나의 W비트 데이터 요소를 각각 포함하는 2개의 오퍼랜드에 응답하여, X비트 값으로 라운드된 상기 2개의 오퍼랜드의 대응한 W비트 데이터 요소의 합이나 차이를 각각 나타내는 적어도 하나의 X비트 결과 데이터 요소를 포함하는 결과값을 생성하는, 내로우잉 앤 라운딩 산술연산을 지원한다(W>X). 상기 산술연산은, 다수의 N비트 가산(N<W)을 사용하여 구현되고, 이때 제1 스테이지의 N비트 가산으로부터의 캐리값들은, 라운딩 값을 상기 제1 스테이지 가산의 결과에 가산하기 위한 제2 스테이지의 N비트 가산으로 가산된다. 본 기술에서는, 내로우잉 앤 라운딩 산술연산을 행하는데 필요한 총 시간을 감소시킨다.

Description

데이터 처리장치 및 내로우잉 앤 라운딩 산술연산을 행하는 방법{DATA PROCESSING APPARATUS AND METHOD FOR PERFORMING A NARROWING-AND-ROUNDING ARITHMETIC OPERATION}
본 발명은 데이터 처리 분야에 관한 것이다. 보다 구체적으로, 본 발명은, 데이터 처리장치 및 내로우잉 앤 라운딩(narrowing-and-rounding) 산술연산을 행하는 방법에 관한 것이다.
데이터 처리장치는, 원래의 데이터값보다 적은 비트들을 갖는 데이터 값을 산출하기 위해 2개의 데이터 값을 가산 또는 감산하여 그 결과를 라운드하는, 내로우잉 앤 라운딩 산술연산을 행하여도 된다. 본 기술은 이러한 연산의 구현 속도를 향상시키려고 한다.
본 발명의 일 국면에서 본 데이터 처리장치는,
데이터를 처리하도록 구성된 처리회로; 및
적어도 하나의 W 비트 데이터 요소를 각각 포함하는 2개의 오퍼랜드를 식별하는 내로우잉 앤 라운딩(narrowing-and-rounding) 산술 명령어에 응답하여 내로우잉 앤 라운딩 산술연산을 행하기 위해 상기 처리회로를 제어하도록 구성된 제어회로를 구비하고, 상기 내로우잉 앤 라운딩 산술연산이 적어도 하나의 X비트 결과 데이터 요소를 포함한 결과값을 생성하고, 각 X 비트 결과 데이터 요소가 X비트값으로 라운드된 상기 2개의 오퍼랜드의 대응한 W 비트 데이터 요소의 합이나 차이를 나타내고, 여기서 W 및 X가 정수 및 W>X이고;
상기 제어회로는,
(a) 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산 또는 감산하여 각각의 N비트 중간값을 생성하기 위해 복수의 N비트의 제1 스테이지 가산을 행하고(여기서, W=J*N, J>1, N 및 J는 정수임);
(b) 대응한 제1 스테이지 가산에 의해 생성된 상기 N비트 중간값을, 상기 대응한 제1 스테이지 가산보다 하위의 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산하기 위한 앞의 제1 스테이지 가산의 캐리 출력을 나타내는 캐리값과 라운딩값을 가산하여서 상기 X비트 결과 데이터 요소의 N비트 라운드된 결과 부분으로, 각각 변환하는 하나 이상의 N비트의 제2 스테이지 가산을 행하고;
(c) 상기 하나 이상의 N비트의 제2 스테이지 가산 중 적어도 하나에 의해 생성된 상기 N비트 결과 부분으로부터 상기 X비트 결과 데이터 요소를 형성함으로써,
상기 결과값의 각 X비트 결과 데이터 요소를 생성하기 위해 상기 처리회로를 제어하도록 구성된다.
상기 내로우잉 앤 라운딩 산술연산은, 대응한 W비트값을 가산 또는 감산하고 그 결과를 X비트값으로 라운드하여서 결과값을 생성하고, 이때 W>X이다. 이 연산을 구현하는 일 방식은, W비트 가산 또는 감산을 행한 후, 라운딩 값을 상기 W비트 가산 또는 감산의 결과의 상위 X비트에 가산하기 위해 X비트 가산을 행할지도 모른다. 그렇지만, W는 커도 되고(예를 들면, 32 또는 64), 비교적 낮은 W 값(예를 들면, 16)에 대해서도, W비트 가산을 행하는 것은, 상기 가산의 각 연속적 비트는, 상기 앞의 비트가 산출되어 있고 상기 앞의 비트로부터 캐리가 있는지가 판정되어 있을 때까지 산출될 수 없기 때문에, 시간이 오래 걸릴 수 있다. 캐리들이 최하위 비트로부터 최상위 비트까지 일관하여 리플(ripple)하기도 하므로, W비트 가산을 행하는 것은 시간이 오래 걸릴 수 있다. 이 때문에, 이러한 상기 내로우잉 앤 라운딩 산술연산의 구현은 느릴 것이다.
이러한 문제를 해결하기 위해서, 본 기술에서는, 상기 2개의 오퍼랜드의 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산 또는 감산함으로써, 상기 W비트 가산을, 각각의 N비트 중간값을 각각 생성하는 다수의 N비트의 제1 스테이지 가산으로 분할한다. W비트 가산을 행했을 경우 상기 합의 각각의 N비트부 사이에서 지나갔었을 캐리값은, 제1 스테이지 가산에서 가산되지 않는다. 이것은, 또 다른 제1 스테이지 가산을 행하기 전에 상기 제1 스테이지 가산 중 하나의 캐리 출력을 기다리는 것이 필요 없으므로 서로 병렬로 행해질 수 있다는 것을 의미한다. 따라서, 상기 내로우잉 앤 라운딩 산술연산은 보다 빠르게 행해질 수 있다. 각각의 N비트의 제1 스테이지 가산간의 캐리 비트들이 상기 제1 스테이지 가산에 의해 가산되지 않음으로써, 상기 N비트 중간값은, 상기 대응한 W비트 데이터 요소의 참(true)의 합 또는 차이의 일부들을 나타내지 않는다. 그러나, 발명자들이 안 것은, 이것은, N비트 합 또는 차이를 X비트값으로 라운딩하는 것이 라운딩 값을 가산하여 행해질 수 있기 때문에 문제가 아니어서, 제2 스테이지의 가산이 이미 라운딩을 위해 필요하기도 한다는 것이다. 제1 스테이지 가산으로부터 임의의 캐리값은, 적어도 하나의 N비트 제2 스테이지 가산에서 상기 라운딩 값과 같은 시간에 가산될 수 있다. 각 제2 스테이지 가산은, 대응한 제1 스테이지 가산으로부터 N비트 중간값을, 라운딩 값과, 앞의 N비트의 제1 스테이지 가산의 캐리 출력을 나타내는 캐리값에, 가산하여도 된다. 그 후, X비트 결과 데이터 요소는, 하나 이상의 제2 스테이지 가산에 의해 생성된 N비트 결과부분으로 형성될 수 있다. 이렇게 하여, 상기 내로우잉 앤 라운딩 산술연산을 행하는 상기 처리회로를 통한 임계 타이밍 경로를 감소시킬 수 있다. W가 클 경우에도(예를 들면, 32 또는 64), 다수의 N비트의 제1 및 제2 스테이지 가산(예를 들면, 여기서 N=8)을 사용하여 역시 상기 가산을 행할 수 있어서, 병렬성을 향상시키므로 상기 연산을 행하는데 필요한 시간을 짧게 할 수 있다.
W비트 연산을 다수의 N비트 청크(chunk)로 분할하여서 제공된 성능 향상에 의해, 상기 처리회로가 단일 처리 사이클로 상기 내로우잉 앤 라운딩 산술연산을 행할 수도 있다. 이와 대조하여, 풀(full) W비트 가산이 행해졌었을 경우, 이것은 가능하게 하지 않을 수도 있다.
일반적으로, 입력 데이터 요소 사이즈 W는, 출력 데이터 요소 사이즈X보다 큰 어떠한 값이어도 된다. 그렇지만, 실제로, 데이터 요소 사이즈W는 2의 제곱(8,16,32,64 등)인 경우도 많고, W는 N의 2배수의 제곱이 일반적일 것이다(즉, J=2Z, 여기서 Z≥1).
또한, X는 W미만의 임의의 값을 가지기도 한다. 상기 연산의 구현은, X가 N의 배수인 경우도 보다 효율적일 수도 있다. 종종, 상기 결과는 원래의 데이터 요소의 사이즈의 절반, 즉 X=W/2의 데이터 요소로 라운드될 것이다. 일부의 상기 처리회로의 예들은, 상기 결과 데이터 요소의 임의의 사이즈로 라운드할 수도 있고, 다른 형태의 처리회로는, 특별한 사이즈, 예를 들면 W/2 비트 데이터 요소만으로의 라운딩에 제한될 수도 있다.
상기 내로우잉 앤 라운딩 산술 명령어는, 상기 내로우잉 앤 라운딩 가산 명령어와 내로우잉 앤 라운딩 감산 명령어를 포함하는 형태가 달라도 된다. 상기 가산 명령어에 응답하여, 상기 제어회로는, 대응한 W비트 데이터 요소의 N비트 부분을 가산하도록 상기 제1 스테이지 가산을 제어하고, 상기 감산 명령어에 응답하여 상기 N비트 부분은 상기 제1 스테이지 가산에서 감산되어도 된다.
상기 내로우잉 앤 라운딩 감산 연산을 구현하는 일 방식은, 2의 보수에 관해 내로우잉 앤 라운딩 가산 연산을 행하기 전에 상기 W비트 데이터 요소의 한쪽의 2의 보수를 형성하여도 되고, 정확히 다른쪽의 W비트 데이터 요소도 상기 내로우잉 앤 라운딩 가산 명령어의 경우와도 마찬가지다. 2의 보수는, W비트 데이터 요소의 모든 비트들을 반전하여 1을 가산하여서 형성되어도 된다. 그러나, 상기 2의 보수가 상기 제1 스테이지 가산전에 생성되는 경우에, 이것은 이 연산을 행하는데 필요한 시간을 길게 하는 별도의 가산을 필요로 한다. 그러므로, 내로우잉 앤 라운딩 감산 연산을 구현하는 보다 효율적인 방식은, 상기 N비트 부분의 한쪽을 상기 N비트 부분의 다른쪽을 반전하여서 얻어진 반전된 N비트 부분에 가산하는 각 제1 스테이지 가산으로 상기 N비트의 제1 스테이지 가산을 행하도록 상기 처리회로를 제어하고 나서, 내로우잉 앤 라운딩 가산 명령어에 대해 일어나지 않을 그 출력을 증분하도록 제1 스테이지 가산이나 제2 스테이지 가산 중 한쪽을 제어하는 방식이다. 상기 내로우잉 앤 라운딩 산술연산을 행하면서 상기 제1 또는 제2 스테이지 가산 중 한쪽의 출력을 증가시키면, 마치 1을 상기 내로우잉 앤 라운딩 산술연산을 행하기 전에 상기 반전된 N비트 부분에 가산한 것과 같은 효과를 달성한다. 이렇게 증가시키는 것과 상기 제1 또는 제2 스테이지 가산 중 한쪽을 조합하면 하나의 가산 사이클을 절약할 수 있다. 따라서, 상기 내로우잉 앤 라운딩 감산 명령어는, 입력값 중 하나가 반전되어 별도의 증분이 상기 N비트 가산 중 한쪽에서 가산되는 것을 제외하고는, 상기 내로우잉 앤 라운딩 가산 명령어와 거의 같은 방식으로 구현되어도 된다.
상기 내로우잉 앤 라운딩 산술연산은, 하나의 W비트 데이터 요소만을 각각 갖는 2개의 오퍼랜드에 적용되어도 된다. 그러나, 상기 내로우잉 앤 라운딩 산술연산은, 다수의 데이터 요소를 갖는 오퍼랜드에 적용되는 단일 명령어 다중 데이터(SIMD) 연산을 지원하는 시스템에서 사용되어도 된다. 예를 들면, 64비트 오퍼랜드는, 각 데이터 요소에 병렬 처리 레인이 적용된, 4개의 16비트 데이터 요소, 2개의 32비트 데이터 요소 또는 1개의 64비트 데이터 요소를 지원하기도 한다. 이 때문에, 상기 내로우잉 앤 라운딩 산술 명령어는 2개의 오퍼랜드 각각이 다수의 W 비트 데이터 요소를 갖는다는 것을 식별하는 경우, 상기 제어회로는 상기 결과값의 병렬의 다수의 X비트의 결과 데이터 요소를 생성하도록 상기 처리회로를 제어하여도 된다. 처리 레인마다, 복수의 N비트 제1 스테이지 가산과 적어도 하나의 N비트 제2 스테이지 가산은 대응한 X비트 결과 데이터 요소를 발생시키도록 행해져도 된다. 그 후, 상기 처리회로는, 각 처리의 레인에서 상기 가산에 의해 생성된 X비트 결과 데이터 요소로부터의 결과값을 형성하여도 된다.
상기 제어회로는, 데이터 요소의 수와 데이터 요소의 데이터 요소 사이즈W를, 상기 내로우잉 앤 라운딩 산술 명령어의 가변 파라미터에 따라 선택하여도 된다. 예를 들면, 상기 명령어는 그 데이터 요소 사이즈W를 식별하는 필드를 포함하여도 되고, 이로부터 상기 데이터 요소의 수가 추론되어도 되거나, 또는 반대로 추론되어도 된다.
상기 처리회로는, 복수의 N비트의 제1 가산부와 복수의 N비트의 제2 가산부를 구비하여도 된다. 상기 제어회로는, 제1 가산부와 제2 가산부를 사용하여, 상기 데이터 요소 사이즈나 데이터 요소의 수를 제어하는 것과 같은 상기 내로우잉 앤 라운딩 산술 명령어의 가변 파라미터에 따라, 각 X비트 결과 데이터 요소를 생성하도록 제어하여도 된다. 예를 들면, 각각의 데이터 요소 사이즈마다, 2개의 입력 오퍼랜드의 각각의 데이터 요소를 처리하는 하나 이상의 처리 레인을 제공하도록 대응한 N비트 가산부의 구성이어도 된다.
X비트 결과 데이터 요소마다, 상기 처리회로는, W/N 제1 스테이지 가산과 제1 스테이지 가산의 X/N에 대응한 X/N 제2 스테이지 가산을 행하여도 된다. 일반적으로, 상기 X/N 제2 스테이지 가산은, 원래의 W비트 데이터 요소의 X/N최상위 부분을 가산하는 제1 스테이지 가산에 대응한다. 그 후, 상기 X비트 결과 데이터 요소는, X/N 제2 스테이지 가산에 의해 생성된 N비트 결과 부분으로부터 형성될 수 있다. 각기 제1 또는 제2 스테이지 가산은 각각의 N비트 가산부에 의해 행해져도 된다. 그 회로가 상이한 데이터 요소 사이즈를 지원하기도 하므로, 특정한 내로우잉 앤 라운딩 산술연산에 반드시 상기 가산부가 필요로 하지 않아도 된다. 특히, X비트 결과에 기여하지 않는 제2 가산부가 일부 있기도 하다. 이러한 제2 가산부를 에너지 절감에 사용하지 않아도 된다. 이와는 달리, 제2 가산부마다 제어 관점에서 그 출력이 X비트 결과 데이터 요소를 형성하는데 사용되지 않은 경우에도 어떻게 해서든 가산을 행하는 것이 보다 간단하기도 하다.
각 W비트 데이터 요소는 W비트[W-1:0]를 포함하고, 각 X비트 결과 데이터 요소는 X비트[X-1:0]를 포함하여도 된다. [R:S]표시는, 비트 위치 R에서의 최상위 비트로부터 비트 위치 S에서의 최하위 비트까지 연장되는 비트의 그룹을 나타낸다. 주어진 처리 레인에 대한 W/N 제1 스테이지 가산 및 X/N 제2 스테이지 가산은,
상기 W/N 제1 스테이지 가산의 i번째 제1 스테이지 가산은, i번째 N비트 중간값을 생성하기 위해서 상기 대응한 W비트 데이터 요소의 비트[a+N-1:a]를 가산하고(여기서, 0≤i≤(W/N-1), a=i*N);
상기 X/N 제2 스테이지 가산의 j번째 제2 스테이지 가산은, X비트 결과 데이터 요소의 비트[c+N-1:c]를 포함하는 N비트 결과 부분을 생성하기 위해서 상기 j번째 N비트 중간값을, 상기 라운딩 값과 (j-1)번째 제1 스테이지 가산의 캐리 출력을 나타내는 캐리값에 가산하도록(여기서, (W-X)/N≤j≤W/N-1, c=j*N),
행해져도 된다. 여기서, 상기 카운트값 i와 j는, 상기 결과값의 대응한 결과 N비트 데이터 요소를 생성하기 위해 상기 2개의 오퍼랜드의 대응한 W비트 데이터 요소에 적용된 단일 처리 레인에 대해 행해진 가산에 의해 카운트한다. 그 2개의 오퍼랜드가 각각 하나보다 많은 데이터 요소를 갖는 경우, W비트 데이터 요소의 쌍마다 이들 가산이 반복될 것이다. 여기서, 처리 레인마다, i와 j는 W/N-1까지 카운트되고 나서 다음 레인에 대해서는 다시 0에서 시작한다.
상술한 것처럼, 제1 스테이지 가산은 N비트 청크들로 분할되고, 캐리들은 각각의 제1 스테이지 가산간에 통과되지 않고 대신에 제2 스테이지 가산에서 가산된다. 이에 따라 상기 N비트의 제1 스테이지 가산을 병렬로 행할 수 있어 연산의 속도를 향상시킬 수 있다. 그렇지만, 고차(higher) 제1 스테이지 가산의 캐리어들이 저차(lower) 제1 스테이지 가산의 결과에도 의존하므로, N비트의 제1 스테이지 가산의 일부의 캐리값을 판정하는데 여전히 시간이 약간 걸릴 수 있다. 어떤 값의 최하위 끝에서 최상위 끝까지 항상 캐리들을 통해 리플하여서 캐리를 판정하는 경우, 이에 따라 시간이 오래 걸리기도 하여, 단일 처리 사이클에서 상기 내로우잉 앤 라운딩 연산을 행하기 어렵게 한다.
따라서, 캐리 판정의 속도를 높이기 위해서, 상기 처리장치는, 상기 제2 스테이지 가산에서 가산될 캐리값을 판정하도록 구성된 캐리 네트워크를 가질 수 있다. 적어도 하나의 제2 스테이지 가산에 대해서는, 상기 캐리 네트워크는, 앞의 제1 스테이지 가산보다 초기의 제1 스테이지 가산(초기의 제1 스테이지 가산이 앞의 제1 스테이지 가산보다 보다 적은 W비트 데이터 요소의 유효부분을 가산함)에 의한 캐리 출력으로부터 캐리값을 공급하기 위한 캐리 전송 경로를 갖기도 한다. 상기 캐리 전송 경로에 의해, 캐리가 상기 앞의 제1 스테이지 가산을 일관하여 리플할 필요가 없도록, 캐리값들은 상기 앞의 제1 스테이지 가산을 우회할 수 있다. 이에 따라 캐리 전파 지연을 감소시킨다. 따라서, 제2 스테이지 가산으로 가산된 캐리값이 상기 앞의 제1 스테이지 가산의 캐리 출력을 나타내었지만, 대신에 상기 캐리 네트워크를 사용하여 그 캐리값을 예측하기도 하므로 상기 앞의 제1 스테이지 가산의 실제의 캐리 출력일 필요는 없다.
캐리 네트워크는, 상기 적어도 하나의 제2 스테이지 가산에 대해서, 캐리 입력값으로서, 앞의 제1 스테이지 가산의 캐리 출력을 공급할 것인지 캐리 전송 경로상에서 전송되고 있는 초기의 제1 스테이지 가산의 캐리 출력을 공급할 것인지를 선택하는 선택회로를 가져도 된다. 캐리 네트워크는, 앞의 제1 스테이지 가산의 캐리 출력이 제1 스테이지 가산의 캐리 출력에 좌우되고, 제1 스테이지 가산의 캐리 출력과 같은 값을 갖는다고 예상되는지의 여부를 예측할 수도 있다. 예측할 수도 있는 경우, 상기 초기의 제1 스테이지 가산의 캐리 출력은 제2 스테이지 가산에 전송될 수 있고, 그렇지 않은 경우는, 앞의 제1 스테이지 가산의 캐리 출력이 선택되어도 된다. 예를 들면, 앞의 제1 스테이지 가산의 캐리 출력은, 앞의 제1 스테이지 가산으로 가산된 값들의 합의 모든 비트 값들이 1(가산되는 값들의 배타적 OR을 행하여서 결정될 수 있음)이면 상기 초기의 제1 스테이지 가산의 캐리 출력에 좌우되고, 상기 초기의 제1 스테이지 가산의 캐리 출력과 같은 값을 갖는다. 모든 합 비트값들이 1이면, 상기 앞의 제1 스테이지 가산에 입력된 어떠한 캐리도 동일한 비트값의 캐리 출력을 초래하여서, 상기 앞의 제1 스테이지 가산을 일관하여 상기 캐리를 리플하지 않고 상기 초기의 제1 스테이지 가산의 캐리 출력을 제2 스테이지 가산에 전송하여서 시간이 절약될 수 있다.
동일한 W비트 처리 레인내에서 연속적인 제1 스테이지 가산마다 유사한 캐리 예측을 행함으로써, 상기 제 1 스테이지 가산의 캐리 출력이, 입력되는 한쪽의 제1 스테이지 가산으로부터 다른쪽의 제1 스테이지 가산에 출력된 캐리를 필요로 하지 않고 서로 병렬로 행해진 다수의 N비트 가산에 의거하여 예측될 수 있다. 캐리 값들은, 수개의 가산부를 우회하도록 전송될 수 있다. 이것은, 상기 처리회로를 통한 임계경로가, 하나의 N비트의 제1 스테이지 가산과 하나의 N비트 제2 스테이지 가산으로 감소될 수 있다는 것을 의미하고, 이때의 필요한 경우 다수의 제1 또는 제2 스테이지 가산은 서로 병렬로 행해진다. 이 때문에, 상기 캐리 네트워크에 의해, 상기 연산을 가속할 수 있고, 상기 내로우잉 앤 라운딩 산술연산을 행하는데 필요한 시간을 짧게 한다.
상기 라운딩 값은 다양한 방식으로 생성되어도 된다. 일반적으로, X비트 결과 데이터 요소를, 상기 대응한 W비트 데이터 요소의 합이나 차이에 해당한 W비트 값에 최근접 X비트 값과 같게 하는 값을 갖도록(이 W비트 값은 실제로는 상기 처리회로에 의해 산출되지 않음), 상기 라운딩 값을 생성하여도 된다. 그 합이나 차이가 2개의 X비트 데이터 값 사이의 중간지점에 있는 경우, 여러 가지의 라운딩 방식을 사용하여 올릴 것인가 잘라버릴 것인가를 판정하여도 된다. 예를 들면, 같으면, 항상 올려질 수 있거나, 제로로부터 떨어져서 라운드될 수 있었거나, 필요에 따라 최근접 홀수값이나 짝수값으로 라운드될 수 있었다.
같은 경우 자리올림하는 최근접 X비트 값으로 라운딩하기 위해서는, 이를 구현하는 간단한 방식은, 최근접 X비트 값에서의 대응한 유의(significance)의 비트를 갖지 않는 W비트 값 합이나 차이의 최상위 비트("최상위 배제 비트"라고 말함)와 같은 비트 값을 갖는 라운딩 값을 가산하는 방식이다. 상기 2개의 W비트 데이터 요소의 가감산으로 W비트 합이나 차이값[W-1:0]을 발생시킬 경우, 상기 최상위 배제 비트가 비트[W-X-1]이다. 상기 W비트 합이나 차이값은 상기 W비트 가산이 실제로 몇몇의 N비트의 제1 스테이지 가산으로 분할되기 때문에 실제로는 생성되지 않지만, 상기 처리회로는, W비트 가산을 실제로 행하였을 경우 최상위 배제 비트의 값이 무엇인지를 판정함에 따라서, 그 라운딩 비트를 설정할 수 있다.
처리 레인마다, 그 레인에서 최하위 제2 스테이지 가산을 위한 라운딩 비트는, 앞의 제1 스테이지 가산 결과에 의거하여 판정되어도 된다. 상기 합이나 차이의 최상위 배제 비트의 값이 판정되도록 상기 N비트의 중간값과 이들 제1 스테이지 가산의 캐리 출력을 가산하기 위해 별도의 제2 스테이지 가산이 행해지는 것이 가능할 것이다. 그러나, 이것은, 최상위 배제 비트가 1인가 0인가를 판정하기 위해 몇몇의 제2 스테이지 가산기를 통해 리플되는 캐리들을 필요로 할 수도 있기 때문에 처리 시간을 길게할 수도 있다. 이 때문에, 더 빨리 하기 위해서, 상기 라운딩 값은, 상기 중간값과, 최하위 제2 스테이지 가산에 대응한 제1 스테이지 가산보다 하위의 N비트 부분을 가산하는 제1 스테이지 가산의 캐리 출력으로부터 직접 판정되어도 된다. 이에 따라 제2 스테이지 가산을 따라 캐리 아웃 대 캐리 인(carry-out to carry-in) 경로에 대해 어떠한 필요도 없어서, 상기 연산을 보다 빨리 행할 수 있다.
X가 N보다 큰 경우, 다수의 제2 스테이지 가산이 같은 처리 레인내에서 필요할 수도 있다. 최하위 끝 비트 부분보다 상위인 X비트 결과 데이터 요소의 N비트 부분을 생성하기 위한 상위 제2 스테이지 가산에 대해서는, 라운딩 값을 가산할 필요가 없을지도 모른다(통상, 라운딩 값은, 상기 결과값의 최하위 끝에서만 가산되고 나서, 캐리들은 상기 결과 값의 상위 끝까지 리플할 수도 있다). 그러나, 이 경우에, 제2 스테이지 가산은, N비트보다 많은 값들을 가산하는 것이 효율적이고, 상기 캐리들은 처리시간을 길게 할 것이다. 성능을 향상시키기 위해서는, 제2 스테이지 가산이 N비트 부분으로 분리된다. 상위 제2 스테이지 가산용 라운딩 값은, 라운딩 값이 최하위 제2 스테이지 가산으로 가산되지 않았을 경우 일어나지 않았었을 상위 제2 스테이지 가산까지, 최하위 제2 스테이지 가산에서 가산된 라운딩 값이 캐리를 전파시킬지의 여부를 나타내는 값을 사용하여 생성된다. 따라서, 상기 처리회로는, 이러한 캐리가 일어날 것인지를 판정하여, 이에 따라, 일어날 경우, 제2 스테이지 가산의 상위 N비트 청크의 라운딩 값들을 설정하여도 된다. 상기 상위 제2 스테이지 가산용 라운딩 값은, 상기 중간값과, 상기 최하위 제2 스테이지 가산으로부터 상기 상위 제2 스테이지 가산으로 실제로 상기 캐리를 전파시키지 않고 적어도 하나의 제1 스테이지 가산의 캐리 출력에 의거하여, 직접 판정되어도 된다. 제2 스테이지 가산을 따라 이들 캐리 아웃 대 캐리 인 경로를 제거하면 성능을 향상시킬 수 있다.
본 발명의 다른 국면에서 본 데이터 처리장치는,
데이터를 처리하는 처리수단; 및
적어도 하나의 W 비트 데이터 요소를 각각 포함하는 2개의 오퍼랜드를 식별하는 내로우잉 앤 라운딩 산술 명령어에 응답하여 내로우잉 앤 라운딩 산술연산을 행하기 위해 상기 처리수단을 제어하도록 구성된 제어수단을 구비하고, 상기 내로우잉 앤 라운딩 산술연산이 적어도 하나의 X비트 결과 데이터 요소를 포함한 결과값을 생성하고, 각 X 비트 결과 데이터 요소가 X비트값으로 라운드된 상기 2개의 오퍼랜드의 대응한 W 비트 데이터 요소의 합이나 차이를 나타내고, 여기서 W 및 X가 정수 및 W>X이고;
상기 제어수단은,
(a) 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산 또는 감산하여 각각의 N비트 중간값을 생성하기 위해 복수의 N비트의 제1 스테이지 가산을 행하고(여기서, W=J*N, J>1, N 및 J는 정수임);
(b) 대응한 제1 스테이지 가산에 의해 생성된 상기 N비트 중간값을, 상기 대응한 제1 스테이지 가산보다 하위의 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산하기 위한 앞의 제1 스테이지 가산의 캐리 출력을 나타내는 캐리값과 라운딩값을 가산하여서 상기 X비트 결과 데이터 요소의 N비트 라운드된 결과 부분으로, 각각 변환하는 하나 이상의 N비트의 제2 스테이지 가산을 행하고;
(c) 상기 하나 이상의 N비트의 제2 스테이지 가산 중 적어도 하나에 의해 생성된 상기 N비트 결과 부분으로부터 상기 X비트 결과 데이터 요소를 형성함으로써,
상기 결과값의 각 X비트 결과 데이터 요소를 생성하기 위해 상기 처리수단을 제어하도록 구성된다.
본 발명의 또 다른 국면에서 본 데이터 처리장치의 데이터 처리방법은,
처리수단을 사용하여, 데이터를 처리하는 처리단계와,
제어수단을 사용하여, 적어도 하나의 W 비트 데이터 요소를 각각 포함하는 2개의 오퍼랜드를 식별하는 내로우잉 앤 라운딩 산술 명령어에 응답하여, 적어도 하나의 X비트 결과 데이터 요소를 포함한 결과값을 생성하기 위해 내로우잉 앤 라운딩 연산을 행하도록 상기 처리수단을 제어하는 제어단계를 포함하되, 각 X비트 결과 데이터 요소가 X비트값으로 라운드된 상기 2개의 오퍼랜드의 대응한 W 비트 데이터 요소의 합이나 차이를 나타내고, 여기서 W 및 X가 정수 및 W>X이고;
상기 제어단계는, 상기 제어수단을 사용하여,
(a) 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산 또는 감산하여 각각의 N비트 중간값을 생성하기 위해 복수의 N비트의 제1 스테이지 가산을 행하고(여기서, W=J*N, J>1, N 및 J는 정수임);
(b) 대응한 제1 스테이지 가산에 의해 생성된 상기 N비트 중간값을, 상기 대응한 제1 스테이지 가산보다 하위의 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산하기 위한 앞의 제1 스테이지 가산의 캐리 출력을 나타내는 캐리값과 라운딩값을 가산하여서 상기 X비트 결과 데이터 요소의 N비트 라운드된 결과 부분으로, 각각 변환하는 하나 이상의 N비트의 제2 스테이지 가산을 행하고;
(c) 상기 하나 이상의 N비트의 제2 스테이지 가산 중 적어도 하나에 의해 생성된 상기 N비트 결과 부분으로부터 상기 X비트 결과 데이터 요소를 형성함으로써,
상기 결과값의 각 X비트 결과 데이터 요소를 생성하기 위해 상기 처리수단을 제어한다.
본 발명의 상기 내용, 및 다른 목적들, 특징들 및 이점들은, 첨부도면과 관련지어 읽혀지는 아래의 상세한 예시적 실시예들의 설명으로부터 명백할 것이다.
도 1은 데이터 처리장치의 일부를 개략적으로 나타내고,
도 2는 내로우잉 앤 라운딩 산술연산을 개략적으로 나타내고,
도 3은 내로우잉 앤 라운딩 산술연산의 가능한 구현을 나타내고,
도 4는 제1 스테이지 가산에 의한 캐리값이 제2 스테이지 가산에서 입력되어 라운드하는 내로우잉 앤 라운딩 산술연산의 구현을 나타내고,
도 5는 두 쌍의 16비트 데이터 요소에 관해 동시 내로우잉 앤 라운딩 산술연산을 행하는 회로를 나타내고,
도 6은 한 쌍의 32비트 데이터 요소에 관해 행해진 내로우잉 앤 라운딩 산술연산의 가능한 구현을 나타내고,
도 7은 두 쌍의 16비트 데이터 요소나 한 쌍의 32비트 데이터 요소에 관해 내로우잉 앤 라운딩 산술연산을 행하는 처리회로의 일부를 나타내고,
도 8은 네 쌍의 16비트 데이터 요소, 두 쌍의 32비트 데이터 요소, 또는 한 쌍의 64비트 데이터 요소에 관해 내로우잉 앤 라운딩 연산을 행하는 회로를 나타내고,
도 9는 내로우잉 앤 라운딩 산술연산을 행하는 방법을 나타낸다.
도 1은 데이터를 처리하는 데이터 처리장치(2)의 일부를 개략적으로 나타낸다. 이 데이터 처리장치(2)는, 하나 이상의 데이터 요소를 포함하는 오퍼랜드들에 관해 SIMD 처리연산을 행하는 단일 명령어 다중 데이터(SIMD) 처리부(6)를 구비한 프로세서(4)를 갖는다. SIMD 명령어 디코더(8)는, SIMD 명령어를 디코딩하고 이 명령어에 응답하여 SIMD 처리부(6)가 SIMD 연산을 행하게 한다. 일 예시에서, 상기 SIMD 디코더(8)는, 논(non) SIMD 연산을 행하는 논 SIMD 명령어도 디코딩하는 조합 디코더이어도 된다. 또는, 별도의 논 SIMD 디코더도 설치할 수 있다. 또한, 상기 데이터 처리장치(2)는, 데이터 값을 기억하는 레지스터(10)를 갖는다. 명령어에 응답하여, 상기 처리회로(4)는, 오퍼랜드들을 판독하여 레지스터(10)로부터 처리되어도 되고, 결과값을 상기 레지스터(10)에 기억하여도 된다. 또한, 상기 데이터 처리장치(2)는, 간결함을 위해 도 1에 나타내지 않은 다수의 다른 부품을 구비할 수도 있다는 것을 알 것이다.
도 2는 각각 4개의 데이터 요소 a0-a3,b0-b3을 포함하는 2개의 오퍼랜드 a, b에 관해 행해진 내로우잉 앤 라운딩 산술연산을 개략적으로 나타낸다. 각 데이터 요소는 W비트를 갖는다. 그 내로우잉 앤 라운딩 산술연산에서는, 상기 오퍼랜드 a,b의 대응한 데이터 요소를 가산 또는 감산하여 중간 데이터 값 c의 각 데이터 요소에 있어서 합 또는 차이값a±b를 발생시킨다. 그리고, 그 중간 데이터 값 c의 각 데이터 요소는, 결과값d에서 X비트 값으로 라운드된다. 끝으로, 값d의 각 데이터 요소내에서 X비트 부분은, 함께 모여있고 제2 결과값 e의 인접한 부분에 놓여 있다. 도 2에서 d에서 e까지의 모으는 단계는 선택사항이고, 그 밖의 예들에서는 상기 내로우잉 앤 라운딩 산술연산의 결과가 결과값 d이어도 된다.
도 2는 내로우잉 앤 라운딩 산술연산의 수학적 연산을 나타낸다. 실제로, 상기 처리회로(4)는, 실제로는 이들의 정확한 수학적 연산을 행하지 못하기도 하고, 동일한 결과값 d 또는 e를 다른 방식으로 생성하는 것이 보다 효율적일 수도 있다. 도 3은 한 쌍의 16비트 요소에 관해 내로우잉 앤 라운딩 산술연산을 행하는 회로의 일례를 나타낸다. 도 3의 회로는, 도 2에 나타낸 처리 레인 중 한쪽에서의 처리에 해당한다. 도 3에 나타낸 것처럼, 제1의 16비트 가산기(20)는, 2개의 16비트 데이터 요소 a[15:0]와 b[15:0]를 가산 또는 감산한다. 내로우잉 앤 라운딩 감산이 행해질 경우, 상기 b입력이 반전되고, 그 제1의 16비트 가산기(20)의 캐리 입력에 연결된 값 sub는 상기 오퍼랜드b의 2의 보수를 효과적으로 형성하도록 1로 설정된다. 가산이 행해질 경우는, sub가 0으로 설정된다. a와 b가 가산되거나 감산되는지에 상관 없이, 상기 가산기(20)는 16비트 값 s[15:0]를 출력한다. 그 후, 제2의 8비트 가산기(22)는, 첫 번째 합의 상위 8비트 s[15:8]를 받아들이고, 상기 제1의 가산기(20)의 배제 부분의 최상위 비트에 해당하는 라운딩 값s[7]를 가산한다. 그리고, 상기 라운딩 값과 상기 16비트 합의 논 배제부s[15:8]의 합은, 8비트 라운드된 결과값r[7:0]로서 출력된다.
따라서, 도 3에서는, 상기 내로우잉 앤 라운딩 연산이, 도 2에 나타낸 것처럼 동일한 수학적 연산을 사용하여 행해진다. 그렇지만, 상기 가산기(20)를 사용하여 16비트 가산을 행하면, 앞의 비트로부터 캐리가 전파될 필요가 있는 경우에는, 각기 연속적인 가산의 비트가 가산되기 전에 이용 가능할 앞의 비트의 결과를 대기해야 한다. 따라서, 도 3에 나타낸 회로는, 먼저, 가산기(20)로 16비트 가산을 행해야 하고, 그 후에 일단 16비트 가산이 완료되면 가산기(22)로 또 다른 8비트 가산을 행할 필요가 있기 때문에, 24비트의 임계경로가 효과적이다.
도 3에 나타낸 회로는, 제1의 16비트 가산기(20)가 도 4에 도시된 것처럼 2개의 8비트의 제1 스테이지 가산기(30-0,30-1)로 분할될 수 있다는 것을 보임으로써 가속될 수 있다. 이것이 의미하는 것은, s'[15:8]로 나타낸 초기의 합의 상위 8비트가, 하위 8비트 s[7:0]와 같은 시간에 이용 가능하다는 것이다. 그러나, 하위 가산기(30-0)의 캐리 아웃 비트c[8]는, 아직 상위 8비트 s'[15:8]에 가산되지 않고 있어서, 그 중간값 s'[15:8]은 a[15:0]와 b[15:0]의 참의 합의 상위 8비트를 나타내지는 않는다. 그러나, 이것은, 8비트 가산기(32)로도 라운딩 가산을 행할 필요가 있고 그 가산기(32)를 사용하여 그 라운딩 값s[7]와 같은 시간에 캐리 비트c[8]를 가산할 수 있기 때문에 문제가 안 된다. 이 때문에, 제2 스테이지 가산기(32)는, 중간값 s'[15:8], 라운딩 값s[7] 및 캐리값c[8]를 가산하여 최종의 라운드된 결과r[7:0]을 형성한다. 따라서, 상기 임계경로는, 제1 스테이지 가산이 서로 병렬로 행해지는 2개의 8비트 청크(30-0,30-1)로 분할되어 있기 때문에 24비트에서 16비트로 감소되고, 그래서 상기 임계경로는 하나의 8비트의 제1 스테이지 가산과 하나의 8비트의 제2 스테이지 가산이다. 상기 캐리 비트들을 제1 스테이지 대신에 제2 스테이지에서 가산함으로써, 전체 처리시간이 짧아질 수 있다.
도 5에 나타낸 것처럼, 도 4에 도시된 상기 회로는, 8비트 데이터 요소가 2개인 결과값을 생성하기 위해 상기 내로우잉 앤 라운딩 산술연산을 두 쌍의 16비트 데이터 요소에 관해 병렬로 행하도록 이중으로 될 수 있다. 각 처리 레인내에서의 연산은, 도 4에 나타낸 것과 같다.
도 6에 나타낸 것처럼, 상기 내로우잉 앤 라운딩 산술연산은, 16비트 결과 데이터 요소를 생성하기 위해 한 쌍의 32비트 데이터 요소에 관해 행해져도 된다. 도 6은, 각 8비트 가산기를, 16비트 가산기(각 16비트 가산기는, 한쪽의 8비트 가산기의 캐리 출력이 다른쪽의 8비트 가산기의 캐리 입력에 연결된 2개의 8비트 가산기로 형성됨)로 대체한 것 이외는 도 4와 같다. 그렇지만, 이것은, 상기 임계경로가, 긴 2개의 16비트 가산기(또는 4개의 8비트 가산기)를 횡단하는 것을 의미하고, 단일 처리 사이클에서 상기 연산을 행할 수 없다는 것을 의미하기도 한다.
그러므로, 상기 32비트의 내로우잉 앤 라운딩 연산은 도 7에 나타낸 것과 같은 회로를 제공함으로써 가속될 수 있다. 도 7에 나타낸 상기 SIMD 처리부(6)의 일부는, 두 쌍의 16비트 데이터 요소 a[31:16], b[31:16], 및 a[15:0], b[15:0], 또는 한 쌍의 32비트 데이터 요소 a[31:0], b[31:0]에 관해 내로우잉 앤 라운딩 산술연산을 행하는데 사용될 수 있다. 제어신호nrw8은, 데이터 요소 사이즈를 제어하고, 그 데이터 요소 사이즈를 식별하는 내로우잉 앤 라운딩 산술 명령어의 파라미터에 의거하여 설정된다. 그 데이터 요소 사이즈 W=16(즉, 16비트에서 8비트로의 내로우잉)이면, 제어신호nrw8은 1로 설정되고, W=32(즉, 32비트에서 16비트로의 내로우잉)이면, 제어신호nrw8은 0으로 설정된다.
도 7에 나타낸 것처럼, 상기 SIMD 처리부(6)는, 입력 오퍼랜드 a,b의 대응한 8비트 부분을 각각 가산하여 각각의 8비트 중간값s[31:24], s[23:14], s[15:8], s[7:0]을 발생시키는 4개의 제1 스테이지 가산부(30-0∼30-3)를 갖는다. 몇몇의 8비트 제2 스테이지 가산기(32-1∼32-3)가 제공된다. 각 제2 스테이지 가산기(32-j)는, N비트 결과 부분r을 생성하기 위해, 상기 대응한 제1 스테이지 가산기(30-j)에서 생성된 중간값s, 라운딩 값rnd[j] 및 앞의 가산부(30-(j-1))의 캐리 출력co[j]를 나타내는 캐리값ci[j]를 가산하고, 이때 j=1, 2 또는 3이다. nrw8이 1이면(16비트에서 8비트로의 내로우잉), 그 결과값은, 제2 스테이지 가산부(32-3,32-1)에서 출력한 8비트 결과 부분 r[31:24], r[15:8]로 형성된다. nrw8이 0이면(32비트에서 16비트로의 내로우잉), 그 결과값은 제2 가산부(32-3,32-2)에서 출력한 결과 부분 r[31:24], r[23:16]으로 형성된다.
다중화기(38)는, 16비트 또는 32비트로의 내로우잉을 상기 제어신호nrw8에 의거하여 행할지를 제어한다. nrw8이 1이면(16비트에서 8비트로의 내로우잉), 도 3에 대해 위에 설명한 것처럼, 상기 sub값은, 감산하면(sub=1) 상기 오퍼랜드 중 하나의 2의 보수를 반영하기 위해 상기 결과가 증분되도록, 상기 제2 스테이지 가산기(32-2)의 캐리 입력에서 입력된다. 다른쪽 처리레인의 sub입력은, 상기 제1 스테이지 가산기(30-0)에서 가산된다. 따라서, 상기 값 sub는, 상기 제1 스테이지나 상기 제2 스테이지 중 한쪽에서 가산될 수 있다. 한편, 제어신호 nrw8이 0일 때(32비트에서 16비트로의 내로우잉), 캐리값은 제2 스테이지 가산기(32-2)의 캐리 입력 ci[2]에서 입력될 수 있다. 따라서, 상기 다중화기(38)는, 상기 SIMD 처리회로(6)가 하나의 32비트 처리 레인이나 2개의 독립적인 16비트 처리 레인으로서 기능하는지를 제어한다.
도 7에 도시된 SIMD 처리회로(6)는, 캐리 전송 경로(40-1,40-2)와 선택회로(42-1,42-2)로 이루어진 캐리 네트워크를 갖는다. 캐리 네트워크는, 하위 제1 스테이지 가산기를 통해 캐리들이 실제로 리플될 필요가 없이, 제1 스테이지 가산기(30-1, 30-2)의 캐리 출력 co[2], co[3]의 값들을 예측하여서 처리를 가속하기 위한 것이다. 최하위 제1 스테이지 가산부(30-0)의 캐리 출력 co[1]는, 캐리 입력ci[1]으로서 최하위 제2 스테이지 가산부(32-1)에 직접 입력된다. 또한, 최하위 제1 스테이지 가산부(30-0)의 캐리 출력 co[1]는, 전송 경로(40-1)를 거쳐 다음의 최상위 제2 스테이지 가산부(32-2)에 전송된다. 선택회로(42-1)는, 상기 다음의 최상위의 제2 스테이지 가산기(32-2)에의 캐리 입력 ci[2]가 상기 전송 경로(40-1)상에서 수신된 제1 스테이지 가산기(30-0)의 캐리 출력 co[1]와 같거나 상기 다음의 제1 스테이지 가산부(30-1)의 캐리 출력 co[2]와 같은지를 선택한다. 상기 선택회로(42-1)는, 가산기(30-1)에서 발생된 모두 8개의 출력 합 비트s[15:8]가 하이(high)인 것을 가리키는 제1 가산부(30-1)로부터 전파신호p[2]를 수신한다. 전파신호 p[2]는, 합값 s[15:8] 자체가 실제로 이용 가능하기 전에 생성될 수 있다. 예를 들면, 배타적 OR(XOR) 연산은, 상기 가산기(30-1)에 연관된 XOR 회로를 사용하여 a[15:8]와 b[15:8]에 관해 행해질 수 있고, p[2]는 XOR 연산 결과가 모두 1인 비트를 갖는 경우 1이고, 그렇지 않은 경우는 p[2]는 0이다. p[2]가 1인 경우, 이것은, 캐리가 제1 가산부(30-1)에 입력되었으면 그것의 캐리 출력 co[2]의 값은 캐리 입력과 같았을 것이라는 것을 의미한다. 그러므로, co[2]의 값은, 앞의 제1 스테이지 가산부(30-0)의 캐리 출력 co[1]으로부터 예측될 수 있었다. 따라서, p[2]가 1일 경우, 상기 앞의 캐리 출력 co[1]는 제2 스테이지 가산부(32-2)에 전송되고, 다음의 제1 스테이지 가산부(30-1)의 캐리 출력 co[2]가 생성되기를 기다릴 필요가 없다. 상기 선택회로(42-1)는, AND 게이트(43)와 OR 게이트(44)를 구비한다. 상기 AND게이트(43)는, 전파비트 p[2]의 값이 1일 경우만 캐리 출력 co[1]를 전송한다. OR게이트(44)는, 상기 가산기(30-1)의 캐리 출력 co[2]이나 AND 게이트(43)의 출력 중 어느 한쪽을 통과시킨다. 이 때문에, 상기 캐리 네트워크에 의해, 제2 스테이지 가산기(32-2)에의 캐리 입력 ci[2]는, 제1 스테이지 가산기(30-0, 30-1)에서 행한 8비트 가산 결과에 의거하여 이들 가산기 사이의 캐리를 통과시킬 필요없이 결정될 수 있다. 마찬가지로, 제1 스테이지 가산기 30-2는 가산기 30-1과 같은 방식으로 전파 비트 p[3]를 생성하고, 선택회로(42-2)는 제2 스테이지 가산기(32-3)의 캐리 입력 ci[3]가 제1 스테이지 가산기(30-2)의 캐리 출력 co[3] 이거나 전송 경로(40-2)를 거쳐 전송된 초기의 캐리 co[1] 또는 co[2]인지를 p[3]에 의거하여 판정한다.
따라서, 캐리 네트워크는 다음과 같이 캐리값 ci[1] 내지 ci[3]를 생성한다:
·ci[1] = co[1]
·ci[2] = nrw8 & sub | !nrw8 & co[2] | !nrw8 & p[2] & co[1]
·ci[3] = co[3] | p[3] & ci[2].
(여기서, &는 논리적 AND, |는 논리적 OR, !nrw8은 nrw8의 역수-즉, nrw8=0이면 !nrw8=1이고, nrw8=1이면 !nrw8=0이다).
제2 스테이지 가산기(32-1∼32-3)에 대한 라운딩 값 rnd[n]은 다음과 같이 결정된다:
·rnd[1] = nrw8 & r[7]
·rnd[2] = !nrw8 & r[15]
·rnd[3] = nrw8 & r[23] | !nrw8 & r[15] & ((s[23:17] == 7'h7f) & (ci[2] XOR s[16])
rnd[3]에 대해서는, 상기 식이 다음과 같이 이해될 수 있다:
"s[31:16]+ci[2]를 r[31:24]로 내로우잉하면, r[23]이 하이인 경우 rnd[3]을 하이로 설정하고;
그렇지 않으면, s[23:16]+ci[2]가 캐리를 일으키는 경우가 이미 캐리 가속 네트워크에 의해 커버된 것을 고려하여, s[31:0]를 r[31:16]로 내로우잉하면, rnd[2]가 비트 위치 r[24]에 캐리 아웃을 일으키는 경우만 rnd[3]을 하이로 설정한다".
16비트 또는 32비트 내로우잉 중 어느 한쪽에 대해서, 각 처리 레인내의 최하위 제2 스테이지 가산기가, 최상위 배제 비트(16비트를 8비트로 내로우(narrow)하기 위한 r[7], 32비트를 16비트로 내로우하기 위한 r[15])의 값에 대응한 라운딩 비트를 갖는 것이 효과적이다. 32비트 내로우잉일 경우에, 최하위 제2 스테이지 가산기 32-2에서 입력된 라운딩 값 rnd[2]는, 라운딩 값이 입력되지 않았던 경우 일어나지 않았을, 캐리를 상위 제2 스테이지 가산기 32-3을 따라 리플시킬지의 여부를 나타내는 라운딩 값을 수신하는 상위 제2 스테이지 가산기 32-3이 있다. 이는, 위에서 rnd[3]으로 나타내어져 있다.
상술한 것처럼, 상기 라운딩 값 rnd[1]∼rnd[3]은, 제2 스테이지 가산기(32-1, 32-2)에서 생성된 비트들 r[15],r[23]의 값에 좌우된다. 제2 스테이지 가산기(32-2, 32-3)로 그 이후의 가산을 행하기 전에 이들 비트가 이용 가능해지기를 기다리면, 처리를 지연시켜, 바람직하지 못하다. 따라서, 그 처리는, 중간값s와 아래의 식에 따라 제1 스테이지 가산기(30)에서 생성된 캐리 출력 co에 의거하여 r[15]와 r[23]의 값들을 예측하여서 한층 더 가속될 수 있다.
r[15] = s[15] XOR ((s[14:8] == 7'h7f)&co[1])
r[23] = s[23] XOR ((s[22:16] == 7'h7f)&ci[2]),
여기서, (s[14:8]=7'h7f) 및 (s[22:6]=7'h7f)는, s[14:8] 또는 s[22:6]의 모든 비트가 1일 경우 1이다.
이에 따라, 상기 제1 스테이지 또는 상기 제2 스테이지 중 어느 한쪽에서 8비트 가산기 사이의 어떠한 캐리 아웃 대 캐리 인 경로도 필요로 하지 않고, 상기 제1 스테이지 가산 결과에 의거하여 상기 라운딩 값 rnd 모두를 결정할 수 있다. 이에 따라, 합성 엔진이 처리 로직을 최적화할 수 있어서 최고 성능을 이룰 수 있다. 따라서, 32비트의 16비트에의 라운딩과 16비트의 8비트에의 라운딩 양쪽을 위해 도 7에 나타낸 회로를 통한 임계 타이밍 경로는, 2개의 8비트 가산기와, 도 6보다 훨씬 적은 약간의 추가적인 캐리 전송 회로를 통과하는 경로에 해당한다.
도 8은 64비트에서 32비트로의 내로우잉 앤 라운딩 산술연산이 지원되는 또 다른 실시예를 나타낸다. SIMD 처리회로(6)는, 각각, 4개의 16비트 데이터 요소, 2개의 32비트 데이터 요소 또는 1개의 64비트 데이터 요소를 구비할 수도 있는 2개의 64비트 오퍼랜드 a[63:0], b[63:0]를 수신한다. 2개의 제어신호 sel1, sel2를 사용하여 각각의 내로우잉의 형태를 선택한다. 도 8의 하부에 있는 표는, 내로우잉의 형태마다 제어신호 sel1, sel2의 값을 나타내고, 최종 결과값 n[31:0]이 제2 스테이지 가산기(32)의 출력으로부터 어떻게 형성되는지를 나타낸다. 따라서, 상기 SIMD 처리부(6)에서 지원한 다른 데이터 요소 구성이 몇 개가 있다. 일부의 다중화기(38)는, 가산부(30,32)가 동일한 처리 레인내에서 다른 부분을 처리하는지, 또는 다른 처리 레인에서 다른 데이터 요소에 관해 연산하는지를 제어하도록 구성된다. sub 값은, (데이터 요소 사이즈에 따라) 가산기 30-0, 32-2, 32-4, 32-6의 하나 이상의 가산기를 사용하여 각 처리 레인의 하단부에서 입력된다.
또한, 상기 처리부는, 전송경로(40-1∼40-6)와, 제2 스테이지 가산기(32-2∼32-7)에 입력되는 캐리값 ci[2]∼ci[7]의 결정을 가속하는 선택회로(42-1∼42-6)로 이루어진, 캐리 네트워크를 갖는다. 도 8에서, 일부의 선택회로(42-3, 42-5, 42-6)는, 일부의 전송 경로에 의해 캐리값은 일부의 가산부를 건너뛸 수 있기 때문에 도 7보다 복잡해져서, 이것이 가능한지를 판정하는 것은 조정 전파비트 p[n] 각각이 1과 같은 것이 필요하다. 상기 선택회로(42)와 다중화기(38)는 아래의 논리식에 따라 제2 스테이지 가산부(32)마다 캐리 입력들을 결정하기 위한 회로를 공동으로 제공한다:
· ci[1] = co[1]
· ci[2] = !sel1 & sub | sel1 & (co[2] | p[2] & co[1]).
· ci[3] = co[3] | p[3] & ci[2].
· ci[4] = !sel2 & sub | sel1 & (co[4] | p[4] & co[3] | p[4] & p[3] & ci[2])
· ci[5] = co[5] | p[5] & ci[4]
· ci[6] = !sel1 & sub | sel1 & (co[6] | p[6] & co[5] | p[6] & p[5] & ci[4])
· ci[7] = co[7] | sel1 & p[7] & (co[6] | p[6] & co[5]) |
!sel1 & p[7] & sub| sel1 & p[7]&p[6]&p[5] & ci[4].
초기의 내로우잉된 결과가 증분되는 경우 하이로 설정된 라운딩 값rnd[1]∼rnd[7]은, 다음식에 따라 결정된다:
· rnd[1] = nrw8 & r[7]
· rnd[2] = nrw16 & r[15]
· rnd[3] = nrw8 & r[23] | nrw16 & r[15] & ((s[23:17] == 7'h7f) & (ci[2] XOR s[16]))
· rnd[4] = nrw32 & r[31]
· rnd[5] = nrw8 & r[39] | nrw32 & r[31] & ((s[39:33] == 7'h7f) & (ci[4] XOR s[32]))
· rnd[6] = nrw16 & r[47] |
nrw32 & r[31] & ((s[39:33] == 7'h7f) & (ci[4] XOR s[32])) &
((s[47:41] == 7'h7f) & (ci[5] XOR s[40]))
· rnd[7] = nrw8 & r[55] |
nrw16 & r[47] & ((s[55:49] == 7'h7f) & (ci[6] XOR s[48])) |
nrw32 & r[31] & ((s[39:33] == 7'h7f) & (ci[4] XOR s[32])) &
((s[47:41] == 7'h7f) & (ci[5] XOR s[40])) &
((s[55:49] == 7'h7f) & (ci[6] XOR s[48])),
여기서, nrw8=!sel2 & !sel1, nrw16=!sel2 & sel1, 및 nrw32=sel2 & sel1이고, 이들은 "8비트로의 내로우(narrow)"(nrw8), "16비트로의 내로우"(nrw16), 및 "32비트로의 내로우"(nrw32) 각각에 대해 제어신호 sel1, sel2의 서로 다른 조합을 나타내고,
n={15,23,31,39,47,55,63}일 경우의 r[n]은, 다음과 같이 교체될 수 있는 것이 바람직하다:
· r[15] = s[15] XOR (s[14:8] == 7'h7f)&ci[1]
· r[23] = s[23] XOR (s[22:16] == 7'h7f)&ci[2]
· r[31] = s[31] XOR (s[30:24] == 7'h7f)&ci[3]
· r[39] = s[39] XOR (s[38:32] == 7'h7f)&ci[4]
· r[47] = s[47] XOR (s[46:40] == 7'h7f) & ci[5]
· r[55] = s[55] XOR (s[54:48] == 7'h7f) & ci[6]
· r[63] = s[63] XOR (s[62:55] == 7'h7f) & ci[7].
이렇게 하여 제2 스테이지 가산(32)에 대한 캐리값 ci[n]와 라운딩 값 rnd[n]를 결정함으로써, 이 방식에 의해, 내로우잉 앤 라운딩 가산 및 감산은 빠르게 완료될 수 있고, 이때 임계 경로는, 데이터 요소 사이즈가 64비트만큼 클 경우에도, 2개의 8비트 가산기 플러스 일부의 오버레이드 캐리 로직, 즉 16비트 가산만을 횡단한다. 이에 반해서, (도 3의 기술이 64비트까지 크기를 조정했을 경우와 같이) 상기 라운딩 값을 가산하기 위해 제1 스테이지 가산 후 32비트 가산에서 풀(full) 64비트 가산이 행해졌을 경우에, 상기 임계 경로는 훨씬 느린 96비트 가산일 것이다. 그 연산을, 서로 병렬로 행해질 수 있는 8비트 청크로 분할하여서, 상기 내로우잉 앤 라운딩 가산이나 감산 연산은, 단일 처리 사이클내에 맞출 수 있을 만큼 충분히 빨리 행해질 수 있다.
상기 제1 스테이지와 제2 스테이지에서 8비트 가산을 행하는 것이 필수적인 것은 아니다. 예를 들면, 64비트에서 32비트로의 내로우잉은, 일부의 프로세서가 1사이클에서 행하는 것이 가능할 수도 있는 16비트 가산을 사용하여 행해질 수 있었다. 그러나, 일반적으로, 보다 작은 가산기가 사용되는 경우 성능 향상이 최대일 것이다. 보다 일반적으로, 상기 내로우잉 앤 라운딩 연산은, N비트 가산기를 사용하여 하나 이상의 W비트 데이터 요소에 관해 행해져도 되고, 이때 N < W다.
마찬가지로, 상기 라운드된 결과가 원래의 W비트 데이터 요소로서 비트들의 수의 절반인 것이 필수적인 것은 아니다. 임의의 결과 데이터 요소 사이즈 X를 사용하여도 되고, 이때 X < W다. 그것은, 상기 결과가 특정한 수의 제2 스테이지 가산기의 풀 출력으로부터 형성되도록, X가 N의 배수인 경우에 가장 사용하기 좋을 수도 있다. 예를 들면, 64비트에서 16비트로의 내로우잉은, 도 8의 가산기(32-7,32-6)의 출력 r[63:48]이 최종 결과값 n[16:0]에서 16비트 데이터 요소를 생성하는데 사용되는 경우에 행해질 수 있었다.
도 9는 내로우잉 앤 라운딩 산술연산을 행하는 방법을 나타낸다. 단계 50에서는, 실행될 다음 명령어가 내로우잉 앤 라운딩 산술 명령어인지를 판정한다. 실행될 다음 명령어가 내로우잉 앤 라운딩 산술 명령어가 아닐 경우, 그 명령어는 또 다른 형태의 명령어이고, 그에 따라 처리된다. 단계 50에서 내로우잉 앤 라운딩 명령어일 경우, 단계 52에 진행되어, 상기 실행될 다음 명령어가 내로우잉 앤 라운딩 가산 명령어나 내로우잉 앤 라운딩 감산 명령어인지를 판정한다. 상기 실행될 다음 명령어가 내로우잉 앤 라운딩 가산 명령어일 경우, 단계 54에서는 상기 처리회로에의 sub 입력을 0으로 설정하고, 상기 실행될 다음 명령어가 내로우잉 앤 라운딩 감산 명령어인 경우, 단계 56에서는 제2 오퍼랜드 b를 반전하고, sub입력을 1로 설정한다.
단계 58에서는, 상기 처리회로(6)가, N비트의 제1 스테이지 가산부(30)를 사용하여 N비트의 제1 스테이지 가산을 행한다. 입력 오퍼랜드 a, b에서 데이터 요소의 수에 따라, 하나 이상의 처리의 레인들이 행해진다. 각 데이터 요소는 W 비트 [W-1:0]을 가져서, W/N의 제1 스테이지 가산은 각 처리 레인에서 행해진다. 각 처리 레인의 i번째 제1 스테이지 가산은, i번째 N비트 중간값을 생성하기 위해 대응한 W비트 데이터 요소의 비트[a+N-1:a]를 가산하고, 이때 0≤i ≤(W/N-1) 및 a=i*N이다.
단계 60에서는, 제2 스테이지 가산(32)용 캐리값들과 라운딩 값들이, 도 7 또는 도 8에 대해 상기 도시된 관계를 사용하여 제1 스테이지 가산(30) 결과에 의거하여 결정된다. 단계 62에서는, 적어도 하나의 N비트의 제2 스테이지 가산이, N비트 결과 부분 r을 생성하기 위해 상기 N비트의 제2 스테이지 가산부(32)에 의해 행해진다. 각 처리 레인내에서는, X/N 제2 스테이지 가산을 행하고, 여기서, X는 각 결과 데이터 요소에 포함될 비트의 수이다. 각 처리 레인의 j번째 제2 스테이지 가산은, X비트 결과 데이터 요소의 비트들[c+N-1:c]를 포함한 N비트 결과 부분을 생성하기 위해서, 상기 j번째 제1 스테이지 가산에 의해 생성된 j번째 N비트 중간값을, 상기 라운딩 값과, (j-1)번째 제1 스테이지 가산의 캐리 출력을 나타내는 캐리값에 가산하되, 이때 (W-X)/N≤j≤W/N-1 및 c=j*N이다.
단계 64에서는, 상기 결과값이, 제2 스테이지 가산의 N비트의 결과 부분으로부터 형성된다. SIMD 처리부(6)는, (도 2에서의 결과값d와 같은 결과값을 생성하기 위해) 결과값의 대응한 비트 위치에, 선택된 제2 스테이지 가산기의 출력을 배치해도 된다. 또는, SIMD 처리부(6)는, (도 2에서의 결과값e와 같은) 상기 결과값의 인접한 부분에 배치되도록, 상기 선택된 제2 스테이지 가산기(32)의 출력을 함께 모아도 된다. 도 8의 하부에 있는 표는, 제2 스테이지 가산기(32)의 출력이 최종 결과값n으로 매핑될 수 있는 모양의 일례를 나타낸다.
따라서, 본 기술에 의해 상기 내로우잉 앤 라운딩 산술연산을 효율적으로 구현함으로써, 처리 성능을 향상시킬 수 있다.
본 명세서에서는 본 발명의 예시적 실시예들을 첨부도면을 참조하여 상세히 기재하였지만, 본 발명은 상기 세세한 실시예들에 한정되지 않고, 당업자가 첨부된 청구항에 기재된 것과 같은 본 발명의 범위와 사상을 벗어나지 않고서 여러 가지로 변경 및 변형할 수 있다는 것을 알 것이다.

Claims (21)

  1. 데이터 처리장치로서,
    데이터를 처리하도록 구성된 처리회로; 및
    적어도 하나의 W 비트 데이터 요소를 각각 포함하는 2개의 오퍼랜드를 식별하는 내로우잉 앤 라운딩(narrowing-and-rounding) 산술 명령어에 응답하여 내로우잉 앤 라운딩 산술연산을 행하기 위해 상기 처리회로를 제어하도록 구성된 제어회로를 구비하고, 상기 내로우잉 앤 라운딩 산술연산이 적어도 하나의 X비트 결과 데이터 요소를 포함하는 결과값을 생성하고, 각 X 비트 결과 데이터 요소가 X비트값으로 라운드된 상기 2개의 오퍼랜드의 대응한 W 비트 데이터 요소의 합이나 차이를 나타내고, 여기서 W 및 X가 정수 및 W>X이고,
    상기 제어회로는,
    (a) 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산 또는 감산하여 각각의 N비트 중간값을 생성하기 위해 복수의 N비트의 제1 스테이지 가산을 행하고(여기서, W=J*N, J>1, N 및 J는 정수임),
    (b) 대응한 제1 스테이지 가산에 의해 생성된 상기 N비트 중간값을, 상기 대응한 제1 스테이지 가산보다 하위의 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산하기 위한 앞의 제1 스테이지 가산의 캐리 출력을 나타내는 캐리값과 라운딩값을 가산하여서 상기 X비트 결과 데이터 요소의 N비트 라운드된 결과 부분으로, 각각 변환하는 하나 이상의 N비트의 제2 스테이지 가산을 행하고,
    (c) 상기 하나 이상의 N비트의 제2 스테이지 가산 중 적어도 하나에 의해 생성된 상기 N비트 결과 부분으로부터 상기 X비트 결과 데이터 요소를 형성함으로써,
    상기 결과값의 각 X비트 결과 데이터 요소를 생성하기 위해 상기 처리회로를 제어하도록 구성된, 데이터 처리장치.
  2. 제 1 항에 있어서,
    상기 제어회로는, 상기 처리회로가 단일 처리 사이클에서 상기 내로우잉 앤 라운딩 산술연산을 행하게 제어하도록 구성된, 데이터 처리장치.
  3. 제 1 항에 있어서,
    상기 X=W/2인, 데이터 처리장치.
  4. 제 1 항에 있어서,
    상기 내로우잉 앤 라운딩 산술 명령어가, 내로우잉 앤 라운딩 가산 명령어와 내로우잉 앤 라운딩 감산 명령어를 포함하고,
    상기 내로우잉 앤 라운딩 가산 명령어에 응답하여, 상기 제어회로는, 상기 대응한 W비트 데이터 요소의 상기 N비트 부분을 가산하기 위해서 상기 제1 스테이지 가산을 제어하도록 구성되고,
    상기 내로우잉 앤 라운딩 감산 명령어에 응답하여, 상기 제어회로는, 상기 대응한 W비트 데이터 요소의 상기 N비트 부분을 감산하기 위해서 상기 제1 스테이지 가산을 제어하도록 구성되는, 데이터 처리장치.
  5. 제 4 항에 있어서,
    상기 내로우잉 앤 라운딩 감산 명령어에 응답하여, 상기 제어회로는,
    (a) 상기 N비트 부분의 한쪽을 상기 N비트 부분의 다른쪽을 반전하여서 얻어진 반전된 N비트 부분에 가산하는 각 제1 스테이지 가산으로 상기 복수의 제1 스테이지 가산을 행하도록 상기 처리회로를 제어하고,
    (b) 상기 복수의 제1 스테이지 가산 중 하나의 출력, 또는 상기 하나 이상의 제2 스테이지 가산 중 하나의 출력을, 증분하기 위해서 상기 처리회로를 제어하도록, 구성되는, 데이터 처리장치.
  6. 제 1 항에 있어서,
    복수의 W 비트 데이터 요소를 각각 포함하는 상기 2개의 오퍼랜드를 식별하는 상기 내로우잉 앤 라운딩 산술 명령어에 응답하여, 상기 제어회로는, 상기 결과값의 복수의 X비트의 결과 데이터 요소를 병렬로 생성하기 위해서 상기 처리회로를 제어하도록 구성되는, 데이터 처리장치.
  7. 제 6 항에 있어서,
    상기 제어회로는, 데이터 요소의 수와 상기 데이터 요소의 데이터 요소 사이즈W를, 상기 내로우잉 앤 라운딩 산술 명령어의 가변 파라미터에 따라 선택하도록 구성되는, 데이터 처리장치.
  8. 제 1 항에 있어서,
    상기 처리회로는, 상기 N비트의 제1 스테이지 가산을 행하는 복수의 N비트의 제1 가산부와, 상기 적어도 하나의 N비트의 제2 스테이지 가산을 행하는 복수의 N비트의 제2 가산부를 구비하는, 데이터 처리장치.
  9. 제 8 항에 있어서,
    상기 제어회로는, 제1 가산부와 제2 가산부를 사용하여, 상기 내로우잉 앤 라운딩 산술 명령어의 가변 파라미터에 따라, 각 X비트 결과 데이터 요소를 생성하게 제어하도록 구성되는, 데이터 처리장치.
  10. 제 1 항에 있어서,
    상기 제어회로는,
    (a) W/N 제1 스테이지 가산을 행하고,
    (b) 상기 W/N 제1 스테이지 가산의 X/N 제1 스테이지 가산에 대응한 X/N 제2 스테이지 가산을 행하고,
    (c) 상기 X/N 제2 스테이지 가산에 의해 생성된 N비트 결과 부분으로부터 상기 X비트 결과 데이터 요소를 형성함으로써,
    상기 결과값의 각 X비트 결과 데이터 요소를 생성하기 위해 상기 처리회로를 제어하도록 구성되는, 데이터 처리장치.
  11. 제 10 항에 있어서,
    각 W비트 데이터 요소는 W비트[W-1:0]를 포함하고, 각 X비트 결과 데이터 요소는 X비트[X-1:0]를 포함하고,
    상기 W/N 제1 스테이지 가산의 i번째 제1 스테이지 가산은, i번째 N비트 중간값을 생성하기 위해서 상기 대응한 W비트 데이터 요소의 비트[a+N-1:a]를 가산하고(여기서, 0≤i≤(W/N-1), a=i*N),
    상기 X/N 제2 스테이지 가산의 j번째 제2 스테이지 가산은, X비트 결과 데이터 요소의 비트[c+N-1:c]를 포함하는 N비트 결과 부분을 생성하기 위해서 상기 j번째 N비트 중간값을, 상기 라운딩 값과 (j-1)번째 제1 스테이지 가산의 캐리 출력을 나타내는 캐리값에 가산하는(여기서, (W-X)/N≤j≤W/N-1, c=j*N), 데이터 처리장치.
  12. 제 1 항에 있어서,
    상기 캐리값을 판정하도록 구성된 캐리 네트워크를 구비하고,
    적어도 하나의 제2 스테이지 가산에 대해서, 상기 캐리 네트워크는, 캐리값으로서, 상기 앞의 제1 스테이지 가산보다 하위의 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산하는 초기의 제1 스테이지 가산의 캐리 출력을 공급하기 위한 캐리 전송 경로를 포함하는, 데이터 처리장치.
  13. 제 12 항에 있어서,
    상기 캐리 네트워크는, 상기 캐리값으로서, 상기 앞의 제1 스테이지 가산의 캐리 출력을 공급할 것인지, 또는 상기 캐리 전송 경로상에서 전송된 상기 초기의 제1 스테이지 가산의 캐리 출력을 공급할 것인지를 선택하도록 구성된 선택회로를 구비하는, 데이터 처리장치.
  14. 제 13 항에 있어서,
    상기 선택회로는, 상기 앞의 제1 스테이지 가산의 상기 캐리 출력이, 상기 초기의 제1 스테이지 가산의 상기 캐리 출력에 좌우되고, 상기 초기의 제1 스테이지 가산의 상기 캐리 출력과 같은 값을 갖는다고 예상되는 경우, 상기 초기의 제1 스테이지 가산의 상기 캐리 출력을 선택하고, 그렇지 않은 경우에는, 상기 앞의 제1 스테이지 가산의 상기 캐리 출력을 선택하도록 구성되는, 데이터 처리장치.
  15. 제 1 항에 있어서,
    상기 X비트 결과 데이터 요소의 최하위 N비트 부분을 생성하는 최하위 제2 스테이지 가산에 대해서, 상기 처리회로는, 상기 X비트 결과 데이터 요소를 상기 대응한 W비트 데이터 요소의 상기 합이나 차이에 해당한 W비트 값에 최근접 X비트 값으로 라운드하기 위한 값을 사용하여 상기 라운딩 값을 생성하도록 구성되는, 데이터 처리장치.
  16. 제 15 항에 있어서,
    상기 처리회로는, 상기 W비트 값의 최상위 배제 비트의 값에 해당한 값으로 상기 라운딩 값을 생성하도록 구성되고, 상기 최상위 배제 비트가 상기 최근접 X비트 값에서의 대응한 유의의 비트를 갖지 않는 상기 W비트 값의 최상위 비트를 포함하는, 데이터 처리장치.
  17. 제 15 항에 있어서,
    상기 처리회로는, 상기 N비트 중간값과, 상기 최하위 제2 스테이지 가산에 대응한 상기 대응한 제1 스테이지 가산보다 하위의 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산하는 적어도 하나의 제1 스테이지 가산의 상기 캐리 출력 중, 적어도 하나에 의거하여, 상기 최하위 제2 스테이지 가산을 위한 상기 라운딩 값을 판정하도록 구성되는, 데이터 처리장치.
  18. 제 15 항에 있어서,
    상기 최하위 N비트 부분보다 상위인 상기 X비트 결과 데이터 요소의 N비트 부분을 생성하는 상위의 제2 스테이지 가산에 대해서, 상기 처리회로는, 상기 라운딩 값이 상기 최하위 제2 스테이지 가산으로 가산되지 않았을 경우 일어나지 않았었을 상기 상위 제2 스테이지 가산까지, 상기 최하위 제2 스테이지 가산으로 가산된 라운딩 값이 캐리를 전파시킬지의 여부를 나타내는 값을 사용하여 생성하도록 구성되는, 데이터 처리장치.
  19. 제 18 항에 있어서,
    상기 처리회로는, 상기 N비트 중간값과, 상기 최하위 제2 스테이지 가산으로부터 상기 상위 제2 스테이지 가산으로 실제로 상기 캐리를 전파시키지 않고 적어도 하나의 제1 스테이지 가산의 상기 캐리 출력 중, 적어도 하나에 의거하여 상기 상위 제2 스테이지 가산을 위한 상기 라운딩 값을 판정하도록 구성되는, 데이터 처리장치.
  20. 데이터 처리장치로서,
    데이터를 처리하는 처리수단; 및
    적어도 하나의 W 비트 데이터 요소를 각각 포함하는 2개의 오퍼랜드를 식별하는 내로우잉 앤 라운딩 산술 명령어에 응답하여 내로우잉 앤 라운딩 산술연산을 행하기 위해 상기 처리수단을 제어하도록 구성된 제어수단을 구비하고, 상기 내로우잉 앤 라운딩 산술연산이 적어도 하나의 X비트 결과 데이터 요소를 포함하는 결과값을 생성하고, 각 X 비트 결과 데이터 요소가 X비트값으로 라운드된 상기 2개의 오퍼랜드의 대응한 W 비트 데이터 요소의 합이나 차이를 나타내고, 여기서 W 및 X가 정수 및 W>X이고;
    상기 제어수단은,
    (a) 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산 또는 감산하여 각각의 N비트 중간값을 생성하기 위해 복수의 N비트의 제1 스테이지 가산을 행하고(여기서, W=J*N, J>1, N 및 J는 정수임);
    (b) 대응한 제1 스테이지 가산에 의해 생성된 상기 N비트 중간값을, 상기 대응한 제1 스테이지 가산보다 하위의 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산하기 위한 앞의 제1 스테이지 가산의 캐리 출력을 나타내는 캐리값과 라운딩값을 가산하여서 상기 X비트 결과 데이터 요소의 N비트 라운드된 결과 부분으로, 각각 변환하는 하나 이상의 N비트의 제2 스테이지 가산을 행하고;
    (c) 상기 하나 이상의 N비트의 제2 스테이지 가산 중 적어도 하나에 의해 생성된 상기 N비트 결과 부분으로부터 상기 X비트 결과 데이터 요소를 형성함으로써,
    상기 결과값의 각 X비트 결과 데이터 요소를 생성하기 위해 상기 처리수단을 제어하도록 구성된, 데이터 처리장치.
  21. 데이터 처리장치의 데이터 처리방법으로서,
    처리수단을 사용하여, 데이터를 처리하는 처리단계와,
    제어수단을 사용하여, 적어도 하나의 W 비트 데이터 요소를 각각 포함하는 2개의 오퍼랜드를 식별하는 내로우잉 앤 라운딩 산술 명령어에 응답하여, 적어도 하나의 X비트 결과 데이터 요소를 포함한 결과값을 생성하기 위해 내로우잉 앤 라운딩 연산을 행하도록 상기 처리수단을 제어하는 제어단계를 포함하되, 각 X비트 결과 데이터 요소가 X비트값으로 라운드된 상기 2개의 오퍼랜드의 대응한 W 비트 데이터 요소의 합이나 차이를 나타내고, 여기서 W 및 X가 정수 및 W>X이고;
    상기 제어단계는, 상기 제어수단을 사용하여,
    (a) 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산 또는 감산하여 각각의 N비트 중간값을 생성하기 위해 복수의 N비트의 제1 스테이지 가산을 행하고(여기서, W=J*N, J>1, N 및 J는 정수임);
    (b) 대응한 제1 스테이지 가산에 의해 생성된 상기 N비트 중간값을, 상기 대응한 제1 스테이지 가산보다 하위의 상기 대응한 W비트 데이터 요소의 N비트 부분을 가산하기 위한 앞의 제1 스테이지 가산의 캐리 출력을 나타내는 캐리값과 라운딩값을 가산하여서 상기 X비트 결과 데이터 요소의 N비트 라운드된 결과 부분으로, 각각 변환하는 하나 이상의 N비트의 제2 스테이지 가산을 행하고;
    (c) 상기 하나 이상의 N비트의 제2 스테이지 가산 중 적어도 하나에 의해 생성된 상기 N비트 결과 부분으로부터 상기 X비트 결과 데이터 요소를 형성함으로써, 상기 결과값의 각 X비트 결과 데이터 요소를 생성하기 위해 상기 처리수단을 제어하는, 데이터 처리방법.
KR1020140088816A 2013-07-31 2014-07-15 데이터 처리장치 및 내로우잉 앤 라운딩 산술연산을 행하는 방법 KR102286101B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/955,324 US9262123B2 (en) 2013-07-31 2013-07-31 Data processing apparatus and method for performing a narrowing-and-rounding arithmetic operation
US13/955,324 2013-07-31

Publications (2)

Publication Number Publication Date
KR20150015369A KR20150015369A (ko) 2015-02-10
KR102286101B1 true KR102286101B1 (ko) 2021-08-05

Family

ID=50980616

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140088816A KR102286101B1 (ko) 2013-07-31 2014-07-15 데이터 처리장치 및 내로우잉 앤 라운딩 산술연산을 행하는 방법

Country Status (4)

Country Link
US (1) US9262123B2 (ko)
KR (1) KR102286101B1 (ko)
CN (1) CN104346134B (ko)
GB (1) GB2517539B (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9720646B2 (en) * 2015-11-12 2017-08-01 Arm Limited Redundant representation of numeric value using overlap bits
US11829756B1 (en) * 2021-09-24 2023-11-28 Apple Inc. Vector cumulative sum instruction and circuit for implementing filtering operations

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030001613A1 (en) 2001-06-25 2003-01-02 Nec Corporation Function block

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3276444B2 (ja) * 1993-03-22 2002-04-22 三菱電機株式会社 除算回路
JP3487783B2 (ja) * 1999-03-17 2004-01-19 富士通株式会社 加算回路、それを利用した積分回路、及びそれを利用した同期確立回路
JP3727301B2 (ja) * 2002-11-22 2005-12-14 Necエレクトロニクス株式会社 加算回路および加算回路を備えた半導体装置
KR20060067128A (ko) * 2004-12-14 2006-06-19 한국전자통신연구원 가산기
US7730117B2 (en) * 2005-02-09 2010-06-01 International Business Machines Corporation System and method for a floating point unit with feedback prior to normalization and rounding
US7822799B1 (en) * 2006-06-26 2010-10-26 Altera Corporation Adder-rounder circuitry for specialized processing block in programmable logic device

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030001613A1 (en) 2001-06-25 2003-01-02 Nec Corporation Function block

Also Published As

Publication number Publication date
US9262123B2 (en) 2016-02-16
CN104346134A (zh) 2015-02-11
US20150039665A1 (en) 2015-02-05
GB2517539B (en) 2020-12-16
CN104346134B (zh) 2018-10-19
KR20150015369A (ko) 2015-02-10
GB201407923D0 (en) 2014-06-18
GB2517539A (en) 2015-02-25

Similar Documents

Publication Publication Date Title
JP3729881B2 (ja) 並列加算および平均演算を行うための回路およびその方法
US4041292A (en) High speed binary multiplication system employing a plurality of multiple generator circuits
EP1351134A2 (en) Superpipelined arithmetic-logic unit with feedback
US5299319A (en) High performance interlock collapsing SCISM ALU apparatus
US10409604B2 (en) Apparatus and method for performing multiply-and-accumulate-products operations
US9678716B2 (en) Apparatus and method for performing absolute difference operation
US9146707B2 (en) Generating a fast 3x multiplicand term for radix-8 booth multiplication
WO2017060667A1 (en) Floating point number rounding
GB2287331A (en) Electronic multiplying and adding apparatus.
US10162633B2 (en) Shift instruction
KR102286101B1 (ko) 데이터 처리장치 및 내로우잉 앤 라운딩 산술연산을 행하는 방법
JPH08212058A (ja) 加算オーバフロ検出回路
JPH0756712A (ja) 数値計算を実行するプロセスおよびそのプロセスを実現する演算装置
US20060242221A1 (en) Data value addition
US5867413A (en) Fast method of floating-point multiplication and accumulation
CN108255463B (zh) 一种数字逻辑运算方法、电路和fpga芯片
US20050198094A1 (en) Adder-subtracter circuit
JP5262248B2 (ja) 積和演算回路
US20210382686A1 (en) Apparatus and method for performing bit permutation operations
US20080071852A1 (en) Method to perform a subtraction of two operands in a binary arithmetic unit plus arithmetic unit to perform such a method
US8892623B2 (en) Data processing apparatus and method
EP2270647A1 (en) Multi-bit carry chain
JPH09190338A (ja) 論理演算装置での数学的オーバフロー・フラグ発生遅延の除去
US7412473B2 (en) Arithmetic circuitry for averaging and methods thereof
US20100191787A1 (en) Sequential Multiplier

Legal Events

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