KR20180084057A - 부동 소수점 연산 동안의 오류시 경계 계산 및 유지를 위한 장치 및 그 방법 - Google Patents

부동 소수점 연산 동안의 오류시 경계 계산 및 유지를 위한 장치 및 그 방법 Download PDF

Info

Publication number
KR20180084057A
KR20180084057A KR1020187014380A KR20187014380A KR20180084057A KR 20180084057 A KR20180084057 A KR 20180084057A KR 1020187014380 A KR1020187014380 A KR 1020187014380A KR 20187014380 A KR20187014380 A KR 20187014380A KR 20180084057 A KR20180084057 A KR 20180084057A
Authority
KR
South Korea
Prior art keywords
boundary
operand
exponent
field
result
Prior art date
Application number
KR1020187014380A
Other languages
English (en)
Other versions
KR102628164B1 (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 KR20180084057A publication Critical patent/KR20180084057A/ko
Application granted granted Critical
Publication of KR102628164B1 publication Critical patent/KR102628164B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49989Interval arithmetic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers

Landscapes

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

Abstract

부동 소수점 연산 동안의 오류시 경계를 계산하고 유지하기 위한 장치 및 방법은 불충분한 보유(retention)시의 통지를 가진 상기 계산의 보유된 유효 비트들(significant bits)을 기록하는 표준 부동 소수점 형식으로 추가적인 경계 필드(bounding field)를 삽입한다. 반올림 및 취소 오류들 모두를 설명하는 상기 경계 필드는, 손실 비트들 D 필드와 누적 반올림 오류 R 필드의 두 부분을 가진다. 상기 D 필드는 더 이상 유의미하지 않은 부동 소수점 표현 내의 비트들의 수를 명시한다. 표현된 실제 값 상의 경계들은 절단된(truncated) 부동 소수점 값(제1 경계)과 손실 비트들의 수(제2 경계)에 의해 결정된 오류의 추가로부터 결정된다. 사실상의 실제 값은 상기 제1 및 제2 경계들에 의해 반드시 포함된다. 유효 비트들의 허용된 손실(선택적으로 프로그램 가능한)은 유효 비트들의 손실의 오류-방지(fail-safe), 실시간 통지를 제공한다.

Description

부동 소수점 연산 동안의 오류시 경계 계산 및 유지를 위한 장치 및 그 방법 {Apparatus for Calculating and Retaining a Bound on Error During Floating Point Operations and Methods Thereof}
본 발명은 일반적으로 부동 소수점(floating point) 처리기기에서 임의의 부동 소수점 산술 연산을 수행하는 로직 회로(logic circuits)에 관한 것으로서, 보다 상세하게는 정렬 및 정규화를 통해 도입되는 오류시의 경계 계산 및 유지를 위해 데이터의 순서 또는 내용을 조작함으로써 상기 데이터를 처리하는 방법 또는 배열체에 관한 것이다.
부동 소수점 처리기기에서 사용하기 위한 부동 소수점 산술 시스템의 설계에 있어서, 상이한 컴퓨터 시스템을 사용하여 문제들이 해결될지라도 상기 문제들에 대한 계산들 및 해결책들에서의 일관성을 달성하기 위하여 결과들은 변함이 없는 것이 바람직하다.
부동 소수점 산술 시스템의 구현을 관리하기 위한 균일한 규칙들의 시스템을 제공하기 위해 미국 국가 표준이 만들어졌다. 이 표준은 IEEE 표준 No.754-2008과 국제표준 ISO/IEC/IEEE 60599:2011로 식별되고, 이들은 모두 여기서 참조로 포함된다. 이 표준은 기본 및 확장 부동 소수점 숫자 형식, 산술 연산, 정수와 부동 소수점 형식 간의 변환들, 상이한 부동 소수점 형식 간의 변환들, 기본 형식 부동 소수점 수들과 소수 문자열(decimal strings) 간의 변환들, 및 소정의 부동 소수점 예외 처리를 명시한다.
전형적인 부동 소수점 산술 연산은 다양한(대개는 표준) 폭들(예를 들어, 32비트, 64비트 등)의 형식을 사용하여 수행될 수 있다. 이러한 형식들 각각은 부호, 지수 및 분수 필드(또는 가수(significand))를 활용하며, 여기서, 각각의 필드들은 부동 소수점 숫자의 미리 정의된 부분을 차지한다. 예를 들어, 32비트 단정도(single precision) 숫자의 경우에, 부호 필드는 최상위 비트 위치를 차지하는 단일 비트이고; 지수 필드는 차상위 비트 위치들을 차지하는 8비트 양이고; 분수 필드는 최하위 23비트 위치들을 차지한다. 마찬가지로, 64비트 배정밀도(double precision) 숫자의 경우에, 상기 부호 필드는 단일 비트이고, 상기 지수 필드는 11비트이고, 상기 분수 필드는 52비트이다. 추가적인 형식들이 동일한 정보를 제공하지만, 다양한 필드 폭들과 넓은 필드 폭들로 더 높은 정확도와 값의 범위에 대한 가능성을 제공한다.
각각의 부동 소수점 결과가 전개된 후에, 이는 정규화되고 그 후 반올림되어야 한다. 상기 결과가 정규화되면, 상기 분수 필드에서의 선행 제로들(leading zeros)의 개수가 카운트된다. 그 후, 이 숫자가 상기 지수로부터 감산되고, 상기 분수 필드의 최상위 비트 위치에 "1"이 남을때까지 상기 분수가 좌측 시프트(left shift)된다. 상기 지수가 이미 가장 낮은 가능한 값에 있고 상기 분수 필드의 최상위 비트는 "1"이 아니기 때문에, 소정의 부동 소수점 응답들은 정규화될 수 없다. 이는 정규화된 숫자보다 더 적은 유효 숫자(significant digits)들을 가지는 "비정규 숫자"이다.
이 표준에 따라 부동 소수점 산술 연산을 수행하기 위한 하드웨어 및 로직을 설계할 때, 특정한 추가적 지시자 비트들을 상기 부동 소수점 하드웨어 연산들에 통합하는 것이 필요하며 바람직하다. 이러한 지시자 비트들은 상기 부동 소수점 숫자의 분수 필드에 주입되고, 특정 조건들이 상기 부동 소수점 연산 내에 존재할 때를 나타내기 위해 산술 제어 로직에 의해 사용된다. 비정규가 아닌(정규화된) 숫자들에서, 예를 들어, "암시적" 비트(보통 "은닉 비트(hidden bit)"로 언급됨)는 부동 소수점 숫자의 지수가 0이 아닌 값을 가질 때 상기 산술 제어 로직에 의해 생성된다. 이러한 "은닉 비트"는 저장 형식으로 표현되지는 않지만 추정이 된다. 이는 부동 소수점 숫자가 산술 레지스터들 내에 로딩되는 시점에 삽입되고, 상기 숫자의 분수 필드의 최상위 비트 위치를 차지한다. 추가하는 동안, 단일 "가드(guard)" 비트는, 처리되는 부동 소수점 숫자의 유효 비트들의 손실의 표시자로서, 특정 산술 연산 동안 상기 부동 소수점 제어 로직에 의해 설정된다. 상기 가드 비트는, 정규화에 필요한 우측 시프트가 분수 필드 용량의 우측으로부터 한 비트를 시프트할 때 설정된다. 상기 가드 비트는 상기 분수 필드의 일부를 차지한다. 마지막으로, "스티키(sticky)" 비트는, 부동 소수점 숫자가 몇몇 유효 비트들을 손실한 것의 표시자로서 특정 부동 소수점 산술 연산들에서 설정된다.
상기 분수 필드에서의 이러한 여분의 비트들은, 상기 결과가 정규화된 후에 반올림 연산을 위해 배타적으로 사용된다. 상기 가드 비트는 상기 분수의 일부인 것처럼 취급되고, 정규화 및 지수 정렬 동안 상기 분수의 여분과 함께 시프트되어 상기 산술에 의해 활용된다. 상기 스티키 비트는 상기 분수와 시프트되지 않지만, 상기 연산에 의해 활용된다. 이는 상기 분수의 우측 밖으로 시프트되는 비트들에 대한 "캐처(catcher)"로서 동작하며; 1이 상기 분수의 우측 밖으로 시프트될 때, 상기 스티키 비트는 정규화 및 반올림이 완료될 때까지 1을 유지할 것이다.
여기서 일반적으로는 다음과 같은 네 가지의 반올림 모드들이 있다: (1) 최근접으로 반올림; (2) 양의 무한대로 반올림; (3) 음의 무한대로 반올림; 및 (4) 0으로 반올림. 이들 각각은 계산에 오류를 가져올 수 있다.
이 표준은 널리 사용되고 있으며 많은 연산들에 유용하지만, 이 표준은 실수 표현의 가수(significand)에 대해 사용 가능한 최대 자리수로서 "정밀도(precision)"를 정의하고, 실수 표현에서의 정확한 자릿수로서 정밀도를 정의하지 않는다. 이 표준은 오류 정보의 계산과 저장을 제공하지 않고, 그에 따라 모든 유효 비트들의 잠재적 손실을 포함하는 오류의 전파를 허용하지 않는다. 현재 표준에서의 이러한 문제들은 누적된 반올림 오류 및 치명적인 취소 오류를 초래할 수 있다. 취소는 매우 유사한 값들을 감산될 때 발생하고, 이는 상기 결과에서 이러한 오류에 대응하는 표시없이 중대한 오류를 주입한다.
여러 저자들이 이 표준에 기여하거나 이러한 중요한 문제점들에 주목했지만, 문제점들은 여전히 계속되고 있다.
1962년에 발행된 시에라(Sierra)의 미국특허번호 3037701은 정규화, 반올림, 및 제로 변환(zero conversion)을 포함하는 고정 단어 길이 부동 소수점 산술을 수행하기 위한 하드웨어에 대한 기초를 확립한다. 상기 시에라 특허는 유용한 정보의 전체 손실을 포함하는 부동 소수점 연산들에서의 오류를 불러올 가능성을 설명한다. 모든 유형의 오류 정보를 계산하거나 유지하기 위한 방법은 설명되지 않는다.
뮬러(Muller) 등의 저서인 부동 소수점 산술의 안내서에서 ISO/IEC/IEEE 60599:2011을 포함하는 부동 소수점 응용의 최신 기술과 오류 문제점들을 설명한다. 여기서는 "올바르게 구현된 부동 소수점 산술일지라도, 때때로 계산 결과는 기대되는 것과는 거리가 멀다"라고 기술한다.
1991년, "모든 컴퓨터 과학자들이 부동 소수점 산술에 대해 알아야 할 것"에서, 데이비드 골드버그(David Goldberg)는 부동 소수점 오류의 상세한 설명과 수학적 분석을 제공한다. 이 논문은 반올림 오류(6 페이지), 최종 장소에서의 상대적 오류 및 오류 단위들(Ulps)(8 페이지), 가드 숫자들(guard digits)의 사용(9 페이지), 및 치명적면서 동시에 양성이기도 한 취소 오류 유형들(10 페이지)을 설명한다. 권장되는 오류 완화는 계산 결과들(17 페이지)에 대한 추가적인 저장 공간과 상기 계산에 의해 도입되는 오류를 최소화하고 제한하기 위한 계산 방법을 결정하도록 주어진 문제의 수치적 오류 분석을 요구하는 확장 정밀도(실수 표현으로 사용 가능한 숫자들로 다시 정의됨)로 제한된다.
따라서, 많은 저자들이 부동 소수점 연산들에 대한 현재 표준에서 이러한 유형의 오류들이 존재함을 인정하였다. 이에 대응하여, 이러한 중요한 문제점들을 다루기 위한 수많은 시도가 행해져 왔다.
2012년, "오류 추정이 있는 부동 소수점 숫자들"이라는 문서에서, 글라우코 마소티(Glauco Masotti)는 누적된 부동 소수점 오류의 통계적 추정을 포함하도록 표준 부동 소수점 형식에 데이터 구조를 추가하는 것을 설명한다. 이 기술은 필요한 저장 공간을 증가시키고, 계산 시간을 늘리고, 및 오류에 대한 경계를 제공하지 않는다.
2008년, "부동 소수점 연산 검증의 함정"에서, 데이비드 모니악스(David Monniaux)는 부동 소수점 연산 시퀀스(sequence)를 수행하기 위해 코드에 의해 생성된 예상 오류를 결정하도록 정적 프로그램 분석에서의 제한을 제시한다. 그러나, 정적 오류 분석은 오류가 발생하기 쉽고, 알고리즘이 충분히 정확한 결과를 제공할 것을 보장하기 위해 길고 값비싼 알고리즘 오류 분석에 의존하고 추정한다.
요약하면, 현재의 최신 기술은 관련된 부동 소수점 데이터 구조 내에 오류 정보를 유지하지 않는다. 현재, 부동 소수점 오류시 경계에 대한 임의의 유지는 오류 간격 계산을 수행하기 위해 현저하게 많은 메모리 공간과 계산 시간(또는 상응하는 더 많은 하드웨어)을 요구한다.
나아가, 현재 표준에서, 두 개의 값들이 취소가 발생하는 감산(subtraction)에 의해 비교될 때, 이러한 잘못된 비교에 기초한 프로그램 흐름 결정은 부정확한 결정을 초래할 수 있다. 상기 결과 비교에 대한 유효성은 표준 규약에 의해 제공되지 않는다.
중요하게도, 계산 결과가 더 이상 충분한 수의 유효 숫자들을 제공하지 않을 때, 상기 표준은 아무런 표시도 제공하지 않는다.
또한, 외부에서 내부 형식으로의 변환, 또는 부동 소수점 형식들 간의 변환은 오류를 기록하는 것 없이 실수의 초기 표현에 그 오류를 주입할 수 있다.
나아가, 부동 소수점 값들은 유효 비트들이 출력 데이터 내에 남아있지 않더라도 유효 비트들의 손실을 표시하는 것 없이 외부 표현으로 변환된다.
특히, 현재 기술은 필요로 되는 유지된 유효 숫자들의 수를 프로그래머가 특정하는 것을 허용하지 않는다.
따라서, 부동 소수점 오류 완화를 위해 현재의 기술에 의해 제공되는 다양한 방법들은 해결되지 않은 문제점들을 가진다. 따라서, 부동 소수점 연산 동안에 오류시 경계를 계산하고 유지하기 위한 장치 및 방법에 대한 필요가 있다.
상기 논의는 일반적인 배경 정보를 위해 단순히 제공되었고, 청구된 주제의 범위를 결정하는 데 도움으로 사용되기 위한 의도는 아니다.
본 발명의 목적은 부동 소수점 처리기기에서 소정의 부동 소수점 산술 연산을 수행할 때 부동 소수점 오류를 경계짓는 것이다.
본 발명은 부가적인 경계 필드를 ANSI/IEEE 754-2008 표준 부동 소수점(floating point) 산술 형식에 삽입함으로써 부동 소수점 연산 동안 오류시 경계를 계산하고 유지하는 부동 소수점 처리기기와 관련 방법들에 관한 것이다. 이 경계 B 필드는, 손실된 비트 필드(D 필드)와 누적된 반올림 오류 필드(N 필드)의 두 가지 주요 부분들을 가진다. 상기 N 필드는 반올림 비트 필드(R 필드)와 반올림 오류 카운트 필드(C 필드)로 연속적으로 나누어지고, 상기 R 필드들의 합으로부터 캐리들(carries)의 합을 나타낸다. 상기 손실된 비트 D 필드는 더 이상 중요하지 않은 부동 소수점 표현에서의 비트들의 수이다. 표현된 실제 값의 경계는 절단된(truncated)(0으로 반올림) 부동 소수점 값(제1 경계)과, 손실된 비트들의 수(제2 경계)에 의해 결정된 오류의 추가로부터 결정된다. 이러한 손실된 비트 D 필드는 유효 비트들의 손실에 대한 오류-방지(fail-safe), 실시간 통지를 제공하기 위해 유효 비트들의 (선택적으로 프로그래밍 가능한) 허용 불가능한 손실과 비교된다.
본 발명의 상기 부동 소수점 형식의 C 필드는, 상기 R 필드들의 합으로부터의 캐리들의 합이다. (달리 문맥적으로 정의되지 않는 한, 용어 "필드"는 데이터 구조의 일부 또는 상기 데이터 구조의 그 부분에서의 값을 의미한다) 상기 확장 카운트가 현재의 손실 비트들을 초과할 때, 1이 상기 손실된 비트들에 더해지고, 상기 C 필드는 0으로 설정된다. 상기 R 필드는 절단되는 동안 손실된, 반올림 오류의 반올림된 최상위 비트들의 합이다.
현재 발명의 장치 및 방법은 현재의 부동 소수점 표준을 구현하는 장치 및 방법과 결합하여 사용될 수 있다. 본 발명의 형식과 현재의 형식 간의 변환이 필요시 수행될 수 있다; 그러므로, 현재의 부동 소수점 표준에 의존하는 현존하는 소프트웨어가 삭제될 필요는 없다. 새로운 경계 필드는 표현된 실수를 한정하는 오류의 경계에 대한 누적된 정보를 제공하기 위해 종래의 부동 소수점 표준에 추가된다.
부동 소수점에 대한 현재의 표준들은 부동 소수점 반올림 및 취소 오류를 측정 및/또는 기록하는 수단이 없다. 본 발명은 부동 소수점 연산으로부터 초래된 유효 비트들의 누적된 손실을 (허용 가능한 또는 허용 불가능한 것으로) 분류하는 장치 및 방법을 제공한다. 이는 유효 비트들의 손실이 허용되지 않는 한계에 대하여 현재 연산의 유효 비트들의 손실을 비교함으로써 이루어진다. 부동 소수점 숫자들의 상이한 폭들에 대한 허용불가능한 한계는 하드웨어 또는 프로그램 가능한 두 가지 방식으로 제공될 수 있다. 상기 하드웨어는 디폴트값을 제공한다. 예를 들어, 단정도(single precision)(32-bit)에서, 상기 디폴트 값은 3개의 유효 십진수가 필요할 수 있고, 그 가수(significand)가 10개의 유효 비트들을 유지하는 것을 필요로 한다. 64-비트 배정도(double precision) 예에서, 상기 디폴트값은 6개의 유효 십진수가 필요할 수 있고, 그 가수는 20개의 유효 비트들을 유지하는 것을 필요로 한다. 허용 불가능한 한계를 제공하는 두 번째 방식은 지정된 정밀도에 대한 오류 경계 상에 한계를 설정하는 특수 부동 소수점 명령에 의하는 것이다. 현재 발명은 이러한 오류들을 측정, 누적, 기록, 및 보고할 뿐 아니라 프로그래머가 허용 불가능한 오류의 양을 지정하는 것을 선택적으로 가능하게 하는 수단을 제공한다.
이는 허용 가능한 오류에 대한 어떠한 제어도 허용하지 않는 현재의 기술을 넘어서는 장점을 가진다. 현재 발명은 유효 비트들의 손실 검출을 허용할 뿐 아니라, 필요한 유지된 유효 숫자들의 수가 특정되는 것을 선택적으로 허용한다.
유효 비트들의 손실이 허용 불가능한 한계보다 크거나 같을 때, "sNaN(isb)"으로 명명된 불충분한 유효 비트들을 신호로 보내는 본 발명의 신호 NaN은 그 결과가 더 이상 필요한 수의 유효 비트들을 가지지 않음을 나타내면서 생성된다. 이는 그 계산 결과가 더 이상 충분한 수의 유효 비트들을 제공하지 않을 때의 표시를 제공하지 않는 현재의 기술과 대조적이다.
관련된 부동 소수점 데이터 구조 내에 오류 정보를 유지하지 않는 종래의 부동 소수점 표준과 대조적으로, 본 발명은 상기 부동 소수점 데이터 구조 내에서 상기 손실 비트 D 필드에 오류 정보를 제공한다. 두 개의 경계들이 제공된다. 제1 경계는 지수 및 절단된 가수에 의해 표현되는 실수이고, 제2 경계는 상기 손실 비트 D 필드에 의해 표현되는 최대 오류 값을 상기 제1 경계에 부가하여 결정된다.
현재의 기술을 사용하여, 계산 시간 및/또는 메모리 공간을 증가시키는 것에 의해 오류가 감소될 수 있다. 본 발명은 공간과 성능에 거의 영향을 주지 않고 본 발명의 데이터 구조 내에 이러한 오류 정보를 제공한다.
상기 표준 부동 소수점 구현에서, 취소는 상기 결과에서 대응하는 표시 없이 중요한 오류를 삽입한다. 대조적으로, 본 발명은 손실된 비트 D 필드에서 취소 오류를 설명한다.
본 발명은 외부 표현을 본 발명의 내부 표현으로 변환함으로써 삽입된 오류를 기록하는 방법을 제공한다. (또는 내부 표현들 간의 변환에서의 오류를 기록)
현재, 부동 소수점 값들은 유효 비트들이 존재하지 않을 때조차 유효 숫자들의 손실의 표시 없이 외부 표현으로 변환된다. 대조적으로, 현재의 발명은 불충분한 유효 비트들이 남아있을 때 본 발명의 신호 Not-a-Number, sNaN(isb)을 제공한다.
현재 기술에서, 정적 오류 분석은 상당한 수학적 분석을 요구하며, 실제 오류를 실시간으로 결정할 수 없다. 이 작업은 고도로 숙련된 수학자 프로그래머들에 의해 행해져야 한다. 그러므로, 오류 분석은 필요로 되는 매우 증가된 비용과 시간 때문에 중요한 프로젝트에 대해서만 사용된다. 이와 반대로, 본 발명은 기껏해야 계산 시간의 적은 증가와 상기 가수에 대해 사용 가능한 최대 비트 수의 적은 감소로 실시간 오류 계산을 제공한다.
현재의 기술에서 사용되는 오류 주입에 의한 동적 오류 분석은 부동 소수점을 필요로 하는 알고리즘들의 다중 실행을 요구하는 유사한 문제점들을 가진다. 이러한 기술들은 적응적 알고리즘들을 사용할 때, 또는 오류 정보가 실시간으로 요구될 때 미미하게 사용된다. 본 발명은 다중 실행의 필요성을 제거하고 실시간으로 오류 정보를 제공한다.
일반적으로 제안되는 해결책인 오류시 통계적 정보를 유지하도록 추가적인 저장공간을 더하는 것은 계산 시간과 필요한 저장공간을 현저히 증가시킨다. 본 발명은 오류 정보에 대한 공간을 수용하기 위해서 실수 표현에 대한 상기 가수에 대해 사용 가능한 최대 비트 수를 경미하게 감소시킨다. 본 발명에서 요구되는 저장 공간은 표준 부동 소수점에서와 동일하다.
간격 계산은 부동 소수점 계산을 위한 경계들을 계산하는 수단을 제공하지만, 이는 매우 증가된 계산 시간과 최소 2배의 저장공간을 필요로 한다. 대조적으로, 경계를 계산하고 유지하기 위한 본 장치는 표현된 실수에서의 제1 및 제2 경계들 모두를 계산하고, 단일 명령의 실행 내에서 이를 수행한다. 추가적인 메모리는 필요하지 않다. 상기 계산된 경계들은 오류 방지(fail safe)이다.
본 발명의 목적은 부동 소수점 처리기기에서 소정의 부동 소수점 산술 연산을 수행할 때 부동 소수점 오류를 경계짓는 것이다.
본 발명의 이들 및 다른 목적들, 특징들, 및 장점들은 첨부된 도면들 및 다음의 바람직한 실시예들의 상세한 설명으로부터 더욱 쉽게 명백해질 것이다.
본 발명의 바람직한 실시예들은 첨부된 도면과 함께 이하 설명될 것이고, 본 발명을 예시하기 위해서이지 본 발명을 제한하기 위해서 제공되지 않으며, 동일한 지칭은 동일한 요소들을 의미한다.
도 1은 손실 비트들 D 필드와 N 필드로 구성된 본 발명의 새로운 경계 B 필드를 나타내는 본 발명의 한정된 부동 소수점 형식(bounded floating point format)의 다이어그램(diagram)으로서, 여기서 N 필드는 차례대로 C 필드와 R 필드로 구성된다.
도 2a 내지 2b는 예시적인 가산 또는 감산 연산에서 본 발명의 오류 경계를 나타내는 부동 소수점 연산의 로직 및 제어의 개략적인 예이다.
도 3은 도 2a, 4, 및 7의 본 발명의 경계 로직에서 활용되는 정보를 제공하는 지수 계산의 다이어그램이다.
도 4는 본 발명의 오류 경계의 본 발명의 지배적인(dominant) 경계 로직 및 제어의 다이어그램이다.
도 5는 본 발명의 경계 B 필드의 결정에 기여할 도 7로부터 도출되는 차기 정규화 결과 형식의 다이어그램이다.
도 6a 내지 6b는 도 2b 및 도 8에서 사용되는 정보를 제공하는 본 발명의 주요 경계 계산 로직 및 제어의 다이어그램이다.
도 7은 본 발명의 경계 B 필드의 결정에 기여할 정규화된 결과를 생산하고, 도 2b, 6a, 및 6b에서 사용되는 정규화 로직 및 제어의 다이어그램이다.
도 8은 오류 경계선이 초과되었는지를 결정하는 본 발명의 예외 로직 및 제어의 다이어그램이고, 본 발명의 sNaN(isb)를 발생시키고 또한 결과가 거의 제로인지를 결정한다.
도 9는 한정된 부동 소수점 시스템(900)의 다이어그램이다.
동일한 참조 부호들은 도면들의 여러 도들을 걸쳐 동일한 부분을 나타낸다.
도면 전체를 걸쳐 나타나듯이, 본 발명은 한정된 부동 소수점 처리유닛(bounded floating point processing unit, BFPU)(950)을 포함하는 한정된 부동 소수점 시스템(900)과, 부동 소수점 연산 동안의 오류 시 경계(bound)를 계산하고 유지하는 방법에 관한 것으로서, 그 예시는 일반적으로 참조번호 200(도 2a 내지 2B)으로 나타난다. 통지나 경고 없이 오류를 불러오는 표준 부동 소수점 구현과 대조적으로, 본 발명의 한정된 부동 소수점 형식(100)은, 상기 오류시 경계를 식별 및 기록하고, 불충분한 유효 비트들이 남아있을 때 그 결과를 본 발명의 sNaN(isb)(262)으로 대체함으로써 유효 비트들의 손실의 통지를 가능하게 하는 새로운 오류 경계 B 필드(52)(도 1)를 제공한다.
현재의 부동 소수점 표준을 사용하면, 정렬 또는 정규화 동안 오류가 일어날 수 있다. 본 발명의 장치 및 방법에서, 감산 및 다른 부동 소수점 연산 동안의 정규화는 취소를 통하는 것과 같이 유효 비트들의 손실을 여전히 초래할 수 있다. 이 손실이 현재의 계산에서 상당하면, 이 손실은 손실 비트 필드, D 필드(54) 내에 저장된 "결과 경계 손실 비트 D"(54F)(도 8)로 명명되는 손실 유효 비트들의 수에서의 경계에 기록된다.
계산 결과가 불충분한 유효 비트들을 초래할 때, 한정된 부동 소수점 값인 "계산된 결과"(260)는, 숫자가 아닌(NaN) 유효하지 않은 한정된 부동 소수점 값에 대한 특수 표현으로 대체되고, 상기 한정된 부동 소수점 값은 "sNaN(isb)"(262)(도 2b)로 명명되는 불충분한 유효 비트들을 신호로 보내는 본 발명의 신호 NaN이고, 이는 유효 비트들의 초과적인 손실을 나타낸다. 하드웨어에서의 메모리는, 충분한 유효 비트들이 남아있는지, 또는 sNaN(isb)(262)이 생성되어야 하는지를 결정하기 위해 기록된 누적 오류와의 비교를 위해 제공된다. 다른 NaN들과 마찬가지로, 상기 sNaN(isb)(262)은 향후 계산에 전파되어진다. 상기 sNaN(isb)(262)은 하드웨어 부동 소수점 예외를 생성하도록 신호가 보내질 수 있다.
유효 비트들의 손실을 결정하기 위한 회로는 사용자에 의해 요구되는 부동 소수점 계산으로부터의 결과인 유효 비트들의 수를 사용자가 결정하는 것을 허용하도록 선택적으로 프로그램 가능한 경계 제한 메모리(bound limit memory, 802)를 포함할 수 있다. 상기 경계 제한 메모리(802)는 각각의 정밀도 부동 소수점 폭에 대한 디폴트값을 포함하고, 사용자에 의해 프로그래밍될 수 있다.
본 발명의 한정된 부동 소수점 형식(100)이 구현될 때, 이는 현재의 부동 소수점 표준의 구현과 함께 동시에 사용될 수 있다. 따라서, 현재의 부동 소수점 표준에 의존적인 기존의 소프트웨어가 삭제될 필요는 없다.
새로운 경계 B 필드(52)는 표현되는 실수를 한정하는 오류 경계상에 누적 정보를 제공하도록 종래의 부동 소수점 표준에 삽입된다.
도 1은 손실 비트 D 필드(54)(폭 d(105)를 가짐)와 N 필드(55)(폭 n(106)을 가짐)의 두 부분으로 구성되는 본 발명의 경계 B 필드(52)(폭 b(103)를 가짐)를 나타내는 폭 k(101)의 워드 폭에 대한 한정된 부동 소수점 형식(100)의 가상의 비트 배열 뿐 아니라, 표준 부동 소수점 형식 필드들을 제공한다. 상기 N 필드(55)는 C 필드(56)(폭 c(107)을 가짐)와 R 필드(57)(폭 r(108)을 가짐)의 두 개의 필드들로 추가 구성된다. 상기 표준 필드들은 S 필드(50)인 부호 비트 필드, 지수 E 필드(51)(폭 e(102)를 가짐), 및 T 필드(53)(폭 t(104)를 가짐)인 가수(significand) 필드를 포함한다.
이러한 경계 B 필드(52)는 표현된 실수의 경계상에 누적 정보를 제공하기 위해 부동 소수점 표준 형식 내에 삽입된 새로운 필드이다. 상기 경계 B 필드(52)는 반올림 및 취소 오류들 모두를 설명한다. 이 경계 B 필드(52)는 모든 이전의 연산 및 현재의 연산의 결과인 유효 비트들의 손실을 추적한다. 유효 비트들의 손실을 기록하는 것은 그 후 불충분한 유효 비트들이 유지되는지에 대한 결정을 내리는 것을 허용한다. 유효 비트들의 충분한 손실이 발생하면, sNaN 선택 제어(811)(도 8)에 의해 주 처리유닛(main processing unit, 910)으로 신호가 보내진다. 불충분한 유효 비트들이 유지될 때, 상기 BFPU는 한정된 부동 소수점 결과(280)에 대해 상기 sNaN(isb)(262)을 선택한다(계산된 결과(260) 값, sNaN(isb)(262)의 표현, 및 BFP 제로(261)의 한정된 부동 소수점 표현 중에서 선택).
손실 비트 D 필드(54)(도 1)는 더 이상 중요하지 않은 부동 소수점 표현에서의 비트 수의 표현을 포함한다.
상기 N 필드(55)는 정렬 및 정규화로부터 발생하는 반올림 오류들의 누적이다.
C 필드(56)는 R 필드(57)가 폭 r(108)을 가지는 것과 마찬가지로 R 필드(57R)(도 5)로부터의 캐리들의 합의 표현을 포함하며, 여기서, "R"은 정규화 후의 결과를 지칭한다. 폭 x(502)의 확장된 반올림 오류 X 필드(60R)의 비트들의 논리합(logical OR)은 종래의 캐리(carry) 및 가드(guard) 비트들 대신 사용된다. 상기 C 필드(56)의 값이 상기 손실 비트 D 필드(54)의 값을 초과하면, 1이 상기 손실 비트 D 필드(54)의 값에 더해지고, 상기 C 필드(56)는 1로 설정된다(도 6).
R 필드(57)는 현재의 R(57)과 정규화된 결과(720)의 절단(truncation)에 기인한 최상위 r(108) 비트인 결과적인 반올림 비트 R(57R)(도 5)을 포함한다. 부동 소수점 연산 동안의 오류시 경계를 계산하고 유지하는 장치 및 방법은 도 2a와 도 2b로 계속되어져 나타나는 예시적인 한정된 부동 소수점 가산/감산 다이어그램(200)에서 나타난다. 이 다이어그램은 본 발명의 부동 소수점 오류(보통 정렬과 정규화에 의해 야기됨)의 본 발명의 경계를 나타내는 예시적인 부동 소수점 가산 또는 감산 연산에 대한 로직과 제어를 제공한다.
한정된 부동 소수점 시스템은 복수의 레지스터들(990)(도 9), 주 처리유닛(910), 및 상기 주 처리유닛(910)과 통신 가능하게 결합된 한정된 부동 소수점 유닛(BFPU)(950)을 구비한 처리기기를 포함한다. 상기 주 처리유닛(910)은 내부 명령어들을 실행하고, 적어도 두 가지 유형의 BFPU 명령들(930, 830)을 BFPU(950)로 출력한다. 제1 유형은 수행될 산술 연산의 유형을 상기 BFPU(950)에 명령하고 두 개의 입력 피연산자(201, 202)를 제공하는 한정된 부동 소수점 연산 명령어(930)이다. 제2 유형은 디폴트 경계 제한(833)을 설정하거나 프로그램된 경계 제한(831)을 설정하기 위한 명령인 경계 제한 명령(830)이다.
산술 연산은 도 2a와 2B의 예시에서 제1 피연산자 레지스터(210)와 제2 피연산자 레지스터(220)에 각각 저장되는 두 개의 입력 피연산자들(201, 202)에 대해 수행된다. 그 후, 상기 BFPU(950)는 한정된 부동 소수점 숫자 입력들(201, 202)에 대해 FPU 명령들을 실행함으로써 결과 값인 한정된 부동 소수점 결과(280)를 생성한다. 이러한 한정된 부동 소수점 결과(280)는 누적 취소 오류 및 누적 반올림 오류로부터 획득되는 오류 경계 값을 포함한다. 상기 한정된 부동 소수점 결과(280) 내에 불충분한 유효 비트들이 있다면, 상기 BFPU(950)는 불충분한 유효 비트들을 신호로 보내는 sNaN 선택 제어(8110)을 생성한다. 상기 BFPU(950)는 또한 상기 복수의 레지스터들(990)의 주 처리유닛(910) 솔루션 레지스터에 상기 한정된 부동 소수점 결과(280)를 기록하고, 그에 의해 상기 한정된 부동 소수점 유닛(950)의 연산으로부터 결과를 저장한다.
도 2a의 제1 피연산자 레지스터 피연산자(210)는 상기 한정된 부동 소수점 형식(100)에서의 제1 피연산자(201)를 포함하는 레지스터(여기서, 레지스터는 하드웨어 레지스터, 레지스터 파일의 위치, 또는 메모리 위치일 수 있다)이다.
도 2a의 제1 피연산자(201)는 가산 연산을 위한 상기 한정된 부동 소수점 제1 가수(addend)이거나, 또는 감산 연산을 위한 피감수(minuend)이다. 상기 제1 피연산자(201)는 제1 피연산자 S 값(50A), 제1 피연산자 지수 E 값(51A), 제1 피연산자 경계 B 값(52A), 및 상기 제1 피연산자 가수 T 값(53A)을 포함한다.
도 2a의 제1 피연산자 레지스터 피연산자(220)는 상기 한정된 부동 소수점 형식(100) 내에 상기 제1 피연산자(202)를 포함하는 레지스터(여기서, 레지스터는 하드웨어 레지스터, 레지스터 파일의 위치, 또는 메모리 위치일 수 있다)이다.
상기 제2 피연산자(202)는 가산 연산을 위한 상기 한정된 부동 소수점 제2 가수이거나, 감산 연산을 위한 감수(subtrahend)이다. 상기 제2 피연산자(202)는 제2 피연산자 부호 비트 S(5OB), 제2 피연산자 지수 E(51B), 제2 피연산자 경계 B(52B), 및 제2 피연산자 가수 T(53B)를 포함한다.
도 2a 내지 2B의 이러한 한정된 부동 소수점 가산/감산 다이어그램(200) 내에서의 많은 단계들은 종래의 단계들(일반적으로 점선으로 표시됨)이지만, 이러한 종래의 단계들로부터의 몇몇 결과들은 본 발명의 장치 및 방법에서 활용된다.
도 2a와 3의 지수 로직 단계들(300)로 돌아가서, 상기 제1 피연산자 지수 E(51A)(도 2a의 제1 피연산자(201)로부터 도출)와 제2 피연산자 지수 E(51B)(도 2a의 제2 피연산자(202)로부터 도출)는 최대 지수 제어(302)를 결정하기 위해 지수 비교기(301)에서 비교된다. 최대 지수 제어(302)는, 제1 및 제2 가수 스왑 멀티플레서들(significand swap multiplexers, 230, 231)(도 2a)을 제어하고, 최대 및 최소 지수 선택 멀티플렉서들(310, 311)을 제어하고, 및 제1 및 제2 경계 스왑 멀티플렉서들(401, 402)(도 4)을 제어하는 제어 신호이다.
또한, 도 3에서 보여지듯이, 상기 최대 지수 제어(302)는 상기 제1 피연산자 지수 E(51A) 또는 상기 제2 피연산자 지수 E(51B) 중 더 큰 것을 식별하는 제어 신호이고, 최대 지수 선택 멀티플렉서(310)를 제어한다. 상기 최대 지수 선택 멀티플렉서(310)는 상기 최대 지수 제어(302)에 의해 제어되는 제1 피연산자 지수 E(51A)와 상기 제2 피연산자 지수 E(51B)로부터 가장 큰 지수 E(51D)를 선택한다. 최소 지수 선택 멀티플렉서(311)는 또한 최대 지수 제어(302)에 의해 제어되고, 상기 제1 피연산자 지수 E(51A)와 상기 제2 피연산자 지수 E(51B)로부터 최소 지수 E(51E)를 선택한다. 지수 차(321)는 상기 최대 지수 E(51D)로부터 상기 최소 지수 E(51E)를 감산하는 지수 감산기(320)에 의해 계산된다. 상기 지수 차(321)는 정렬 시프터(240)(도 2a)를 제어하고, 손실 비트들 감산기(410)(도 4)에 의해 사용된다.
또한, 도 2a에서 보여지듯이, 상기 최대 지수 제어(302)는 상기 제1 및 제2 가수 스왑 멀티플렉서들(230, 231)(도 2a)에 대한 제어를 제공한다. 상기 제1 가수 스왑 멀티플렉서(230)는 상기 제1 피연산자 가수 T(53A) 또는 상기 제2 피연산자 가수 T(53B) 중 어느 하나를 선택하고, 최소 지수 E(53D)를 갖는 피연산자의 가수 T를 생산한다. 유사하게, 상기 제2 가수 스왑 멀티플렉서(231)는 상기 제1 또는 제2 피연산자 가수 T(53A, 53B) 중 어느 하나로부터 최대 지수 E(53E)를 갖는 피연산자의 가수 T를 선택한다.
정렬 시프터(240)(도 2a)는, 최소 지수 E(241)를 갖는 피연산자의 정렬된 가수 T를 생산하도록 지수 차(321)(도 3의 지수 로직(300)으로부터 도출)에 의해 결정된 비트 수만큼 우측으로 최소 지수 E(53D)를 갖는 피연산자의 가수 T를 시프트한다. 정렬 시프트 손실(242)을 야기하는 정렬 시프터(240)로부터 오직 하나의 비트(0이 아닌 비트)는 가수 초과(741)가 검출되는 것을 보장하는 최소 지수 E(241)를 갖는 피연산자의 정렬된 가수 T의 최하위 비트 내에 삽입된다.
가수 가산기(250)(도 2a)는 최소 지수 E(241)를 갖는 피연산자의 정렬된 가수 T와 최대 지수 E(53E)를 갖는 피연산자의 가수 T의 합 또는 차(251)를 계산한다. 상기 가수 가산기의 가상의 폭 v(501, 도 5)는 확장된 한정된 부동 소수점 형식을 수용하는데 필요한 다중 가산에 대한 가능한 필요를 고려한 결과적인 합 또는 차의 폭이다.
도 5는 정규화 후에 한정된 부동 소수점 가수 가산기 결과(720)의 형식인 포스트 정규화 결과의 형식(500)의 세부사항을 제공한다. 이 형식은: (1) 표준 은닉 비트 H 필드(510)로서, 정규화 후 좌측 자리맞춤된 은닉 비트 H 필드(510); (2) 결과적인 정규화된 가수 T(53R)(폭으로 t(104) 비트)로서, 정규화 후의 결과적인 가수; (3) 절단으로 인해 결과적인 가수의 최상위 비트가 손실된 채 보유하는 폭 r(108)의 결과적인 반올림 비트 R 필드(57R); 및 (4) 형식에서 상기 R 필드(57R)의 우측으로의 절단으로 인해 손실된 결과의 비트를 포함하는 폭 x(502)의 확장된 반올림 오류 X 필드(60R)를 포함한다.
계산된 합 또는 차(251)(도 2a)는 도 7에서 확장되는 도 2b의 정규화 로직(700)에서 활용된다. 도 7의 상기 정규화 로직(700)의 세부사항으로 돌아가면, 상기 합 또는 차(251)는 정규화된 결과(720)에 도달하기 위해 우측 시프터(703) 또는 좌측 시프터(712)에 의해 사용된다. 이 결정을 위한 제1 제어는 캐리 검출부(701)에 의해 결정되는 상기 우측 시프터(703)를 제어하는 우측 시프트 제어부(702)이다. 상기 우측 시프터(703)는, 상기 우측 시프트 제어부(702)에 의해 지시될 때, 상기 합 또는 차(251)를 우측으로 한 비트 시프트시켜 우측 시프트 결과(704)를 생성한다. 우측 시프트 손실(705)은 상기 우측 시프트 결과(704)로부터 시프트된 한 비트이다. 이렇게 되면, 가수 초과(741)가 검출될 것을 보장하는 상기 우측 시프트 결과(704)의 최하위 비트 내에 한 비트가 삽입된다. 이러한 우측 시프트 결과(704)는 좌측 시프터(712)에서 활용된다. 상기 우측 시프트 제어(702)가 행사되지 않으면, 상기 우측 시프트 결과(704)는 상기 합 또는 차(251)와 동일하다.
또한, 도 7에서, 상기 합 또는 차(251)는 또 다른 제어인 최상위 제로 카운터(zero counter, 710)에서 사용된다. 상기 제로 카운터(710)는 상기 합 또는 차(251)의 최상위 제로들을 카운트하고, 결과를 정규화하는 데 필요한 선행 제로들(leading zeros)의 수(711)를 생산한다. 상기 선행 제로들의 수(711)는 상기 우측 시프트 결과(704)를 좌측으로 시프팅함으로써, 절단된 결과적인 가수 T(53C), 정규화된 반올림 R(57A), 및 정규화된 확장 X(60A)를 포함하는 정규화된 결과(720)를 생성하도록 상기 좌측 시프터(712)를 제어한다. 상기 최상위 제로 카운터(710)가 선행 제로들이 없는 것으로 결정하면, 상기 정규화된 결과(720)는 상기 우측 시프트 결과(704)와 동일하다. 만약 우측 또는 좌측 시프트가 없다면, 값은 단순히 통과된다(이는 캐리가 없다면, 및 유효한 제로들이 없다면 발생한다). 상기 선행 제로들의 수(711)는 상기 지수 정규화 가산기(730)에서도 사용되고, 도 6에서 확장되는 도 2b의 본 발명의 주 경계 로직(main bound logic, 600)에서 추가로 사용된다.
여전히 도 7에서, 최대 지수 E(51D)(도 3으로부터)는 상기 우측 시프트 제어(702)와 상기 선행 제로들의 수(711)를 사용하여 상기 지수 정규화 가산기(730)에 의해 정규화를 위해 조정된다.
정규화된 확장 X(60A)는 상기 정규화된 결과(720)의 포스트 정규화 결과 형식(500)(도 5)의 상기 X 필드(60R)로부터 도출된다.
초과 가수 검출기(excess significand detector, 740)는 상기 가수 초과(741)를 생성하는 상기 정규화된 확장 X(60A)의 모든 비트들의 논리합(logical OR)을 생성한다. 상기 가수 초과(741)는 본 발명의 주 경계 로직(600)(도 2b, 6A-6B)의 카운트 가산기(640)(도 6b)에 의해 활용된다.
상기 지수 정규화 가산기(730)(도 7)는 최대 지수 E(51D)에 또는 그로부터 상기 우측 시프트 제어(702)를 더하거나 상기 선행 제로들의 수(711)를 빼서 결과 지수 E(51D)를 생성하며, 이는 도 2b의 본 발명의 계산된 결과(26)에서의 지수이다.
도 2b의 부호 로직(290)은, 종래의 방식대로 동작하여, 상기 피연산자 부호 비트 S(50A), 상기 제2 피연산자 부호 비트 S(50B), 및 상기 우측 시프트 제어(702)로부터 결과 부호 비트 S(50C)를 결정한다.
도 2b의 본 발명의 장치 및 방법의 로직과 제어의 예시적인 다이어그램(200)으로 돌아가서, 상기 계산된 결과(260)는 상기 결과 부호 비트 S(50C), 도 7의 상기 결과 지수 E(51C), 도 6a의 상기 결과 경계 B(52C), 및 도 7의 상기 절단된 결과적인 가수 T(53C)의 연결로부터 생성된다.
도 2a의 본 발명의 장치 및 방법의 로직과 제어의 예시적인 다이어그램(200)으로 돌아가서, 도 2a의 상기 제1 피연산자 경계 B(52A), 도 2a의 상기 제2 피연산자 경계 B(52B), 도 3의 상기 최대 지수 제어(302), 및 도 3의 상기 지수 차(321)가 도 4에서 확장되는 도 2a의 지배적 경계 로직(dominant bound logic, 400)에서 사용된다.
산술 연산에서, 최소한의 유효 숫자 수를 가지는 피연산자는 상기 결과의 유효 숫자의 수를 결정("지배")한다. 정렬된 후에, 하나의 피연산자에서의 유효 비트들의 수가 다른 피연산자에서의 유효 비트들보다 적으면, 더 적은 유효 비트들을 갖는 피연산자의 유효 비트들은 그 결과에서의 기본 유효 비트들을 통제하거나 지배한다. 상기 지배적 경계 로직(400)은 초기 피연산자들인 제1 피연산자 경계 B(52A)와 상기 제2 피연산자 경계 B(52B)로부터 경계를 선택하여 취소와 반올림을 고려하기에 앞서 결과의 경계에 가장 많은 영향력을 가지는 경계를 결정한다.
도 4의 상기 지배적 경계 로직(400)에서 나타나듯이, 피연산자들 모두의 경계들(도 2a의 제1 및 제2 피연산자 경계들 B(52A, 52B))은 비교 전에 조정된 하나의 경계와 비교된다. 상기 지배적 경계 로직(400)은 지배적 경계 B(52H)를 결정한다. 상기 지배적 경계 B(52H)는 (1)클램핑된 경계 B(52G)와 (2)최대 지수를 가지는 피연산자의 경계(최대 지수 피연산자 경계 B(52E)) 중 더 큰 것이다. 이 지배적 경계 B(52H)는 반올림이나 취소가 없을 때의 피연산자의 최고 조건의 경계이다. 산술 연산에서, 최소 수의 유효 비트들을 가지는 상기 조정된 피연산자는 결과의 경계의 이러한 결정을 지배하고, 이는 최대 수의 손실 비트들을 가지는 상기 지배적 경계 B(52H)(경계들 B(52G 또는 52E)로부터, 여기서 클램핑된 경계 B(52G)는 최소 지수 B(52F)를 가지는 피연산자의 조정된 경계로부터 도출됨)가 이러한 최고 조건의 경계이기 때문이다.
도 4의 세부사항으로 돌아가서, 상기 최대 지수 제어(302)(도 3)에 의해 제어되는 상기 제1 경계 스왑 멀티플렉서(401)는 상기 제1 피연산자 경계 B(52A) 또는 상기 제2 피연산자 경계 B(52B)(둘 모두 도 2a)로부터 선택하여, 최소 지수 피연산자 경계 B(52D)를 이끌어낸다. 상기 최대 지수 제어(302)에 의해 또한 제어되는 상기 제2 경계 스왑 멀티플렉서(402)는 상기 제2 피연산자 경계 B(52B) 또는 상기 제1 피연산자 경계 B(52A)로부터 선택하여, 최대 지수 피연산자 경계 B(52E)를 이끌어낸다.
상기 손실 비트 감산기(410)는 최소 지수 피연산자 경계 손실 비트 D(54A), 최소 지수 피연산자 경계 B(52D)의 손실 비트부로부터 상기 지수 차(321)(도 3)를 감산하여, 조정된 최소 지수 피연산자 경계 손실 비트 D(54B)를 생성하는 회로이다. 상기 조정된 최소 지수 피연산자 경계 손실 비트 D(54B)는 최소 지수 B(52F)를 가지는 피연산자의 조정된 경계를 형성하도록 최소 지수 피연산자 경계 누적 반올림 오류 N(55A)과 연결된다. 상기 감산은 정렬 시프터(240)(도 2a)에서의 정렬 동안에 유효 숫자 손실이 없는 것을 나타내는 음의 조정된 최소 지수 피연산자 경계 손실 비트 D(54B)를 생성할 수 있다; 이 경우는 경계 클램프(clamp, 420)에 의해 처리된다. 상기 경계 클램프(420)는 상기 최소 지수 B(52F)를 가지는 피연산자의 조정된 경계가 0보다 작게 언더플로(underflow)되는 것을 막는다. 이는 상기 클램핑된 경계 B(52G)를 0 이상으로 제한한다. 0은 이러한 조정된 피연산자의 모든 비트가 유효함을 나타낸다.
경계 비교기(bound comparator, 430)는 지배적 경계 제어(431)를 결정하도록 최대 지수 피연산자 경계 B(52E)를 상기 클램핑된 경계 B(52G)와 비교한다. 이 지배적 경계 제어(431)는 최대 지수 피연산자 경계 B(52E)가 상기 클램핑된 경계 B(52G)보다 클 때 발휘(assert)된다. 상기 지배적 경계 제어(431)는 최대 지수 피연산자 경계 B(52E) 또는 상기 클램핑된 경계 B(52G)로부터 상기 지배적 경계 B(52H)를 선택하는 지배적 경계 멀티플렉서(440)에 의해 사용되고, 도 6a의 주 경계 로직(600)에서 활용된다.
이제 도 6a로 돌아가서, 상기 주 경계 로직(600)은 현재 연산의 계산된 결과(260)(도 2b)의 결과 경계 B(52C)를 결정한다. 이를 위한 입력들은 (1)도 4의 상기 지배적 경계 B(52H), (2)선행 제로들의 수(711)(도 7로부터, 최상위 제로들의 수), 및 (3)도 6b의 캐리 조정된 경계 B(52M)이다. 상기 결과 경계 B(52C)는 도 2b의 계산된 결과(260)과 도 8의 결과 경계 손실 비트 D(54F)의 결정에 의해 활용된다.
이 취소 경로에서, 우측 시프팅할 때, 유효 비트들이 손실된다. 이러한 손실 유효 비트들은 상기 지배적 경계 손실 비트 D(54C)에 추가되어야 한다. 상기 지배적 경계 손실 비트 D(54C)는 상기 지배적 경계 B(52H)의 손실 비트(54)이다. 이러한 지배적 경계 손실 비트 D(54C)는 상기 손실 비트 가산기(610)에서 사용되고, 이는 선행 제로들의 수(711)(도 7)를 상기 지배적 경계 손실 비트 D(54C)에 가산하여 상기 조정된 손실 비트 D(54D)를 이끌어낸다. 상기 조정된 손실 비트 D(54D)는 취소 조정된 경계 B(52J)를 생성하도록 상기 지배적 경계 누적 반올림 오류 N(55B)에 연결된다. 상기 지배적 경계 누적 반올림 오류 N(55B)은 상기 지배적 경계 B(52H)의 누적 반올림 오류이다.
도 6b로 돌아가서, 카운트 가산기(640)는 상기 누적 반올림 오류 N(55B), 정규화된 반올림 R(57A)(도 7), 및 가수 초과(741)(도 7)를 가산하여, 갱신된 누적 반올림 오류 N(55C)을 생성한다.
카운트 비교기(650)는 갱신된 누적 반올림 오류 확장 카운트 C(56A)가 도 6a의 지배적 경계 손실 비트 D(54C)보다 클 때 카운트 오버플로(count overflow, 651)를 표명한다. 상기 갱신된 누적 반올림 오류 확장 카운트 C(56A)는 상기 갱신된 누적 반올림 오류 N(55C)의 확장 카운트(56) 부분이다. 상기 지배적 경계 손실 비트 D(54C)와 상기 카운트 오버플로(651)는 손실 비트 증분기(incrementer, 660)와 조정된 경계 멀티플렉서(670)에 의해 활용된다.
상기 손실 비트 증분기(660)는 상기 카운트 오버플로(651)가 표명되어 증분된 손실 비트 D(54E)를 생성할 때 상기 지배적 경계 손실 비트 D(54C)에 1을 가산한다. 손실 비트 조정된 경계 B(52L)는 상기 증분된 손실 비트 D(54E), 상기 C 필드(56)에서 1의 값을 갖는 확장 카운트, 및 정규화된 반올림 R(57A)의 연결로 구성된 경계이다.
카운트 조정된 경계 B(52K)는 상기 갱신된 누적 반올림 오류 N(55C)과 상기 지배적 경계 손실 비트 D(54C)의 결합이다.
상기 조정된 경계 멀티플렉서(670)는 상기 카운트 오버플로(651)가 표명될 때 상기 손실 비트 조정된 경계 B(52L)를 선택하거나, 또는 도 6b의 상기 카운트 비교기(650)에 의해 활용되는 상기 캐리 조정된 경계 B(52M)를 생성하도록 상기 카운트 조정된 경계 B(52K)를 선택한다.
취소 검출기(620, 도 6a)는 상기 선행 제로들의 수(711)가 0보다 크다고 결정함으로써 취소가 있을 때, 취소 제어(621)를 발휘한다. 이 조건은, 예를 들어, 같은 부호를 가지는 더하기 연산 동안에는 거짓(false)일 것이다. 이 조건은, 취소가 발생할 수 있는 감산 또는 다른 연산 동안에 취소가 발생하면 참(true)이다.
상기 결과 경계 멀티플렉서(630, 도 6a)는 상기 취소 제어(621)에 의존적인 도 6b의 상기 취소 조정된 경계 B(52J) 또는 상기 캐리 조정된 경계 B(52M)를 선택한다. 상기 결과는 현재 연산의 최종 결과에 포함될 결과 경계 B(52C)이다(도 2b의 계산된 결과(260)).
이제 도 8의 예외 로직(800)을 참조하면, 상기 예외 로직(800)은 특수 표현인 0(zero)과 NaN을 필요로 하는 예외들에 대한 제어들(821, 811)을 제공한다. 상기 0의 특수 표현을 고려하면, 감산 명령의 결과는 결과의 유효 비트들이 0일때 0의 표현을 산출한다. 이는 결과적인 손실 비트들을 현재 연산의 피연산자들에서 사용가능한 비트들의 수와 비교하여 결정된다. 상기 sNaN(isb)(도 2b의 262)의 특수 표현을 고려할 때, 상기 결과 손실 비트들 D(54F)이 허용 불가능한 제한(804)보다 크다고 결정되면, 이때 상기 한정된 부동 소수점 결과(280)(도 2b)는 상기 특수 표현 "sNaN(isb)"이다.
도 8의 세부사항으로 돌아가서, 상기 가수 용량 메모리(significand capacity memory, 803)는 현재 연산의 폭에 대해 은닉 비트 H 필드(510)에 1을 더한 T 필드(53)의 크기(t+1, 여기서, 폭 t(104)은 도 1에서 보여지는 것처럼 가수(T)의 폭임)를 제공하는 정적 메모리이다. 메모리는 연산 폭 제어(801)에 의해 주소가 지정된다. 상기 연산 폭 제어(801)는 주소의 형태로 현재 한정된 부동 소수점 연산의 폭을 나타내는 프로세서에 의해 제공되는 신호이다. 상기 가수 용량 메모리(803)는 가수 용량(805)을 생성하고, 이는 결과에서의 상기 가수의 총 비트 수이다(상기 은닉 비트 H(510)를 포함함).
상기 결과 손실 비트들 D(54F)는 상기 결과 경계 B(52C)(도 2b, 6A)의 손실 비트들이다. 제로 검출 비교기(820)는 상기 결과 손실 비트들 D(54F)이 상기 가수 용량(805) 이상일 때 제로 선택 제어(821)(도 2b)를 행사한다.
상기 경계제한 메모리(802)는 현재의 연산 형식 폭에 대한 상기 결과 손실 비트들 D(54F)에서의 허용 불가능한 제한(804)을 포함하는 메모리(정적 또는 선택적으로 동적)이다. 상기 연산 폭 제어(801)에 의해 또한 주소가 지정되는 이러한 경계제한 메모리(802)는 상기 허용 불가능한 경계제한(804)을 제공한다.
sNaN 검출 비교기(810)는 상기 결과 손실 비트들 D(54F)이 상기 허용 불가능한 경계제한(804) 이상일 때 sNaN 선택 제어(811)를 행사한다. 상기 sNaN 선택 제어(811)는 상기 sNaN(isb)(262)을 상기 한정된 부동 소수점 결과(280)(도 2b)로 선택하기 위한 예외 및 결과 멀티플렉서(270)(도 2b)에 제공되는 신호이다.
본 발명의 장치 및 방법에서, 초기에 상기 경계제한 메모리(802)는 디폴트 경계제한(833) 값들을 포함하고, 이는 정적(디폴트) 또는 동적(프로그래밍된 경계제한(831))일 수 있다.
도 8의 우측에 도시된 선택적 동적 경우에 있어서, 경계제한은 디폴트 경계제한(833) 값(들)로부터 변경될 수 있다. 상기 프로그래밍된 경계제한(831)은 선택적 한정된 부동 소수점 명령에 의해 제공되는 값이다. 이러한 한정된 부동 소수점 명령은 상기 연산 폭 제어(801)에 의해 결정된 위치에서 상기 경계제한 메모리(802) 내에 허용 불가능한 경계제한(804)을 저장하고, 상기 메모리가 제한 기록 명령(830)을 수신할 때 발생한다. 상기 선택적 한정된 부동 소수점 제한 기록 명령(830)은 선택적인 기록 제어를 제공한다. 이러한 명령은 상기 연산 폭 제어(801)에 의해 결정된 주소 내에서 상기 경계제한 메모리(802) 내에 프로그래밍된 경계제한(831)을 저장한다.
상기 경계제한 메모리 디폴트 리셋 제어(832)는, 모든 경계제한 메모리(802) 위치들을 각각의 경계제한 메모리(802) 위치들에 대해 특정한 디폴트 경계제한(833)으로 리셋하는 선택적 특수 한정된 부동 소수점 명령으로부터의 선택적 제어 신호이고, 이는 정밀도에 기초될 수 있다. 선택적으로, 상기 경계제한 메모리 디폴트 리셋 제어(832)는, 상기 연산 폭 제어(801)에 의해 결정되고 디폴트 경계제한(833)으로 리셋되는 특정한 경계제한 메모리(802)를 지정할 수 있다.
제1 예시에서, 단정도(32비트, 폭 k(101)=32) 한정 부동 소수점 연산에 대해, T 필드(53)가 상기 은닉 비트 H(510)(5개 유효 십진수)를 포함하는 17개 유효 비트들을 제공하는 폭(t(104)=16)의 16 비트이면, 그때 상기 손실 비트들 D 필드(54)(d 105)와 C 필드(56)(c 107)의 폭은 각각 3 비트가 되어야 한다. 이는 표준 8비트 지수인 E 필드(51)(폭 e(102))를 수용하고, N 필드(55)를 4 비트(n 106=4)로 만드는 R 필드(57)에 대하여 1 비트를 허용한다. 원하는 디폴트 유효숫자가 3자리 십진수이면, 상기 은닉 비트 H(510)를 포함하는 10개의 이진 비트가 필요하다. 이는 손실 비트 D 필드(54F)(폭 d 105)의 결과적인 허용가능한 수가, 단정도 한정 부동 소수점 연산에 대한 상기 연산 폭 제어(801)에 의해 선택된 상기 경계제한 메모리(802)에 대해 허용가능한 경계제한(804)의 요구되는 값인, 7을 초과할 수 없음을 의미한다.
추가적인 예시로서, 배정도(64비트, 폭 k(101)=64) 한정 부동 소수점 연산에 대해, T 필드(53)가 상기 은닉 비트 H(510)를 포함하는 37개 유효 비트들(11+ 유효 십진수들)을 제공하는 폭(폭 t(104)=36)의 36 비트이면, 배정도 연산에 대응하는 상기 가수 용량 메모리(803) 위치에서 특정되는 것처럼, 상기 손실 비트들 D 필드(54)(d 105)와 상기 C 필드(54)(c 107)의 폭은 각각 R 필드(57)(폭 r(108)=4)를 허용하여 상기 N 필드(55)를 10 비트(폭 n(106)=10)로 만드는 것을 허용하는 6 비트가 될 필요가 있다. 원하는 디폴트 십진 유효숫자가 6자리 십진수이면, 상기 은닉 비트 H(510)를 포함하는 20개의 이진 비트들이 필요하다. 이는 손실 비트들 D(54F)의 결과적인 허용가능한 수가, 배정도 한정 부동 소수점 연산에 대한 상기 연산 폭 제어(801)에 의해 선택된 상기 경계제한 메모리(802)에 대해 허용가능한 경계제한(804)의 요구되는 값인, 17을 초과할 수 없음을 의미한다.
도 2b로 돌아가서, 상기 예외 및 결과 멀티플렉서(270)는 상기 제로 선택 제어(821) 또는 상기 sNaN 선택 제어(811)에 기초하여 계산된 결과(260)인 BFP 제로(261) 또는 sNaN(isb)(262)로부터 상기 한정 부동 소수점 결과(280)를 선택한다. 상기 제로 선택 제어(821)는 상기 sNaN 선택 제어(811)에 우선한다. 상기 제로 선택 제어(821)과 상기 sNaN 선택 제어(811) 중 어느 것도 행사되지 않으면, 상기 한정 부동 소수점 결과(280)는 상기 계산된 부동 소수점 결과(260)이다.
여기서, O는 지수 오프셋이고, t는 가수의 폭이고, T는 가수의 값이고, S는 부호 0 또는 1이고, E는 지수이고, D는 손실 비트이고, 및 2t는 은닉 비트 H(510)이다:
0이 아니고, sNaN이 아니고, 정규화된 한정 부동 소수점 값에 의해 표현되는 실제 값은 다음의 것들 사이에 놓여지고:
-1S
Figure pct00001
((T+2t)/2t-1)E-O 및 -1S
Figure pct00002
((T+2t+2D)/2t-1)E-O
그리고, 비정규화된 값들(여기서, 상기 E 필드의 값은 제로이고, 은닉 비트들은 없다)에 대해, 제1 및 제2 경계들은 다음과 같다.
-1S
Figure pct00003
T/2t-1 및 -1S
Figure pct00004
(T+2D)/2t-1
그리고, 기대되는 값은 상기 제1 및 제2 경계들의 평균이다.
외부의 십진수 표현으로부터 변환될 때 부동 소수점 값들로 도입되는 오류는 본 발명의 부동 소수점 표현으로 기록될 수 있다. 10진수 실수의 외부 표현으로의 변환은 오직 유효 비트들로 국한될 수 있거나, v+/-e 형식의 한정된 실수로 표현될 수 있고, 여기서, v는 실수(x
Figure pct00005
10p 형식으로, 여기서 x는 10진수 값이고, p는 10의 정수 거듭제곱이다)로 표현되는 기대되는 실제 값이고, e는 비슷한 형식의 실수로 표현되는 오류의 제1 및 제2 경계이다.
본 발명의 장치 및 방법에서, 취소가 발생하는 2개의 값들이 감산에 의해 비교될 때, 두 가지 고려사항들이 다음과 같이 행해진다.
동등성을 고려할 때, 상기 2개의 피연산자들이 그들의 유효 비트들에서 동일할 때, 그 결과는 사실상 제로가 될 것이다. 상기 언급된 것처럼, 손실 비트들의 수가 가수에 대해 허용가능한 비트들의 수를 초과할 때(또는 가수 용량(805)을 초과할 때), 상기 동등 비교 연산의 결과는 제로에 대한 표현으로 설정된다. 그러나, 상기 결과가 감산 연산에서 거의 제로일 때, 및 그 결과가 추가적인 수학 연산에서 사용될 때, 그 제로에 대한 경계 필드를 유지하는 것이 바람직할 수 있다. 이는 비교와 감산을 위한 한정 부동 소수점 연산들을 분리할 것을 필요로 할 수 있다.
보다 큼, 보다 작음, 크거나 같음, 및 작거나 같음의 전형적인 4 가지 경우가 존재하는 부등성(non-equality)을 고려할 때, 동등성은 위에서 언급되어 다루어졌기 때문에, 고려될 필요가 있는 것은 오직 2가지 경우가 존재한다. 보다 큰 것을 고려할 때, 상기 제1 피연산자의 최대값이 상기 제2 피연산자의 최대값보다 크다면, 상기 제1 피연산자가 상기 제2 피연산자보다 크다. 유사하게, 상기 제2 피연산자의 최소값이 상기 제1 피연산자의 최소값보다 작다면, 상기 제1 피연산자는 상기 제2 피연산자보다 크다.
몇몇 경우에 있어서, 상기 연산 결과의 부호가 반드시 상기 보다 큰 또는 보다 작은 조건을 반영하지는 않는다. 이는, 상기 제1 피연산자의 최소값이 상기 제2 피연산자의 최대값보다 작고, 상기 제2 피연산자의 최대값이 상기 제1 피연산자의 최소값보다 작은 때 발생한다. 이 경우에서, 종래의 방법들이 그 결과를 결정하는 데 필요로 될 수 있다. 이러한 경우들은 특수 한정 부동 소수점 명령들을 요구할 수도 있다.
본 발명의 장치 및 방법에서, 하나의 한정 부동 소수점 폭을 더 큰 한정 부동 소수점 폭(예를 들어, 32비트를 64비트로, 등)으로 변환하는 것은 유효 비트들 D 필드(54)의 손실을 더 좁은 폭에서 더 넓은 폭으로 변환하는 것을 필요로 한다. 이는 유지된 유효 비트들의 수를 제1 폭에 대해 계산되도록 하고, 그 후 제2 폭에 대한 유효 비트들의 손실로 변환하도록 하는 것을 요구한다. 이는, 예를 들어, 32비트에서 64비트 한정 부동 소수점 표현으로 변환할 때, 새롭게 계산된 유효 비트들의 손실이 새로운 폭에 대한 제한 값(수용불가능한 경계제한(804))을 초과할 때, 상기 sNaN(isb)(262)의 생성을 초래할 수 있다. 유사하게, 보다 넓은 한정 부동 소수점 폭으로부터 보다 좁은 한정 부동 소수점 폭으로 변환할 때, 모든 비트가 유효할 수 있지만, 더 넓은 표현에서 획득된 X 필드(60R)(도 5)로부터 손실된 비트들은 유효 비트들의 초기 손실로서 누적되어야 한다.
여기서 설명된 예시적인 실시예는, 프로세서, 컴퓨터 시스템, 또는 다른 처리 장치 내에서 또는 이와 결합된 실시간 오류 경계 추적을 갖는 한정 부동 소수점 회로를 설명한다. 이 설명에서, 처리 로직, 프로세서 유형들, 마이크로 아키텍쳐(micro-architectural) 조건들, 사건들(events), 활성화 메카니즘들(enablement mechanisms) 등과 같은 수많은 특정 세부사항들이 본 발명의 실시예에 대한 보다 완전한 이해를 제공하기 위하여 개시된다. 그러나, 당해 기술분야에서 숙련된 자에 의해, 본 발명은 이러한 특정 세부사항들 없이 실시될 수 있는 것으로 이해될 것이다. 또한, 몇몇 잘-알려진 구조들, 회로들 등은 본 발명의 실시예들을 불필요하게 모호하게 하는 것을 피하기 위하여 상세히 나타나지 않았다.
본 발명의 일 실시예는 단일 코어 또는 멀티-코어 한정 부동 소수점 프로세서를 제공할 수 있고, 또는 다른 부동 소수점이나 범용의 프로세서들에 포함될 수 있다. 상기 프로세서는 레지스터 파일 및 상기 레지스터 파일에 결합된 치환(permutation)(멀티플렉서) 유닛을 포함할 수 있다. 상기 레지스터 파일은 복수의 레지스터 뱅크들, 및 선택 신호를 수신하기 위한 입력을 가질 수 있다. 상기 선택 신호는 판독 또는 기록 연산들을 위한 데이터 요소 경계선으로서 레지스터 뱅크의 하나 이상의 단위 폭을 선택할 수 있다.
여기서 설명된 실시예들이 프로세서를 참조하여 설명되었지만, 다른 실시예들은 다른 유형의 집적회로들과 로직 장치들로 적용 가능하다. 본 발명의 실시예들의 유사한 기술들과 교시(teaching)들이 더 높은 파이프라인 처리율과 개선된 성능으로부터 이익을 얻을 수 있는 다른 유형의 회로들 또는 반도체 장치들에 적용될 수 있다. 본 발명의 실시예들의 교시들은 데이터 조작을 수행하는 소정의 프로세서 또는 기계에 적용 가능하다. 그러나, 본 발명은 특정 데이터폭 연산들을 수행하는 프로세서들이나 기계들로 한정되지 않고, 이러한 연산들이 이진수, 십진수, 또는 이진수로 인코딩된 십진수 데이터 표현들로 수행되는지와 관계없이 데이터의 조작 또는 관리가 수행되는 임의의 프로세서와 기계에 적용될 수 있다.
또한, 여기서 제시된 실시예는 한정 부동 소수점 가산 및 감산을 위한 장치 및 관련 방법을 나타내지만, 부동 소수점 연산들의 예시로서 제시된다. 확장에 의해, 부동 소수점 연산들 동안 오류시 경계를 계산하고 유지하기 위한 동일한 본 발명의 장치가 곱셈, 나눗셈, 제곱근, 곱셈 누산(multiply-add), 및 다른 부동 소수점 함수들과 같은 다른 부동 소수점 연산들에서 사용될 수 있다. 다른 실시예들은 실수의 외부 표현들, 표준 부동 소수점, 한정 부동 소수점, 및 가변 폭 형식을 포함하는 것에 한정되지 않고 이를 포함하는 부동 소수점 형식 간의 변환과 같은 보조적인 한정 부동 소수점 연산들을 포함할 수 있다.
여기서 제공되는 예시들이 실행 유닛들과 로직 회로들의 맥락으로 명령 처리 및 분배를 설명하지만, 본 발명의 다른 실시예들은 기계-판독가능한, 유형의 매체에 저장된 데이터 또는 명령들의 의해 달성될 수 있으며, 이는 기계에 의해 수행될 때, 해당 기계가 본 발명의 적어도 하나의 실시예와 일치하는 기능을 수행하도록 한다. 하나의 실시예에서, 본 발명의 실시예들과 연관된 기능들은 기계-실행가능한 명령들로 구현된다. 그 명령들은 해당 명령들로 프로그래밍된 범용 또는 특수-목적 프로세서가 본 발명의 단계들을 수행하도록 하게끔 사용될 수 있다. 본 발명의 실시예들은 컴퓨터(또는 다른 전자 장치들)가 본 발명의 실시예들에 따라 하나 이상의 연산들을 수행하도록 프로그래밍하도록 사용될 수 있는 명령들이 저장된 기계 또는 컴퓨터-판독가능한 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 선택적으로, 본 발명의 실시예들의 단계들은 그 단계들을 수행하기 위한 고정-기능 로직을 포함하는 특정 하드웨어 컴포넌트들, 또는 프로그래밍된 컴퓨터 컴포넌트들과 고정-기능 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수 있다.
본 발명의 실시예들을 수행하기 위한 로직을 프로그래밍하는 데 사용되는 명령들은 DRAM, 캐시, 플래시 메모리, 또는 다른 저장장치와 같은 시스템 내의 메모리 내에 저장될 수 있다. 나아가, 상기 명령들은 네트워크를 통해, 또는 다른 컴퓨터 판독가능한 매체에 의해 분배될 수 있다. 따라서, 기계-판독가능한 매체는 기계(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장하거나 전송하기 위한 소정의 메카니즘을 포함할 수 있고, 기계는, 플로피 디스켓, 광 디스크, 콤팩트 디스크(Compact Disc), 읽기-전용 메모리(CD-ROMs), 및 자기-광 디스크, 읽기-전용 메모리(ROMs), 랜덤 액세스 메모리(Random Access Memory, RAM), 소거가능 프로그래밍 가능한 읽기-전용 메모리(EPROM), 전기적 소거가능 프로그래밍 가능한 읽기-전용 메모리(EEPROM), 자기 또는 광학 카드, 플래시 메모리, 또는 전기적, 광학적, 음향적 또는 다른 형태의 전파 신호들(예를 들어, 반송파, 적외선 신호, 디지털 신호 등)을 통해 인터넷이나 다른 네트워크를 통해 정보를 전송하는 데 사용되는 유형의 기계-판독가능한 저장장치로 한정되지 않는다. 따라서, 상기 컴퓨터-판독가능한 매체는 기계(예를 들어, 컴퓨터)에 의해 판독가능한 형태로 전기적 명령들 또는 정보를 저장하거나 전송하는 데 적합한 임의의 형태의 유형의 기계-판독가능한 매체를 포함한다.
설계는 창작으로부터 시뮬레이션, 제작에 이르기까지 다양한 단계를 거칠 수 있다. 설계를 표현하는 데이터는 많은 방식으로 설계를 표현할 수 있다. 첫째, 시뮬레이션에서 유용하게, 하드웨어는 하드웨어 기술 언어(HDL, 예를 들어, VHDL) 또는 다른 기능적 기술 언어를 사용하여 표현될 수 있다. 또한, 로직 및/또는 트랜지스터 게이트들을 가지는 회로 수준 모델이 생성될 수 있다. 나아가, 몇몇 단계에서, 대부분의 설계들은 하드웨어 모델에서의 다양한 장치들의 물리적 배치를 나타내는 데이터 수준에 도달한다. 종래의 반도체 제조 기술이 사용되는 경우에서, 상기 하드웨어 모델을 나타내는 데이터는 집적회로를 생산하는 데 사용되는 마스크들(masks)에 대한 상이한 마스크 층들 상의 다양한 피처들(features)의 존재 또는 부재를 특정하는 데이터일 수 있다. 이러한 설계의 소정의 표현에서, 상기 데이터는 기계-판독가능한 매체의 임의의 형태로 저장될 수 있다. 메모리 또는, 디스크와 같은 자기적 또는 광학적 저장장치는 이러한 정보를 전송하기 위해 변조되거나 그렇지 않으면 생성된 광학 또는 전기적 파장을 통해 전송된 정보를 저장하기 위한 기계-판독가능한 매체일 수 있다. 코드 또는 설계를 나타내거나 운반하는 전기적 전송파(electrical carrier wave)가 전기 신호의 복사, 버퍼링, 또는 재-전송이 수행되는 범위에서 전송될 때, 새로운 복제가 행해진다. 따라서, 통신 공급자 또는 네트워크 공급자는 본 발명의 실시예들의 기술들을 구현하는 반송파 내에 인코딩된 정보와 같은 항목(article)을 적어도 일시적으로 유형의 기계-판독가능한 매체에 저장할 수 있다.
최신 프로세서에서, 많은 수의 상이한 실행 단위들이 다양한 코드와 명령들을 처리하고 실행하는 데 사용된다. 일부는 완료까지 많은 클럭 사이클이 걸리는 것에 비해 더 빠르게 완료되는 것들과 동일하게 모든 명령들이 생성되는 것은 아니다. 명령들의 처리율이 빠를수록, 프로세서의 전반적인 성능이 향상된다. 따라서, 가능한 빠르게 많은 명령들을 실행하는 것이 유리하다. 그러나, 더 많은 복잡도를 가지고 실행 시간과 프로세서 리소스들 측면에서 더 많은 것을 요구하는 소정의 명령들이 있다. 예를 들어, 부동 소수점 명령들, 로딩/저장 연산들, 데이터 이동들 등이 있다.
더 많은 컴퓨터 시스템들이 인터넷, 텍스트, 및 멀티미디어 응용프로그램들에서 사용됨에 따라, 시간이 지날수록 추가적인 프로세서 지원이 도입되었다. 하나의 실시예에서, 하나의 명령 집합은 데이터 유형들, 명령들, 레지스터 구조, 주소지정 방식, 메모리 구조, 인터럽트 및 예외처리, 및 외부 입력 및 출력(I/O)을 포함하는 하나 이상의 컴퓨터 구조들과 연관될 수 있다.
일 실시예에서, 명령 세트 구조(instruction set architecture, ISA)는 관련된 마이크로-코드를 가지는 하나 이상의 마이크로 구조에 의해 구현될 수 있고, 이는 하나 이상의 명령 집합들을 구현하는 데 사용되는 프로세서 로직과 회로들을 포함한다. 따라서, 상이한 마이크로 구조들을 가지는 프로세서들은 공통 명령 집합의 적어도 일부를 공유할 수 있다. 예를 들어, Intel® 프로세서들, Intel® CoreTM 프로세서들, 및 Advanced Micro Devices의 프로세서는 거의 동일한 버전의 x86 명령 집합(최신 버전에 추가되는 일부 확장을 구비)을 구현하지만, 상이한 내부 설계를 가진다. 마찬가지로, ARM Holdings, Ltd., MIPS, 또는 그들의 라이센스 사용자 또는 채택자들과 같은 다른 프로세서 개발회사들에 의해 설계된 프로세서들은 공통 명령 집합의 적어도 일부를 공유할 수 있지만, 상이한 프로세서 설계를 포함할 수 있다. 예를 들어, ISA의 동일한 레지스터 구조는, 레지스터 리네이밍 메카니즘(register renaming mechanism)(예를 들어, 레지스터 가명 테이블(Register Alias Table(RAT)), 재배열 버퍼(Reorder Buffer(ROB)), 및 회수 레지스터 파일(retirement register file)의 사용)을 사용하는 전용 물리적 레지스터들인 하나 이상의 동적으로 할당된 물리적 레지스터들을 포함하는 새로운 또는 잘-알려진 기술들을 사용하여 상이한 마이크로-아키텍처에서 상이한 방식으로 구현될 수 있다. 일 실시예에서, 레지스터들은 소프트웨어 프로그래머에 의해 다루어질 수 있거나 또는 다루어질 수 없는 하나 이상의 레지스터들, 레지스터 구조들, 레지스터 파일들 또는 다른 레지스터 집합들을 포함할 수 있다.
일 실시예에서, 부동 소수점 형식은 추가적인 필드들, 또는 다양한 필드들(비트 수, 비트 위치 등)을 나타내는 형식들을 포함할 수 있다. 몇몇 부동 소수점 형식들은 데이터 템플릿(또는 하위 형식)으로 더욱 세분화되거나 정의되 수 있다. 예를 들어, 주어진 데이터 형식의 데이터 템플릿은 데이터 형식의 필드들의 상이한 하위집합들을 가지도록 정의될 수 있고, 및/또는 주어진 필드가 상이하게 해석되도록 정의될 수 있다.
과학, 금융, 자동-벡터화된 범용, RMS(인식, 마이닝 및 합성), 및 시각 및 멀티미디어 응용프로그램들(예를 들어, 2D/3D 그래픽, 이미지 처리, 비디오 압축/압축해제, 음성 인식 알고리즘 및 오디오 조작)은 다수의 데이터 항목들에 대해 동일한 연산이 수행될 것을 요구할 수 있다. 일 실시예에서, 단일 명령 다중 데이터(Single Instruction Multiple Data, SIMD)는 하나의 프로세서가 다수의 데이터 요소들에 대한 연산을 수행하도록 하는 유형의 명령을 나타낸다. SIMD 기술은 레지스터의 비트들을 많은 고정-크기 또는 가변-크기 데이터 요소로 논리적으로 나눌 수 있는 프로세서들에서 사용될 수 있고, 각각의 요소는 개별적인 값을 나타낸다. 예를 들어, 일 실시예에서, 64 비트 레지스터 내의 비트들은 각각 16 비트 값을 나타내는 4개의 개별적인 16 비트 데이터 요소들을 포함하는 소스 피연산자(source operand)로 구성될 수 있다. 이러한 유형의 데이터는 '압축된(packed)' 데이터 유형 또는 '벡터(vector)' 데이터 유형으로 언급될 수 있고, 이러한 데이터 유형의 피연산자들은 압축된 데이터 피연산자들 또는 벡터 피연산자들로 언급된다. 일 실시예에서, 압축된 데이터 항목 또는 벡터는 단일 레지스터 내에 저장된 압축된 데이터 요소들의 시퀀스일 수 있고, 압축된 데이터 피연산자 또는 벡터 피연산자는 SIMD 명령(또는 '압축된 데이터 명령' 또는 '벡터 명령')의 소스 또는 목적지 피연산자일 수 있다. 일 실시예에서, SIMD 명령은, 동일하거나 상이한 수의 데이터 요소들을 가지고, 동일하거나 상이한 데이터 요소 순서로, 동일하거나 상이한 크기의 목적지 벡터 피연산자(결과 벡터 피연산자로 언급되기도 함)를 생성하기 위해 둘 이상의 소스 벡터 피연산자들에 대해 수행될 단일 벡터 연산을 지정한다.
일 실시예에서, 목적지 및 소스 레지스터들/데이터는 상응하는 데이터 또는 연산의 소스 및 목적지를 나타내기 위한 일반적인 용어들이다. 몇몇 실시예들에서, 이들은 레지스터들, 메모리, 또는 그들이 설명된 것과 달리 다른 명칭들 또는 기능들을 가지는 다른 저장 영역들에 의해 구현될 수 있다. 예를 들어, 일 실시예에서, 상기 계산된 결과(260)는 임시 저장 레지스터이거나 다른 저장 영역일 수 있으나, 반면에 상기 제1 피연산자(201)과 상기 제2 피연산자(202)는 제1 및 제2 소스 저장 레지스터 또는 다른 저장 영역 등일 수 있다. 다른 실시예들에서, 둘 이상의 피연산자와 결과 저장 영역들은 동일한 저장 영역(예를 들어, SIMD 레지스터) 내에 상이한 데이터 저장 요소들에 대응할 수 있다. 일 실시예에서, 상기 소스 레지스터들 중 하나는, 예를 들어, 목적지 레지스터들로서 기능하는 두 개의 소스 레지스터들 중 하나에 제1 및 제2 소스 데이터에 대해 수행된 연산의 결과를 기록함으로써 목적지 레지스터로서 또한 작동할 수 있다.
일 실시예에서, 일시적인 전파 신호를 제외한 모든 컴퓨터-판독가능한 매체를 포함하는 비-일시적 기계-판독가능한 저장매체는 여기서 설명되는 본 발명의 전부 또는 일부를 포함할 수 있다.
여기서 적합하게 예시적으로 개시된 본 발명은 여기서 특별히 개시되지 않은 임의의 요소들 없이 실행될 수 있다.
상세하게 많은 수정들, 변형들, 및 변화들이 본 발명의 설명된 선호되는 실시예들에 행해질 수 있기 때문에, 전술한 설명 및 첨부의 도면들에서 나타난 모든 사항들은 제한적인 의미가 아니고, 예시로서 해석되는 것을 의도한 것이다. 따라서, 본 발명의 범위는 첨부된 청구범위 및 그 균등물에 의해 결정되어야 한다.
필드 - 데이터 구조의 일부 또는 상기 데이터 구조의 해당 부분의 값을 지칭.
100: 한정된 부동 소수점 형식 - 새로운 부동 소수점 형식의 가상의 비트배열.
50: 부호 비트 필드(S 필드) - 표준 부동 소수점 부호 비트. (정보 기술 - 마이크로프로세서 시스템 - 부동 소수점 산술, 국제 표준, ISO/IEC/IEEE 60569:2011. Geneva: ISO, 2011, 9 페이지)
51: 지수 필드(E 필드) - 바이어스된 부동 소수점 지수. (정보 기술 - 마이크로프로세서 시스템 - 부동 소수점 산술, 국제 표준, ISO/IEC/IEEE 60569:2011, Geneva: ISO, 2011, 9 페이지)
52: 경계 필드(B 필드) - 표현된 실수의 경계 상에 누적 정보를 제공하기 위해 부동 소수점 표준에 추가된 새로운 필드.
53: 가수 필드(T 필드) - 부동 소수점 가수. 이는 현재 기술의 은닉 비트 H(510)보다 더 작은 부동 소수점 값의 부분(fraction)이다. (정보 기술 - 마이크로프로세서 시스템 - 부동 소수점 산술, 국제 표준, ISO/IEC/IEEE 60569:2011, Geneva:ISO, 2011, 9 페이지) 한정된 부동 소수점 형식(100)의 폭 t는 경계 B 필드(52)를 수용하기 위한 대응하는 표준 형식 폭보다 작다.
54: 손실 비트 필드(D 필드) - 더 이상 유효하지 않은 부동 소수점 표현에서의 비트들의 수. 이는 한정된 부동 소수점 형식(100)의 경계 B 필드(52)의 하위 필드이다.
55: 누적 반올림 오류 필드(N 필드) - 정렬 및 정규화로부터 발생한 반올림 오류들의 누적. 이는 한정된 부동 소수점 형식(100)의 경계 B 필드(52)의 하위 필드이다. 이는 C 필드(56)와 R 필드(57)로 구성된다.
56: 반올림 오류 카운트 필드(C 필드) - 연속적인 연산으로부터의 R 필드(57R)의 합으로부터의 캐리들(carries)의 합. 이는 한정된 부동 소수점 형식(100)의 N 필드(55)dml 하위 필드이다.
57: 반올림 비트 필드(R 필드) - 절단(truncation) 동안 손실된, 반올림 오류의 반올림된 최상위 비트들의 합. 이는 한정된 부동 소수점 형식(100)의 N 필드(55)의 하위 필드이다.
101: 한정된 부동 소수점 폭 - 한정된 부동 소수점 숫자의 폭. (정보 기술 - 마이크로프로세서 시스템 - 부동 소수점 산술, 국제 표준, ISO/IEC/IEEE 60569:2011, Geneva: ISO, 2011, 13-14페이지)
102: 폭 e - 지수 E 필드(51)의 폭 e.
103: 폭 b - 경계 B 필드(52)의 폭 b.
104: 폭 t - T 필드들(53, 도 1), (53R, 도 5)의 폭 t.
105: 폭 d - 손실 비트들 D 필드(54)의 폭 d.
106: 폭 n - N 필드(55)의 폭 n.
107: 폭 c - C 필드(56)의 폭 c.
108: 폭 r - R 필드들(57, 도 1), (57R, 도 5)의 폭 r.
200: 한정된 부동 소수점 가산/감산 다이어그램 - 다른 수학적 연산들에도 적용될 수 있는 예시적인 한정된 부동 소수점 가산 및 감산 연산들을 계산하기 위한 장치 및 방법의 데이터 및 제어 흐름 다이어그램.
201: 제1 피연산자 - 가산 연산을 위한 한정된 부동 소수점 형식(100)과 감산 연산을 위한 피감수(minuend)에 부합하는 레지스터들(990)(여기서, 레지스터는 하드웨어 레지스터, 레지스터 파일에서의 위치, 또는 메모리 위치일 수 있다)의 제1 피연산자 레지스터(210)으로부터의 데이터.
202: 제2 피연산자 - 가산 연산을 위한 한정된 부동 소수점 형식(100)과 감산 연산을 위한 감수(subtrahend)에 부합하는 레지스터들(990)(여기서, 레지스터는 하드웨어 레지스터, 레지스터 파일에서의 위치, 또는 메모리 위치일 수 있다)의 제2 피연산자 레지스터(220)으로부터의 데이터.
210: 제1 피연산자 레지스터 - 한정된 부동 소수점 형식(100)으로 제1 피연산자(201)를 포함하는 레지스터(여기서, 레지스터는 하드웨어 레지스터, 레지스터 파일에서의 위치, 또는 메모리 위치일 수 있다).
220: 제2 피연산자 레지스터 - 한정된 부동 소수점 형식(100)으로 제1 피연산자(202)를 포함하는 레지스터(여기서, 레지스터는 하드웨어 레지스터, 레지스터 파일에서의 위치, 또는 메모리 위치일 수 있다).
50A: 제1 피연산자 부호 비트 S 필드 - 제1 피연산자(201)의 S 필드.
51A: 제1 피연산자 지수 E - 제1 피연산자(201)의 E 필드.
52A: 제1 피연산자 경계 B - 제1 피연산자(201)에 대해 본 발명의 경계 B 필드(52)를 제공함.
53A: 제1 피연산자 가수 T - 제1 피연산자(201)의 T 필드.
50B: 제2 피연산자 부호 비트 S 필드 - 제2 피연산자(202)의 S 필드.
51B: 제2 피연산자 지수 E - 제2 피연산자(202)의 E 필드
52B: 제2 피연산자 경계 B - 제2 피연산자에 대한 본 발명의 오류 경계를 제공함.
53B: 제2 피연산자 가수 T - 제2 피연산자(202)의 T 필드.
230: 제1 가수 스왑 멀티플렉서 - 최대 지수 제어(302)에 의해 제어되는 제1 피연산자 가수 T(53A) 또는 제2 피연산자 가수 T(53B)로부터 최소 지수(53D)를 갖는 피연산자의 가수를 선택함.
231: 제2 가수 스왑 멀티플렉서 - 최대 지수 제어(302)에 의해 제어되는 제1 피연산자 가수 T(53A) 또는 제2 피연산자 가수 T(53B)로부터 최대 지수 E(53E)를 갖는 피연산자의 가수 T를 선택함.
53D: 최소 지수 E를 갖는 피연산자의 가수 T - 수정된 가수를 좌측으로 자리맞춤한 은닉 비트 H(510)의 삽입에 의해 수정된 최소 지수 E를 갖는 피연산자의 가수 T.
53E: 최대 지수 E를 갖는 피연산자의 가수 T - 수정된 가수를 좌측으로 자리맞춤한 은닉 비트 H(510)의 삽입에 의해 수정된 최대 지수 E를 갖는 피연산자의 가수 T.
240: 정렬 시프터 - 최소 지수 E(53D)를 갖는 피연산자의 가수 T를 지수 차(321)에 의해 결정된 비트 수만큼 우측으로 시프트함. 본 발명에서, 이러한 시프트는 손실 비트들을 바깥으로 시프트할 수 있고, 관련된 경계가 조정되어야 한다(도 4 참조, 지배적 경계 로직). 상기 정렬 시프터의 말단으로부터 시프트된 비트들은 상기 정렬 시프터의 결과의 최하위 비트 내로 삽입된다.
241: 최소 지수 E를 갖는 피연산자의 정렬된 가수 T - 최소 지수 E를 갖는 피연산자의 정렬된 가수 T.
242: 정렬 시프트 손실 - 정렬 시프터(240)으로부터 시프트된 하나의 비트임. 이렇게 되면, 가수 초과(741)가 검출될 것을 보장하는 최소 지수 E(241)를 갖는 피연산자의 정렬된 가수 T 내에 하나의 비트가 삽입된다.
250: 가수 가산기 - 최소 지수 E(241)를 갖는 피연산자의 정렬된 가수 T와 최대 지수 E(53E)를 갖는 피ㅍ연산자의 가수 T의 합 또는 차(251)를 계산.
251: 합 또는 차 - 최소 지수 E(241)를 갖는 피연산자의 정렬된 가수 T와 최대 지수 E(53E)를 갖는 피연산자의 가수 T의 합 또는 차.
51C: 결과 지수 E - 정규화 조정 후 지수의 최종 값.
52C: 결과 경계 B - 최종 결과 내에 포함되는 경계.
53C: 절단된 결과적 가수 T - 제로(0)로 반올림된 연산 결과의 가수.
260: 계산된 결과 - 결과 부호 비트 S(50C), 결과 지수 E(51C), 결과 경계 B(52C), 및 절단된 결과적 가수 T(53C)의 연결로서의 최종 계산된 결과.
261: BFP 제로 - 한정된 부동 소수점 표현에서의 제로.
262: sNaN(isb) - NaN(숫자가 아닌, 불충분한 유효 비트들)의 한정된 부동 소수점 표현.
270: 예외 및 결과 멀티플렉서 - 제로 선택 제어(821) 또는 sNaN 선택 제어(811)에 기초한 계산 결과(260), BFP 제로(261), 또는 sNaN(isb)(262)로부터 한정된 부동 소수점 결과(280)를 선택.
280: 한정된 부동 소수점 결과 - 연산, 한정된 부동 소수점 값, 제로, 또는 NaN의 레지스터들(990)(여기서, 레지스터는 하드웨어 레지스터, 레지스터 파일에서의 위치, 또는 메모리 위치)의 최종 결과 레지스터(285) 내에 저장된 최종 한정된 부동 소수점 값.
285: 최종 결과 레지스터 - 한정된 부동 소수점 결과(280)를 포함하는 레지스터들(990)(여기서, 레지스터는 하드웨어 레지스터, 레지스터 파일에서의 위치, 또는 메모리 위치)의 레지스터.
290: 부호 로직 - 제1 피연산자 부호 비트 S(50A)와 제2 피연산자 부호 비트 S(50B)와 우측 시프트 제어(702)(감산 후 부호에의 영향)로부터 결과 부호 비트 S(50C)를 결정.
50C: 결과 부호 비트 S - 계산된 결과(260)의 부호.
300: 지수 로직 - 지수 차(321)를 계산하고 최대 지수 제어(302)를 식별.
301: 지수 비교기 - 최대 지수 제어(302)를 결정하기 위해 제1 피연산자 지수 E(51A)와 제2 피연산자 지수 E(51B)를 비교.
302: 최대 지수 제어 - 제1 피연산자 지수 E(51A) 또는 제2 피연산자 지수 E(51B) 중 가장 큰 것을 식별하는 제어 신호이고, 제1 및 제2 가수 스왑 멀티플렉서들(230, 231), 최대 및 최소 지수 선택 멀티플렉서들(310, 311), 및 제1 및 제2 경계 스왑 멀티플렉서들(401, 402)를 제어함.
310: 최대 지수 선택 멀티플렉서 - 최대 지수 제어(302)에 의해 제어되는 제1 피연산자 지수 E(51A) 또는 제2 피연산자 지수(51B)로부터 최대 지수 E(51D)를 선택.
311: 최소 지수 선택 멀티플렉서 - 최대 지수 제어(302)에 의해 제어되는 제1 피연산자 지수 E(51A) 또는 제2 피연산자 지수 E(51B)로부터 최소 지수 E(51E)를 선택.
51D: 최대 지수 E - 최대 지수 제어(302)에 의해 결정되는 제1 피연산자 지수 E(51A)와 제2 피연산자 지수 E(51B) 중 가장 큰 것.
51E: 최소 지수 E - 최대 지수 제어(302)에 의해 결정되는 제1 피연산자 지수 E(51A)와 제2 피연산자 지수 E(51B) 중 가장 작은 것.
320: 지수 감산기 - 최대 지수 E(51D)와 최소 지수 E(51E) 간의 지수 차(321)를 계산.
321: 지수 차 - 제1 피연산자 지수 E(51A)와 제2 피연산자 지수 E(51B) 간 차이의 크기이고, 정렬 시프터(240)를 제어함. 본 발명에서, 손실 비트들 감산기(410)는 최소 지수 B(52F)를 갖는 피연산자의 조정된 경계를 생산하도록 최소 지수 피연산자 경계 B(52D)의 카운트부로부터 지수 차(321)를 또한 감산한다.
400: 지배적 경계 로직 - 지배적 경계 B(52H)를 결정하기 위해 제1 피연산자 경계 B(52A), 제2 피연산자 경계 B(52B), 최대 지수 제어(302), 및 지수 차(321)를 사용함. 산술 연산에서, 최소한의 유효 숫자 수를 가진 피연산자는 결과의 유효 숫자의 수를 결정("지배")한다.
401: 제1 경계 스왑 멀티플렉서 - 최대 지수 제어(302)에 의해 제어되는 제1 피연산자 경계 B(52A) 또는 제2 피연산자 경계 B(52B)로부터 최소 지수 피연산자 경계 B(52D)를 선택함.
402: 제2 경계 스왑 멀티플렉서 - 최대 지수 제어(302)에 의해 제어되는 제1 피연산자 경계 B(52A) 또는 제2 피연산자 경계 B(52B)로부터 최대 지수 피연산자 경계 B(52E)를 선택함.
52D: 최소 지수 피연산자 경계 B - 최소 지수를 갖는 피연산자의 경계.
52E: 최대 지수 피연산자 경계 B - 최대 지수를 갖는 피연산자의 경계.
54A: 최소 지수 피연산자 경계 손실 비트들 D - 최소 지수 피연산자 경계 B(52D)의 손실 비트들 D 부분.
55A: 최소 지수 피연산자 경계 B 누적된 반올림 오류 N - 최소 지수 피연산자 경계 B(52D)의 누적된 반올림 오류부.
410: 손실 비트들 감산기 - 조정된 최소 지수 피연산자 경계 손실 비트들 D(54B)를 생산하는 최소 지수 피연산자 경계 손실 비트들 D(54A)로부터 지수 차(321)를 감산.
54B: 조정된 최소 지수 피연산자 경계 손실 비트들 D - 정렬로 인한 최소 지수 피연산자 경계 B(52D)를 갖는 피연산자의 유효 비트들의 증가를 설명하기 위해 지수 차(321)에 의해 조정된 최소 지수 피연산자 경계 손실 비트들 D(54A).
52F: 최소 지수 B를 갖는 피연산자의 조정된 경계 - 조정된 최소 지수 피연산자 경계 손실 비트들 D(54B)와 최소 지수 피연산자 경계 누적된 반올림 오류 N(55A)의 연결.
420: 경계 클램프 - 손실 비트들 감산기(410)가 조정된 최소 지수 피연산자 경계 손실 비트들 D(54B)에 대해 음의 값을 생산할 때 최소 지수 B(52F)를 갖는 피연산자의 조정된 경계가 0보다 작게 언더플로(underflow) 되는 것을 금지함. 이는 클램핑된 경계 B(52G)를 0 이상으로 제한한다.
52G: 클램핑된 경계 B - 0 이상으로 제한된 최소 지수 B(52F)를 갖는 피연산자의 조정된 경계.
430: 경계 비교기 - 지배적 경계 제어(431)를 결정하기 위해 최대 지수 피연산자 경계 B(52E)를 클램핑된 경계 B(52G)와 비교.
431: 지배적 경계 제어 - 지배적 경계 B(52H)를 선택하도록 지배적 경계 멀티플렉서(440)를 제어.
440: 지배적 경계 멀티플렉서 - 지배적 경계 B(52H)를 결정하기 위해 최대 지수 피연산자 경계 B(52E) 또는 클램핑된 경계 B(52G) 중 가장 큰 것을 선택.
52H: 지배적 경계 B - 최대 지수 피연산자 경계 B(52E)와 클램핑된 경계 B(52G) 중 가장 큰 것. 이는 정렬 후에 최소 숫자의 유효 비트들을 갖는 피연산자의 경계이다.
500: 포스트 정규화 결과 형식 - 정규화 후 한정된 부동 소수점 가수 가산기 결과(720)의 형식.
501: 가수 가산기의 가상 폭 - 확장된 한정된 부동 소수점 형식들을 수용하는 데 필요한 다중 가산의 가능한 필요를 고려한 결과적인 합 또는 차의 폭.
510: 은닉 비트 H - 정규화 후에 좌측 자리맞춤한 은닉 비트 H 필드(510).
53R: 결과적인 정규화된 가수 T - 정규화 후의 결과적인 가수. 이 결과는 최종 결과 가수 T를 형성하도록 절단된다(0으로 반올림). 이 필드는 폭으로 t 비트이다.
57R: 결과적인 반올림 비트들 R 필드 - 절단으로 인해 손실된 결과적인 가수의 최상위 비트들을 보유하는 필드(폭 r(108)의). 이러한 비트들은 반올림 오류를 누적하는 데 사용된다.
60R: 확장된 반올림 오류 X 필드 - 형식에서 R 필드(57R)의 우측으로 절단으로 인해 손실된 결과의 비트들을 보유하는 필드(폭 x(502)의). 이러한 비트들은 "스티키 비트"와 몇몇 유사함을 제공할 것이다.
502: 확장된 반올림 오류 폭 x - X 필드(60R)의 가상 폭 x.
600: 주 경계로직 - 지배적 경계 B(52H), 캐리 조정된 경계 B(52M), 및 선행 제로들의 수(711)로부터 결과 경계 B(52C)를 계산.
54C: 지배적 경계 손실 비트들 D - 지배적 경계 B(52H)의 손실 비트들 D 필드(54) 내의 데이터.
55B: 지배적 경계 누적된 반올림 오류 N - 지배적 경계 B(52H)의 누적된 반올림 오류 N 필드(55).
610: 손실 비트들 가산기 - 조정된 손실 비트들 D(54D)를 획득하기 위해 지배적 경계 손실 비트들 D(54C)에 선행 제로들의 수(711)를 더함. 가수가 정규화(취소)를 위해 좌측 시프트되면, 유효하지 않은 비트들은 결과 내의 손실 비트들의 수를 증가시키면서 우측으로부터 안으로 시프트된다.
54D: 조정된 손실 비트들 D - 선행 제로들의 수(711)에 의해 조정된 지배적 경계 손실 비트들 D(54C).
52J: 취소 조정된 경계 B - 조정된 손실 비트들 D(54D)와 지배적 경계 누적된 반올림 오류 N(55B)의 연결.
620: 취소 검출기 - 선행 제로들의 수(711)가 1보다 큰 것을 결정하는 것에 의해 취소가 있을 때 취소 제어(621)를 행사. 동일한 부호들을 갖는 가산 연산이 하나의 1비트를 우측 시프트할 것을 요구할 수 있다.
621: 취소 제어 - 결과 경계 멀티플렉서(630)의 결과를 제어하는 취소 검출기(620)에 의해 결정되는 것처럼 취소가 발생하는 것을 나타내는 제어 신호.
630: 결과 경계 멀티플렉서 - 취소가 발생하는지(취소 제어(621))에 의존하는 증분된 조정된 경계 B(52J) 또는 캐리 조정된 경계 B(52M)를 선택. 이는 결과 경계 B(52C)를 결정한다.
640: 카운트 가산기 - 가수 초과(741)를 지배적 경계 누적된 반올림 오류 N(55B)과 정규화된 반올림 R(57A)에 가산하여 갱신된 누적 반올림 오류 N(55C)을 생성함.
55C: 갱신된 누적 반올림 오류 N - 가수 초과(741)에 의해 조정된 지배적 경계 누적 반올림 오류 N(55B).
56A: 갱신된 누적 반올림 오류 확장 카운트 C - 갱신된 누적 반올림 오류 N(55C)의 확장 카운트(56) 부분.
650: 카운트 비교기 - 카운트 오버플로(651)를 생성하도록 갱신된 누적 반올림 오류 확장 카운트 C(56A)를 지배적 경계 손실 비트들 D(54C)에 비교.
651: 카운트 오버플로 - 갱신된 누적 반올림 오류 확장 카운트 C(56A)가 반올림으로 인해 유효숫자의 하나의 비트가 손실되었음을 나타내는 지배적 경계 손실 비트들 D(54C) 이상일 때 표명됨. 갱신된 누적 반올림 오류 확장 카운트 C(56A)와 지배적 경계 손실 비트들 D(54C)가 모두 제로일 때, 카운트 오버플로(651)는 표명되지 않는다.
660: 손실 비트들 증분기 - 카운트 오버플로(651)가 표명될 때 지배적 경계 손실 비트들 D(54C)에 1을 가산.
54E: 증분된 손실 비트들 D - 카운트 오버플로(651)에 의해 조정된 지배적 경계 손실 비트들 D(54C).
52K: 카운트 조정된 경계 B - 지배적 경계 손실 비트들 D(54C)와 갱신된 누적 반올림 오류 N(55C)의 연결로 구성된 경계.
52L: 손실 비트들 조정된 경계 B - 증분된 손실 비트들 D(54E), C 필드(56)의 값에 대한 하나의 1, 및 정규화된 반올림 R(57A)의 연결로 구성된 경계.
670: 조정된 경계 멀티플렉서 - 카운트 오버플로(651)가 표명될 때의 손실 비트들 조정된 경계 B(52L) 또는 캐리 조정된 경계 B(52M)을 생산하는 카운트 조정된 경계 B(52K) 중 어느 하나를 선택.
52M: 캐리 조정된 경계 B - 카운트ㅌ 조정된 경계 B(52K)와 손실 비트들 조정된 경계 B(52L) 사이에서 선택된 잠재적 반올림 오류에 대해 조정된 경계.
700: 정규화 로직 - 절단된 결과적 가수 T(53C), 결과 지수 E(51C), 선행 제로들의 수(711), 가수 초과(741), 및 합 또는 차(251)와 최대 지수 E(51D)로부터의 캐리 검출(701)을 생산.
701: 캐리 검출 - 합 또는 차(251)가 정규화를 위해 우측 시프트, 우측 시프트 제어(702)가 필요한 캐리 아웃을 가졌는지 여부를 결정.
702: 우측 시프트 제어 - 합 또는 차(251)가 정규화를 위해 우측 시프트되어야 하는지를 제어. 우측 시프터(703)를 제어한다.
703: 우측 시프터 - 우측 시프트 제어(702)에 의해 지시될 때, 합 또는 차(251)를 우측으로 1 비트 시프트시켜 우측 시프트 결과(704)를 생성. 결과는 우측 시프트 손실(705)에 의해 수정된다.
704: 우측 시프트 결과 - 우측 시프트 제어(702)에 의해 결정되는 합 또는 차(251)를 정규화한 후의 결과. 우측 시프트 제어(702)가 표명되지 않으면, 우측 시프트 결과(704)는 합 또는 차(251)와 동일하다.
705: 우측 시프트 손실 - 우측 시프트 결과(704)로부터 시프트된 하나의 1 비트(참 비트). 이것이 일어나면, 하나의 1 비트는 가수 초과(741)가 검출될 것을 보장하는 우측 시프트 결과(704) 내에 삽입된다.
710: 최상위 제로 카운터 - 좌측 시프트에 의해 정규화하는 데 필요한 합 또는 차(251)의 최상위 제로들을 카운트. 좌측 시프터(712)를 제어하고 결과 지수 E(51C)의 계산에 기여하기 위해 선행 제로들의 수(711)를 생성한다.
711: 선행 제로들의 수 - 최상위 선행 제로들의 수. 좌측 시프터(712)와 취소 검출기(620)를 제어한다.
712: 좌측 시프터 - 정규화된 결과(720)를 생성하도록 우측 시프트 결과(704)를 정규화하는 데 필요한 선행 제로들의 수(711)에 의해 특정된 비트들의 수만큼 우측 시프트 결과(704)를 좌측으로 시프트한다.
720: 정규화된 결과 - 합 또는 차(251)를 정규화한 결과..
730: 지수 정규화 가산기 - 정규화를 위해 최대 지수 E(51D)를 조정. 우측 시프트 제어(702)가 표명되면, 1이 최대 지수 E(51D)에 가산되고; 그렇지 않으면, 선행 제로들의 수(711)가 최대 지수 E(51D)에서 감산된다. 어떠한 경우든 결과 지수 E(51C)를 생성한다.
57A: 정규화된 반올림 R - 절단으로 인해 손실된 정규화된 결과(720)의 최상위 r 비트들(108).
60A: 정규화된 확장 X - 절단으로 인해 손실되는 정렬 또는 정규화에 의해 생성된 정규화된 반올림 R(57A)의 우측으로 정규화된 결과(720)의 x(502) 본 발명으ㅢ 비트들임.
740: 초과 가수 검출기 - 가수 초과(741)를 생산하는 정규화된 확장 X(60A)의 모든 비트들의 논리합을 생성.
741: 가수 초과 - 정규화된 확장 x(60A)의 모든 비트들의 논리합.
800: 예외 로직 - 결과 경계 B(52C), 허용 불가능한 경계 제한(804), 및 가수 용량(805)로부터 제로 제어(821)와 sNaN 선택 제어(811)를 결정.
801: 연산 폭 제어 - 주소의 형태로 현재의 한정된 부동 소수점 연산의 폭을 나타내는 프로세서에 의해 제공되는 신호.
802: 경계 제한 메모리 - 결과 손실 비트들 D(54F)에 대해 허용 불가능한 제한을 포함하는 선택적인 동적 메모리. 디폴트값들로 초기화되거나, 또는 디폴트값들로 리셋되는 선택적 특수 명령들에 의해 초기화됨. 특수한 선택적 프로세서 명령은 경계 제한 메모리(802)의 내용을 손실 유효 비트들에 대한 맞춤형 제한으로 설정할 수 있다. 메모리는 연산 폭 제어(801)에 의해 주소 지정된다.
803: 가수 용량 메모리 - 가수(t+1)의 크기에 현재 연산의 폭을 제공하는 정적 메모리이다. 메모리는 연산 폭 제어(801)에 의해 주소 지정된다.
804: 허용 불가능한 경계 제한 - 현재 연산 폭 제어(801)에 의해 선택된 결과 손실 비트들 D(54F)에 대한 허용 불가능한 제한(경계 제한 메모리(802)로부터).
54F: 결과 경계 손실 비트들 D - 결과 경계 B(52C)의 손실 비트들 D 필드(54) 부분에서의 데이터.
805: 가수 용량 - 현재의 한정된 부동 소수점 연산의 피연산자들 내에서 은닉 비트 H(510)를 포함한 가수를 표현하는 비트들의 수.
810: sNaN 검출 비교기 - 결과 손실 비트들 D(54F)가 허용 불가능한 경계 제한(804) 이상일 때 sNaN 선택 제어(811)를 표명.
811: sNaN 선택 제어 - sNaN(isb)(262)을 한정된 부동 소수점 결과(280)로서 선택하도록 예외 및 결과 멀티플렉서(270)에 제공되는 신호.
820: 제로 검출 비교기 - 결과 손실 비트들 D(54F)가 가수 용량(805) 이상일 때 제로 선택 제어(821)를 표명.
821: 제로 선택 제어 - 제로를 한정된 부동 소수점 결과(280)로 선택하도록 예외 및 결과 멀티플렉서(270)에 제공되는 신호.
830: 제한 기록 명령 - 선택적 기록 제어를 제공하는 선택적 한정된 부동 소수점 명령. 이 명령은 연산 폭 제어(801)에 의해 결정된 주소 내에 경계 제한 메모리(802) 내로 프로그래밍된 경계 제한(831)을 저장한다.
831: 프로그래밍된 경계 제한 - 선택적 한정된 부동 소수점 명령에 의해 제공되는 값. 이 한정된 부동 소수점 명령은 연산 폭 제어(801)에 의해 결정된 위치에서 경계 제한 메모리(802) 내에 허용 불가능한 경계 제한(804)을 저장한다.
832: 경계 제한 메모리 디폴트 리셋 제어 - 모든 경계 제한 메모리(802) 위치들을 디폴트 경계 제한(833)으로 리셋하는 선택적 특수 한정된 부동 소수점 명령으로부터의 선택적 제어 신호.
833: 디폴트 경계 제한 - 연산 폭 제어(801)에 의해 결정된 위치에서 경계 제한 메모리(802) 내에 저장된 디폴트값(각각의 정밀도에 대해 미리-결정된 값을 가짐).
900: 한정된 부동 소수점 시스템 - 관련 레지스터들(990)을 구비한 주 처리유닛(910)으로 구성되는 한정된 부동 소수점 형식으로 숫자들을 계산하고 한정된 부동 소수점 유닛(BFPU, 950)과 통신하기 위한 시스템.
910: 주 처리유닛 - 복수의 레지스터들(990)(여기서, 레지스터는 하드웨어 레지스터, 레지스터 파일에서의 위치, 또는 메모리 위치일 수 있다)로부터, 및 이들로 데이터(201, 202, 831, 280)를 액세스하는 내부 명령들을 실행하고, 명령어들과 데이터(201, 202, 831)를 출력한다.
930: 한정된 부동 소수점 연산 명령 - 곱셈, 뺄셈, 또는 예시적인 한정된 부동 소수점 가산 연산과 같은 한정된 부동 소수점 산술 명령.
940: sNaN(isb) 예외 - sNaN 선택 제어(811)에 기초하여 생성된 NaN 프로세서 예외를 신호 보내는 한정된 부동 소수점.
950: 한정된 부동 소수점 유닛(BFPU) - 불충분한 유효 비트들이 결과에 남아 있거나, 허용 불가능한 경계 제한(804)을 수립하는 제한 기록 명령(830)을 실행할 때, 한정된 부동 소수점 결과(280)와 sNaN(isb) 예외(940)를 생산하는 제1 피연산자(201)와 제2 피연산자(202) 상에 한정된 부동 소수점 연산 명령들(930)을 실행하는 한정된 부동 소수점 시스템(900)의 일부이다.
990: 레지스터들 - 복수의 레지스터들(여기서, 레지스터는 하드웨어 레지스터, 레지스터 파일에서의 위치, 메모리 위치일 수 있다)이다. 한정된 부동 소수점 제1 입력 피연산자(201), 한정된 부동 소수점 제2 입력 피연산자(202), 한정된 부동 소수점 결과(280), 및 프로그래밍된 경계 제한(831)에 대한 저장 공간을 제공한다.

Claims (15)

  1. 제1 피연산자 레지스터(operand register, 210)로부터 한정된 부동 소수점 형식(bounded floating point format, 100)으로 제1 피연산자(201)를 수신하는 단계로서; 상기 한정된 부동 소수점 형식(100)은 부호 비트 S 필드(50), 지수 E 필드(51), 경계 B 필드(52), 및 가수(significand) T 필드(53)를 포함하고; 상기 경계 필드(52)는 손실 비트들 D 필드(54)와 누적 반올림 오류 N 필드(55)를 포함하고, 상기 누적 반올림 오류 N 필드(55)는 반올림 오류 카운트 C 필드(56)와 반올림 비트들 R 필드(57)를 포함하는, 수신하는 단계;
    제2 피연산자 레지스터(220)로부터 상기 한정된 부동 소수점 형식(100)으로 제2 피연산자(202)를 수신하는 단계;
    상기 한정된 부동 소수점 형식(100)으로 한정된 부동 소수점 결과(280)를 계산하는 단계; 및
    최종 결과 레지스터(285)에 상기 한정된 부동 소수점 결과(280)를 저장하는 단계를 포함하는, 컴퓨터-구현되는 방법.
  2. 제 1 항에 있어서,
    한정된 부동 소수점 결과(280)를 계산하는 단계는 계산된 결과(260)를 계산하는 단계를 포함하고;
    한정된 부동 소수점 결과(280)를 계산하는 단계는 상기 계산된 결과(260), BFP 제로(261), 및 sNaN(isb)(262) 중에서 선택하는 단계를 포함하고; 및
    상기 계산된 결과(260), 상기 BFP 제로(261), 및 상기 sNaN(isb)(262) 중에서 선택하는 단계는:
    a. 제로 선택 제어(821)가 행사되면 상기 BFP 제로(261)을 선택하는 단계;
    b. sNaN 선택 제어(811)가 행사되면 상기 sNaN(isb)(262)을 선택하는 단계; 및
    c. 상기 제로 선택 제어(821)와 상기 sNaN 선택 제어(811) 어느 것도 행사되지 않으면 상기 계산된 결과(260)를 선택하는 단계를 포함하는, 컴퓨터-구현되는 방법.
  3. 제 1 항에 있어서,
    한정된 부동 소수점 결과(280)를 계산하는 단계는:
    지배적 경계(dominant bound, 52H)를 계산하는 단계를 포함하고, 상기 지배적 경계(52H)를 계산하는 단계는:
    a. 최대 지수 제어(302)와 지수 차(exponent difference, 321)를 계산하는 단계;
    b. 상기 최대 지수 제어(302)를 계산하는 단계는 제1 피연산자 지수 E(51A)를 제2 피연산자 지수 E(51B)에 비교하는 것을 포함하고;
    c. 상기 제2 피연산자 지수 E(51B)가 상기 제1 피연산자 지수 E(51A)보다 크면 상기 최대 지수 제어(302)를 행사하는 단계;
    d. 지수 차(321)를 계산하는 단계는 상기 제1 피연산자 지수 E(51A)와 상기 제2 피연산자 지수 E(51B) 중 더 큰 것과 상기 제1 피연산자 지수 E(51A)와 상기 제2 피연산자 지수 E(51B) 중 더 작은 것 간의 차이를 포함하고;
    e. 상기 최대 지수 제어(302)에 의해, 상기 제1 피연산자(201) 또는 상기 제2 피연산자(202)가 최대 지수 피연산자 경계 B(52E)를 결정하도록 최대 지수를 가지는지 여부를 결정하는 단계;
    f. 상기 최대 지수 제어(302)에 의해, 상기 제1 피연산자(201) 또는 상기 제2 피연산자(202)가 최소 지수 피연산자 경계 B(52D)를 결정하도록 최소 지수를 가지는지 여부를 결정하는 단계;
    g. 클램핑된 경계(clamped bound) B(52G)를 생성하도록 상기 지수 차(321)를 감산함으로써 상기 최소 지수 피연산자 경계 B(52D)를 조정하는 단계; 및
    h. 상기 클램핑된 경계 B(52G)와 상기 최대 지수 피연산자 경계 B(52E) 중 더 큰 것을 선택하는 단계를 포함하는, 컴퓨터-구현되는 방법.
  4. 제 1 항에 있어서,
    상기 한정된 부동 소수점 결과(280)를 계산하는 단계는 주 경계 로직(main bound logic, 600)을 통해, 결과 경계 B(52C)를 계산하는 단계를 포함하는, 컴퓨터-구현되는 방법.
  5. 제 4 항에 있어서,
    지배적 경계 손실 비트들 D(54C)를 포함하는 지배적 경계(52H)를 계산하는 단계를 추가로 포함하고; 상기 결과 경계 B(52C)를 계산하는 단계는:
    정규화된 확장(60A)이 0이 아닌 것을 결정하는 단계;
    상기 정규화된 확장 X(60A)가 0이 아니면 가수 초과(significand excess, 741)를 표명하는 단계;
    최소 지수 E(241)를 갖는 상기 피연산자의 정렬된 가수 T와 최대 지수 E(53E)를 갖는 피연산자의 가수 T 간의 합 또는 차(251)의 선행 제로들(leading zeros)을 카운트함으로써 선행 제로들의 수(711)를 결정하는 단계; 및
    상기 선행 제로들의 수(711)를 상기 지배적 경계 손실 비트들 D(54C)에 가산하는 단계를 포함하는, 컴퓨터-구현되는 방법.
  6. 복수의 레지스터들(990);
    내부 명령어들과 외부 FPU 명령어들(930, 830, 831)을 실행하기 위한 주 처리장치(910);
    상기 주 처리장치(910)와 통신가능하게 결합된 한정된 부동 소수점 유닛(BFPU)(950)을 포함하고,
    상기 BFPU(950)는:
    상기 주 처리장치(910)로부터 최소한 두 개의 BFPU 명령어들(930, 830)을 수신하고, 상기 BFPU 명령어들(930, 830)은 부동 소수점 연산 명령(930)과 경계제한 선택 명령(830, 832)을 포함하고;
    상기 부동 소수점 연산 명령(930)의 연산을 한정된 부동 소수점 입력 피연산자들(201, 202)에 적용하여 계산된 결과(260) 값을 생성하고;
    취소 오류가 누적된 취소 조정된 경계 B(52J)와 반올림 오류가 누적된 캐리(carry) 조정된 경계 B(52M)를 사용하여 결과 경계 B(52C) 오류 값을 생성하고;
    상기 계산된 결과(260) 값에 불충분한 유효 비트들이 있으면, 불충분한 유효 비트들을 신호 보내는 sNaN 선택 제어 신호(811)를 생성하고;
    상기 계산된 결과(260) 값, sNaN(isb)(262)의 표현, 및 BFP 제로(261)의 한정된 부동 소수점 표현 중 하나로부터 한정된 부동 소수점 결과(280) 값을 선택하고; 및
    상기 복수의 상기 레지스터들(990)의 주 처리장치(910) 최종 결과 레지스터(285)에 상기 한정된 부동 소수점 결과(280) 값을 기록하도록 되어 있는, 처리 장치.
  7. 제 6 항에 있어서, 상기 경계제한 선택 명령은, 프로그래밍된 경계제한(831) 값을 설정하기 위한 경계제한 메모리 디폴트 리셋 제어(832) 명령과 제한 기록 제어(830) 명령 중 하나를 포함하는, 처리 장치.
  8. 제 6 항에 있어서, 상기 한정된 부동 소수점 입력 피연산자들(201, 202)은, 부호 비트 S 필드(50), 지수 E 필드(51), 경계 B 필드(52), 및 가수 T 필드(53)를 포함하는 한정된 부동 소수점 형식(100)으로 있고; 상기 경계 필드(52)는 손실 비트들 D 필드(54)와 누적된 반올림 오류 N 필드(55)를 포함하고; 및 상기 누적된 반올림 오류 N 필드(55)는 반올림 오류 카운트 C 필드(56)와 반올림 비트들 R 필드(57)를 포함하는, 처리 장치.
  9. 제 6 항에 있어서, 상기 계산된 결과(260) 값, 상기 sNaN(isb)(262)의 표현, 및 상기 BFP 제로(261)의 한정된 부동 소수점 표현 중 하나로부터 상기 한정된 부동 소수점 결과(280) 값을 선택하는 것은:
    제로 선택 제어(821)가 표명되면 상기 BFP 제로(261)를 선택하는 것;
    상기 sNaN 선택 제어 신호(811)가 표명되면 상기 sNaN(isb)(262)을 선택하는 것; 및
    상기 제로 선택 제어(821)와 상기 sNaN 선택 제어(811) 중 어느 것도 표명되지 않으면 상기 계산된 결과(260)를 선택하는 것을 포함하는, 처리 장치.
  10. 기계에 의해 접속될 때, 상기 기계로 하여금 연산을 수행하도록 하는 데이터를 포함하는 비-일시적 기계-판독가능한 저장매체로서,
    상기 연산은:
    한정된 부동 소수점 유닛(BFPU)(950)에 의해, 주 처리장치(910)로부터 적어도 하나의 부동 소수점 입력 피연산자(201, 202)를 갖는 부동 소수점 연산 명령(930)과 경계제한 선택 명령(830, 832)을 수신하는 것;
    상기 부동 소수점 연산 명령(930)의 연산을 한정된 부동 소수점 입력 피연산자들(201, 202)에 적용하여 계산된 결과(260)를 생성하는 것;
    취소 오류가 누적된 취소 조정된 경계 B(52J)와 반올림 오류가 누적된 캐리 조정된 경계 B(52M)를 사용하여 결과 경계 B(52C) 오류 값을 생성하는 것;
    상기 계산된 결과(260) 값에 불충분한 유효 비트들이 있으면, 불충분한 유효 비트들을 신호 보내는 sNaN 선택 제어 신호(811)를 생성하는 것;
    상기 계산된 결과(260) 값, sNaN(isb)(262)의 표현, 및 BFP 제로(261)의 한정된 부동 소수점 표현 중 하나로부터 한정된 부동 소수점 결과(280) 값을 선택하는 것; 및
    상기 복수의 상기 레지스터들(990)의 주 처리장치(910) 최종 결과 레지스터(285)에 상기 한정된 부동 소수점 결과(280) 값을 기록하는 것;을 포함하는, 비-일시적 기계-판독가능한 저장매체.
  11. 제 10 항에 있어서, 상기 경계제한 선택 명령은, 프로그래밍된 경계제한(831) 값을 설정하기 위한 디폴트 경계제한(833) 명령과 제한 기록 제어(830) 명령 중 하나를 포함하는, 비-일시적 기계-판독가능한 저장매체.
  12. 제 10 항에 있어서, 상기 한정된 부동 소수점 입력 피연산자들(201, 202)은, 부호 비트 S 필드(50), 지수 E 필드(51), 경계 B 필드(52), 및 가수 T 필드(53)를 포함하는 한정된 부동 소수점 형식(100)으로 있고; 상기 경계 필드(52)는 손실 비트들 D 필드(54)와 누적된 반올림 오류 N 필드(55)를 포함하고; 및 상기 누적된 반올림 오류 N 필드(55)는 반올림 오류 카운트 C 필드(56)와 반올림 비트들 R 필드(57)를 포함하는, 비-일시적 기계-판독가능한 저장매체.
  13. 제 10 항에 있어서, 상기 계산된 결과(260) 값, 상기 sNaN(isb)(262)의 표현, 및 상기 BFP 제로(261)의 한정된 부동 소수점 표현 중 하나로부터 상기 한정된 부동 소수점 결과(280) 값을 선택하는 것은:
    제로 선택 제어(821)가 표명되면 상기 BFP 제로(261)를 선택하는 것;
    상기 sNaN 선택 제어 신호(811)가 표명되면 상기 sNaN(isb)(262)을 선택하는 것; 및
    상기 제로 선택 제어(821)와 상기 sNaN 선택 제어(811) 중 어느 것도 표명되지 않으면 상기 계산된 결과(260)를 선택하는 것을 포함하는, 비-일시적 기계-판독가능한 저장매체.
  14. 제 10 항에 있어서,
    상기 계산된 결과(260) 값을 계산하는 것은:
    지배적 경계(52H)를 계산하는 것을 포함하고, 상기 지배적 경계(52H)를 계산하는 것은:
    i. 최대 지수 제어(302)와 지수 차(321)를 계산하는 것;
    j. 상기 최대 지수 제어(302)를 계산하는 것은 제1 피연산자 지수 E(51A)와 제2 피연산자 지수 E(51B)를 비교하는 것을 포함하는 것;
    k. 상기 제2 피연산자 지수 E(51B)가 상기 제1 피연산자 지수 E(51A)보다 크면 상기 최대 지수 제어(302)를 행사하는 것;
    l. 지수 차(321)를 계산하는 것은, 상기 제1 피연산자 지수 E(51A)와 상기 제2 피연산자 지수 E(51B) 중 더 큰 것과 상기 제1 피연산자 지수 E(51A)와 상기 제2 피연산자 지수 E(51B) 중 더 작은 것 간의 차이를 포함하는 것;
    m. 상기 최대 지수 제어(302)에 의해, 상기 제1 피연산자(201) 또는 상기 제2 피연산자(202)가 최대 지수 피연산자 경계 B(52E)를 결정하도록 최대 지수를 가지는지 여부를 결정하는 것;
    n. 상기 최대 지수 제어(302)에 의해, 상기 제1 피연산자(201) 또는 상기 제2 피연산자(202)가 최소 지수 피연산자 경계 B(52D)를 결정하도록 최소 지수를 가지는지 여부를 결정하는 것;
    o. 클램핑된 경계 B(52G)를 생성하도록 상기 지수 차(321)를 감산함으로써 상기 최소 지수 피연산자 경계 B(52D)를 조정하는 것; 및
    p. 상기 클램핑된 경계 B(52G)와 상기 최대 지수 피연산자 경계 B(52E) 중 더 큰 것을 선택하는 것;을 포함하는, 비-일시적 기계-판독가능한 저장매체.
  15. 제10 항에 있어서, 상기 계산된 결과(260) 값을 계산하는 것은, 주 경계로직(600)을 통해, 결과 경계 B(52C)를 계산하는 것을 포함하고; 및 상기 결과 경계 B(52C)를 계산하는 것은:
    정규화된 확장(60A)이 0이 아닌 것을 결정하는 것;
    상기 정규화된 확장 X(60A)가 0이 아니면 가수 초과(741)를 표명하는 것;
    최소 지수 E(241)를 갖는 상기 피연산자의 정렬된 가수 T와 최대 지수 E(53E)를 갖는 피연산자의 가수 T 간의 합 또는 차(251)의 선행 제로들을 카운트함으로써 선행 제로들의 수(711)를 결정하는 것; 및
    상기 선행 제로들의 수(711)를 상기 지배적 경계 손실 비트들 D(54C)에 가산하는 것;을 포함하는, 비-일시적 기계-판독가능한 저장매체.
KR1020187014380A 2015-10-24 2016-10-24 부동 소수점 연산 동안의 오류시 경계 계산 및 유지를 위한 장치 및 그 방법 KR102628164B1 (ko)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US201562246021P 2015-10-24 2015-10-24
US62/246,021 2015-10-24
US201662277137P 2016-01-11 2016-01-11
US62/277,137 2016-01-11
US201662375422P 2016-08-15 2016-08-15
US62/375,422 2016-08-15
US15/331,901 US9817662B2 (en) 2015-10-24 2016-10-23 Apparatus for calculating and retaining a bound on error during floating point operations and methods thereof
US15/331,901 2016-10-23
PCT/US2016/058551 WO2017070710A1 (en) 2015-10-24 2016-10-24 Apparatus for calculating and retaining a bound on error during floating point operations and methods thereof

Publications (2)

Publication Number Publication Date
KR20180084057A true KR20180084057A (ko) 2018-07-24
KR102628164B1 KR102628164B1 (ko) 2024-01-24

Family

ID=58558203

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187014380A KR102628164B1 (ko) 2015-10-24 2016-10-24 부동 소수점 연산 동안의 오류시 경계 계산 및 유지를 위한 장치 및 그 방법

Country Status (5)

Country Link
US (1) US9817662B2 (ko)
EP (1) EP3365771B1 (ko)
KR (1) KR102628164B1 (ko)
CN (1) CN108139912B (ko)
WO (1) WO2017070710A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170177336A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Hardware cancellation monitor for floating point operations
CN109814834B (zh) * 2019-01-14 2021-04-20 中国人民解放军国防科技大学 一种基于条件数指导的浮点程序精度缺陷检测方法
FR3093571B1 (fr) 2019-03-08 2021-03-19 Commissariat Energie Atomique Procédé et dispositif de représentation en virgule flottante avec précision variable
CN114860190B (zh) * 2022-04-28 2023-03-24 中国人民解放军战略支援部队信息工程大学 一种针对高性能计算函数库中浮点算术表达式在指定区间内误差较大子区间划分方法及系统
CN117170622B (zh) * 2023-11-03 2024-03-01 深圳鲲云信息科技有限公司 累加器及用于累加器的方法和芯片电路及计算设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140074902A1 (en) * 2012-09-07 2014-03-13 Intel Corporation Number representation and memory system for arithmetic
US20140095563A1 (en) * 2007-04-26 2014-04-03 International Business Machines Corporation Shift Significand of Decimal Floating Point Data
US20140188968A1 (en) * 2012-12-28 2014-07-03 Himanshu Kaul Variable precision floating point multiply-add circuit
US20150286482A1 (en) * 2014-03-26 2015-10-08 Intel Corporation Three source operand floating point addition processors, methods, systems, and instructions

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3037701A (en) 1956-11-21 1962-06-05 Ibm Floating decimal point arithmetic control means for calculator
US3701976A (en) 1970-07-13 1972-10-31 Bell Telephone Labor Inc Floating point arithmetic unit for a parallel processing computer
FR2448188A1 (fr) 1979-02-02 1980-08-29 Anvar Procede et ensemble de calcul, aleatoirement par exces ou par defaut, pour fournir des resultats de calcul avec le nombre de chiffres significatifs exacts
US4597044A (en) * 1982-10-14 1986-06-24 Honeywell Information Systems, Inc. Apparatus and method for providing a composite descriptor in a data processing system
US4926370A (en) 1989-04-17 1990-05-15 International Business Machines Corporation Method and apparatus for processing postnormalization and rounding in parallel
US5631859A (en) * 1994-10-27 1997-05-20 Hewlett-Packard Company Floating point arithmetic unit having logic for quad precision arithmetic
US6108772A (en) * 1996-06-28 2000-08-22 Intel Corporation Method and apparatus for supporting multiple floating point processing models
US5844830A (en) 1996-08-07 1998-12-01 Sun Microsystems, Inc. Executing computer instrucrions by circuits having different latencies
JPH1055352A (ja) * 1996-08-08 1998-02-24 Fuji Xerox Co Ltd 浮動小数点数累積加算装置
US5954790A (en) 1996-10-17 1999-09-21 Samsung Electronics Company, Ltd. Method and apparatus for parallel prediction and computation of massive cancellation in floating point subtraction
US6049865A (en) * 1997-12-18 2000-04-11 Motorola, Inc. Method and apparatus for implementing floating point projection instructions
US6175847B1 (en) 1998-07-22 2001-01-16 Intrinsity, Inc. Shifting for parallel normalization and rounding technique for floating point arithmetic operations
ATE557343T1 (de) * 1998-08-24 2012-05-15 Microunity Systems Eng Prozessor und verfahren zur durchführung eines breitschaltungsbefehls mit breitem operand
JP4329332B2 (ja) 2002-01-15 2009-09-09 株式会社デンソー 電子制御装置及び制御プログラム
US7188133B2 (en) * 2002-06-20 2007-03-06 Matsushita Electric Industrial Co., Ltd. Floating point number storage method and floating point arithmetic device
US7774393B1 (en) 2004-06-30 2010-08-10 Oracle America, Inc. Apparatus and method for integer to floating-point format conversion
US7698353B2 (en) 2005-09-14 2010-04-13 Freescale Semiconductor, Inc. Floating point normalization and denormalization
US8005885B1 (en) * 2005-10-14 2011-08-23 Nvidia Corporation Encoded rounding control to emulate directed rounding during arithmetic operations
US20070260665A1 (en) * 2006-04-20 2007-11-08 Chengpu Wang Method of Specifying and Tracking Precision in Floating-point Calculation
US7865882B2 (en) * 2006-08-18 2011-01-04 International Business Machines Corporation Fast correctly rounding floating point conversion and identifying exceptional conversion
US8539451B2 (en) * 2009-05-12 2013-09-17 Nec Laboratories America, Inc. Systems and methods for model checking the precision of programs employing floating-point operations
US8370226B1 (en) 2010-04-19 2013-02-05 Intuit Inc. Technique for correcting round-off errors
US8397187B2 (en) * 2010-04-23 2013-03-12 International Business Machines Corporation Verifying the error bound of numerical computation implemented in computer systems
US8751555B2 (en) * 2010-07-06 2014-06-10 Silminds, Llc, Egypt Rounding unit for decimal floating-point division
US8965945B2 (en) 2011-02-17 2015-02-24 Arm Limited Apparatus and method for performing floating point addition
US10289412B2 (en) * 2012-02-09 2019-05-14 Qualcomm Incorporated Floating point constant generation instruction
US9335996B2 (en) 2012-11-14 2016-05-10 Intel Corporation Recycling error bits in floating point units
US9104515B2 (en) 2012-12-14 2015-08-11 Fujitsu Limited Floating-point error detection and correction
US9317251B2 (en) * 2012-12-31 2016-04-19 Nvidia Corporation Efficient correction of normalizer shift amount errors in fused multiply add operations

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140095563A1 (en) * 2007-04-26 2014-04-03 International Business Machines Corporation Shift Significand of Decimal Floating Point Data
US20140074902A1 (en) * 2012-09-07 2014-03-13 Intel Corporation Number representation and memory system for arithmetic
US20140188968A1 (en) * 2012-12-28 2014-07-03 Himanshu Kaul Variable precision floating point multiply-add circuit
US20150286482A1 (en) * 2014-03-26 2015-10-08 Intel Corporation Three source operand floating point addition processors, methods, systems, and instructions

Also Published As

Publication number Publication date
CN108139912B (zh) 2022-08-30
KR102628164B1 (ko) 2024-01-24
CN108139912A (zh) 2018-06-08
EP3365771B1 (en) 2020-12-09
US20170115986A1 (en) 2017-04-27
WO2017070710A1 (en) 2017-04-27
EP3365771A4 (en) 2019-06-12
EP3365771A1 (en) 2018-08-29
US9817662B2 (en) 2017-11-14

Similar Documents

Publication Publication Date Title
US10423388B2 (en) Round for reround mode in a decimal floating point instruction
KR102628164B1 (ko) 부동 소수점 연산 동안의 오류시 경계 계산 및 유지를 위한 장치 및 그 방법
US11347511B2 (en) Floating-point scaling operation
KR101427637B1 (ko) 벡터 정수 곱셈 덧셈 명령을 위한 함수 유닛
US5995991A (en) Floating point architecture with tagged operands
US9170773B2 (en) Mixed precision estimate instruction computing narrow precision result for wide precision inputs
KR20190090817A (ko) 부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법
WO2002023326A1 (en) Handler for floating-point denormalized numbers
KR20090014292A (ko) 비정규 피연산자를 위한 모드―기반 곱셈-가산 프로세서
US7395297B2 (en) Floating point system that represents status flag information within a floating point operand
JP6415236B2 (ja) 浮動小数点加算ユニットを含む装置及びシステム、並びに浮動小数点加算方法
US5943249A (en) Method and apparatus to perform pipelined denormalization of floating-point results
CN108694037B (zh) 用于在执行浮点减法时估计移位量的装置和方法
US20090164544A1 (en) Dynamic range enhancement for arithmetic calculations in real-time control systems using fixed point hardware
Tsen et al. A combined decimal and binary floating-point multiplier
US11797300B1 (en) Apparatus for calculating and retaining a bound on error during floating-point operations and methods thereof
US10540143B2 (en) Apparatus for calculating and retaining a bound on error during floating point operations and methods thereof
US9990203B2 (en) Hardware accuracy counters for application precision and quality feedback
US20090265529A1 (en) Processor apparatus and method of processing multiple data by single instructions
WO2020161470A1 (en) Anchored data element conversion
US8185723B2 (en) Method and apparatus to extract integer and fractional components from floating-point data
Trivedi et al. A Review on Single Precision Floating Point Arithmetic Unit of 32 bit Number
CN115981660A (zh) 代码性能的分析方法、处理设备和存储介质
Muller et al. Algorithms for the Basic Operations
JP3522387B2 (ja) パイプライン演算装置

Legal Events

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