KR20240102915A - 부동소수점 연산 방법 및 연산 장치 - Google Patents

부동소수점 연산 방법 및 연산 장치 Download PDF

Info

Publication number
KR20240102915A
KR20240102915A KR1020230191961A KR20230191961A KR20240102915A KR 20240102915 A KR20240102915 A KR 20240102915A KR 1020230191961 A KR1020230191961 A KR 1020230191961A KR 20230191961 A KR20230191961 A KR 20230191961A KR 20240102915 A KR20240102915 A KR 20240102915A
Authority
KR
South Korea
Prior art keywords
result
operand
floating
operands
floating point
Prior art date
Application number
KR1020230191961A
Other languages
English (en)
Inventor
김보열
이혁재
이승용
Original Assignee
서울대학교산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 서울대학교산학협력단 filed Critical 서울대학교산학협력단
Publication of KR20240102915A publication Critical patent/KR20240102915A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/012Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Abstract

본 발명은 부동소수점 연산 장치의 부동소수점 연산 방법에 관한 것으로, 상기 부동소수점 연산 장치로 부호부, 지수부 및 가수부를 각각 갖는 제1, 제2 및 제3 피연산자를 입력하는 단계; 상기 제1 및 제2 피연산자가 모두 0이면 제1 비교 결과를 출력하는 단계; 상기 제1 및 제2 피연산자의 가수부를 승산하여 임시 부동소수점 연산 결과를 출력하는 승산 단계; 및 상기 제3 피연산자와 상기 임시 부동소수점 연산 결과를 가산하여 최종 연산 결과를 출력하는 가산 단계;를 포함하되, 상기 승산 단계는, 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 출력하는 단계; 상기 제3 피연산자의 지수부와 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 비교한 감산 결과를 출력하는 단계; 상기 감산 결과와 상기 제3 피연산자의 가수 비트 수의 크기를 비교하는 단계; 상기 감산 결과가 상기 제3 피연산자의 가수 비트 수보다 크면 제2 비교 결과를 출력하는 단계; 및 상기 제1 비교 결과와 상기 제2 비교 결과의 논리 연산 결과를 기초로 스왐핑(swamping)의 발생 여부를 검출하는 단계를 포함할 수 있다.

Description

부동소수점 연산 방법 및 연산 장치 {METHOD AND APPARATUS FOR PROVIDING FLOATING POINT ARITHMETIC}
본 발명은 부동소수점(floating point) 연산과 관련이 있고, 특히 부동소수점의 승산 및 누산을 지원하는 FMAC(floating point multiply-accumulate) 연산기와 이를 포함하는 프로세서, 예를 들어 범용적인 프로그래머블한 중앙처리장치(central processing unit, CPU), 그래픽연산장치(graphic processing unit, GPU), 특수 목적의 프로그래머블한 디지털신호처리장치(digital signal processor, DSP), ASIP(application specific instruction set processor), 특수 목적의 가속기 등과 관련이 있다.
두 개의 부동소수점 표현을 가산할 경우, 자릿수를 맞추기 위해 지수(exponent)의 값을 일치시키게 되며, 가수(mantissa)를 가산한 뒤 부동소수점 연산 장치의 정밀도에 맞추어 가수를 반올림하게 된다.
이때, 아주 큰 수에 작은 수를 가산할 경우, 가수의 변화가 정밀도 내에서는 아무런 변화도 주지 못하고 값이 가산되지 않는 스왐핑(swamping) 현상이 발생하게 된다.
특히, DNN(deep neural network)에서는 저 정밀도의 부동소수점 연산 장치가 자주 사용되고 있는데, 저 정밀도 연산의 경우에 가수가 표현할 수 있는 정밀도 범위가 떨어져 이와 같은 스왐핑 현상이 더욱 빈번하게 발생하고 있다.
상술한 배경기술은 발명자가 본 발명의 도출을 위해 보유하고 있었거나, 본 발명의 도출 과정에서 습득한 기술 정보로서, 반드시 본 발명의 출원 전에 일반 공중에게 공개된 공지 기술이라 할 수는 없다.
등록특허공보 제10-1473906호 (2014.12.11.)
본 발명의 실시예에서는, 스왐핑 오류를 회피할 수 있는 부동소수점 연산 기술을 제안하고자 한다.
본 발명의 실시예에서는, 디지털 회로 설계, 프로세서 설계, 인공지능 반도체 설계 등에 적용이 가능한 스왐핑 오류를 회피할 수 있는 부동소수점 연산 기술을 제안하고자 한다.
본 발명이 해결하고자 하는 과제는 상기에서 언급한 것으로 제한되지 않으며, 언급되지 않은 또 다른 해결하고자 하는 과제는 아래의 기재들로부터 본 발명이 속하는 통상의 지식을 가진 자에 의해 명확하게 이해될 수 있을 것이다.
본 발명의 실시예에 따르면, 부동소수점 연산 장치의 부동 소수점 연산 방법에 있어서, 상기 부동소수점 연산 장치로 부호부, 지수부 및 가수부를 각각 갖는 제1, 제2 및 제3 피연산자를 입력하는 단계; 상기 제1 및 제2 피연산자의 지수부가 모두 0이면 제1 비교 결과를 출력하는 단계; 상기 제1 및 제2 피연산자의 가수부를 승산하여 임시 부동소수점 연산 결과를 출력하는 승산 단계; 및 상기 제3 피연산자와 상기 임시 부동소수점 연산 결과를 가산하여 최종 연산 결과를 출력하는 가산 단계;를 포함하되, 상기 승산 단계는, 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 출력하는 단계; 상기 제3 피연산자의 지수부와 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 비교한 감산 결과를 출력하는 단계; 상기 감산 결과와 상기 제3 피연산자의 가수 비트 수의 크기를 비교하는 단계; 상기 감산 결과가 상기 제3 피연산자의 가수 비트 수보다 크면 제2 비교 결과를 출력하는 단계; 및 상기 제1 비교 결과와 상기 제2 비교 결과의 논리 연산 결과를 기초로 스왐핑(swamping)의 발생 여부를 검출하는 단계;를 포함하는 부동소수점 연산 장치의 부동소수점 연산 방법을 제공할 수 있다.
여기서, 상기 최종 연산 결과를 제1 레지스터 또는 제2 레지스터에 저장하는 단계를 더 포함할 수 있다.
또한, 상기 검출하는 단계는, 상기 논리 연산 결과의 적어도 하나가 참이 아닌 경우에 상기 스왐핑이 발생하지 않은 것으로 검출하여 상기 최종 연산 결과를 상기 제1 레지스터에 저장하는 단계를 포함할 수 있다.
또한, 상기 검출하는 단계는, 상기 논리 연산 결과가 모두 참인 경우에 상기 스왐핑이 발생한 것으로 검출하여 상기 최종 연산 결과를 상기 제2 레지스터에 저장하는 단계를 포함할 수 있다.
또한, 상기 제2 레지스터에 저장하는 단계는, 상기 임시 부동소수점 연산 결과를 상기 제1 레지스터에 저장하는 단계를 포함할 수 있다.
또한, 상기 제1 피연산자와 상기 제2 피연산자의 지수부의 가산 결과는 상기 임시 부동소수점 연산 결과의 지수부와 동일할 수 있다.
또한, 상기 제1 피연산자와 상기 제2 피연산자의 지수부의 가산 결과는 상기 임시 부동소수점 연산 결과의 지수부와 1차이 이내로 동일할 수 있다.
본 발명의 실시예에 따르면, 부호부, 지수부 및 가수부를 각각 갖는 제1, 제2 및 제3 피연산자가 입력되면, 상기 제1 및 제2 피연산자의 가수부를 승산하여 임시 부동소수점 연산 결과를 출력하는 승산기; 및 상기 제3 피연산자와 상기 임시 부동소수점 연산 결과를 가산하여 최종 연산 결과를 출력하는 가산기;를 포함하되, 상기 승산기는, 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 출력하고, 상기 제3 피연산자의 지수부와 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 비교한 감산 결과를 출력하며, 상기 감산 결과와 상기 제3 피연산자의 가수 비트 수의 크기를 비교하고, 상기 감산 결과가 상기 제3 피연산자의 가수 비트 수보다 크면 제2 비교 결과를 출력하며, 상기 제1 및 제2 피연산자의 지수부가 모두 0이면 제1 비교 결과를 출력하고, 상기 제1 비교 결과와 상기 제2 비교 결과의 논리 연산 결과를 기초로 스왐핑의 발생 여부를 검출하는 스왐핑 검출기;를 더 포함하는 부동소수점 연산 장치를 제공할 수 있다.
여기서, 상기 승산기는, 상기 최종 연산 결과를 제1 레지스터 또는 제2 레지스터에 저장할 수 있다.
또한, 상기 승산기는, 상기 논리 연산 결과의 적어도 하나가 참이 아닌 경우에 상기 스왐핑이 발생하지 않은 것으로 검출하여 상기 최종 연산 결과를 상기 제1 레지스터에 저장할 수 있다.
또한, 상기 승산기는, 상기 논리 연산 결과가 모두 참인 경우에 상기 스왐핑이 발생한 것으로 검출하여 상기 최종 연산 결과를 상기 제2 레지스터에 저장할 수 있다.
또한, 상기 승산기는, 상기 최종 연산 결과를 상기 제2 레지스터에 저장하는 경우에 상기 임시 부동소수점 연산 결과를 상기 제1 레지스터에 저장할 수 있다.
또한, 상기 제1 피연산자와 상기 제2 피연산자의 지수부의 가산 결과는 상기 임시 부동소수점 연산 결과의 지수부와 동일할 수 있다.
또한, 상기 제1 피연산자와 상기 제2 피연산자의 지수부의 가산 결과는 상기 임시 부동소수점 연산 결과의 지수부와 1차이 이내로 동일할 수 있다.
본 발명의 실시예에 따르면, 컴퓨터 프로그램을 저장하고 있는 컴퓨터 판독 가능 기록매체로서, 상기 컴퓨터 프로그램은, 부동소수점 연산 장치의 부동소수점 연산 방법을 프로세서가 수행하도록 하기 위한 명령어를 포함하고, 상기 방법은, 상기 부동소수점 연산 장치로 부호부, 지수부 및 가수부를 각각 갖는 제1, 제2 및 제3 피연산자를 입력하는 단계; 상기 제1 및 제2 피연산자가 모두 0이면 제1 비교 결과를 출력하는 단계; 상기 제1 및 제2 피연산자의 가수부를 승산하여 임시 부동소수점 연산 결과를 출력하는 승산 단계; 및 상기 제3 피연산자와 상기 임시 부동소수점 연산 결과를 가산하여 최종 연산 결과를 출력하는 가산 단계;를 포함하되, 상기 승산 단계는, 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 출력하는 단계; 상기 제3 피연산자의 지수부와 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 비교한 감산 결과를 출력하는 단계; 상기 감산 결과와 상기 제3 피연산자의 가수 비트 수의 크기를 비교하는 단계; 상기 감산 결과가 상기 제3 피연산자의 가수 비트 수보다 크면 제2 비교 결과를 출력하는 단계; 및 상기 제1 비교 결과와 상기 제2 비교 결과의 논리 연산 결과를 기초로 스왐핑(swamping)의 발생 여부를 검출하는 단계;를 포함할 수 있다.
본 발명의 실시예에 따르면, 컴퓨터 판독 가능 기록매체에 저장된 컴퓨터 프로그램으로서, 상기 컴퓨터 프로그램은, 부동소수점 연산 장치의 부동소수점 연산 방법을 프로세서가 수행하도록 하기 위한 명령어를 포함하고, 상기 방법은, 상기 부동소수점 연산 장치로 부호부, 지수부 및 가수부를 각각 갖는 제1, 제2 및 제3 피연산자를 입력하는 단계; 상기 제1 및 제2 피연산자가 모두 0이면 제1 비교 결과를 출력하는 단계; 상기 제1 및 제2 피연산자의 가수부를 승산하여 임시 부동소수점 연산 결과를 출력하는 승산 단계; 및 상기 제3 피연산자와 상기 임시 부동소수점 연산 결과를 가산하여 최종 연산 결과를 출력하는 가산 단계;를 포함하되, 상기 승산 단계는, 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 출력하는 단계; 상기 제3 피연산자의 지수부와 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 비교한 감산 결과를 출력하는 단계; 상기 감산 결과와 상기 제3 피연산자의 가수 비트 수의 크기를 비교하는 단계; 상기 감산 결과가 상기 제3 피연산자의 가수 비트 수보다 크면 제2 비교 결과를 출력하는 단계; 및 상기 제1 비교 결과와 상기 제2 비교 결과의 논리 연산 결과를 기초로 스왐핑(swamping)의 발생 여부를 검출하는 단계;를 포함할 수 있다.
본 발명의 실시예에 의하면, 스왐핑을 하드웨어적으로 자동으로 감지하므로, 프로그래머가 스왐핑을 회피하기 위해 덧셈 트리(tree)를 소프트웨어 적으로 구성하거나 혹은 스왐핑이 발생했는지 여부를 감지하는 부수적인 제어 플로우(control flow)를 발생시킬 필요가 없다. 이로 인해, 스왐핑의 오감지로서 일어나는 알고리즘적인 성능 저하나, 제어 플로우로부터 발생하는 오버헤드(overhead)로부터 일어나는 속도 면의 성능 저하가 발생하지 않는다. 또한, 스왐핑이 발생할 때까지 제1 레지스터에 가산된 값만 제2 레지스터에 가산됨으로써 1단계의 덧셈 트리를 하드웨어적으로 구현하였다고 할 수 있으며, 이는 스왐핑에 대응하는 가수 비트(bit) 부분이 2배가 된 것과 동일한 효과를 가질 수 있다.
도 1은 본 발명의 실시예에 따른 부동소수점 연산 장치의 기능을 설명하는 블록도이다.
도 2는 본 발명의 실시예에 따른 부동소수점 연산 장치의 세부 기능을 설명하는 블록도이다.
도 3은 본 발명의 실시예에 따른 부동소수점 연산 장치의 부동소수점 연산 과정을 예시적으로 설명하는 흐름도이다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나, 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명의 범주는 청구항에 의해 정의될 뿐이다.
본 발명의 실시예들을 설명함에 있어서 공지 기능 또는 구성에 대한 구체적인 설명은 본 발명의 실시예들을 설명함에 있어 실제로 필요한 경우 외에는 생략될 것이다. 그리고 후술되는 용어들은 본 발명의 실시예에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
부동소수점의 표현은 1개의 부호(sign) 비트, E개의 지수 비트, M개의 가수 비트로 이루어질 수 있다. 예를 들어, 32 비트(bit)의 부동소수점 표현은 E = 8, M = 23 이며, 최근 인공지능에서 많이 사용되는 bfloat16 형의 경우 E = 8, M = 7 이다. 두 개의 부동소수점 표현의 수를 가산하기 위해서는 지수 부분을 동일하게 하여 자릿수를 맞춘 뒤, 가수 부분을 가산하게 된다. 예를 들어, 값 A의 지수가 3, 값 B의 지수가 0이면, 값 B의 지수에 3를 가산하고 가수를 8로 나누어 가수의 자릿수를 맞추게 된다. 이후, 가수끼리 가산하여 가산 연산을 진행하게 된다.
이때, bfloat16 형에서 지수 차이가 7 이상 나게 되면, 자릿수를 맞추기 위해 작은 수의 가수를 2의 7 제곱으로 나눠야 한다. 하지만 bfloat16 형의 가수 비트 수는 7이므로, bfloat16 형에서는 더해도 의미가 없는 값이 되어 버린다. 이렇게 부동소수점 표현의 합에서 가수의 비트 수가 모자라 더해지지 않는 현상을 스왐핑이라고 한다. 스왐핑 현상은 가수의 비트가 적어지면 심해지며, 특히 최근 인공지능 연산이나 고성능 컴퓨팅에서 필요한 높은 연산량을 지원하기 위해 제작되는 반도체들이 저 정밀도의 부동소수점 연산 장치를 사용하기 시작하면서 이런 현상을 실제 현장에서도 목격할 수 있게 되었다.
인공지능 연산에서 주로 목격되는 곳 중 한 곳은 정규화(normalization) 연산으로, 보통 텐서(tensor)의 값을 텐서 전체 성분의 평균과 분산을 구해 정규화할 때 나타난다. 텐서의 평균과 분산을 구할 때 텐서 내의 원소 수만큼 개수를 값을 더하게 되는데, bfloat16 형의 경우 각 원소의 값의 크기가 비슷하다고 할 때 128개만 더해도 그 이후 원소에 대해서는 스왐핑 현상이 발생하게 된다. 딥 뉴럴 네트워크의 대표 네트워크인 ResNet50의 첫 정규화에 들어가는 원소 수가 대략 20만 개인 것을 감안하면, 128개는 매우 엄격한 제한 요소임을 알 수 있다. 또한, 32 비트 단정밀도 연산의 경우, 가수 표현 범위가 8백만에 가까웠던 것과 비교하여도 128개는 매우 적은 값임을 알 수 있다.
정규화 등의 과정에서 발생하는 스왐핑을 해결하기 위한 현재의 방법은 소프트웨어로 표현된 덧셈 트리이다. 이 방식에서는 하나의 레지스터에 순차적으로 값을 가산해 나가는 대신, 여러 개의 레지스터에 나누어 값을 가산해 나간다. 하지만, 이 경우 추가적인 덧셈 연산이 필요하며, 레지스터를 여러 개 사용하게 된다. 또한, 몇 개의 원소를 하나의 레지스터에 저장해야 하는지 데이터의 값 분포를 알지 못하면 정확하게 정할 수 없고, 각 그룹에 큰 이상치가 존재하여도 능동적으로 대처하지 못하는 한계가 있다.
확률적 반올림(stochastic rounding)은 스왐핑이 발생했을 때 이를 확률적으로 보상하는 알고리즘으로, 서로 다른 분포의 값을 더해야 하는 가중치 갱신(weight update) 등의 상황에서 사용되는 알고리즘이다. 해당 알고리즘은 동일한 분포 내의 값을 가산해 나가는 데에 사용되는 알고리즘은 아니므로 본 발명과는 다른 범위의 기법이라고 할 수 있다.
일반적으로 스왐핑 오류는 소프트웨어 적인 기법으로 피할 수 있다. 스왐핑이 발생했는지 계산 전 후 값을 항상 비교할 수 있다. 혹은 가산될 입력 값들을 여러 집단으로 나누어, 각 집단 내에서 가산 값을 구한 뒤에 집단 합의 가산 결과를 구하는 방법으로 큰 수와 작은 수의 가산 과정을 피할 수 있다. 더해야 할 값이 적을 때에는 확률적 반올림과 같은 기법을 소프트웨어나 하드웨어적으로 구현하여 처리하고 있다. 값을 항상 비교하는 방식은 제어 플로우(control-flow)를 발생시켜 프로그램의 효율적인 실행을 저해한다. 집단 합으로 가산해 나가는 방법은 집단 합끼리의 가산 연산이 추가적으로 필요하며, 집단의 크기를 얼마로 하여야 할지 정해야 하는 단점이 있다. 확률적 반올림의 경우 랜덤 수 생성기(random number generator)가 필요하며, 평균이나 분산 등 특정 분포를 가진 많은 수를 더할 때에는 부적절하다.
본 발명의 실시예에서는, 인공지능 용 반도체에 주로 사용되는 FMAC 유닛을 변형하여 스왐핑 오류를 회피할 수 있는 부동소수점 연산 기술을 제안하고자 한다.
본 발명의 실시예에서는 스왐핑을 FMAC 유닛의 초기 단계에서 감지하며, 이를 통해 FMAC 유닛의 후기 단계의 데이터 이동을 변화시킬 수 있는 부동소수점 연산 기술을 제안하고자 한다.
본 발명의 실시예에서는, 두 개의 저장 레지스터(register)를 포함하고, 제1 레지스터에는 작은 값을 가산하며, 스왐핑이 발생할 경우 제1 레지스터에 저장된 값을 제2 레지스터에 가산하는 부동소수점 연산 기술을 제안하고자 한다.
제2 레지스터는 제1 레지스터에 스왐핑이 발생하는 경우에만 값을 가산하므로, 일반적으로 큰 값들만 골라서 가산하는 경우에 해당되며, 이와 같은 방식으로 매우 작은 값에 큰 값을 가산하는 경우를 피할 수 있다.
본 발명의 실시예에서는, 가산한 결과를 저장하는 누산 레지스터(accumulation register)를 추가 구성함으로써 스왐핑 현상을 해결하고자 한다. 구체적으로, 본 발명은 스왐핑 검출 로직(swamping detector logic)과, 누산 레지스터에서 부동소수점 연산 장치로 인가되는 바이패스 로직(bypass logic)을 추가하여 하드웨어적으로 스왐핑 오류를 회피할 수 있는 부동소수점 연산 기술을 제안하고자 한다.
이하, 첨부된 도면을 참조하여 본 발명의 실시예에 대해 상세히 설명하기로 한다.
도 1은 본 발명의 실시예에 따른 부동소수점 연산 장치(100)의 기능을 설명하는 블록도이다.
도 1에 도시한 바와 같이, 부동소수점 연산 장치(100)는 스왐핑 검출기(110), 가산기(120), 승산기(130), 제1 레지스터(140) 및 제2 레지스터(150)를 포함할 수 있다.
부동소수점 연산 장치(110)는 입력되는 피연산자의 지수부가 모두 0일 경우에 1비트의 비교 결과를 출력할 수 있다.
스왐핑 검출기(110)는 이러한 비교 결과와, 또 다른 피연산자의 지수부의 감산 결과 및 가수의 크기를 비교한 비교 결과의 논리 연산 결과를 기초로 스왐핑의 발생 여부를 검출할 수 있다.
가산기(120)는 피연산자와 부동소수점 연산 결과를 가산하여 연산 결과를 출력할 수 있다.
승산기(130)는 피연산자의 가수부를 승산하여 부동소수점 연산 결과를 출력할 수 있다. 이러한 승산기(130)는 제1 및 제2 피연산자의 지수부의 가산 결과를 출력하고, 제3 피연산자의 지수부와 제1 및 제2 피연산자의 지수부의 가산 결과를 비교한 감산 결과를 출력하며, 감산 결과와 제3 피연산자의 가수 비트 수의 크기를 비교하고, 감산 결과가 제3 피연산자의 가수 비트 수보다 크면 제2 비교 결과를 출력할 수 있다.
본 발명은 스왐핑을 부동소수점 연산 과정의 초기 단계에서 감지하며, 이를 통해 부동소수점 연산 과정의 후기 단계의 데이터 이동을 변화시키는 것을 특징으로 한다.
본 발명의 부동소수점 연산 장치(100)는 두 개의 저장 레지스터인 제1 레지스터(140)와 제2 레지스터(150)를 포함하며, 제1 레지스터(140)는 작은 값을 더해가고 제2 레지스터(150)는 스왐핑 발생이 검출되는 경우에 제1 레지스터(140)에 저장되어 있던 값을 가산해 나갈 수 있다.
제2 레지스터(150)는 제1 레지스터(140)에 스왐핑 발생이 검출되는 경우에만 값을 가산하므로, 일반적으로 큰 값들만 골라서 가산하는 것으로 정의할 수 있다.
이와 같은 방식으로 매우 작은 값에 큰 값을 가산하는 경우를 피할 수 있다.
도 2는 본 발명의 실시예에 따른 부동소수점 연산 장치(100)의 세부 기능을 설명하는 블록도이다.
본 발명에서 제안하는 부동소수점 연산 장치(100)는 범용적인 프로그래머블한 중앙처리장치(CPU)나 그래픽연산장치(GPU), 혹은 특수 목적의 프로그래머블한 디지털신호처리장치(DSP)나 ASIP(application specific instruction set processor), 혹은 특수 목적의 가속기에 포함될 수 있다.
프로그래머블한 장치의 경우는 스왐핑 탐지 기능을 인에이블(enable)할 수 있는 명령어가 존재하며, 해당 명령어는 디코더(decoder)에서 디코딩되어 부동소수점 연산 장치(100)에 스왐핑 탐지를 인에이블하는 1 비트의 신호를 보낸다.
특수 목적의 가속기의 경우 별다른 명령어가 존재하지 않아 스왐핑 탐지는 항상 인에이블로 설정되어 있을 수 있다.
해당 명령어는 입력 레지스터로 피연산자인 A, B 및 C와 제1 레지스터(140) 및 제2 레지스터(150)를 지정할 수 있으며, 출력 레지스터로는 제1 레지스터(140) 및 제2 레지스터(150)를 지정할 수 있다.
입력 레지스터와 출력 레지스터의 제1 레지스터(140) 및 제2 레지스터(150)는 각각 동일할 수 있으며, 이를 통해 명령어의 길이를 줄일 수 있다.
입력 레지스터의 제1 레지스터와 피연산자 C는 동일할 수 있으며, 이를 통해 명령어의 길이를 줄일 수 있다.
제1 레지스터(140) 및 제2 레지스터(150)는 피연산자 A 및 B와는 다른 레지스터 파일에 위치할 수도 있으며, 혹은 제안하는 부동소수점 연산 장치(100)의 내부에 존재할 수도 있다.
레지스터에서 읽어진 피연산자 A, B 및 C와, 제1 레지스터(140) 및 제2 레지스터(150)는 제안하는 부동소수점 연산 장치(100)로 보내지며, 제안하는 부동소수점 연산 장치(100)는 제1 레지스터(140) 및 제2 레지스터(150)를 정해진 레이턴시(latency) 내에 출력하게 되며, 이들은 다시 레지스터 파일에 저장되게 된다.
도 3은 본 발명의 실시예에 따른 부동소수점 연산 장치(100)의 부동소수점 연산 과정을 예시적으로 설명하는 흐름도이다.
본 발명의 실시예에 따른 부동소수점 연산 장치(100)는 일반 모드와 스왐핑 회피(swamping avoid) 모드로 동작될 수 있으며, 부동소수점 연산 장치(100)의 모드를 제어하는 제어 비트가 추가로 입력될 수 있다.
부동소수점 연산 장치(100)는 승산 단계(multiply stage)와 가산 단계(add stage)로 구분될 수 있다.
먼저, 부동소수점 연산 장치(100)로 부호부, 지수부 및 가수부를 각각 갖는 제1 피연산자(A), 제2 피연산자(B) 및 제3 피연산자(C)가 입력될 수 있다(S100).
제1 피연산자(A)와 제2 피연산자(B)의 지수부가 모두 0인지를 비교하고, 비교에 의해 제1 비교 결과(F)를 출력할 수 있다(S102, S104).
승산 단계에서는 부동소수점 입력인 제1 피연산자(A)와 제2 피연산자(B)를 받아 임시 부동소수점 연산 결과(T)를 출력할 수 있다(S106). 가산 단계에서는 새로운 입력인 제3 피연산자(C)와 임시 부동소수점 연산 결과(T)를 가산하여 최종 연산 결과(R)을 출력할 수 있다.
이때, 부동소수점 연산 장치(100)의 승산 단계에서 지수부의 가산이 이루어지며, 여기서 나오는 값인 지수부의 가산 결과(D)는 임시 부동소수점 연산 결과(T)의 지수 값과 1 차이 내에서 동일한 값이다(S106).
이후, 부동소수점 연산 장치(100)는 승산 단계에서 가수부의 승산이 진행되는 동안에, 제3 피연산자(C)의 지수부와 가산 결과(D)를 비교하고, 비교에 의한 감산 결과를 출력할 수 있다(S108).
이후, 부동소수점 연산 장치(100)는 이러한 감산 결과와 제3 피연산자(C)의 가수 비트 수를 비교하여 1 비트의 제2 비교 결과(E)를 출력할 수 있다(S110).
부동소수점 연산 장치(100)는 이러한 제2 비교 결과(E)와, 앞서 출력된 제1 비교 결과(F)의 논리 연산 결과를 기초로 스왐핑 발생 여부를 검출할 수 있다(S112).
예를 들어, 부동소수점 연산 장치(100)는 제1 비교 결과(F)와 제2 비교 결과(E)의 논리 연산 결과가 모두 참일 경우에, 해당 부동소수점 연산은 스왐핑이 발생한 것으로 검출할 수 있다. 해당 부동소수점 연산에 대해 스왐핑이 발생한 것으로 검출되면, 임시 부동소수점 연산 결과(T) 대신 큰 값을 저장하고 있던 레지스터인 제2 레지스터(150)가 입력으로 들어오게 됨으로써, 임시 부동소수점 연산 결과(T)는 제1 레지스터(140)에 저장되고, 최종 연산 결과(R)는 제2 레지스터(150)에 저장된다. 이로 인해, 본 발명은 부동소수점 연산 장치(100)의 가산 단계 이전에 스왐핑 여부를 신속하게 탐지할 수 있다.
반면, 부동소수점 연산 장치(100)는 제1 비교 결과(F)와 제2 비교 결과(E)의 논리 연산 결과의 적어도 하나가 참이 아닌 경우에, 해당 부동소수점 연산은 스왐핑이 발생하지 않은 것으로 검출할 수 있다. 스왐핑이 발생하지 않은 것으로 검출한 경우, 임시 부동소수점 연산 결과(T)는 가산 단계로 입력될 수 있으며, 최종 연산 결과(R)은 제1 레지스터(140)에 저장될 수 있다.
이상 설명한 바와 같은 본 발명의 실시예에 의하면, 스왐핑을 하드웨어가 자동으로 감지하므로, 프로그래머가 스왐핑을 회피하기 위해 덧셈 트리(tree)를 소프트웨어 적으로 구성하거나 혹은 스왐핑이 발생했는지 여부를 감지하는 부수적인 제어 플로우(control flow)를 발생시키지 않는다. 이로 인해, 스왐핑의 오감지로서 일어나는 알고리즘적인 성능 저하나, 제어 플로우로부터 발생하는 오버헤드(overhead)로부터 일어나는 속도 면의 성능 저하가 발생하지 않는다. 또한, 스왐핑이 발생할 때까지 제1 레지스터에 가산된 값만 제2 레지스터에 가산됨으로써 1 단계의 덧셈 트리를 하드웨어적으로 구현하였다고 할 수 있으며, 이는 스왐핑에 대응하는 가수 비트(bit) 부분이 2배가 된 것과 동일한 효과를 가지게 된다.
딥러닝 프로세서 설계의 주안점은 많은 연산기를 정해진 면적에 넣는 것이며, 이를 위해 높은 정밀도 부동소수점 연산기들의 사용이 꺼려지고 있다. 하지만 딥러닝에 주로 사용되는 정규화(normalize) 연산 시 매우 많은 숫자를 더하는 일이 필수적이다. 본 발명은 이러한 딥러닝 프로세서 시장에 적용될 수 있을 것이라 기대되며. 또한 합, 제곱합 등은 과학 연산에서 계속 사용되고 있으므로, HPC 시장에서도 적용 가능할 것으로 기대된다. 본 발명은 하드웨어 변화가 크지 않으므로, 기존 생산되던 제품에 쉽게 적용 가능할 것으로 예상된다.
한편, 첨부된 블록도의 각 블록과 흐름도의 각 단계의 조합들은 컴퓨터 프로그램 인스트럭션들에 의해 수행될 수도 있다. 이들 컴퓨터 프로그램 인스트럭션들은 범용 컴퓨터, 특수용 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서에 탑재될 수 있으므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서를 통해 수행되는 그 인스트럭션들이 블록도의 각 블록에서 설명된 기능들을 수행하는 수단을 생성하게 된다.
이들 컴퓨터 프로그램 인스트럭션들은 특정 방식으로 기능을 구현하기 위해 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 지향할 수 있는 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 기록매체(또는 메모리) 등에 저장되는 것도 가능하므로, 그 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 기록매체(또는 메모리)에 저장된 인스트럭션들은 블록도의 각 블록에서 설명된 기능을 수행하는 인스트럭션 수단을 내포하는 제조 품목을 생산하는 것도 가능하다.
그리고, 컴퓨터 프로그램 인스트럭션들은 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에 탑재되는 것도 가능하므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에서 일련의 동작 단계들이 수행되어 컴퓨터로 실행되는 프로세스를 생성해서 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 수행하는 인스트럭션들은 블록도의 각 블록에서 설명된 기능들을 실행하기 위한 단계들을 제공하는 것도 가능하다.
또한, 각 블록은 특정된 논리적 기능(들)을 실행하기 위한 적어도 하나 이상의 실행 가능한 인스트럭션들을 포함하는 모듈, 세그먼트 또는 코드의 일부를 나타낼 수 있다. 또, 몇 가지 대체 실시 예들에서는 블록들에서 언급된 기능들이 순서를 벗어나서 발생하는 것도 가능함을 주목해야 한다. 예컨대, 잇달아 도시되어 있는 두 개의 블록들은 사실 실질적으로 동시에 수행되는 것도 가능하고 또는 그 블록들이 때때로 해당하는 기능에 따라 역순으로 수행되는 것도 가능하다.
100: 부동소수점 연산 장치
110: 스왐핑 검출기
120: 가산기
130: 승산기
140: 제1 레지스터
150: 제2 레지스터

Claims (16)

  1. 부동소수점 연산 장치의 부동 소수점 연산 방법에 있어서,
    상기 부동소수점 연산 장치로 부호부, 지수부 및 가수부를 각각 갖는 제1, 제2 및 제3 피연산자를 입력하는 단계;
    상기 제1 및 제2 피연산자의 지수부가 모두 0이면 제1 비교 결과를 출력하는 단계;
    상기 제1 및 제2 피연산자의 가수부를 승산하여 임시 부동소수점 연산 결과를 출력하는 승산 단계; 및
    상기 제3 피연산자와 상기 임시 부동소수점 연산 결과를 가산하여 최종 연산 결과를 출력하는 가산 단계;를 포함하되,
    상기 승산 단계는,
    상기 제1 및 제2 피연산자의 지수부의 가산 결과를 출력하는 단계;
    상기 제3 피연산자의 지수부와 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 비교한 감산 결과를 출력하는 단계;
    상기 감산 결과와 상기 제3 피연산자의 가수 비트 수의 크기를 비교하는 단계;
    상기 감산 결과가 상기 제3 피연산자의 가수 비트 수보다 크면 제2 비교 결과를 출력하는 단계; 및
    상기 제1 비교 결과와 상기 제2 비교 결과의 논리 연산 결과를 기초로 스왐핑(swamping)의 발생 여부를 검출하는 단계;를 포함하는
    부동소수점 연산 장치의 부동소수점 연산 방법.
  2. 제 1 항에 있어서,
    상기 최종 연산 결과를 제1 레지스터 또는 제2 레지스터에 저장하는 단계를 더 포함하는
    부동소수점 연산 장치의 부동소수점 연산 방법.
  3. 제 2 항에 있어서,
    상기 검출하는 단계는,
    상기 논리 연산 결과의 적어도 하나가 참이 아닌 경우에 상기 스왐핑이 발생하지 않은 것으로 검출하여 상기 최종 연산 결과를 상기 제1 레지스터에 저장하는 단계를 포함하는
    부동소수점 연산 장치의 부동소수점 연산 방법.
  4. 제 2 항에 있어서,
    상기 검출하는 단계는,
    상기 논리 연산 결과가 모두 참인 경우에 상기 스왐핑이 발생한 것으로 검출하여 상기 최종 연산 결과를 상기 제2 레지스터에 저장하는 단계를 포함하는
    부동소수점 연산 장치의 부동소수점 연산 방법.
  5. 제 4 항에 있어서,
    상기 제2 레지스터에 저장하는 단계는,
    상기 임시 부동소수점 연산 결과를 상기 제1 레지스터에 저장하는 단계를 포함하는
    부동소수점 연산 장치의 부동소수점 연산 방법.
  6. 제 1 항에 있어서,
    상기 제1 피연산자와 상기 제2 피연산자의 지수부의 가산 결과는 상기 임시 부동소수점 연산 결과의 지수부와 동일한
    부동소수점 연산 장치의 부동소수점 연산 방법.
  7. 제 6 항에 있어서,
    상기 제1 피연산자와 상기 제2 피연산자의 지수부의 가산 결과는 상기 임시 부동소수점 연산 결과의 지수부와 1차이 이내로 동일한
    부동소수점 연산 장치의 부동소수점 연산 방법.
  8. 부호부, 지수부 및 가수부를 각각 갖는 제1, 제2 및 제3 피연산자가 입력되면, 상기 제1 및 제2 피연산자의 가수부를 승산하여 임시 부동소수점 연산 결과를 출력하는 승산기; 및
    상기 제3 피연산자와 상기 임시 부동소수점 연산 결과를 가산하여 최종 연산 결과를 출력하는 가산기;를 포함하되,
    상기 승산기는, 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 출력하고, 상기 제3 피연산자의 지수부와 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 비교한 감산 결과를 출력하며, 상기 감산 결과와 상기 제3 피연산자의 가수 비트 수의 크기를 비교하고, 상기 감산 결과가 상기 제3 피연산자의 가수 비트 수보다 크면 제2 비교 결과를 출력하며,
    상기 제1 및 제2 피연산자의 지수부가 모두 0이면 제1 비교 결과를 출력하고, 상기 제1 비교 결과와 상기 제2 비교 결과의 논리 연산 결과를 기초로 스왐핑의 발생 여부를 검출하는 스왐핑 검출기;를 더 포함하는
    부동소수점 연산 장치.
  9. 제 8 항에 있어서,
    상기 승산기는, 상기 최종 연산 결과를 제1 레지스터 또는 제2 레지스터에 저장하는
    부동소수점 연산 장치.
  10. 제 9 항에 있어서,
    상기 승산기는, 상기 논리 연산 결과의 적어도 하나가 참이 아닌 경우에 상기 스왐핑이 발생하지 않은 것으로 검출하여 상기 최종 연산 결과를 상기 제1 레지스터에 저장하는
    부동소수점 연산 장치.
  11. 제 9 항에 있어서,
    상기 승산기는, 상기 논리 연산 결과가 모두 참인 경우에 상기 스왐핑이 발생한 것으로 검출하여 상기 최종 연산 결과를 상기 제2 레지스터에 저장하는
    부동소수점 연산 장치.
  12. 제 11 항에 있어서,
    상기 승산기는, 상기 최종 연산 결과를 상기 제2 레지스터에 저장하는 경우에 상기 임시 부동소수점 연산 결과를 상기 제1 레지스터에 저장하는
    부동소수점 연산 장치.
  13. 제 8 항에 있어서,
    상기 제1 피연산자와 상기 제2 피연산자의 지수부의 가산 결과는 상기 임시 부동소수점 연산 결과의 지수부와 동일한
    부동소수점 연산 장치.
  14. 제 13 항에 있어서,
    상기 제1 피연산자와 상기 제2 피연산자의 지수부의 가산 결과는 상기 임시 부동소수점 연산 결과의 지수부와 1차이 이내로 동일한
    부동소수점 연산 장치.
  15. 컴퓨터 프로그램을 저장하고 있는 컴퓨터 판독 가능 기록매체로서,
    상기 컴퓨터 프로그램은,
    부동소수점 연산 장치의 부동소수점 연산 방법을 프로세서가 수행하도록 하기 위한 명령어를 포함하고,
    상기 방법은,
    상기 부동소수점 연산 장치로 부호부, 지수부 및 가수부를 각각 갖는 제1, 제2 및 제3 피연산자를 입력하는 단계;
    상기 제1 및 제2 피연산자가 모두 0이면 제1 비교 결과를 출력하는 단계;
    상기 제1 및 제2 피연산자의 가수부를 승산하여 임시 부동소수점 연산 결과를 출력하는 승산 단계; 및
    상기 제3 피연산자와 상기 임시 부동소수점 연산 결과를 가산하여 최종 연산 결과를 출력하는 가산 단계;를 포함하되,
    상기 승산 단계는,
    상기 제1 및 제2 피연산자의 지수부의 가산 결과를 출력하는 단계;
    상기 제3 피연산자의 지수부와 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 비교한 감산 결과를 출력하는 단계;
    상기 감산 결과와 상기 제3 피연산자의 가수 비트 수의 크기를 비교하는 단계;
    상기 감산 결과가 상기 제3 피연산자의 가수 비트 수보다 크면 제2 비교 결과를 출력하는 단계; 및
    상기 제1 비교 결과와 상기 제2 비교 결과의 논리 연산 결과를 기초로 스왐핑(swamping)의 발생 여부를 검출하는 단계;를 포함하는
    컴퓨터 판독 가능한 기록매체.
  16. 컴퓨터 판독 가능 기록매체에 저장된 컴퓨터 프로그램으로서,
    상기 컴퓨터 프로그램은,
    부동소수점 연산 장치의 부동소수점 연산 방법을 프로세서가 수행하도록 하기 위한 명령어를 포함하고,
    상기 방법은,
    상기 부동소수점 연산 장치로 부호부, 지수부 및 가수부를 각각 갖는 제1, 제2 및 제3 피연산자를 입력하는 단계;
    상기 제1 및 제2 피연산자가 모두 0이면 제1 비교 결과를 출력하는 단계;
    상기 제1 및 제2 피연산자의 가수부를 승산하여 임시 부동소수점 연산 결과를 출력하는 승산 단계; 및
    상기 제3 피연산자와 상기 임시 부동소수점 연산 결과를 가산하여 최종 연산 결과를 출력하는 가산 단계;를 포함하되,
    상기 승산 단계는,
    상기 제1 및 제2 피연산자의 지수부의 가산 결과를 출력하는 단계;
    상기 제3 피연산자의 지수부와 상기 제1 및 제2 피연산자의 지수부의 가산 결과를 비교한 감산 결과를 출력하는 단계;
    상기 감산 결과와 상기 제3 피연산자의 가수 비트 수의 크기를 비교하는 단계;
    상기 감산 결과가 상기 제3 피연산자의 가수 비트 수보다 크면 제2 비교 결과를 출력하는 단계; 및
    상기 제1 비교 결과와 상기 제2 비교 결과의 논리 연산 결과를 기초로 스왐핑(swamping)의 발생 여부를 검출하는 단계;를 포함하는
    기록매체에 저장된 컴퓨터 프로그램.

