KR20180081106A - 중첩 표현을 이용한 제1 및 제2 피연산자의 승산 - Google Patents

중첩 표현을 이용한 제1 및 제2 피연산자의 승산 Download PDF

Info

Publication number
KR20180081106A
KR20180081106A KR1020187015922A KR20187015922A KR20180081106A KR 20180081106 A KR20180081106 A KR 20180081106A KR 1020187015922 A KR1020187015922 A KR 1020187015922A KR 20187015922 A KR20187015922 A KR 20187015922A KR 20180081106 A KR20180081106 A KR 20180081106A
Authority
KR
South Korea
Prior art keywords
bit
value
lane
bits
rhpa
Prior art date
Application number
KR1020187015922A
Other languages
English (en)
Other versions
KR102491789B1 (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 KR20180081106A publication Critical patent/KR20180081106A/ko
Application granted granted Critical
Publication of KR102491789B1 publication Critical patent/KR102491789B1/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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products
    • 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5324Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel partitioned, i.e. using repetitively a smaller parallel parallel multiplier or using an array of such smaller multipliers
    • 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • G06F7/5334Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product
    • G06F7/5336Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

적어도 2개의 X-bit 부분을 포함하는 제1피연산자와 적어도 하나의 Y-bit 부분을 포함하는 제2피연산자를 곱하기 위한 데이터 처리 방법이 제공된다. 적어도 2개의 부분 곱이 생성되고, 각각의 부분 곱은 상기 제1피연산자의 선택된 X-bit 부분과 상기 제2피연산자의 선택된 Y-bit 부분의 곱을 포함한다. 각각의 부분 곱은 상기 부분 곱의 유효성을 나타내는 유효성 표시 정보에 따라 중복 표현으로 변환된다. 상기 중복 표현에서, 상기 부분 곱은 다수의 N-bit 부분을 이용하여 나타내고, 적어도 2개의 인접한 N-bit 부분의 그룹에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 갖는다. 상기 중복 표현에 나타난 다수의 부분 곱은 가산된다.

Description

중첩 표현을 이용한 제1 및 제2 피연산자의 승산
본 기술은 데이터 처리 분야에 관한 것이다.
데이터 처리 시스템에서 부동 소수점 표현을 이용하는 것은 일반적이다. 부동 소수점 수는 유효수(significand) 비트의 유효성을 나타내는 유효수 및 지수를 포함한다. 이는 한정된 수의 비트를 이용하여 넓은 범위의 수치 값을 나타낼 수 있게 한다. 그러나, 부동 소수점 연산의 문제는 일반적으로 계산이 비-연관성이라는 점이다. 예컨대, 여러 개의 부동 소수점 값을 가산할 때, 이전 가산의 결과에 다른 값이 가산될 때마다 그 결과가 반올림되어 정규화되는 데, 이는 값이 가산되는 순서에 따라 전체 결과가 달라진다는 것을 의미한다. 이는 정확히 동일한 순서로 완료하지 않으면 합계를 재현할 수 없기 때문에, 부동 소수점 연산을 병렬화하는 것을 어렵게 한다. 재현가능한 결과를 생성하기 위해, 통상 일련의 덧셈 또는 뺄셈이 순차적으로 행해져야 하며, 이로 인해 부동 소수점 연산이 상대적으로 느려질 수 있다.
적어도 일부의 예는 다수의 X-bit 부분을 포함하는 제1피연산자와 적어도 하나의 Y-bit 부분을 포함하는 제2피연산자를 곱하기 위한 데이터 처리 방법을 제공하며, 상기 데이터 처리 방법은:
각각이 상기 제1피연산자의 선택된 X-bit 부분과 상기 제2피연산자의 선택된 Y-bit 부분의 곱을 포함하는 다수의 부분 곱을 생성하는 단계;
각각의 부분 곱에 대해, 상기 부분 곱의 유효성을 나타내는 유효성 표시 정보에 따라 상기 부분 곱을 중복 표현으로 변환시키는 단계를 포함하고, 상기 중복 표현에서 상기 부분 곱은 다수의 N-bit 부분을 이용하여 나타내고, 상기 중복 표현의 적어도 2개의 인접한 N-bit 부분의 그룹에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 갖고,
상기 데이터 처리방법은,
상기 중복 표현에 나타난 다수의 부분 곱을 가산하는 단계를 더 포함한다.
적어도 일부의 예는 데이터 처리장치로서, 상기 데이터 처리장치는,
부분 곱을 생성하기 위해 다수의 X-bit 부분을 포함하는 제1피연산자의 선택된 X-bit 부분과 적어도 하나의 Y-bit 부분을 포함하는 제2피연산자의 선택된 Y-bit 부분을 곱하기 위한 곱셈 회로;
상기 부분 곱의 유효성을 나타내는 유효성 표시 정보에 따라 중복 표현을 갖는 변환된 부분 곱으로 상기 부분 곱을 변환시키기 위한 변환 회로를 구비하고, 상기 중복 표현에서 상기 부분 곱은 다수의 N-bit 부분을 이용하여 나타내고, 상기 중복 표현의 적어도 2개의 인접한 N-bit 부분의 그룹에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 갖고,
상기 데이터 처리장치는,
상기 변환된 부분 곱을 상기 중복 표현을 갖는 누적기 값에 가산하기 위한 가산 회로를 더 구비한 데이터 처리장치를 제공한다.
본 발명의 실시예들은 수반된 도면을 참조하여 단지 예로서만 설명될 것이다:
도 1은 데이터 처리 장치를 개략적으로 나타내고;
도 2는 수치 값의 상이한 표현을 개략적으로 나타내고;
도 3은 2배 정밀도 부동 소수점 값 및 고-정밀도 앵커(HPA) 값간 관계의 예를 개략적으로 나타내고;
도 4는 중첩 유효성을 갖는 다수의 N-bit 부분을 포함하는 중복 표현을 이용하여 수치 값을 나타내는 중복 HPA(RHPA) 값의 예를 나타내고;
도 5는 중복 HPA 값의 각 부분의 유효성을 규정하고 중첩 비트의 수를 규정하기 위한 메타데이터(metadata)의 예를 나타내고;
도 6은 RHPA 표현을 이용한 누적 연산의 예를 나타내고;
도 7은 단일 연산에서 3개 이상의 RHPA 값을 가산하는 예를 나타내고;
도 8은 단일 연산에서 가산된 각각의 RHPA 값이 입력 벡터의 대응하는 성분으로부터 변환되는 예를 나타내고;
도 9는 RHPA 표현을 이용하여 값을 누적하는 방법을 나타내고;
도 10 및 11은 부동 소수점 값을 RHPA 값으로 변환시키는 예를 나타내고;
도 12는 비-중복 형식의 RHPA 값을 생성하기 위한 중첩 전파 동작의 제1예를 나타내고;
도 13은 제한된-중복 형식의 RHPA 값을 생성하기 위한 중첩 전파 동작의 제2예를 나타내고;
도 14(즉, 도 14a 및 도 14a의 계속인 도 14b)는 제한된-중복 RHPA 값을 비-중복 RHPA 값으로 변환시키는 예를 나타내고;
도 15는 RHPA 누적기로부터의 중첩 비트를 중첩 누적기 값에 가산하기 위한 중첩 누적 연산의 예를 나타내고;
도 16은 부동 소수점 값으로부터 변환된 RHPA 값을 제한된-중복 RHPA 누적기에 동시에 가산하고 갱신된 RHPA 누적기를 제한된-중복 형식으로 유지하도록 중첩 전파를 수행하는 예를 나타내고;
도 17은 비-중복 형식의 RHPA 값을 부동 소수점 값으로 변환시키는 예를 나타내고;
도 18은 제한된-중복 형식의 RHPA 값을 부동 소수점 값으로 변환시키는 예를 나타내고;
도 19는 RHPA 값을 부동 소수점 값으로 변환시키는 제3예를 나타내고;
도 20은 2개의 피연산자 값의 곱셈의 부분 곱을 가산하기 위해 RHPA 값의 가산을 이용하는 예를 나타내고;
도 21은 대응하는 결과 값 내의 레인(lane)에 의해 생성될 결과 요소의 상대적 위치에 기초하여 각 레인의 처리를 제어하기 위해 레인 위치 정보를 이용하는 예를 나타내고;
도 22는 결과 벡터 길이보다 넓거나 좁은 결과 값의 생성을 제어하기 위해 레인 위치 정보를 이용하는 다수의 예를 나타내고;
도 23은 각 레인의 처리에 대한 앵커 값, 중첩 비트의 수 및 레인 위치 정보를 지정하는 메타데이터 레지스터의 예를 나타내고;
도 24는 입력 벡터의 성분들이 단일 벡터 내의 독립된 결과 값에 대응하는 상이한 서브세트의 레인들의 처리에 의해 처리되는지를 확인하기 위해 입력 맵핑 정보를 이용하는 예를 나타내고;
도 25는 RHPA 값의 상이한 N-bit 부분이 상이한 중첩 비트의 수를 갖는 예를 나타내고;
도 26은 정수의 각 부분의 부분 곱을 가산하기 위한 RHPA 형식을 이용하여 2개의 긴 정수를 곱하는 예를 나타내고;
도 27은 일련의 파이프라인된 부분 곱 누적 연산을 이용하여 2개의 긴 정수의 곱이 어떻게 계산될 수 있는지의 예를 나타내는 타이밍도이고;
도 28은 최종 곱셈 결과를 비-중복 형식으로 변환시키기 위한 일부의 중첩 전파 가산이 부분 곱을 누적시키기 위한 일부의 가산에 의해 어떻게 병렬로 수행될 수 있는지의 예를 나타내는 다른 타이밍도이고;
도 29는 긴 정수 피연산자를 부동 소수점 값의 벡터에 맵핑하는 예를 나타내고;
도 30은 입력 피연산자의 각 쌍의 부분의 부분 곱을 결정하기 위해 부동 소수점 곱셈기를 이용하는 예를 나타내고;
도 31 및 32는 양 및 음의 부동 소수점 값을 각각 RHPA 형식으로 변환시키는 수치의 예를 나타내고;
도 33은 2개의 RHPA 피연산자의 가산 동안의 레인 오버플로우의 예를 나타내고;
도 34는 RHPA 값으로부터 레인 오버플로우를 제거하는 예를 나타내고;
도 35는 RHPA 값을 비-중복 형식으로 변환시키는 예를 나타내며;
도 36 내지 39는 도 16에 나타낸 연산이 제한된-중복 형식의 결과를 생성하는 이유에 대한 설명을 제공한다.
이하 일부의 특정 예가 기술될 것이다. 본 발명의 기술들이 이러한 예들로 제한되지 않는다는 것을 알아야 할 것이다.
이하 고-정밀도 앵커(HPA; high-precision anchor) 형식이 논의된다. 그러한 HPA 형식에 대한 더 많은 정보가 미국 특허출원 62/074,149, 14/582,974, 14/582,875, 14/582,812, 14/582,836, 14/582,978, 14/606,510, 및 14/582,968에서 찾을 수 있으며, 그러한 특허문헌의 내용은 참조를 위해 본원에 모두 포함된다.
부동 소수점 수
부동 소수점(FP)은 소수의 비트를 이용하여 실수를 근사하는 유용한 방식이다. IEEE 754-2008 FP 표준은 FP 수에 대해 다수의 상이한 형식을 제안하고 있으며, 그 일부는 이진수 64(2배 정밀도 또는 DP라고도 함), 이진수 32(단일 정밀도 또는 SP라고도 함), 및 이진수 16 (절반 정밀도 또는 HP라고도 함)이다. 상기 수 64, 32, 및 16은 각 형식에 필요한 비트의 수를 나타낸다.
표현
FP 수는 과학 수업에서 가르치는 "과학 표기법"과 매우 유사하며, 그러한 과학적 표기법에서는 음수 2백만 대신에 -2.0×106으로 쓴다. 이러한 수의 부분은 부호(이 경우 음수), 유효수(2.0), 지수의 밑(10), 및 지수(6)를 포함한다. 차이는 있지만, 이들 모든 부분은 FP 수로 아날로그를 갖는다. 가장 중요한 것은 그러한 구성의 부분이 2진수로 저장되고, 지수의 밑이 항상 2인 것이다.
보다 정확하게, FP 수는 부호 비트, 일부의 바이어스된 지수 비트의 수, 및 일부의 분수 비트의 수로 구성된다. 특히, DP, SP 및 HP 형식은 다음의 비트로 구성된다:
Figure pct00001
상기 부호(sign)는 음수의 경우 1이고, 양수의 경우 0이다. 0을 포함한 모든 수는 부호를 갖는다.
지수는 바이어스되며, 이는 실제 지수가 수에 저장된 지수와 다르다는 것을 의미한다. 예를 들어, 바이어스된 SP 지수는 8비트 길이이며 0에서 255까지의 범위이다. 지수 0과 255는 특수한 경우이지만 모든 다른 지수는 바이어스 127을 가지며, 이는 실제 지수가 바이어스된 지수보다 작은 127인 것을 의미한다. 가장 작은 바이어스된 지수는 1이며, 이는 -126의 실제 지수에 대응한다. 최대 바이어스된 지수는 254이며, 이는 127의 실제 지수에 대응한다. HP 및 DP 지수는 상기의 표에 표시된 바이어스와 동일한 방식으로 작용한다.
SP 지수 255(또는 DP 지수 2047, 또는 HP 지수 31)는 무한대 및 NaN(수가 아닌: not a number)이라고 부르는 특수 기호를 위해 준비되어 있다. 무한대(양수 또는 음수일 수 있는)는 0의 끝수를 갖는다. 지수 255를 갖는 소정의 수 및 0이 아닌 끝수(또는 분수; fraction)는 NaN이다. 무한대는 포화 값을 제공하며, 이에 따라 실제로 "이러한 계산은 이러한 형식으로 나타낼 수 있는 것보다 더 큰 수를 생성한다" 와 같은 의미를 갖는다. NaN은 실수로 수학적으로 정의되지 않은 연산, 예를 들어 0으로 나누거나 또는 음수의 제곱근을 취하는 연산을 위해 리턴된다.
소정의 형식에서, 지수 제로(zero)는 준정규적인(subnormal) 수 및 0을 위해 준비된다. 정규적인 수는 아래의 값을 나타낸다:
-1sign × 1.fraction × 2e
여기서, e는 바이어스된 지수로부터 계산된 실제 지수이다. 용어 1.fraction은 유효수이고, 1은 FP 수의 일부로 저장되지 않으나, 대신 지수로부터 유추된다. 0과 최대 지수를 제외한 모든 지수는 형식 1.fraction의 유효수를 나타낸다. 지수 0은 형식 0.fraction의 유효수, 및 주어진 형식에 대한 1-바이어스와 동일한 실제 지수를 나타낸다. 그와 같은 수는 준정규적이라고 부른다(역사적으로 이들 수를 비정규적인 것이라 불렀지만, 현대의 사용법은 준정규적이라는 용어를 선호하고 있다).
0과 같은 지수 및 분수(또는 끝수) 모두가 갖는 수는 0이다.
다음의 표는 HP 형식에서의 일부 예시의 수이다. 엔트리는 2진수이며 '_' 문자가 추가되어 가독성을 높였다. 준정규적인 엔트리(표의 4번째 라인, 지수가 0인 경우)는 선행 라인의 정규적인 엔트리와 다른 유효수를 생성한다는 것을 염두해 두자.
Figure pct00002
FP 구현의 복잡성의 상당 부분은 준정규적이기 때문이며, 종종 마이크로코드 또는 소프트웨어로 처리된다. 일부 프로세서는 하드웨어에서 준정규적으로 처리하므로, 소프트웨어 또는 마이크로코드 구현과 비교하여 이들 연산을 10에서 100배까지 가속화시킨다.
정수, 고정 소수점, 부동 소수점
부호를 처리하는 FP 방식은 부호-크기(sign-magnitude)라고 하며, 이는 정수가 컴퓨터에 저장되는 일반적인 방식과는 다르다(2의 보수). 부호-크기 표현에서, 동일한 수의 양수 및 음수 버전은 부호 비트에서만 다르다. 하나의 부호 비트와 3개의 유효수 비트로 구성된 4-bit 부호 크기 정수는, 다음과 같이 플러스(+) 1 및 마이너스(-) 1을 나타낸다:
+1 = 0001
-1 = 1001
2의 보수 표현에서, n-bit 정수 i는 2진 n+1-bit 값 2n+i의 저차 n bit로 나타내므로, 4-bit 2의 보수 정수는 다음과 같이 플러스 1 및 마이너스 1을 나타낸다:
+1 = 0001
-1 = 1111
2의 보수 형식은 컴퓨터 산술을 단순화하기 때문에 부호화된 정수에 대해 실질적으로 보편적이다.
고정 소수점 수는 정확히 정수와 비슷해 보이지만, 실제로 특정한 분수 비트의 수를 갖는 값을 나타낸다. 센서 데이터는 종종 고정 소수점 형식으로 되어 있으며, FP가 광범위하게 채택되기 전에 작성된 많은 고정 소수점 소프트웨어가 있다. 고정 소수점 수는 프로그래머가 수의 정수 부분과 분수 부분 사이의 분리점인 "이진 소수점"을 추적해야 하고, 또 비트를 정확한 위치에 유지하기 위해 그 수를 계속해서 이동시켜야 하기 때문에 작업하기가 상당히 지루하다. FP 수는 이러한 어려움이 없으므로, 고정 소수점 수와 FP 수를 서로 변환할 수 있다. 변환할 수 있다는 것은 또한 고정 소수점 소프트웨어 및 데이터를 계속 사용할 수 있음을 의미하지만, 새로운 소프트웨어를 기록할 때 고정 소수점에만 국한되지는 않는다.
반올림 FP 수
대부분의 FP 연산은 IEEE-754 표준에 의해 무한 범위와 정밀도로 연산이 수행된 것과 같이 계산된 다음 FP 수에 맞게 반올림된 것처럼 계산되어야 한다. 그러한 계산이 FP 수와 정확히 일치하면, 해당 값이 항상 리턴되지만, 그 계산 결과는 보통 2개의 연속적인 부동 소수점 수들 사이에 있는 값이 된다. 반올림은 2개의 연속된 수 중 어느 것이 리턴되어야 하는지를 선택하는 과정이다.
반올림 모드라고 부르는 다수의 반올림 방식이 있으며, 이들 중 6개는 다음과 같다:
Figure pct00003
상기 정의는 실제적인 방식으로 반올림하는 방법을 알려주지 않는다. 하나의 공통 구현은 연산을 수행하고, 나머지 비트들 모두 뿐만 아니라 자른 값(즉, FP 형식에 맞는 값)을 본 다음, 특정 조건들이 유지되면 상기 자른 값을 조정하는 것이다. 이들 계산은 모두 다음을 기반으로 한다:
L - (최소;least) 자른 값의 최소 유효 비트(least significant bit)
G - (가드;guard) 다음의 최상위 유효 비트(mostt significant bit)(즉, 자름에 포함되지 않은 제1비트)
S - (스티키;sticky) 자름의 일부가 아닌 나머지 모든 비트의 논리합
이들 3개의 값 및 자른 값이 주어지면, 다음 표에 따라 항상 정확하게 반올림된 값을 계산할 수 있다:
Figure pct00004
예를 들면, 2개의 4-bit 유효수를 곱한 다음, 4-bit 유효수로 반올림하는 것을 고려한다.
sig1 = 1011 (십진수 11)
sig2 = 0111 (십진수 7)
곱함으로써 산출한다
sig1 × sig2 = 1001_101 (십진수 77)
L Gss
자른 4-bit 결과의 최하위 유효 비트는 L로 표시되고, 다음 비트는 G로 표시되며, S는 s로 표시된 나머지 비트의 논리합이다(즉, S = 0 | 1 = 1). 반올림하기 위해, 반올림 모드 및 상기 표의 계산에 따라 4-bit 결과(1001)를 조정한다. 따라서, 예를 들어, RNA 반올림에 있어서, G는 1001 + 1 = 1010을 리턴하도록 세팅된다. RX 반올림의 경우, G | S가 참(true)이면 L을 1로 세팅하고(이미 1이므로, 이 경우에는 아무것도 변경되지 않는다) 1001을 리턴한다.
반올림 정수 및 고정 소수점 수
FP 수를 정수 또는 고정 소수점으로 변환하면 반올림된다. 그러한 개념은 기본적으로 FP 반올림과 같다. 정수가 될 FP 수는 항상 정수로 반올림한다. 다른 모든 FP 수는 2개의 연속 정수 사이에 있으며, 반올림은 정수가 리턴되는 것을 나타낸다. 안타깝게도, 정수의 반올림 로직은 2의 보수와 부호-크기 형식의 차이 때문에 다소 어려워졌다. 부호-크기 수를 증가시키면 항상 크기가 증가하기 때문에, 그 증가된 수는 0(zero)에서 멀어진다. 양수의 2의 보수의 수에 대해서도 같은 일이 발생하지만, 음수의 2의 보수의 수가 증가하면 0에 가까워진다. 이는 정수가 양수인지 음수인지에 따라 반올림 로직을 변경해야 한다는 것을 의미한다. 또한, 기준 값(증가되거나 또는 증가되지 않는 값)을 선택하는 데 주의해야 한다는 것을 의미한다. 양의 정수인 경우, 해당 값은 자른 FP 유효수일 뿐이므로, 1.37은 1의 기본 값을 갖고 1 또는 2의 결과를 갖는다. 음의 정수인 경우, 다시 유효수를 자르고 결과의 1의 보수를 취하고(1의 보수는 모든 비트가 반전된 원래의 수이다), -1.37은 1로 자른 후 반전되어 -2의 기본 값을 제공한다. 이후, 우리가 원하는 결과가 -2 또는 (증가될 때) -1이 되기 때문에 모든 것이 산출된다.
더 복잡한 것을 하기 위해, 우리의 변환 방법은 음의 정수에 대해 L, G 및 S를 찾기 위해 약간의 계산이 필요하다. 정확한 반올림을 하려면 2의 보수 처리(반전 및 1을 가산)를 완료한 다음 L, G 및 S를 계산해야 하지만, 1을 가산하면 단지 반전하는 것에 비해 속도가 느려진다. 이상적으로, 우리는 원래의 이동된 입력으로부터(즉, 부호에 대한 작업을 하기 전 입력으로부터) 실제 L, G, S를 계산하려고 한다. 따라서, 부동 소수점 1.37이나 -1.37은 모두 정수 1로 오른쪽으로 이동된다.
반전시키기 전 L0, G0, S0를 최하위 유효 비트(lsb), 가드(guard) 및 스티키(sticky)로 하고, Li, Gi 및 Si를 반전시킨 후 lsb, 가드 및 스티키로 하며, 마지막으로 L, G 및 S를 반전 및 1을 가산한 후 lsb, 가드 및 스티키로 한다.
S0이 0이면, Si에 기여하는 비트는 모두 1이므로 S(이들 Si 비트에 1을 가산함으로써 얻어진)도 0이다. S0가 0이 아니면, Si가 모두 1이 아니므로 S는 0이 아니다. 따라서 모든 경우에 S0 = S이다.
G0이 0이면, Gi는 1이고, G는 S0가 0일때만 일어나는 S bit로부터 캐리-인(carry-in)이 있는 경우를 제외하고는 1이다. G0이 1이면, Gi는 0이고, 다시 G는 S0가 0일때만 일어나는 S bit로부터의 캐리-인이 있는 경우를 제외하고는 1이다. 따라서 G = G0 ^ S0이다.
매우 유사한 로직에 의해, L = L0 ^ (G0 | S0)이다.
이제 음의 정수 및 양의 정수 모두에 대해 L, G 및 S를 가지므로, 반올림 규칙을 제안할 수 있다:
Figure pct00005
고정 소수점 수는 정수와 정확히 동일한 방식으로 반올림한다. 비부호화 변환(정수 또는 고정 소수점으로) 규칙은 양의 변환 규칙과 동일하다.
삽입 반올림
반올림을 수행하는 더 빠른 방식은 거의 모든 FP 연산의 일부인 유효수 가산의 일부로서 반올림 상수를 삽입하는 것이다. 이것이 어떻게 연산되는지 보기 위해, 달러와 센트로 수를 가산한 다음 달러로 반올림하는 것을 고려한다. 아래와 같이 가산하면,
$1.27
+$2.35
$3.62
상기 합계 $3.62는 $3보다 $4에 가깝기 때문에, 가장 가까운 모드로 반올림하면 $4가 리턴된다. 그 수를 이진수로 나타내면, 마지막 섹션의 L, G, S 방법을 이용하여 동일한 결과를 달성할 수 있다. 그러나, 우리는 단지 50 센트를 가산하고 그 결과를 잘라버린다고 가정한다.
1.27
+ 2.35
+ 0.50 (반올림 삽입)
4.12
곧바로 합계($4.12)에서 달러 금액($4)을 리턴하면, RNA 반올림 모드를 이용하여 정확하게 반올림한다. 만약 $0.50 대신 $0.99를 가산하면, RP 반올림을 이용하여 정확하게 반올림한다. RNE는 약간 더 복잡하다: $0.50를 가산하고, 자르고, 남아 있는 센트를 본다. 남아 있는 센트가 0이 아니면, 자른 결과가 정확한 것이다. 남아있는 센트가 0인 경우, 삽입 전 2달러 금액 사이에 정확히 일치하므로, 짝수 달러 금액을 선택한다. 이진 FP의 경우 이러한 금액은 그 달러 금액의 최하위 유효 비트를 0으로 세팅한다.
3개의 수를 가산하는 것은 2개의 수를 가산하는 것보다 약간 느리므로, 2개의 유효수를 가산하고, L, G, 및 S를 검사한 다음, 반올림 모드에 따라 결과를 증가시키는 것보다 삽입 반올림을 이용함으로써 반올림된 결과를 훨씬 빨리 얻을 수 있다.
삽입 반올림 구현
FP의 경우, 반올림 삽입은 반올림 모드 및 결과의 부호에 따라 달라지는 3개의 상이한 값 중 하나이다.
RNA와 RNE 모두 G 위치에 1을 삽입해야 한다(이것은 달러와 센트 예에서 $0.50를 가산하는 것과 같다).
RP 및 RM 반올림은 부호 뿐만 아니라 모드에 의존한다. RP는 양의 결과를 반올림하나(양의 무한대로 유효수의 크기를 증가), 음의 결과는 잘라낸다(양의 무한대에 더 가까운 유효수를 선택). 유사하게, RM은 음의 결과를 반올림하나(음의 무한대로 유효수의 크기를 증가), 양의 결과는 잘라낸다(음수 무한대에 더 가까운 유효수를 선택). 따라서, RM과 RP를 2개의 경우로 나누는 데, 즉 부호가 반올림 방향과 일치할 경우의 반올림(RU)과 부호가 반올림 삽입과 다른 경우의 자름(RZ)으로 나눈다. RU의 경우, G-bit 위치 및 S에 논리적으로 기여하는 모든 위치에 1을 삽입한다(이것은 달러와 센트 예에서 $0.99를 가산하는 것과 같다).
RZ 및 RX 모드와, RZ 모드로 감소하는 RP 및 RM 모드의 경우 0을 삽입한다.
대부분의 반올림 모드에서, 반올림 삽입을 가산한 다음 자름하면 정확하게 반올림된 결과가 된다. 두 가지 예외는 RNE와 RX로, 가산한 후에 G와 S를 검사해야 한다. RNE의 경우, G와 S가 모두 0이면 L을 0으로 세팅한다. RX의 경우, G 또는 S가 0이 아닌 경우 L을 1로 세팅한다.
FP 수가 실수가 아님
FP 수를 실수와 같다고 생각하는 것이 유혹적이지만, 그것들은 가장 기본적인 속성의 경우에서 조차 근본적으로 다르다:
그것들은 연관성이 없다. 예를 들어, SP에서는 3개의 수를 더하고 100만 또는 0을 리턴할 수 있다. 아마도 사람들은 반올림 오류라고 생각하지는 않을 것이다:
(245 + -245) + 220 = 220
245 + (-245 + 220) = 0
그것들은 분배 법칙을 따르지 않는다. SP에서 다시:
3,000,001 * (4.00001 + 5.00001) = 0x4bcdfe83
(3,000,001 * 4.00001) + (3,000,001 * 5.00001) = 0x4bcdfe82
그리고 오버 플로우가 발생하면 상황이 더욱 악화된다:
250 * (278 - 277) = 2127
(250 * 278) - (250 * 277) = 무한대
일부 구현에서, 그것들은 일반적으로 nanA + nanB! = nanB + nanA이기 때문에, 심지어 결핍 NaN 모드(모든 NaN을 단일 NaN으로 변환하는 모드)에 있지 않으면 교환할 수 없다. 수 가산 및 곱셈은 교환 가능하다.
IEEE NaN 규칙으로 인해, 곱셈 또는 가산 확인(즉, 식별)은 없다. 1과 0은 수치 값의 확인으로 작용한다.
FP 수를 고려할 때 유용한 방법 중 하나는 극히 소수(DP의 경우 53)의 연속 비트가 0이 아닌 매우 긴 고정 소수점 수인 것으로 그것들을 간주하는 것이다. 예를 들어, 무한의 DP 수는 소정의 2046 자리에서 유효수의 제1비트를 가질 수 있으며, 그 제1비트 뒤에 52의 다른 유효수 비트가 따라 오며, 부호 비트가 있으므로 소정의 유한의 DP 수는 2046 + 52 + 1 = 2099-bit 고정 소수점 수로 나타낼 수 있다. 이런 식으로 검사하면, 2개의 FP 수의 가산은 일반적으로 다른 FP 수가 나오지 않는다는 것이 매우 분명해진다: 그러한 가산의 결과가 반올림되어 FP 수가 된다.
부동 소수점(FP) 연산과 관련하여 알려진 문제는 그것이 비-연관이라는 점이며, 실제로 합계의 문제를 일으킨다:
* 프로그래머는 3개의 수를 가산할 때조차 큰 다른 결과에 대해 걱정해야 한다.
* 프로그래머는 큰 다른 결과를 피하기 위해 필요한 것보다 더 넓은 형식을 사용한다.
* 프로그래머는, 정확히 동일한 순서로 계산하지 않으면 합계가 재현되지 않기 때문에, 코드를 쉽게 병렬화할 수 없다.
예를 들어, 단일 정밀도에서,
220+(-244+244)=220
그러나
(220+-244)+244=0
연산이 수행되는 순서에 따라, 그 결과는 1백만 또는 0이다. 이것은 지수가 24만큼 다르므로 극단적인 예이지만, 지수가 1만큼 다를 경우 또는 모든 지수가 동일하고 3개 이상의 항을 가산하는 경우 상이한 답을 얻을 수 있다. C 프로그래밍 언어는 합계를 왼쪽에서 오른쪽으로 순서대로 평가해야 하므로 재현성 문제를 해결하지만, 이는 정확성을 위해 아무것도 하지 않으며 병렬 처리를 불가능하게 한다.
그러한 문제는 프로그램이 수백만 가지를 가산해야 하는 고성능 컴퓨팅(HPC)의 경우 특히 심각하다. 프로그래머는 이들 문제를 병렬 처리하려고 하지만, 재현성이 부족하면 디버깅(debugging)이 평소보다 훨씬 어려워진다. 다른 기계 구성은 해당 기계에 대한 재프로그래밍이 완벽하게 완료 되더라도 상이한 답을 생성한다.
HPA 표현
프로그래머-선택가능 범위에서 부동 소수점(FP) 수를 빠르고 정확하게 누적할 수 있게 하는 새로운 데이터 타입이 개시되어 있다. 대부분의 문제를 수용할 수 있는 적당한 범위의 경우, 누적은 FP 가산보다 빠르며 연합적이다. 연합 가산은 문제를 병렬 처리하면서도 재현성 있고 정확한 결과를 얻을 수 있게 하여, 예컨대 기존의 하드웨어에 비해 100배 이상으로 속도를 높일 수 있게 한다. 우리는 이들 이점이 고성능 컴퓨팅(HPC) 분야에서 매력적일 수 있고, 많은 HPC가 아닌 응용 분야에서 흥미로운 것으로 믿고 있다.
도 1은 프로그램 명령들의 제어 하에 데이터 처리 동작들을 수행하기 위한 데이터 처리 장치(2)를 개략적으로 나타낸다. 데이터 처리 장치(2)는 처리될 프로그램 명령(6) 및 데이터(8)를 저장하는 메모리(4)를 포함한다. 프로세서 코어(10)는 메모리(4)에 연결되고, 레지스터 뱅크(12), 처리 회로(14), 명령 인출(페치) 유닛(16), 명령 파이프라인 유닛(18) 및 명령 디코더(20)를 포함한다. 실제로 데이터 처리 시스템(2)은 많은 추가적인 요소들을 포함할 수 있고, 도 1의 표현은 이해를 돕기 위해 단순화된다는 것을 알 수 있을 것이다. 동작에 있어서, 프로그램 명령어(6; 간단히 '프로그램 명령'이라고도 함)는 명령어 인출 유닛(16; 간단히 '명령 인출 유닛'이라고도 함)에 의해 메모리(4)로부터 인출되어 명령어 파이프라인(18; 간단히 '명령 파이프라인'이라고도 함)에 공급된다. 프로그램 명령들이 명령 파이프 라인(18) 내의 적절한 스테이지에 도달하면, 그것들은 명령어 디코더(20; 간단히 '명령 디코더'라고도 함)에 의해 디코딩되고 그 디코딩된 프로그램 명령에 의해 지정된 처리 동작(들)을 수행하도록 처리 회로(14) 및 레지스터 뱅크(12)의 동작을 제어하기 위한 제어 신호를 생성한다. 다수의 입력 피연산자가 레지스터 뱅크(12)로부터 판독되어 처리 회로(14)에 공급될 수 있으며, 여기서 그것들이 처리된 다음 결과 값이 레지스터 뱅크(12)에 다시 기록된다.
상기 레지스터 뱅크(12)는 다양한 상이한 형태를 가질 수 있다. 처리될 피연산자는, 예를 들어 부동 소수점 피연산자, 고정 소수점 피연산자, 정수 피연산자 및 HPA 또는 RHPA 수 피연산자(후술되는 바와 같이)를 포함할 수 있다. 상기 레지스터 뱅크(12)는 이 레지스터 뱅크(12)의 구성에 따라 이러한 타입의 피연산자들의 혼합을 저장하는 역할을 할 수 있다. 상기 피연산자들은, 그들의 형식에 의해 미리 정의되거나, 또는 HPA 수 피연산자와 관련하여 후술되는 바와 같이 레지스터와 연관된 메타데이터를 이용하여 프로그램 가능하게 특정될 수 있는 상이한 레벨의 정밀도를 가질 수 있다.
도 1에 나타낸 바와 같이, 상기 레지스터 뱅크(12)는 이 레지스터 뱅크(12)의 대응하는 데이터 레지스터에 저장된 HPA 또는 RHPA 값과 관련된 메타데이터를 지정하기 위한 메타데이터 레지스터(22)를 포함할 수 있다(그 메타데이터의 내용의 예는 이하에 주어진다). 일부 경우, 각각의 데이터 레지스터는 대응하는 메타데이터 레지스터(22)를 가질 수 있고, 반면 다른 경우에 2개 이상의 데이터 레지스터는 단일의 메타데이터 레지스터(22)에 의해 지정된 메타데이터를 공유할 수 있다.
도 2는 부동 소수점 피연산자를 개략적으로 나타낸다. 부동 소수점 피연산자는 부호, 지수 및 유효수로 형성된다. 부동 소수점 피연산자는 그들의 지수 값으로 표시된 다양한 크기의 값을 나타낼 수 있다. 수가 나타낼 수 있는 정밀도는 유효수의 크기에 의해 제한된다. 부동 소수점 연산은 일반적으로 정수 연산보다 복잡하고 구현 속도가 느리다.
또한, 도 2는 64-bit 정수 피연산자를 나타낸다. 그와 같은 정수 피연산자는 비부호화 정수에 대해 0 내지 (264-1)의 범위, 또는 부호화 정수에 대해 -263 내지 263-1 범위의 수를 나타낼 수 있다. 정수 연산은 통상적으로 빠르며 수행하는 데 비교적 적은 에너지를 소비(부동 소수점 연산과 비교하여)하지만, 부동 소수점 값으로 나타낼 수 있는 범위의 수에 비해 비교적 제한된 값의 범위의 수가 지정될 수 있다는 단점이 있다.
또한, 도 2는 이러한 예에서 각각 64-bit 정수를 포함하는 다수의 성분(이러한 예에서는 3개)의 벡터를 포함하는 HPA(고-정밀도 앵커) 수를 나타낸다. HPA 수는 그와 연관된 메타데이터를 갖는다. 그러한 메타데이터는 HPA 수의 일부를 형성하는 요소들의 비트의 유효성을 나타내는 앵커 값을 포함한다. 그러한 앵커 값(들)은 비트 유효성의 하위 경계와 비트 유효성의 상위 경계를 직접 또는 간접적으로 지정한다. 이하에서 사용된 용어 메타데이터는 HPA 수의 비트 유효성을 지정하는 앵커 값을 포함하는 데이터에 대응되는 것으로 고려될 수 있다. 상이한 성분들은 연속으로 이러한 비트 유효성 범위에 걸쳐 있는 비트 값을 함께 지정한다. 비트 유효성의 하위 경계의 위치 및 비트 유효성의 상위 경계의 위치에 따라, 그 비트 유효성의 범위는 이진 소수점 위치를 포함할 수 있다. 이진 소수점 위치가 특정 HPA 값에 대해 지정된 비트 유효성 범위의 밖에 있을 수도 있다.
앵커 값(들)은 부동 소수점 값(예를 들어, 2배 정밀도 FP 값)으로 나타낼 수 있는 최소 비트 유효성에서 부동 소수점 값으로 나타낼 수 있는 최고 비트 유효성까지 확장되는 비트 유효성의 범위를 나타낼 수 있도록 제공될 수 있다.
HPA 수를 형성하는 요소들의 수는 각기 다른 구현마다 변경될 수 있다. 그러한 요소들의 크기는 일부 실시예에서 고정될 수 있지만, 다른 실시예에서는 변경될 수 있다. 그러한 범위 비트 유효성의 전체 폭은 일부 실시예에서 고정된 요소 크기의 단위로 변경되도록 제한될 수 있다(예를 들어, 64-bit 성분으로, 그러한 비트 유효성 범위는, 예컨대 64, 128, 192, 256, ... 등의 폭을 가질 수 있다). 상기 비트 유효성의 범위의 폭은 1 비트 폭의 단계에서 연속으로 변할 수도 있다.
프로그래머가 대응하는 HPA 값의 유효성을 세팅할 수 있도록, 앵커 값(들) (메타 데이터 내에서)을 프로그램할 수 있다. 그러한 앵커 값은 다양한 상이한 방식으로 비트 유효성을 지정할 수 있다. 일 예로는 각 벡터 성분의 하위 경계 비트 유효성을 지정하는 것이다. 따라서, 각각의 벡터 벡터 성분은 그 성분 내의 최하위 비트의 유효성을 나타내는(앵커링(anchoring)하는) 메타데이터와 함께 비트 유효성의 전체 범위 내 값의 유효 비트의 부분을 나타내는 정수 값을 포함할 수 있다. 또 다른 옵션은 그러한 앵커 값(들)이 전체 HPA 수의 비트 유효성의 하위 경계와 함께 비트 유효성 범위의 전체 폭을 지정한다는 것이다. 다른 옵션은 앵커 값(들)이 비트 유효성 범위의 하위 경계 및 상위 경계를 지정하는 데이터를 포함할 수 있다는 것이다. 비트 유효성 범위의 하위 경계를 포함하는 앵커 값(들)과 함께 고정된 폭 성분으로 알려진 성분들의 수와 같은 또 다른 변형 또한 가능하다.
도 3은 2배 정밀도 부동 소수점으로 표현 가능한 값의 범위와 HPA 수의 유효성 범위 사이의 관계를 개략적으로 나타낸다. 2배 정밀도 부동 소수점 수의 경우, 지정될 수 있는 비트 값의 범위는 약 2-1074에서 2+1023까지 확장된다(정규 이하는 카운팅하지 않음).
기술한 바와 같이, HPA 수는 부동 소수점 값을 이용하여 표현 가능한 비트 유효성 범위 내의 비트 유효성의 윈도우로 고려될 수 있는 프로그램 가능한 비트 유효성 범위를 갖는다. 이러한 프로그램 가능한 비트 유효성은, 하위 경계 및 상위 경계에 의해 지정될 수 있고, 하위 경계 및 상위 경계의 값에 따라, 부동 소수점 값에 의해 제공되는 비트 유효성의 범위를 따라 슬라이드(slide)하는 것으로 고려될 수 있다. 윈도우(window)의 폭 뿐만 아니라 시작점 및 종료점은 비트 유효성을 지정하는 프로그램 가능한 메타데이터(앵커 값을 포함하는)의 적절한 값에 의해 지정될 수 있다. 따라서, HPA 수는 수행될 계산과 일치하도록 프로그래머가 선택한 형식을 가질 수 있다.
HPA 형식은 2개 이상의 값을 빠르고 정확하면서 연합적으로 가산할 수 있게 하는 한편, 넓은 유효성 범위에 걸쳐 값을 표현할 수 있게 한다. HPA 값은 단순히 2의 보수이기 때문에, 정수 가산기를 이용하여 가산될 수 있고, 값이 가산되는 순서에 상관 없이 결과가 동일하기 때문에 일련의 가산을 병렬 처리할 수 있게 하는 부동 소수점 연산과 같이 반올림 또는 정규화가 필요치 않다. 그럼에도 불구하고, HPA 값의 프로그램 가능한 유효성을 지정하는 메타데이터를 정의함으로써, 동등한 부동 소수점 값의 전체 유효성 범위가 여전히 표현될 수 있지만, 매우 넓은 가산기를 제공할 필요가 없고(예컨대, 2의 보수를 가산하기 위해, 2배 정밀도 부동 소수점 값으로 표현할 수 있는 전체 범위에 걸쳐 2098-bit 가산기를 필요로 함), 대신 프로그램 가능한 유효성은 보다 작은 가산기가 더 큰 범위 내에서 프로그램 가능한 비트 유효성의 특정 윈도우에 집중할 수 있게 한다. 실제로, 대부분의 계산에서는 2배 정밀도 부동 소수점에 사용할 수 있는 전체 범위의 유효성을 요구하지 않는다. 예를 들어, 아-원자(sub-atomic) 문제는 매우 작은 값을 누적할 수 있고, 천문학적 문제는 매우 큰 값을 누적할 수 있지만, 은하들간 거리에 양성자의 폭을 가산하는 것은 일반적으로 유용하지 않다. 고성능 컴퓨팅의 경우에서 조차, 대부분의 누적은 제한된 범위에서 일어난다.
통상적으로, 프로그램을 작성하는 프로그래머는 유용한 결과가 도출될 것으로 예상되는 범위의 값을 알 수 있다(응용 프로그램에 따라 다름). 그 프로그래머는 특정 합계에 대한 모든 데이터가 260 미만의 크기를 갖고 크기가 2-50 미만인 값이 어떠한 방식으로도 합계에 영향을 미치지 않으므로, 이러한 경우 128 비트의 전체 데이터 폭 및 최하위 유효 비트의 유효성을 -50으로 지정하는 앵커 값을 갖는 HPA 형식을 이용하여 데이터를 가산함으로써, 이러한 특정 애플리케이션에 대한 수가 소정의 순서로 연합적으로 가산될 수 있다.
따라서, 앵커 값을 이용하여 결과가 계산되는 유효 범위를 제한하기 위해, 상대적으로 작은 일부의 하드웨어가 프로그램 가능하게 규정된 윈도우 내에서 결과를 계산할 수 있다. 가산이 규정된 범위의 상위 유효성 경계 이상의 오버플로우 또는 하위 유효성 경계 이하의 언더플로우를 야기하면, 예외가 발생하여 이는 프로그래머가 잘못된 유효성 경계를 규정했다고 알리고 그 결과에 대한 유효성의 다른 윈도우를 규정하기 위해 다른 메타데이터(예를 들어, 다른 앵커 값 또는 HPA 값의 다른 전체 크기)로 처리가 반복되어야 함을 알릴 수 있다.
2개의 HPA 값을 가산하거나 감산할 때, 앵커 값은 두 HPA 값에서 동일하고 그 결과 또한 동일한 앵커 값을 갖는다. 이는 2개의 값의 가산 또는 감산이 상기 결과의 정규화로 인해 입력들 중 어느 하나에 상이한 지수를 갖는 결과를 야기한다. 그러한 입력들에 상이한 앵커 메타데이터가 제공되면 그것들은 그 결과의 필요한 대상의 유효성 범위와 정렬되도록 이동된다. 입력이 HPA 이외의 표현(예컨대, 정수 또는 부동 소수점)으로 제공되면, 그것들은 동일한 앵커 값을 공유하는 HPA 값으로 변환되고, 동일한 앵커 값을 갖는 결과를 형성하도록 가산된다. 따라서, HPA 레지스터에 대한 메타데이터는 그 레지스터에서 생성될 결과 값에 대한 대상의 유효성 범위를 규정하는 것으로 볼 수 있으며, 대상의 유효성 범위를 벗어나는 비트는 입력 값의 실제 유효성과 상관 없이 하드웨어에 의해 계산되지 않을 것이다.
RHPA 표현
HPA 형식은 부동 소수점에 비해 훨씬 빠른 가산을 가능하게 하지만, HPA 값의 크기가 상대적으로 커지면 정수 연산으로 2개의 HPA 값을 가산하는 것이 상대적으로 느려질 수 있다. 예를 들어, HPA 형식은 다수의 레인(lane)에 걸친 피연산자의 가산을 필요로 할 수 있는 데, 이는 더 큰 벡터 구현에 있어 바람직하지 않을 수 있다. 예를 들어, 2개의 256-bit 또는 512-bit 값의 가산은 한 레인에서 다음 레인으로 입력되는 캐리를 수용하도록 각 64-bit 레인의 가산이 순차적으로 수행되기 때문에 다소 시간이 걸릴 수 있다.
그러한 가산은 도 4에 나타낸 중복 고-정밀도 앵커(RHPA) 형식을 이용하여 더 빠르게 수행될 수 있다. HPA 형식에서와 같이, RHPA 수는 처리 회로(14)가 각 요소의 비트의 유효성을 확인할 수 있게 하는 앵커 값을 규정하는 메타데이터를 갖는 가변의 요소의 수를 포함한다. 다시, 상기 앵커 값은 프로그램 가능할 수 있다. RHPA의 경우, 메타데이터는 HPA에 대해 위에서 설명한 소정의 방식으로 각 요소의 유효성을 확인할 수 있다. 그러나, RHPA 형식에서, 그러한 수치 값은 벡터의 인접한 레인들이 중첩되는 유효성의 비트를 포함하는 중복 표현을 이용하여 표현되며, 이는 계산되는 레인의 수에 관계 없이 일정-시간 가산을 가능하게 한다. 리던던시(redundancy)는 더 짧은 가산기에 의해 그리고 가산기들간 캐리 정보를 전파하지 않고 덧셈, 누적 및 곱셈과 같은 연산을 수행할 수 있게 한다. 이는 데이터 값의 처리 속도를 크게 높인다.
도 4의 부분 (1)에 나타낸 바와 같이, RHPA 표현을 이용하는 M-bit 데이터 값은 각각이 N비트를 포함하는 각각의 벡터 레인(성분, 요소 또는 부분이라고도 함)으로 분할되며, 여기서 N<M이다. 이러한 예에서 N은 64비트이지만, 이것은 단지 일 예이고, 다른 레인 크기(예컨대, 32 또는 128비트)도 가능하다. 각각의 N-bit 부분은 특정 수(V)의 중첩 비트들과 N-V 비-중첩 비트들로 분할된다. 이러한 예에서, 중첩 비트 수(V)는 각각의 N-bit 부분에 대해 동일하지만, 이하의 도 25에 나타낸 바와 같이, 상이한 수의 중첩 비트를 갖는 상이한 N-bit 부분을 가질 수도 있다.
정수 또는 부동 소수점 수가 RHPA 형식으로 변환되면, 일부의 비-중첩 비트는 원래의 정수 또는 부동 소수점 수로부터 맵핑된 비-부호 정보로 채워지며, 반면 중첩 비트는 부호 비트로 채워진다. 레인-기반 가산 및 감산 목적을 위해, 각각의 레인은 N-bit 부호화된 2의 보수(필요에 따라 비-중첩 부분에서 중첩 부분으로 전파되는 캐리를 갖는)로 동작하지만, 다수의 레인 관점에서 보았을 때, 레인들은 더 큰 P-bit 수의 중복 혼합-부호 표현을 형성한다. 도 4의 예에서는 4개의 레인이 있으므로 M=256이지만, 레인의 수는 하드웨어 구현 및/또는 주어진 RHPA 수에 대해 정의된 메타데이터에 따라 달라질 수 있다.
도 4의 부분 (2)는 부분 (1)에서 나타낸 RHPA 수의 각 비트의 상대적인 유효성을 나타낸다. 최하위 유효 레인의 중첩 비트 V[0]은 다음 레인의 비-중첩 비트 NV[1]의 V 최하위 유효 비트와 동일한 유효성을 갖는다. 마찬가지로, 중첩 비트 V[1] 및 V[2]는 각각 비-중첩 비트 NV[2] 및 NV[3]의 V 최하위 유효 비트와 동일한 유효성을 갖는다. 레인들간의 유효성의 중첩은 RHPA 수가 전체적으로 저장된 비트 M의 총 수보다 작은 P-bit 값을 나타내는 것을 의미한다. V가 각각의 N-bit 부분(상위 부분을 제외하고)에서 동일하면,
Figure pct00006
이다. 보다 일반적으로, 상이한 레인이 상이한 수의 중첩 비트를 가질 수 있으면, P=M-∑V이며, 여기서 ∑V는 상위 레인 이외의 각 레인에서의 중첩 비트 수의 합계이다.
P-bit 값의 각각의 중첩 부분에서, 그 P-bit 수의 실제 비트 값은 하위 레인의 중첩 비트(V)와 상위 레인의 비-중첩 비트(NV)의 합으로 표현된다(하위 레인의 중첩 비트와 비-중첩 비트를 가산함으로써 야기될 수 있는 소정의 캐리를 고려함). 따라서, RHPA 값을 동등한 정수 값으로 변환하는 한 방식은 도 4의 부분 (3)에 나타나 있으며, 여기서 각 레인의 중첩 비트는 부호-확장되고 상위 레인의 비-중첩 비트에 가산된다(각 레인 가산 후, 저차에서 고차로 중첩 비트를 조정).
RHPA 수는 M 비트의 RHPA 값을 이용하여 주어진 P-bit 수를 나타내기 위한 하나 이상의 방식이 있다는 점에서 중복된다. 중첩 비트의 수가 V = 4인 예에서, 2개의 최하위 레인에서의 중첩을 고려하는 예에서, P-bit 값의 대응하는 비트가 1111이면, 이것을 나타내기 위한 한 방식은 하위 레인의 중첩 비트 V[0] = 0b0000 및 다음 최상위 레인의 비-중첩 비트 NV[1] = 0b1111를 갖는 것이다. 그러나, 동일한 값을 나타내는 다른 방식은 V[0] = 0b0101 및 NV[1] = 0b1010이거나 또는 V[0] = 0b1111 및 NV[1] = 0b0000일 수 있다.
최상위 레인의 중첩 비트 V[3]은 중첩할 상위 차수 레인이 없기 때문에 실제로는 중첩 비트가 아님에 유의하자. 따라서, 종종 고차 레인을 모든 비-중첩 비트를 갖는 것으로 간주하는 것이 유용할 수 있으며, 이하의 예들 중 일부는 이것을 보여준다. 따라서, 일부의 경우에, 상위 레인은 전체적으로 비-중첩 비트로 형성되는 것으로 간주될 수 있다(따라서 P-bit 값의 최상위 유효 비트가 전체적으로 상위 레인의 M-bit 값의 최상위 유효 비트에 대응한다).
그러나, 다른 실시예들에서, RHPA에 의해 표현된 P-bit 수치 값의 최상위 비트가 상위 레인의 비-중첩 부분(중첩 부분을 제외한)의 최상위 유효 비트에 대응되도록, 상위 레인 또한 중첩 비트를 갖는 것으로 취급하는 것이 바람직할 수 있다. 이러한 접근방식은 각각의 레인을 좀더 대칭적인 방식으로 처리할 수 있게 하므로 회로 구현이 더 쉬워질 수 있다(다른 레인과 비교하여 상위 레인을 처리하는 방식을 수정하지 않아도 됨).
도 4에 나타낸 바와 같이 중복 형식의 P-bit 수치 값을 표현함으로써, 주어진 레인에서 비-중첩 부분들의 가산으로부터 소정의 캐리들이, 다음 레인을 통해 캐리를 전파할 필요 없이, 동일한 레인의 중첩 부분 내에 수용될 수 있기 때문에, 다수의 RHPA 수들이 레인들 사이에 캐리 없이 가산될 수 있다. 각 레인에서 수행된 가산은 단순히 N-bit 2의 보수 가산을 수행함으로써 가산되는 2개 이상의 N-bit 부호화 정수를 제공하는 데, 이는 다른 레인의 대응하는 N-bit 가산과 완전히 독립적이다. 이것은, 레인의 수에 관계 없이 N-bit 가산을 수행하는 데 걸리는 시간 내에 전체 M-bit 값들이 가산될 수 있도록, 각각의 N-bit 가산이 병렬로 수행될 수 있다는 것을 의미한다.
실제로, 적어도 2V-1-1과 같은 RHPA 수들은 레인들간 캐리 없이 가산될 수 있으며, 그러한 비-중첩 부분들의 가산으로부터의 소정의 캐리들이 중첩 부분에서 수집된다(상이한 중첩 비트의 수를 갖는 레인이 있는 경우, 이러한 표현에서의 V는 중첩 비트를 갖는 소정의 주어진 레인에서의 중첩 비트의 최소 수일 것이다). (2V- 1)번째 가산은 레인들간 캐리를 생성할 수 있는 최초의 가산이다(상위 중첩 비트가 부호 비트이기 때문에, 레인 오버플로우는 제2의 최상위 유효 중첩 비트로부터 양의 오버플로우 또는 음의 오버플로우가 있을 때 발생하고, 모든 비트가 0인 RHPA 수에서 시작할 때 최소 2V-1 추가 가산이 수행된다). 예를 들어, V=14이면, 단일의 레인으로부터 오버플로우의 위험이 있기 전에 적어도 8191개의 RHPA 수가 누적기에 가산(즉, 총 8192개의 값이 가산된)될 수 있게 한다. 이는 특히 많은 입력 값을 가산하는 것이 일반적인 고성능 컴퓨팅 분야에 유용하다. 실제로, 모든 가산이 오버플로우 부분으로 캐리를 발생시키지 않을 때가 있기 때문에, N-bit 부분의 상위 비트로부터의 오버플로우 없이 2V-1 이상의 누적이 가능하다.
때때로, N-bit 레인의 상위 비트로부터 오버플로우의 위험(또는 실제 오버플로우)을 야기하도록 충분한 가산이 수행되면, 더 많은 캐리를 수용하기 위해 중첩 부분의 비트 공간을 효과적으로 비우도록, 중첩 비트가 주어진 RHPA 값의 중첩 비트보다 작은 크기를 나타내는 제2 RHPA 값으로 주어진 RHPA 값을 변환시키도록 중복 감소 동작이 수행될 수 있다. 또한, RHPA 수를 다시 정수 또는 부동 소수점과 같은 또 다른 형식으로 변환할 때, 그와 같은 중첩 감소가 또 수행될 수 있다. 그러나, 실제로, 그와 같은 중첩 감소 동작은 종종 필요치 않으며, 따라서 N-bit 가산에 걸리는 시간 내에 다수의 입력의 M-bit 가산이 수행되게 함으로써, RHPA는 처리 시간을 크게 절약할 수 있다. 용어 "중첩 감소"는 모든 레인의 중첩 비트를 더 작은 크기로 감소시켜야 하는 것을 의미하지는 않는다. 적어도 하나의 레인은 크기가 감소된 중첩 비트이면 충분하고, 이는 일부 형태의 중첩 감소(예를 들어, 이하에서 논의되는 도 13의 제한된-중복 예)가 주어진 레인에서 중복 비트를 증가시킬 수 있게 한다. 중첩 감소 동작의 몇 가지 예가 이하에 기술되어 있다.
도 5는 RHPA 값에 대해 규정된 메타데이터의 예를 나타낸다. 이러한 예에서, 그러한 메타데이터는 RHPA 값의 대응하는 레인에서의 최하위 비트의 유효성(또는 '가중치')을 각각 지정하는 다수의 앵커 요소 w[i]를 포함하는 앵커 벡터, 및 각각의 레인에서의 중첩 비트의 수를 지정하는 중첩 크기 값 V을 포함한다.
일부의 경우, RHPA 수에 대한 메타데이터는 또한 총 비트의 수 M을 확인함으로써 명시적으로 또는 암시적으로 RHPA 수에 포함된 N-bit 레인의 수를 확인할 수 있다(이로부터, 레인 크기 N, 레인의 수가 결정될 수 있다).
연속의 레인에서 가중치 w[i], w[i+1]가 레인 크기 N에 따라 달라지는 HPA 형식과 달리, RHPA 값에 대해, 연속의 레인에서 가중치 w[i], w[i+1]는 NV(레인 크기에서 중첩 비트의 수를 뺀)에 따라 다르다. 따라서, 처리 회로(14)는 메타데이터에서의 중첩 크기 및 앵커 벡터로부터 RHPA 값 내의 각각의 비트의 유효성을 확인할 수 있다. 앵커 값 w[i]를 갖는 주어진 레인의 주어진 비트 j의 유효성(j = 0에서 N-1)은 w[i]+j에 의해 주어진다. 2개 이상의 RHPA 수의 가산 동안, 앵커 값 또는 중첩 크기를 고려할 필요는 없으며, 그 수는 결과를 형성하기 위해 간단히 가산될 수 있다. RHPA 형식과 정수 또는 부동 소수점과 같은 다른 형식들간 변환시 앵커 값이 프로세서에 의해 사용되며, 다른 형식으로/다른 형식으로부터 변환 또는 중첩 전파를 수행할 때 중첩 크기 값(V)이 참조된다.
도 5는 앵커 벡터로부터 분리된 중첩 크기 값 V를 나타내지만, 다른 예에서 그러한 중첩 크기(V)는 앵커 벡터 자체에 지정될 수 있다. 예를 들어, RHPA 값을 유지하는 데 이용된 레지스터(12)와 동일한 크기의 SIMD(단일 명령 다중 데이터) 벡터 레지스터는 메타데이터를 저장하기 위해 할당될 수 있으며, 상기 벡터 레지스터의 각각의 레인은 상기 중첩 크기(V) 및 대응하는 레인의 처리를 위한 대응하는 앵커 값 w[i]을 유지한다.
또한, 이들 파라미터가 제어 레지스터에 정의되는 것은 필수적이지 않다. 일부 시스템에서, 상기 중첩 크기(V)는 주어진 하드웨어 구현에 대해 고정될 수 있으며, 사용자에 의해 프로그램될 수 없다. 그러나, 프로그래머가 그 중첩 크기(V)를 지정할 수 있게 하는 것은, 레인들간 캐리를 전파하지 않고 수행될 수 있는 연속적인 가산의 수를 주어진 크기 P의 값을 가산하는 데 필요한 레인의 총 수와 교환하는 데 유용할 수 있다. 일반적으로, 중첩 크기(V)가 클수록, 중첩 전파 없이 수행될 수 있는 가산이 더 많아 지지만, 이는 다수의 주어진 크기 P에 필요한 레인이 더 많아지게 할 것이다. 중첩 크기(V)를 감소시킴으로써, 다수의 주어진 크기가 더 적은 레인을 이용하여 가산될 수 있으며, 이는 광범위한 벡터 프로세서의 각각의 서브세트의 레인들을 이용하여 2개 이상의 분리된 RHPA 값 세트를 병렬로 가산함으로써 성능을 절감할 수 있게 하나(이하의 예에 기술된 도 21 내지도 24를 참조), 이러한 경우 중첩 경계에 더 일찍 도달될 것이고 중첩 비트를 다음 레인으로 전파하는 것이 필요해지기 전에 더 적은 가산이 수행될 수 있다.
다른 예들에서, 중첩 크기(V)는 RHPA 값들의 처리를 제어하기 위한 명령의 인코딩에 지정될 수 있다. 유사하게, 앵커 벡터도 명령에서 확인될 수 있다. 일부 예들에서, 각 레인의 유효성을 개별적으로 지정하는 앵커 벡터 대신, 메타데이터는 RHPA 값의 주어진 레인 내에서 주어진 비트의 유효성을 간단히 지정할 수 있으며, 다른 레인들의 유효성은 그 비트 유효성으로부터 이끌어질 수 있다. 예컨대, 최하위 레인의 비트 유효성만이 지정되면, 다른 레인의 유효성은 최하위 레인의 유효성에 N-V의 배수를 가산함으로써 계산될 수 있다.
도 6은 RHPA 형식을 이용하여 누적 연산을 가속화하는 예를 나타내는 데, 이는 특히 수천 또는 수백만의 상이한 값들이 함께 가산되어야 하는 고성능 컴퓨팅에서의 상대적 공통 연산이다. 누적기 레지스터(30)는 지금까지 가산된 모든 값의 합계를 나타내는 RHPA 형식에 누적기 값을 저장하기 위해 제공될 수 있다. 각 사이클(cycle)에서, 입력 피연산자(32)는 RHPA 누적기 값에 가산하도록 제공된다. 일부 명령의 경우, 입력 피연산자(32)는 명령에 의해 직접 지정될 수 있다. 다른 타입의 명령들의 경우, 입력 피연산자(32)들은 명령에 의해 직접 지정된 피연산자들에 적용되는 일부의 다른 처리 동작의 결과일 수 있다(예를 들어, 곱셈-가산 명령은 2개의 값들을 곱함으로써 입력 피연산자(32)를 생성할 수 있다). 그러한 입력 피연산자(32)는 정수 값 또는 부동 소수점 값일 수 있다.
입력 피연산자(32)는 RHPA 수(36)의 대응하는 N-bit 부분들 A[0] 내지 A[3]을 생성하는 다수의 레인 변환 유닛(34)들에 제공된다. 각각의 레인 변환 유닛(34)은 RHPA 누적기 값과 관련된 메타데이터의 앵커 벡터의 대응하는 성분에 의해 정의된 바와 같이 그 레인의 유효성 w[i]를 수신하고, 이를 이용하여 입력 피연산자(32)의 비트(부동 소수점 값의 경우, 유효수의 비트)를 그 레인 내의 대응하는 유효성의 비트에 맵핑한다. 일부 레인의 경우, 그러한 레인의 소정 비트의 유효성에 대응하는 입력 피연산자(32)에 비트가 존재하지 않을 수 있으므로, 그와 같은 레인은 전체적으로 부호 비트(입력 피연산자(32)가 양이면 0, 입력 피연산자(32)가 음이면 1)로 채워질 수 있다. 각 레인의 중첩 비트는 부호 비트로 세팅된다. 정수 또는 부동 소수점 값의 RHPA로의 변환은 이하 도 10 및 11에 상세히 기술될 것이다.
그러한 생성된 RHPA 값(36)의 각각의 N-bit 부분은 각각의 레인에 대해 병렬로 제공된 각각의 가산 회로 유닛(38)에 의해 누적기 값의 대응하는 부분에 가산된다. 각각의 가산 회로 유닛(38)은 누적기의 이전 값을 교체하도록 누적기 레지스터(30)의 대응하는 부분에 다시 기록되는 결과의 대응하는 N-bit 부분을 생성하기 위해 다른 가산 회로 유닛(38)들에 의해 병렬로 독립된 N-bit 부호화 2의 보수 가산을 수행한다. 그러한 가산은 독립적이며, 레인들간 전달되는 캐리는 없다.
누적 연산을 여러 번 반복함으로써, 일련의 입력 피연산자들을 빠르고, 정확하게 그리고 연관적으로 함께 가산할 수 있으며, 그러한 입력 피연산자가 입력되는 순서는 결과에 영향을 미치지 않을 것이다. 이것은 누적이 더 빨리 수행될 수 있다는 것을 의미한다. 예를 들어, 도 6에 나타낸 2개 이상의 예시의 회로가 병렬로 제공되어 가산될 어레이의 값의 각각의 서브세트를 가산하여 다수의 부분 누적기 값을 형성한다. 그 다음 각각의 부분 누적기 값이 최종 결과를 형성하기 위해 가산될 수 있다. 이는 부동 소수점의 비-연관 특성으로 인해 부동 소수점 연산에서는 불가능하다.
그러한 최종 누적 결과는 RHPA 값으로서 다른 처리를 위해 누적기 레지스터(30)에 남겨지거나, 또는 대체의 수 표현으로 다시 변환될 수 있다. RHPA를 정수 또는 부동 소수점으로 변환하는 기술이 이하 기술된다.
일부의 예들은 본원에서 유용하다. 설명의 편의를 위해, 4개의 8-bit 레인으로 분리된 32-bit 수로 이루어지는 작은 RHPA 형식을 고려한다. 이들 예에서 V=4이므로, 각각의 레인은 4개의 비-중첩 비트 및 4개의 중첩 비트를 갖는다. FP 수를 이러한 형식으로 변환하는 대신 16-bit 부호-크기 정수를 입력으로 사용한다. 또한 0의 암시적 앵커를 가정하므로, 모든 정수 값에 관심을 갖는다(만일 초기 값이 FP 형식일 경우, 소정의 분수 입력 비트가 있으면 그것들은 버려질 수 있다. 그러나, 이것은 부호 크기 정수 입력에서는 가능하지 않다).
예 1: 부호 크기 16진수 정수 123a를 RHPA 형식으로 변환한다고 가정한다. 앵커가 0이므로, 저차 레인의 비-중복 비트는 가중치가 20 내지 23인 입력의 부분, 즉 a=1010(2진수)이 포함된다. 그러한 수는 양이므로, 저차 레인의 중첩 비트는 0으로 이진수 0000_1010의 저차 레인 값을 제공한다. 유사하게, 다음 레인은 24 내지 27의 가중치를 갖는 입력의 부분(이 경우 3=1111(2진수))을 포함한다. 모든 레인을 따라 진행하면(모두 병렬로 계산), RHPA 수를 얻는다:
0000_0001 0000_0010 0000_0011 0000_1010
예 2: 923a를 RHPA로 변환하는 것은 유사하나(이것은 부호-크기 형식의 -123a 임), 부호 비트가 세팅되었으므로 각각의 레인은 앞의 예에서 수행한 것의 2의 보수를 얻는다:
1111_1111 1111_1110 1111_1101 1111_0110
예 3: 123a에 7fff(최대 가능한 양수 입력)의 가산은 중첩 비트의 유용성을 나타낸다. 여기서 rhpa는 작은 RHPA 수들 중 하나에 16-bit 부호 크기 수를 가산하는 작은 프로그램이다. 그러한 가산은 중첩 비트로 인해 레인들간 캐리가 없는 것으로 쉽게 처리된다.
$ rhpa 0102030a 7fff
0000_0001 0000_0010 0000_0011 0000_1010
+ 0000_0111 0000_1111 0000_1111 0000_1111
= 0000_1000 0001_0001 0001_0010 0001_1001
예 4: 20f0 내지 923a의 가산은 상이한 레인들이 상이한 부호들을 갖는다는 것을 나타낸다: 레인들 중 2개는 양이고 2개는 음이다.
$ rhpa fffefdf6 20f0
1111_1111 1111_1110 1111_1101 1111_0110
+ 0000_0010 0000_0000 0000_1111 0000_0000
= 0000_0001 1111_1110 0000_1100 1111_0110
다른 예들이 이하의 부록 A에 나타나 있다.
규칙적 HPA보다 더 좁은 가산 회로 유닛으로 값들을 가산하게 하는 것 외에, RHPA는 또한 동시에 다수의 값을 누적할 수 있기 때문에 훨씬 더 빠른 잠재력을 갖는다. 규칙적 HPA의 경우, 주어진 매우 넓은 가산기가 RHPA로 한 번에 2개의 HPA 값을 가산할 수 있지만, 중복 비트는 레인 오버플로우 걱정 없이 누적기에 최대 2V-1-1 값의 가산을 수용할 수 있기 때문에, 이는 다수의 값의 가산이 다수의 순차 가산을 필요로 하지 않고 모든 값을 동시에 가산하는 단일 연산으로서 수행될 수 있다는 것을 의미한다.
예를 들어, 도 7은 j개의 RHPA 값의 가산을 나타내며(j는 3보다 크거나 같음), 여기서 각각의 가산 회로 유닛(42)은 j개의 분리된 N-bit 값을 2개의 N-bit 항으로 감소시킬 수 있는 j에서 2 감소 트리(44; 월리스 트리(Wallace tree), 곱셈기에 사용된 것과 유사함), 및 뒤이어 이어진 N-bit 결과 값(R)을 생성하기 위해 2개의 N-bit 항을 가산하기 위한 캐리 전파 가산기(46)를 포함한다. 예컨대, j는 4, 8 또는 16이 될 수 있고, 한 번에 하나의 값을 순차적으로 가산하는 것과 비교할 때 상당한 양의 주어진 다수의 데이터 값을 가산하는 데 걸리는 시간을 줄일 수 있다. 이것이 RHPA에서 가능한 이유는 중첩 비트가 교차 레인 경계 없이 다수의 항목을 가산할 수 있기 때문이다.
도 8에 나타낸 바와 같이, 단일 연산으로 가산되는 RHPA 값은 입력 벡터에 지정된 각각의 입력 값으로부터 이끌어질 수 있다. 이러한 예에서, 입력 벡터의 각각의 요소는 각각의 부동 소수점 값 FP0-FP3이다. 프로세서는 도 6의 레인 변환 유닛에서와 같이 각각 기능하지만, 상이한 부동 소수점 입력 FPj 또는 앵커 가중치 w[i]를 수신하는 레인 변환 유닛(34)의 어레이를 갖는다. 일반적으로, 레인 변환 유닛(34-ji)은 원래 입력 벡터의 부동 소수점 값 FPj에 대응하는 RHPA 값의 i 번째 요소를 생성한다. 예를 들어, 대응하는 RHPA 값 RHPA0의 각각의 요소 RHPA0[0] 내지 RHPA0[3]을 생성하는 제1행의 각각의 레인 변환 유닛(34-00 내지 34-03)에 부동 소수점 값 FP0이 제공된다. 유사하게, 다른 행들은 부동 소수점 값 FP1 내지 FP3에 대응하는 RHPA 값 RHPA1-RHPA3의 요소들을 생성한다. 각각의 생성된 RHPA 값의 대응하는 요소는 이후 가산 회로 유닛에 의해 가산되어 누적기 값의 대응하는 결과를 생성한다. 각각의 레인에 대한 처리는 다른 레인들과 완전히 병렬로 수행된다.
도 8은 입력 벡터의 부동 소수점 값의 수가 RHPA 값의 레인의 처리 수와 같은 예를 나타내지만, 이것은 필수적인 것은 아니다. 예를 들어, 8-요소 부동 소수점 벡터는 각각의 RHPA 값의 대응하는 요소를 가산하는 4개 레인의 처리로 8개의 4-요소 RHPA 값으로 맵핑될 수 있다. RHPA 값 내의 레인의 수는 입력 벡터의 크기가 아닌 RHPA 값의 메타데이터에 의존한다.
또한, 설명을 쉽게하기 위해 도 7 및 도 8에는 나타내진 않았지만, 일부의 경우, 가산되는 RHPA 값 중 하나가 누적기 값 R 자체의 이전 값이 될 수 있다.
도 9는 RHPA 형식을 이용하여 누적을 수행하는 방법을 나타낸다. 단계 480에서, 하나 이상의 다음 입력 값들이 수신된다. 이들 입력 값은 명령에 의해 직접 지정된 피연산자이거나, 또는 예를 들어 곱셈 결과와 같은 명령에 따라 수행된 일부 다른 처리의 결과일 수도 있다. 도 7 및 도 8에 나타낸 바와 같이, 일부의 경우에는 하나 이상의 입력 값이 이 시점에서 수신될 수 있다. 단계 482에서, 수신된 입력 값(들)은 RHPA 형식으로 변환된다. 그러한 변환의 예들은 도 10 및 도 11을 참조하여 이하에서 설명될 것이다. 단계 484에서, 병렬 가산 회로 유닛(38, 42)들은 입력 값(들) 및 누적기 값의 대응하는 N-bit 부분들의 병렬 N-bit 가산을 수행하여 결과의 대응하는 N-bit 부분을 생성하고, 그 결과는 누적기 레지스터(30)에 기록된다. 각각의 N-bit 가산은 다른 가산들과 완전히 병렬로 수행될 수 있는 표준 2의 보수 N-bit 가산일 수 있다. 대안으로, 2개 이상의 입력 값들이 누적기에 가산될 때, N-bit 가산은 결과의 대응하는 N-bit 부분을 생성하기 위해 월리스 트리를 이용한 2개 항의 감산 및 캐리-전파 가산기를 이용한 2개 항의 가산을 포함할 수 있다.
단계 486에서, 중첩 전파 조건이 충족되는지가 결정된다. 이하 기술되는 바와 같이, 예를 들어, 소정 수의 누적이 수행되거나, 특정 레인의 중첩 비트가 주어진 값에 도달하거나, 또는 단계 484에서 수행된 N-bit 가산 중 어느 한 가산 동안 주어진 레인으로부터 실제 오버플로우가 발생할 때, 중첩 전파 조건이 충족되는 것으로 간주될 수 있다. 그러한 중첩 전파 조건이 충족되면, 단계 488에서 중첩 전파 동작이 중첩 비트를 어느 한 레인에서 다음 레인으로 전파하도록 누적기 값에서 수행되어, 주어진 레인으로부터의 오버플로우 가능성을 감소시킨다. 중첩 전파 동작의 다양한 예가 이하에서 설명된다. 중첩 전파 동작의 결과는 레인들간의 오버플로우 가능성을 감소시키면서 다른 누적들이 수행될 수 있도록 누적기 레지스터에 다시 기록된다. 한편, 중첩 전파 조건이 만족되지 않으면, 단계 488은 생략된다. 단계 490에서, 고려해야 할 입력 값들이 더 있는지의 여부가 결정되고, 그렇다면 방법은 단계 480으로 되돌아 간다. 그렇지 않다면, 그 방법은 종료되거나, 또는 선택적으로 단계 492에서 최종 누적기 결과가 부동 소수점, 고정 소수점 또는 정수와 같은 다른 표현으로 변환될 수 있다. 이러한 변환을 수행하는 기술들이 도 17 내지 도 19를 참조하여 이하에서 설명된다.
도 6-8은 RHPA 형식으로 값들에 대한 가산을 수행하는 예를 나타내지만, 다른 연산도 수행될 수 있다. 예를 들어, 보다 일반적으로, 처리 회로(14)는 또한 RHPA 형식으로 결과 값의 대응하는 N-bit 부분들을 생성하도록 2개 이상의 RHPA 값의 대응하는 N-bit 부분의 함수를 계산하기 위해 독립된 N-bit 연산을 병렬로 수행하기 위한 다수의 연산 회로 유닛을 가질 수 있다. 예를 들어, 각각의 N-bit 연산은 가산 또는 감산, 곱셈, 논리 연산(예를 들어, AND, OR, NOR, XOR 등), 갈루아 필드(Galois field) 연산 등, 또는 2개 이상의 그와 같은 연산의 조합을 포함할 수 있다. RHPA 형식을 이용하면 N-bit 연산의 단계가 가능해지므로, 동일한 레인 내에 캐리가 수용되므로 긴 값들의 처리 속도를 높일 수 있다.
RHPA 표현으로 변환
도 10 및 11은 부동 소수점 값을 RHPA 값으로 변환하는 예를 나타낸다. 도 10에 나타낸 바와 같이, 그러한 변환은 본질적으로 부동 소수점 값의 유효수 F의 비트를 수행될 RHPA 계산을 위해 메타데이터에 정의된 앵커 값 및 부동 소수점 값의 지수 E에 따라 하나 이상의 레인에 걸친 RHPA 값의 대응하는 비-중첩 비트로 맵핑한다. 부동 소수점 값이 음이면, 유효수 비트는 RHPA 비-중첩 비트로 맵핑할 때 부정된다. 반면에, RHPA 값의 중첩 비트는 부호 비트로 채워진다. 부동 소수점 값이 양(부호 비트 S=0으로 나타냄)이면, 각 레인의 중첩 비트 V는 0이 될 것이고, 부동 소수점 값이 음(부호 비트 S=1)이면, 중첩 비트 V는 1로 세팅된다.
도 11은 변환 동작을 보다 상세하게 나타낸다. 도 11은 RHPA 값의 단일의 N-bit 레인을 생성하기 위한 처리 동작을 나타낸다. 전체 RHPA 값을 생성하기 위해, 도 11에 나타낸 동작이 각 레인에 대해 수행될 것이다(비록 직렬 구현 또한 이용될 수 있지만, 바람직하게는 병렬로). 따라서, 도 11은 예를 들어 도 6 또는 도 8에 나타낸 단일의 레인 변환 유닛(34)의 동작에 대응한다.
도 11에 나타낸 바와 같이, 저장된 분수 F는 부동 소수점 값이 정규적이고 0이 아닌 경우 1과 같고, 부동 소수점 값이 준정규적이거나 또는 0인 경우 0과 같은 암시 비트 50을 포함하여 실제 유효수로 확장된다. 또한 실제 유효수(1.F 또는 0.F)는 최상위 유효 끝에서 '0'과 같은 N-V 비트로 채워진다. 결과의 값은 왼쪽 시프터(52; shifter)에 입력되고, 그 왼쪽 시프터는 비트 위치의 수(Lshift)만큼 값을 왼쪽 이동(Lshift)한다. 그러한 이동 양 Lshift는 변환되는 부동 소수점 값의 지수 E 및 처리되는 특정 레인에 대한 레인 앵커 값 w[i]에 기초하여 계산된다.
일반적으로, Lshift는 아래와 등가인 값으로 산출되며, 여기서 Z=E-B-w[i]+1이고:
* Z≤0인 경우 Lshift=0(이것은 부동 소수점 값이 생성될 레인의 소정 비트보다 낮은 유효성인 경우)
* Z≥N-V+Fsize인 경우 Lshift=0(이것은 부동 소수점 값이 생성될 레인의 소정 비트보다 높은 유효성인 경우)
* 그렇지 않으면, Lshift=Z이다.
여기서:
* E는 부동 소수점 값의 (바이어스된) 지수이고,
* B는, 예컨대 단일 정밀도 B = 127 및 2배 정밀도 B = 1023에 사용되는 특정 부동 소수점 표현에 대한 바이어스 값이고,
* w[i]는 해당 레인의 최하위 유효 비트의 유효성을 나타내는 생성되는 현재 레인에 대한 레인 앵커 값이고,
* Fsize는 실제 유효수의 비트의 수(0 또는 1의 암시 비트를 포함하지만, N-V '0'비트는 포함하지 않음)이고, 단일 정밀도의 경우 Fsize = 24 또는 2배 정밀도의 경우 Fsize = 54이고,
* N은 레인 크기(RHPA 값의 한 레인에서의 총 비트의 수)이며,
* V는 중첩 비트의 수이다.
이러한 정확한 세트의 연산으로 이동 양이 계산되는 것은 필수적이지 않다는 것을 알아야 할 것이다 - 동일한 결과를 제공하는 소정의 연산이 이용될 수 있다. 또한, 레인 앵커 값 w[i]가 레인의 최하위 유효 비트 이외의 비트의 유효성을 나타내는 예들에서, Z에 대한 표현은 그에 따라 조정될 수 있다.
이동 결과(54)의 상위 N-V 비트가 선택된다. 0<Z<N-V+Fsize이면, 원래 유효수로부터 적어도 하나의 비트가 이러한 윈도우로 이동되었을 것이다. 이동 결과(54)의 상위 N-V 비트는 최상위 유효 끝에서 V 중첩 비트로 패딩된다. 중첩 비트는 처음에 0으로 세팅된다. 원래의 부동 소수점 값의 부호 비트 S가 0(부동 소수점 값이 양인)인 경우, 이러한 값은 현재 레인에 대해 변환된 N-bit 레인 값 60으로 출력된다. 한편, 부동 소수점 값이 음인 경우(부호 비트=1), 그 값은 62에서 부정되고(모든 비트를 반전시키고 1을 가산), 결과는 변환된 N-bit 레인 값 60으로서 출력된다.
요약하면, 그러한 앵커 값 w[i]는 현재 레인(N-V에 대응하는 레인들간 앵커의 차이가 있는)에 대해 신경 쓰는 최소 비트의 가중치를 제공한다. 레인으로 나타내는 범위 내의 적절한 유효수 비트는 시프터(52)를 이용하여 선택된다. 양수를 변환시키는 경우 중첩 비트는 0을 포함하고, 음수를 변환시키는 경우 중첩 비트를 1로 채우는 효과를 갖는 이동 결과의 N-bit 2의 보수로 레인을 채운다. 이러한 연산은 전체 RHPA 값을 생성하기 위해 각 레인마다 병렬로 수행될 수 있다.
도 10 및 11은 부동 소수점 값을 RHPA 값으로 변환하는 것을 나타낸다. 고정 소수점 또는 정수 값을 변환시킬 경우의 연산은 지수가 없고 지수 값 E가 일부 알려진 값(정수의 경우 0, 고정 값의 경우 0이 아닌 값)으로 효과적으로 고정된다는 점을 제외하면 동일하며, 원래 값 Fsize의 비트의 수는 다를 수 있다. 부동 소수점의 경우, 유효수로부터의 비트는 원래 값이 해당 레인으로 나타낸 범위와 중첩되면 N-bit 레인의 대응하는 비트로 맵핑되지만, 고정 소수점 또는 정수 값이 이미 부호화-2진 표현(FP 수의 부호-크기 표현과 반대)을 이용하는 2의 보수이기 때문에 부정은 필요치 않다.
중첩 감소
상기 나타낸 바와 같이, 레인 오버플로우에 대한 걱정 없이 적어도 2V-1 수를 가산할 수 있으며, 조건은 특정 N-bit 레인의 값이 정보를 잃는 방식으로 변경된다. 레인 오버플로우는 레인의 제2의 최상위 유효 중첩 비트로부터 캐리 아웃(carry out)이 발생할 때 일어난다. 정보 손실을 피하기 위해, 레인 오버플로우 경계 또는 그 부근에 있을 때, 필요에 따라 캐리를 더 수용하기 위해 중첩 비트의 공간을 확보하도록 사용되는 중첩 비트의 수를 감소시키기 위해 중첩 감소 동작이 수행될 수 있다. 일반적으로, 중첩 전파 동작은 제2 RHPA 값의 적어도 하나의 N-bit 부분에서의 중첩 비트가 제1 RHPA 값의 대응하는 부분에서의 중첩 비트보다 작은 크기를 나타내는 제2 RHPA 값으로 제1 RHPA 값을 변환시키는 소정의 동작을 포함할 수 있다.
중첩 감소를 수행하는 한가지 방식은 주어진 레인으로부터의 중첩 비트가 다음의 최상위 레인으로 전파되고 그 레인에서 비-중첩 비트에 가산되는 중첩 전파 동작을 수행하는 것이다. 그 중첩 비트를 다음 레인으로 전파함으로써, 선행 레인에서의 중첩 비트는 제로에 더 가깝게 푸시되며, 이는 레인 오버플로우를 야기하는 또 다른 가산의 가능성을 감소시킨다. 중첩 전파 동작을 수행하는 다양한 방식이 있으며, 그 중 3가지가 도 12 내지 도 14를 참조하여 이하 기술된다.
도 12는 주어진 RHPA 값이 각 레인의 중첩 비트가 모두 0인 RHPA 값과 관련된 "비-중복" RHPA 값으로 변환되는 중첩 전파 동작의 제1예를 나타낸다. "비-중복 중복 HPA" 값의 개념이 모순이라고 볼 수 있지만, 용어 "비-중복"은 모든 중첩 비트가 0인 RHPA 값을 이용하여 주어진 값을 표현하는 유일한 방식이라는 사실을 언급하기 위해 사용된다(동일한 수치 값을 표현하는 다수의 방식을 허용하는 일부의 비-중첩 비트를 갖는 RHPA 값과 반대). 비-중복 RHPA 값의 경우, 비-중첩 비트 NV는 대응하는 비트가 정규적인 2의 보수 정수 또는 고정 소수점 값과 동일한 비트 값을 갖는다.
도 12에 나타낸 바와 같이, 주어진 RHPA 값을 비-중복으로 만들기 위해, 최하위 레인으로부터의 중첩 비트 V[0]의 N-bit 부호 확장 버전을 다음의 최상위 레인의 모든 N 비트(비-중첩 비트 NV[1] 및 중첩 비트 V[1]을 포하는)에 가산하도록 먼저 초기의 N-bit 가산(70)을 수행하여, 수정된 비-중첩 비트 NV'[1] 및 수정된 중첩 비트 V'[1]을 포함하는 N-bit 값을 생성한다. 종종 상기 수정된 중첩 비트 V'[1]이 원래의 RHPA 값의 대응하는 중첩 비트 V[1]과 동일할 수 있지만, 때때로 하위 레인으로부터의 부호 확장 중첩 비트 V[0]를 가산하는 것은 캐리를 중첩 비트로 전파하여, 수정된 중첩 비트 V'[1]에 대한 상이한 값을 제공한다. 이것이 후속 가산이 순차적으로 수행되는 이유이다. 따라서, 각각의 후속 레인에 대해, 선행 가산에서 생성된 수정된 중첩 비트(V'[1], V'[2])의 N-bit 부호 확장을 다음의 최상위 레인의 모든 N 비트에 가산하기 위해 다른 N-bit 가산(72, 74)을 수행하여, 최종 레인에 도달할 때까지 다른 수정된 비-중첩 비트 및 중첩 비트를 생성한다. 다음에, 비-중복 RHPA 값은 원래의 RHPA 값으로부터 직접 맵핑되는 최하위 레인에서의 비-중첩 비트 NV[0], 각각의 가산(70, 72, 74)에서 생성된 수정된 비-중첩 비트에 대응하는 다른 레인들에서의 비-중첩 비트 NV'[1], NV'[2], NV'[3], 및 0으로 세팅되는 생성된 비-중복 RHPA 값의 모든 중첩 비트로 형성된다.
요약하면, 비-중복의 수를 만드는 것은 주어진 레인의 비-중첩 비트를 선행 레인으로부터의 부호-확장 중첩 비트에 가산하고, 저차 레인에서에서 시작하여 고차 레인까지 진행하고, 그것들이 다음 레인으로 전파된 후 주어진 레인에 대한 중첩 비트를 제로화함으로써 달성된다. 각각의 가산에는 선행 가산에 의해 생성된 수정된 중첩 비트가 필요하므로, 이는 순차 프로세스이고, 이로 인해 원래 RHPA 값의 벡터가 비교적 넓을 경우 이러한 프로세스가 느려질 수 있다.
RHPA 값을 비-중복 형식으로 변환하는 수의 예가 V=4 및 N=8로 다시 이하에 나타나 있다:
레인 3 레인 2 레인 1 레인 0
1101_0111 0111_1010 0111_0011 1000_0100
단계 1: 레인 0의 중첩 비트를 부호 확장하고, 레인 1에 가산하고, 레인 0의 중첩 비트를 제로화한다.
1101_0111 0111_1010 0111_0011 0000_0100
+1111_1000
=0110_1011 <= 새로운 레인 1
단계 2: 새로운 레인 1의 중첩 비트를 부호 확장하고, 레인 2에 가산하고, 새로운 레인 1의 중첩 비트를 제로화한다.
1101_0111 0111_1010 0000_1011 0000_0100
+0000_0110
=1000_0000 <= 새로운 레인 2
단계 3: 새로운 레인 2의 중첩 비트를 부호 확장하고, 레인 3에 가산하고, 새로운 레인 2의 중첩 비트를 제로화한다.
1101_0111 0000_0000 0000_1011 0000_0100
+1111_1000
=1100_1111 <= 새로운 레인 3
최종 비-중복 값:
1100_1111 0000_0000 0000_1011 0000_0100
도 13은 RHPA 값을 "제한된-중복"(또는 "최소-중복") RHPA 값으로 변환하기위한 중첩 전파 동작의 제2예를 나타낸다. 그러한 제한된-중복 RHPA 값에서, 소정의 주어진 레인에서, 대응하는 중첩 비트들의 세트는 +1, 0 및 -1 중의 하나에 대응하고 소정의 다른 값을 취할 수 없다. 즉, 주어진 레인에서 중첩 비트 V의 비트 패턴은, 부호화된 정수로 해석될 경우, +1, 0 및 -1 값을 가질 것이다. 전체 RHPA 값에서 중첩 비트 V의 유효성을 고려할 때, 그러한 중첩 비트는 실제로 +2W, 0 또는 -2W의 값을 나타내며, 여기서 W는 다음의 최상위 레인에서 최하위 비트의 유효성이다. 제한된-중복 형식에서, 상이한 레인들은 중첩 비트에 대해 상이한 값들을 가질 수 있지만, 각각의 레인은 집합 {+1, 0, -1} 중 하나로 제한된 중첩 비트를 갖는다. 주어진 레인에서 2개의 최하위 유효 중첩 비트는 각각 +1, 0, -1을 나타내는 0b01, 0b00, 0b11이 될 것이고, V>2이면 그 동일한 레인의 소정의 다른 중첩 비트는 그 레인의 제2의 최하위 유효 중첩 비트와 동일할 것이다.
도 13에 나타낸 바와 같이, 제한된-중복 변환의 이점은 전체 중첩 전파 동작이 병렬로 수행될 수 있다는 것이다. 도 13에 나타낸 바와 같이, 다수의 병렬 N-bit 가산(76)들이 수행되어, 주어진 레인에 대한 부호-확장된 중첩 비트 V[i]를 다음의 최상위 레인의 비-중첩 비트 NV[i+1]에 각각 가산한다(다음의 최상위 레인의 중첩 비트는 0으로 세팅됨). 이들 각각의 가산(76)들은 제한된-중복 RHPA 값의 대응하는 N-bit 부분을 생성한다. 제한된-중복 RHPA 값의 최하위 유효 레인은 원래 RHPA 값의 최하위 레인의 비-중첩 비트 NV[0]을 제한된-중복 값의 대응하는 비트에 직접 맵핑하고, 최하위 레인의 중첩 비트를 0으로 세팅함으로써 간단히 형성된다. 각각의 레인은, 기껏해야 이웃하는 저차 레인으로부터의 중첩 비트 및 그 자신 레인의 정보를 이용하여, 모든 단계를 병렬로 수행하기 때문에, 이러한 방법은 벡터를 비-중복으로 만드는 프로세스보다 훨씬 빠르다.
RHPA 값을 제한된-중복으로 변환하는 예가 이하에 나타나 있다.
레인 3 레인 2 레인 1 레인 0
1101_0111 0111_1010 0111_0011 1000_0100
단계 1: 이웃하는 저차 레인으로부터 부호-확장된 중첩 값들을 생성한다.
0000_0111 0000_0111 1111_1000
단계 2: 각 레인은 그 자신의 중첩 값을 제로화한다.
1101_0111 0000_1010 0000_0011 0000_0100
단계 3: 단계 1 및 2로부터의 값을 가산한다.
1101_0111 0000_1010 0000_0011 0000_0100
+0000_0111 0000_0111 1111_1000
=1101_1110 0001_0001 1111_1011 0000_0100
제한된-중복 값:
1101_1110 0001_0001 1111_1011 0000_0100
(+1) (-1) (0)
예 6의 제한된-중복 값은 집합 {+1, 0, -1}로 제한된 중첩 값을 갖는다는 것을 알아야 한다. 또한 제한된-중복 값은 위에 나타낸 비-중복 예에서 동일한 수를 나타내는 비-중복 값과 상당히 다르다는 것을 알아야 한다. 도 12의 순차 프로세스와 달리, 이러한 타입의 변환은 단일 사이클로 수행될 수 있다.
일단 수가 제한된-중복이면, 레인 오버플로우를 야기하지 않고 최소의 2V-1-2 가산 FP 값을 가산할 수 있다. 또한, 최소의 2V-2 제한된-중복 RHPA 값은 레인 오버플로우를 야기하지 않고 함께 가산될 수 있다. 이러한 최종 결합은 다른 SIMD 유닛이나 다른 프로세서에서 나온 부분 누적들을 결합하는 데 이점이 있다.
도 13의 제한된-중복 중첩 전파 동작에서, 원래의 RHPA 값이 모든 중첩 비트 V[i]가 0인 레인을 가질 때, 그러한 제한된-중복 RHPA 값의 대응하는 레인은 그 레인의 비-중첩 비트 NV[i] 및 다음 최하위 레인의 중첩 비트 V[i-1]의 가산에 의해 야기된 캐리로 인해 +1 또는 -1을 나타내는 중첩 비트 V'[i]를 갖는다는 것을 알아야 한다. 따라서, 용어 "중첩 감소 동작"은 모든 레인들이 크기가 감소된 중첩 비트를 가져야 한다는 것을 의미하지 않는다. 그러한 중첩 비트의 크기는 일부 레인들에서 증가할 수 있다. 그러나, 일반적으로, 중첩 감소 동작은 적어도 하나의 레인에서의 중첩 비트의 크기를 감소시킨다.
비-중복 RHPA 값이 필요한 경우에는 도 12와 동일한 순차 방법을 수행하여 제한된-중복 RHPA 값에서 생성할 수 있다. 그러나, 비-중복 RHPA 값은 도 13과 관련하여 논의된 방법을 이용하여 주어진 RHPA 값을 제한된-중복 형식으로 먼저 변환한 다음, 그 제한된-중복 값을 도 14에 나타낸 바와 같이 비-중복 RHPA 값으로 맵핑함으로써 생성될 수 있다. 이러한 접근방식의 이점은 비-중복 RHPA 값이 일련의 병렬 N-bit 연산(도 12와 같은 순차 연산이 아닌)으로 생성될 수 있다는 것이다.
일반적으로, 도 14에 나타낸 방법은 비-중복 형식으로 변환될 제한된-중복 RHPA 값에 기초하여 중첩 값 및 비-중첩 값을 생성한다. 상기 중첩 값은 제한된-중복 RHPA 값의 모든 중첩 비트의 합계를 나타내고(각 비트의 부호 및 상대적인 유효성을 고려하여), 상기 비-중첩 값은 모든 비-중첩 비트의 합계를 나타낸다(다시, 그들의 부호 및 유효성을 고려하여). 도 14의 부분 E에 나타낸 바와 같이, 그러한 중첩 값 및 비-중첩 값이 비-중복 RHPA 값을 생성하기 위해 가산되고, 그러한 가산은 병렬 가산기(78)들에 의해 N-bit 청크(chunk)로 수행된다. 각각의 가산기(78)는, 비-중복 RHPA 값의 대응하는 부분을 생성하기 위해, 중첩 값 및 비-중첩 값의 전체 M-bit 가산이 수행되면 다음의 최하위 레인으로부터 전파되는 캐리 값을 나타내는 캐리 비트 C와 함께 그 비-중첩 값 및 중첩 값의 대응하는 N-bit 부분을 가산한다.
도 14의 부분 E에 나타낸 바와 같이, 상기 비-중첩 값은 단순히 0으로 세팅된 소정의 중첩 비트 V를 갖는 제한된-중복에 대응한다(상기 기술한 바와 같이, 상위 레인이 중첩 비트를 갖지 않는 것으로 간주될 수 있어, 비-중첩 값에서 동일하게 유지될 수 있다).
상기 나타낸 제한된-중복 RHPA 값을 예로 든다(다시 N=8 및 V=4):
레인 3 레인 2 레인 1 레인 0
1101_1110 0001_0001 1111_1011 0000_0100
그 대응하는 비-중첩 값은 아래와 같이 될 것이다:
1101_1110 0000_0001 0000_1011 0000_0100.
한편, 중첩 비트의 세트 중 일부가 -1을 나타낼 수 있어 이들 비트의 합계가 +1 또는 0을 나타내는 중첩 비트의 합계에서 감산되기 때문에 중첩 값을 생성하는 것이 조금 더 복잡하다. 예를 들어, 제한된 중복 RHPA 값에서:
레인 3 레인 2 레인 1 레인 0
1101_1110 0001_0001 1111_1011 0000_0100
중첩 비트는 다음을 나타낸다: (+1) (-1) (0)
그러나, 이들은 다음과 같이 비-중첩 값의 다음 최상위 레인에 대한 조정을 나타낸다:
레인 3 레인 2 레인 1 레인 0
1101_1110 0000_0001 0000_1011 0000_0100
+1 -1 0
(제한된-중복 RHPA 값의 레인 1의 중첩 비트들은 실제로 예를 들어 레인 2에 대한 조정을 나타낸다). 중첩 비트는 +1, 0 또는 -1의 부호화된 숫자를 갖는 높은-기수 2의 보수 값을 효과적으로 나타내는 것을 알 수 있다. 예를 들어, 제한된-중복 RHPA 값(레인 3에 가산될)의 레인 2의 중첩 비트는 +1 * 2^w[3](여기서, w[3]은 레인 3의 최하위 유효 비트의 가중치)를 나타낸다. 유사하게, 제한된-중복 RHPA 값의 레인 1의 중첩 비트는 -1 * 2^w[2] 등을 나타낸다.
따라서, 모든 중첩 비트의 합계에 대한 등가의 2의 보수 값은 0 또는 +1을 나타내는 중첩 비트의 합계에서 -1을 나타내는 중첩 비트의 합계를 감산하여 산출될 수 있다.
예 A:
레인 3 레인 2 레인 1 레인 0
VHR+: 0000_0001 0000_0000 0000_0000 0000_0000
(중첩 비트가 0 또는 +1을 나타내는 레인에서의 중첩 비트의 합계)
VHR-: 0000_0000 0000_0001 0000_0000 0000_0000
(중첩 비트가 11을 나타내는 레인에서의 중첩 비트의 합계)
등가 가산(두 번째 값을 부정)으로 표현한 것은 다음과 같이 될 것이다:
0000_0001 0000_0000 0000_0000 0000_0000
1111_1111 1111_1111 0000_0000 0000_0000 +
0000_0000 1111_1111 0000_0000 0000_0000 (중첩 값)
실제로, 제한된-중복 RHPA 값에서 처럼, 각 세트의 중첩 값은 -1, 0 및 +1 값만 가질 수 있고, 단지 레인당 2개의 최하위 유효 중첩 비트만을 고려할 필요가 있으며(값 0b11, 0b00 또는 0b01 중 하나만 취하고), 다른 모든 중첩 비트는 레인의 제2의 최하위 중첩 비트와 같다.
따라서, 도 14의 부분 B에 나타낸 바와 같이, 레인당 단지 2개의 비트만을 고려할 필요가 있다. 도 14의 부분 B의 왼쪽에 나타낸 바와 같이, 최하위 레인과 다른 각 레인에 대응하는 비트 쌍을 포함하는 제1값 VHR+이 형성되며, 각 쌍에 대해:
- 쌍의 상위 비트는 0이고,
- 쌍의 하위 비트는 대응하는 레인의 중첩 비트가 -1 또는 0을 나타내는 경우 0이며, 대응하는 레인의 중첩 비트가 +1을 나타내는 경우 1이다.
이러한 접근방식을 상기 예에 적용하면, 제1값 VHR+는 예 A에 나타낸 상위 값에서 굵게 표시된 비트와 등가이다.
유사하게, 도 14의 부분 B의 오른쪽에 나타낸 바와 같이, 레인(최하위 레인을 제외한)당 비트 쌍을 포함하는 제2값 VHR-이 형성될 수 있고, 각 쌍에 대해:
- 쌍의 상위 비트는 0이고,
- 쌍의 하위 비트는 대응하는 레인의 중첩 비트가 +1 또는 0을 나타내는 경우 0이며, 대응하는 레인의 중첩 비트가 -1을 나타내는 경우 1이다.
다시, 상기 예 A에 나타낸 하단 값에서 레인당 2개의 최하위 유효 비트(굵게 표시)를 효과적으로 나타낸다.
다음에, 중첩 값의 대응하는 2-bit 부분 V'[0], V'[1], V'[2])를 생성하기 위해 제1값 VHR+(또는 VHR+이 VHR-의 2의 보수에 가산될 수 있음)로부터 제2값 VHR-이 감산될 수 있다. 각각의 이들 2-bit 부분은 중첩 값의 대응하는 레인의 하위 2 비트와 등가이다(상기 예 A의 중첩 값에서 굵은 글씨로 표시된 레인당 2 비트를 참조). 다음에, 각각의 2-bit 부분은 도 14의 부분 E에 나타낸 중첩 값의 대응하는 N-bit 부분을 생성하기 위해 부호 확장(상위 비트가 0이면 0으로 확장되고 상위 비트가 1이면 1로 확장)될 수 있다.
부분 A, C 및 D는 부분 E에서 가산의 대응하는 레인에 가산하기 위해 캐리 비트 C[1] 내지 C[3](캐리 비트 C[0]은 항상 0임)을 결정하기 위한 캐리 선행 검사 방식을 나타낸다.
부분 A에 나타낸 바와 같이, 로직(82)은 최하위 레인과 다른 제한된-중복 RHPA의 각 레인에 대한 비-중첩 비트 NV[1], NV[2], NV[3]를 검사하기 위해 제공된다. 주어진 레인 NV[i]에 대한 로직(82)은 다음의 비트 패턴 중 하나를 나타내는 대응하는 비-중첩 비트 패턴 NVP[i]를 결정한다:
* 전파 (p) - NV[i]의 모든 비트가 1일 때,
* 제거 (k), 여기서 NV[i]의 모든 비트가 0이고,
* 생성 (g), NV(i)의 최하위 비트가 1이고 다른 모든 비트가 0이며,
* 더블 (d), NV(i)의 최하위 유효 비트가 0이고 다른 모든 비트가 1이고,
* 비관심 (u), 소정의 다른 비트 패턴에 대응한다.
원래의 제한된-중복 RHPA 값에서 동작하기보다는, 비트 패턴 확인 로직(82)이 부분 E에 나타낸 비-중첩 값의 비-중첩 비트들의 세트에도 적용될 수 있다는 것을 알아야 할 것이다. 따라서, 일반적으로 각 세트의 비-중첩 비트들의 패턴이 확인된다.
유사하게, 도 14의 부분 C에 나타낸 바와 같이, 중첩 값의 비트 쌍을 생성한 후, 비트 패턴 확인 로직(82)은 비-중첩 값에 대한 것과 동일한 방식으로 각각의 비트 쌍을 p, k, g, d 중 하나로서 분류한다(중첩 값의 경우, 비교되는 2 비트만 있기 때문에 '비관심'경우 u를 가질 수 없다). 다시, 비트 패턴 확인 로직(82)은 이전에보다는 부분 E에 나타낸 전체 중첩 값을 형성하도록 비트 쌍을 확장하는 부호 뒤에 적용될 수 있지만, 중첩 값의 주어진 레인의 제2비트보다 더 유효한 모든 비트가 제2비트와 동일한 값을 가지기 때문에 여전히 '무관심'의 경우 u가 발생할 수 없다.
비트 패턴 확인 로직(82)에 의해 확인된 각각의 중첩 및 비-중첩 비트 패턴은 조건 p, k, g, d, u 중 어느 것이 검출되는지를 확인하도록 인코딩된 다중-비트 신호를 이용하여, 또는 조건 p, k, g, d 중 하나에 각각 대응하고 그 조건이 검출되었는지를 확인하는 일련의 1-bit 표시에 의해 나타낼 수 있다는 것을 알 수 있을 것이다(u는 조건 p, k, g, d가 없는 것으로 나타낼 수 있다). 일반적으로, 비트 패턴 확인 로직(82)은 위에서 설명된 조건들을 결정(예를 들어, AND 및 NOR 게이트들을 이용하여)하기 위한 로직 게이트들의 세트를 포함할 수 있다.
도 14의 부분 D에 나타낸 바와 같이, 최하위 레인과 다른 각 레인에 대해, 캐리 룩어헤드 회로(84; carry lookahead circuitry)는 해당 레인에서의 비-중첩 비트의 비-중첩 패턴 NVP[i] 및 다음 최하위 레인에서의 중첩 비트의 중첩 패턴 VP[i-1]의 표시를 수신하고, 이는 레인 생성 신호(gi)에 맵핑되며, 최하위 레인 및 제2의 최하위 레인과 다른 레인에 대해, 다음의 표에 따라 레인은 신호 pi를 전파한다:
Figure pct00007
여기서,
* "G"로 표시된 경우, 레인은 신호 gi=1을 생성하고 레인은 신호 pi=0을 전파하고,
* "P"로 표시된 경우, 레인은 신호 gi=0을 생성하고 레인은 신호 p =1을 전파하고,
* "K"로 표시된 경우, 레인은 신호 gi=0을 생성하고 레인은 신호 pi=0을 전파한다.
다음에, 레인 생성 신호 및 레인 전파 신호는 이하의 식에 따라 각 레인에 대한 캐리 비트 C[i]를 생성하는 프리픽스 로직(86; prefix logic)에 입력된다:
* C[0] = 0
* C[1] = g1
* C[2] = g2 OR (p2 AND g1)
* C[3] = g3 OR (p3 AND g2) OR (p3 AND p2 AND g1)
4개 레인 이상인 경우도 마찬가지이다.
본질적으로, 각각의 레인에서 중첩 값 및 비-중첩 값의 비트 패턴을 조사함으로써, 해당 레인에 캐리가 존재하면, 캐리 아웃이 존재할 수 있는지의 여부를 결정할 수 있고, 따라서 각각의 캐리 비트 C는 사실상 가산을 순차적으로 수행할 필요없이 결정될 수 있다. 이는 부분 E가 가산이 순차적으로 수행된 것과 동일한 결과를 제공하기 위해 다수의 병렬 가산(78) 수행할 수 있게 한다.
각 레인에 대한 도 14의 동작이 대체로 병렬로 수행될 수 있기 때문에, 도 13의 제한된-중복 변환을 먼저 수행함으로써 중첩 전파를 수행하는 상대적으로 넓은 벡터에 대해, 후속된 도 14의 비-중복 변환은 도 12에 나타낸 비-중복 프로세스를 수행하는 것보다 더 빠를 수 있다.
중첩 전파 방법에 대한 좀더 상세한 설명이 이하의 부록 B에 제공된다.
중첩 감소 동작은 또한 도 15에 나타낸 중첩 누적 연산을 포함할 수 있다. RHPA 누적기 레지스터(90)에 저장될 RHPA 누적기 값을 생성하기 위해 일련의 누적을 수행하는 경우, 중첩 누적기 값을 저장하기 위해 제2레지스터(92)가 또한 할당된다. 도 15에 나타낸 바와 같이, 중첩 누적기 레지스터(92)는 입력 피연산자를 RHPA 누적기 레지스터에 누적을 시작하기 전에 초기에 0(제로; zero)으로 세팅된다.
중첩 감소가 요구되는 경우, RHPA 누적기 값으로부터의 중첩 비트의 각 세트가 부호 확장되고 중첩 누적기 레지스터(90)의 대응하는 부분에 가산되는 중첩 누적 연산(94)이 수행된다. RHPA 누적기 레지스터(90)의 중첩 비트는 제로화되고, 그 후 RHPA 누적기 레지스터(90)로의 추가 누적은 오버플로우의 위험 없이 수행될 수 있다.
RHPA 누적기 레지스터(90)가 레인 오버플로우의 위험이 있는 지점에 다시 도달되면, RHPA 누적기 값으로부터 부호-확장된 중첩 비트를 중첩 누적기 값의 대응하는 부분의 이전 내용에 다시 가산하기 위해 또 다른 중첩 누적 연산(94)이 수행될 수 있다.
따라서, 중첩 누적기 값은 RHPA 누적기의 각 레인에 생성된 중첩 비트의 누적 합계를 효과적으로 유지하며, 여기서 RHPA 누적기가 중첩 비트를 모두 소비하기 시작할 때마다 이들 비트가 중첩 누적기 값에 가산되어 RHPA 누적기의 중첩 비트는 제로화될 수 있다. 중첩 누적기 값이 중첩 값을 추적하는 데 사용할 수 있는 레인당 N 비트(RHPA 누적기에서와 같이 단지 V 비트가 아니라)를 모두 가지므로, RHPA 누적기 및 중첩 누적기 레지스터(90, 92)의 조합으로부터 정보의 손실 위험이 생기기 전에 RHPA 누적기에 매우 많은 수의 누적이 수행될 수 있다.
일단 RHPA 누적기 레지스터(90)로의 최종 누적이 완료되면, 최종 합계(96)는 다음과 같이 3개의 벡터를 가산함으로써 RHPA 형식으로 계산될 수 있다:
* 중첩 비트가 0으로 클리어된 최종 RHPA 누적기 값에 대응하는 벡터 97;
* 최하위 레인이 0이고, 각각의 후속 레인이 최종 RHPA 누적기 값의 다음 최하위 레인으로부터 중첩 비트 V"의 부호 확장인 벡터 98;
* 최하위 레인이 0이고, 각각의 후속 레인이 중첩 누적기 레지스터(92)에서 다음의 최하위 레인의 값에 대응하는 벡터(99). 즉, 중첩 누적기 레지스터(92)는 벡터(99)를 생성하기 위해 N 비트만큼 왼쪽-이동될 수 있다. 벡터(99)의 각각의 요소는 소정의 이전 중첩 누적 연산(94)에서 중첩 누적기 레지스터에 가산된 모든 중첩 비트의 합계를 나타낸다.
최종 합계(96)는 상술한 바와 같이 다수의 병렬 N-bit 가산 회로 유닛을 이용하여 N-bit 청크에서 수행될 수 있다. 최종 합계(96)는 도 7의 예에서와 같이 3:2 감산 및 캐리-전파 가산을 이용하거나, 또는 규칙적 N-bit 가산기를 이용하여 2개의 연속 2-입력 정수를 수행함으로써 단일 연산으로 계산될 수 있다.
중첩 전파에 대한 중첩 누적 연산의 이점은 중첩 누적 연산을 위해 수행되는 처리가 완전히 레인 내에서 유지되며, 중첩 비트를 어느 한 레인에서 또 다른 레인으로 전파하는 데 요구되는 것과 같이 레인간 데이터의 이동이 존재하지 않는다는 것이다. 중첩 누적 접근방식의 경우, 레인간 이동 데이터는 각각의 중첩 누적 연산(94)에서 보다는 전체 누적에 대해 일단 수행될 최종 합계(96) 계산 동안에만 요구된다.
중첩 누적 연산의 또 다른 이점은 전체적으로 RHPA 벡터를 오버플로우하는 합을 가능하게 하지만(예를 들어, 많은 큰 수를 가산함으로써), 나중에 정보의 손실 없이(사실상 고차 레인이 중첩 비트를 얻기 때문에) 정확하게 계산될 이후의 누적의 결과(예컨대, 큰 수를 감산함으로써)로 다시 범위로 돌아간다는 것이다.
한편, 중첩 누적 연산은 중첩 누적기 값을 저장하기 위해 제2레지스터가 할당될 것을 필요로 하고, 이에 따라 레지스터 압력이 누적당 2개의 레지스터를 제공하기에 충분한 레지스터가 없다는 것을 의미하는 경우, 중첩 전파 동작이 레인들간 중첩 비트를 전파하여 정보가 RHPA 누적기와 동일한 레지스터에 유지되도록 하는 것이 바람직하다.
따라서, 중첩 감소는 중첩 전파 또는 중첩 누적에 의해 달성될 수 있다.
우리는 종종 2V-1 이상의 부동 소수점 값(여기서, V는 상위 레인과 다른 소정의 레인에서 중첩 비트의 최소 수임)을 누적하기를 원하며, 이 경우 중첩 감소 동작은 레인들간 오버플로우를 피하기 위해 주기적으로 필요할 것이다. 중첩 감소 방법이 사용되는지에 관계 없이(중첩 전파 방법 및 중첩 누적 방법 중 어느 것도 수행될 수 있음), 프로세서는 상이한 방식으로 중첩 감소 동작을 수행할 시기를 결정할 수 있다. 예를 들어, 이를 수행할 시기를 결정하는 3가지 방식은 다음을 포함한다:
(1) 누적된 값의 수를 카운트하고, k 가산 또는 감산을 수행할 때마다 중첩 감소를 수행한다(여기서, 비-중복 형식으로 변환하는 중첩 누적 또는 중첩 전파 동작을 이용하는 경우 k≤2V-1-1, 또는 제한된-중복 형식으로 변환하는 중첩 전파 동작을 이용하는 경우 k≤2V- -2).
(2) 최대 양수 값(0b0111 ...) 또는 최대 음수 값(0b1000 ...), 또는 거의 최대 양수 값 또는 음수 값에 대해 중첩 비트를 검사하여 레인 오버플로우 상태에 가까운지를 검출한다. 이들 조건이 검출되면 중복 감소를 수행한다. 사이클마다 누적기 레지스터에 2개 이상의 값이 누적되면, 오버플로우 검출 부근에서는 사이클당 단지 하나의 값이 누적될 때보다 빨리 중첩 감소 동작을 유발해야 하며, 예컨대 중첩 비트가 0b011...110 또는 0b100..001을 나타낼 때 사이클 오버플로우 감소당 누적된 2개의 값이 유발될 수 있다(2개의 증가 또는 감소가 레인 오버플로우를 유발할 수 있음). 따라서, 일반적으로, 처리 회로는 중첩 비트가 소정의 미리 정해진 값을 언제 초과하는지를 검출하고 이후 중첩 감소 동작을 유발시킨다.
(3) 고차 중첩 비트(부호 비트)로의 캐리-인(carry-in) 및 그로부터의 캐리-아웃(carry-out)을 검사하여 실제 레인 오버플로우가 있는지를 검출한다. 그러나, 비-오버플로우 상태로 되돌아 가기 위해 일부의 감산 로직이 필요할 수 있다.
방법 (2) 및 (3)을 방법 (1)에 대해 이용하는 이론적 이점은 (1)에 대한 계산 방법이 비관적이어야 한다는 것이다. 특히, 혼합-부호 값을 누적할 때, 레인 오버플로우의 위험에 처하기 전에 2V-1 이상의 누적이 있을 수 있다. 반면, 제한된-중복 형식으로 변환하는 것은 너무 저렴하기 때문에(일부 구현에서는 한 사이클로 완료될 수 있음), 실제로 (1)이 최고의 수행 방법이 될 것이다.
상기 예들에서, 중첩 감소 동작은 RHPA 값으로의 누적과는 분리되어 수행된다. 그러나, 다른 RHPA 값을 RHPA 누적기에 가산하는 것과 동시에 중첩 전파 동작을 수행할 수도 있다.
도 16에 나타낸 바와 같이, 제1 RHPA 값(R1)이 제한된-중복 형식인 경우, 중첩 전파는 제1 RHPA 값(R1)의 합에 대응하는 제2 RHPA 값(R2) 및 입력 피연산자(예컨대, 부동 소수점 값 FP)를 RHPA 형식으로 변환함으로써 생성된 제3 RHPA 값(R3)을 생성하기 위해 수행될 수 있다(상기 변환은 도 10 및 11에 대해 상기 기술된 바와 같이 수행될 수 있다). 상기 제한된-중복 RHPA 값(R1)은 제1 RHPA 값(R1)의 모든 중첩 비트가 0으로 세팅되는 비-중첩 벡터(RNV), 및 하위 레인이 0인 중첩 벡터(RV)와 같은 2개의 벡터로 맵핑되며, 또 다른 레인이 상기 제1 RHPA 값(R1)의 선행 레인의 중첩 비트의 부호 확장으로 세팅된다.
다음에, 다수의 3-입력 N-bit 가산이 상기 제2 RHPA 값(R2)의 대응하는 N-bit 부분을 생성하기 위해 비-중첩 벡터(RNV), 중첩 벡터(RV) 및 제3 RHPA 값(R3)의 대응하는 N-bit 부분을 가산하도록 병렬로 수행된다. 이들 가산은 도 7에서와 같이 3:2 감산 및 캐리 전파를 이용하여 1 단계로, 또는 표준 2-입력 가산기를 이용하여 2 단계로 수행될 수 있다.
다음에, 상기 제2 RHPA 값(R2)이 상이한 입력 피연산자에 의한 다음 누적을 위해 제1 RHPA 값(R1)으로 사용될 수 있다.
따라서, 이러한 접근방식에서는 누적과 분리된 별개의 중첩 전파 동작을 수행할 필요가 없다. 대신 다른 값이 누적될 때마다, 중복 전파가 제한된-중복 형식으로 RHPA 값을 유지하기 위해 수행될 수도 있다. 따라서, 이러한 접근방식은 중첩 감소가 필요한 시점을 추적할 경우에 오버헤드에 처하는 상황을 없앨 수 있다.
도 36 내지 39는 왜 제한된-중복 RHPA 값의 비-중첩 비트 및 중첩-비트에 대응하는 벡터(RNV, RV)들에 RHPA-변환 입력 피연산자(R3)를 가산하면 제한된-중복인 또 다른 RHPA 값을 생성하는지를 설명한다. 부동 소수점 수를 변환하여 제한된-중복 누적기에 가산한다고 가정한다. 도 36은 3개의 레인에 걸쳐 배치된 2개의 피연산자를 나타낸다. 제한된-중복 RHPA 수의 상위 중첩 부분의 비트 "s.ext"는 RHPA 수가 중복 비트로 오버플로우되지 않았음을 나타낸다. FP 수의 "s.ext" 비트 및 변환 후 RHPA의 상위 레인은 0 또는 -1일 수 있다. 두 경우 모두, "s.ext" 비트가 -1이면, 비-중첩 비트는 0이 아니어야 한다(도 37 참조).
다음에, 중첩 비트를 제한된-중복 RHPA 수에서 한 레인만큼 이동시키고 중첩 비트를 0으로 리세팅한다(도 38 참조). 마지막으로, 도 39에 나타낸 바와 같이, 레인별로 가산을 수행하면 제한된-중복 결과가 남는다. 레인 0에서, 중첩 비트는 입력 FP 수가 양수이고 거기에 가산이 캐리-아웃을 야기하는 경우 +1로 끝날 수 있다. 레인 1에서, 이동된 중첩 부분의 -1이 FP 수의 비-중첩 부분의 양의 비트로 동화되기 때문에 FP 변환이 -1의 부호 확장을 벗어나면 중첩에서 -2를 얻을 수 없다. 유사하게, 2개의 비-중첩 부분을 가산하면 +1의 캐리가 야기될 수 있기 때문에 레인 1 중첩에서 +2를 얻을 수 없으며, 레인 0에서 위로 이동된 +1은 제2캐리를 야기시킬 수 없으며, 그 반대의 경우도 마찬가지이다. 마지막으로, 동일한 이유로 레인 2의 중첩 부분에서 -2를 얻을 수 없다. 그러나, 오버플로우가 있을 때만 +1을 얻을 수 있다. 또한, 레인 2 중첩의 -1이 이제 오버플로우를 나타낼 수 있다.
따라서, FP의 값과 제한된-중복 RHPA 값에 관계 없이, 가산의 결과는 여전히 제한된-중복이다. 제한된-중복 값에 대한 가능한 중첩 값{+1, 0, -1}은 단지 2개의 중첩 비트로 나타낼 수 있기 때문에, 도 16의 접근방식이 FP 값과 누적기 값의 가산 및 제한된-중복 중첩 전파를 동시에 수행하기 위해 사용될 때, 레인당 2개 이상의 중첩 비트를 제공할 필요가 없다(제2의 최하위 유효 중첩 비트보다 더 유효한 소정의 비트가 제2의 최하위 유효 중첩 비트와 동일한 값을 가지므로). 따라서, 레인당 더 많은 비트가 비-중첩 비트로 사용될 수 있어, 주어진 벡터 길이를 이용하여 나타낼 수 있는 수 범위가 증가한다.
RHPA 표현으로부터의 변환
도 17 내지 19는 RHPA 값을 부동 소수점 값으로 변환하는 다양한 기술을 나타낸다. 일반적으로, RHPA 값이 비 중복 형식(도 17 또는 도 19) 또는 제한된-중복 형식(도 18)이 아닌 경우, 부동 소수점으로의 변환을 수행하기 전에 그러한 경우가 있는지를 보장하기 위해 중복 감소 동작을 수행한다.
도 17에 나타낸 바와 같이, RHPA가 비-중복 형식이고 N-V≤Fsize일 때(여기서, Fsize는 암시적 1비트를 포함하는, 생성될 부동 소수점 형식으로 저장된 유효수의 비트 수), 각 레인의 비-중첩 비트는 하나의 부동 소수점 값의 유효수 내에 정확하게 맞춰지고, 따라서 부동 소수점 값의 대응하는 벡터가 생성될 수 있으며, 벡터의 각각의 성분은 반올림으로 인한 정보의 손실 없이 비-중복 RHPA 값의 대응하는 레인과 등가인 부동 소수점 값을 포함한다.
따라서, 최상위 유효 레인 이외의 비-중첩 비트 NV[i]의 각 레인에 대해:
* N-V 비-중첩 비트는 비정규화 부동 소수점 유효수의 상위 N-V 비트에 직접 맵핑된다. Fsize>N-V이면, 유효수의 최하위 유효(Fsize-(N-V)) 비트는 0이다.
* 해당 레인에 대한 지수 E[i]는 E[i]=w[i]+N-V-1+B와 등가로 세팅되며, 여기서 w[i]는 해당 레인에 대한 앵커 값이고(그 레인의 최하위 유효 비트의 유효성을 나타내는), N은 레인 크기, V는 중첩 비트의 수, 그리고 B는 사용되는 부동 소수점 표현에 대한 바이어스 양이다.
* 부호 비트 S는 0이다(비-중복 RHPA 값에서 상위 레인 이외의 모든 레인에서의 중첩 비트가 0이므로 나머지 비-중첩 비트에 대해 양의 값을 나타낸다).
한편, 최상위 유효 레인(본 예에서 NV[3])에 대해:
* 최상위 유효 비-중첩 비트가 1이면(RHPA 값이 전체적으로 음인 것을 나타내는), 비-중첩 비트 NV[3]은 비정규화 유효수의 대응하는 비트 NV'[3]을 형성하기 위해 부정된다. 상기 최상위 유효 비-중첩 비트가 0이면(양의 RHPA 값을 나타내는), 비-중첩 비트 NV[3]은 비정규화 유효수의 대응하는 비트 NV'[3]에 직접 맵핑된다. Fsize>N-V 이면, 유효수의 최하위 유효(Fsize-(N-V)) 비트는 0이다.
* 지수 E[3]은 다른 레인과 동일한 방식으로 세팅되지만, 상위 레인에 대한 레인 앵커 값 w[3]에 기초하여 세팅된다.
* 부호 비트 S는 상위 레인의 최상위 유효 비-중첩 비트와 같다.
이는, 각 레인의 유효수에서 상위 '1' 비트가 유효수의 최상위 유효 비트와 다른 비트 위치에 있을 수 있기 때문에, 정확하지만 비정규화의 부동 소수점 값의 벡터를 생성한다. 따라서, 각 레인에 대해, 정규화 회로(100)는, 정확한 정규화 부동 소수점 값을 생성하기 위해, 주어진 레인의 유효수를 이동시켜 최상위 유효 비트 위치에 상위 '1' 비트를 위치시키고, 이에 따라 지수 E를 조정한 다음, 저장된 부동 소수점 표현에서 암시된 상위 '1' 비트를 버린다. 그 값이 준정규적이면, 지수 E는 0으로 세팅된다.
일부의 경우, 정확한 정규화 부동 소수점 벡터를 변환의 결과로 출력할 수 있다. 원래의 RHPA 값의 증가된 정밀도가 부동 소수점 형식으로 변환한 후에도 유지될 수 있도록 하는 것이 바람직할 수 있다.
그러나, 원래의 RHPA 값과 등가(적어도 근사적으로)인 단일의 부동 소수점 값으로 변환하기 위해, 벡터의 부동 소수점 요소들을 함께 가산하거나 반올림하여 최종 부동 소수점 결과를 생성할 수 있다(도 17의 하단에 나타낸 바와 같이).
상기 나타낸 바와 같이, 부동 소수점 가산은 연합적이지 않으며, 부동 소수점 요소들이 가산되는 순서는 최종 결과에 영향을 미칠 것이다. 그러한 최종 결과가 RHPA 값과 거의 등가일 경우에만, 소정의 순서로 값을 가산하는 것을 수용할 수 있다.
그러나 RZ, RP, RM, RNA 또는 RX 반올림 중 하나에 따라 반올림할 때 정확하게 반올림된 결과를 제공하기 위해, 그러한 부동 소수점 요소들은 최하위 유효 요소부터 시작하여 최상위 유효 요소로 종료하는 순서로 가산될 수 있다. 예를 들어 4개의 부동 소수점 요소가 있는 경우, ((FP0 + FP1) + FP2) + FP3와 같이 가산되며, 여기서 괄호 밖에 있는 다음 항을 가산하기 전에 주어진 대괄호 집합 안에 나타낸 덧셈이 수행된다. FP 수가 고차 레인에서 저차 레인으로 가산되면, 각각의 가산 후에 반올림 값을 생성하기 위해 반올림 증가가 있을 수 있는 데, 이는 너무 많은 증가가 수행되게 한다. 예컨대, 스티키 비트를 포함하는 최고차 수로 RP 반올림을 수행할 때, FP 결과가 이미 스티키로 인해 증가하지만, 거기에 가산된 각각의 저차 FP 수로 다시 증가할 것이다. 1024-bit 구현에서는 정확한 값을 계산한 후에 FP 값을 15배 증가시킬 수 있다. 이러한 문제는 먼저 저차 요소 FP0 및 FP1을 가산한 다음, 상위 요소 FP3에 도달할 때까지 후속의 가산에서 다음의 최고차 요소를 연속으로 가산함으로써 피할 수 있다.
RNE 반올림을 위해, 이러한 방식으로 부동 소수점 요소들을 가산하면 항상 정확한 반올림 결과가 제공되는 것은 아니다. 근사 결과만 필요한 경우, 문제가 되지 않을 수도 있다. 그러나, 정확하게 반올림된 결과가 요구된다면, 이하 도 19와 관련하여 설명된 방법이 대신 사용될 수 있다.
도 18은 도 17과 유사한 동작을 나타내지만, 여기서는 원래의 RHPA 값이 먼저 제한된-중복 형식으로 변환된다(또는 이미 제한된-중복인). 이러한 경우, N-V 비-중첩 비트 외에, 최하위 유효 중첩 비트 또한 주어진 레인에 대해 생성된 대응하는 부동 소수점 값의 유효수에도 영향을 미치므로, 이러한 접근방식은 N-V≤Fsize-1일 때 작동한다. 또한, 제한된-중복 RHPA 값의 경우, 각각의 레인은 +1 또는 -1 값을 나타내는 중첩 비트를 가질 수 있으므로, 각각의 레인은 부호화된 값으로 취급된다(도 17의 비-중복 RHPA 예의 상위 레인과 유사).
따라서, 각각의 레인 i에 대해:
* 해당 레인의 최하위 유효 중첩 비트 V[i] 및 N-V 비-중첩 비트 NV[i]는 비정규화 부동 소수점 유효수의 상위 N-V+1 비트에 맵핑되고, 해당 레인에서 V[i]의 제2의 최하위 유효 중첩 비트가 1(음의 레인 가중치를 나타내는)이면 부정이 적용된다. Fsize-1>N-V이면, 유효수의 최하위 유효 Fsize-1-(N-V) 비트는 0이다.
* 해당 레인에 대한 지수 E[i]는 E[i]=w[i]+N-V+B와 등가로 세팅되며, 여기서 w[i]는 해당 레인에 대한 앵커 값(레인의 최하위 유효 비트의 유효성을 나타내는)이고, N은 레인 크기이고, V는 중첩 비트의 수이며, B는 사용되는 부동 소수점 표현의 바이어스 양이다. 이러한 경우의 지수는 중첩 부분으로부터 가산 비트를 고려하기 때문에 도 17의 경우보다 하나 더 높다.
* 각 레인에 대한 부호 비트 S[i]는 대응하는 레인에서 중첩 비트 V[i]의 제2의 최하위 유효 비트와 같다.
다시, 결과의 비정규화 부동 소수점 값은 도 17과 동일한 방식으로 최종 반올림된 부동 소수점 값을 생성하기 위해 함께 가산될 수 있는 정확한 정규화된 부동 소수점 값의 벡터를 생성하기 위해 정규화된다.
도 17 및 도 18에 나타낸 기술의 장점은 변환이 주로 병렬 처리인 것에 있으며, 여기서 각각의 레인이 각각의 부동 소수점 값으로 병렬 변환된 다음 가산될 수 있다는 것이다. 도 17 및 도 18의 예들은 상위 레인이 다른 레인들과 유사한 방식으로 V 중첩 비트들을 포함하는 것으로 취급된 대칭을 위한 것으로 가정한다.
N-V>Fsize(도 17의 경우) 또는 N-V>Fsize-1(도 18의 경우)이면, 도 17 또는 도 18에 나타낸 방법이 계속 수행될 수 있지만, 이러한 경우 부동 소수점 벡터는 원래 RHPA 값의 대응하는 요소에 정확하게 대응하지 않는 반올림된 부동 소수점 값의 벡터일 수 있다. 이는 비-중첩 비트의 수가 하나의 부동 소수점 값의 유효수보다 큰 레인이 있기 때문이고, 따라서 이들을 각각의 부동 소수점 값으로 변환하려면 반올림을 필요로 할 것이다. 이러한 경우 FP 벡터가 더 이상 RHPA 값을 정확하게 나타내지 않지만, 도 17 및 18에서와 같은 방식으로 각각의 FP 요소를 가산하여 최종 반올림된 FP 값을 생성하는 것은 여전히 RNE와 다른 모든 반올림 모드에 대해 정확한 반올림 결과를 제공할 수 있다.
대안으로, 도 19에 나타낸 바와 같은 RHPA 값을 부동 소수점 값 FP로 변환하는 다른 접근방식을 사용할 수 있다. 이것은 RNE 반올림이 사용되는 경우 특히 유용하다. 이러한 방법은 RHPA 값이 먼저 비-중복 형식으로 변환되었다고 가정한다(또는 이미 비-중복인). 도 19에 나타낸 바와 같이, 비-중복 RHPA 값의 최상위 유효 비트는 부동 소수점 값 FP의 부호 비트 S에 직접 맵핑된다.
부동 소수점 값의 유효수 F를 생성하기 위해, 일련의 동작이 다음과 같이 수행된다. 비-중복 RHPA 벡터 Vi의 최상위 유효 비트가 1(즉, RHPA 값이 음인)이면, 단계 170에서 전체 값은 수정된 벡터 Vi'를 생성하기 위해 부정된다(반전 및 1을 가산). 양의 값의 경우, RHPA 벡터 Vi는 부정되지 않고 변경되지 않는다(Vi'=Vi). 따라서, 그 수정된 벡터 Vi'는 적어도 하나의 선행의 0을 가지므로, 양의 값을 나타낸다. 그러한 수정된 벡터 Vi'의 최상위 유효 레인에서 시작하여, 유효수 생성 동작이 요소별로 순차적으로 수행된다. 최상위 유효 요소에 대한 처리 레인은 해당 요소(즉, 1의 제1비트 값) 내의 제1비-부호 비트를 검색한다. 이러한 예에서, 레인 3의 상위 요소는 소정의 비-부호 비트를 포함하지 않고, 이에 따라 처리는 다음 레인 2로 이동한다.
요소 2에 대한 처리는 1의 비-부호 비트를 확인하고 비-부호 비트 1(중첩 비트를 포함하지 않는)을 선행하는 0의 수를 나타내는 선행 제로 카운트 LZC를 결정한다. 부분 유효수는 대응하는 데이터 요소 Vi'[2]의 k비트로부터 형성되며, 여기서 k=min(N-V-LZC, Fsize)이고, 여기서 Fsize는 생성될 FP 값의 유효수의 비트의 수(암시 비트를 포함하는)이고 LZC는 선행 제로 카운트이다. 그러한 k-비트 부분 유효수는 유효수에 대해 여전히 얻어질 나머지 비트의 수, 가드 비트 G 및 스티키 비트 St의 표시(Fsize-k)와 함께 출력된다. N-V-LZC>Fsize이면, 가드 비트 G는 부분 유효수에 대해 취해진 비트의 오른쪽에 있는 요소 Vi'[2]의 비트와 같으며, N-V-LZC<=Fsize이면, G=0이다. 유사하게, N-V-LZC>Fsize+1이면, 스티키 비트 St는 가드 비트 G의 오른쪽에 있는 요소 Vi'[2]의 소정 비트의 비트 OR과 같고, 그렇지 않으면 스티키 비트 S=0이다.
그런 다음 처리는 요소 Vi'[1]에 대한 다음 레인으로 이동하며, 여기서 또 다른 부분 유효수 값이 생성된다. 요소 Vi'[1]의 비-중첩 비트의 상위 부분은 부분 유효수로서 선택되고, 그 비트 수는 이전 레인으로부터 출력된 값 Fsize-k에 대응하여 취해진다. 이러한 레인은 또한 가드 비트 및 스티키 비트(G, St)의 값을 갱신하고, 상기 가드 비트(G)는 부분 유효수를 취한 최하위 비트의 오른쪽에 있는 요소 Vi'[1]의 비트와 동일하고, 스티키 비트(St)는 상기 가드 비트(G)보다 덜 유효한 소정 비트의 비트 OR에 대응한다. 최하위 유효 요소 Vi'[0]에 대한 처리 레인은 상위 레인으로부터 스티키 비트(St)를 수신하고, 요소 Vi'[0]의 모든 비트를 이전 레인으로부터의 스티키 비트(St)와 논리합시킴으로써 갱신한다.
다음에 레인 2 및 1에 대해 생성된 부분 유효수들은 유효 값 F를 형성하기 위해 연쇄적으로 연결된다. 그러한 유효수는 소정의 원하는 반올림 모드를 이용하여 가드 비트 및 스티키 비트(G, S)의 값에 기초하여 반올림된다. 그런 다음 부동 소수점 값 FP에 대해 저장된 유효수는 부동 소수점 표현으로 암시되는 반올림 된 유효수의 최상위 유효 비트를 논리합시키는 반올림 유효수 값으로부터 얻어진다.
한편, 부동 소수점 값에 대해 바이어스된 지수 E는 아래와 같이 결정된다:
E = w[j] + N - V - LZC + B,
여기서 w[j]는 최상위 유효 비-부호 비트가 발견된 데이터 요소 Vi'[j]의 최하위 비트의 유효성(예컨대, 도 19에 나타낸 예에서 요소 w[2]에 대한 앵커 포인트 값으로 표시된 유효성)이고, N은 레인 크기이고, V는 중첩 비트의 수이고, LZC는 선행 제로 카운트이며, B는 사용되는 부동 소수점 표현에 대한 바이어스 값이다.
Fsize≤NV일 때, 단지 최대 2개의 인접한 데이터 요소만이 도 19의 예에서와 같이 반올림되지 않은 유효수 F에 기여하는 비트 값을 포함할 수 있으며, 다른 레인들은 부호 비트만을 포함하는 더 유효한 레인 또는 스티키 비트(St)에만 기여하는 덜 유효한 레인이 될 것이다. 또한, 반올림되지 않은 유효수가 레인 내의 제1의 비-부호 비트의 위치에 따라 한 레인 내의 비트 값으로부터 완전히 형성될 수 있다. Fsize>N-V일 때, 반올림되지 않은 유효수 F는 벡터의 3개 이상의 인접한 데이터 요소로부터 선택된 비트로부터 형성될 수 있다.
RHPA 값들은 생성될 고정 소수점 또는 정수 형식의 비트들과 동등한 유효성의 비트를 간단히 선택함으로써 고정 소수점 또는 정수 값들로 맵핑될 수 있다. 그러나, RHPA 값이 사용되는 고정 소수점 또는 정수 형식으로 표현할 수 있는 범위를 벗어날 경우 때때로 오버플로우 또는 언더플로우가 발생할 수 있다. 따라서, RHPA와 부동 소수점간 변환하는 것이 더 일반적일 수 있다.
도 17 내지 도 19에 나타낸 변환은 입력 피연산자로서 주어진 RHPA 값을 취하고 이를 또 다른 형식의 등가 값으로 변환하는 전용 변환 명령에 따라 수행될 수 있다(초기에는 RHPA 값을 비-중복 형식으로 또는 필요한 경우 제한된-중복 형식으로 변환하는 것을 포함한다). 대안으로, 그러한 변환 동작은 또 다른 동작의 일부일 수 있다. 예를 들어, 연산 명령(예컨대, 덧셈 또는 곱셈)은 RHPA 값을 이용하여 일부의 처리 동작을 수행한 다음 그 결과를 부동 소수점, 정수 또는 고정 소수점과 같은 다른 형식으로 다시 변환하도록 프로세서를 제어할 수 있다.
곱셈
도 20은 2개의 상대적으로 긴 정수의 곱셈을 가속화하기 위해 RHPA 형식을 이용하는 예를 나타낸다. RHPA가 없다면, 그 곱셈은 상대적으로 긴 입력에 대해 느릴 수 있는 일련의 부분 곱을 순차 가산할 필요가 있다. RHPA를 사용함으로써, 그러한 부분 곱은 그 부분 곱의 각각의 청크에 대해 연산하는 병렬 가산을 이용한 단일 연산으로 가산될 수 있는 데, 이는 모든 캐리가 중첩 비트 내에 수용될 수 있기 때문이다. 이를 통해 RHPA 형식의 곱을 더 빨리 생성할 수 있다.
예를 들어, 정수 값들이 비-중복 형식으로 2개의 RHPA 값 A=(a2, a1, a0) 및 B=(b2, b1, b0)로 맵핑되면(여기서 각각의 N-bit 숫자는 V 비트의 중첩을 가짐, 예컨대, N=64 및 V=10이고, 정수 A 및 B는 각각 3*54=162 비트를 가짐), A*B는 다음과 같이 계산될 수 있다:
5 4 3 2 1 0 (lane)
a2 a1 a0
* b2 b1 b0
이러한 벡터×벡터 곱셈은 벡터×성분 연산의 시퀀스로 구현될 수 있다. 명령 MUL은 2개의 입력 피연산자의 곱의 하위 절반을 계산하고, 명령 MULH는 2개의 입력 피연산자의 곱의 상위 절반을 계산한다. 따라서 그러한 부분 곱 행렬은 다음과 같다:
pp5 a2b2(h) a1b2(h) a0b2(h) a*b2 MULH
pp4 a2b2(l) a1b2(l) a0b2(l) a*b2 MUL
pp3 a2b1(h) a1b1(h) a0b1(h) a*b1 MULH
pp2 a2b1(l) a1b1(l) a0b1(l) a*b1 MUL
pp1 a2b0(h) a1b0(h) a0b0(h) a*b0 MULH
pp0 a2b0(l) a1b0(l) a0b0(l) a*b0 MUL
원래의 피연산자 a 및 b가 레인당 N 비트를 갖는 벡터 레지스터에서 이용 가능하면(예컨대, 벡터 레지스터에 연속의 로드 연산 또는 유사한 연산이 채워진 경우), 피연산자 b의 선택된 요소(b0, b1 또는 b2)를 각각의 곱셈 단계에서 원하는 레인에 "스플랫(splat)"하고, 다른 레인들은 요소들 중 적어도 하나에 '0'을 포함한다. 이러한 "스플랫" 연산을 위한 전용 명령이 제공되거나, 이것은 b의 적절한 요소를 선택하기 위한 다른 명령으로 수행된 다음 제로화를 수행하기 위해 마스크로 AND를 수행할 수도 있다. 곱셈 이후( "스플랫"을 저장하기 위해)에 또는 이전(레인들간 이동하는 데이터를 저장하기 위해)에 이동이 행해질 수 있다.
그 부분 곱을 가산하고 RHPA 형식으로 결과를 생성하면, 그 부분 곱을 정수 값으로 다시 변환할 수 있다(먼저 비-중복 RHPA로 변환한 다음, 벡터를 중첩 비트를 제거한 정수 형식으로 다시 축소 시킴). 이것은 전용 명령 또는 일련의 이동을 이용하여 행해질 수 있다. 대안으로, RHPA 곱 값을 정수로 다시 변환하지 않고 RHPA 형식으로 더 처리할 수 있다.
레인 위치 정보
상기 기술한 바와 같이, RHPA 값의 가산은 다수의 병렬 가산 회로 유닛을 이용하여 효율적으로 수행될 수 있다. 통상적으로, 주어진 구현을 위한 하드웨어는 주어진 총 벡터 크기를 지원하는 특정 수의 가산 회로 유닛, 예를 들어 512 비트의 하드웨어에서 총 벡터 크기(vector size)를 제공할 수 있는 각각 64-bit 가산을 수행하는 8개의 병렬 가산 유닛을 제공할 수 있다. 그러나, 주어진 RHPA 값에 대한 원하는 범위는 구현된 벡터 크기보다 크거나 작을 수 있다(예컨대, 256 비트 또는 1024 비트). RHPA 값이 구현된 벡터 크기보다 작으면, 2개 이상의 개별 RHPA 값이 하나의 벡터 내에 맞추어질 수 있어 2개 이상의 개별 동작을 하드웨어에 의해 제공되는 상이한 서브세트의 레인들의 처리에 의해 병렬로 처리할 수 있게 한다.
예를 들어, 도 21에 나타낸 바와 같이, 2개의 256-bit 누적기는, 64-bit 가산기의 8 레인을 이용하여, 512-bit 벡터 하드웨어 구현의 각각의 절반 내에서 병렬로 누적될 수 있다. 유사하게, 그러한 구현된 하드웨어 벡터 크기보다 더 큰 RHPA 값을 산출하기 위해, 하나의 명령이 더 큰 RHPA 누적기의 하위 절반의 처리를 유발하고 하드웨어의 두 번째 패스에서 누적기의 상위 절반을 처리할 수 있다.
그러나, 주어진 RHPA 값의 최하위 유효 레인과 최상위 유효 레인은 중간 레인과 다르게 처리될 수도 있다. 예를 들어, 주어진 RHPA 값의 최상위 레인의 경우, 레인 오버플로우는 고차 레인으로부터의 오버플로우가 실제 오버플로우 조건, 즉 더 큰 앵커 값 또는 더 큰 누적기에 의해 재계산할 필요가 있는 에러이므로 다르게 처리될 수 있지만, 다른 레인들로부터의 오버플로우는 중첩 전파가 요구될 수 있음을 나타낼 뿐이다. 한편, 중첩 전파 동안, 최하위 유효 레인은 거기에 가산하기 위한 저차 중첩 비트가 없기 때문에 다른 레인들과 다르게 처리되고(예컨대, 최하위 유효 레인이 원래 RHPA 값으로부터 직접 맵핑되고 가산을 필요로 하지 않는 도 13 참조), 최상위 유효 레인 또한 이러한 레인에서 소정의 중첩 비트를 제로화할 필요가 없기 때문에 다르게 처리될 수 있다(다시 한번, 최상위 유효 레인이 중간 레인들과 다른 도 13 참조).
다른 레인들로부터의 정보를 고려하지 않고 독립적으로 그러한 다른 레인들을 동작시키도록 각 레인의 처리를 가능하게 하기 위해, 생성되는 전체 결과 값 내에서 레인의 위치를 나타내는 레인 위치 표시자를 제공하는 것이 유용할 수 있다. 예를 들어, 도 21에 나타낸 바와 같이, 각 레인에 대한 일련의 2-bit 타입 표시자를 포함하는 레인 위치 벡터(200)가 제공될 수 있으며, 그러한 타입의 표시자는 레인이 저차 레인(L)인지, 중간 레인(I)인지 또는 고차 레인(H)인지의 여부를 나타낸다. 이러한 예에서, 레인 0과 4는 저차 레인으로 표시되고, 레인 3과 7은 고차 레인으로 표시되고, 또 다른 레인들은 중간 레인으로 표시되며, 그 최종 결과는 각 4개의 레인에 걸쳐 2개의 독립된 결과 값을 포함하는 것을 나타낸다. 각각의 가산 회로 유닛(38, 42)은 해당 레인에 의해 처리될 피연산자와 함께 대응하는 레인에 대한 레인 위치 표시자를 수신하고, 레인 위치 표시자에 따라 피연산자를 어떻게 처리할지를 결정한다.
예를 들어, 레인 오버플로우가 발생할 때, 가산 회로 유닛은 레인 위치 표시자가 처리되는 현재 레인이 대응하는 결과 값에서 최상위 유효 레인임을 나타내는지의 여부에 따라 다수의 오버플로우 처리 응답 중 하나를 선택할 수 있다. 예를 들어, 그러한 처리는 현재 레인이 고차 레인일 때 오버플로우 예외를 유발할 수 있으며, 그렇지 않으면 오버플로우 예외를 억제할 수 있다. 고차 레인 이외의 레인들의 경우, 오버플로우가 발생하면, 중첩 전파 동작이 수행될 수 있다. 마찬가지로, 레인 위치 표시자는 상술한 바와 같이 중첩 전파가 어떻게 수행되는지에 영향을 줄 수도 있다.
도 22는 레인들의 상이한 구성을 지정하는 레인 위치 정보의 다른 예들을 나타낸다. 예 1에서, 모든 레인은 고차 레인으로 표시되어 각 레인이 독립된 N-bit 결과에 대응하는 것을 나타낸다. 이러한 상황은 또한 저차 레인으로 표시되는 모든 레인으로 나타낼 수 있다는 것을 알아야 할 것이다.
예 2는, 각 쌍의 요소들이 2개의 요소에 걸친 결과 값을 나타내도록, 짝수 레인이 저차 레인으로 표시되고 홀수 레인이 고차 레인으로 표시되는 경우를 나타낸다.
예 3 및 4는 전체 RHPA 결과 값이 16 레인에 걸쳐 있는 경우를 나타내며, 이에 따라 예 3에 규정된 레인 위치 정보에 따른 제1계산은 결과의 하위 절반을 나타내고(하위 레인이 저차 레인으로 표시되고 다른 레인들이 중간 레인들로 표시됨), 예 4에 규정된 레인 위치 정보에 따른 제2계산은 결과의 상위 절반을 생성한다(상위 레인이 고차 레인으로 표시되고 다른 레인들이 중간 레인들로 표시됨).
따라서, 레인 타입 표시자는 그러한 구현보다 넓은 누적기들에도 유용하다. 예를 들어, 256-bit 구현에 맞추어져야 하는 512-bit 누적기를 고려해 보자. 각각의 누적은 2번의 가산을 필요로 할 것이다. 기본 앵커 값이 0이라고 가정하면(따라서 정수 값만을 누적), 중첩 크기는 ovlp=8이고, H의 고차 레인, I의 중간 레인 및 L의 저차 레인을 표시한다. 따라서, 예를 들어 레인 표시자, 중첩 및 앵커 값을 포함하는 제어 레인은 I:8:168과 같이 보일 수 있으며, 이는 레인이 8 중첩 비트 및 168의 앵커 값을 갖는 중간이라는 것을 의미한다. 512-bit 누적기의 경우, 저차 앵커 벡터는 값(I:8:168, I:8:112, I:8:56, L:8:0)을 가지며, 고차 앵커 벡터는 값(H:8:392, I:8:336, I:8:280, I:8:224)을 가질 것이다. 이들 256-bit 벡터 모두에 대한 FP 입력을 누적하면 정확한 512-bit RHPA 값을 얻을 수 있다.
또한, 예 5에 나타낸 바와 같이, 이러한 종류의 레인 위치 정보의 제공은 상이한 크기의 누적기들이 동일한 벡터 내에서 병렬로 누적될 수 있게 한다. 예를 들어, 예 5에서, 벡터는 레인 위치 식별자를 이용하여 표시된 누적기들간 경계를 갖는 하나의 4-레인 누적기(H:I:I:L) 및 2개의 2-레인 누적기(H:L)를 포함한다. 따라서, 모든 RHPA 누적기가 동일한 크기를 갖는 것이 필수적인 것은 아니다.
그러한 레인 위치 정보는 프로그래머가 계산되는 누적기들의 크기를 세팅할 수 있도록 프로그램 가능할 수 있다. 일부의 경우, 상기 레인 위치 정보는 명령의 인코딩 내에서 확인될 수 있지만, 종종 레지스터 내에 유지될 것이다. 도 23에 나타낸 바와 같이, 해당 레인의 유효성을 지정하는 레인 앵커 정보 W 및 중첩 비트의 수를 확인하는 중첩 값 V를 제공하는 동일한 메타데이터 레지스터(22) 내에 각 레인에 대한 레인 위치 정보(200)를 유지하는 것이 편리할 수 있다. 현재의 부동 소수점 형식에 대한 유용한 앵커가 16-bit에 쉽게 맞을 수 있기 때문에, RHPA 벡터 자체에 사용되는 앵커 및 누적기에 대해 동일한 SIMD 레지스터 세트를 이용하는 구현은 레인 타입 표시자(200)를 쉽게 유지할 수 있다.
하드웨어에 의해 처리된 벡터가 2개 이상의 독립된 값을 포함할 때, 정확한 입력 값이 정확한 레인에 맵핑되도록 하기 위해 일부 제어가 필요할 수 있다. 일부의 경우, RHPA 가산을 적용하기 전에 하나 이상의 명령을 실행하여 관련 데이터를 정확한 레인에 배치할 수 있다. 그러나, 다른 경우에는 누적을 유발시키는 동일한 명령에 따라 하드웨어에 의해 이를 수행할 수 있다.
상기 기술한 바와 같이, 입력 값을 각각 RHPA 형식으로 변환하여 누적할 수 있는 피연산자의 벡터로 지정할 수 있다. 간단한 방법은 각 누적기가 SIMD 벡터 내의 동일한 상대적 위치에 있는 입력 벡터 요소들을 가산함으로써, 512-bit의 8 DP 부동 소수점 값들이 고차 누적기에 누적된 4개의 고차 DP 값 및 저차 누적기에 누적된 4개의 저차 DP 값들을 가질 수 있다.
그러나, 도 24에 나타낸 바와 같이, 보다 유연한 방법은 입력 부동 소수점 벡터 성분들 중 어느 것이 각 레인에 누적되어야 하는지를 지정하기 위해 입력 맵 정보(302, 304)를 이용하는 것이다. 따라서, 부동 소수점 벡터(300)는 레인 위치 정보(200), 고차 누적기에서 가산될 부동 소수점 값을 확인하는 고차 입력 맵핑(302) 및 저차 누적기에 의해 가산될 부동 소수점 값을 지정하는 저차 입력 맵핑(304)과 함께 제공될 수 있다. 이러한 예에서, 고차는 1111_0000이므로, 고차 누적기를 누적하기 위한 회로(310)는 부동 소수점 입력 FP4 내지 FP7에 대응하는 RHPA 값을 가산할 것이다. 유사하게, 상기 저차 입력 맵핑(304)은 0000_1111이므로, 저차 누적기를 생성하기 위한 회로(312)는 FP0 내지 FP3에 대응하는 RHPA 값을 가산할 것이다. 이들 가산을 수행하기 위한 회로(310, 312)는, 예를 들어 상기 도 8에 나타낸 것에 대응할 수 있다.
그와 같은 맵핑은 훨씬 더 유연성이 있으며, 이것은 하나의 누적기에 부동 소수점 벡터(300)의 짝수 레인을 누적하고 각각 입력 맵 0101_0101 및 1010_1010을 갖는 또 다른 누적기에 홀수 레인을 누적하는 것과 같은 다른 타입의 연산을 가능하게 할 수 있다(FP0+FP2+FP4+FP6 및 FP1+FP3+FP5+FP7를 계산하기 위해). 그러한 입력 맵핑은 하드웨어가 상이한 방식으로 주어진 벡터의 성분들을 결합할 수 있게 함으로써, 특정 레인에 관련 데이터를 배치하기 위해 실행될 다른 명령들의 필요성을 감소시켜 성능을 향상시킬 수 있게 한다. 다시 한번, 레인 위치 정보(200)에서와 같이, 입력 맵핑 데이터 또한 앵커 값 W 및 중첩 비트 수 V와 동일한 메타데이터 레지스터(22)에 배치될 수 있다.
상기 기술한 예들이 일반적으로 중첩 비트 수 V가 각 레인에서(상위 레인을 제외한) 동일하다고 가정하지만, 이것은 필수적인 것은 아니다. 도 25에 나타낸 바와 같이, 상이한 중첩 비트의 수(V)를 갖는 각기 다른 레인의 RHPA 값을 규정할 수 있다. 예를 들어, 각 레인에 대해 독립적으로 중첩 비트의 수(V)를 지정하는 도 23에 나타낸 타입의 메타데이터 벡터 레지스터(22)의 경우, 중첩 비트의 수는 각기 다른 레인들에 대해 다르게 세팅될 수 있다.
예컨대, 도 25에서, 그러한 메타데이터 벡터(22)의 각각의 성분은 형식 {LP: V: W}이며, 여기서 LP는 레인 위치 정보이고, V는 해당 레인에 대한 중첩 크기이며, W는 해당 레인에서 최하위 비트의 유효성을 지정하는 앵커 값이다. 이러한 예에서, 512-bit RHPA 값은 8개의 64-bit 레인으로 형성된다. 상기 메타데이터(22)는 하위 4개의 레인이 레인당 12 중첩 비트를 갖고, 다음 3개의 레인이 레인당 2 중첩 비트를 가지며, 상위 레인이 0 중첩 비트를 갖는다는 것을 지정한다. 도 25의 하단 부분은 각각의 64-bit 레인의 상대적 유효성을 나타내며, 하위 4개의 레인은 상위 4개의 레인보다 많은 수의 비트가 중첩된다. 이는 이웃하는 레인에 대한 레인 앵커 W가 상위 4개의 레인(64-2)에서 62만큼 다르지만 하위 4개의 레인(64-12)에서는 52만큼 다르다.
이러한 접근방식은, 예컨대 주어진 수치 값의 범위가 RHPA 형식으로 수용될 필요가 있을 때 유용할 수 있지만, 실제로는 대부분의 값이 그러한 전체 범위를 이용하지 않는 경향이 있다. 이러한 경우, 많은 값들에 대해, 일부의 상위 비트들은 부호 비트들이고, 이에 따라 일련의 그러한 RHPA 값들에 다른 처리 동작들을 추가하거나 수행하면 상위 레인의 비트들을 매우 자주 변경하지 않을 수 있다. 한편, 하위 레인의 비트들은 더 자주 변경될 수 있고 캐리를 더 자주 야기시킬 수 있다. 하위 레인이 상위 레인보다 오버플로우의 위험이 높으므로, 상위 레인보다 하위 레인에 더 많은 중첩 비트를 제공하는 것이 유용할 수 있다. 이러한 방식으로, 하위 레인들은 여전히 레인 오버플로우에 대한 증가된 보호를 가질 수 있지만, 필요하지 않을 가능성이 있는 상위 레인들에서 동일한 중첩 비트의 수를 불필요하게 할당할 필요가 없으며, 이에 따라 대신 상위 레인의 더 많은 비트가 비-중첩 비트로 사용되어 전체 RHPA 벡터의 주어진 비트 수 M으로 표현될 수 있는 범위를 확장할 수 있다. 이러한 방식으로, 주어진 범위가 더 작은 벡터를 이용하여 표현되거나, 또는 주어진 벡터가 더 큰 범위를 나타낼 수 있다.
도 25가 2개의 상이한 중첩 크기를 갖는 예를 나타내지만, 다른 예들이 중첩 비트의 수를 하위 레인에서 상위 레인으로 점진적 감소를 제공할 수 있다는 것을 알아야 할 것이다. 또한, 다른 예들은 각각의 레인에 더 많은 임의의 중첩 크기를 할당할 수 있다. 벡터가 여러 독립 데이터 값을 포함하는 예(레인 위치 정보로 표시한 바와 같은)에서는, 각각의 독립된 값에 대해 상이한 중첩 크기를 규정할 수도 있다.
긴 피연산자의 곱셈
RHPA 형식은 또한 긴 정수 값들과 같은 상대적으로 긴 피연산자들의 곱셈 속도를 높이기 위해 사용될 수 있다. 도 26은 4개의 64-bit 부분(a3, a2, a1, a0), (b3, b2, b1, b0)로 각각 분할된 2개의 256-bit 정수 값 a, b를 곱하는 예를 나타낸다. 그러한 처리 회로(14)는 곱셈 회로(400), 변환 회로(34) 및 가산 회로(38)를 포함한다.
곱셈 회로(400)는 제1정수(a)의 선택된 64-bit 부분(ay)과 제2정수(b)의 선택된 64-bit 부분(bz)을 곱함으로써 128-bit 부분 곱(ay*bz)을 생성하는 64×64-bit 곱셈기를 포함한다(여기서, ay는 a3, a2, a1, a0 중 어느 하나이며, bz는 b3, b2, b1, b0 중 어느 하나이다).
상기 곱셈 회로(400)에 의해 생성된 128-bit 부분 곱은 변환 회로(34)로 전달되며, 그 변환 회로(34)는 상기 기술한 기술과 유사한 방식으로 상기 곱을 RHPA 형식으로 변환한다. 따라서, 상기 변환 회로는 중복 부분 곱의 대응하는 레인들을 생성하기 위한 다수의 레인-변환 유닛(34-0 내지 34-x)을 포함할 수 있다. 각각의 레인 변환 유닛(34-0 내지 34-x)은 곱셈 회로(400)에 의해 생성된 부분 곱(ay*bz)과 그 부분 곱의 유효성을 나타내는 유효성 표시 정보(w)를 함께 공급 받는다. 예를 들어, 그러한 유효성 표시 정보는 ay*bz의 주어진 비트(예컨대, 최상위 유효 비트 또는 최하위 유효 비트)의 유효성을 나타낼 수 있다. 각각의 레인 변환 유닛(34-0 내지 34-x)은 부분 곱이 대응하는 레인의 범위 내에 있는 소정의 유효성 비트를 갖는지의 여부를 결정하고, 만약 그렇다면 그 부분 곱의 비트를 대응하는 레인 내의 대응하는 비트에 맵핑한다. 하부 레인의 중첩 비트는 도 10 및 도 11의 예들에서와 같이 부호 비트로 채워진다.
일반적으로, 도 11에 나타낸 방법은 다음을 제외하고 각각의 레인 변환 유닛(34-0 내지 34-x)에 의해 사용될 수 있다:
* 도 26에서 변환되는 곱은 도 11에서와 같이 Fsize 비트가 아닌 128 비트를 가지며, 이에 따라 Lshift를 0으로 세팅하기 위한 임계치는 Z≥N-V+Fsize가 아닌 Z≥N-V+128이다(보다 일반적으로, 정수 a 및 b가 각각 X-bit 및 Y-bit 청크로 나누어지면, 그 임계치는 Z≥N-V+X+Y이다).
* 식 Z=E-B-w[i]+1에서, "E-B"는 유효수의 최상위 유효 비트의 유효성을 나타내는 FP 값의 실제 지수를 나타낸다. 따라서, 이것은 유효성 표시 정보(w)에 의해 명시적으로 확인되거나, 또는 그 유효성 표시 정보로부터 유도될 수 있는 부분 곱의 최상위 비트의 유효성의 표시로 대체된다(예컨대, w가 부분 곱의 최하위 유효 비트의 유효성을 나타내면, E-B는 w+127 또는 좀더 일반적으로 w+X+Y-1로 대체될 것이다).
부분 곱을 RHPA 형식으로 변환한 후, 가산 회로(38)는 그 변환된 부분 곱을 RHPA 형식으로도 표현된 누적기 값에 가산함으로써, 갱신된 누적기를 RHPA 형식으로 생성한다. 상기 가산 회로(38)는 상기 갱신된 누적기의 대응하는 레인을 생성하기 위해, 상기 변환된 부분 곱 및 누적기의 대응하는 레인을 가산하기 위한 다수의 병렬 가산 회로 유닛(38-0 내지 38-x)을 포함한다. 그러한 가산은 다수의 더 작은 병렬 가산을 이용하여 수행되기 때문에, 신속하게 수행될 수 있다.
이러한 연산을 다수의 부분 곱을 생성하기 위해 그 선택된 부분 ay, bz로서 정수 a, b의 상이한 쌍의 부분을 이용하여 여러 번 반복하고, 각각의 부분 곱을 누적기 레지스터에 누적함으로써, 상기 누적기 레지스터의 최종 결과는 원래의 정수 a, b의 곱에 대응한다. 그러한 누적이 RHPA 형식으로 수행되기 때문에, 다수의 더 작은(예컨대, 64-bit) 독립 가산을 병렬로 이용하여 긴(예컨대, 512-bit)가산이 수행될 수 있고(캐리는 중첩 비트를 이용하여 누적됨), 이에 따라 전체 곱셈 연산이 이전의 기술들보다 훨씬 빠르게 수행될 수 있다.
도 27에 나타낸 바와 같이, 주어진 부분 곱을 누적기에 가산하기 위한 가산 연산이 다음의 부분 곱을 생성하기 위한 곱셈과 병렬로 수행될 수 있도록 전체 곱셈 연산이 파이프라인될 수 있다. 이러한 예에서, 기호 ay*bz(w)는 부분 곱 ay*bz의 최하위 유효 비트가 유효성 w를 갖는 것을 나타낸다. 도 27의 예에서, 각각의 64*64-bit 곱셈은 3 사이클이 걸리고 덧셈은 1 사이클이 걸리므로, 연속의 곱셈과 덧셈을 파이프라인함으로써, 그 전체 연산은 3+16 사이클=19 사이클만 필요하다. 반대로, 이전 기술들의 경우, 2개의 256-bit 정수의 512-bit 곱을 계산할 때 일반적으로 60 사이클 이상이 필요하다.
따라서, 도 27에 나타낸 바와 같이, 곱셈은 일련의 부분 곱 누적 연산으로 볼 수 있는 데, 여기서 각각의 부분 곱 누적 연산은 부분 곱을 생성하기 위한 피연산자들의 선택된 부분 ay, bz의 곱셈, RHPA 형식으로 상기 부분 곱을 변환된 부분 곱으로의 변환, 및 다수의 더 작은 병렬 가산을 이용하여 RHPA 형식으로 상기 변환된 부분 곱의 누적기에 대한 가산을 유발한다. 누적기(Acc)는 첫 번째 곱이 누적되기 전에 0으로 초기화된다.
일부의 경우, 피연산자 a, b를 지정하는 단일의 곱셈 명령은 부분 곱 누적 연산들 중 하나를 수행하도록 처리 회로(14)를 제어하기 위한 각각의 곱셈-누적 마이크로-연산들로 디코딩 회로(20)에 의해 디코딩될 수 있다. 예를 들어, 각각의 마이크로-연산은 곱해질 정수들의 특정 부분 ay, bz를 확인할 수 있다. 다른 예들에서, 디코더에 의해 수신된 프로그램 명령들은 이미 각각의 부분 곱 누적 연산에 대응하는 별도의 곱셈-누적 명령들을 포함할 수 있다.
그러한 부분 곱은 도 27에 나타낸 순서와 다른 순서로 계산될 수 있다는 것을 알아야 할 것이다. 최종 결과는 부분 곱이 계산되는 순서와 상관 없이 동일하다.
사이클 19의 종료시 결과의 곱은 여전히 RHPA 중복 형식이다. 그러한 곱은 추가의 계산(예컨대, 여러 곱들의 합계 계산)에 사용될 경우 이러한 형식으로 유지될 수 있거나, 또는 상기 기술한 변환 방법들 중 하나가 상기 곱을 비-중복 형식으로 변환하기 위해 사용될 수 있다.
이는 나중의 누적들 중 일부와 병렬로 RHPA 곱을 비-중복 형식으로 변환하기 위한 중첩 전파의 수행을 시작할 수 있다. 도 12에 나타낸 바와 같이, 비-중복 중첩 전파는 RHPA 값의 하단에서 상단으로 올라가는 일련의 순차 가산을 수반할 수 있다. 도 28에 나타낸 바와 같이, 부분 곱들이 유효성의 오름차순으로 결정되면, 프로세스의 특정 지점을 넘어서 최종 RHPA 곱의 일부의 레인들이 완료되고, 후속 누적들로 갱신되지 않으며, 따라서 그와 같은 하위 레인들에 작용하는 중첩 전파 가산들이 상위 레인들에 영향을 주는 누적들이 완료되기 전에 수행될 수 있다.
예를 들어, 도 28은 각각의 64-bit 레인이 8개의 중첩 비트(N=64, V=8)를 가지며, 이에 따라 512-bit 곱을 표현하기 위해 10개의 64-bit 레인이 사용되고, 각각의 레인의 최하위 유효 비트는 각각 유효성{504, 448, 392, 336, 280, 224, 168, 112, 56, 0}을 갖는다. 사이클 5의 종료까지, 모든 후속 누적들이 유효성 128 이상의 비트에서 작용하므로, 곱의 비트 0 내지 127은 완료된다. 따라서, 2개의 하위 레인(곱의 비트 0 내지 111에 대응하는)이 완료되고, 이에 따라 사이클 6에서 중첩 전파 가산이 수행되어 하위 레인의 중첩 비트 V[0]을 다음 레인의 비-중첩 비트 NV[1]에 가산하고, 누적기의 레인 1을 그러한 가산의 결과로 갱신한다.
유사하게, 사이클 8의 종료까지, 유효성 191 이하의 비트는 더 이상 갱신되지 않고, 다음 중첩 전파 가산 NV[2]+V'[1]에 필요한 상위 비트가 유효성 167을 가지므로, 그것은 사이클 9에서 수행될 수 있다. V'[1]은 사이클 6에서 수행된 중첩 전파 가산으로부터 생성된 수정된 중첩 비트이다.
유사한 방식으로, 각각의 후속 중첩 전파 가산은 그러한 가산에 의해 요구되는 비트들이 완성되자 마자 수행될 수 있고, 소정의 후속 누적에 의해 더 이상 갱신되지 않을 것이다. 이러한 예에서, 이는 첫번째 5개의 중첩 전파 가산이 상위 레인들에 영향을 미치는 일부의 누적과 병렬로 수행되게 하고, 이에 따라 비-중복 중첩 전파를 완료하는 데는 단지 다른 4 사이클만이 필요하여, 전체 곱셈 및 비-중복 형식으로의 변환에 총 23 사이클을 제공한다. 따라서, 비-중복 중첩 전파가 사용되더라도, 중첩 전파의 일부 오버헤드가 누적과 부분적으로 병렬로 수행됨으로써 피해질 수 있기 때문에 총 사이클 수는 여전히 상대적으로 낮다.
각각의 중첩 전파 가산이 수행될 수 있는 특정 타이밍은 생성되는 부분 곱의 수(원래 정수의 크기에 의존하는), 각각의 곱셈 단계에 의해 생성되는 부분 곱들의 크기, RHPA 누적기에 대해 사용된 벡터 레인 크기(N), 및 각각의 레인에 제공된 중첩 비트의 수(V)와 같은 요인들에 의존한다는 것을 알아야 할 것이다.
대안으로, 중첩 전파는, 도 12의 비-중복 변환을 이용하거나, 또는 도 14에 나타낸 캐리 룩어헤드 방법을 이용한 비-중복 형식으로의 변환이 뒤따르는 도 13에 나타낸 바와 같은 제한된-중복 중첩 전파 동작을 수행함으로써, 도 27에 나타낸 모든 누적들이 완료된 후에 수행될 수 있다.
긴 정수들을 곱하기 위한 이러한 방법은 몇 가지 이점을 갖는다. 첫번째로, 도 6에 나타낸 바와 같이, RHPA 수들의 가산을 수행하기 위한 회로 및 곱셈기(400)를 넘어서는 가산 회로를 거의 필요로 하지 않는다. RHPA 처리 레인은 적절한 위치에 단편의 수들을 누적하는 방법을 이미 "알고" 있고(레인 변환 장치(34)를 이용하여 입력을 가중치(w)에 따라 적절한 레인으로 맵핑한다), 이에 따라 큰 정수 곱셈 또한 이전에 비해 훨씬 더 빠르다. 따라서, 일 실시예에서, 그러한 하드웨어는 (X+Y)-bit 곱 및 최소 곱 비트의 값이 무엇인지를 나타내는 별도의 지수와 같은 값(v)을 갖는 단일의 X*Y-bit 파이프라인 곱셈기를 포함한다. 곱셈을 수행하고 부분 곱을 RHPA 누적기에 가산하는 곱셈 및 누적 연산이 제공된다.
따라서, 곱셈을 위한 피연산자들로서 더 큰 정수들의 2개의 하위 부분(ay, bz), RHPA 누적기에 대한 적어도 하나의 벡터 레지스터(선택적으로, 제2벡터 레지스터 또한 RHPA 누적기의 앵커를 지정하기 위해 제공될 수 있는), 및 암시된 지수(가중치 w)에 대한 작은 상수를 지정하는 곱셈 및 누적 명령이 제공될 수 있다.
상술한 실시예에서, 각각의 부분 곱에 대한 가중치(w)는 항상 64의 배수이고, 그래서 실제로는 단지 약간의 비트일 필요가 있다는 것을 알아 두자. 3-bit 수는 암시된 지수 0, 64, 128, 192, 256, 320, 384 및 448을 갖는 256×256 비트 곱을 처리한다. 도 27 및 28에는 448이 나타나 있지는 않지만, 각각의 부분 곱은 128 비트 폭이므로, 부분 곱의 각각의 64-bit 부분에 별도의 가중치를 할당하는 것이 더 간단할 수 있고, 이에 따라 그것들은 각각의 64-bit 레인 변환 유닛에 의해 직접 변환될 수 있으며, 따라서 448을 이용하여 a3*b3의 곱의 상위 절반의 유효성을 나타낼 수 있다. 유사하게, 4-bit 수는 512×512 비트 곱을 처리한다는 것을 알아 두자.
일부 예들에 있어서, RHPA 누적기 벡터는 관련 앵커 값을 가질 수 있으며, 상기 앵커 값은 상기 기술한 바와 같이 메타데이터를 표현하는 다양한 예들 중 소정의 예를 이용하여 규정될 수 있다. 따라서, 특정 수 범위에만 관심이 있는 경우, 그러한 앵커 값은 곱셈 중에 계산된 레인의 수를 제한하기 위해 사용될 수 있으며, 곱의 일부 비트가 앵커 값으로 나타낸 범위에서 벗어나면 오버플로우 또는 언더플로우가 발생한다. 앵커 값이 제공되면, 각각의 레인 변환 유닛은 2개의 유효성 표시 입력을 수신할 수 있으며, 상기 유효성 표시 입력 중 하나는 RHPA 벡터의 대응하는 레인의 유효성을 나타내고(앵커로부터 결정된 바와 같이), 또 하나는 현재 단계에서 생성되는 부분 곱의 유효성을 나타낸다(도 26에 나타낸 가중치 w). 이것은 상기 2개의 유효성 표시 입력으로서 FP 값의 지수 E와 앵커 값 w[i]를 이용하는 도 11과 유사하다.
그러나, 입력 피연산자들이 정수이면, 그것들은 항상 0에 대응하는 최하위 유효 비트를 갖는 고정된 유효성을 갖는다. 따라서, RHPA 벡터가 2개의 정수의 곱을 커버할 정도로 충분히 크면(예컨대, 2개의 64-bit 정수를 곱하는 예에서 적어도 512 비트), RHPA 벡터에 대한 명시적 앵커는 필요치 않다. 따라서, 이러한 연산을 위해 앵커 벡터 레지스터를 할당할 필요가 없을 수 있다. 예컨대, 하위 레인에 대한 w[i]는 초기값으로 0으로 가정될 수 있고, 다른 레인들에 대한 w[i]는 (N-V)의 특정 배수에 대응할 수 있으며, 여기서 N은 레인 크기이고 V는 중첩 크기이다. RHPA 누적기에 대해 RHPA 앵커가 제공되지 않는 곳에서, 중첩 크기 V는 명령으로부터 암시될 수 있다(예컨대, 상기 기술한 타입의 곱셈-누적 명령은 항상 특정 중첩 크기 V(예컨대, 8 또는 12 비트)를 이용하는 것으로 암시적으로 가정될 수 있다).
이러한 기술의 또 다른 이점은 도 20에서와 같이 입력 피연산자들을 RHPA 형식으로 변환할 필요가 없다는 것이다. 부분들은 더 긴 정수들에서 간단히 감산될 수 있고 더 작은 곱셈기(400)를 이용하여 곱해질 수 있으며, 부분 곱만이 부분 곱을 누적기로 누적시키는 것과 동일한 사이클로 행해질 수 있는 RHPA로 변환될 수 있다. 따라서, 제1곱셈을 수행하기 전 그러한 입력들을 RHPA로 변환할 경우에 추가의 사이클이 필요치 않다.
또한, 이러한 기술은 기존의 긴 곱셈기보다 훨씬 빠르다. 예를 들어, 512-bit 곱의 계산은 기존의 하드웨어에 약 60개의 명령어를 필요하며, 예를 들어 도 27에 나타낸 19개의 사이클과는 달리 더 많은 사이클이 필요하다고 추정된다.
도 26에 나타낸 64×64-bit 곱셈은 단지 예일 뿐이라는 것을 알아야 할 것이다. 소정의 X-bit×Y-bit 곱셈기가 허용될 수 있으며, 여기서 X는 Y와 같거나(크기가 비슷한 항들의 곱셈) 또는 Y와 다를 수 있다(크기가 다른 2개의 항의 곱셈). 따라서, 입력 피연산자들이 동일한 크기의 부분으로 나누어져야 하는 것이 필수적인 것은 아니다.
또한, 입력 피연산자들이 동일한 수의 부분을 갖는 것은 필수적이지 않다. 예를 들어, 64-bit 부분 a3, a2, a1, a0 및 b1, b0을 이용하여 256-bit 정수와 128-bit 정수의 곱셈이 수행될 수 있다.
일부의 경우, 입력 피연산자들 중 하나는 단지 하나의 부분만을 가질 수 있고, 다른 피연산자는 다수의 부분을 포함할 수 있다. 예를 들어, a7*b, a6*b, ..., a0*b에 대응하는 8개의 부분 곱 누적을 이용하여 64-bit 부분 a7-a0으로 형성된 512-bit 정수에 64-bit 정수 b를 곱할 수 있다.
또한, 중복 누적기의 레인 크기가 피연산자 a, b가 분할되는 부분의 크기와 동일해야 하는 것이 필수적인 것은 아니다. 보다 일반적으로, 중복 누적기의 레인 크기는 입력 피연산자들에 대해 사용된 부분 크기 X 또는 Y와 다를 수 있는 N 비트일 수 있다.
따라서, 입력 피연산자들의 상대적 크기(또는 부분 수), 입력 피연산자들이 분할되는 부분의 크기 X, Y, 및 중복 누적기에 의해 사용된 레인 크기 N에 관계 없이, 피연산자들 중 적어도 하나가 상대적으로 긴 주어진 곱셈은 다수의 더 작은 부분 곱 곱셈들로 분해될 수 있고, 그러한 생성된 부분 곱들은 중복된 형식으로 가산함으로써 전체 연산이 기존의 정수 표현을 이용하는 것보다 빠르게 수행될 수 있게 한다.
또한, 입력 피연산자들이 정수가 되는 것이 필수적인 것은 아니다. 예를 들어, 입력 피연산자들 중 하나 또는 모두는 FP 값 또는 RHPA 값일 수 있다. 예를 들어, RHPA 값에 DP FP 값을 곱할 때, RHPA 값의 각각의 레인에 DP FP 값의 유효수를 곱하여 대응하는 부분 곱을 생성할 수 있으며, 그러한 부분 곱과 관련된 가중치 w는 RHPA 앵커 및 FP 지수로부터 유도되고, 각각의 부분 곱은 도 26에 나타낸 것과 동일한 방식으로 RHPA 형식으로 변환하여 RHPA 레지스터에 누적할 수 있다. 다른 예들에서, 암호 키에 일련의 X*Y-bit 곱셈을 이용하여 더 작은 값을 곱할 수 있다.
도 26의 예에서, 유효성 표시 값 w는 곱 ay*bz와 별도로 표시된다. 그러나, 다른 옵션은 그 자신의 곱 내에서 유효성 표시 값을 직접 인코딩하는 것이다.
예를 들어, 도 29에 나타낸 바와 같이, 대안의 실시예는 입력을 53-bit 청크들로 분할하고, 적절한 지수로 각각의 청크를 인코딩하여, 입력 피연산자들이 부동 소수점 요소들의 벡터로 효과적으로 표현되도록하는 것이다. 따라서, 곱셈기에 제공되는 각 부분의 선택된 쌍 ay, bz는 단순히 DP FP 값들의 쌍이다. 도 30에 나타낸 바와 같이, 이후 DP FP 곱셈기는 곱해지는 2개의 FP 값 ay, bz의 지수들의 합에 대응하는 지수 Eproduct와 함께 완전 정밀도 106-bit 부분 곱을 생성하기 위해 상기 DP FP 값들의 쌍을 곱하는 데 이용될 수 있다. 다음에, 그러한 곱은 유효성 표시 값으로 상기 지수 Eproduct를 이용하여 RHPA로 변환될 수 있으며, 상기 기술한 바와 같이 RHPA 형식으로 누적될 수 있다. 이러한 접근방식에서 Eproduct는 최하위 유효 비트보다는 부분 곱의 최상위 유효 비트를 나타낸다는 것을 알아야 한다.
도 29 및 30의 방법은 지수가 그러한 수에 구성되기 때문에 명령 인코딩을 단순화할 것이다(암시적 또는 명시적 가중치 표시 값 w가 필요 없음). 도 29에 나타낸 바와 같이 긴 정수를 DP 청크로 변환하기 위해, 벡터의 각 64-bit 레인에 각각의 53 비트 청크를 배열하기 위한 치환 유닛을 제어하기 위한 추가 명령이 제공될 수 있다:
레인 4 3 2 1 0
비트 255:209 208:157 156:105 104:53 52:0
치환 후, 각각의 레인은 그 입력을 DP 수로 변환한다. 레인 i의 지수는 레인 i의 저차 53 비트에서 선행 0을 계산하여 LZC[i]를 얻은 후, 지수를 53*(i+1)-LZC[i]로 세팅함으로써 산출된다. 유효수는 일반적인 방식으로 구성되며, 선행하는 1을 버리고 그 분수를 왼쪽-정렬한다.
요약
일부의 특정 예들이 상기 기술되었지만, 보다 일반적으로 처리 회로는 다수의 N-bit 부분을 이용하여 P-bit 수치 값을 나타내는 중복 표현을 갖는 M-bit 데이터 값을 처리할 수 있으며, 여기서 M>P>N이다. 상기 처리 회로는 앵커 값에 기초하여 중복 표현의 각각의 N-bit 부분의 비트의 유효성을 확인할 수 있다. 적어도 2개의 인접한 N-bit 부분들의 그룹 내에서, 상기 그룹의 하위 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 부분의 다수의 최하위 유효 비트와 동일한 유효성을 갖는다. 상기 처리 회로는 다수의 독립된 N-bit 연산을 병렬로 수행하기 위한 다수의 연산 회로 유닛을 갖추며, 각각의 N-bit 연산은 중복 표현을 갖는 M-bit 결과 값의 대응하는 N-bit 부분을 생성하기 위해 상기 중복 표현을 갖는 적어도 2개의 M-bit 피연산자 값의 대응하는 N-bit 부분의 함수를 컴퓨팅하는 것을 포함한다.
이러한 접근방식은 병렬로 수행된 더 작은 N-bit 연산들에서 상대적으로 긴 피연산자들을 처리할 수 있게 하는 한편, 광범위한 수치 값들을 표현할 수 있게 하면서도 지원된 전체 범위를 포괄하는 충분히 넓은 가산기를 제공하는 하드웨어의 비용을 필요치 않게 한다. 앵커 값을 이용하여, 계산되는 유효성의 경계를 제한함으로써 하드웨어를 적게 사용할 수 있고 실제로 이는 대부분의 실제 계산을 수행하기에 충분하다. 중첩 비트는 더 짧은 N-bit 청크에서 상대적으로 긴 M-bit 데이터 값을 신속하게 처리할 수 있게 하는 데, 이는 캐리들이 매 가산마다 레인들간 전파될 필요 없이 레인 내에 수용될 수 있기 때문이다.
많은 상이한 종류의 처리 연산들이 피연산자 값들의 대응하는 N-bit 부분들에서 수행될 수 있다. 예를 들어, 각각의 N-bit 연산은 덧셈, 뺄셈, 곱셈, 논리 연산, 갈루아 필드 연산 등 또는 이들 중 둘 이상의 조합이 될 수 있다.
그러나, 그러한 기술은 N-bit 연산들이 가산 또는 감산인 경우에 특히 유용하다(일반적으로, A-B는 A+~B(여기서, ~B는 B의 2의 보수)와 등가이기 때문에, 용어 "가산"은 감산을 포함하는 것으로 해석되어야 한다). 가산들은 많은 처리 시스템에서 매우 일반적인 연산이며, 이에 따라 그것들이 다수의 병렬 N-bit 연산에 의해 수행(각 레인 내에 유지된 캐리와 함께)될 수 있게 하여 M-bit 데이터 값들의 가산 속도를 높이는 것은 주어진 처리 시스템의 처리 성능을 향상시키는 데 매우 유용하다. N-bit 연산이 가산일 때, 이것들은 단순히 덧셈 명령뿐만 아니라 곱셈, 곱셈-누적, 또는 연산의 일부로서 가산을 포함하는 소정 다른 종류의 연산을 위한 명령과 같은 다른 타입의 명령도 포함하는 광범위한 타입의 명령에 따라 실시될 수 있다.
연산 회로 유닛에 의해 수행되는 N-bit 연산들은 상이한 N-bit 연산들 사이에서 전파되는 어떠한 캐리도 없다는 의미에서 "독립적"일 수 있다.
처리 회로가 프로그램 가능한 앵커 값에 기초하여 중복 표현의 각각의 N-bit 부분의 비트의 유효성을 확인할 수 있지만, 그러한 그들 자체의 N-bit 연산 중에는 통상 앵커 값을 고려할 필요는 없다. 그러한 앵커 값은, 예를 들어 중복 표현의 값들을 규칙적으로 처리하는 경우가 아닌 중복 표현과 다른 형식들간 변환할 때 참조될 수 있다.
일반적으로, 상기 처리 회로는 입력 값을 중복 표현을 갖는 변환된 M-bit 데이터 값으로 변환하기 위한 제1타입의 변환 동작을 수행하는 것을 지원할 수 있다. 그러한 입력 값은, 예를 들어 부동 소수점, 정수 또는 고정 소수점과 같은 각기 다른 형식의 범위일 수 있다. 상기 변환 동작은 RHPA 형식으로 변환될 주어진 피연산자를 지정하는 독립 변환 명령에 따라 수행될 수 있다. 대안으로, 상기 변환 동작은 또 다른 타입의 명령에 따라 수행되는 보다 일반적인 처리 동작의 일부일 수 있다. 예를 들어, 누적 명령이 누적기 값에 가산되기 전에 중복 표현으로 변환되는 입력 값을 지정하거나, 또는 곱셈 및 변환 명령이 2개의 피연산자가 함께 곱해지도록 활성화된 후 곱셈의 곱이 중복 표현으로 변환될 수 있다.
상기 변환 동작에서, 소정의 중첩 비트는 입력 값의 부호에 따라 세팅될 수 있다. 따라서, 중첩 비트들은 그러한 중복 표현의 다음 레인으로 양 또는 음의 조정을 나타낼 수 있는 부호화된 값이 될 수 있다. 일부의 경우, 그러한 중첩 비트들은 입력 값이 양의 값일 때 0으로 세팅되고 음의 값일 때 1로 세팅될 수 있다.
특히, 부동 소수점 값을 중복 표현으로 변환하기 위해, 상기 변환 동작은 상기 부동 소수점 값의 유효수의 비트를 프로그램 가능한 앵커 값 및 부동 소수점 값의 지수에 따라 M-bit 데이터 값 내의 대응하는 유효성의 비트에 맵핑하는 동작, 적어도 하나의 N-bit 부분의 V 중첩 비트는 0으로 세팅됨; 입력 값이 양의 값일 때, 변환된 M-bit 데이터 값으로서 상기 맵핑의 결과를 출력하는 동작; 및 상기 입력 값이 음의 값일 때, 상기 변환된 M-bit 데이터 값을 생성하기 위해 상기 맵핑의 결과를 부정하는 동작을 포함한다.
앵커 값이 각각의 레인의 유효성을 개별적으로 지정하는 앵커 값들의 벡터를 포함하는 구현에서, 상기 변환 동작은 그러한 레인의 앵커 값에 기초하여 대응하는 레인의 비트에 입력된 부동 소수점 값을 다수의 병렬 변환 맵핑으로 수행될 수 있다.
또한, 상기 처리 회로는 제2 M-bit 값의 적어도 하나의 N-bit 부분에서의 중첩 비트가 제1 M-bit 값의 적어도 하나의 대응하는 N-bit 부분의 중첩 비트보다 작은 크기를 나타내는 중복 표현을 갖는 제2 M-bit 값을 생성하기 위해 중복 표현을 갖는 제1 M-bit 값에 대한 중첩 감소 동작을 지원할 수 있다. 후속의 가산 동안 추가의 다른 캐리들을 수용하기 위한 더 넓은 범위를 갖도록 주어진 중첩 비트의 세트를 0에 가깝게 감소시킴으로써, 레인 오버플로우의 가능성이 감소된다. 중첩 감소 동작은 각각의 동작 후에 주기적으로 또는 이하 기술되는 바와 같은 특정 조건이 충족될 때 수행될 수 있다.
그러한 중첩 감소 동작은 일부의 예에서 중복 표현을 갖는 제2 M-bit 값을 생성하기 위해 중복 표현의 제1 M-bit 값의 하나 이상의 N-bit 부분들에서 상기 제1 M-bit 값의 하나 이상의 후속 부분들로 중첩 비트들을 전파하기 위한 중첩 전파 동작일 수 있다. 제2 M-bit 값은 제1 M-bit 값과 동일한 P-bit 수치 값을 나타내지만, 상이한 패턴의 중첩 비트를 이용한다. 중첩 감소를 달성하기 위해 중첩 전파 동작을 이용하는 것은 그러한 중첩 감소에서 감소된 중첩 비트의 값들을 보존하기 위해 추가의 레지스터가 필요 없다는 이점을 갖는다. 중첩 비트의 값을 다음 레인으로 전파함으로써, 다음 레인의 비-중첩 비트들은 이전 레인의 중첩 비트에 의해 표현된 것과 동일한 값을 유지하도록 조정될 수 있어, 중복적으로 표현된 제2 M-bit 값에 대해 추가의 연산이 수행될 때 더 많은 캐리를 수용하기 위해 이전 레인의 중첩 비트에서 공간을 확보한다.
상기 중첩 전파 동작은 다양한 방식으로 수행될 수 있다. 일 예에서, 상기 중첩 전파 동작은 제1 M-bit 값을 모든 중첩 비트가 0인 제2 M-bit 값으로 변환하는 것과 같다. 이러한 경우, 상기 중첩 전파 동작은, 다음을 포함하는 다수의 순차 가산을 수행하는 것을 포함할 수 있는 데, 즉 수정된 비-중첩 비트 및 수정된 중첩 비트를 생성하기 위해 제1 M-bit 값의 최하위 유효 N-bit 부분의 중첩 비트들을 그러한 M-bit 값의 다음 N-bit 부분에 가산하기 위한 초기의 가산, 및 수정된 비-중첩 비트 및 수정된 중첩 비트를 생성하기 위해 이전 가산으로부터의 수정된 중첩 비트들을 제1 M-bit 값의 다음 N-bit 부분에 가산하기 위한 적어도 하나의 추가의 다른 가산을 포함하며, 상기 처리 회로는 각각의 순차 가산에서 생성된 수정된 비-중첩 비트에 기초하여 그리고 0으로 세팅된 중첩 비트들에 따라 제2 M-bit 값을 생성하도록 구성될 수 있다.
한편, 중첩 전파에 대한 제2접근방식은 중첩 비트를 갖는 각각의 N-bit 부분이 00, 01, 11 중 하나와 동일한 2개의 최하위 유효 중첩 비트를 갖고 소정의 나머지 중첩 비트가 상기 최하위 유효 중첩 비트와 동일한 값을 갖는 제2 M-bit 값으로 변환하는 것이다. 이러한 경우, 중첩 비트의 각 세트의 비트 패턴은 집합 {-1, 0, +1} 중 하나를 효과적으로 나타내며, 이는 완전히 중복되지는 않지만 여전히 오버플로우의 위험을 감소시킬 수 있다.
상기 제2접근방식의 경우, 그러한 중첩 전파 동작은 다수의 병렬 가산을 포함할 수 있으며, 각각의 가산은 제2 M-bit 값의 대응하는 부분을 생성하기 위해 제1 M-bit 값의 주어진 N-bit 부분의 중첩 비트를 다음의 N-bit 부분의 비-중첩 비트에 가산하는 것을 포함한다. 따라서, 이러한 접근방식은 가산이 병렬로 수행될 수 있게함으로써 중첩 전파 동작이 보다 빠르게 수행되게 한다. 긴 벡터의 경우, 이것은 상당한 성능적 이점이 될 수 있다.
특히, 각각의 병렬 가산은 하위 N-bit 부분의 중첩 비트(즉, 최상위 유효 중첩 비트와 동일한 최상위 유효 끝에서 패딩된 중첩 비트)의 N-bit 부호 확장을 중첩 비트가 0으로 세팅된 다음의 N-bit 부분에 대응하는 N-bit 값에 가산하는 것을 포함한다.
상기 제2접근방식을 이용하여 제1 M-bit 값을 제2(제한된 중복) M-bit 값으로 변환한 후, 제2 M-bit 값을 모든 중첩 비트가 0인 제3(비-중복) N-bit 값으로 변환할 수 있다. 이를 통해 병렬로 다수의 레인을 처리하는 동안 비-중복 값을 생성할 수 있다. 제2 N-bit값의 제3 N-bit 값으로의 변환은: 제2 M-bit 값의 중첩 비트들의 합계를 나타내는 중첩 값, 및 제2 M-bit 값의 비-중첩 값들의 합계를 나타내는 비-중첩 값을 생성하고; 상기 중첩 값 및 비-중첩 값의 비트 패턴에 따라 다수의 캐리 값을 생성하고; 다수의 병렬 가산을 수행하는 것을 포함하며, 상기 각각의 가산은 상기 제3 M-bit 값의 대응하는 부분을 생성하기 위해 상기 캐리 값 중 하나와 상기 중첩 값 및 비-중첩 값의 대응하는 부분을 가산한다.
중첩 감소 동작을 수행하는 또 다른 방식은 제1 M-bit 값의 하나 이상의 N-bit의 중첩 비트들을 중첩 누적기 값의 대응하는 N-bit 부분들에 가산하기 위해 중첩 누적 연산을 수행하고, 제2 M-bit 값을 생성하기 위해 제1 M-bit 값의 하나 이상의 N-bit 부분에 중첩 비트를 세팅하는 것을 포함한다. 이러한 접근방식이 중첩 누적기 값을 저장하기 위해 제2레지스터를 필요로 할 수 있지만, 최종 결과가 생성될 때까지 처리가 레인에 유지될 수 있는 값을 가지며, 이 지점에서 중첩 누적기 값의 N-bit 부분이 한 레인 위로 이동되어 최종 결과의 다음 레인에 가산될 수 있다. 또한, 이러한 접근방식은 일시적으로 오버플로우되지만, 이후 예외의 오버플로우를 유발하지 않고 정확히 계산되도록 M-bit 값에 의해 표현 가능한 범위로 다시 돌아 오는 계산을 허용할 수 있다는 점에서 이점이 있다.
일부의 예에서, 처리 회로는 중첩 감소 조건이 중복 표현의 제1 M-bit 값에 대해 만족되는지의 여부를 검출할 수 있고, 만족될 경우, 제1 M-bit 값에 대해 중첩 감소 동작의 수행을 유발시킬 수 있다. 일반적으로, 상기 중첩 감소 조건은 M-bit 값의 주어진 레인으로부터의 실제 오버플로우가 있을 때, 또는 다른 가산의 수행이 그와 같은 레인 오버플로우를 유발할 위험이 있을 때 만족될 수 있다.
제1예에서, 제1 M-bit 값을 생성하기 위해 특정 임계치의 가산 횟수가 수행될 때 중첩 감소 조건이 만족될 수 있다. 예를 들어, 상기 처리 회로는 상기 제1 M-bit 값을 생성하기 위해 얼마나 많은 연산들(예컨대, 가산들)이 수행되었는지를 나타내는 연산 카운트를 유지하고, 상기 연산 카운트가 연산의 수가 미리 정해진 수와 같거나 크다는 것을 나타낼 때 상기 제1 M-bit 값에 대한 중첩 감소 동작을 수행할 수 있다. 따라서, 연산이 수행될 때마다(예컨대, 제1 M-bit 값을 포함하는 레지스터로의 누적), 상기 처리 회로는 제1 M-bit 값을 생성하기 위해 연산되는 값의 수만큼 연산 카운트를 증가시킬 수 있고, 그러한 연산 카운트가 미리 정해진 수 또는 그 이상에 도달하면, 이는 중첩 감소 동작의 수행을 유발시킬 수 있다. 예를 들어, 상기 미리 정해진 수의 연산은 2V-1-1보다 작거나 같을 수 있다. 특히, 비-중첩 감소 동작의 경우 상기 미리 정해진 수의 연산은 2V-1-1보다 작거나 같고, 제한된-중첩 감소 동작의 경우 상기 미리 정해진 수의 연산은 2V-1-2보다 작거나 같을 수 있다. 중첩 감소 동작이 수행될 때마다 연산 카운트가 리세팅되어, 다음에 오버플로우의 위험이 있을 때까지 카운팅 동작을 재시작할 수 있다.
제2예에서, 상기 제1 M-bit 값의 주어진 N-bit 부분에 대한 중첩 비트가 미리 정해진 값을 가질 때 상기 중첩 감소 조건이 충족될 수 있다. 예를 들어, 그러한 미리 정해진 값은 다음 동작이 해당 N-bit 부분으로부터 오버플로우를 유발하는 값으로 세팅될 수 있다(예컨대, 중첩 비트를 이용하여 표현 가능한 가장 긍정적이거나 가장 부정적인 값).
제3예에서, 상기 중첩 감소 조건은 해당 값에 대한 처리 동작을 수행할 경우 상기 제1 M-bit 데이터 값의 N-bit 부분들 중 하나로부터 실제 오버플로우가 발생할 때 충족될 수 있다. 이러한 경우, 상기 처리 회로는 오버플로우를 검출한 다음, 제1 M-bit 값의 이전 값으로 되돌리고, 그것을 중첩 감소 동작을 이용하여 제2 M-bit 값으로 변환 한 다음, 제2 M-bit 값에 대한 처리 동작을 반복할 수 있다. 대안으로, 제1 M-bit 값을 처리하는 오버플로우된 결과는 제2 M-bit 값에 직접 맵핑 수 있다(이하 기술된 도 34의 예 참조).
대안으로, 일부의 예에서, 중첩 감소 동작은 중복-표현을 갖는 값에 대해 연산이 수행될 때마다 수행될 수 있고, 이에 따라 그 결과는 비-중복 또는 제한된-중복 형식으로 효과적으로 유지된다. 예를 들어, 일부 레인에 단지 2개의 중첩 비트만이 있는 경우, 이러한 옵션을 이용하는 것이 바람직하다.
일부의 경우, 중첩 전파 동작은 제2 M-bit 값을 생성하기 위해 제1 M-bit 데이터 값에 대한 다른 타입의 처리 동작을 수행하는 것과 동시에 수행될 수 있다. 예를 들어, 입력 피연산자를 확인하는 주어진 명령에 따라, 상기 중첩 전파 동작은 다수의 N-bit 가산 연산을 포함하여 수행될 수 있으며, 여기서 각 N-bit 가산 연산은, 제2 M-bit 값의 대응하는 N-bit 부분을 생성하기 위해, 제1 M-bit 데이터 값의 대응하는 N-bit 부분의 비-중첩 비트, 상기 제1 M-bit 데이터 값의 선행 N-bit 부분의 중첩 비트, 및 상기 중복 표현을 갖고 상기 입력 피연산자에 대응하는 제3 M-bit 값의 대응하는 N-bit 부분을 가산하는 것을 포함한다. 제1 M-bit 데이터 값이 이미 제한된-중복 형식이면, 이러한 연산으로부터 얻어지는 제2 M-bit 값도 제한된-중복일 것이다. 이러한 방식으로, 중첩 전파의 오버헤드가 본질적으로 가산과 동시에 수행될 수 있고, 또 M-bit 데이터 값이 제한된-중복 형식으로 유지되기 때문에 상기 중첩 전파의 오버헤드가 감소되며, 레인당 단지 2개의 중첩 비트만 필요하여, 비-중첩 비트로서 이용할 수 있는 더 많은 비트를 남김으로써, 그 전체 M-bit 값이 더 넓은 범위를 나타낼 수 있다. 일부의 예들에서, 제3 M-bit 값은 이미 그러한 중복 표현을 가질 수 있다. 다른 예들에서, 입력 피연산자는 상이한 표현으로 나타낼 수 있고, 제1 M-bit 값의 비-중첩 비트 및 중첩 비트들에 가산하기 전에 중복 표현을 갖는 제3 M-bit 값으로 변환될 수 있다.
또한, 상기 처리 회로는 중복 표현을 갖는 제1 M-bit 값을 상이한 표현의 변환된 값으로 변환하기 위한 제2타입의 변환 동작을 수행할 수 있다. 상기 상이한 표현은 정수, 고정 소수점 또는 부동 소수점을 포함하는 소정의 형식이 될 수 있다. 일부의 경우, 상기 제2타입의 변환 동작은 초기 M-bit 값을 제1 M-bit 값에 맵핑한 후, 상기 중첩 전파 동작에 의해 생성된 제1 M-bit 값을 변환된 값으로 변환하기 위해 상기 기술한 중첩 전파 동작을 수행하는 것을 포함할 수 있다. 그러한 중첩 전파 동작은 비-중복 또는 제한된-중복 버전일 수 있다. 대안으로, 변환될 M-bit 값이 이미 비-중복 또는 제한된-중복 형식이면, 초기 중첩 전파 동작을 수행할 필요가 없고 제1 M-bit 값은 단순히 변환된 값으로 직접 변환될 수 있다.
일 예에서, 제2타입의 변환 동작은 제1 M-bit 값의 각각의 N-bit 부분을 프로그램 가능한 앵커 값에 기초하여 대응하는 부동 소수점 값으로 맵핑하는 것을 포함할 수 있다. 이러한 접근방식은 제2 M-bit 값의 각각의 성분이 병렬로 처리될 수 있다는 이점을 갖는다. 일부의 경우, 최종 변환 결과는 각각의 성분이 제1 M-bit 값의 각각의 N-bit 부분으로부터 맵핑된 부동 소수점 값 중 하나인 벡터일 수 있다. 이것은 합계가 초기 중복 표현과 등가인 부동 소수점 값들의 벡터를 제공하고, 이에 따라 반올림으로 인한 정보 손실을 피함으로써 부동 소수점 형식의 중복 표현의 보다 높은 정밀도를 유지하는 데 유용하다. 대안으로, 상기 처리 회로는 변환된 값으로서 단일의 부동 소수점 값을 생성하기 위해 제1 N-bit 값의 각각의 N-bit 부분으로부터 맵핑된 각각의 부동 소수점 값을 가산하여 적절하게 반올림할 수 있다. 정확하게 반올림된 결과를 생성하기 위해, 제1 M-bit 값의 최하위 유효 N-bit 부분으로부터 맵핑된 부동 소수점 값으로 시작하고 제1 M-bit 값의 최상위 유효 N-bit 부분으로부터 맵핑된 부동 소수점으로 종료하는 순서로 각각의 부동 소수점 값들을 가산하는 것이 유용할 수 있다.
대안으로, 제2타입의 변환 동작은 선택된 그룹의 비트 외에 제1 M-bit 값의 하위 유효 비트들에 기초하여 제1 M-bit 값의 적어도 하나의 N-bit 부분의 비-중첩 비트들 중에서 선택된 비트들의 그룹을 반올림함으로써 부동 소수점 값의 유효수를 형성함으로써 수행될 수 있다. 이러한 접근방식은 보다 일반적으로 적용 가능하지만, 제1 N-bit 값의 한 부분으로 시작한 후 다음으로 이동하는 일부의 순차 처리가 필요할 수 있기 때문에 속도가 느릴 수 있다.
일부의 경우, 중복 표현의 주어진 M-bit 값과 연관된 앵커 값은 주어진 하드웨어 구현에 대해 정적으로 선택된 고정 값일 수 있다.
그러나, 프로그래머가 중복 표현의 M-bit 값을 이용하여 나타낼 유효성의 범위를 지정할 수 있도록, 더 큰 유연성이 프로그램 가능한 앵커 값을 이용하여 제공될 수 있다. 이것은 주어진 연산에서 계산될 유효성의 가변 윈도우를 규정하기 위해 프로그램 가능한 앵커 값을 이용함으로써 비교적 좁은 세트의 하드웨어 유닛들이 넓은 수 범위에 걸친 수치 값을 처리할 수 있게 한다.
일반적으로, 주어진 레인의 중첩 비트들은 부호화 정수 값을 나타내고, 이에 따라 다음 레인에 대한 양수 및 음수의 조정 모두를 나타낼 수 있다.
일부의 구현에서는 주어진 레인의 중첩 비트의 수가 N/2보다 큰 것을 허용할 수 있다. 이러한 경우, 해당 레인의 중첩 부분은 2개 이상의 후속 레인들의 비-중첩 부분들의 유효성이 중첩될 수 있다. 따라서, 3개 이상의 인접한 N-bit 부분의 그룹에서, 최하 부분의 중첩 비트들은 2개 이상의 다른 N-bit 부분에서의 일부의 비-중첩 비트와 동등한 유효성을 가질 수 있다. 이러한 접근방식이 오버플로우의 위험 없이 훨씬 더 많은 연산을 수행할 수 있으나, 레인에 걸친 비트들의 조합이 더 많이 필요할 수 있어 중첩 전파 및 변환 동작이 복잡해질 수 있다.
더 간단한 접근방식은 각각의 레인이 N/2 중첩 비트 이하를 갖도록 중첩 비트의 수를 제한하는 것일 수 있다. 중첩 비트의 수를 레인 크기의 절반 이하로 제한함으로써, 중첩 비트의 각 세트가 레인에 걸쳐 낮은 활동을 요구하는 단일의 더 유효한 레인으로의 조정을 나타내는 것과 같이 훨씬 하드웨어 구현이 더 간단해진다. 주어진 구현에 대해 더 큰 수의 중첩 비트가 요구되면, 레인 크기 N이 증가될 수 있다.
일부 구현에서, 그러한 중첩 비트(V)의 수는 하드웨어 구현에 의해 고정(하드와이어드(hardwired))될 수 있다. 그럼에도 불구하고, 동일한 코드가 상이한 중첩 크기를 이용하여 하드웨어 구현에서 실행 될지라도 프로그램이 사용되는 현재 중첩 크기를 결정할 수 있게 하도록, 주어진 구현에 의해 사용된 중첩 비트의 수를 확인하는 중첩 크기 값을 제공하는 것이 유용할 수 있다.
그러나, 보다 유연한 접근방식은 프로그래머 또는 컴파일러가 수행될 애플리케이션에 적합한 값으로 세팅할 수 있는 프로그램 가능한 중첩 크기 값을 제공하는 것이다. 이것은 중첩 크기 값의 선택을 가능하게 한다. 오버플로우 없이 많은 수의 가산이 수행되게 하는 것이 중요할 경우, 중첩 크기가 감소될 수 있다. 더 적은 가산이 필요할 것으로 예상된 경우, 중첩 크기의 감소는 더 적은 N-bit 레인의 처리에 의해 계산이 수행될 수 있게 함으로써, 다수의 M-bit 계산이 하드웨어에 제공된 상이한 서브세트의 N-bit 가산 회로 유닛에 의해 병렬로 수행될 수 있게 하여 성능을 향상시킬 수 있다. 따라서, 프로그래머는 수행되는 예상된 가산의 수 및 필요한 애플리케이션에 대해 예상된 값들의 수 범위에 따라 중첩 크기 값을 세팅할 수 있다.
중첩 크기 값은 다양한 방식으로 지정할 수 있지만, 일부의 경우 하드웨어에 제공된 제어 레지스터에 지정될 수 있다. 일부의 경우, 제어 레지스터는 각 레인의 유효성을 세팅하는 프로그램 가능한 앵커 값을 저장하는 데 사용된 동일한 레지스터일 수 있다.
대안으로, 중첩 크기 값은 중복 표현을 갖는 적어도 하나의 데이터 값을 처리하도록 처리 회로를 제어하는 명령에 의해 지정될 수 있다.
일부의 경우, 중첩 비트의 수는 중복 표현의 각각의 N-bit 부분에 대해 동일할 수 있다(상기 기술한 바와 같이 중첩 비트를 갖지 않을 수 있는 최상위 유효 N-bit 부분 외에). 이러한 경우, 단일의 중첩 크기 값은 상위 레인과 다른 중복 표현의 각 레인에서 사용될 중첩 비트의 수를 지정할 수 있다.
그러나, 상이한 수의 중첩 비트를 갖는 상이한 레인들을 제공하는 것도 가능하다. 예를 들어, 상위 레인보다 많은 수의 중첩 비트를 하위 레인에 제공하는 것이 유용할 수 있고, 표현 가능한 극단의 수가 드문 것처럼, 중첩 비트에 캐리가 상위 레인보다 하위 레인에 더 흔한 것으로 예상될 것이다. 따라서, 일부의 경우, 중복 표현의 N-bit 부분들 중 2개 이상에 대해 각각 개별적으로 중첩 비트의 수를 지정하는 중첩 크기 값을 제공하는 것이 유용할 수 있다. 일부의 경우, 각 레인의 중첩 크기는 각각 개별적으로 지정될 수 있다(또는 상위 레인 이외의 적어도 각각의 레인은 각각 별도의 중첩 크기 값을 가질 수 있다). 다른 예에서, 다수의 레인 서브세트는 각각 별도의 중첩 크기 표시를 가질 수 있지만, 동일한 서브세트 내의 레인들은 모두 동일한 중첩 크기를 사용할 수 있다.
상기 기술한 바와 같이, 중복 표현은 특히 그것들이 가산을 포함하는 경우 일련의 연산에 유용할 수 있다. 그러나, 그것은 누적기 레지스터에 적어도 하나의 값의 누적을 유발하는 누적 명령에 특히 유용하다.
중복 표현의 다수의 값이 N-bit 레인들간의 오버플로우의 위험 없이 가산될 수 있기 때문에, 이러한 기술은 또한 주어진 타입의 명령이 단일의 연산으로 3개 이상의 독립된 M-bit 데이터 값의 가산을 유발할 수 있게 하며, 그렇지 않을 경우 불가능하다. 이것은 데이터 값들을 누적할 때 성능이 더욱 빨라진다. 각각의 N-bit 가산 회로 유닛에서, 월리스 트리는 2개의 N-bit 항을 생성하기 위해 적어도 3개의 M-bit 값의 대응하는 N-bit 부분들을 결합하는 데 사용될 수 있고, 이후 캐리-전파 가산기는 M-bit 결과의 대응하는 N-bit 부분을 생성하기 위해 2개의 N-bit 항을 가산할 수 있다. 월리스 트리를 구현하는 다수의 방식이 존재하며, 소정의 공지된 기술이 사용될 수 있음을 알아야 할 것이다.
일부의 경우, 가산될 2개 이상의 M-bit 데이터 값은 입력 벡터의 각각의 성분으로부터 유도될 수 있다. 예를 들어, 이것은 단일의 명령이 누적될 다수의 입력 값을 지정하게 한다. 일부의 경우, 그러한 입력 벡터의 모든 성분에 대응하는 M-bit 데이터 값들은 대응하는 결과를 형성하기 위해 함께 가산될 수 있다.
그러나, 입력 벡터의 입력 데이터 성분(입력 데이터 요소라고도 함)들의 제1서브세트에 대응하는 M-bit 데이터 값들을 가산하기 위해 N-bit 가산들의 제1세트에 의해 생성된 제1 M-bit 결과, 및 상기 입력 벡터의 입력 데이터 성분들의 제2서브세트에 대응하는 M-bit 데이터 값들을 가산하기 위해 N-bit 가산들의 제2세트에 의해 생성된 제2 M-bit 결과를 갖는 2개 이상의 독립된 결과를 생성할 수도 있다. 따라서, M은 하드웨어에서 구현된 벡터 폭보다 더 작을 수 있다. 입력 데이터 요소 중 제1 및 제2서브세트에 대응하는 할당은 고정(주어진 구현에 대해 고정)되거나, 또는 프로그램 가능한 입력 맵핑 정보에 기초하여 변할 수 있다.
본 기술을 위한 또 다른 애플리케이션은 가산되는 M-bit 피연산자 값들이 2개의 피연산자 값의 곱셈 중에 생성된 부분 곱인 것이다. 이것은 다수의 더 작은 병렬 N-bit 연산을 이용하여 레인 폭 N보다 긴 2개의 값을 곱하는 데 특히 유용할 수 있다.
또 다른 예에서, 처리 회로는 제2데이터 값을 생성하기 위해 제1데이터 값에 대해 중첩 전파 동작을 수행하며, 상기 제1 및 제2데이터 값은 다수의 N-bit 부분을 포함하는 M-bit 데이터 값을 이용하여 P-bit 수치 값을 나타내는 중복 표현을 가지며, 여기서 M>P>N이고, 상기 중복 표현에서 최상위 유효 N-bit 부분과 다른 각각의 N-bit 부분은 다음의 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 갖는 다수의 중첩 비트를 포함하며, 상기 처리 회로는 상기 제1데이터 값의 대응하는 N-bit 부분의 비-중첩 비트들을 상기 제1데이터 값의 선행 N-bit 부분의 중첩 비트에 가산하는 것을 포함하는 가산 동작을 수행함으로써 최하위 유효 N-bit 부분과 다른 제2데이터 값의 각각의 N-bit 부분을 생성하도록 구성된다.
이러한 접근방식은 병렬 기술을 이용하여 중복 표현으로 나타낸 값으로부터 오버플로우의 가능성을 감소시키는 데 유용하다. 중첩 전파 동작의 이러한 특정 예가 고정된 유효성을 갖는 중복 형식으로 표현된 긴 정수 또는 고정 소수점 값들에 적용될 수 있다는 것을 알아야 할 것이다(상기 기술한 RHPA 형식에서와 같이 가변 유효성을 정의하는 연관된 프로그램 가능한 앵커 값이 아니라). 그와 같은 값들에 대한 중복 표현을 이용하면 여전히 긴 피연산자들을 빠르게 가산할 수 있으며, 상기 정의된 중첩 전파 동작은 상대적으로 빠른 병렬 연산을 이용하여 레인들간 오버플로우의 가능성을 감소시킬 수 있게 한다.
상기 중첩 전파 동작은 병렬로 수행된 제2데이터 값의 N-bit 부분들 중 적어도 2개에 대한 가산 연산들로 수행될 수 있다. 모든 가산 연산을 병렬로 수행하는 것이 필수적이지는 않다. 예를 들어, 가산의 일부만을 병렬로 수행하기에 충분한 하드웨어를 갖춘 시스템은 여전히 비-중복 형식으로 순차적 변환만을 구현하는 시스템보다 더 빠를 수 있다. 그럼에도 불구하고, 보다 우수한 성능을 위해, 처리 회로는 최하위 유효 N-bit 부분과 다른 제2데이터 값의 각각의 N-bit 부분들에 대해 병렬로 가산 연산을 수행할 수 있다. 상기 처리 회로는 각각의 가산 연산을 병렬로 수행하기 위한 병렬 가산 회로 유닛들을 가질 수 있다.
또 다른 예에서, 상기 처리 회로는 결과 벡터의 대응하는 결과 데이터 요소들을 생성하기 위해 적어도 하나의 피연산자 벡터의 각각의 데이터 요소에 대한 다수의 레인 처리를 수행할 수 있다. 레인 위치 정보는 처리의 각 레인에 대해 제공될 수 있고, 주어진 레인에 대한 그러한 레인 위치 정보는 결과 벡터의 하나 이상의 결과 데이터 요소에 걸친 대응하는 결과 데이터 내의 주어진 레인에 의해 생성될 대응하는 결과 데이터 요소의 상대적 위치를 확인한다. 처리의 각 레인은 해당 레인에 대해 확인된 레인 위치 정보에 따라 수행될 수 있다. 이러한 접근방식은 주어진 벡터 크기를 지원하는 처리 하드웨어가 더 크거나 더 작은 크기의 데이터 값의 처리를 유연하게 지원할 수 있게 한다.
이것은 통상적으로, 예컨대 벡터의 부분들간 캐리를 전파할지 여부의 결정을 가능하게 하는 벡터의 모든 성분에 대해 사용될 주어진 데이터 요소 크기를 지정하는 전역 입력을 수신하는 하드와이어드 회로를 갖는 표준 단일 명령 다중 데이터(SIMD) 기술과 대조된다. 그와 같은 SIMD에서, 결과 벡터의 특정 데이터 요소들이 주어진 결과의 하위 또는 상위에 있는지의 여부를 확인하기보다는 전체 벡터에 대해 데이터 요소 크기가 전역적으로 지정될 것이다. 각 레인에 대해 생성되는 대응 결과 내에서 상대 위치를 독립적으로 지정할 수 있는 능력을 제공함으로써, 하드웨어가 벡터 폭보다 큰 크기의 결과를 생성하게 하고, 상이한 크기의 다수의 결과가 단일의 벡터 내에서 병렬로 계산할 수 있게 하는 것을 포함하여 상이한 크기의 결과를 계산하기 위해 주어진 크기의 하드웨어를 이용하기 위한 훨씬 큰 유연성을 제공하며, 이는 표준 SIMD 기술에서는 불가능하다.
일반적으로, 각각의 데이터 요소에 대해 수행된 레인의 처리는 대응하는 데이터 요소들에 적용되는 소정 종류의 연산을 포함할 수 있다. 이는 산술 연산이나 논리 연산뿐만 아니라, 예를 들어 요소들을 하나의 표현에서 다른 표현으로 변환시키는(예컨대, 상기 기술한 RHPA 형식으로 변환 또는 그로부터 변환하는) 연산을 포함할 수 있다.
상기 레인 위치 정보는 다른 방식으로 표현될 수 있다. 일부의 경우, 그러한 레인 위치 정보는 대응하는 결과 데이터 요소가 대응하는 결과 데이터 값의 최상위 유효 데이터 요소인지의 여부를 확인할 수 있다. 일부 타입의 처리 동작의 경우, 결과의 최상위 유효 데이터 요소가 다른 요소들과 다르게 처리될 수 있고, 이에 따라 각각의 요소가 결과 데이터 값의 최상위 유효 비트 요소인지의 여부를 확인하기만 하면 된다(예컨대, 1-bit 표시자를 이용하는).
예를 들어, 주어진 레인에 대해 오버플로우 조건이 검출되면, 처리 회로는 레인 위치 정보가 해당 레인을 결과의 최상위 유효 데이터 요소에 대응하는 것으로 확인하는지의 여부에 기초하여 그러한 오버플로우를 어떻게 처리할지를 선택할 수 있다. 예를 들어, 이용가능한 다수의 오버플로우 처리 응답이 존재할 수 있으며, 이들 중 하나는 레인 위치 정보에 기초하여 선택될 수 있다. 예를 들어, 그러한 오버플로우 처리 응답은 아무것도 하지 않는 것, 오버플로우가 발생했음을 나타내는 정보를 세팅하는 것, 그 오버플로우를 처리하기 위한 예외를 유발시키는 것, 또는 상기 기술한 중첩 전파 동작의 성능을 야기하는 것을 포함할 수 있다. 이들 중 어느 것이 선택되는지는 생성되는 결과 내에서 오버플로우되는 레인의 위치에 좌우될 수 있다.
상기 레인 위치 정보는 또한 결과 데이터 요소가 결과의 최하위 유효 데이터 요소인지의 여부를 확인할 수 있다. 예를 들어, 최하위 유효 데이터 요소의 처리는 하위 요소들로부터 해당 레인에 캐리가 존재하지 않는다는 점에서 상위 차수 요소들과 다를 수 있으며, 일부 동작들(예컨대, 상기 기술한 중첩 전파 동작)은 다른 레인들과 다르게 저차 레인을 처리할 수 있다. 따라서, 최하위 유효 데이터 요소의 확인이 유용할 수 있다.
보다 일반적으로, 레인 위치 정보는 결과 데이터 값의 최하위 유효 요소, 최상위 유효 요소, 또는 중간 요소 중 하나를 생성하는 것으로 각각의 레인을 확인할 수 있다. 예를 들어, 2-bit 표시자는 이러한 정보를 나타낼 수 있다. 이것은 최상위 유효 레인 및 최하위 유효 레인 모두가 중간 레인과 다르게 처리될 필요가 있을 때 유용하다.
이러한 타입의 레인 위치 표시자는 주어진 크기의 하드웨어가 값들을 처리하는 방법에 대해 고도의 유연성을 가능하게 한다. 예를 들어, 처리의 최상위 또는 최하위 유효 레인에 대한 레인 위치 정보가 대응하는 결과 데이터 요소가 중간 데이터 요소임을 확인하면, 이는 처리 회로가 결과 벡터 자체보다 더 큰 비트의 수를 갖는 결과 벡터를 생성하게 할 수 있다. 그와 같은 일련의 연산이 그러한 결과 데이터 값의 각각의 부분을 계산하도록 수행될 수 있다.
대안으로, 레인 위치 정보가 처리의 중간 레인이 대응하는 결과에 대한 최하위 유효 또는 최상위 유효 데이터 요소를 생성하는 것임을 확인하면, 이는 처리 회로가 2개 이상의 독립된 결과 데이터 값을 포함하는 결과 벡터를 생성하게 할 것이다. 이는 2개 이상의 결과의 병렬 생성을 허용하여 성능을 향상시킨다.
일부의 예에서, 상기 레인 위치 정보가 상기 결과 벡터가 적어도 2개의 독립된 결과 데이터 값을 포함하는 것임을 확인할 때 다수의 입력 데이터 요소들을 포함하는 입력 벡터를 확인하는 미리 정해진 타입의 명령에 따라, 상기 처리 회로는 제1의 독립된 결과 데이터 값을 생성하기 위해 입력 벡터의 입력 데이터 요소들의 제1서브세트로부터 맵핑된 적어도 하나의 피연산자 벡터의 데이터 요소들의 제1서브세트에 대한 적어도 제1서브세트의 레인들의 처리, 및 제2의 독립된 결과 데이터 값들을 생성하기 위해 입력 벡터의 입력 데이터 성분들의 제2서브세트로부터 맵핑된 적어도 하나의 피연산자 벡터의 데이터 요소들의 제2서브세트에 대한 제2서브세트의 레인들의 처리를 수행할 수 있다. 따라서, 원래의 입력 벡터의 일부 요소들은 제1서브세트의 레인들의 처리에서 조합될 수 있고, 다른 요소들은 제2서브세트의 레인들의 처리에서 처리될 수 있다. 처리 회로는 프로그램 가능한 입력 맵핑 정보에 따라 어느 입력 데이터 요소들이 제1서브세트 또는 제2서브세트에 존재하는지를 선택할 수 있다. 이것은 동일한 타입의 명령이 입력 맵핑 정보의 상이한 값들을 세팅하여 상이한 조합들로 입력 벡터의 입력 데이터 요소들 결합할 수 있게 하는 데 유용하다. 그러한 입력 맵핑 정보는, 예컨대 그러한 명령에 의해 참조되는 레지스터에 저장될 수 있다.
상기 레인 위치 정보는 각각의 레인이 소정의 다른 레인과 독립적으로 수행될 수 있게 하도록 각각의 레인에 대한 처리를 순차적으로 수행하는 벡터 구현에 유용할 수 있다. 그러나, 병렬로 다수 레인의 처리를 수행하기 위한 병렬 회로 유닛이 있는 경우 특히 유용하다.
레인 위치 정보는 특정 프로그램을 작성하는 프로그래머가 처리할 값을 하드웨어에 맵핑하는 방법을 세팅할 수 있도록 프로그램할 수 있다. 대안으로, 상기 레인 위치 정보는 프로그래머에 의해 작성된 소스 코드를 컴파일링하는 컴파일러에 의해 세팅될 수 있다.
일부의 경우, 상기 레인 위치 정보는 또한 하드웨어에 의해 결정될 수 있고, 예를 들어 프로그래머는 생성될 전체 결과 크기를 지정할 수 있고, 이후 하드웨어는 그 지정된 결과 크기 및 회로 구현으로 구현된 하드웨어 벡터 길이의 표시에 기초하여 레인 위치 정보를 결정할 수 있다. 이것은 프로그래머가 주어진 구현을 위해 하드웨어에 구현된 특정 벡터 크기를 알지 못할 때 유용할 수 있다.
레인 위치 정보는 다양한 방식으로, 예컨대 명령 인코딩, 범용 레지스터, 또는 전용 제어 레지스터 내에 지정될 수 있다.
그러나, 상기 기술한 프로그래머 앵커 값 및 중첩 값 중 하나 또는 둘 모두와 동일한 제어 레지스터에 레인 위치 정보를 규정하는 것이 특히 유용할 수 있다.
다수의 X-bit 부분을 포함하는 제1피연산자 및 적어도 하나의 Y-bit 부분을 포함하는 제2피연산자를 곱하기 위한 방법이 제공되며, 상기 방법은:
각각이 상기 제1피연산자의 선택된 X-bit 부분과 상기 제2피연산자의 선택된 Y-bit 부분의 곱을 포함하는 다수의 부분 곱을 생성하는 단계;
각각의 부분 곱에 대해, 상기 부분 곱의 유효성을 나타내는 유효성 표시 정보에 따라 상기 부분 곱을 중복 표현으로 변환시키는 단계, 여기서 상기 중복 표현에서 상기 부분 곱은 다수의 N-bit 부분을 이용하여 나타내고, 상기 중복 표현의 적어도 2개의 인접한 N-bit 부분의 그룹에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 가짐; 및
상기 중복 표현에 나타난 다수의 부분 곱을 가산하는 단계를 포함한다.
이러한 방법을 이용하면, 레인들간 캐리 전파의 필요성을 피하기 위해, 부분 곱들의 가산을 위한 중복 표현의 이용이 소정의 캐리들이 중첩 비트에 수용될 수 있게 하기 때문에, 상대적으로 긴 피연산자들의 곱셈이 이전 기술들보다 빠르게 수행될 수 있다. 또한, 제1 및 제2피연산자를 중복 표현으로 변환할 필요가 없다.
상기 가산은 중복 표현으로 표현된 부분 곱들의 각각의 N-bit 부분을 이용하여 독립된 N-bit 가산들을 수행하기 위한 다수의 N-bit 가산 회로 유닛을 이용하여 수행될 수 있다. 그러한 곱의 전체 폭에 대응하는 더 큰 가산이 아닌 다수의 병렬 N-bit 가산을 이용함으로써, 가산이 더 빠르게 이루어져, 상대적으로 긴 피연산자들을 더 짧은 시간에 곱할 수 있게 한다.
일부의 경우, 모든 부분 곱을 먼저 계산한 다음, 후속의 추가 단계에서 곱들을 계속해서 더 할 수 있다. 그러나, 그러한 부분 곱의 수가 비교적 큰 경우, 이는 그러한 모든 부분 곱들을 저장하기 위해 상당한 수의 레지스터를 요구할 수 있어, 레지스터 압력을 증가시키고 레지스터를 필요로 하는 다른 연산의 성능을 감소시킬 수 있다.
따라서, 보다 효율적인 기술은 상기 중복 표현을 갖는 누적기 값을 저장하는 누적기 레지스터에 그러한 부분 곱들을 누적하는 것일 수 있다. 따라서, 하나 이상의 부분 곱이 생성되고 지금까지 계산된 부분 곱들의 누적 합계를 유지하는 누적 기 값에 가산될 수 있고, 일련의 누적은 제1 및 제2피연산자의 최종 곱을 계산한다.
특히, 제1 및 제2피연산자의 곱셈은 다수의 부분 곱 누적 연산을 이용하여 구현될 수 있고, 각각의 부분 곱 누적 연산은 상기 선택된 X-bit 부분 및 상기 선택된 Y-bit 부분으로서 선택된 부분들의 상이한 쌍에 대응하며:
상기 다수의 부분 곱들 중 하나를 생성하기 위해 상기 선택된 X-bit 부분과 선택된 Y-bit 부분을 곱하고;
상기 다수의 부분 곱들 중 하나를 유효성 표시 정보에 따라 중복 표현으로 변환하고;
갱신된 누적기 값을 생성하기 위해 상기 중복 표현의 상기 다수의 부분 곱들 중 하나를 상기 중복 표현을 갖는 누적기 값에 가산하는 것을 포함하고;
하나의 부분 곱 누적 연산을 위한 상기 갱신된 누적기 값은 다음 부분 곱 누적 연산을 위한 누적기 값으로 사용된다.
상기 부분 곱들을 한 번에 하나씩 생성하고 그것들을 누적기 값에 연속적으로 누적함으로써, 누적기 값을 저장하는 데 단지 하나의 레지스터만을 이용하기 때문에, 더 많은 레지스터를 다른 연산에 사용할 수 있게 한다.
그러한 부분 곱 누적 연산들은 하나의 부분 곱 누적 연산을 위한 누적기 값 및 부분 곱의 가산이 다음의 부분 곱 누적 연산을 위한 곱과 병렬로 수행될 수 있도록 파이프라인될 수 있다. 또한, 상기 곱셈 자체는 곱셈이 여러 단계로 수행되고, 초기의 부분 곱 누적 연산에 대한 이후의 곱셈 단계가 이후의 부분 곱 누적 연산에 대한 초기의 곱셈 단계와 병렬로 수행될 수 있도록 파이프라인될 수 있다.
그 최종의 결과는 여전히 중복 표현이 될 수 있다. 비-중복 표현(예를 들어, 정수)이 요구되면, 그 결과의 하나 이상의 후속 N-bit 부분에 하나 이상의 N-bit 부분의 중첩 비트들을 전파하기 위해, 중복 표현에서 다수의 부분 곱을 가산한 결과에 대해 중첩 전파 동작이 수행될 수 있다. 하나의 레인에서 다른 레인으로 중첩 비트들을 전파함으로써(예컨대, 중첩 비트를 다음 레인의 비-중첩 비트에 부가함으로써), 중첩 비트의 각 세트가 0인 비-중복 형식이 얻어질 수 있다. 상기 중첩 전파 동작은 상기 기술한 소정의 기술들을 이용하여 수행될 수 있다.
다른 예들에서, 모든 누적이 완료될 때까지 기다리는 것이 아니라, 적어도 하나의 중첩 전파 가산(어느 한 레인의 중첩 비트를 다음 레인의 중첩 비트에 가산하는 것)이 부분 곱 누적 연산들 중 적어도 하나와 병렬로 일어날 수 있다. 예를 들어, 부분 곱 누적 연산들이 각각의 부분 곱 누적 연산에서 생성된 부분 곱들의 유효성의 오름차순으로 수행되면, 입력 피연산자들의 곱을 나타내는 최종 누적기의 하나 이상의 하위 레인들은 누적기의 상위 레인들에 영향을 미치는 누적이 완료되기 전에 준비되고, 이에 따라 하위 레인들에서 수행된 중첩 전파 가산은 상위 레인들에 영향을 미치는 누적과 병렬로 수행될 수 있다.
그러한 유효성 표시 정보는 다양한 방식으로 나타낼 수 있다. 일반적으로, 상기 유효성 표시 정보는 상기 제1피연산자 내의 상기 선택된 X-bit 부분 및 상기 제2피연산자 내의 상기 선택된 Y-bit 부분의 상대적 위치에 의존할 수 있다.
일부의 경우, 유효성 표시 정보는 상기 선택된 X-bit 부분 및 상기 선택된 Y-bit 부분 중 적어도 하나와 관련된 유효성 표시 파라미터에 의존할 수 있다. 예를 들어, 그러한 입력 피연산자들이 FP 값들(또는 FP 값들에 맵핑된)인 경우, 유효성 표시 정보는 FP 값들의 지수들에 의존할 수 있다.
대안으로, 상기 유효성 표시 정보는 상기 부분 곱들 중 적어도 하나를 생성하기 위해 처리 회로를 제어하기 위한 명령에 의해 지정된 파라미터에 의존할 수 있다. 이는 생성될 부분 곱의 유효성을 명시적으로 확인하는 명령의 파라미터가 되거나, 또는 상기 유효성 표시 정보는 적어도 제1피연산자의 X-bit 부분이 상기 선택된 X-bit인지를 확인하는 명령의 파라미터로부터 암시될 수 있다(그리고 제2피연산자가 2개 이상의 Y-bit 부분을 가지면, Y-bit 부분이 선택된 Y-bit 부분인지를 확인하는 파라미터 또한 부분 곱의 유효성을 결정하가 위한 것으로 고려될 수 있다).
일부의 예에 있어서, 제1피연산자 및 제2피연산자는 정수를 포함한다. 대안으로, 제1/제2피연산자는 FP 또는 중복 표현과 같이 다른 형식일 수 있다. 또한, 일부의 경우, 상기 제1피연산자는 상기 제2피연산자와 다른 형식일 수 있다. 상기 제1 및 제2입력 피연산자들의 형식에 관계 없이, 그것들은 더 작은 X-bit 부분들 및 Y-bit 부분들 각각에 맵핑될 수 있어, 다수의 더 작은 곱셈들을 이용하여 입력 피연산자들의 곱셈을 허용한다.
일부의 예에서, X=Y이고, 이에 따라 상기 제1 및 제2피연산자가 동일한 크기의 부분을 갖는다. 대안으로, X와 Y가 다를 수 있다.
X와 Y가 둘 다 같거나, 또는 53보다 작으면, 부분 곱 곱셈은 2개의 2배-정밀도 부동 소수점 값의 유효수들을 곱하기 위해 제공된 부동 소수점 곱셈 회로를 이용하여 수행될 수 있다. X 또는 Y가 53보다 작으면, 그 부분들은 DP 곱셈기에 의해 곱해질 53-bit 값들을 생성하기 위해 패딩될 수 있다. 따라서, 이것은 기존의 곱셈 하드웨어가 사용될 수 있게 한다.
유사하게, X 및 Y 모두가 24보다 작거나 같으면, 또는 11보다 작거나 같으면, 그 곱셈들은 각각 단-정밀도 또는 반-정밀도 부동 소수점 곱셈기를 재사용할 수 있다.
대안으로, X*Y-bit 곱셈을 지원하는 기존의 곱셈 회로가 없다면 맞춤식 곱셈기가 제공될 수 있다.
일 예에서, 그러한 방법은 제1피연산자를 부동 소수점 값들의 대응하는 벡터로 맵핑하는 단계를 포함하며, 제1피연산자 및 지수의 각각의 X-bit 부분으로부터 맵핑된 유효수를 갖는 각각의 부동 소수점 값은 제1피연산자 내의 해당 X-bit 부분의 유효성에 의존하고, 여기서 주어진 부분 곱에 대한 유효성 표시 정보는 상기 주어진 부분 곱을 생성하는 데 이용된 선택된 X-bit 부분에 대응하는 부동 소수점 값의 지수에 의존한다. 입력 피연산자들을 부동 소수점 값들의 벡터로 맵핑함으로써, 유효성 표시 정보가 입력 X-bit 및 Y-bit 부분 및 부분 곱들 자체의 인코딩 내에서 명시적으로 표현될 수 있기 때문에, 다른 추가의 파라미터를 필요로 하지 않고, 연산이 단순화될 수 있다. 또한, 이것은 기존의 부동 소수점 하드웨어를 재사용할 수 있게 한다.
데이터 처리 장치는 상기 기술한 바와 같이 제1피연산자와 제2피연산자를 곱하기 위한 방법을 수행하도록 구성된 처리 회로를 포함할 수 있다.
예를 들어, 데이터 처리 장치는:
부분 곱을 생성하기 위해 다수의 X-bit 부분을 포함하는 제1피연산자의 선택된 X-bit 부분과 적어도 하나의 Y-bit 부분을 포함하는 제2피연산자의 선택된 Y-bit 부분을 곱하기 위한 곱셈 회로;
상기 부분 곱을 상기 부분 곱의 유효성을 나타내는 유효성 표시 정보에 따라 중복 표현을 갖는 변환된 부분 곱으로 변환하기 위한 변환회로, 여기서 상기 중복 표현에서 부분 곱은 다수의 N-bit 부분을 이용하여 나타내고, 상기 중복 표현의 적어도 2개의 인접한 N-bit 부분의 그룹에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 가짐; 및
상기 변환된 부분 곱을 상기 중복 표현을 갖는 누적기 값에 가산하기 위한 가산 회로를 포함한다.
상기 가산 회로는 상기 누적기 값 및 상기 변환된 부분 곱의 대응하는 N-bit 부분들을 이용하여 독립된 N-bit 가산들을 수행하기 위한 다수의 N-bit 가산 회로 유닛을 포함할 수 있다. 이것은 그러한 중복 표현을 이용하여 좀더 긴 값들의 가산을 좀더 빠르게 수행할 수 있게 한다.
상기 선택된 X-bit 부분 및 상기 선택된 Y-bit 부분으로서 선택된 부분들의 상이한 조합들에 대응하는 중복 표현에서 다수의 변환된 부분 곱들을 생성하기 위해 상기 곱셈 회로 및 변환 회로를 제어하고, 각각의 상기 다수의 부분 곱을 누적기 값에 가산하기 위한 가산 회로를 제어하기 위한 적어도 하나의 곱셈 명령에 응답하는 제어 회로(예컨대, 명령 디코더가)가 제공될 수 있다. 일부의 경우, 제1 및 제2피연산자를 지정하는 하나의 곱셈 명령이 모든 부분 곱의 생성을 제어할 수 있다. 다른 예들에서, 누적기 값에 곱해지고 누적되는 선택된 X-bit 부분 및 선택된 Y-bit 부분과 같은 부분들의 상이한 조합을 각각 지정하는 각각의 독립된 곱셈-누적 명령이 제공될 수 있다.
다른 예의 배열이 이하의 항목에서 규정된다:
1. 다수의 N-bit 부분을 이용하여 P-bit 수치 값을 나타내는 중복 표현을 갖는 M-bit 데이터 값을 처리하기 위한 처리 회로를 포함하며, 여기서 M>P>N이고;
상기 처리 회로는 앵커 값에 기초하여 상기 중복 표현의 각각의 N-bit 부분의 비트의 유효성을 확인하도록 구성되고, 그리고 적어도 2개의 인접한 N-bit 부분의 그룹 내에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 가지며, 여기서 V<N이고;
상기 처리 회로는 다수의 독립된 N-bit 연산을 병렬로 수행하기 위해 다수의 연산 회로 유닛을 포함하고, 각각의 N-bit 연산은 상기 중복 표현을 갖는 M-bit 결과 값의 대응하는 N-bit 부분을 생성하기 위해 상기 중복 표현을 갖는 적어도 2개의 M-bit 피연산자 값의 대응하는 N-bit 부분의 함수를 계산하는 것을 포함하는, 장치.
2. 항목 1에 있어서, 상기 다수의 연산 회로 유닛은 다수의 N-bit 가산을 병렬로 수행하기 위한 다수의 가산 회로 유닛을 포함하며, 각각의 N-bit 가산은 상기 M-bit 결과 값의 상기 대응하는 N-bit 부분을 생성하기 위해 상기 적어도 2개의 M-bit 피연산자 값의 대응하는 N-bit 부분을 가산하는 것을 포함하는, 장치.
3. 항목 1 또는 2에 있어서, 처리 회로는 입력 값을 중복 표현을 갖는 변환된 M-bit 데이터 값으로 변환시키기 위해 변환 동작을 수행하도록 구성되는, 장치.
4. 항목 3에 있어서, 변환 동작은 입력 값의 부호에 따라 중첩 비트를 세팅하는 것을 포함하는, 장치.
5. 항목 4에 있어서, 입력 값이 양의 값일 때 처리 회로는 중첩 비트를 0으로 세팅하도록 구성되고, 입력 값이 음의 값일 때 처리 회로는 중첩 비트를 1로 세팅하도록 구성되는, 장치.
6. 항목 4 또는 5에 있어서, 입력 값이 부동 소수점 값을 포함할 때, 변환 동작은:
상기 부동 소수점 값의 유효수의 비트를 앵커 값 및 부동 소수점 값의 지수에 따라 M-bit 데이터 값의 대응하는 유효성의 비트로 맵핑하고, 적어도 하나의 N-bit 부분의 중첩 비트를 0으로 세팅하고;
상기 입력 값이 양의 값일 때, 상기 맵핑의 결과를 변환된 M-bit 데이터 값으로서 출력하며;
상기 입력 값이 음의 값일 때, 상기 변환된 M-bit 데이터 값을 생성하기 위해 상기 맵핑의 결과를 부정하는 것을 포함하는, 장치.
7. 항목 1 내지 6 중 어느 한 항목에 있어서, 처리 회로는 제2 M-bit 값의 적어도 하나의 N-bit 부분에서의 중첩 비트가 제1 M-bit 값의 적어도 하나의 대응하는 N-bit 부분의 중첩 비트보다 작은 크기를 나타내는 중복 표현을 갖는 제2 M-bit 값을 생성하기 위해 중복 표현을 갖는 제1 M-bit 값에 대한 중첩 감소 동작을 수행하도록 구성되는, 장치.
8. 항목 7에 있어서, 중첩 감소 동작은 중첩 비트의 상이한 패턴을 이용하여 제1 M-bit 값과 동일한 P-bit 수치 값을 나타내는 중복 표현을 갖는 제2 M-bit 값을 생성하기 위해 상기 제1 M-bit 값의 하나 이상의 다음 N-bit 부분으로 상기 중복 표현을 갖는 제1 M-bit 값의 하나 이상의 N-bit 부분의 중첩 비트를 전파하기 위한 중첩 전파 동작을 포함하는, 장치.
9. 항목 8에 있어서, 제2 M-bit 값에서, 중첩 비트는 0인, 장치.
10. 항목 8 또는 9에 있어서, 중첩 전파 동작은 다수의 순차 가산을 수행하는 것을 포함하며, 상기 다수의 순차 가산은:
수정된 비-중첩 비트 및 수정된 중첩 비트를 생성하기 위해 제1 M-bit 값의 최하위 유효 N-bit 부분의 중첩 비트를 M-bit 값의 다음 N-bit 부분에 가산하기 위한 초기 가산; 및
수정된 비-중첩 비트 및 수정된 중첩 비트를 생성하기 위해 선행 가산으로부터의 수정된 중첩 비트를 제1 M-bit 값의 다음 N-bit 부분에 가산하기 위한 적어도 하나의 다른 가산을 포함하며,
처리 회로는 각각의 순차 가산에서 생성된 수정된 비-중첩 비트에 기초하여 제2 M-bit 값을 생성하도록 구성되고, 중첩 비트는 0으로 세팅되는, 장치.
11. 항목 8에 있어서, 제2 M-bit 값에서, 중첩 비트를 갖는 각각의 N-bit 부분에 대해, 2개의 최하위 유효 중첩 비트는 값 00, 01, 11 중 하나를 갖고, 소정의 나머지 중첩 비트는 제2최하위 유효 중첩 비트와 동일한 값을 갖는, 장치.
12. 항목 8 또는 11에 있어서, 중첩 전파 동작은 다수의 병렬 가산을 수행하는 것을 포함하며,
각각의 병렬 가산은 제1 M-bit 값의 다음 N-bit 부분에 대한 유효성에 대응하는 제2 M-bit 값의 N-bit 부분을 생성하기 위해 제1 M-bit 값의 주어진 N-bit 부분의 중첩 비트를 제1 M-bit 값의 다음 N-bit 부분의 비-중첩 비트에 가산하는 것을 포함하는, 장치.
13. 항목 11 또는 12에 있어서, 각각의 병렬 가산은 하위 N-bit 부분의 중첩 비트의 N-bit 부호 확장을 다음 N-bit 부분에 대응하는 N-bit 값에 가산하는 것을 포함하며, 소정의 중첩 비트는 0으로 세팅되는, 장치.
14. 항목 11 내지 13 중 어느 한 항목에 있어서, 중첩 전파 동작은 제2 M-bit 값을 모든 중첩 비트가 0인 제3 M-bit 값으로 변환시키는 것을 포함하는, 장치.
15. 항목 14에 있어서, 제2 M-bit 값을 제3 M-bit 값으로 변환시키는 것은:
상기 제2 M-bit 값의 중첩 비트의 합계를 나타내는 중첩 값 및 상기 제2 M-bit 값의 비-중첩 비트의 합계를 나타내는 비-중첩 값을 생성하고;
상기 중첩 값 및 비-중첩 값의 비트 패턴에 따라 다수의 캐리 값을 생성하며;
상기 제3 M-bit 값의 대응하는 부분을 생성하기 위해 상기 캐리 값 중 하나와 상기 중첩 값 및 비-중첩 값의 대응하는 부분을 각각 가산하기 위한 다수의 병렬 가산을 수행하는 것을 포함하는, 장치.
16. 항목 7에 있어서, 중첩 감소 동작은 상기 제2 M-bit 값을 생성하기 위해 제1 M-bit 값의 하나 이상의 N-bit 부분의 상기 중첩 비트를 중첩 누적기 값의 대응하는 N-bit 부분에 가산하고 제1 M-bit 값의 상기 하나 이상의 N-bit 부분의 상기 중첩 비트를 0으로 세팅하기 위한 중첩 누적 연산을 포함하는, 장치.
17. 항목 7 내지 16 중 어느 한 항목에 있어서, 처리 회로는 제1 M-bit 값을 생성하기 위해 수행된 연산의 수를 나타내는 연산 카운트를 유지하고, 상기 연산 카운트가 상기 연산의 수가 미리 정해진 수와 같거나 크다는 것을 나타낼 때 중첩 감소 동작을 수행하도록 구성되는, 장치.
18. 항목 17에 있어서, 상기 미리 정해진 수의 연산은 2V-1-1보다 작거나 같고, 여기서 V는 중첩 비트를 갖는 소정의 N-bit 부분에 포함되는 중첩 비트의 최소 수인, 장치.
19. 항목 17 또는 18에 있어서, 처리 회로는 중첩 감소 동작이 수행될 때 연산 카운트를 리세팅하도록 구성되는, 장치.
20. 항목 7 내지 16 중 어느 한 항목에 있어서, 처리 회로는 제1 M-bit 값의 N-bit 부분 중 하나에 대한 중첩 비트가 미리 정해진 값을 갖는 것을 검출함에 따라 중첩 감소 동작을 수행하도록 구성되는, 장치.
21. 항목 7 내지 16 중 어느 한 항목에 있어서, 처리 회로는 제1 M-bit 값에 대한 처리 동작을 수행할 때 제1 M-bit 데이터 값의 N-bit 부분 중 하나로부터 오버플로우를 검출함에 따라 중첩 감소 동작을 수행하도록 구성되는, 장치.
22. 항목 1 내지 21 중 어느 한 항목에 있어서, 처리 회로는 중복 표현을 갖는 제1 M-bit 값을 상이한 표현의 변환된 값으로 변환시키기 위한 변환 동작을 수행하도록 구성되는, 장치.
23. 항목 22에 있어서, 변환 동작은 중복 표현을 갖는 상기 제1 M-bit 값을 생성하기 위해 초기 M-bit 값의 하나 이상의 N-bit 부분의 중첩 비트를 초기 M-bit 값의 하나 이상의 다음 N-bit 부분으로 전파하기 위한 중첩 전파 동작을 수행하고, 상기 제1 M-bit 값을 변환된 값으로 변환하는 것을 포함하는, 장치.
24. 항목 22에 있어서, 처리 회로는 제1 M-bit 값의 각각의 N-bit 부분을 앵커 값에 따라 대응하는 부동 소수점 값으로 맵핑하도록 구성되는, 장치.
25. 항목 24에 있어서, 처리 회로는 제1 M-bit 값의 각각의 N-bit 부분으로부터 맵핑된 각각의 부동 소수점 값을 포함하는 벡터를 변환된 값으로서 출력하도록 구성되는, 장치.
26. 항목 24에 있어서, 처리 회로는 변환된 값으로 단일의 부동 소수점 값을 생성하기 위해 제1 M-bit 값의 각각의 N-bit 부분으로부터 맵핑된 각각의 부동 소수점 값을 가산하도록 구성되는, 장치.
27. 항목 26에 있어서, 제1 M-bit 값이 3개 이상의 N-bit 부분을 포함할 때, 처리 회로는 제1 M-bit 값의 최하위 유효 N-bit 부분으로부터 맵핑된 부동 소수점 값으로 시작하고 제1 M-bit 값의 최상위 유효 N-bit 부분으로부터 맵핑된 부동 소수점 값으로 종료하는 순서로 각각의 부동 소수점 값을 가산하도록 구성되는, 장치.
28. 항목 22에 있어서, 변환된 값이 부동 소수점 값일 때, 처리 회로는 제1 M-bit 값의 적어도 하나의 N-bit 부분의 비-중첩 비트들 중에서 선택된 그룹의 비트를 상기 선택된 그룹의 비트보다 상기 제1 M-bit 값의 하위 유효 비트에 기초하여 반올림함으로써 부동 소수점 값의 유효수를 형성하도록 구성되는, 장치.
29. 항목 1 내지 28 중 어느 한 항목에 있어서, 앵커 값은 프로그램 가능한, 장치.
30. 항목 1 내지 29 중 어느 한 항목에 있어서, 각각의 N-bit 부분은 N/2 중첩 비트 이하를 갖는, 장치.
31. 항목 1 내지 30 중 어느 한 항목에 있어서, 중첩 비트는 부호화 정수 값을 나타내는, 장치.
32. 항목 1 내지 31 중 어느 한 항목에 있어서, 처리 회로는 중첩 크기 값에 기초하여 중복 표현의 적어도 하나의 N-bit 부분에 대한 중첩 비트의 수를 확인하도록 구성되는, 장치.
33. 항목 32에 있어서, 중첩 크기 값은 프로그램 가능한, 장치.
34. 항목 32 또는 33에 있어서, 중첩 크기 값은 제어 레지스터에 지정되는, 장치.
35. 항목 34에 있어서, 앵커 값은 중첩 크기 값과 동일한 제어 레지스터에 지정되는, 장치.
36. 항목 33에 있어서, 중첩 크기 값은 중복 표현을 갖는 적어도 하나의 데이터 값을 처리하기 위해 처리 회로를 제어하기 위한 데이터 처리 명령에 의해 지정되는, 장치.
37. 항목 32 내지 36 중 어느 한 항목에 있어서, 중첩 크기 값은 중복 표현의 2개 이상의 N-bit 부분에 대해 각각 중첩 비트의 수를 지정하는, 장치.
38. 항목 2에 있어서, 누적 명령에 따라, 상기 다수의 가산 회로 유닛은 누적기 레지스터에 저장된 M-bit 누적기 값을 포함하는 중복 표현을 갖는 상기 적어도 2개의 M-bit 데이터 값 중 하나로 상기 다수의 N-bit 가산을 수행하도록 구성되고, 처리 회로는 M-bit 결과 값을 누적기 레지스터에 기록하도록 구성되는, 장치.
39. 항목 2에 있어서, 미리 정해진 타입의 명령에 따라, 각각의 N-bit 가산은 적어도 3개의 M-bit 데이터 값의 대응하는 N-bit 부분을 가산하는 것을 포함하는, 장치.
40. 항목 39에 있어서, 각각의 가산 회로 유닛은 2개의 N-bit 항을 생성하기 위해 적어도 3개의 M-bit 값의 대응하는 N-bit 부분을 결합하기 위한 월리스 트리 및 M-bit 결과 값의 대응하는 N-bit 부분을 생성하기 위해 2개의 N-bit 항을 가산하기 위한 캐리-전파 가산기를 포함하는, 장치.
41. 항목 1 내지 40 중 어느 한 항목에 있어서, 다수의 입력 데이터 요소를 포함하는 입력 벡터를 확인하는 미리 정해진 타입의 명령에 따라, 처리 회로는 입력 벡터의 대응하는 입력 데이터 요소에서 지정된 각각의 값에 대응하는 상기 적어도 2개의 M-bit 데이터 값으로 N-bit 연산을 수행하도록 구성되는, 장치.
42. 항목 41에 있어서, 미리 정해진 타입의 명령에 따라, 처리 회로는 입력 벡터의 입력 데이터 요소의 제1서브세트에 대응하는 M-bit 데이터 값에 대한 제1세트의 N-bit 연산, 및 입력 벡터의 입력 데이터 요소의 제2서브세트에 대응하는 M-bit 데이터 값에 대한 제2세트의 N-bit 가산을 수행하도록 구성되는, 장치.
43. 항목 42에 있어서, 처리 회로는 프로그램 가능한 입력 맵핑 정보에 따라 입력 데이터 요소가 제1서브세트 또는 제2서브세트에 존재하는지를 선택하도록 구성되는 장치.
44. 항목 1 내지 43 중 어느 한 항목에 있어서, 적어도 2개의 M-bit 피연산자 값은 2개의 피연산자 값을 곱하기 위한 적어도 하나의 곱셈 명령에 따라 처리 회로에 의해 생성된 다수의 부분 곱을 포함하는, 장치.
45. 다수의 N-bit 부분을 이용하여 P-bit 수치 값을 나타내는 중복 표현을 갖는 M-bit 데이터 값을 처리하는 단계를 포함하며, 여기서 M>P>N이고;
상기 중복 표현의 각각의 N-bit 부분의 비트의 유효성은 앵커 값에 기초하여 확인하고, 그리고 적어도 2개의 인접한 N-bit 부분의 그룹 내에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 가지며;
상기 처리 단계는 다수의 독립된 N-bit 연산을 병렬로 수행하는 단계를 포함하고, 각각의 N-bit 연산은 상기 중복 표현을 갖는 M-bit 결과 값의 대응하는 N-bit 부분을 생성하기 위해 상기 중복 표현을 갖는 적어도 2개의 M-bit 피연산자 값의 대응하는 N-bit 부분의 함수를 계산하는 것을 포함하는 데이터 처리 방법.
46. 다수의 N-bit 부분을 이용하여 P-bit 수치 값을 나타내는 중복 표현을 갖는 M-bit 데이터 값을 처리하기 위한 수단을 포함하며, 여기서 M>P>N이고;
상기 처리 수단은 앵커 값에 기초하여 상기 중복 표현의 각각의 N-bit 부분의 비트의 유효성을 확인하도록 구성되고, 그리고 적어도 2개의 인접한 N-bit 부분의 그룹 내에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 가지며;
상기 처리 수단은 다수의 독립된 N-bit 연산을 병렬로 수행하기 위한 수단을 포함하고, 각각의 N-bit 연산은 상기 중복 표현을 갖는 M-bit 결과 값의 대응하는 N-bit 부분을 생성하기 위해 상기 중복 표현을 갖는 적어도 2개의 M-bit 피연산자 값의 대응하는 N-bit 부분의 함수를 계산하는 것을 포함하는, 장치.
47. 제2데이터 값을 생성하기 위해 제1데이터 값에 대한 중접 전파 동작을 수행하기 위한 처리 회로를 포함하며, 상기 제1 및 제2데이터 값은 다수의 N-bit 부분을 포함하는 M-bit 데이터 값을 이용하여 P-bit 수치 값을 나타내는 중복 표현을 갖고, 여기서 M>P>N이고, 상기 중복 표현에서, 최상위 유효 N-bit 부분과 다른 각각의 N-bit 부분은 다음 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 갖는 다수의 중첩 비트를 포함하며;
상기 처리회로는 제1데이터 값의 대응하는 N-bit 부분의 비-중첩 비트를 상기 제1데이터 값의 선행 N-bit 부분의 중첩 비트에 가산하는 것을 포함하는 가산 연산을 수행함으로써 최하위 유효 N-bit 부분과 다른 제2데이터 값의 각각의 N-bit 부분을 생성하도록 구성되는, 장치.
48. 항목 47에 있어서, 제2데이터 값에서, 중첩 비트를 갖는 각각의 N-bit 부분에 대해, 2개의 최하위 유효 중첩 비트는 값 00, 01, 11 중 하나를 갖고, 소정의 나머지 중첩 비트는 제2최하위 유효 중첩 비트와 동일한 값을 갖는, 장치.
49. 항목 47 또는 48에 있어서, 처리 회로는 제2데이터 값의 적어도 2개의 N-bit 부분에 대해 병렬로 가산 연산을 수행하도록 구성되는, 장치.
50. 항목 47 내지 49 중 어느 한 항에 있어서, 처리 회로는 최하위 유효 N-bit 부분과 다른 제2데이터 값의 각각의 상기 N-bit 부분에 대해 병렬로 가산 연산을 수행하도록 구성되는, 장치.
51. 항목 47 내지 50 중 어느 한 항목에 있어서, 처리 회로는 제2데이터 값의 적어도 2개의 N-bit 부분에 대해 병렬로 상기 가산 연산을 수행하기 위한 다수의 병렬 가산 회로 유닛을 포함하는, 장치.
52. 항목 47 내지 51 중 어느 한 항목에 있어서, 가산 연산은 선행 N-bit 부분의 중첩 비트의 N-bit 부호 확장을 0으로 세팅된 소정의 중첩 비트를 갖는 제1데이터 값의 대응하는 N-bit 부분과 등가인 N-bit 값에 가산하는 것을 포함하는, 장치.
53. 항목 47 내지 52 중 어느 한 항목에 있어서, 처리 회로는 제1데이터 값의 최하위 유효 N-bit 부분의 대응하는 비-중첩 비트와 동일한 비-중첩 비트 및 0으로 세팅된 중첩 비트를 갖는 제2데이터 값의 최하위 유효 N-bit 부분을 생성하도록 구성되는, 장치.
54. 항목 47 내지 53 중 어느 한 항목에 있어서, 중첩 전파 동작은 제2데이터 값을 중복 표현을 갖는 제3데이터 값으로 변환하는 것을 더 포함하며, 상기 제3데이터 값의 모든 중첩 비트는 0인, 장치.
55. 항목 54에 있어서, 처리 회로는:
제1 M-bit 값의 중첩 비트의 합계를 나타내는 중첩 값, 및 제2 M-bit 값의 비-중첩 비트의 합계를 나타내는 비-중첩 값을 생성하고;
상기 중첩 값 및 비-중첩 값의 비트 패턴에 따라 다수의 캐리 값을 생성하며;
제3데이터 값의 대응하는 부분을 생성하기 위해 상기 캐리 값 중 하나와 상기 중첩 값 및 비-중첩 값의 대응하는 부분을 각각 가산하기 위한 다수의 병렬 가산을 수행함으로써, 제3데이터 값을 생성하도록 구성되는, 장치.
56. 항목 47 내지 55 중 어느 한 항목에 있어서, 입력 피연산자를 확인하는 명령에 따라, 처리 회로는 중첩 전파 동작을 수행하도록 구성되며, 상기 가산 연산은:
제1데이터 값의 상기 대응하는 N-bit 부분의 상기 비-중첩 비트;
상기 제1데이터 값의 상기 선행 N-bit 부분의 상기 중첩 비트; 및
상기 중복 표현을 갖고 상기 입력 피연산자에 대응하는 제3데이터 값의 대응하는 N-bit 부분;을 가산하는 것을 포함하는, 장치.
57. 항목 56에 있어서, 입력 피연산자는 상기 중복 표현과 다른 표현을 가지며, 상기 명령에 따라, 처리 회로는 상기 입력 피연산자를 상기 제3데이터 값으로 변환시키도록 구성되는, 장치.
58. 항목 47 내지 57 중 어느 한 항목에 있어서, 중첩 비트는 부호화 정수 값을 나타내는, 장치.
59. 항목 47 내지 58 중 어느 한 항목에 있어서, 처리 회로는 중첩 크기 값에 기초하여 중첩 비트의 수를 확인하도록 구성되는, 장치.
60. 항목 59에 있어서, 중첩 크기 값은 프로그램 가능한, 장치.
61. 항목 47 내지 60 중 어느 한 항목에 있어서, 처리 회로는 앵커 값에 기초하여 중복 표현을 이용하여 나타낸 데이터 값의 각각의 N-bit 부분의 비트의 유효성을 확인하도록 구성되는, 장치.
62. 항목 47 내지 61 중 어느 한 항목에 있어서, 처리 회로는 제1데이터 값을 생성하기 위해 수행된 연산의 수를 나타내는 연산 카운트를 유지하고, 상기 연산 카운트가 상기 연산의 수가 미리 정해진 수와 같거나 크다는 것을 나타낼 때 중첩 전파 동작을 수행하도록 구성되는, 장치.
63. 항목 62에 있어서, 상기 미리 정해진 수는 2V-1-2보다 작거나 같고, 여기서 V는 중첩 비트를 갖는 소정의 N-bit 부분에 포함되는 중첩 비트의 최소 수인, 장치.
64. 항목 62 또는 63에 있어서, 처리 회로는 중첩 전파 동작이 수행될 때 연산 카운트를 리세팅하도록 구성되는, 장치.
65. 항목 47 내지 61 중 어느 한 항목에 있어서, 처리 회로는 제1데이터 값의 N-bit 부분 중 하나에 대한 중첩 비트가 미리 정해진 값을 갖는 것을 검출함에 따라 중첩 전파 동작을 수행하도록 구성되는, 장치.
66. 항목 47 내지 61 중 어느 한 항목에 있어서, 처리 회로는 제1데이터 값에 대한 처리 동작을 수행할 때 제1데이터 값의 N-bit 부분 중 하나로부터 오버플로우를 검출함에 따라 중첩 전파 동작을 수행하도록 구성되는, 장치.
67. 다수의 N-bit 부분을 포함하는 M-bit 데이터 값을 이용하여 P-bit 수치 값을 나타내는 중복 표현을 갖는 제1데이터 값을 수신하는 단계, 여기서 M>P>N이고, 상기 중복 표현에서, 최상위 유효 N-bit 부분과 다른 각각의 N-bit 부분은 다음 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 갖는 다수의 중첩 비트를 포함함; 및
상기 중복 표현을 갖는 제2데이터 값을 생성하기 위해 상기 제1데이터 값에 대한 중첩 전파 동작을 수행하는 단계를 포함하며,
최하위 유효 N-bit 부분과 다른 제2데이터 값의 각각의 N-bit 부분은 상기 제1데이터 값의 대응하는 N-bit 부분의 비-중첩 비트를 상기 제1데이터 값의 선행 N-bit 부분의 중첩 비트에 가산하는 것을 포함하는 가산 연산을 수행함으로써 생성되는 데이터 처리 방법.
68. 제2데이터 값을 생성하기 위해 제1데이터 값에 대한 중첩 전파 동작을 수행하기 위한 수단을 포함하며, 상기 제1 및 제2데이터 값은 다수의 N-bit 부분을 포함하는 M-bit 데이터 값을 이용하여 P-bit 수치 값을 나타내는 중복 표현을 갖고, 여기서 M>P>N이고, 상기 중복 표현에서, 최상위 유효 N-bit 부분과 다른 각각의 N-bit 부분은 다음 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 갖는 다수의 중첩 비트를 포함하며;
상기 중첩 전파 동작을 수행하기 위한 수단은 상기 제1데이터 값의 대응하는 N-bit 부분의 비-중첩 비트를 상기 제1데이터 값의 선행 N-bit 부분의 중첩 비트에 가산하는 것을 포함하는 가산 연산을 수행함으로써 최하위 유효 N-bit 부분과 다른 제2데이터 값의 각각의 N-bit 부분을 생성하도록 구성되는, 장치.
69. 결과 벡터의 대응하는 결과 데이터 요소를 생성하기 위해 적어도 하나의 피연산자 벡터의 각각의 데이터 요소에 대한 다수의 레인 처리를 수행하기 위한 처리 회로를 포함하며;
상기 처리 회로는 각각의 처리의 레인에 대한 레인 위치 정보를 확인하도록 구성되고, 주어진 레인에 대한 레인 위치 정보는 결과 벡터의 하나 이상의 결과 데이터 요소에 걸친 대응하는 결과 데이터 값 내에서 주어진 레인에 의해 생성될 대응하는 결과 데이터 요소의 상대적 위치를 확인하며;
상기 처리 회로는 상기 레인에 대해 확인된 레인 위치 정보에 따라 각각의 레인 처리를 수행하도록 구성되는, 장치.
70. 항목 69에 있어서, 주어진 레인에 대한 레인 위치 정보는 상기 대응하는 결과 데이터 요소가 그러한 대응하는 결과 데이터 값의 최상위 유효 데이터 요소인지를 확인하는, 장치.
71. 항목 70에 있어서, 처리의 레인 중 어느 하나에 대해 검출된 오버플로우 조건에 따라, 처리 회로는 상기 처리의 레인 중 어느 하나에 대한 레인 위치 정보가 대응하는 결과 데이터 요소가 그 대응하는 결과 데이터 값의 최상위 유효 데이터 요소인 것을 나타내는지의 여부에 따라 다수의 오버플로우 처리 응답 중 하나를 선택하도록 구성되는, 장치.
72. 항목 69 내지 71 중 어느 한 항목에 있어서, 주어진 레인에 대한 레인 위치 정보는 대응하는 결과 데이터 요소가 그 대응하는 결과 데이터 값의 최하위 유효 데이터 요소인지의 여부를 확인하는, 장치.
73. 항목 69 내지 72 중 어느 한 항목에 있어서, 주어진 레인에 대한 레인 위치 정보는 상기 대응하는 결과 데이터 요소를 아래와 같은 데이터 요소 중 하나로서 확인하는, 장치:
대응하는 결과 데이터 값의 최하위 유효 데이터 요소;
상기 대응하는 결과 데이터 값의 최상위 유효 데이터 요소; 및
상기 대응하는 결과 데이터 값의 중간 데이터 요소.
74. 항목 73에 있어서, 레인 위치 정보는 2-bit 표시자를 포함하는, 장치.
75. 항목 73 또는 74에 있어서, 처리의 최상위 또는 최하위 유효 레인에 대한 레인 위치 정보가 대응하는 결과 데이터 값의 중간 데이터 요소로서 대응하는 결과 데이터 요소를 확인(즉, 식별)할 때, 처리 회로는 결과 벡터보다 큰 비트 수를 갖는 결과 데이터 값의 부분을 나타내는 결과 벡터를 생성하도록 구성되는, 장치.
76. 항목 73 내지 75 중 어느 한 항목에 있어서, 처리의 최상위 또는 최하위 유효 레인과 다른 처리의 중간 레인에 대한 레인 위치 정보가 대응하는 결과 데이터 값의 최하위 유효 데이터 요소 또는 최상위 데이터 요소로서 대응하는 결과 데이터 요소를 확인할 때, 처리 회로는 2개 이상의 독립된 결과 데이터 값을 포함하는 결과 벡터를 생성하도록 구성되는, 장치.
77. 항목 69 내지 76 중 어느 한 항목에 있어서, 레인 위치 정보가 결과 벡터가 적어도 2개의 독립된 결과 데이터 값을 포함한다는 것을 확인할 때 다수의 입력 데이터 요소를 포함하는 입력 벡터를 확인하는 미리 정해진 타입의 명령에 따라, 처리 회로는 적어도:
제1의 상기 독립된 결과 데이터 값을 생성하기 위해 입력 벡터의 제1서브세트의 입력 데이터 요소들로부터 맵핑된 상기 적어도 하나의 피연산자 벡터의 제1서브세트의 데이터 요소들에 대한 제1서브세트의 레인들의 처리; 및
제2의 독립된 결과 데이터 값을 생성하기 위해 입력 벡터의 제2서브세트의 입력 데이터 요소들로부터 맵핑된 상기 적어도 하나의 피연산자 벡터의 제2서브세트의 데이터 요소들에 대한 제2서브세트의 레인들의 처리를 수행하도록 구성되는, 장치.
78. 항목 77에 있어서, 처리 회로는 입력 데이터 요소가 프로그램 가능한 입력 맵핑 정보에 따라 제1서브세트의 입력 데이터 요소 또는 제2서브세트의 입력 데이터 요소에 있는지를 선택하도록 구성되는, 장치.
79. 항목 69 내지 78 중 어느 한 항목에 있어서, 처리 회로는 다수의 레인 처리를 병렬로 수행하기 위해 다수의 처리 회로 유닛을 포함하는, 장치.
80. 항목 69 내지 79 중 어느 한 항목에 있어서, 레인 위치 정보는 프로그램 가능한, 장치.
81. 항목 69 내지 80 중 어느 한 항목에 있어서, 각각의 레인에 대한 레인 위치 정보는 제어 레지스터에 지정되는, 장치.
82. 항목 69 내지 81 중 어느 한 항목에 있어서, 처리 회로는 앵커 값에 기초하여 적어도 하나의 피연산자 벡터 또는 결과 벡터의 각각의 데이터 요소의 비트의 유효성을 확인하도록 구성되는, 장치.
83. 항목 82에 있어서, 레인 위치 정보 및 프로그램 가능한 앵커 값은 동일한 제어 레지스터에 지정되는, 장치.
84. 항목 69 내지 83 중 어느 한 항목에 있어서, 대응하는 결과 값의 최상위 유효 결과 데이터 요소와 다른 결과 데이터 요소는 다음 결과 데이터 요소의 다수의 최하위 유효 비트와 동일한 유효성을 갖는 다수의 중첩 비트를 포함하는, 장치.
85. 항목 69 내지 84 중 어느 한 항목에 있어서, 레인 위치 정보 및 중첩 비트의 수를 확인하는 중첩 값은 동일한 제어 레지스터에 지정되는, 장치.
86. 결과 벡터의 대응하는 결과 데이터 요소를 생성하기 위해 적어도 하나의 피연산자 벡터의 각각의 데이터 요소에 수행될 각각의 다수의 레인의 처리에 대한 레인 위치 정보를 확인하는 단계, 여기서 주어진 레인에 대한 상기 레인 위치 정보는 결과 벡터의 하나 이상의 결과 데이터 요소에 걸친 대응하는 결과 데이터 값 내에 주어진 레인에 의해 생성될 대응하는 결과 데이터 요소의 상대적 위치를 확인함; 및
상기 레인에 대해 확인된 레인 위치 정보에 따라 각각의 레인의 처리를 수행하는 단계를 포함하는 데이터 처리 방법.
87. 결과 벡터의 대응하는 결과 데이터 요소를 생성하기 위해 적어도 하나의 피연산자 벡터의 각각의 데이터 요소에 대한 다수의 레인의 처리를 수행하기 위한 수단을 포함하며;
상기 수행하기 위한 수단은 각 레인 처리에 대한 레인 위치 정보를 확인하도록 구성되고, 주어진 레인에 대한 상기 레인 위치 정보는 결과 벡터의 하나 이상의 결과 데이터 요소에 걸친 대응하는 결과 데이터 값 내의 주어진 레인에 의해 생성될 대응하는 결과 데이터 요소의 상대적 위치를 확인하고,
상기 수행하기 위한 수단은 상기 레인에 대해 확인된 레인 위치 정보에 따라 각각의 레인의 처리를 수행하도록 구성되는, 장치.
88. 다수의 X-bit 부분을 포함하는 제1피연산자와 적어도 하나의 Y-bit 부분을 포함하는 제2피연산자를 곱하기 위한 데이터 처리 방법으로서, 상기 데이터 처리 방법은:
각각이 상기 제1피연산자의 선택된 X-bit 부분과 상기 제2피연산자의 선택된 Y-bit 부분의 곱을 포함하는 다수의 부분 곱을 생성하는 단계;
각각의 부분 곱에 대해, 상기 부분 곱의 유효성을 나타내는 유효성 표시 정보에 따라 상기 부분 곱을 중복 표현으로 변환시키는 단계, 여기서 상기 중복 표현에서 상기 부분 곱은 다수의 N-bit 부분을 이용하여 나타내고, 상기 중복 표현의 적어도 2개의 인접한 N-bit 부분의 그룹에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 가짐; 및
상기 중복 표현에 나타난 다수의 부분 곱을 가산하는 단계를 포함하는 데이터 처리 방법.
89. 항목 88에 있어서, 부분 곱의 가산은 중복 표현에 나타난 부분 곱의 각각의 N-bit 부분을 이용하여 독립된 N-bit 가산을 수행하기 위한 다수의 N-bit 가산 회로 유닛을 이용하여 수행되는 데이터 처리 방법.
90. 항목 88 또는 89에 있어서, 부분 곱의 가산은 상기 중복 표현을 갖는 누적기 값을 저장하는 누적기 레지스터 내에 부분 곱을 누적하는 단계를 포함하는 데이터 처리 방법.
91. 항목 88 내지 90 중 어느 한 항목에 있어서, 곱셈은 각각이 상기 선택된 X-bit 부분 및 상기 선택된 Y-bit 부분으로 선택된 상이한 쌍의 부분에 대응하는 다수의 부분 곱 누적 연산을 포함하며,
상기 다수의 부분 곱 중 하나를 생성하기 위해 상기 선택된 X-bit 부분과 상기 선택된 Y-bit 부분을 곱하는 단계;
유효성 표시 정보에 따라 상기 다수의 부분 곱 중 하나를 중복 표현으로 변환시키는 단계; 및
갱신된 누적기 값을 생성하기 위해 상기 중복 표현에서 상기 다수의 부분 곱 중 하나를 상기 중복 표현을 갖는 누적기 값에 가산하는 단계를 포함하고;
하나의 부분 곱 누적 연산을 위한 갱신된 누적기 값은 다음 부분 곱 누적 연산을 위한 누적기 값으로 사용되는 데이터 처리 방법.
92. 항목 88 내지 91 중 어느 한 항목에 있어서, 중복 표현에서 다수의 부분 곱을 가산하는 결과에 따라 중첩 전파 동작을 수행하는 단계를 포함하며, 상기 중첩 전파 동작은 결과의 하나 이상의 N-bit 부분의 중첩 비트를 결과의 하나 이상의 다음 N-bit 부분으로 전파하는 것을 포함하는 데이터 처리 방법.
93. 항목 91에 있어서, 부분 곱 누적 연산은 각각의 부분 곱 누적 연산에서 생성된 부분 곱의 유효성의 오름차순으로 수행되고;
상기 방법은 각각이 누적기 값의 주어진 N-bit 부분의 중첩 비트를 상기 누적기 값의 다음 N-bit 부분의 비-중첩 비트에 가산하는 것을 포함하는 다수의 중첩 전파 가산을 수행하는 단계를 포함하며;
상기 다수의 중첩 전파 가산의 적어도 하나는 상기 부분 곱 누적 연산의 적어도 하나의 가산 단계와 병렬로 수행되는 데이터 처리 방법.
94. 항목 88 내지 93 중 어느 한 항목에 있어서, 유효성 표시 정보는 상기 제1피연산자 내의 상기 선택된 X-bit 부분 및 상기 제2피연산자 내의 상기 선택된 Y-bit 부분의 상대적 위치에 의존하는 데이터 처리 방법.
95. 항목 88 내지 94 중 어느 한 항목에 있어서, 유효성 표시 정보는 상기 선택된 X-bit 부분 및 상기 선택된 Y-bit 부분의 적어도 하나와 연관된 유효성 표시 파라미터에 의존하는 데이터 처리 방법.
96. 항목 88 내지 95 중 어느 한 항목에 있어서, 유효성 표시 정보는 상기 부분 곱의 적어도 하나를 생성하기 위해 처리 회로를 제어하기 위한 명령에 의해 지정된 파라미터에 의존하는 데이터 처리 방법.
97. 항목 88 내지 96 중 어느 한 항목에 있어서, 유효성 표시 정보는 제1피연산자의 X-bit 부분이 상기 선택된 X-bit 부분이인 것을 확인하는 명령의 파라미터에 의존하는 데이터 처리 방법.
98. 항목 88 내지 97 중 어느 한 항목에 있어서, 제1피연산자 및 제2피연산자는 정수를 포함하는 데이터 처리 방법.
99. 항목 88 내지 98 중 어느 한 항목에 있어서, X≤53이고 Y≤53인 데이터 처리 방법.
100. 항목 99에 있어서, 각각의 부분 곱은 2개의 부동 소수점 값의 유효수를 곱하기 위한 부동 소수점 곱셈 회로를 이용하여 생성되는 데이터 처리 방법.
101. 항목 88 내지 100 중 어느 한 항목에 있어서, 제1피연산자를 부동 소수점 값의 대응하는 벡터로 맵핑하는 단계를 포함하며, 지수 및 제1피연산자의 각각의 X-bit 부분으로부터 맵핑된 유효수를 갖는 각각의 부동 소수점 값은 제1피연산자 내의 X-bit 부분의 유효성에 의존하고;
주어진 부분 곱에 대한 유효성 표시 정보는 상기 주어진 부분 곱을 생성하는 데 이용된 선택된 X-bit 부분에 대응하는 부동 소수점 값의 지수에 의존하는 데이터 처리 방법.
102. 항목 88 내지 101 중 어느 한 항목에 있어서, X=Y인 데이터 처리 방법.
103. 항목 88 내지 102 중 어느 한 항목에 있어서, X는 Y와 다른 데이터 처리 방법.
104. 항목 88 내지 103 중 어느 한 항목의 방법을 수행하도록 구성된 처리 회로를 포함하는, 데이터 처리 장치.
105. 부분 곱을 생성하기 위해 다수의 X-bit 부분을 포함하는 제1피연산자의 선택된 X-bit 부분과 적어도 하나의 Y-bit 부분을 포함하는 제2피연산자의 선택된 Y-bit 부분을 곱하기 위한 곱셈 회로;
상기 부분 곱의 유효성을 나타내는 유효성 표시 정보에 따라 중복 표현을 갖는 변환된 부분 곱으로 상기 부분 곱을 변환시키기 위한 변환 회로, 여기서 상기 중복 표현에서 상기 부분 곱은 다수의 N-bit 부분을 이용하여 나타내고, 상기 중복 표현의 적어도 2개의 인접한 N-bit 부분의 그룹에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 가짐; 및
상기 변환된 부분 곱을 상기 중복 표현을 갖는 누적기 값에 가산하기 위한 가산 회로를 포함하는, 데이터 처리 장치.
106. 항목 105에 있어서, 상기 가산 회로는 상기 누적기 값 및 변환된 부분 곱의 대응하는 N-bit 부분을 이용하여 독립된 N-bit 가산을 수행하기 위한 다수의 N-bit 가산 회로 유닛을 포함하는, 데이터 처리 장치.
107. 항목 105 또는 106에 있어서, 적어도 하나의 곱셈 명령에 따라, 상기 선택된 X-bit 부분 및 상기 선택된 Y-bit 부분으로 선택된 부분의 상이한 조합에 대응하는 중복 표현에서 다수의 변환된 부분 곱을 생성하도록 곱셈 회로 및 변환 회로를 제어하기 위한 제어 회로, 및 각각의 상기 다수의 부분 곱을 누적기 값에 가산하기 위한 가산 회로를 포함하는, 데이터 처리 장치.
108. 부분 곱을 생성하기 위해 다수의 X-bit 부분을 포함하는 제1피연산자의 선택된 X-bit 부분과 적어도 하나의 Y-bit 부분을 포함하는 제2피연산자의 선택된 Y-bit 부분을 곱하기 위한 수단;
상기 부분 곱의 유효성을 나타내는 유효성 표시 정보에 따라 중복 표현을 갖는 변환된 부분 곱으로 상기 부분 곱을 변환시키기 위한 수단, 여기서 상기 중복 표현에서 상기 부분 곱은 다수의 N-bit 부분을 이용하여 나타내고, 상기 중복 표현의 적어도 2개의 인접한 N-bit 부분의 그룹에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 가짐; 및
상기 변환된 부분 곱을 상기 중복 표현을 갖는 누적기 값에 가산하기 위한 수단을 포함하는, 데이터 처리 장치.
본원에서, "... 하도록 구성된" 이라는 단어는 장치의 요소가 규정된 동작을 수행할 수 있는 구성을 갖는다는 것을 의미하는 데 사용된다. 이러한 문맥에서 "구성"은 하드웨어 또는 소프트웨어의 상호 연결의 배열 또는 방식을 의미한다. 예를 들어, 장치는 규정된 동작을 제공하는 전용 하드웨어를 갖거나, 또는 프로세서 또는 다른 처리 장치가 기능을 수행하도록 프로그램될 수 있다. "하도록 구성된" 은 규정된 동작을 제공하기 위해 장치 요소가 어떤 식으로든 변경되어야 한다는 것을 의미하지는 않는다.
본 발명의 예시의 실시예가 수반된 도면을 참조하여 본원에 상세히 설명되었지만, 본 발명은 이러한 명확한 실시예들로 한정되지 않으며, 다양한 변경 및 변형이 수반된 청구범위에 의해 규정된 바와 같이 본 발명의 범주 및 사상을 벗어나지 않고 당업자에 의해 이루어질 수 있다.
부록 A - 중복 HPA, 동작 예
(이 부록에서, m.s.b는 "최상위 유효 비트"를 나타내고, l.s.b는 "최하위 유효 비트"를 나타냄)
누적을 위한 고정밀도(HPA) 형식은 누적된 값이 부호를 변경함에 따라 상위 레인에 걸친 매우 긴 가산/감산과 번거로운 부호 계산을 의미하는 크로스-레인 가산(cross-lane addition)을 필요로 할 수 있다. 또한, HPA는 SIMD 벡터 처리의 개념을 위반한다(벡터의 각각의 요소를 독립적으로 처리할 수 있게 하는 것이 바람직 함). 따라서, 우리는 레인들을 가로질러 캐리를 전파하지 않고 레인들 내에 캐리를 수용할 수 있는 다수의 "중첩" 비트를 레인들이 포함하는 중복 HPA("RHPA")를 제안한다. 이는 HPA의 긴-워드 길이 가산을 다수의 더 작은 SIMD 2의 보수 가산으로 실행할 수 있게 한다.
벡터 Zw[3:0]에 4개의 64-bit 레인의 최하위 유효 비트의 가중치가 64-bit 부호화된 요소로 포함되어 있다고 가정한다. RHPA 값에서, 이들 값은 레인 폭(64)이 아니라 64- ovlp 로 레인들간 차이가 나지 않으며, 여기서 ovlp 는 얼마나 많은 중첩의 비트가 인접한 레인들 사이에 있는지를 지정하는 데 사용된 파라미터이다. 부록 A의 예들에서, ovlp =4이다. 따라서, HPA의 m.s.b.가 +140의 유효성(단-정밀도 IEEE 부동 소수점 수의 최대 지수보다 몇 비트 더 많으므로, 최종 결과를 2배-정밀도로 변환해야 함을 암시함)으로 세팅되면, ovlp =4인 2개의 레인에 대한 Zw[n]의 값은 {+77, +17, -43, -103}이 될 것이다. 이를 통해 비-중복으로 표현된 4×64-bit 레인 HPA로 얻을 수 있는 256 비트가 아니라 244 비트의 효과적인 HPA 워드 길이가 산출된다.
FP에서 RHPA로 변환
들어오는 FP 수는 각각의 레인으로 전달된다. 각각의 레인에서의 로직은 FP의 지수와 로컬 Zw 값을 비교한다: 지수가 Zw[n]보다 작으면, 해당 레인에 비트가 세팅되지 않고; 지수가 Zw[n]보다 크거나 같으면, 레인은 Zw 값, FP 지수 및 FP 정밀도로부터 계산된 양만큼 FP 수를 왼쪽으로 이동한다; 그러한 왼쪽 이동 값이 특정 임계치를 초과하면, 해당 레인에도 비트가 세팅되지 않는다.
변환 알고리즘의 요약:
1. 벡터 레인 Za[n]으로 FP[31:0]을 전달
2. 계산된 양만큼 각각의 레인에서의 유효수를 왼쪽-이동(또는 모든 비트를 0으로 세팅)
3. 입력 FP 수가 음이면, ovlp 비트를 모든 부호 비트로 채우기 위해 모든 레인의 2의 보수를 독립적으로 부호-확장시킨다.
예 1: 양의 단일 정밀도 FP 수를 HPA로 변환
입력 32-b FP 수=+1.fffffe×239
지수(FP)-4개의 레인에 대한 Zw[n](상기한 도입으로부터 취해진 Zw 값, ovlp=4):
레인 3: 39 - 77 = -38; 음수, 따라서 모두 0
레인 2: 39 - 17 = +22; 양수, 따라서 왼쪽으로 22 + 1 위치만큼 이동
레인 1: 39 - -43 = +82; 양수, 따라서 왼쪽으로 82 + 1 위치만큼 이동
레인 0: 39 - -103 = +142; 양수, 142 + 1 = 143 ≥ 60 + 24, 따라서 모두 0
(주석: 레인에서의 왼쪽 이동 거리가 64-ovlp + 유효수 워드 길이인 경우, 유효수가 해당 레인의 비-중첩 범위 밖으로 완전히 이동하기 때문에 레인이 64'b0으로 세팅된다.)
도 31은 최종 결과를 나타내며, 여기서 밑줄친 16 진수는 ovlp 비트이다.
4개의 레인의 수치 값들은 다음과 같다(Zw[n]을 곱한 2의 보수로 기록됨).
레인 3: 0
레인 2: 64'h0000_0000_007f_ffff×217=+7f_ffff×217
레인 1: 64'h0800_0000_0000_0000×2-43=+1×216
레인 0: 0
변환이 성공적으로 완료되었는지 확인하기 위해, 레인들의 합계는 다음과 같다:
입력 FP 수인 ∑레인=0+ff_fffe×216+1×216+0=ff_ffff×216=1.fffffe×239.
예 2: 음의 단일 정밀도 FP 수를 HPA로 변환
동일한 FP 수에 적용된 변환 절차가 있지만 여기에서는 이제 부정되어 있다.
입력 32-b FP 수 = -1.fffffe × 239
지수(FP) - 4개의 레인에 대한 Zw[n]은 이전과 동일하다:
레인 3: 39 - 77 = -38; 음수, 따라서 모두 0
레인 2: 39 - 17 = +22; 양수, 따라서 왼쪽으로 22 + 1 위치만큼 이동
레인 1: 39 - -43 = +82; 양수, 따라서 왼쪽으로 82 + 1 위치만큼 이동
레인 0: 39 - -103 = +142; 양수, 142 + 1 = 143 ≥ 60 + 24, 따라서 모두 0
도 32는 최종 결과를 나타내며, 여기서 밑줄친 16 진수는 ovlp 비트이다.
4개의 레인의 수치 값들은 다음과 같다(Zw[n]을 곱한 2의 보수로 기록됨).
레인 3: 0(참고: 0의 2의 보수를 취하는 것은 0!을 리턴)
레인 2: 64'hffff_ffff_ff80_0001×217 =-7f_ffff×217
레인 1: 64'hf800_0000_0000_0000×2-43 =-0800_0000_0000_0000×2-43 =-1×216
레인 0: 0
∑레인=0+-ff_fffe×216+-1×216+0=-ff_ffff×216=-1.fffffe×239
RHPA의 가산
2개의 RHPA 수는 각 레인에서 독립적으로 규칙적인 2의 보수 가산을 수행함으로써 가산된다. 가산되는 RHPA 수들 중 하나가 모든 ovlp 비트가 낮게 설정(2ovlp -1-1)되었다고 가정하면(예컨대, 상기 기술된 바와 같이 FP → RHPA 변환의 결과이기 때문에), 그와 같은 가산은 오버플로우되는 레인이 생길 위험성 없이 순차적으로 수행될 수 있다. 여기에 중복 수 표현을 이용함으로써 얻어질 수 있는 장점이 있다.
예 3: RHPA 가산("레인 오버플로우 "를 야기하는)
도 33의 예에서, 모든 지정되지 않은 16진수는 모두 '0' 또는 'f'이다. 레인 2는 2개의 큰 양수가 가산되고 64-b 2의 보수로 표현되기에는 너무 양수인 합계를 리턴해야 하므로 오버플로우되었다. 유사하게, 레인 0은 2개의 큰 음수가 가산되고 64-b 2의 보수로 표현되기에는 너무 음수인 합계를 리턴해야 하므로 오버플로우되었다. 첫 번째의 경우, 정확한 결과는 m.s.b.가 '0'인 65-b 2의 보수로 표현될 수 있고; 유사하게, 두 번째의 경우, 정확한 결과는 m.s.b.가 '1'인 65-b 2의 보수로 표현될 수 있다.
표준 2의 보수 오버플로우 로직은 RHPA 가산으로 인해 소정의 레인에서 오버 플로우가 발생했는지를 검출하는 데 사용될 수 있다 (즉, m.s.b.에서의 캐리 인과 캐리 아웃이 동일한지의 여부를 체크). "레인 오버플로우"가 소정의 레인에서 발생하면(최상위 유효를 제외하고), ovlp 비트는 오버플로우되는 레인의 m.s.b.에서 다음 최상위 레인의 l.s.b.로 이동되고, 레인의 전체 폭으로 부호 확장되며, 거기에 있는 값에 가산된다. 또한, 오버플로우된 레인의 ovlp 비트는 0으로 리세팅된다.
그러나, 오버플로우된 이들 레인만의 수정은 레인을 따라 전파되는 캐리들로 인해 다른 곳에서 오버플로우가 발생할 수 있다. 따라서 하나 이상의 레인에서의 오버플로 조건에 부합하는 더 좋은 방법은 모든 레인의 ovlp 비트를 레인 위로 이동시켜 기존의 값에 그것들을 가산하는 것이다. 이 절차는 좀더 간단하다는 이점이 있지만(한 쌍의 레인을 다른 레인과 다르게 처리할 필요가 없기 때문에), 모든 레인이 동시에 갱신될 수 있기 때문에 느려지지는 않는다.
예 4: RHPA 수로부터 레인 오버플로우 제거
도 34의 예에서, 예 3으로부터의 오버플로우 합은 ovlp 비트의 병렬 가산에 의해 오버플로우가 아닌(제한된-중복) 표현으로 변환된다.
RHPAH에서 FP로의 변환
최상위 레인으로 시작하여, 가드(Guard) 및 스티키(Sticky) 비트를 포함한 목적 형식의 FP 수를 형성하기 위해 레인의 2의 보수를 Zw와 결합한다. 최상위 레인의 값이 음이면, 이는 IEEE 표준 FP 형식에서 요구하는 바와 같이 부호-크기 결과를 리턴하기 위해 레인의 값에 대해 2의 보수 연산을 수행해야 할 것이다. 다음에, 이러한 초기의 FP 결과는 원래의 HPA 특허 설명에 기술된 바와 같이 Zw의 다음 레인 값과 그 다음으로 낮은 값의 64-b 값과 결합된다. 그러한 절차는 모든 레인에 걸쳐 반복되어 최종 변환 결과에 도달된다.
대안으로, 레인의 비-중첩 비트의 수가 FP 형식의 유효 비트의 수보다 작거나 같으면, 각각의 레인은 이후 최종 변환된 결과를 형성하기 위해 함께 가산될 수 있는 각각의 부동 소수점 값과 병렬로 맵핑될 수 있다.
RHPA에서의 누적기 오버플로우
중복을 HPA 형식으로 도입하면 벡터 전체에 걸쳐 캐리를 전파할 필요 없이 매우 다양한 가산이 가능하다. 이것은 HPA 가산이 한 사이클에서 완료(수월하게)될 수 있기 때문에 상당한 성능 이점을 구성한다. 그러나, 모든 중복 수 시스템과 마찬가지로, 전체-폭 RHPA가 벡터를 오버플로우하면 정확하게 검출하기가 어려워진다. 즉, 단지 상위 레인에 대해서만 오버플로우의 발생을 평가하면, 다음과 같이 판단을 그르치게 하는 2가지의 경우가 발생한다:
(i) 상위 레인이 오버플로우 되었기 때문에 오버플로우가 발생하는 것으로 표시될 수 있으나, 하위 레인은 HPA를 다시 범위 내로 가져오는 반대로 부호화된 값을 포함할 수 있다.
(ii) 상위 레인이 오버플로우되지 않았더라도, 하위 레인은 HPA를 범위 밖으로 몰아내는 동일한 부호화된 값을 포함할 수 있기 때문에 오버플로우가 감지되지 않을 수 있다.
누적기 오버플로우를 안정적으로 검출하기 위해, RHPA는 비-중복 형식으로 변환될 수 있다. 그와 같은 변환을 수행하는 알고리즘은 간단하다. 하위 레인에서 시작하여, ovlp 비트를 다음의 최상위 레인으로 이동시키고(부호 확장에 의해), 거기에 포함된 값에 가산하여, 하위 레인의 ovlp 비트를 0으로 리세팅한다. 한 번에 한 레인씩 이러한 절차를 반복하여, 다음의 하나의 최상위 레인의 ovlp 비트가 상위 레인에 가산될 때까지 반복한다. 그러한 RHPA 값은 이제 모든 레인의 ovlp 비트가 0이기 때문에 비-중복 2의 보수로 표현된다. 이러한 방법은 앞에서 기술한 "레인 중첩" 제거의 연속 버전이며, 리플-캐리(ripple-carry) 이진 가산과 유사하다.
예 5: RHPA 수를 비-중복 형식으로 변환
도 35의 예에서, RHPA 수의 상위 레인은 오버플로우되었다. RHPA 값을 비-중복 형식으로 변환하면 RHPA 수가 범위 내에 있음을 알 수 있다.
문제는 상위 레인만을 기초로 할 경우 어떻게 누적기 오버플로우 검출을 정확하게 유지할 수 있느냐, 즉 얼마나 많은 오류 경보가 야기될 것인가?이다. 우리는 이것이 레인의 폭 때문에 "많지 않을" 것이라 믿는다. 또한 "진정한" 중첩 조건은, 성능을 향상시키기 위해, 예컨대 가산 중이 아닌 진행중인 다수의 FP 수의 누적과 병행하여 검출될 수 있다. 비-중복 RHPA에서, 누적기 오버플로우 검출 또한 간단하다.
요약
우리는 중복 고-정밀도 누적기("RHPA": Redundant High-Precision Accumulator)를 소개했다. RHPA는 레인이 다음의 더 높은 64-b 레인의 l.s.b.와 동일한 유효성을 갖는 m.s.b. "중첩" 비트의 수를 포함하는 벡터이다. 이것은 HPA에 필요한 매우 긴 워드 길이 가산이 SIMD 64-b 2의 보수 정수 가산으로 구현되게 한다.
우리는 또한 RHPA 수를 비-중복 "정규적인" 형식으로 변환하여 모든 ovlp 비트를 0으로 세팅하는 방법을 설명했다(유사한 방식으로, 우리는 또한 레인 오버플로우가 있는 RHPA를 "거의 정규화된" 형식으로 신속하게 변환하는 방법을 나타냈다). 비-중복 RHPA 표현은 누적기 오버플로우를 정확하게 검출하는 신뢰할 수 있는 방식을 제공한다.
부록 B - 캐리 룩어헤드 체계에 의해 제한된-중복 RHPA를 비-중복 RHPA로 변환
먼저 제한된-중복 형식으로 변환함으로써, 비-중복 형식으로 변환하는 프로세스의 속도를 높일 수 있다. 이는 전파되거나 생성된 +1 및 -1 값에 대해 중첩 비트 및 비-중첩 비트 모두를 검사하는 캐리-룩어헤드를 수행하는 것을 수반한다.
"제한된-중복 형식으로 변환" 동작을 수행한 후, 비-중첩 비트는 레인당 64-ovlp 비트를 갖는 레인에 걸쳐 분할된 2의 보수를 형성한다. 또한, 각 레인의 lsb에는 값이 {-1, 0, +1}로 제한되는 다음 최하위 레인으로부터의 중첩 비트가 있다. 우리는 제한된-중복에서 비-중복 형식으로의 변환을 빠르게 완료하기 위해 모든 레인에 걸쳐 캐리-룩어헤드 네트워크를 위한 비트 생성 및 전파를 유도하고자 한다.
상기 비-중복 RHPA 표현이 높은-기수 2의 보수인 경우, 우리는 ovlp 이진 부호화된 숫자의 벡터를 두 번째로 높은-기수 2의 보수로 변환함으로써 시작한다. 다음에, 우리는 2개의 수(non-ovlp & ovlp)로부터 캐리-룩어헤드 정보를 추출하여 병렬 SIMD 방식으로 그들 가산을 가속화할 수 있다.
4-b non-ovlp + 4-b ovlp 형식(상기에서 사용된 N=8, V=4)을 이용하여 ovlp 비트를 2의 보수로 변환하는 일부의 예부터 시작한다.
예 A: 레인 0/1의 -1 ovlp는 레인 2의 +1 non-ovlp와 결합한다; 레인 2/3에서 +1 ovlp
1101_1110 0001_0100 0000_0000 1111_0100
정확한 비-중복 형식은 아래와 같다:
Figure pct00008
표현/레이아웃이 상이한 원래의 제한된-중복 값:
1101_1110 0100 0000 0100
+1 0 -1
ovlp를 기수-16 2의 보수로 변환:
0 +1111 +1111
ovlp 및 non-ovlp 비트 가산, 레인에 걸친 캐리 전파:
1101_1110 0100 0000 0100 +
0 +1111 +1111 0000 =
1101_1111 0011 1111 0100
정확한!
예 B: 레인 0/1의 +1 ovlp는 레인 2/3의 -1 ovlp와 결합한다.
1101_1110 1111_1111 0000_1111 0001_0100
정확한 비-중복 형식은 아래와 같다:
Figure pct00009
표현/레이아웃이 상이한 원래의 제한된-중복 값:
1101_1110 1111 1111 0100
-1 0 +1
ovlp를 기수-16의 2의 보수로 변환 및 non-ovlp 비트에 가산, 레인에 걸친 캐리 전파:
1101_1110 1111 1111 0100 +
1111 1111 0 +1 =
1101_1110 0000 0000 0100
정확한!
예 C: 레인 1/2의 -1 ovlp는 레인 0/1의 +1 ovlp와 결합하나 레인 2/3의 +1 ovlp와는 결합하지 않는다.
1101_1110 0001_0000 1111_1111 0001_0100
정확한 비-중복 형식은 아래와 같다:
Figure pct00010
표현/레이아웃이 상이한 원래의 제한된-중복 값:
1101_1110 0000 1111 0100
+1 -1 +1
ovlp를 기수-16의 2의 보수로 변환 및 non-ovlp 비트에 가산, 레인에 걸친 캐리 전파:
1101_1110 0000 1111 0100 +
0 +1111 +1 =
1101_1111 0000 0000 0100 +
정확한!
예 D: 레인 2/3의 +1 ovlp는 레인 1/2 및 0/1의 -1 ovlp와 결합한다.
1101_1110 0001_0000 1111_1111 1111_0100
정확한 비-중복 형식은 아래와 같다:
Figure pct00011
표현/레이아웃이 상이한 원래의 제한된-중복 값:
1101_1110 0000 1111 0100
+1 -1 -1
ovlp를 기수-16의 2의 보수로 변환 및 non-ovlp 비트에 가산, 레인에 걸친 캐리 전파:
1101_1110 0000 1111 0100 +
0 1110 1111 =
1101_1110 1111 1110 0100 +
정확한!
예 E: 모든 레인의 -1 ovlp
1101_1110 1111_0000 1111_0010 1111_0100
정확한 비-중복 형식은 아래와 같다:
Figure pct00012
표현/레이아웃이 상이한 원래의 제한된-중복 값:
1101_1110 0000 0010 0100
-1 -1 -1
ovlp를 기수-16의 2의 보수로 변환 및 non-ovlp 비트에 가산, 레인에 걸친 캐리 전파:
1101_1110 0000 0010 0100
1111_1110 1110 1111 =
1101_1100 1111 0001 0100 +
정확한!
이들 예에서, 우리는 ovlp 비트가 숫자가 상위 레인을 제외하고 모두 {0, 1, 24-1, 24-2}로 제한된 수로 변환되는 것을 볼 수 있으며, 여기서 +ve 숫자 {24-1, 24 -2}는 단순히 {-1, -2}로 대체된다.
따라서, ovlp 비트를 radix-264- ovlp 수로 변환하기 위해, 변환된 ovlp 벡터에 가능한 결과 숫자가 4개 뿐이므로, 2-b/레인 캐리-전파 가산기만 필요하다.
예 A
+1 0 -1 = +1×42 + 0×4 + -1 = +15는 아래가
된다
01 00 00 -
00 00 01 =
00 11 11 = 0×42 + 3×4 + 3 = +15 (2의 보수에서)
즉, k p p k => "캐리 제거"; p => "캐리 전파"
결과의 최상위 유효 비트(밑줄친)는 부호화된 숫자 대신 이제 2의 보수가 되므로 항상 음으로 가중된다.
또는, (다시 예 A)는 -1 ovlp의 2의 보수를 취함
01 00 00 +
11 11 10 +
00 00 01 =
00 11 11
동일한 결과를 제공한다.
예 B
-1 0 +1 = -1×42 + 0×4 + +1 = -15는 아래가
된다(2의 보수에서)
00 00 01 +
10 11 11 +
00 00 01 =
11 00 01 = -1×42 + 0×4 + +1 = -15 (2의 보수에서)
즉, p k g g => "캐리 생성"
예 C
+1 -1 +1 = +1×42 + -1×4 + +1 = +13는 아래가
된다(2의 보수에서)
01 00 01 +
11 10 11 +
00 00 01 =
00 11 01 = 0×42 + 3×4 + +1 = +13 (2의 보수에서)
즉, k p g
예 D
+1 -1 -1 = +1×42 + -1×4 + -1 = +11는 아래가
된다(2의 보수에서)
01 00 00 +
11 10 10 +
00 00 01 =
00 10 11 = -0×42 + 2×4 + 3 = +11 (2의 보수에서)
즉, k d p
(2배 'd')
예 E
-1 -1 -1 = -1×42 + -1×4 + -1 = -21는 아래가
된다(2의 보수에서)
00 00 00 +
10 10 10 +
00 00 01 =
10 10 11 = -2×42 + 2×4 + 3 = -21 (2의 보수)
즉, d d p
2-b 숫자는 최종 가산을 위해 전체 레인 폭으로 부호 확장한다. 이제는 캐리가 레인을 가로지르는 것을 막기 위해 최종 가산에 대한 캐리-룩어헤드를 유도하고자 한다.
4개의 가능한 ovlp 숫자가 주어질 경우, non-ovlp 비트들에 대해 4개의 상보적인 조건을 갖는다: 모두 1의 (p), 모두 0의 (k), 1의 (g), 및 모두이지만 lsb 1의 (d)에 하나의 여분 조건을 더하며, 이는 관심이 없는 것으로 'u'로 표시된 다른 4가지 조건의 논리 NOR이다. 이하의 표에 나타낸 바와 같이 이들을 결합하여 레인-레벨 p, g 및 k 조건을 유도한다.
Figure pct00013
다음에, 각 레인에 대한 g 비트는 고전적인 프리픽스 이론을 이용하여 유도된다.
G[0] = g[0] <- 레인 1에 캐리 인
G[1:0] = g[1] | p[1]&g[0]
G[2:0] = g[2] | p[2]&g[1] | p[2]&p[1]&g[0]
예 A ... E에서 이를 확인해 보자.
예 A: 레인을 가로질러 빌림이 있는 +ve & -ve 캐리 비트
1101_1110 0001_0100 0000_0000 1111_0100
정답은 아래와 같아야 한다:
Figure pct00014
표현이 상이한 원래의 제한된-중복 값:
1101_1110 0100 0000 0100
+1 0 -1
상기 기술한 바와 같이 ovlp 및 non-ovlp 숫자를 변환:
u k u
k p p (k)
ovlp 및 non-ovlp 항들의 비트-단위 조합에 의해 레인-레벨 룩어헤드 항을 얻는다:
g p k
캐리 룩어헤드 비트를 유도
1 0 0 -
레인들간 이동을 무시하고 SIMD 가산을 수행한다:
1101_1110 0100 0000 0100 +
0000_0000 1111 1111 0000 + <- k p p k (기수 2n-1 형식으로)
1 0 0 0 =
1101_1111 0011 1111 0100
정확한!
예 B: 레인 0/1의 +1 ovlp는 레인 2/3의 -1 ovlp와 결합한다.
1101_1110 1111_1111 0000_1111 0001_0100
정확한 비-중복 형식은 아래와 같다:
Figure pct00015
표현이 상이한 원래의 제한된-중복 값:
1101_1110 1111 1111 0100
-1 0 +1
상기 기술한 바와 같이 ovlp 및 non-ovlp 숫자를 변환:
p p u
p k g (k)
ovlp 및 non-ovlp 항들의 비트-단위 조합에 의해 레인-레벨 룩어헤드 항을 얻는다:
p p` k
캐리 룩어헤드 비트를 유도
0 0 0 -
레인들간 이동을 무시하고 SIMD 가산을 수행한다:
1101_1110 1111 1111 0100 +
1111_1111 0000 0001 0000 + <- p k g k (기수 2n-1 형식으로)
0 0 0 0 =
1101_1110 0000 0000 0100
정확한!
예 C: 레인 1/2의 -1 ovlp는 레인 0/1의 +1 ovlp와 결합하나 레인 2/3의 +1 ovlp와는 결합하지 않는다.
1101_1110 0001_0000 1111_1111 0001_0100
정확한 비-중복 형식은 아래와 같다:
Figure pct00016
표현이 상이한 원래의 제한된-중복 값:
1101_1110 0000 1111 0100
+1 -1 +1
상기 기술한 바와 같이 ovlp 및 non-ovlp 숫자를 변환:
k p u
k p g (k)
ovlp 및 non-ovlp 항들의 비트-단위 조합에 의해 레인-레벨 룩어헤드 항을 얻는다:
p g k
캐리 룩어헤드 비트를 유도
1 1 0 -
레인들간 이동을 무시하고 SIMD 가산을 수행한다:
1101_1110 0000 1111 0100 +
0000_0000 1111 0001 0000 + <- k p g k (기수 2n-1 형식으로)
1 1 0 0 =
1101_1111 0000 0000 0100 +
정확한!
예 D: 레인 2/3의 +1 ovlp는 레인 1/2 및 0/1의 -1 ovlp와 결합한다.
1101_1110 0001_0000 1111_1111 1111_0100
정확한 비-중복 형식은 아래와 같다:
Figure pct00017
표현이 상이한 원래의 제한된-중복 값:
1101_1110 0000 1111 0100
+1 -1 -1
상기 기술한 바와 같이 ovlp 및 non-ovlp 숫자를 변환:
k p u
k d p (k)
ovlp 및 non-ovlp 항들의 비트-단위 조합에 의해 레인-레벨 룩어헤드 항을 얻는다:
k g k
캐리 룩어헤드 비트를 유도
0 1 0 -
레인들간 이동을 무시하고 SIMD 가산을 수행한다:
1101_1110 0000 1111 0100
0000_0000 1110 1111 0000 + <- k d p k (기수 2n-1 형식으로)
0 1 0 0 =
1101_1110 1111 1110 0100 +
정확한!
예 E: 모든 레인의 -1 ovlp
1101_1110 1111_0000 1111_0010 1111_0100
정확한 비-중복 형식은 아래와 같다:
Figure pct00018
표현이 상이한 원래의 제한된-중복 값:
1101_1110 0000 0010 0100
-1 -1 -1
상기 기술한 바와 같이 ovlp 및 non-ovlp 숫자를 변환:
k u u
d d p (k)
ovlp 및 non-ovlp 항들의 비트-단위 조합에 의해 레인-레벨 룩어헤드 항을 얻는다:
k g k
캐리 룩어헤드 비트를 유도
0 1 0 -
레인들간 이동을 무시하고 SIMD 가산을 수행한다:
1101_1110 0000 0010 0100 +
1111_1110 1110 1111 0000 + <- d d p k (기수 2n-1 형식으로)
0 1 0 0 =
1101_1100 1111 0001 0100 +
정확한!
방법의 요약
1. 입력 제한된-중복 수의 ovlp 및 non-ovlp 부분에 대해 각각 분리적으로 그리고 병렬로 레인-방향으로 p, g, k, d 및 u 항을 유도한다.
상기 ovlp 항은 2l-bit 가산기로부터 얻어질 수 있는 데, 여기서 l은 레인의 수이다.
상기 non-ovlp 항은 2l-bit 가산기와 유사한 깊이를 갖는 논리 트리로서 쉽게 구현된다.
2. 3페이지의 표를 이용하여 p, g, k, d(및 u) 항의 두 세트를 p, g 및 k 항으로 변환.
3. 프리픽스 식을 이용하여 단계 2에서 얻어진 p, g, k 비트로부터 레인 캐리 입력을 유도하고 ovlp p, g, k, d 및 u 항을 2비트에서 64비트로 부호 확장한다.
4. non-ovlp 비트, 부호 확장된 ovlp 비트 및 캐리 비트를 SIMD 방식으로 가산하여 최종 결과를 얻는다. 이것은 레인당 캐리 인이 있는 64-b 가산기를 필요로 할 것이다.
3페이지의 표에 대한 논리 식은 다음과 같습니다:
Figure pct00019
p = pv&kn | dv&gn | kv&pn | gv&dn
g = pv&~kn | ~kv&pn | dv&(~kn | ~gn)

Claims (20)

  1. 다수의 X-bit 부분을 포함하는 제1피연산자와 적어도 하나의 Y-bit 부분을 포함하는 제2피연산자를 곱하기 위한 데이터 처리 방법으로서,
    각각이 상기 제1피연산자의 선택된 X-bit 부분과 상기 제2피연산자의 선택된 Y-bit 부분의 곱을 포함하는 다수의 부분 곱을 생성하는 단계;
    각각의 부분 곱에 대해, 상기 부분 곱의 유효성을 나타내는 유효성 표시 정보에 따라 상기 부분 곱을 중복 표현으로 변환시키는 단계를 포함하고, 상기 중복 표현에서 상기 부분 곱은 다수의 N-bit 부분을 이용하여 나타내고, 상기 중복 표현의 적어도 2개의 인접한 N-bit 부분의 그룹에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 갖고,
    상기 데이터 처리방법은,
    상기 중복 표현에 나타난 다수의 부분 곱을 가산하는 단계를 더 포함하는 데이터 처리 방법.
  2. 제 1항에 있어서,
    부분 곱의 가산은 중복 표현에 나타난 부분 곱의 각각의 N-bit 부분을 이용하여 독립된 N-bit 가산을 수행하기 위한 다수의 N-bit 가산 회로 유닛을 이용하여 수행되는 데이터 처리 방법.
  3. 제 1항 또는 제 2항에 있어서,
    부분 곱의 가산은 상기 중복 표현을 갖는 누적기 값을 저장하는 누적기 레지스터 내에 부분 곱을 누적하는 단계를 포함하는 데이터 처리 방법.
  4. 선행하는 청구항 중 어느 한 항에 있어서,
    곱셈은 각각이 상기 선택된 X-bit 부분 및 상기 선택된 Y-bit 부분으로서 선택된 상이한 쌍의 부분에 대응하는 다수의 부분 곱 누적 연산을 포함하며,
    상기 다수의 부분 곱 중 하나를 생성하기 위해 상기 선택된 X-bit 부분과 상기 선택된 Y-bit 부분을 곱하는 단계;
    유효성 표시 정보에 따라 상기 다수의 부분 곱 중 하나를 중복 표현으로 변환시키는 단계; 및
    갱신된 누적기 값을 생성하기 위해 상기 중복 표현에서 상기 다수의 부분 곱 중 하나를 상기 중복 표현을 갖는 누적기 값에 가산하는 단계를 포함하고;
    하나의 부분 곱 누적 연산을 위한 갱신된 누적기 값은 다음 부분 곱 누적 연산을 위한 누적기 값으로서 사용되는 데이터 처리 방법.
  5. 선행하는 청구항 중 어느 한 항에 있어서,
    중복 표현에서 다수의 부분 곱을 가산하는 결과에 따라 중첩 전파 동작을 수행하는 단계를 포함하며, 상기 중첩 전파 동작은 결과의 하나 이상의 N-bit 부분의 중첩 비트를 결과의 하나 이상의 다음 N-bit 부분으로 전파하는 단계를 포함하는 데이터 처리 방법.
  6. 제 4항에 있어서,
    부분 곱 누적 연산은 각각의 부분 곱 누적 연산에서 생성된 부분 곱의 유효성의 오름차순으로 수행되고;
    상기 방법은 각각이 누적기 값의 주어진 N-bit 부분의 중첩 비트를 상기 누적기 값의 다음 N-bit 부분의 비-중첩 비트에 가산하는 것을 포함하는 다수의 중첩 전파 가산을 수행하는 단계를 포함하며;
    상기 다수의 중첩 전파 가산의 적어도 하나는 상기 부분 곱 누적 연산의 적어도 하나의 가산 단계와 병렬로 수행되는 데이터 처리 방법.
  7. 선행하는 청구항 중 어느 한 항에 있어서,
    유효성 표시 정보는 상기 제1피연산자 내의 상기 선택된 X-bit 부분 및 상기 제2피연산자 내의 상기 선택된 Y-bit 부분의 상대적 위치에 의존하는 데이터 처리 방법.
  8. 선행하는 청구항 중 어느 한 항에 있어서,
    유효성 표시 정보는 상기 선택된 X-bit 부분 및 상기 선택된 Y-bit 부분의 적어도 하나와 연관된 유효성 표시 파라미터에 의존하는 데이터 처리 방법.
  9. 선행하는 청구항 중 어느 한 항에 있어서,
    유효성 표시 정보는 상기 부분 곱의 적어도 하나를 생성하기 위해 처리 회로를 제어하기 위한 명령에 의해 지정된 파라미터에 의존하는 데이터 처리 방법.
  10. 제 9항에 있어서,
    유효성 표시 정보는 상기 제1피연산자의 X-bit 부분이 상기 선택된 X-bit 부분인 것을 확인하는 명령의 파라미터에 의존하는 데이터 처리 방법.
  11. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 제1피연산자 및 상기 제2피연산자는 정수를 포함하는 데이터 처리 방법.
  12. 선행하는 청구항 중 어느 한 항에 있어서,
    X≤53이고 Y≤53인 데이터 처리 방법.
  13. 제 12항에 있어서,
    각각의 부분 곱은 2개의 부동 소수점 값의 유효수를 곱하기 위한 부동 소수점 곱셈 회로를 이용하여 생성되는 데이터 처리 방법.
  14. 선행하는 청구항 중 어느 한 항에 있어서,
    제1피연산자를 부동 소수점 값의 대응하는 벡터로 맵핑하는 단계를 포함하며, 지수 및 제1피연산자의 각각의 X-bit 부분으로부터 맵핑된 유효수를 갖는 각각의 부동 소수점 값은 제1피연산자 내의 그 X-bit 부분의 유효성에 의존하고;
    주어진 부분 곱에 대한 유효성 표시 정보는 상기 주어진 부분 곱을 생성하는 데 이용된 선택된 X-bit 부분에 대응하는 부동 소수점 값의 지수에 의존하는 데이터 처리 방법.
  15. 선행하는 청구항 중 어느 한 항에 있어서,
    X=Y인 데이터 처리 방법.
  16. 제 1항 내지 제 14항 중 어느 한 항에 있어서,
    X는 Y와 다른 데이터 처리 방법.
  17. 선행하는 청구항 중 어느 한 항의 방법을 수행하도록 구성된 처리 회로를 포함하는 데이터 처리 장치.
  18. 데이터 처리장치로서,
    부분 곱을 생성하기 위해, 다수의 X-bit 부분을 포함하는 제1피연산자의 선택된 X-bit 부분과 적어도 하나의 Y-bit 부분을 포함하는 제2피연산자의 선택된 Y-bit 부분을 곱하기 위한 곱셈 회로;
    상기 부분 곱의 유효성을 나타내는 유효성 표시 정보에 따라 중복 표현을 갖는 변환된 부분 곱으로 상기 부분 곱을 변환시키기 위한 변환 회로를 구비하고, 상기 중복 표현에서 상기 부분 곱은 다수의 N-bit 부분을 이용하여 나타내고, 상기 중복 표현의 적어도 2개의 인접한 N-bit 부분의 그룹에서, 상기 그룹의 하위 N-bit 부분의 다수의 중첩 비트는 상기 그룹의 적어도 하나의 상위 N-bit 부분의 다수의 최하위 유효 비트와 동일한 유효성을 갖고,
    상기 데이터 처리장치는,
    상기 변환된 부분 곱을 상기 중복 표현을 갖는 누적기 값에 가산하기 위한 가산 회로를 더 구비한, 데이터 처리 장치.
  19. 제 18항에 있어서,
    상기 가산 회로는 상기 누적기 값 및 변환된 부분 곱의 대응하는 N-bit 부분을 이용하여 독립된 N-bit 가산을 수행하기 위한 다수의 N-bit 가산 회로 유닛을 포함하는, 데이터 처리 장치.
  20. 재 18항 또는 제 19항에 있어서,
    적어도 하나의 곱셈 명령에 따라, 상기 선택된 X-bit 부분 및 상기 선택된 Y-bit 부분으로서 선택된 부분의 상이한 조합에 대응하는 중복 표현에서 다수의 변환된 부분 곱을 생성하도록 곱셈 회로 및 변환 회로를 제어하기 위한 제어 회로, 및 각각의 상기 다수의 부분 곱을 누적기 값에 가산하기 위한 가산 회로를 포함하는, 데이터 처리 장치.
KR1020187015922A 2015-11-12 2016-05-25 중첩 표현을 이용한 제1 및 제2 피연산자의 승산 KR102491789B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/939,469 2015-11-12
US14/939,469 US9703531B2 (en) 2015-11-12 2015-11-12 Multiplication of first and second operands using redundant representation
PCT/GB2016/051504 WO2017081437A1 (en) 2015-11-12 2016-05-25 Multiplication of first and second operands using redundant representation

Publications (2)

Publication Number Publication Date
KR20180081106A true KR20180081106A (ko) 2018-07-13
KR102491789B1 KR102491789B1 (ko) 2023-01-26

Family

ID=56116466

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187015922A KR102491789B1 (ko) 2015-11-12 2016-05-25 중첩 표현을 이용한 제1 및 제2 피연산자의 승산

Country Status (6)

Country Link
US (1) US9703531B2 (ko)
EP (1) EP3374853B1 (ko)
JP (1) JP6744916B2 (ko)
KR (1) KR102491789B1 (ko)
CN (1) CN108351761B (ko)
WO (1) WO2017081437A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240143283A1 (en) * 2020-06-26 2024-05-02 Advanced Micro Devices, Inc. Processing unit with small footprint arithmetic logic unit

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10372415B2 (en) 2016-05-04 2019-08-06 Texas Instruments Incorporated Internally truncated multiplier
US10726514B2 (en) * 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US11868804B1 (en) 2019-11-18 2024-01-09 Groq, Inc. Processor instruction dispatch configuration
US11114138B2 (en) 2017-09-15 2021-09-07 Groq, Inc. Data structures with multiple read ports
US11360934B1 (en) 2017-09-15 2022-06-14 Groq, Inc. Tensor streaming processor architecture
US11243880B1 (en) 2017-09-15 2022-02-08 Groq, Inc. Processor architecture
US11170307B1 (en) 2017-09-21 2021-11-09 Groq, Inc. Predictive model compiler for generating a statically scheduled binary with known resource constraints
KR102356708B1 (ko) * 2017-09-28 2022-01-27 삼성전자주식회사 컨볼루션 연산을 수행하는 연산 장치 및 연산 방법
US10528642B2 (en) * 2018-03-05 2020-01-07 International Business Machines Corporation Multiple precision integer multiple by matrix-matrix multiplications using 16-bit floating point multiplier
US11301546B2 (en) 2018-11-19 2022-04-12 Groq, Inc. Spatial locality transform of matrices
US10936285B2 (en) 2019-02-06 2021-03-02 Arm Limited Overflow or underflow handling for anchored-data value
US10963245B2 (en) 2019-02-06 2021-03-30 Arm Limited Anchored data element conversion
US10459688B1 (en) 2019-02-06 2019-10-29 Arm Limited Encoding special value in anchored-data element
CN111814093A (zh) * 2019-04-12 2020-10-23 杭州中天微系统有限公司 一种乘累加指令的处理方法和处理装置
CN110262773B (zh) * 2019-04-28 2020-08-04 阿里巴巴集团控股有限公司 一种计算机数据处理方法及装置
US11281745B2 (en) 2019-08-16 2022-03-22 International Business Machines Corporation Half-precision floating-point arrays at low overhead
CN110673823B (zh) * 2019-09-30 2021-11-30 上海寒武纪信息科技有限公司 乘法器、数据处理方法及芯片
CN114930351A (zh) 2019-11-26 2022-08-19 格罗克公司 使用仅单个侧从多维阵列加载操作数并输出结果
US11561795B2 (en) * 2020-03-30 2023-01-24 Arm Limited Accumulating data values and storing in first and second storage devices
US11301214B2 (en) * 2020-06-09 2022-04-12 Verisilicon Microelectronics (Shanghai) Co., Ltd. Device for performing multiply/accumulate operations
CN112214199B (zh) * 2020-09-11 2022-06-21 北京草木芯科技有限公司 256位乘法器
CN112669396B (zh) * 2020-12-18 2023-09-12 深圳智慧林网络科技有限公司 图像无损压缩方法和装置
CN116301717A (zh) * 2022-11-22 2023-06-23 中国科学院自动化研究所 乘加和的确定方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020103840A1 (en) * 2000-11-25 2002-08-01 Hong-June Park Apparatus and method for digital multiplication using redundant binary arithmetic
KR20150085471A (ko) * 2014-01-15 2015-07-23 에이알엠 리미티드 곱셈 가산기
JP2015170359A (ja) * 2014-03-07 2015-09-28 エイアールエム リミテッド 浮動小数点オペランドを乗算するためのデータ処理装置及び方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE3144015A1 (de) 1981-11-05 1983-05-26 Ulrich Prof. Dr. 7500 Karlsruhe Kulisch "schaltungsanordnung und verfahren zur bildung von skalarprodukten und summen von gleitkommazahlen mit maximaler genauigkeit"
US4866653A (en) 1986-08-04 1989-09-12 Ulrich Kulisch Circuitry for generating sums, especially scalar products
JP3198868B2 (ja) * 1995-04-20 2001-08-13 松下電器産業株式会社 乗算処理装置
US7236995B2 (en) 2002-12-27 2007-06-26 Arm Limited Data processing apparatus and method for converting a number between fixed-point and floating-point representations
CN1591318A (zh) * 2003-09-03 2005-03-09 国际商业机器公司 二进制补码和无符号量格式的数据乘法装置
US8019805B1 (en) * 2003-12-09 2011-09-13 Globalfoundries Inc. Apparatus and method for multiple pass extended precision floating point multiplication
CN102257473A (zh) * 2008-10-30 2011-11-23 音频专用集成电路公司 高基数字乘法器
US8667044B1 (en) * 2009-01-13 2014-03-04 Xilinx, Inc. Iterative stage as dividend operand prescaler for fixed-radix division
CN102591615A (zh) * 2012-01-16 2012-07-18 中国人民解放军国防科学技术大学 结构化混合位宽乘法运算方法及装置
US9122517B2 (en) * 2012-06-11 2015-09-01 International Business Machines Corporation Fused multiply-adder with booth-encoding
US10095516B2 (en) * 2012-06-29 2018-10-09 Intel Corporation Vector multiplication with accumulation in large register space
CN102866875B (zh) * 2012-10-05 2016-03-02 刘杰 多操作数加法器

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020103840A1 (en) * 2000-11-25 2002-08-01 Hong-June Park Apparatus and method for digital multiplication using redundant binary arithmetic
KR20150085471A (ko) * 2014-01-15 2015-07-23 에이알엠 리미티드 곱셈 가산기
JP2015170359A (ja) * 2014-03-07 2015-09-28 エイアールエム リミテッド 浮動小数点オペランドを乗算するためのデータ処理装置及び方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240143283A1 (en) * 2020-06-26 2024-05-02 Advanced Micro Devices, Inc. Processing unit with small footprint arithmetic logic unit

Also Published As

Publication number Publication date
EP3374853A1 (en) 2018-09-19
JP6744916B2 (ja) 2020-08-19
CN108351761B (zh) 2022-08-23
KR102491789B1 (ko) 2023-01-26
US20170139677A1 (en) 2017-05-18
WO2017081437A1 (en) 2017-05-18
JP2019500673A (ja) 2019-01-10
US9703531B2 (en) 2017-07-11
EP3374853B1 (en) 2019-10-16
CN108351761A (zh) 2018-07-31

Similar Documents

Publication Publication Date Title
KR102491789B1 (ko) 중첩 표현을 이용한 제1 및 제2 피연산자의 승산
JP6694880B2 (ja) 有効度整合
CN108351776B (zh) 数据处理方法和装置
KR20180081107A (ko) 중첩 비트를 이용한 수치 값의 중복 표현
CN108351763B (zh) 用于重叠传播操作的方法和装置
KR20210122828A (ko) 앵커 데이터 요소에서의 특수 값 인코딩
KR20210124347A (ko) 앵커 데이터 요소 변환
EP2884403A1 (en) Apparatus and method for calculating exponentiation operations and root extraction
Venkatachalapathy Signed Digit Representation of Numbers

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant