KR20190090817A - 부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법 - Google Patents

부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법 Download PDF

Info

Publication number
KR20190090817A
KR20190090817A KR1020197017885A KR20197017885A KR20190090817A KR 20190090817 A KR20190090817 A KR 20190090817A KR 1020197017885 A KR1020197017885 A KR 1020197017885A KR 20197017885 A KR20197017885 A KR 20197017885A KR 20190090817 A KR20190090817 A KR 20190090817A
Authority
KR
South Korea
Prior art keywords
point
bit
point operand
floating
accumulate
Prior art date
Application number
KR1020197017885A
Other languages
English (en)
Other versions
KR102447636B1 (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 KR20190090817A publication Critical patent/KR20190090817A/ko
Application granted granted Critical
Publication of KR102447636B1 publication Critical patent/KR102447636B1/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/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/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49915Mantissa overflow or underflow in handling floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask

Abstract

부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법이 제공된다. 이 장치는 산술 연산을 수행하는 실행 회로와, 실행 회로에 의해 수행되는 산술 연산을 제어하는 제어 신호들을 생성하기 위해 명령들의 시퀀스를 디코딩하는 디코더 회로를 구비한다. 변환 및 누산 명령이 제공되고, 디코더 회로는 명령들의 시퀀스 내의 그러한 변환 및 누산 명령의 디코딩에 응답하여 실행 회로를 제어하기 위한 하나 이상의 제어 신호들을 생성한다. 특히, 실행 회로는 이러한 제어 신호들에 응답하여 변환 및 누산 명령에 의해 식별된 적어도 하나의 부동 소수점 피연산자를 M개의 소수 비트를 갖는 대응하는 N비트 고정 소수점 피연산자로 변환하고, 여기서 M은 N보다 작고 M은 부동 소수점 피연산자의 형식에 의존한다. 또한, 실행 회로는 P비트 고정 소수점 결과 값을 생성하기 위해 각 대응하는 N비트 고정 소수점 피연산자와 변환 및 누산 명령에 의해 식별된 P비트 고정 소수점 피연산자를 누산하고, 여기서 P는 N보다 크고 또한 M개의 소수 비트를 갖는다. 이것은 연관성 있는 방식으로 부동 소수점 수를 누산하는 빠르고 효율적인 메커니즘을 제공하므로, 부동 소수점 숫자가 누산되는 순서와 관계없이 재현 가능하고 올바른 결과가 생성될 수 있게 한다.

Description

부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법
본 기술은 부동 소수점 수의 누산(accumulation)을 수행하는 장치 및 방법에 관한 것이다.
데이터 처리 시스템에서 부동 소수점(FP;floating-point) 표현을 사용하는 것이 일반적이다. 부동 소수점 수는 가수(significand)와 가수의 비트의 의미(significance)를 나타내는 지수를 포함한다. 이것은 넓은 범위에 걸친 숫자 값가 한정된 수의 비트를 사용하여 표현되도록 허용한다. 그러나, 부동 소수점 산술(floating-point arithmetic)이 가지고 있는 문제점은 계산들이 일반적으로 관련이 없다(non-associative)라는 것이다. 예를 들어, 여러 부동 소수점 값을 누산할 때, 이전 값의 덧셈/뺄셈의 결과에 또 다른 값을 더하거나 그것으로부터 뺄 때마다, 그 결과는 반올림되고 정규화되는데, 이것은, 값들이 누산되는 순서에 따라 전체 결과가 상이하다는 것을 의미한다. 따라서, 정확히 같은 순서로 완료하지 않으면 합계(sums)를 재생할 수 없다. 재생할 수 있는 결과를 생성하기 위해서는, 일반적으로 일련의 덧셈 또는 뺄셈을 순차적으로 수행해야 하며, 이로 인해 부동 소수점 산술이 상대적으로 느려질 수 있다.
부동 소수점 수의 누산을 효율적으로 처리하기 위한 개선된 기술을 제공하는 것이 바람직할 것이다.
하나의 예시적인 구성에 있어서, 산술 연산을 수행하는 실행 회로와, 상기 실행 회로에 의해 수행되는 산술 연산을 제어하기 위한 제어 신호들을 생성하기 위해 명령들의 시퀀스를 디코딩하는 디코더 회로를 구비하는 장치가 제공되고, 상기 디코더 회로는 상기 시퀀스 내의 변환 및 누산 명령의 디코딩에 응답하여 변환 및 누산 명령에 의해 식별된 적어도 하나의 부동 소수점 피연산자를 M개의 소수 비트를 갖는 대응하는 N비트 고정 소수점 피연산자로 변환하고(여기서, M은 N보다 작고 M은 부동 소수점 피연산자의 형식에 의존한다), 각 대응하는 N비트 고정 소수점 피연산자와 변환 및 누산 명령에 의해 식별되는 P비트 고정 소수점 피연산자를 누산하여 P비트 고정 소수점 결과 값을 생성하는(여기서 P는 N보다 크고 M개의 소수 비트를 갖는다) 상기 실행 회로를 제어하기 위한 하나 이상의 제어 신호들을 생성한다.
다른 예시적인 구성에 있어서는, 산술 연산을 수행하는 실행 회로와, 상기 실행 회로에 의해 수행되는 산술 연산을 제어하기 위한 제어 신호들을 생성하기 위해 명령들의 시퀀스를 디코딩하는 디코더 회로를 갖는 장치 내에서 부동 소수점 수의 누산을 수행하는 방법이 제공되고, 상기 방법은 상기 디코더 회로 내에서 하나 이상의 제어 신호들을 생성하기 위해 상기 시퀀스 내의 변환 및 누산 명령을 디코딩하는 단계와, 상기 하나 이상의 제어 신호들에 응답하여 변환 및 누산 명령에 의해 식별된 적어도 하나의 부동 소수점 피연산자를 M개의 소수 비트를 갖는 대응하는 N비트 고정 소수점 피연산자로 변환하고(여기서 M은 N보다 작고, M은 부동 소수점 피연산자의 형식에 의존하다), 각 대응하는 N비트 고정 소수점 피연산자와 변환 및 누산 명령에 의해 식별된 P비트 고정 소수점 피연산자를 누산하여 P비트 고정 소수점 결과 값을 생성하는(여기서 P는 N보다 크고 M개의 소수 비트를 갖는다) 상기 실행회로를 제어하는 단계를 포함한다.
또 다른 예시적인 구성에 있어서는, 산술 연산을 수행하기 위한 실행 수단과, 상기 실행 수단에 의해 수행되는 산술 연산을 제어하기 위한 제어 신호들을 생성하기 위해 명령들의 시퀀스를 디코딩하기 위한 디코더 수단을 구비하는 장치가 제공되고, 상기 디코더 수단은 상기 시퀀스 내의 변환 및 누산 명령을 디코딩하여 하나 이상의 제어 신호들을 생성하고, 상기 실행 수단은, 상기 하나 이상의 제어 신호들에 응답하여, 변환 및 누산 명령에 의해 식별된 적어도 하나의 부동 소수점 피연산자를 M개의 소수 비트를 갖는 대응하는 N비트 고정 소수점 피연산자로 변환하고(여기서 M은 N보다 작고 M은 부동 소수점 피연산자의 형식에 의존한다), 각 대응하는 N비트 고정 소수점 피연산자와 변환 및 누산 명령에 의해 식별된 P비트 고정 소수점 피연산자를 누산하여 P비트 고정 소수점 결과 값을 생성한다(여기서 P는 N보다 크고 M개의 소수 비트를 갖는다).
본 기술은 첨부된 도면에 도시된 실시 예를 참조하여 예로서만 기술될 것이다.
도 1은 일 실시 예에 따른 시스템의 블록도이다.
도 2a 및 도 2b는 일 실시 예에서 사용된 변환 및 누산 명령을 개략적으로 도시한 것이다.
도 3은 일 실시 예에 따른 16비트 부동 소수점(FP16) - 고정 소수점 변환 블록을 도시한 것이다.
도 4는 일 실시 예에 따른, 도 3의 FP16 - 고정 소수점 변환 블록이 실행 회로 내의 누산 회로에 어떻게 연결될 수 있는지를 도시한 것이다.
도 5는 단일 변환 및 누산 명령에 응답하여 다중 부동 소수점 값들이 누산 될 수 있게 하는 일 실시 예에서 누산 회로에 다중 FP16 - 고정 소수점 변환 블록이 어떻게 연결될 수 있는지를 나타내는 도면이다.
도 6은 최종 결과 값을 다시 부동 소수점 형식으로 변환하기 위해서 고정 소수점 - 부동 소수점 변환 명령과 함께, 변환 및 누산 명령의 하나 이상의 인스턴스(instances)를 사용하여 일 실시 예에 따라 수행된 부동 소수점 누산 연산을 나타내는 흐름도이다.
도 7은 일 실시 예에 따른 SIMD 구현을 도시한다.
첨부된 도면을 참조하여 실시 예를 설명하기 전에, 다음의 실시 예에 대한 설명이 제공된다.
일 실시 예에서, 산술 연산을 수행하기 위한 실행 회로, 및 실행 회로에 의해 수행되는 산술 연산을 제어하기 위한 제어 신호들을 생성하기 위해 명령의 시퀀스를 디코딩하는 디코더 회로를 구비하는 장치가 제공되어, 장치로 하여금 명령들의 시퀀스에 필요한 연산들을 수행하게 한다. 일 실시 예에 따르면, 명령 시퀀스 내의 디코더 회로가 마주칠 때, 디코더 회로가 실행 회로에 대한 하나 이상의 제어 신호를 생성하기 위해 변환 및 누산 명령을 디코딩하게 하는, 변환 및 누산 명령이 제공된다. 특히, 이들 또는 하나의 제어 신호는 실행 회로가 변환 및 누산 명령에 의해 식별된 적어도 하나의 부동 소수점 피연산자(operand)를 M개의 소수 비트(fraction bit)를 갖는 대응하는 N비트 고정 소수점 피연산자로 변환하게 한다. M은 N보다 작고, M은 부동 소수점 피연산자의 형식에 따라 다르다. 디코더 회로에 의해 생성된 하나 이상의 제어 신호는 부동 소수점 형식에서 고정 소수점 형식으로의 상기 변환을 발생시킬 뿐만 아니라, 실행 회로가 변환 처리 중에 생성된 각 N비트 고정 소수점 피연산자와 변환 및 누산 명령에 의해 식별된 P비트 고정 소수점 피연산자를 누산하게 하여, P비트 고정 소수점 결과 값을 생성한다. P는 N보다 크고 M개의 소수 비트를 갖는다.
이러한 각 변환 및 누산 명령은 하나 이상의 부동 소수점 피연산자를 지정할 수 있다. 각 부동 소수점 피연산자를 고정 소수점 형식으로 변환한 다음, 고정 소수점 형식으로 누산을 수행함으로써, 부동 소수점 연산보다 빠르게 누산을 수행할 수 있으며, 또한 누산은 결합적이다. 또한, N비트 고정 소수점 피연산자를 P비트 고정 소수점 피연산자로 누산함으로써(P는 N보다 크다), 대응하는 부동 소수 피연산자의 변환에 의해 생성된 다수의 N비트 고정 소수점 피연산자가 오버플로(overflow)의 위험 없이 P비트 고정 소수점 표현 내에 누산될 수 있다. 어떤 오버플로의 잠재적 위험(potential risk)도 없이 발생할 수 있는 누산의 수는 N과 P의 값에 의존할 것이다.
순전히 예로써, 입력 부동 소수점 피연산자가 16비트 부동 소수점 피연산자(여기서는 FP16 피연산자라고도 함)인 경우, 어떤 FP16 값이든 41비트의 고정 소수점 표현으로 나타낼 수 있고(즉, N은 41), 예를 들어 P가 64인 경우, 어떤 오버플로(overflow)의 위험도 없이 64비트 표현 내에 그러한 41비트 고정 소수점 값의 223을 누산할 수 있다. 앞에서 언급했듯이, 소수 비트의 수 M은 사용된 고정 소수점 형식에 의존한다. FP16 값이 사용되는 상황을 다시 예로써 생각해 보면, 가능한 가장 작은 FP16 값은 2-24이므로, 41비트 고정 소수점 표현 내에서 최하위 24비트가 소수 비트로서 사용될 수 있다.
상술한 방식으로 부동 소수점 값을 변환 및 누산하도록 단일 명령을 제공함으로써, 이것은 연관성 있는 방식으로 부동 소수점 값을 누산하기 위한 특히 효율적인 메커니즘을 제공하므로, 부동 소수점 수가 누산되는 순서에 상관없이 재현 가능하고 정확한 결과가 생성되게 한다. 결과적으로, 이것에 의해 부동 소수점 누산 프로세스의 병렬 처리가 지원되므로, 부동 소수점 누산 기술을 사용할 때보다 상당한 속도 향상을 달성할 수 있다.
부동 소수점 피연산자는 기본적으로 어떤 부동 소수점 형식으로든 제공될 수 있지만, 이 기술은 부동 소수점 피연산자가 16비트 부동 소수점 피연산자인 경우 특히 유용한다는 것을 알았다. 특히, 고정 소수점 형식으로 그러한 부동 소수점 피연산자를 나타내기 위해 필요한 비트의 수는 비교적 작으며, 최신 데이터 처리 시스템의 표준 레지스터 크기보다 상당히 작다. 예를 들어, 64비트 레지스터를 사용하여 64비트 피연산자를 처리하는 것이 일반적이다. FP16 값은 41비트 고정 소수점 표현으로 변환될 수 있기 때문에, 이러한 부동 소수점 값은 64비트 와이드 실행 파이프라인(wide executionj pipeline) 내에 누산될 수 있다.
일 실시 예에서, 장치는 상기 산술 연산을 수행할 때 실행 회로에 액세스 가능한 레지스터들의 세트를 더 구비한다. 변환 및 누산 명령은 상기 레지스터들의 세트 내의 적어도 하나의 제1 소스 레지스터를 식별하는 제1 레지스터 식별자 필드를 가질 수 있고, 상기 적어도 하나의 제1 소스 레지스터는 상기 적어도 하나의 부동 소수점 피연산자를 포함하고, 상기 레지스터들의 세트 내의 제2 소스 레지스터를 식별하는 제2 레지스터 식별자 필드를 가질 수 있으며, 상기 제2 소스 레지스터는 상기 P비트 고정 소수점 피연산자를 포함한다. 하나보다 많은 제1 소스 레지스터가 고정 소수점 표현으로 변환된 후 제2 소스 레지스터에 고정 소수점 피연산자와 함께 누산될 필요가 있는 부동 소수점 피연산자를 식별하는 데 사용될 수 있지만, 많은 인스턴스에서는 단일 제1 소스 레지스터 소스 레지스터는 명령 실행 중에 처리될 부동 소수점 피연산자를 식별하기에 충분할 것이다. 예를 들어, 64비트 레지스터를 가정하면, 4개의 FP16 부동 소수점 피연산자가 단일 64비트 레지스터 내에서 지정될 수 있으므로, 단일 명령어를 사용하여 4개의 FP16 값을 변환하고 결과의 고정 소수점 표현을 제2 소스 레지스터의 내용과 함께 누산한다.
변환 및 누산 명령의 실행에 의해 생성된 P비트 고정 소수점 결과 값은 어떤 원하는 레지스터 내에든 저장될 수 있지만, 일 실시 예에서 제2 소스 레지스터는 또한 고정 소수점 결과 값에 대한 목적지 레지스터로서 사용되며, 따라서 변환 및 누산 명령의 실행시, 입력 P비트 고정 소수점 피연산자가 명령 실행에 의해 생성된 결과 값으로 덮어 쓰여질 것이다.
일 실시 예에서, 장치는 SIMD(single instruction multiple data) 장치의 형태를 취할 수 있다. 따라서, 실행 회로는 병렬 처리의 복수의 레인을 제공하는 SIMD 회로의 형태를 취할 수 있으며, 여기서 각 레인은 P비트의 폭을 갖는다. 이러한 실시 예에서, 변환 및 누산 명령은 복수의 레인의 다수의 각각에 대해, 대응하는 N비트 고정 소수점 피연산자로 변환될 적어도 하나의 부동 소수점 피연산자와, 대응하는 N비트 고정 소수점 피연산자의 각각이 누산될 P비트 고정 소수점 피연산자를 식별하는 SIMD 명령의 형태를 취할 수 있다.
따라서 이러한 접근법은 부동 소수점 피연산자의 누산의 상당한 병렬화를 허용함으로써 성능을 더 향상시킬 수 있을 가능성을 제공한다. SIMD 실행 회로가 L 레인의 병렬 처리를 제공하는 실시 예에서, 변환 및 누산 명령에 의해 지정된 제1 및 제2 소스 레지스터는 Lx64비트 레지스터일 수 있고, 변환 및 누산 명령은 L 레인의 각각에 대하여, 최대 4개의 16비트 부동 소수점 수를, 포함하는 제1 소스 레지스터를 식별한다. 그 다음, 실행 회로는 변환 및 누산 명령의 디코딩에 응답하여 디코더 회로에 의해 생성된 하나 이상의 제어 신호에 응답하여, 다중 레인의 각각 내에서, 최대 4개의 16비트 부동 소수점 수의 각각을 대응하는 고정 소수점 피연산자로의 변환과, 제2 소스 레지스터 내에 포함된 64비트 고정 소수점 피연산자 및 각각의 대응하는 고정 소수점 피연산자의 누산을 수행함으로써, 각 레인으로부터의 결과 값을 포함하는 Lx64비트 결과 내에 포함하기 위한 16비트 결과 값을 생성한다. 따라서, 이러한 접근 방식에 의해, Lx64비트 결과 내에서 여러 결과 값을 캡처한 다음 실행 회로에 액세스할 수 있는 레지스터들 중 하나에 기록할 수 있다.
다수의 부동 소수점 피연산자의 누산을 수행하기 위해 이러한 변환 및 누산 명령의 다수의 인스턴스(instances)가 실행될 수 있으며, 결과는 고정 소수점 표현으로 표현된다. 일단 최종 결과가 취득되면, 일 실시 예에서, 결과의 결과로서 생긴 고정 소수점 표현은 원하는 부동 소수점 형식의 부동 소수점 수로 다시 변환될 수 있다. 예를 들어, 일 실시 예에서, 명령들의 시퀀스는 디코더 회로에 의해 디코딩될 때, 실행 회로가 변환 및 누산 명령의 하나 이상의 인스턴스의 실행에 의해 취득한 고정 소수점 결과 값을, 고정 소수점 - 부동 소수점 변환 명령에 의해 지정된 부동 소수점 형식을 갖는 부동 소수점 결과 값으로 변환시키는 고정 소수점 - 부동 소수점 변환 명령을 더 포함한다. 결과가 변환되는 부동 소수점 형식은 누산되었던 원래의 입력 부동 소수점 피연산자와 동일한 부동 소수점 형식일 필요는 없다는 점에 유념해야 한다. 예를 들어, 충분한 수의 16비트 부동 소수점 피연산자가, 결과 값이 반올림 연산(rounding operation)을 수행하지 않고, FP16 형식 내에 더 이상 적합하지 않을 것이라는 상술한 기술을 이용하여 누산될 수 있다. 그러나, 예를 들어 FP32(32비트 부동 소수점) 형식에 쉽게 적합할 수 있으며, 따라서 고정 소수점 - 부동 소수점 변환 명령은 고정 소수점 결과 값을 FP32 값으로 변환할 수 있다.
일 실시 예에서, 입력 부동 소수점 피연산자는 표준 부동 소수점 표현이다. 그러나, 대안적인 실시 예에서, 변환 및 누산 명령에 의해 식별되는 적어도 하나의 부동 소수점 피연산자는 복수의 부동 소수점 값들의 반올림되지 않은 곱(unrounded product)을 포함할 수 있다. 이것은 입력 부동 소수점 표현이 표준 부동 소수점 표현보다 더 많은 비트를 가짐을 의미한다. 그럼에도 불구하고, 실행 회로는 부동 소수점 표현을 적합한 크기의 고정 소수점 표현으로 변환한 다음, 그러한 변환된 값들의 여러 인스턴스를 더 넓은 고정 소수점 표현 내에 누산할 수 있다. 대안적으로, 변환 프로세스에 의해 생성된 고정 소수점 표현은 고정 소수점 누산 값을 나타내는 데 사용되는 비트 수의 증가를 피하기 위해 누산 전에 절삭(truncated)될 수 있다.
실행 회로는 다양한 형태를 취할 수 있다. 그러나, 일 실시 예에서, 실행 회로는, 하나 이상의 변환 블록을 제공하는 변환 회로를 구비하며, 각각의 변환 블록은 변환 및 누산 명령에 의해 식별된 입력 부동 소수점 피연산자를 수신하고 대응하는 N비트 고정 소수점 피연산자를 생성하도록 구성되며; 상기 P비트 고정 소수점 결과 값을 생성하기 위해 각각의 대응하는 N비트 고정 소수점 피연산자 및 상기 P비트 고정 소수점 피연산자를 누산하기 위한 누산 연산을 수행하는 누산 회로를 더 구비한다.
각 변환 블록은 다양한 형태를 취할 수 있지만, 일 실시 예에서, 입력 부동 소수점 피연산자의 소수 비트(fracgtion bits) 및 입력 부동 소수점 피연산자의 지수 비트의 논리 조합으로부터 가수 값(significand value)을 생성하는 가수 생성 회로; 정규 부동 소수점 값인 입력 부동 소수점 값에 응답하여, 상기 지수 비트로 표시되는 지수 값으로부터 결정된 시프트량만큼 가수 값에 대하여 왼쪽 시프트 연산을 수행하는 시프트 회로를 구비한다. 출력 값은 원하는 경우 누산 전에 P비트 형식으로 확장될 수 있다.
변환 및 누산 명령에 응답하여 수행되는 누산은 결과로서의 변환된 고정 소수점 값을, 변환 및 누산 명령에 의해 지정된 P비트 고정 소수점 피연산자에 가산하는 것을 포함할 수 있지만, 다른 실시 예에서는 가산 또는 감산을 수반한다. 누산 회로 내의 가산 회로를 사용하여 감산을 계산할 수 있게 하기 위해서, 일 실시 예에서, 각각의 상기 변환 블록은 부동 소수점 피연산자의 부호 비트가 입력 부동 소수점 피연산자가 음수라는 것을 나타낼 때 출력 값에 대해 1의 보수 연산(ones complement operation)을 수행하는 1의 보수 회로를 더 구비한다. 그러한 실시 예에서, 부동 소수점 피연산자의 부호 비트는 누산 회로에 대한 캐리 인 비트(carry-in bit)로서 사용될 수 있다. 따라서, 부동 소수점 피연산자가 양수인 경우, 0의 캐리 인 값이 누산 회로에 제공될 것이고, 부동 소수점 피연산자가 음수 값이면, 1의 캐리 인 비트가 누산 회로에 제공될 것이이다.
누산 회로는 다양한 방식으로 구성될 수 있지만, 일 실시 예에서, 상기 P비트 고정 소수점 결과 값을 생성하기 위해 각각의 대응하는 N비트 고정 소수점 피연산자 및 상기 P비트 고정 소수점 피연산자의 2의 보수 덧셈을 수행하도록 구성된다.
앞서 언급한 바와 같이, 많은 실시 예에서, 오버플로의 위험 없이 P비트 고정 소수점 표현 내에 다수의 변환된 부동 소수점 피연산자를 누산하는 것이 가능할 것이다. 그러나, 오버플로가 잠재적으로 발생할 수 있는 상황을 수용하기 위해, 누산 회로는 일 실시 예에서 누산 회로의 최상위 비트 위치로의 캐리 인이 그 최상위 비트 위치로부터의 캐리 아웃(carry-out)과 동일하지 않을 때 오버플로 조건을 검출하는 오버플로 검출 회로를 포함할 수 있다. 오버플로가 감출되면 여러 스텝을 취할 수 있다. 예를 들어, 일 실시 예에서, 오버플로 예외는 장치에 의해 시그널링될 수 있다.
지금부터 특정 실시 예가 도면을 참조하여 설명될 것이다.
부동 소수점(FP)은 소수의 비트를 사용하여 실수(real numbers)를 근사하는 유용한 방법이다. IEEE 754-2008 FP 표준은 FP 번호에 대해 여러 가지 상이한 형식을 제안하고, 그 일부는 이진수 64(배정밀도(double precision) 또는 DP라고도 알려짐), 이진수 32(단정밀도(single precision) 또는 SP라고도 알려짐), 및 이진수 16(하프 정밀도 또는 HP라고도 알려짐)이다. 수 64, 32 및 16은 각 형식에 필요한 비트 수를 나타낸다.
표현
FP 수는 과학 수업에서 가르치는 "과학적 표기법(scientific notation)"과 매우 유사하며, 여기서 음수 2백만 대신에 -2.0 × 106을 쓴다. 이 수의 부분들은 부호(이 경우 음수), 가수(2.0), 지수의 밑수(10), 및 지수(6)이다. 차이점이 있지만, 이 모든 부분은 FP 수의 아날로그를 가지고 있으며, 그것의 가장 중요한 것은 구성 부분들이 이진수로 저장되고 지수의 밑수가 항상 2라는 것이다.
보다 정확하게는, FP 수는 모두 부호 비트, 몇몇 바이어스된 지수 비트 수, 및 몇몇 소수 비트 수로 구성된다. 특히, 우리가 관심을 갖는 형식은 다음과 같은 비트로 구성된다.
Figure pct00001
부호는 음수의 경우 1, 양수인 경우 0이다. 0을 포함한 모든 숫자에는 부호가 있다.
지수는 바이어스되어 있어 있는데, 이는, 참 지수(true exponhent)가 숫자로 저장된 것과는 다르다는 것을 의미한다. 예를 들어, 바이어스된 SP 지수는 8비트 길이이며 0에서 255까지의 범위이다. 지수 0과 255는 특수한 경우이지만, 모든 다른 지수는 바이어스 127을 가지므로, 참 지수가 바이어스된 지수보다 적은 127이라는 것을 의미한다. 가장 작은 바이어스된 지수는 1이며, 이은 -126의 참 지수에 해당한다. 최대 바이어스된 지수는 254이며, 이는 127의 참 지수에 해당한다. HP 지수와 DP 지수는 위의 표에 나타낸 바이어스와 동일한 방식으로 작동한다.
SP 지수 255(또는 DP 지수 2047 또는 HP 지수 31)은 무한대 및 NaN(숫자가 아님)이라고 하는 특수 기호용으로 예약되어 있다. 무한대(양수 또는 음수일 수 있음))는 0 소수를 갖는다. 지수 255를 갖는 임의의 수와 0이 아닌 소수는 NaN이다. 무한대(Infinity)는 포화 값(saturation value)을 제공하므로, 이것은 실제로 "이 계산으로 이 형식으로 표현할 수 있는 것보다 큰 숫자가 생성되었다." 와 같은 의미이다. NaN은 실수(real numbers)에 대해 수학적으로 정의되지 않은 연산, 예를 들여 0으로 나누기 또는 음수의 제곱근 가져 오기를 위해 반환된다.
모든 형식에 있어서, 지수 0은 비정규 수(subnormal number)와 0에 대해서 예약되어 있다. 정규 수는 값을 나타낸다.
- 1sign × 1.fraction × 2e
여기서 e는 바이어스된 지수로부터 계산된 참 지수(true exponent)이다. 1.fraction이라는 용어는 가수(significand)라고 불리며, 1은 FP 수의 일부로 저장되지 않지만, 대신 지수로부터 추론된다. 0과 최대 지수를 제외한 모든 지수는 1.fraction 형태의 가수를 나타낸다. 지수 0(exponent zero)은 0.fraction 형태의 가수와, 주어진 형식에 대한 1-bias와 같은 참 지수를 나타낸다. 그러한 숫자를 비정규(subnormal)라고 부른다(역사적으로 이들 숫자는 비정상(denormal)이라고 지칭되었지만 현대의 사용법은 비정규(subnoraml)라는 용어를 선호한다).
지수와 소수(fraction) 모두가 0과 같은 수들은 0이다.
다음 표는 HP 형식의 몇 가지 예시적인 수를 갖는다. 엔트리는 이진수로 되어 있으며, 판독 가능성을 높이기 위해 '_' 문자가 추가되었다. "비정규 엔트리(0 지수를 가진 테이블의 4번째 라인)는 앞의 라인에 있는 정규 엔트리와 상이한 가수를 생성한다.
Figure pct00002
Figure pct00003
FP 구현의 복잡성의 상당 부분은 비정규(subnormals)에 의한 것이므로, 종종 마이크로코드(microcode) 또는 소프트웨어로 처리된다. 일부 프로세서는 하드웨어적으로 비정규를 처리하므로, 소프트웨어나 마이크로코드 구현에 비해 이러한 연산을 10 ~ 100배 가속화한다.
정수, 고정 소수점, 부동 소수점
부호를 처리하는 FP 방식은 부호 크기(sign-magnitude)라고 불리우며, 정수가 컴퓨터에 저장되는 일반적인 방법과는 다르다(2의 보수). 부호 크기 표시에서, 동일한 숫자의 양수와 음수 버전은 부호 비트에서만 다르다. 부호 비트와 3개의 가수 비트로 구성된 4비트 부호 크기 정수는 음수 및 양수 1을 다음과 같이 나타낸다.
+1 = 0001
-1 = 1001
2의 보수 표현에서, N비트 정수 i는 2진 n + 1비트 값 2n + i의 하위 N비트로 표현되므로, 4비트 2의 보수는 양수 및 음수 1을 다음과 같이 나타낸다.
+1 = 0001
-1 = 1111
2의 보수 형식은 컴퓨터 산술을 단순화하기 때문에 부호가 있는 정수에 대해서는 거의 보편적이다.
고정 소수점 수는 정확히 정수처럼 보이지만, 실제로 특정한 소수 비트 수를 갖는 값을 나타낸다. 센서 데이터는 종종 고정 소수점 형식으로 되어 있으며 FP가 널리 채택되기 전에 기록되었던 많은 고정 소수점 소프트웨어가 있다. 고정 소수점 수는 프로그래머가 숫자의 정수 부분과 소수 부분 사이의 구분 기호인 "2진 소수점"을 추적해야 하기 때문에 작업하기가 매우 지루하고, 또한 비트를 유지하기 위해 숫자를 계속 올바른 장소로 시프트해야 한다. FP 수에는 이러한 어려움이 없으므로, 고정 소수점 수와 FP 수 사이에서 변환할 수 있는 것이 바람직하다. 전환을 할 수 있다는 것은 또한 고정 소수점 소프트웨어 및 데이터를 계속 사용할 수 있음을 의미하지만, 새로운 소프트웨어를 작성할 때 고정 소수점으로 제한되지는 않는다.
FP 수는 실수(real numbers)가 아니다
FP 수를 실수와 같다고 생각하는 것이 유혹적이지만, 그들은 가장 기본적인 속성일지라도 근본적으로 상이하다.
1. 그들은 연관성이 없다. 예를 들어, SP에서 3개의 숫자를 더하고 100만 또는 0을 반환할 수 있으며, 아마도 사람들이 반올림 오류(rounding error)라고 생각하는 것은 아니다.
Figure pct00004
2. 그들은 분배법에 복종하지 않는다. 다시 SP에서:
3,000,001 *(4.00001 + 5.00001) = Ox4bcdfe83
(3,000,001 * 4.00001) + (3,000,001 * 5.00001) = Ox4bcdfe82
오버플로가 있을 때 상황이 더욱 악화된다.
Figure pct00005
3. IEEE NaN 규칙으로 인해, 곱셈 또는 덧셈의 ID(multiplicative or additive identities)는 없다. 1과 0은 숫자 값에 대한 ID로 작동한다.
FP 수를 생각할 때 유용한 방법 중 하나는 최대 몇 개(HP의 경우 11)의 연속 비트가 0이 아닐 수 있는 매우 긴 고정 소수점 수라고 간주하는 것이다. 예를 들어, 무한대가 아닌 HP 수는 어떤 30개의 장소에서든 가수의 첫 번째 비트를 가질 수 있으며, 첫 번째 비트 다음에 10개의 다른 소수 비트가 오며, 부호 비트가 있으므로, 어떤 유한 HP 수든 30 + 10 + 1 = 41비트 고정 소수점 수로서 표현될 수 있다.
이하 설명되는 실시 예들에 따르면, 변환 및 누산 명령이 장치에 의해 실행될 때, 변환 및 누산 명령에 의해 식별된 하나 이상의 부동 소수점 피연산자의 각각이 M개의 소수 비트를 갖는 대응하는 N비트 고정 소수점 피연산자로 변환되게 하는 변환 및 누산 명령이 제공되며, 여기서 M은 N보다 작고 M은 부동 소수점 피연산자의 형식에 의존한다. 명령의 실행은 추가로 결과의 고정 소수점 피연산자의 각각이, P비트 고정 소수점 결과 값을 생성하기 위해, 변환 및 누산 명령에 의해 식별되는 P비트 고정 소수점 피연산자로 누산되게 하고, 여기서 P는 N보다 더 크고, M개의 소수 비트를 갖는다. 후술하는 실시 예로부터 명백한 바와 같이, 이것은 연관성 있는 방식으로 부동 소수점 수를 누산하기 위한 특히 빠르고 효율적인 메카니즘을 제공하므로, 부동 소수점 수가 누산되는 순서에 관계없이 재현 가능하고 정확한 결과를 생성할 수 있다.
도 1은 일 실시 예에 따른 장치를 도시한다. 디코드 회로(10)는 메모리로부터 페치된(fetched) 명령들의 스트림을 수신하도록 구성되고, 실행 회로(20)에 의해 수행되는 동작을 제어하기 위한 하나 이상의 제어 신호를 생성하기 위해 각 명령을 디코딩한다. 디코드 회로에 의해 생성된 제어 신호는 다양한 디코딩된 명령들이 실행 회로 내의 적절한 구성 요소들에 발행되기 전에 일시적으로 상주할 수 있는 이슈 큐(issue queue)(15)를 통해 선택적으로 실행 회로에 전달될 수 있다. 실행 회로는 다수의 실행 유닛, 예를 들어, 산술 연산을 수행하기 위한 산술 로직 유닛(ALU), 부동 소수점 연산을 수행하기 위한 부동 소수점 유닛(FPU), 곱셈-누산 연산들 수행하기 위한 곱셈-누산(MAC) 유닛 등을 구비할 수 있다. 실행 회로는 또한 부동 소수점 수를 고정 소수점 표현으로 변환하고, 마찬가지로 고정 소수점 수를 부동 소수점 표현으로 변환하기 위한 구성요소를 포함할 수 있다.
아래에서 보다 상세히 설명되는 바와 같이, 디코더 회로(10)가 앞서 언급된 변환 및 누산 명령들 중 하나를 디코딩하면, 이것에 의해 그 명령에 의해 지정된 하나 이상의 부동 소수점 피연산자 각각을 대응하는 고정 소수점 피연산자로 변환하는데 변환 회로(25)가 사용된다. 또한, 누산 회로(30)(실행 회로의 임의의 적합한 실행 유닛, 예를 들어, ALU 내에 제공될 수 있음)는 변환 및 누산 명령에 의해 식별되는 고정 소수점 피연산자와 변환 회로(25)에 의해 생성된 고정 소수점 피연산자의 각각을 입력으로서 사용하여 누산 연산을 수행하는데 사용되어, 고정 소수점 결과 값이 생성된다.
도 1에 도시된 바와 같이, 실행 회로(20)는 소스 및 목적지 피연산자가 저장될 수 있는 한 세트의 작업 레지스터(35)에 대한 액세스를 갖는다. 따라서, 예를 들어, 일 실시 예에서, 변환 및 누산 명령은 고정 소수점 형식으로 변환될 하나 이상의 부동 소수점 피연산자를 포함하는 하나의 소스 레지스터를 지정할 수 있고, 또한 누산 연산에 사용될 입력 고정 소수점 피연산자를 포함하는 또 다른 소스 레지스터를 지정할 수 있다. 필요하다면 별도의 목적지 레지스터도 지정될 수 있지만, 일 실시 예에서 목적지 레지스터는 입력 고정 소수점 피연산자를 포함하는 소스 레지스터와 동일하다.
도 2a는 일 실시예에 따라 변환 및 누산 명령 내에 제공된 필드를 개략적으로 도시한다. 이 예에서는, 명령이 다수의 입력 부동 소수점 피연산자를 지정하는 대신 단일 입력 부동 소수점 피연산자만 지정하는 것으로 가정하며, 따라서 이 명령의 변형(variant)은 여기에서 스칼라 변환 및 누산 명령이라고 할 것이다. 필드 52는 명령이 명령의 스칼라 변형이라는 것을 나타내는 값을 가지며, 연산코드(54)는 명령을 변환 및 누산 명령으로서 식별하는 다수의 비트로 구성된다. 필드 56은 단일 부동 소수점 피연산자가 지정되는 소스 레지스터를 지정한다. 원칙적으로 부동 소수점 피연산자는 어떤 부동 소수점 형식이 될 수 있지만, 여기에 기술된 실시예의 경우, 입력 부동 소수점 피연산자는 FP16 부동 소수점 피연산자(여기서 HP 부동 소수점 피연산자라고도 함)라고 가정할 것이다. 소스 레지스터는 부동 소수점 피연산자를 저장하기에 충분한 적절한 크기일 수 있다. 그러나, 일 실시예에서는 레지스터 파일(35) 내의 레지스터가 64비트 레지스터라고 가정하며, 따라서 FP16 값은 필드 56에서 식별된 소스 레지스터 내의 비트들의 특정 서브세트에 의해 지정될 것이다. 일반적으로, 소스 레지스터 내에서 어떤 비트의 서브세트가 FP16 값을 식별하는지 미리 결정될 것이다.
필드 58은 64비트 고정 소수점 값을 포함하는 두 번째 소스 레지스터를 식별한다. 일 실시예에서, 이 소스 레지스터는 변환 및 누산 연산을 수행한 결과로서 생성된 결과에 대한 목적지 레지스터로서도 사용된다.
도 2a에서와 같이, 명령 내에 하나 이상의 선택 필드 59가, 예를 들어 명령이 실행되기 위해 존재해야 하는 조건을 지정하는 조건 코드를 식별하기 위해서, 제공될 수 있다.
나중에 나머지 도면을 참조하여 더 자세히 논의되는 것처럼, 변환 및 누산 명령이 실행될 때, 변환 회로(25)를 사용하여 소스 레지스터(1)에 지정된 FP16 값을 고정 소수점 형식으로 변환한다. 특히, 일 실시예에서, FP16 값은 24개의 부분 비트를 갖는 41비트 고정 소수점 값으로 변환된다. 어떤 FP16 값은 41비트 내에서 나타낸 고정 소수점 형식으로 변환될 수 있다. 이것은 레지스터 내에 제공된 64비트보다 상당히 적으며, 따라서 소스 레지스터(2)에 지정된 64비트 고정 소수점 값과 FP16 값의 결과적인 고정 소수점 표현을 누산하기 위해 누산 연산을 수행할 때, 소스 레지스터(2) 내의 값이 이미 64비트 형식으로 표현 가능한 최대 값에 비교적 가깝지 않으면, 오버플로가 발생할 가능성이 매우 낮다는 점에 유의한다. 나중에 논의되는 것처럼, 그럼에도 불구하고 원한다면 오버플로 조건을 검출하기 위한 오버플로 검출 회로를 제공할 수 있다.
도 2b는 첫 번째 소스 레지스터 내에서 복수의 입력 부동 소수점 피연산자가 지정되는 명령의 대안적인 형태를 도시한다. 따라서, 소스 레지스터(1) 내에서 지정된 입력 부동 소수점 값의 벡터로 인해, 여기에서는 이 변환 및 누산 명령의 형식을, 벡터 변환 및 누산 명령이라고 할 것이다. 특히, 일 실시예에서, 소스 레지스터는 64비트 레지스터이므로, 도 2b에 나타낸 명령의 벡터 변형에 따라 필드 66은 4개의 FP16 값을 포함하는 소스 레지스터를 식별한다.
따라서, 명령 60의 벡터 변형은 명령을 명령의 벡터 변형으로서 식별하기 위해 설정된 필드 62를 갖고, 필드 64의 연산코드는 명령이 변환 및 누산 명령임을 식별하며, 필드 66에 의해 식별된 소스 레지스터로 4개의 부동 소수점 값이 지정되었음을 식별한다. 필드 68은 도 2a의 필드 58과 유사하며, 누산 연산을 위한 입력으로서 사용되는 64비트 고정 소수점 값을 식별한다. 다시, 원한다면, 예를 들어 조건 코드를 지정하기 위해서 옵션 필드 69가 제공된다.
명령의 다른 변형이 제공될 수 있다는 것을 이해할 것이다. 예를 들어, 필드 66의 소스 레지스터가 1개보다 많지만 4개보다 적은 FP16 값을 식별하는, 예를 들어 2개의 FP16 값을 식별하는, 또 다른 벡터 변형이 제공될 수 있다. 그런 다음 연산코드는 변환 및 누산 명령이 소스 레지스터(1) 내에서 지정된 두 개의 FP16 값에서 작동해야 함을 식별할 것이다.
도 3은 도 1의 변환 회로(25) 내의 FP16 - 고정 소수점 변환 블록을 구현하기 위해 제공될 수 있는 구성요소를 나타내는 블록도이다. 이 블록은 피연산자 A105로서 지정된 단일 입력 FP16 값에 대해 작동한다. 이전의 HP 부동 소수점 값에 대한 설명으로부터 명백한 바와 같이, FP16 피연산자는 비트 15가 부호 비트이고, 비트 14-10이 지수 값을 제공하며, 비트 9 - 0이 소스 부분을 식별하는 16비트 값일 것이다. 도 3에 도시된 바와 같이, 소수 부분은 왼쪽 시프트 회로(115)에 제공되고, 5개의 지수 비트는 단일 비트 출력을 생성하기 위해 OR 회로(110)에 의해 논리 OR 연산을 받는다. 부동 소수점 값이 정규 부동 소수점 값이라고 가정하면, OR 회로(110)로부터의 출력은, 10비트 소수에 프리펜드될(prepended) 때, 왼쪽 시프트 회로(115)에 입력된 11비트 가수 값을 생성하는 로직 1 값일 것이다. 부동 소수점 피연산자가 비정규이면, 논리 0 값이 OR 회로(110)로부터 출력되고 소수 비트에 프리펜드되어 왼쪽 시프트 회로(115)에 입력된 가수를 형성할 것이다.
왼쪽 시프트 회로(115)는, 입력 부동 소수점 값이 정규 부동 소수점 값이고, 따라서 왼쪽 시프트 회로에 입력된 가수의 최상위 비트가 논리 1 값으로 설정될 때, OR 게이트(110)로부터 출력된 정규 값(즉, 1)을 지수로부터 감산함으로써 결정된 양만큼 왼쪽 시프트 연산을 수행하도록 구성된다. 값 "expa-normal"이 0이므로 비정규 부동 소수점 입력에 대해 왼쪽 시프트가 수행되지 않는다. 수행될 수 있는 최대 왼쪽 시프트 양은 30비트이고, 따라서 왼쪽 시프트 회로의 출력은 41비트 값으로서 표현된다.
후술하는 실시 예에서, 누산 회로(30)는 64비트 입력에서 동작하고, 따라서 FP16에서 고정 블록(100)으로부터 출력된 41비트는 일 실시 예에서 64비트로 부호 확장된다(sign-extended). 이를 달성하는 한가지 방법은 결과적인 64비트 값을 1의 보수 회로(120)에 입력하기 전에 23개의 0을 시프터(115)의 출력에 프리펜드(prepend)하는 것이다.
입력 부동 소수점 값의 부호가 부동 소수점 값이 양수임을 나타내는, 로직 0 값인 경우, 1의 보수 회로(120)에 의해 조정이 행해지지 않으며, 입력 64비트 값은 64비트 값 "fixeda"로서 출력된다. 부호 비트는 누산 회로에 대한 캐리 인 비트(carry-in bit) "cina"로서도 출력되며, 양수에 대해서는 캐리 인 비트가 0이라고 이해될 것이다. 그러나, 부호 비트가 부동 소수점 수가 음수라는 것을 나타내는 경우, 회로(120)에 의해 그 회로에 대한 입력의 1의 보수 버전을 생성하기 위해 1의 보수 연산이 수행되고, 그 1의 보수 버전은 값 fixeda로서 출력된다. 이 경우, 캐리 인 값 cina는 논리 1 값으로 설정된다. 그러한 접근법에 의해, 다운스트림 누산 회로가 2의 보수 가산(twos complement addition)을 수행할 수 있으며, 변환기에 의해 지정된 입력 고정 소수점 피연산자로부터 부동 소수점 수의 고정 소수점 표현을 올바르게 감산하고 부동 소수점 피연산자가 음수였을 경우 명령을 누산할 것으로 이해될 것이다. 마찬가지로, 부동 소수점 피연산자가 양수였으면, 누산 회로에 의해 수행된 2의 보수 가산이 입력 고정 소수점 피연산자에 부동 소수점 수의 고정 소수점 표현을 올바르게 가산할 것이다.
도 4는 도 3에 나타낸 FP16 - 고정 블록 회로(100)가 바람직한 실시예의 변환 및 누산 명령에 의해 요구된 변환 및 누산 동작을 수행하기 위해 누산 회로에 어떻게 결합될 수 있는지를 나타내는 블록도이다. 도 4에 나타낸 바와 같이, 입력 부동 소수점 피연산자(105)는 도 3을 참조하여 앞에서 설명한 방식으로 작동하는 FP16 - 고정 블록(100)에 제공되며, 그에 따라 64비트 값 fixeda(앞에서 언급한 바와 같이 FP16 값의 41비트 고정 소수점 표시의 부호 확장 버전에 불과하다), 및 캐리 인 값 cina을 출력한다. fixeda 값은 누산 회로(150)에 대한 하나의 입력으로서 제공되며, 이것은 변환 및 누산 명령에 의해 지정된 64비트 고정 소수점 피연산자를 그것의 다른 입력으로서 수신한다. 앞에서 논의한 바와 같이, 일 실시예에 있어서는, 해당 값을 포함하는 소스 레지스터(155)가 목적지 레지스터로서도 기능하며, 따라서, 도 4에 도시된 바와 같이 레지스터(155)도 누산 회로(150)의 출력에 연결된다. 이 때문에, 누산 회로(150)는 두 개의 64비트 입력 값의 2의 보수 가산을 수행하는데, 여기서 가산에 대해서는 fixeda 회로 값은 왼쪽 시프트 회로(115)로부터의 0 확장된 출력을 나타내며, 캐리 인 비트는 0이 되는 반면, 감산에 대해서는 fixeda 값은 왼쪽 시프트 회로(115)로부터의 0 확장된 출력의 1의 보수가 되고, 캐리 인 값은 1로 설정될 것이라는 것을 알 수 있을 것이다.
앞에서 언급했듯이, FP16 부동 소수점 값의 고정 소수점 표현은 41비트로 표현할 수 있기 때문에, 64비트 와이드 고정 소수점 표현 내에 많은 FP16 값을 누산할 수 있다. 특히, 오버플로(overflow)의 위험 없이 이러한 숫자 중 223을 64비트 고정 소수점 표현 내에 누산할 수 있다. 그러나, 오버플로 검출은 64비트 누산기(150)의 상위 비트에 대한 캐리 인(carry-in)이 그 상위 비트 위치로부터의 캐리 아웃(carry-out)과 동일하지 않는 경우에 설정되는 오버플로 플래그(160)를 제공함으로써 용이하게 제공될 수 있다. 오버플로 플래그(160)가 설정되면, 오버플로를 처리하기 위한 동작이 장치 내에서 트리거될 수 있다. 예를 들어, 일 실시 예에서 오버플로 예외가 발생할 수 있다.
일 실시 예에서, 변환 및 누산 명령에 의해 식별된 각각의 부동 소수점 피연산자는 표준 부동 소수점 형식이고, 다른 실시 예에서 각각의 부동 소수점 피연산자는 비표준 형식일 수 있으며, 특히 예를 들어, 복수의 부동 소수점 값들의 반올림되지 않은 곱(unrounded product)을 포함할 수 있다. 이와 같은 반올림되지 않은 형태의 경우, 입력 부동 소수점 피연산자는 더 많은 정보의 비트를 포함할 것이다. 따라서, 부동 소수점 비트가 고정 소수점 형식으로 변환될 때, 고정 소수점 표현은 일반적으로 더 많은 비트를 포함할 것이다. 일 실시 예에서, 이것은 왼쪽 시프트 회로에 의해 지원되는 더 큰 잠재적인 왼쪽 시프트량과 함께, 부동 소수점 형식 내에 제공된 추가 소수 비트(fraction bit)를 수용하기 위해 부동 소수점 - 고정 소수점 변환 블록에서 보다 넓은 데이터 경로를 갖는 것에 의해 수용될 수 있다. 이것은 잠재적으로 예를 들면, 64비트보다 큰, 더 큰 누산 폭을 지원할 것을 요구할 수 있다. 그러나, 대안적인 실시 예에서, 부동 소수점 - 고정 소수점 변환 블록의 출력은, 그 출력이 관심 범위로 감소되도록 절삭(truncated)될 수 있고, 그 다음 표준 처리 폭 내에서, 예를 들면 64비트 폭 내에서 여전히 누산될 수 있다.
도 5는 변환 및 누산 명령의 단 하나의 인스턴스(single instance)에 의해 지정된 다수의 부동 소수점 피연산자를 변환하기 위해 도 3을 참조하여 앞서 논의된 바와 같은 다수의 FP16 - 고정 소수점 변환 블록이 병렬로 사용될 수 있는 방법을 도시하는 블록도이다. 특히, 도 2b의 전술한 벡터 변환 및 누산 명령을 사용할 때, 4개의 FP16 - 고정 소수점 변환 블록 205, 210, 215, 220이 제공될 수 있으며, 각각은 제1 소스 레지스터(200)에 지정된 데이터의 16비트 부분을 수신하도록 구성된다. 특히, 64비트 소스 레지스터(200)는 그 경우에 4개의 16비트 부동 소수점 피연산자를 포함할 것이고, 각각의 부동 소수점 피연산자는 FP16 - 고정 소수점 변환 블록 중 하나에 제공될 수 있다. 이들 블록은 각각의 부동 소수점 수의 41비트 고정 소수점 표현을 생성할 것이고, 이는 일 실시 예에서 전술한 바와 같이 누산 회로로 출력되기 전에 64비트로 부호 확장될 것이다. 이 인스턴스에서는, 누산 회로는 4개의 FP16 - 고정 소수점 변환 블록 205, 210, 215, 220으로부터의 출력을 수신하고, 또한 제2 소스 레지스터(235)로부터 64비트 고정 소수점 입력 피연산자를 수신하는 5:2 캐리 세이브(carry save) 가산기(225)를 포함한다. 캐리 세이브 가산기는 최종 64비트 누산 결과를 생성하기 위해 64비트 누산기(230)에 제공될 수 있는 형태로 입력을 감소시키기 위해 표준 방식으로 동작한다. 목적지 레지스터가 제2 소스 레지스터와 동일하도록 지정되기 때문에, 도 5에 도시된 바와 같이, 그 출력은 레지스터(235)에 다시 기록된다.
도 5에서 언급된 바와 같이, 4개의 캐리 인 입력(FP16 - 고정 소수점 변환 블록 205, 210, 215, 220의 각각에 의해 생성되는 것)은 캐리 세이브 가산기 감소 및 최종 가산기로의 캐리 인에서 항상 0인 하위 캐리 비트들에 주입된다.
도 5의 회로를 사용하면, 하나의 명령이 64비트 워드(word)로 패킹된(packed) 4개의 FP16 값을 지정하고, 이들이 고정 소수점 표현으로 변환된 다음 단일 사이클 내에서 부동 소수점 수에 추가될 수 있게 된다.
도 6은 앞에서 설명한 변환 및 누산 명령의 하나 이상의 인스턴스를 사용하여 일련의 부동 소수점 피연산자를 누산하기 위해 일 실시예에 따라 수행될 수 있는 프로세스를 나타내는 흐름도이다. 스텝 300에서, 현재의 명령이 변환 및 누산 명령인지 여부를 판정한다. 그러한 경우, 해당 명령은 디코더 회로(10)에 의해 디코딩되어 스텝 305에서 각 식별된 FP16 값을, 고정 소수점 표현으로 변환한 다음 각 변환된 값을 명령에 의해 피연산자로서 지정된 64비트 고정 소수점 값에 대하여 추가 또는 감산함으로써, 누산 결과를 생성하는 실행 회로(20)를 제어하는 제어신호들을 생성한다. 그런 다음 프로세스는 스텝 300으로 되돌아간다. 스텝 300에서, 현재 명령이 변환 및 누산 명령이 아니라고 판정하면, 스텝 310에서는 해당 명령이 누산 결과를 소스 피연산자로서 지정하는 고정 소수점 - 부동 소수점 변환 명령인지를 판정한다. 특히, 변환 및 누산 명령의 하나 이상의 인스턴스가 실행되었으면, 일련의 부동 소수점 피연산자가 변환 및 누산 명령의 다수의 인스턴스의 실행을 통해 함께 누산될 수 있도록 각각 동일한 제2 소스 레지스터를 사용하여, 생성된 누산 결과를 다시 부동 소수점 형식으로 변환하는 것이 바람직할 수 있다. 이것은 일반적으로 결과에 사용될 부동 소수점 형식을 지정하는, 그러한 고정 소수점 - 부동 소수점 변환 명령을 사용하여 달성될 수 있다.
따라서, 스텝 310에서 고정 소수점 - 부동 소수점 변환 명령이 마주치면, 스텝 315에서 누산 결과는 명령에 의해 지정된 부동 소수점 형식의 부동 소수점 수로 변환된다. 그런 다음 프로세스는 스텝 300으로 되돌아간다. 스텝 310에서 현재 명령이 고정 소수점 - 부동 소수점 변환 명령이 아닌 것으로 판정되는 경우, 캡처한 대로 일반적으로 박스 320에 의해, 명령은 부동 소수점 누산을 수행하는 데 사용되는 명령이 아니며, 표준 방식으로 실행될 뿐이다. 따라서, 스텝 320에서, 명령은 프로그램 시퀀스에 있어서 어떤 다른 명령이 될 수 있다. 그 후 프로세스는 스텝 300으로 되돌아간다.
대안적인 실시예에 있어서는, 도 7에 개략적으로 나타낸 것처럼, 장치는 SIMD 아키텍처를 가질 수 있으며, 여기서 실행 회로는 병렬 처리의 다중 레인(multiple lanes)을 식별하고, 변환 및 누산 명령은 SIMD 명령의 형태를 취할 수 있다. 특히, 병렬 처리의 각 레인 내에서, 상술한 변환 및 누산 동작은 독립적으로 병렬로 수행될 수 있다. 도 7에 나타낸 예에서, SIMD 실행 회로는 병렬 처리의 2개의 레인을 가지고 있다고 가정하지만, 다른 SIMD 배치에서는 2개 이상의 레인이 제공될 수 있다는 점을 인식할 것이다.
변환 및 누산 명령의 SIMD 변형(variants)에 대한 기본 명령 형식은 도 2a 및 2b를 참조하여 앞서 논의된 것과 유사하다. 그러나, 연산코드(opcodes)는 명령을 SIMD 명령이라고 식별할 것이고, 각 소스 레지스터는 Lx64비트 레지스터일 수 있으며, 여기서 L은 병렬 처리의 레인의 수이다. 따라서, 도 7의 예에서, 소스 레지스터의 각각은 128비트 레지스터일 수 있고, 각각의 레지스터는 2개의 64비트 부분을 포함한다. 도 2b의 변형이 사용된다고 가정하면, 128비트 제1 소스 레지스터의 각 64비트 부분은 4개의 FP16 값을 식별할 것이다. 마찬가지로, 제2 소스 레지스터의 각 64비트 부분에는 64비트 누산 값이 포함될 것이다. 이들 2개의 소스 레지스터는 각각 구성요소 400, 420에 의해 도 7에 개략적으로 도시되어 있다. 선택 필드와 관련하여, 명령들의 비 IMD(non-SIMD) 변형에 대해 제공될 수 있는 선택 필드 이외에, SIMD 변형에 대해, 어떤 레인이 활성화되는지, 그리고 그에 따라 어떤 레인에서 처리가 수행되어야 하는지를 식별하기 위해서 술어 값(predicate value)이 지정될 수 있다. 예를 들어, 4개의 레인을 갖는 SIMD 아키텍처에서, 레인들, 예를 들어 레인 1, 3 및 4의 특정 서브세트 내에서 변환 및 누산 동작을 수행하는 것이 바람직할 수 있지만, 레인 2 내에서 어떠한 처리도 수행하지 않는 것이 바람직할 수도 있으며, 이것은 이러한 술어 값을 사용하여 표현될 수 있다.
도 7에 도시된 바와 같이, 각 레인 내에서, 도 5를 참조하여 앞서 논의된 것과 동일한 회로가 제공된다. 따라서, 레인 2 내에는, 누산 회로(415)에 모두 공급되는, 복수의 FP16 - 고정 소수점 변환 블록 405,410이 있을 것이다. 4개의 FP16 - 고정 소수점 변환 블록이 있는 경우, 누산 회로(415)는 도 5에 도시된 5:2 캐리 세이브 가산기(225) 및 가산기 회로(230)를 포함할 것이다. 마찬가지로, 레인 1 내에는, 복수의 FP16 - 고정 소수점 변환 유닛 425, 430이 관련된 누산 회로(435)와 함께 제공된다. 제1 소스 레지스터(400)를 고려하면, 제1 64비트 부분은 레인 1로 라우팅되고(routed), 제2 64비트 부분은 레인 2로 라우팅된다. 개개의 레인들 내에서, 64비트 부분 내의 개개의 FP16 값은 각각의 FP16 - 고정 소수점 변환 블록 405, 410, 또는 425, 430으로 라우팅된다. 마찬가지로, 두 개의 64비트 고정 소수점 입력 피연산자를 포함하는 제2 소스 레지스터(420)와 관련하여, 이들 고정 소수점 피연산자 중 첫 번째는 레인 1 내의 누산 회로(435)에 제공될 것이고, 다른 것은 레인 2 내의 누산 회로(415)에 제공된다.
따라서, 각 레인 내에서 도 5를 참조하여 앞에서 논의한 처리가 수행되어, 목적지 레지스터(440) 내에서 일괄적으로 캡처될 수 있는 두 개의 64비트 누산 결과가 출력되는 것을 알 수 있다. 앞에서 논의한 바와 같이, 일 실시예에 있어서 목적지 레지스터(440)는 실제로 제2 소스 레지스터(420)와 동일할 것이고, 따라서 생성된 두 개의 누산 결과는 제2 소스 레지스터의 이전 내용을 겹쳐 쓸 것이다.
이러한 SIMD 접근법을 채택함으로써, 이것은 부동 소수점 피연산자의 누산의 상당한 병렬화를 허용함으로써 추가적인 성능 향상의 가능성을 제공한다.
기술된 실시예의 접근법을 이용함으로써, 부동 소수점 값을 연관적으로 누산하기 위한 빠르고 효율적인 메커니즘을 제공할 수 있으며, 그에 따라 누산은 어떤 순서로든 이루어질 수 있으며, 완전히 재현될 수 있다. 이 접근 방식의 속도와 정확성은 부동 소수점 연산을 사용하여 부동 소수점 값을 누적하려는 것과 비교할 때 상당한 이점을 제공하므로, 다양한 실제 애플리케이션에서 상당한 이점을 제공한다. 예를 들어, 그러한 접근 방식은 딥 러닝(deep learning) 문제를 처리할 때 특히 유용할 것이다. 딥 러닝의 연산은 근본적으로 매트릭스 곱셈(matrix multiplication; GEMM)이며, 따라서 엄청나게 많은 제품의 합계로 감소한다. 여기에 기술된 기법을 채택함으로써, 예를 들어 FP16 피연산자와 같은 많은 부동 소수점 피연산자는 누산이 발생하는 순서에 관계없이, 완전히 결정론적인 방식으로 누산될 수 있다. 접근 방식 자체는 병렬처리에 도움되어, 상당한 성능 향상을 실현한다.
본 애플리케이션에 있어서, "구성된(configured to)..."이라는 단어는 장치의 구성요소가 정의된 동작을 수행할 수 있는 구성을 가지고 있음을 의미하는 데 사용된다. 이 맥락에서, "구성"은 하드웨어 또는 소프트웨어의 상호접속의 배열이나 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가지고 있을 수 있고, 또는 프로세서 또는 다른 처리 장치가 기능을 수행하도록 프로그래밍될 수 있다. "구성됨"은 정의된 동작을 제공하기 위해 어떤 방법으로든 장치 구성요소가 변경될 필요가 있음을 의미하지 않는다.
발명의 예시적인 실시 예들이 첨부된 도면을 참조하여 본원에 상세하게 설명되었지만, 본 발명은 이러한 정확한 실시 예들에 한정되지 않으며, 다양한 변경, 추가 및 수정이 첨부된 청구 범위에 의해 한정된 바와 같은 본 발명의 범위 및 사상으로부터 벗어나지 않고 해당 기술분야의 당업자에 의해 이루어질 수 있음을 이해할 것이다. 예를 들어, 종속항의 특징의 다양한 조합이 본 발명의 범위를 벗어나지 않고 독립항의 특징으로 이루어질 수 있다.

Claims (19)

  1. 장치로서,
    산술 연산을 수행하는 실행 회로와,
    상기 실행 회로에 의해 수행되는 상기 산술 연산을 제어하기 위한 제어 신호들을 생성하기 위해 명령들의 시퀀스를 디코딩하는 디코더 회로를 구비하고,
    상기 디코더 회로는 상기 시퀀스 내의 변환 및 누산 명령의 디코딩에 응답하여 변환 및 누산 명령에 의해 식별된 적어도 하나의 부동 소수점 피연산자를 M개의 소수 비트를 갖는 대응하는 N비트 고정 소수점 피연산자로 변환하고(여기서, M은 N보다 작고 M은 부동 소수점 피연산자의 형식에 의존한다), 각 대응하는 N비트 고정 소수점 피연산자와 변환 및 누산 명령에 의해 식별되는 P비트 고정 소수점 피연산자를 누산하여 P비트 고정 소수점 결과 값을 생성하는(여기서 P는 N보다 크고 M개의 소수 비트를 갖는다) 상기 실행 회로를 제어하기 위한 하나 이상의 제어 신호들을 생성하는, 장치.
  2. 제 1 항에 있어서,
    변환 및 누산 명령에 의해 식별된 상기 적어도 하나의 부동 소수점 피연산자의 각각은 16비트 부동 소수점 피연산자인, 장치.
  3. 제 2 항에 있어서,
    상기 실행 회로는 변환 및 누산 명령에 의해 식별된 상기 적어도 하나의 부동 소수점 피연산자를 24개의 소수 비트를 갖는 대응하는 41비트 고정 소수점 피연산자로 변환하도록 구성되는, 장치.
  4. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    변환 및 누산 명령에 의해 식별된 상기 P비트 고정 소수점 피연산자는 64비트 고정 소수점 피연산자인, 장치.
  5. 제 1 항 내지 제 4 항 중 어느 한 항에 있어서,
    상기 산술 연산을 수행할 때 상기 실행 회로에 액세스 가능한 레지스터들의 세트를 더 구비하고,
    변환 및 누산 명령은 상기 레지스터들의 세트 내의 적어도 하나의 제1 소스 레지스터 - 상기 적어도 하나의 제1 소스 레지스터는 상기 적어도 하나의 부동 소수점 피연산자를 포함함 -를 식별하는 제1 레지스터 식별자 필드와, 상기 레지스터들의 세트 내의 제2 소스 레지스터 - 상기 제2 소스 레지스터는 상기 P비트 고정 소수점 피연산자를 포함함 -를 식별하는 제2 레지스터 식별자 필드를 포함하는, 장치.
  6. 제 5 항에 있어서,
    상기 실행 회로는 상기 P비트 고정 소수점 결과 값을 상기 제2 소스 레지스터에 저장하기 위해 출력하도록 구성되는, 장치.
  7. 제 5 항 또는 제 6 항에 있어서,
    상기 제1 및 제2 소스 레지스터는 64비트 레지스터이고, 변환 및 누산 명령은 최대 4개의 16비트 부동 소수점 수를 포함하는 제1 소스 레지스터를 식별하고, 상기 실행 회로는 변환 및 누산 명령의 디코딩에 응답하여 상기 디코더 회로에 의해 생성된 하나 이상의 제어 신호들에 응답하여 최대 4개의 16비트 부동 소수점 수의 각각을 대응하는 고정 소수점 피연산자로 변환하고, 각 대응하는 고정 소수점 피연산자와 상기 제2 소스 레지스터에 포함된 64비트 고정 소수점 피연산자를 누산하여, 64비트 결과 값을 생성하는, 장치.
  8. 제 1 항 내지 제 7 항 중 어느 한 항에 있어서,
    상기 실행 회로는, 각 레인이 P비트의 폭을 갖는, 병렬 처리의 복수의 레인을 제공하는 SIMD(Single Instruction Multiple Data) 회로이고, 변환 및 누산 명령은, 상기 복수의 레인 중의 다수의 각각에 대해, 대응하는 N비트 고정 소수점 피연산자로 변환될 적어도 하나의 부동 소수점 피연산자와, 상기 대응하는 N비트 고정 소수점 피연산자의 각각이 누산될 P비트 고정 소수점 피연산자를 식별하는 SIMD 명령인, 장치
  9. 제 5 항 내지 제 7 항 중 어느 한 항에 있어서,
    상기 실행 회로는, 각 레인이 P비트의 폭을 갖는, 병렬 처리의 L개의 레인을 제공하는 SIMD(Single Instruction Multiple Data) 회로이고, 변환 및 누산 명령은, 상기 L개의 레인 중의 다수의 각각에 대해, 대응하는 N비트 고정 소수점 피연산자로 변환될 적어도 하나의 부동 소수점 피연산자와, 상기 대응하는 N비트 고정 소수점 피연산자의 각각이 누산될 P비트 고정 소수점 피연산자를 식별하는 SIMD 명령이고,
    상기 제1 및 제2 소스 레지스터는 Lx64비트 레지스터이고, 변환 및 누산 명령은, 상기 L개의 레인의 각각에 대해, 최대 4개의 16비트 부동 소수점 수를 포함하는 제1 소스 레지스터를 식별하며, 상기 실행 회로는 변환 및 누산 명령의 디코딩에 응답하여 상기 디코더 회로에 의해 생성된 하나 이상의 제어 신호들에 응답하여, 다수의 레인의 각각 내에서, 최대 4개의 16비트 부동 소수점 수의 각각을 대응하는 고정 소수점 피연산자로 변환하고, 각 대응하는 고정 소수점 피연산자와 상기 제2 소스 레지스터 내에 포함된 64비트 고정 소수점 피연산자를 누산하여, 각 레인으로부터의 결과 값을 포함하는 Lx64비트 결과 내에 포함시키기 위한 64비트 결과 값을 생성하는, 장치
  10. 제 1 항 내지 제 9 항 중 어느 한 항에 있어서,
    상기 명령들의 시퀀스는, 상기 디코더 회로에 의해 디코딩될 때, 상기 실행 회로가 변환 및 누산 명령의 하나 이상의 인스턴스를 실행하여 취득된, 고정 소수점 결과 값을, 고정 소수점 - 부동 소수점 변환 명령에 의해 지정된 부동 소수점 형식을 갖는 부동 소수점 결과 값으로 변환하게 하는 고정 소수점 - 부동 소수점 변환 명령을 더 포함하는, 장치.
  11. 제 1 항 내지 제 10 항 중 어느 한 항에 있어서,
    변환 및 누산 명령에 의해 식별된 상기 적어도 하나의 부동 소수점 피연산자는 복수의 부동 소수점 값의 반올림되지 않은 곱(unrounded product)을 포함하는, 장치.
  12. 제 1 항 내지 제 11 항 중 어느 한 항에 있어서,
    상기 실행 회로는,
    각 변환 블록이 변환 및 누산 명령에 의해 식별된 입력 부동 소수점 피연산자를 수신하고 대응하는 N비트 고정 소수점 피연산자를 생성하도록 구성되는, 하나 이상의 변환 블록을 제공하는 변환 회로와,
    상기 P비트 고정 소수점 결과 값을 생성하기 위해 각 대응하는 N비트 고정 소수점 피연산자와 상기 P비트 고정 소수점 피연산자를 누산하기 위한 누산 연산을 수행하는 누산 회로를 구비하는, 장치.
  13. 제 12 항에 있어서,
    상기 각 변환 블록은,
    입력 부동 소수점 피연산자의 소수 비트들 및 입력 부동 소수점 피연산자의 지수 비트들의 논리 조합으로부터 가수 값(significand value)을 생성하는 가수 생성 회로와,
    정규 부동 소수점 값인 입력 부동 소수점 값에 응답하여, 상기 지수 비트들로 나타낸 지수 값으로부터 결정된 시프트량만큼 가수 값에 대하여 왼쪽 시프트 연산을 수행하여, 출력 값을 생성하는 시프트 회로를 구비하는, 장치.
  14. 제 13 항에 있어서,
    상기 각 변환 블록은,
    부동 소수점 피연산자의 부호 비트가 입력 부동 소수점 피연산자가 음수라는 것을 나타낼 때, 출력 값에 대해 1의 보수 연산을 수행하는 1의 보수 회로를 더 구비하는, 장치.
  15. 제 13 항 또는 제 14 항에 있어서,
    부동 소수점 피연산자의 부호 비트는 상기 누산 회로로의 캐리 인(carry-in) 비트로서 사용되는, 장치.
  16. 제 12 항 내지 제 15 항 중 어느 한 항에 있어서,
    상기 누산 회로는 각 대응하는 N비트 고정 소수점 피연산자와 상기 P비트 고정 소수점 피연산자의 2의 보수 가산을 수행하여 상기 P비트 고정 소수점 결과 값을 생성하도록 구성되는, 장치.
  17. 제 12 항 내지 제 16 항 중 어느 한 항에 있어서,
    상기 누산 회로는 상기 누산 회로의 최상위 비트 위치로의 캐리 인이 그 최상위 비트 위치로부터의 캐리 아웃(carry-out)과 같지 않을 때 오버플로 조건을 검출하는 오버플로 검출 회로를 포함하는, 장치.
  18. 산술 연산을 수행하는 실행 회로와, 상기 실행 회로에 의해 수행되는 산술 연산을 제어하기 위한 제어 신호들을 생성하기 위해 명령들의 시퀀스를 디코딩하는 디코더 회로를 갖는 장치 내에서 부동 소수점 수의 누산을 수행하는 방법으로서, 상기 방법은,
    상기 디코더 회로 내에서 하나 이상의 제어 신호들을 생성하기 위해 상기 시퀀스 내의 변환 및 누산 명령을 디코딩하는 단계와,
    상기 하나 이상의 제어 신호들에 응답하여 변환 및 누산 명령에 의해 식별된 적어도 하나의 부동 소수점 피연산자를 M개의 소수 비트를 갖는 대응하는 N비트 고정 소수점 피연산자로 변환하고(여기서 M은 N보다 작고, M은 부동 소수점 피연산자의 형식에 의존하다), 각 대응하는 N비트 고정 소수점 피연산자와 변환 및 누산 명령에 의해 식별된 P비트 고정 소수점 피연산자를 누산하여 P비트 고정 소수점 결과 값을 생성하는(여기서 P는 N보다 크고 M개의 소수 비트를 갖는다) 상기 실행회로를 제어하는 단계를 포함하는, 수행 방법.
  19. 장치로서,
    산술 연산을 수행하기 위한 실행 수단과,
    상기 실행 수단에 의해 수행되는 산술 연산을 제어하기 위한 제어 신호들을 생성하기 위해 명령들의 시퀀스를 디코딩하기 위한 디코더 수단을 구비하고,
    상기 디코더 수단은 상기 시퀀스 내의 변환 및 누산 명령을 디코딩하여 하나 이상의 제어 신호들을 생성하고,
    상기 실행 수단은, 상기 하나 이상의 제어 신호들에 응답하여, 변환 및 누산 명령에 의해 식별된 적어도 하나의 부동 소수점 피연산자를 M개의 소수 비트를 갖는 대응하는 N비트 고정 소수점 피연산자로 변환하고(여기서 M은 N보다 작고 M은 부동 소수점 피연산자의 형식에 의존한다), 각 대응하는 N비트 고정 소수점 피연산자와 변환 및 누산 명령에 의해 식별된 P비트 고정 소수점 피연산자를 누산하여 P비트 고정 소수점 결과 값을 생성하는(여기서 P는 N보다 크고 M개의 소수 비트를 갖는다), 장치.
KR1020197017885A 2016-12-06 2017-10-19 부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법 KR102447636B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/370,660 2016-12-06
US15/370,660 US10216479B2 (en) 2016-12-06 2016-12-06 Apparatus and method for performing arithmetic operations to accumulate floating-point numbers
PCT/GB2017/053163 WO2018104696A1 (en) 2016-12-06 2017-10-19 An apparatus and method for performing arithmetic operations to accumulate floating-point numbers

Publications (2)

Publication Number Publication Date
KR20190090817A true KR20190090817A (ko) 2019-08-02
KR102447636B1 KR102447636B1 (ko) 2022-09-27

Family

ID=60182813

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197017885A KR102447636B1 (ko) 2016-12-06 2017-10-19 부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법

Country Status (5)

Country Link
US (1) US10216479B2 (ko)
KR (1) KR102447636B1 (ko)
CN (1) CN110036368B (ko)
TW (1) TWI784980B (ko)
WO (1) WO2018104696A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022212213A1 (en) * 2021-03-27 2022-10-06 Intel Corporation Apparatuses, methods, and systems for instructions for downconverting a tile row and interleaving with a register

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10671345B2 (en) * 2017-02-02 2020-06-02 Intel Corporation Methods and apparatus for performing fixed-point normalization using floating-point functional blocks
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US10698685B2 (en) * 2017-05-03 2020-06-30 Intel Corporation Instructions for dual destination type conversion, mixed precision accumulation, and mixed precision atomic memory operations
US10224954B1 (en) 2017-09-29 2019-03-05 Intel Corporation Floating point to fixed point conversion
US11437032B2 (en) 2017-09-29 2022-09-06 Shanghai Cambricon Information Technology Co., Ltd Image processing apparatus and method
US10223114B1 (en) 2017-09-29 2019-03-05 Intel Corporation Fixed point to floating point conversion
US11630666B2 (en) 2018-02-13 2023-04-18 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
KR102354720B1 (ko) 2018-02-13 2022-01-21 상하이 캠브리콘 인포메이션 테크놀로지 컴퍼니 리미티드 계산 장치 및 방법
US20200159532A1 (en) 2018-02-13 2020-05-21 Shanghai Cambricon Information Technology Co., Ltd Computing device and method
CN110162162B (zh) 2018-02-14 2023-08-18 上海寒武纪信息科技有限公司 处理器的控制装置、方法及设备
EP3624020A4 (en) 2018-05-18 2021-05-05 Shanghai Cambricon Information Technology Co., Ltd CALCULATION PROCEDURES AND RELATED PRODUCTS
KR102470893B1 (ko) 2018-06-27 2022-11-25 상하이 캠브리콘 인포메이션 테크놀로지 컴퍼니 리미티드 온 칩 코드의 브레이크 포인트에 의한 디버그 방법, 온 칩 프로세서 및 브레이크 포인트에 의한 칩 디버그 시스템
EP3640810A4 (en) 2018-08-28 2021-05-05 Cambricon Technologies Corporation Limited DATA PRE-PROCESSING PROCESS AND APPARATUS, COMPUTER DEVICE AND STORAGE MEDIA
US20210263993A1 (en) * 2018-09-27 2021-08-26 Intel Corporation Apparatuses and methods to accelerate matrix multiplication
US11703939B2 (en) 2018-09-28 2023-07-18 Shanghai Cambricon Information Technology Co., Ltd Signal processing device and related products
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US11372643B2 (en) * 2018-11-09 2022-06-28 Intel Corporation Systems and methods for performing instructions to convert to 16-bit floating-point format
CN111383638A (zh) 2018-12-28 2020-07-07 上海寒武纪信息科技有限公司 信号处理装置、信号处理方法及相关产品
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
CN113383310A (zh) 2019-03-15 2021-09-10 英特尔公司 矩阵加速器架构内的脉动分解
US20220180467A1 (en) 2019-03-15 2022-06-09 Intel Corporation Systems and methods for updating memory side caches in a multi-gpu configuration
US20200334522A1 (en) 2019-04-18 2020-10-22 Cambricon Technologies Corporation Limited Data processing method and related products
CN111832737B (zh) 2019-04-18 2024-01-09 中科寒武纪科技股份有限公司 一种数据处理方法及相关产品
WO2020247077A1 (en) * 2019-06-04 2020-12-10 Micron Technology, Inc. Bit string accumulation in memory array periphery
CN112085193B (zh) 2019-06-12 2024-03-29 上海寒武纪信息科技有限公司 一种神经网络的量化参数确定方法及相关产品
US11676028B2 (en) 2019-06-12 2023-06-13 Shanghai Cambricon Information Technology Co., Ltd Neural network quantization parameter determination method and related products
FR3097993B1 (fr) * 2019-06-25 2021-10-22 Kalray Opérateur de produit scalaire de nombres à virgule flottante réalisant un arrondi correct
US20220229633A1 (en) 2020-01-07 2022-07-21 SK Hynix Inc. Multiplication and accumulation(mac) operator and processing-in-memory (pim) device including the mac operator
US11663000B2 (en) 2020-01-07 2023-05-30 SK Hynix Inc. Multiplication and accumulation(MAC) operator and processing-in-memory (PIM) device including the MAC operator
TW202141290A (zh) 2020-01-07 2021-11-01 韓商愛思開海力士有限公司 記憶體中處理(pim)系統和pim系統的操作方法
US11403096B2 (en) * 2020-05-11 2022-08-02 Micron Technology, Inc. Acceleration circuitry for posit operations
US11188329B1 (en) * 2020-06-24 2021-11-30 Micron Technology, Inc. Dynamic precision bit string accumulation
CN111796798B (zh) * 2020-09-08 2020-12-22 腾讯科技(深圳)有限公司 一种定点与浮点转换器、处理器、方法以及存储介质
CN112036561B (zh) * 2020-09-30 2024-01-19 北京百度网讯科技有限公司 数据处理方法、装置、电子设备及存储介质
CN112416294B (zh) * 2020-11-20 2022-09-16 安谋科技(中国)有限公司 处理器及其二进制累加方法和计算机可读介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05224883A (ja) * 1991-09-26 1993-09-03 Advanced Micro Devicds Inc 浮動小数点n−ビット符号付大きさの2進数を固定小数点m−ビット2の補数表示の2進数に変換するためのシステム
US20070220076A1 (en) * 2002-12-27 2007-09-20 Arm Limited Data processing apparatus and method for converting a number between fixed-point and floating-point presentations
US20160124714A1 (en) * 2014-11-03 2016-05-05 Arm Limited Exception generation when generating a result value with programmable bit significance

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5838984A (en) * 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
GB2409059B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US8977669B2 (en) 2010-01-08 2015-03-10 International Business Machines Corporation Multi-input and binary reproducible, high bandwidth floating point adder in a collective network
CN102566967B (zh) * 2011-12-15 2015-08-19 中国科学院自动化研究所 一种采用多级流水线结构的高速浮点运算器
US20140195581A1 (en) * 2013-01-08 2014-07-10 Analog Devices, Inc. Fixed point division circuit utilizing floating point architecture
US9891886B2 (en) * 2014-07-02 2018-02-13 Via Alliance Semiconductor Co., Ltd Split-path heuristic for performing a fused FMA operation
US9608662B2 (en) * 2014-09-26 2017-03-28 Arm Limited Apparatus and method for converting floating-point operand into a value having a different format
CN106127302A (zh) * 2016-06-23 2016-11-16 杭州华为数字技术有限公司 处理数据的电路、图像处理系统、处理数据的方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05224883A (ja) * 1991-09-26 1993-09-03 Advanced Micro Devicds Inc 浮動小数点n−ビット符号付大きさの2進数を固定小数点m−ビット2の補数表示の2進数に変換するためのシステム
US20070220076A1 (en) * 2002-12-27 2007-09-20 Arm Limited Data processing apparatus and method for converting a number between fixed-point and floating-point presentations
US20160124714A1 (en) * 2014-11-03 2016-05-05 Arm Limited Exception generation when generating a result value with programmable bit significance

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022212213A1 (en) * 2021-03-27 2022-10-06 Intel Corporation Apparatuses, methods, and systems for instructions for downconverting a tile row and interleaving with a register