KR1020230191961A 2022-12-26 2023-12-26 부동소수점 연산 방법 및 연산 장치 KR20240102915A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020220184449 2022-12-26

Publications (1)

Publication Number Publication Date
KR20240102915A true KR20240102915A (ko) 2024-07-03

Family

ID=

Similar Documents

Publication Publication Date Title
US9886239B2 (en) Exponent monitoring
JP5175379B2 (ja) 選択可能な下位精度を有する浮動小数点プロセッサ
US9606770B2 (en) Multiply add functional unit capable of executing SCALE, ROUND, GETEXP, ROUND, GETMANT, REDUCE, RANGE and CLASS instructions
US9519460B1 (en) Universal single instruction multiple data multiplier and wide accumulator unit
JP6744913B2 (ja) 浮動小数点数の丸め処理
CN110168493B (zh) 在128位宽的操作数上的融合乘加浮点运算
JP6882281B2 (ja) ベクトルの処理のためのレーン位置情報
KR20080098440A (ko) 선택가능한 하위 정밀도에 대하여 감소된 전력 요구조건들을 가지는 부동 소수점 프로세서
JP2021525403A (ja) 改良された低精度の2進浮動小数点形式設定
CN106250098B (zh) 用于在执行浮点运算时控制舍入的装置及方法
US11106431B2 (en) Apparatus and method of fast floating-point adder tree for neural networks
EP3769208B1 (en) Stochastic rounding logic
JP4476210B2 (ja) 逆数演算の結果値の初期推定値を求めるデータ処理装置および方法
Franceschi et al. Tunable floating-point for artificial neural networks
JP2006228190A (ja) 入力値に逆数演算を実施して結果値を作り出すデータ処理装置および方法
US10241756B2 (en) Tiny detection in a floating-point unit
CN112835551A (zh) 用于处理单元的数据处理方法、电子设备和计算机可读存储介质
US20230401420A1 (en) Compiling asymmetrically-quantized neural network models for deep learning acceleration
KR20240102915A (ko) 부동소수점 연산 방법 및 연산 장치
US8041927B2 (en) Processor apparatus and method of processing multiple data by single instructions
JP4613992B2 (ja) Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ
Hass Synthesizing optimal fixed-point arithmetic for embedded signal processing
US20240211211A1 (en) Mac apparatus using floating point unit and control method thereof
Underwood et al. IEEE floating-point extension for containing er-ror in the RISC-V architecture
Underwood Ieee Floating-Point Extension for Managing Error Using Residual Registers