Also Published As

Publication number Publication date
CN110036368A (zh) 2019-07-19
WO2018104696A1 (en) 2018-06-14
TWI784980B (zh) 2022-12-01
US20180157464A1 (en) 2018-06-07
US10216479B2 (en) 2019-02-26
TW201821979A (zh) 2018-06-16
KR102447636B1 (ko) 2022-09-27
CN110036368B (zh) 2023-02-28

Similar Documents

Publication Publication Date Title
KR102447636B1 (ko) 부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법
US11347511B2 (en) Floating-point scaling operation
US9916130B2 (en) Apparatus and method for vector processing
US7555514B2 (en) Packed add-subtract operation in a microprocessor
US7236995B2 (en) Data processing apparatus and method for converting a number between fixed-point and floating-point representations
US5995991A (en) Floating point architecture with tagged operands
US10489153B2 (en) Stochastic rounding floating-point add instruction using entropy from a register
US9608662B2 (en) Apparatus and method for converting floating-point operand into a value having a different format
US10095475B2 (en) Decimal and binary floating point rounding
US8554822B2 (en) Decimal adder with end around carry
GB2549153B (en) Apparatus and method for supporting a conversion instruction
US20170220343A1 (en) Stochastic rounding floating-point multiply instruction using entropy from a register
US9959092B2 (en) Accumulation of floating-point values
KR100887327B1 (ko) 다양한 정밀도에 대한 고속 부동 소수점 연산을 수행하는방법, 프로그래밍 구조 및 기록 매체
US10963245B2 (en) Anchored data element conversion
Vlăduţiu et al. The Representation of Numbers in Computing Systems

Legal Events

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