KR20230018742A - 부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치 - Google Patents

부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치 Download PDF

Info

Publication number
KR20230018742A
KR20230018742A KR1020210100619A KR20210100619A KR20230018742A KR 20230018742 A KR20230018742 A KR 20230018742A KR 1020210100619 A KR1020210100619 A KR 1020210100619A KR 20210100619 A KR20210100619 A KR 20210100619A KR 20230018742 A KR20230018742 A KR 20230018742A
Authority
KR
South Korea
Prior art keywords
input
function
approximation
value
exponent
Prior art date
Application number
KR1020210100619A
Other languages
English (en)
Other versions
KR102670314B1 (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 주식회사 사피온코리아
Priority to KR1020210100619A priority Critical patent/KR102670314B1/ko
Priority claimed from KR1020210100619A external-priority patent/KR102670314B1/ko
Priority to PCT/KR2022/011592 priority patent/WO2023008984A1/ko
Publication of KR20230018742A publication Critical patent/KR20230018742A/ko
Application granted granted Critical
Publication of KR102670314B1 publication Critical patent/KR102670314B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/17Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method
    • 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
    • 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
    • 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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/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/556Logarithmic or exponential functions
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Nonlinear Science (AREA)
  • Complex Calculations (AREA)

Abstract

부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치를 개시한다.
본 발명의 일 측면에 의하면, 부동 소수점 표현에서 함수 근사의 연산을 위한 컴퓨터 구현 방법에 있어서 입력의 지수부를 기 설정된 값으로 치환함으로써 전처리된 입력을 생성하고, 상기 입력의 지수부의 치환에 따른 오프셋(offset)을 생성하는 제1 명령어 실행 단계; 상기 전처리된 입력에 대해 함수의 근사 결과를 구하는 제2 명령어 실행 단계; 및 상기 오프셋을 이용하여 상기 근사 결과를 후처리함으로써, 상기 입력에 대한 상기 함수의 근사값을 계산하는 제3 명령어 실행 단계를 포함하는 방법 및 장치를 제공한다.

Description

부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치{Device and Method for Calculating Function Approximation in Floating Point}
본 발명의 실시예들은 부동 소수점 표현을 이용한 함수 근사를 연산하는 방법 및 장치, 자세하게는 부동 소수점 포맷에 기반하여 최소한의 명령어들을 이용하여 함수의 근사값을 계산하는 방법 및 장치에 관한 것이다.
이 부분에 기술된 내용은 단순히 본 발명에 대한 배경 정보를 제공할 뿐 종래기술을 구성하는 것은 아니다.
뉴럴 네트워크(Neural network) 분야에서는 다양한 초월 함수들이 연산에 이용된다. 초월 함수의 예로써, 지수 함수(exponential function), 로그 함수(logarithmic function), 또는 제곱근 함수(square root function) 등이 있다. PC, 클라우드 서버와 같은 연산 장치가 초월 함수들의 값을 계산한다.
하지만, 연산 장치가 초월 함수들의 값을 정확하게 계산하기 위해서는 수십 내지 수백 사이클(cycle)의 시간이 소요된다는 문제점이 있다.
이러한 문제점을 해결하기 위해, 초월 함수들의 값을 신속하게 계산하는 방법들이 연구되고 있다. 초월 함수에 대한 연산 시간을 줄이는 방법은 대표적으로 두 가지가 있다.
첫 번째, 초월 함수의 값을 계산하도록 설계된 전용 연산 장치를 추가하는 방법이 있다. 예를 들면, 첫 번째 방법은 하드웨어 가속기 또는 AI(Artificial Intelligent) 가속기를 이용하여 초월 함수의 값을 계산하는 것이다. 첫 번째 방법은 전용 하드웨어를 이용함으로써 초월 함수를 계산하는 데 소요되는 시간을 줄일 수 있다.
하지만, 전용 하드웨어 장치 또는 전용 하드웨어 유닛은 차지하는 면적 또는 부피가 크기 때문에, 첫 번째 방법은 활용도가 떨어진다는 단점이 있다.
두 번째, 초월 함수의 입력 범위를 여러 구간으로 나눈 후 개별 구간에서 초월 함수의 근사값을 출력하는 근사화 방법이 있다. 예를 들면, 두 번째 방법은 개별 구간 마다 초월 함수를 직선 함수 또는 다항 함수 중 어느 하나로 근사화하고, 근사화된 함수를 이용하여 입력 값에 대한 초월 함수의 근사값을 계산한다. 이를 구간별 직선 근사(piecewise linear approximation) 또는 구간별 다항 근사(piecewise polynomial approximation)라 한다.
하지만, 두 번째 방법에 의하면, 초월 함수값의 변화가 큰 개별 구간에서는 근사값의 근사 오차가 커지는 문제점이 있다. 예를 들면, 지수 함수의 입력 값이 클수록 근사 오차가 커지고, 로그 함수의 입력 값이 0에 가까울수록 근사 오차가 커진다.
근사 오차를 줄이기 위해, 두 번째 방법은 입력 값에 전처리(pre-processing)를 적용하고, 근사값에 후처리(pro-processing)를 적용할 수 있다. 여기서, 전처리는 주어진 함수보다 변화량이 적은 함수의 도메인으로 입력 값을 매핑하는 것이다. 후처리는 매핑된 도메인에서 계산된 결과를 원래 도메인으로 변환하는 것이다.
구체적으로, 두 번째 방법은 초월 함수에 따라 입력 값을 전처리하고, 전처리된 값에 대해 함수의 근사값을 구하며, 근사값을 다시 후처리함으로써, 입력 값에 대한 초월 함수의 근사값을 계산할 수 있다. 전처리 및 후처리를 이용하는 근사화 방법은 초월 함수값의 변화가 큰 구간에서 근사 오차를 줄일 수 있다.
하지만, 종래의 초월 함수 근사를 연산하는 방법은 전처리와 후처리를 수행함에 있어서, 부동 소수점(Floating Point; FP) 표현과 정수(integer; INT) 표현을 함께 사용하기 때문에 명령어(instruction)의 수가 많아지는 단점이 있다. 전처리 및 후처리에 따른 명령어의 수로 인해, 초월 함수의 근사값을 계산하는 데 많은 시간이 소요된다.
구체적으로, 종래의 초월 함수 근사를 연산하는 프로세서(processor)는 사칙연산과 같은 산술 명령어들(Arithmetic instructions)을 이용하여 초월 함수 근사를 연산한다. 이때, 프로세서는 부동 소수점 표현과 정수 표현의 수 체계(number system)을 지원한다. 두 가지 수 체계를 지원하기 위해서, 프로세서는 부동 소수점으로 표현된 숫자를 정수로 변환하는 명령어 또는 정수로 표현된 숫자를 부동 소수점으로 변환하는 명령어들을 산술 명령어와 함께 이용한다. 또한, 프로세서는 초월 함수를 위한 전처리와 후처리를 수행함에 있어서, 부동 소수점으로 표현된 수에서 지수(Exponential) 부분의 값을 추출하는 명령어, 지수부의 값을 특정 값으로 바꾸어 주는 명령어, 특정 조건에 따라 지수부에서 추출한 값에 특정 연산을 적용하는 명령어 등 많은 수의 명령어들을 이용한다.
이처럼, 프로세서가 전처리와 후처리를 수행하는 데 많은 명령어들을 실행하고 많은 시간을 소비하기 때문에, 단위 시간당 초월함수 계산 횟수가 낮아지는 문제점이 발생한다. 특히 수 많은 초월함수 값을 계산하는 뉴럴 네트워크에서는 초월함수 값의 계산 처리속도를 효율적으로 높일 수 있는 방법 및 효율적인 명령어 구축에 관한 연구가 필요하다.
본 발명의 실시예들은, 부동 소수점 표현 방식의 수 체계에서 함수 근사를 위한 전처리 및 후처리를 효율적으로 처리할 수 있는 명령어들을 정의하고 이용함으로써, 함수 근사에 필요한 명령어 수 및 소요 시간을 줄이기 위한 연산 방법 및 장치를 제공하는 데 주된 목적이 있다.
본 발명의 다른 실시예들은, 주어진 입력을 함수값의 변화가 적은 도메인으로 매핑(mapping)하여 매핑된 도메인 내에서 함수의 근사값을 구하고, 매핑된 도메인 내 근사값을 다시 주어진 입력의 도메인으로 변환함으로써, 함수값의 변화가 큰 도메인에서도 근사 오차를 줄이기 위한 연산 방법 및 장치를 제공하는 데 일 목적이 있다.
본 발명의 일 측면에 의하면, 부동 소수점 표현에서 함수 근사의 연산을 위한 컴퓨터 구현 방법에 있어서 입력의 지수부를 기 설정된 값으로 치환함으로써 전처리된 입력을 생성하고, 상기 입력의 지수부의 치환에 따른 오프셋(offset)을 생성하는 제1 명령어 실행 단계; 상기 전처리된 입력에 대해 함수의 근사 결과를 구하는 제2 명령어 실행 단계; 및 상기 오프셋을 이용하여 상기 근사 결과를 후처리함으로써, 상기 입력에 대한 상기 함수의 근사값을 계산하는 제3 명령어 실행 단계를 포함하는 방법을 제공한다.
본 실시예의 다른 측면에 의하면, 명령어들을 저장하는 메모리; 및 상기 명령어들을 실행하는 프로세서를 포함하며, 상기 프로세서는, 입력의 지수부를 기 설정된 값으로 치환함으로써 전처리된 입력을 생성하고, 상기 입력의 지수부의 치환에 따른 오프셋(offset)을 생성하고, 상기 전처리된 입력에 대해 상기 함수의 근사 결과를 구하고, 상기 오프셋을 이용하여 상기 근사 결과를 후처리함으로써, 상기 입력에 대한 상기 함수의 근사값을 계산하는, 연산 장치를 제공한다.
본 실시예의 다른 측면에 의하면, 제1항 내지 제12항 중 어느 한 항의 방법을 실행하기 위한 컴퓨터 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체를 제공한다.
이상에서 설명한 바와 같이 본 발명의 일 실시예에 의하면, 부동 소수점 표현 방식의 수 체계에서 함수 근사를 위한 전처리 및 후처리를 효율적으로 처리할 수 있는 명령어들을 정의하고 이용함으로써, 함수 근사에 필요한 명령어 수 및 소요 시간을 줄일 수 있다.
본 발명의 다른 실시예에 의하면, 주어진 입력을 함수값의 변화가 적은 도메인으로 매핑(mapping)하여 매핑된 도메인 내에서 함수의 근사값을 구하고, 매핑된 도메인 내 근사값을 다시 주어진 입력의 도메인으로 변환함으로써, 함수값의 변화가 큰 구간에서도 근사 오차를 줄일 수 있다.
도 1은 본 발명의 일 실시예에 따른 반정밀도 부동 소수점(half-precision floating point)를 설명하기 위해 예시한 도면이다.
도 2는 본 발명의 일 실시예에 따른 연산 시스템에 대한 구성도다.
도 3은 본 발명의 일 실시예에 따라 함수 근사를 연산하는 방법을 설명하기 위한 순서도다.
도 4는 본 발명의 일 실시예에 따라 함수 근사를 연산하기 위한 명령어들을 예시한 도면이다.
도 5a 및 도 5b는 입력에 대한 지수 함수 및 전처리된 입력에 대한 지수 함수를 나타낸 도면이다.
도 5c 및 도 5d는 자연 지수 함수의 근사를 위한 종래의 명령어들과 본 발명의 일 실시예에 따른 명령어들을 비교하기 위한 도면이다.
도 6a 및 도 6b는 입력에 대한 로그 함수 및 전처리된 입력에 대한 로그 함수를 나타낸 도면이다.
도 6c 및 도 6d는 로그 함수의 근사를 위한 종래의 명령어들과 본 발명의 일 실시예에 따른 명령어들을 비교하기 위한 도면이다.
도 7a 및 도 7b는 입력에 대한 제곱근 함수 및 전처리된 입력에 대한 제곱근 함수를 나타낸 도면이다.
도 7c 및 도 7d는 제곱근 함수의 근사를 위한 종래의 명령어들과 본 발명의 일 실시예에 따른 명령어들을 비교하기 위한 도면이다.
도 8a 및 도 8b는 입력에 대한 제곱근의 역수 함수 및 전처리된 입력에 대한 제곱근의 역수 함수를 나타낸 도면이다.
도 8c 및 도 8d는 제곱근의 역수 함수의 근사를 위한 종래의 명령어들과 본 발명의 일 실시예에 따른 명령어들을 비교하기 위한 도면이다.
도 9a 및 도 9b는 입력에 대한 역수 함수 및 전처리된 입력에 대한 역수 함수를 나타낸 도면이다.
도 9c 및 도 9d는 역수 함수의 근사를 위한 종래의 명령어들과 본 발명의 일 실시예에 따른 명령어들을 비교하기 위한 도면이다.
이하, 본 발명의 일부 실시예들을 예시적인 도면을 통해 상세하게 설명한다. 각 도면의 구성요소들에 참조부호를 부가함에 있어서, 동일한 구성요소들에 대해서는 비록 다른 도면 상에 표시되더라도 가능한 한 동일한 부호를 가지도록 하고 있음에 유의해야 한다. 또한, 본 발명을 설명함에 있어, 관련된 공지 구성 또는 기능에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명은 생략한다.
또한, 본 발명의 구성 요소를 설명하는 데 있어서, 제 1, 제 2, A, B, (a), (b) 등의 용어를 사용할 수 있다. 이러한 용어는 그 구성 요소를 다른 구성 요소와 구별하기 위한 것일 뿐, 그 용어에 의해 해당 구성 요소의 본질이나 차례 또는 순서 등이 한정되지 않는다. 명세서 전체에서, 어떤 부분이 어떤 구성요소를 '포함', '구비'한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 명세서에 기재된 '~부', '모듈' 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어나 소프트웨어 또는 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다.
도 1은 본 발명의 일 실시예에 따른 부동 소수점을 설명하기 위해 예시한 도면이다.
도 1을 참조하면, 반정밀도 부동소수점의 구성이 도시되어 있다.
부동 소수점(Floating Point; FP) 표현은 IEEE 표준 754 부동 소수점 표현을 의미한다.
부동 소수점의 정밀도는 반정밀도(half-precision), 단정밀도(single-precision) 및 배정밀도(double-precision) 중 어느 하나일 수 있다. 반정밀도 부동 소수점은 16 비트(bits)로 표현되며, 단정밀도 부동 소수점은 32 비트로 표현되고, 배정밀도 부동 소수점은 64 비트로 표현된다.
부동 소수점의 구성은 부호부(bit sign), 지수부(Exponent; E), 및 가수부(Mantissa; M)를 포함한다. 예를 들어, 반정밀도 부동 소수점은 1 비트의 부호 비트, 5비트의 지수부, 10 비트의 가수부로 구성된다.
단정밀도 부동 소수점 표현은 지수부 및 가수부의 값에 따라 정규값(normalized number), 비정규값(subnormal number), 제로(+/- zero), NaN(Not a Number), 및 무한대(+/- Infinity)를 나타낼 수 있다.
정규값은 일반적은 수를 나타내며, 값을 십진수 표현에서
Figure pat00001
의 형태로 나타낸다. E는 지수부이고, M은 가수부다. 지수부는 바이어스를 포함하는 것을 전제한다. 가수는 암시된 선행하는 1을 가진다. 가수가 선행하는 1을 갖는 수인 경우, 정규값은 값을
Figure pat00002
형태로 표현한다.
정규값과 달리, 비정규값의 가수는 선행하는 1을 가지지 않는다. 비정규값은 십진수 표현에서
Figure pat00003
형태로 표현된다. 반정밀도 부동 소수점에서
Figure pat00004
는 -14로 정의된다. 비정규값을 통해 0에 가까운 수를 나타낼 수 있다.
지수부는 부호 비트가 없기 때문에 음수를 취급하기 위해 바이어스를 이용한다. 정규값의 지수부는 최상위 비트가 1 비트인 바이어스를 이용할 수 있다. 반정밀도 부동 소수점 표현에서 바이어스를 통해 -15 내지 16의 범위를 가지는 지수부는 0 내지 31의 범위로 표현될 수 있다. 예를 들어, 지수부의 이진수 비트열이 10000인 경우, 십진수 표현에서 16으로 계산되지만, 바이어스 비트열도 10000이므로 실질적으로 0의 지수를 의미한다. 따라서, 십진수 표현에서
Figure pat00005
의 값은 1이 된다. 다른 예로써, 지수부의 이진수 비트열이 01111인 경우, 십진수 표현에서 15로 계산되지만, 실질적으로 -1을 의미한다.
Figure pat00006
의 값은 0.5가 된다.
도 2는 본 발명의 일 실시예에 따른 연산 시스템에 대한 구성도다.
도 2를 참조하면, 연산 시스템(20)은 데이터 메모리(200), 프로그램 메모리(210) 및 프로세서(220)를 포함한다.
연산 시스템(20)은 뉴럴 네트워크를 기초로 입력 데이터를 실시간으로 분석하여 유효한 정보를 추출하고, 추출된 정보를 기초로 상황을 판단하거나 연산 시스템(20)이 탑재되는 전자 장치의 구성들을 제어할 수 있다. 데이터 메모리(200), 프로그램 메모리(210) 및 프로세서(220)는 하나의 반도체 칩 또는 복수의 반도체 칩으로 구현될 수 있다.
데이터 메모리(200) 및 프로그램 메모리(210)는 프로그램들, 데이터, 또는 명령들(instructions)을 저장할 수 있다.
데이터 메모리(200) 및 프로그램 메모리(210)는 DRAM(Dynamic RAM) 또는 SRAM(Static RAM) 등의 메모리를 이용해 구현될 수 있다.
프로세서(220)는 연산 시스템(20)의 전반적인 동작을 제어한다.
프로세서(220)는 시스템 버스를 통해 데이터 메모리(200) 및 프로그램 메모리(210) 중 적어도 하나로부터 입력 데이터를 수신할 수 있고, 입력 데이터를 기초로 정보 신호를 생성할 수 있다. 본 발명의 일 실시예에 의하면, 프로세서(220)는 데이터 메모리(200) 및 프로그램 메모리(210)에 저장된 프로그램 및 데이터를 이용하여 함수에 대한 함수 근사를 수행할 수 있다.
프로세서(220)는 중앙 처리 장치(Central Processing Unit; CPU), 뉴럴 네트워크 처리 장치(Neural network Processing Unit; NPU)일 수 있다.
그렇지 않으면, 프로세서(220)는 뉴럴 네트워크의 모델들에 따른 연산을 수행하기 위한 하드웨어 가속기(accelerator)일 수 있다. 하드웨어 가속기는 일반적으로, 콘볼루션(convolution) 연산과 같은 행렬 연산을 전용으로 수행하는 엔진; 활성화 함수(activation function)와 같은 비선형 함수(non-linear function), 또는 풀링(pooling) 기능을 수행하는 프로세서; 온칩 메모리(on-chip memory); 및 외부 메모리 접속을 위한 DMA(Direct Memory Access)를 포함한다.
프로세서(220)가 CPU 또는 NPU로 구현되는 경우, 프로세서(220)는 제어부(미도시), 레지스터(register, 미도시), 연산부(미도시), 및 메모리 접근부(미도시)를 포함할 수 있다. 레지스터는 연산부의 연산 입출력이 저장되는 장소이고, 메모리 접근부는 데이터 메모리(200) 및 프로그램 메모리(210)에 대한 접근을 수행하는 구성이다. 제어부는 프로세서(220)의 동작(예컨대, 파워 관리, 인터럽트 처리 등)을 통제한다.
본 발명의 일 실시예에 따른 연산 장치는 연산 시스템(20) 또는 프로세서(220) 상에서 구현될 수 있다. 연산 장치는 뉴럴 네트워크 연산을 위한 하드웨어 가속기로도 구현될 수 있다.
도 3은 본 발명의 일 실시예에 따라 함수 근사를 연산하는 방법을 설명하기 위한 순서도다.
이하에서는, 본 발명의 일 실시예에 따른 연산 장치의 개략적인 동작을 설명한다.
본 발명의 일 실시예에 의하면, 연산 장치는 부동 소수점 표현에서 입력의 가수부만 분리하여 구간별 함수 근사를 적용한 뒤, 입력의 지수부를 근사 결과에 반영함으로써, 최종 근사값을 계산한다.
입력의 가수부를 분리하는 과정은 지수부를 바이어스 또는 바이어스에 1을 더한 값(바이어스+1)으로 치환하는 과정이다. 입력의 지수부가 바이어스 또는 바이어스에 1을 더한 값으로 치환되면, 전처리된 입력은 십진수 표현에서 1 내지 2 또는 1 내지 4의 범위를 가진다. 일반적으로, 초월 함수에서 1 내지 4의 범위를 가지는 도메인으로 입력을 매핑하는 경우, 해당 범위에서 초월 함수의 변화량이 작아진다. 예를 들면, 10 내지 11의 입력 범위에서 지수 함수의 변화량보다 1 내지 2의 입력 범위에서 지수 함수의 변화량이 작다. 다시 말하면, 입력의 지수부를 바이어스 또는 바이어스에 1을 더한 값으로 치환하는 과정은, 입력을 함수의 변화량이 큰 도메인에서 작은 도메인으로 매핑하는 과정을 의미한다.
연산 장치는 함수의 변화량이 작은 도메인에서 함수 근사를 연산하므로, 함수의 변화량이 큰 도메인에서의 함수 근사보다 근사 오차를 줄일 수 있다.
나아가, 근사 전 입력의 전처리 및 근사 후 근사 결과에 대한 후처리를 수행함에 있어서, 종래의 연산 장치가 많은 수의 산술 연산 명령어들(Arithmetic operation instructions)과 논리 연산 명령어들(logic operation instructions)을 사용하는 것과 달리, 본 발명의 일 실시예에 따른 연산 장치는 초월함수의 연산 시 도메인 매핑을 위한 전처리와 후처리 작업을 효율적으로 구현할 수 있는 명령어들을 사용함으로써 전처리와 후처리 작업에 사용되는 명령어의 수를 최소화 한다.
따라서, 연산 장치는 근사 오차를 줄이되, 연산 사이클을 감소시켜 연산 속도를 향상시킬 수 있다.
이하에서는, 본 발명의 일 실시예에 따른 연산 장치의 구체적인 동작을 설명한다.
도 3을 참조하면, 연산 장치는 입력의 지수부를 기 설정된 값으로 치환함으로써 전처리된 입력을 생성하고, 입력의 지수부의 치환에 따른 오프셋(offset)을 생성한다(S300).
본 발명의 일 실시예에 의하면, 연산 장치는 입력의 지수부를 기 설정된 값인 바이어스로 치환하여 전처리된 입력을 생성한다. 연산 장치가 입력의 지수부를 바이어스로 치환하는 것은 근사 오차를 줄이기 위한 것이다.
만약 입력의 지수부가 바이어스되지 않은 경우, 입력은 넓은 도메인을 가진다. 바이어스되지 않은 입력의 넓은 도메인에서는 함수의 변화량이 큰 구간이 존재한다. 따라서, 전처리 되지 않은 입력에 함수 근사를 수행하더라도, 함수의 변화량이 큰 구간으로 인해 근사 오차가 크게 발생할 수 있다.
반대로, 입력의 지수부가 바이어스로 치환된 경우, 지수부가 의미하는 값이 20 또는 1이 된다. 이때, 입력값은 가수부가 표현하는 범위의 값으로 변환되므로 1 내지 2의 좁은 도메인을 가지게 된다. 특히 초월 함수의 경우, 가수부로 표현되는 도메인의 범위에서는 초월 함수의 변화량이 적다. 즉, 입력의 지수부가 바이어스로 치환되는 것은 입력이 함수의 변화량이 적은 도메인으로 매핑되는 것을 의미한다. 연산 장치는 함수의 변화량이 적은 구간에서 근사를 수행하기 때문에 근사 오차를 줄일 수 있다.
한편, 본 발명의 일 실시예에 의하면, 연산 장치는 입력의 지수부와 기 설정된 값 차이에 기초하여 오프셋을 생성할 수 있다. 기 설정된 값이 바이어스인 경우, 연산 장치는 입력의 지수부와 바이어스 간 차이에 기초하여 오프셋을 생성할 수 있다. 입력의 지수부와 바이어스 간 차이는 십진수 표현에서 지수부의 실질적인 값을 의미한다.
오프셋은 전처리된 입력에 대한 함수의 근사 결과로부터, 원래 구하고자 했던 입력에 대한 함수의 근사값을 계산하는 데 이용된다. 입력의 지수부 관점에서, 오프셋은 바이어스로 치환되기 전의 지수부를 고려하여 근사 결과의 지수부를 조정하는 데 이용된다. 입력의 매핑 관점에서, 오프셋은 함수의 변화량이 적은 도메인으로 매핑된 입력을 다시 원래 도메인으로 변환하는 데 이용된다.
본 발명의 다른 실시예에 의하면, 연산 장치는 입력의 지수부와 기 설정된 값 간 차이만큼 원 비트(one-bit)를 시프트(shift)하여 오프셋을 생성한다. 기 설정된 값이 바이어스인 경우, 연산 장치는 입력의 지수부와 바이어스 간 차이만큼 원 비트를 시프트하여 오프셋을 생성한다. 예를 들어, 입력의 지수부와 바이어스 간 차이가 3인 경우, 연산 장치는 원 비트를 좌측 시프트하여 이진수 비트열 1000을 오프셋으로 생성할 수 있다. 이때, 오프셋은 십진수 표현에서 8이 된다. 상기 동작을 통해 생성된 오프셋은 지수 함수의 근사에 이용될 수 있다. 이에 대한 예시는 도 5d에 서술되어 있다.
본 발명의 일 실시예에 의하면, 연산 장치는 입력의 지수부와 바이어스 간 차이값이 홀수인지 짝수인지 여부에 따라, 입력의 지수부를 다른 값으로 치환할 수 있다. 나아가, 연산 장치는 입력의 지수부와 바이어스 간 차이값이 홀수인지 짝수인지 여부에 따라, 오프셋을 다르게 생성할 수 있다. 이에 대한 예시는 도 7d 및 도 8d에 서술되어 있다.
입력의 지수부와 바이어스 간 차이값이 짝수인 경우, 연산 장치는 입력의 지수부를 바이어스로 치환함으로써 전처리된 입력을 생성한다. 나아가, 연산 장치는 입력의 지수부와 바이어스 간 차이에 비트 시프트를 수행함으로써 오프셋을 생성한다. 예를 들어, 연산 장치는 입력의 지수부와 바이어스 간 차이를 1만큼 우측 시프트하여 오프셋을 생성할 수 있다. 상기 동작을 통해 생성된 오프셋은 제곱근 함수 또는 제곱근 역수 함수의 근사에 이용될 수 있다.
입력의 지수부와 바이어스 간 차이값이 홀수인 경우, 연산 장치는 입력의 지수부를 바이어스와 홀수의 합으로 치환함으로써 전처리된 입력을 생성한다. 나아가, 연산 장치는 입력의 지수부와 상기 합 간 차이에 비트 시프트를 수행함으로써 오프셋을 생성한다. 예를 들어, 연산 장치는 입력의 지수부를 바이어스에 1을 더한 값(바이어스+1)으로 치환함으로써 전처리된 입력을 생성한다. 또한, 연산 장치는 입력의 지수부로부터, 바이어스에 1을 더한 값(바이어스+1)을 뺄셈하고, 뺄셈 결과를 1만큼 우측 시프트하여 오프셋을 생성한다. 뺄셈 결과를 1만큼 우측 시프트하는 것은 뺄셈 결과의 제곱근을 제거하는 동작에 대응된다. 상기 동작을 통해 생성된 오프셋은 제곱근 함수 또는 제곱근 역수 함수의 근사에 이용될 수 있다.
연산 장치는 전처리된 입력에 대해 함수의 근사 결과를 구한다(S302).
구체적으로, 연산 장치는 함수의 입력 범위가 복수 개의 구간으로 나누고, 구간별로 함수에 직선 근사 또는 다항 근사를 적용한다. 연산 장치는 구간별 근사를 통해 전처리된 입력에 대한 함수 근사값을 계산할 수 있다. 계산된 근사값을 근사 결과라 한다.
한편, 전처리된 입력에 대한 함수 근사값은 룩업 테이블(look-up table)에 기반하여 계산될 수 있다. 연산 장치는 전체 입력값의 범위를 복수의 세부 구간으로 나누고, 개별 구간에 해당하는 복수의 입력 범위마다 근사 계수를 설정한 룩업 테이블을 미리 저장하고, 저장된 룩업 테이블을 참조하여 입력 값에 대한 함수 근사값을 계산할 수 있다. 여기서, 직선 근사 방식에서 근사 계수는 기울기 및 오프셋을 포함한다. 다항 근사 방식에서 근사 계수는 다항 함수의 계수 및 오프셋을 포함할 수 있다. 예를 들면, 연산 장치는 입력이 포함되는 입력 범위를 식별하고, 룩업 테이블을 참조하여 입력 범위에 설정된 근사 계수를 획득하고, 근사 계수를 이용하여 입력에 대한 함수의 근사값을 계산한다.
연산 장치는 오프셋을 이용하여 근사 결과를 후처리함으로써, 입력에 대한 함수의 근사값을 계산한다(S304). 이때, 입력에 대한 함수의 근사값을 최종 근사값이라 한다.
구체적으로, 연산 장치는 오프셋을 기반으로 근사 결과의 지수부를 조정한다. 조정된 근사 결과는 원래 구하고자 했던 입력에 대한 함수의 근사값이 된다. 매핑 관점에서, 근사 결과의 지수부가 오프셋에 따라 조정됨으로써, 입력이 함수의 변화량이 큰 도메인에서 함수의 변화량이 적은 도메인으로 매핑된다.
본 발명의 일 실시예에 의하면, 연산 장치는 근사 결과의 지수부와 오프셋의 합에 기초하여, 입력에 대한 함수의 근사값을 계산한다. 상기 동작은 지수 함수 및 제곱근 함수의 근사에 이용될 수 있다.
본 발명의 일 실시예에 의하면, 연산 장치는 근사 결과의 지수부와 오프셋의 차이에 기초하여, 입력에 대한 함수의 근사값을 계산한다. 상기 동작은 제곱근의 역수 함수 및 역수 함수의 근사에 이용될 수 있다.
본 발명의 일 실시예에 의하면, 연산 장치는 오프셋, 기 설정된 로그값 및 근사 결과에 곱셈 누적(Multiply Accumulate; MAC) 연산을 수행함으로써, 입력에 대한 함수의 근사값을 계산한다. 상기 동작은 로그 함수의 근사에 이용될 수 있다. 이에 대한 예시는 도 6d에서 서술되어 있다.
한편, 본 발명의 일 실시예에 의하면, 연산 장치는 입력의 전처리 전에 입력에 기 설정된 로그값을 곱합으로써, 입력을 조정할 수 있다. 이후, 연산 장치는 조정된 입력의 지수부에 대해 전처리를 수행하고, 오프셋을 생성한다. 나아가, 연산 장치는 근사값을 구하려는 대상 함수가 아닌, 기 설정된 로그값과 연관된 지수 함수의 근사 결과를 구한다. 즉 연산 장치는 전처리된 입력에 대해, 기 설정된 로그값과 연관된 지수 함수의 근사 결과를 구한다. 이후, 연산 장치는 오프셋을 이용하여 근사 결과를 후처리하여, 입력에 대한 대상 함수의 근사값을 계산할 수 있다. 상기 동작은 자연 지수 함수의 근사에 이용될 수 있다. 이에 대한 예시는 도 5d에서 서술되어 있다.
본 발명의 일 실시예에 의하면, 연산 장치는 입력에 대한 함수의 근사값이 부동 소수점 체계의 표현 범위를 벗어나는 경우, 최종 근사값을 제로(zero) 또는 무한대(infinity) 중 어느 하나로 설정한다. 이를 클리핑(clipping)이라 한다.
단계 S300, S302 및 S304는 연산 장치가 각 단계마다 하나의 명령어를 실행함으로써 수행된다. 즉, 연산 장치는 단계 S300를 제1 명령어로 생성하고, 단계 S302를 제2 명령어로 생성하며, 단계 S304를 제3 명령어로 생성한다. 연산 장치는 각 명령어를 실행함으로써, 함수의 근사값을 계산한다. 연산 장치는 제1 명령어의 실시예와 제3 명령어의 실시예를 조합하여 입력에 대한 함수의 근사값을 계산할 수 있다.
본 발명의 일 실시예에 의하면, 함수 근사를 위해 1개 내지 2개의 전처리 명령어와 1개의 후처리 명령어를 사용하므로, 연산 장치는 최소한의 명령어로 함수 근사를 연산할 수 있다.
도 4는 본 발명의 일 실시예에 따라 함수 근사를 연산하기 위한 명령어들을 예시한 도면이다.
도 4를 참조하면, 제1 명령어의 실시예와 제3 명령어의 실시예의 조합이 도시되어 있다. 각 조합에 기반하여, 연산 장치는 지수 함수, 로그 함수, 제곱근 함수, 제곱근의 역수 함수 및 역수 함수의 근사를 연산할 수 있다.
Extract_Exp() 명령어는 입력의 지수부를 바이어스 또는 바이어스에 1을 더한 값으로 치환함으로써 전처리된 입력을 생성하고, 치환에 따른 오프셋을 생성하는 제1 명령어이다. Extract_Exp() 명령어에 의해, 입력은 1 내지 2의 범위 또는 1 내지 4의 범위로 매핑된다. X'은 전처리된 입력이고, Est는 오프셋이고, Y는 전처리된 입력에 대한 함수의 근사 결과이며, Y'은 최종 근사값이다. 기호 << 및 >>는 비트 시프트 연산을 의미한다.
Apply_ExpOffset() 명령어는 오프셋을 이용하여 근사 결과를 후처리함으로써, 입력에 대한 함수의 근사값을 계산하는 제3 명령어이다. Apply_ExpOffset() 명령어는 전처리된 입력으로부터 계산된 근사 결과의 지수부에 오프셋을 더하거나 빼줌으로써, 입력에 대한 함수의 최종 근사값을 구하는 명령어다.
본 발명의 일 실시예에 의하면, 연산 장치는 부동 소수점 표현 방식의 수 체계에서 초월 함수 근사를 위한 전처리 및 후처리 과정을 효율적으로 수행할 수 있는 전용 명령어들을 정의하고 이용함으로써, 입력이 주어질 때 최소한의 명령어들을 이용하여 함수의 근사를 연산할 수 있다.
도 5a 및 도 5b는 입력에 대한 지수 함수 및 전처리된 입력에 대한 지수 함수를 나타낸 도면이다.
도 5a를 참조하면, 입력 x에 대한 자연 지수 함수 y가 도시되어 있다.
입력 x에 대한 자연 지수 함수 y의 근사 오차를 줄이기 위해, 연산 장치는 구간별 근사를 이용할 수 있다. 구체적으로, 연산 장치는 자연 지수 함수 y에 대해 전체 입력을 8개의 구간으로 나누어 직선 근사 또는 다항 근사를 적용한다. 연산 장치는 입력 x에 대응되는 구간 내 함수 근사를 이용하여 입력 x에 대한 함수 y의 근사값을 계산할 수 있다.
구간 S0 내지 구간 S4에서는 자연 지수 함수 y의 변화량이 상대적으로 작기 때문에, 연산 장치가 구간별 직선 근사 또는 다항 근사를 적용하더라도, 참값과 근사값 간 근사 오차가 작다.
하지만, 구간 S5 내지 구간 S7에서는 자연 지수 함수 y의 변화량이 상대적으로 크기 때문에, 연산 장치가 구간별 직선 근사 또는 다항 근사를 적용하는 경우, 참값과 근사값 간 근사 오차가 크다.
근사 오차를 줄이기 위해, 연산 장치는 입력을 함수의 변화량이 큰 도메인에서 함수의 변화량이 적은 도메인으로 매핑한다.
도 5b를 참조하면, 입력 t에 대한 지수 함수 yt가 도시되어 있다. 입력 t는 입력 x가 매핑된 것이다.
입력 t의 도메인 범위는 입력 x의 도메인 범위보다 좁다. 입력 x의 도메인 범위가 0 내지 10인 반면, 입력 t의 도메인 범위는 1 내지 2이다.
또한, 입력 t에 대한 함수 yt의 변화량은 입력 x에 대한 함수 y의 변화량보다 작다.
입력 x가 함수 y의 변화량이 큰 구간인 S7 내 값이더라도, 전처리를 통해 함수의 변화량이 상대적으로 작은 t 도메인으로 될 수 있다. t 도메인에서 함수 근사를 적용하는 경우, x 도메인에서 함수 근사를 적용하는 경우보다 근사 오차가 작다.
연산 장치는 t 도메인에서의 근사 결과를 다시 입력 x의 도메인으로 변환함으로써, 입력 x에 대한 함수 y의 근사값을 구할 수 있다.
이하에서는, 입력의 전처리, 전처리된 입력에 대한 함수의 근사, 및 근사 결과에 대한 후처리를 수행하는 데 이용되는 명령어들 및 실행 순서를 종래의 연산 장치와 비교하여 설명한다.
도 5c 및 도 5d는 자연 지수 함수의 근사를 위한 종래의 명령어들과 본 발명의 일 실시예에 따른 명령어들을 비교하기 위한 도면이다.
종래의 연산 장치는 자연 지수 함수를 근사하기 위해, 수학식 1을 이용한다.
Figure pat00007
수학식 1에서 a는 정수부이고, b는 소수부를 의미한다.
수학식 1을 참조하면, 종래 연산 장치는 입력 x에
Figure pat00008
를 곱하고, 곱셈 결과를 정수부와 소수부로 분리한다. 종래 연산 장치는 2를 밑으로 하고 정수부를 지수로 가지는 제1 값과 2를 밑으로 하고 소수부를 지수로 가지는 제2 값을 계산한다. 마지막으로, 종래 연산 장치는 제1 값과 제2 값의 곱셈을 자연 지수 함수의 값으로 계산할 수 있다.
제1 값과 제2 값의 곱셈 결과는 부동 소수점(Floating Point; FP)으로 표현될 수 있다. 이때, 제1 값의 지수 a는 입력 x와
Figure pat00009
의 곱셈 결과의 정수부에 해당한다. 다시 말하면, 곱셈 결과의 정수부가 자연 지수 함수의 지수부에 해당한다. 종래 연산 장치는 원 비트를 정수부만큼 좌측 시프트하여 제1 값을 생성할 수 있다.
한편, 종래 연산 장치는 제2 값에 대해서는 함수 근사를 적용한다. 제2 값은 소수부를 입력으로 가지고, 2를 밑으로 하는 지수 함수로 모델링될 수 있다. 이때, 소수부는 0 내지 1 사이의 값을 가지므로, 제2 값은 1 내지 2의 값을 가진다. 소수부는 입력 x에 비해 표현 범위가 좁고, 표현 범위 내에서 제2 값의 변화량이 작다. 따라서, 제2 값에 대해 함수 근사가 적용되더라도, 근사 오차가 작다.
종래 연산 장치는 제1 값과 제2 값의 근사값을 곱함으로써, 입력에 대한 자연 지수 함수의 최종 근사값을 계산한다.
도 5c를 참조하면, 종래 연산 장치가 수학식 1에 따른 함수 근사를 실행하기 위한 명령어들이 도시되어 있다.
종래 연산 장치는 입력에
Figure pat00010
를 곱하여 입력을 조정한다(S500).
이때, 입력은 FP로 표현된다.
종래 연산 장치는 조정된 입력의 정수부를 추출한다(S502).
종래 연산 장치는 FP로 표현되는 수를 정수(integer; INT) 표현으로 변환하는 명령어를 실행함으로써, 조정된 입력의 정수부를 추출할 수 있다. 추출된 정수부는 INT로 표현된다. 이 과정에서, 조정된 입력의 소수부는 무시된다.
종래 연산 장치는 정수부의 표현을 INT에서 FP로 변환한다(S504).
종래 연산 장치는 INT로 표현되는 수를 FP 표현으로 변환하는 명령어를 실행함으로써, 정수부의 표현을 FP로 변환한다.
종래 연산 장치는 조정된 입력의 소수부를 추출한다(S506).
종래 연산 장치는 FP 표현 체계에서 조정된 입력에서 조정된 입력의 정수부를 뺄셈함으로써, 조정된 입력의 소수부를 추출할 수 있다.
종래 연산 장치는 상기 단계를 통해 조정된 입력을 정수부와 소수부로 분리한다.
종래 연산 장치는 2를 밑으로 하는 지수 함수에 구간별 근사를 적용하여 소수부에 대한 근사 결과를 계산한다(S508).
구체적으로, 종래 연산 장치는 조정된 입력의 소수부를 입력으로 가지고, 2를 밑으로 하는 지수 함수에 대해 함수 근사를 적용할 수 있다. 소수부의 표현 범위에 따른 지수 함수의 변화량은 입력의 표현 범위에 따른 자연 지수 함수의 변화량보다 적으므로, 종래 연산 장치는 근사 오차가 적은 근사 결과를 구할 수 있다.
한편, 종래 연산 장치는 원 비트(one-bit)를 정수부만큼 좌측 시프트하여 오프셋을 생성한다(S510).
이진수 표현에서 원 비트를 좌측 시프트하는 경우, 밑이 2이고, 시프트량(shift amount)이 지수인 값이 생성된다. 즉, 오프셋은 2를 밑으로 하고, 정수부를 지수로 가지는 값이다. 이때, 오프셋은 INT로 표현된다.
종래 연산 장치는 오프셋의 표현을 INT에서 FP로 변환한다(S512).
종래 연산 장치는 근사 결과에 오프셋을 곱하여 최종 근사값을 계산한다(S514). 종래 연산 장치는 소수부에 대한 근사 결과에 오프셋을 곱함으로써, 수학식 1과 같이 입력에 대한 자연 지수 함수의 근사값을 구할 수 있다.
결과적으로, 종래 연산 장치는 단계 S508의 명령어를 제외하고, 입력을 전처리하는 데 4개의 명령어를 사용하고, 근사 결과를 후처리하는 데 3개의 명령어를 사용한다.
이와 달리, 본 발명의 일 실시예에 따른 연산 장치는 적은 수의 명령어를 이용하여 자연 지수 함수를 근사하기 위해, 수학식 2를 이용한다.
Figure pat00011
수학식 2를 참조하면, 연산 장치는 자연 지수 함수에
Figure pat00012
를 곱하고, 곱셈 결과를 지수부와 가수부로 표현할 수 있다.
Figure pat00013
는 곱셈 결과의 지수부이고,
Figure pat00014
는 곱셈 결과의 가수부다.
연산 장치는 곱셈 결과의 가수부에 대해 함수 근사를 연산한다. 그리고 연산 장치는 2를 밑으로 하고, 곱셈 결과의 지수부를 지수로 하는 제3 값(
Figure pat00015
)을 계산한다. 제3 값은 오프셋과 관련된 값이다. 연산 장치는 근사 결과의 지수부에 제3 값을 더함으로써, 자연 지수 함수의 근사값을 계산한다.
도 5d를 참조하면, 본 발명의 일 실시예에 따른 연산 장치가 수학식 2에 따른 함수 근사를 실행하기 위한 명령어들이 도시되어 있다.
본 발명의 일 실시예에 따른 연산 장치는 입력에
Figure pat00016
를 곱하여 입력을 조정한다(S520).
연산 장치는 조정된 입력의 지수부를 바이어스로 치환하여 전처리된 입력을 생성하고, 원 비트(one-bit)를 지수부와 바이어스 간 차이만큼 시프트하여 오프셋을 생성한다(S522).
다시 말하면, 전처리된 입력은 지수부가 바이어스이고, 가수부가 조정된 입력의 가수부인 값이다. 전처리된 입력은 십진수 표현에서 1 내지 2의 값을 가진다. 지수부와 바이어스 간 차이를 시프트량(shift amount)라 할 때, 오프셋은 이진수 표현에서 밑이 2이고 시프트량이 지수인 값이다. 예를 들어, 입력의 지수부와 바이어스 간 차이가 2인 경우, 오프셋은 이진수 비트열 100이고, 십진수 표현에서 4가 된다.
연산 장치는 2를 밑으로 하는 지수함수에 구간별 근사를 적용하여 전처리된 입력에 대한 근사 결과를 계산한다(S524).
구체적으로, 연산 장치는 2를 밑으로 하는 지수 함수를 여러 구간으로 나누고, 전처리된 입력이 속한 구간을 식별한다. 연산 장치는 식별된 구간에서 직선 근사 계수 또는 다항 근사 계수를 직접 계산하거나, 기 저장된 룩업 테이블로부터 구할 수 있다. 연산 장치는 직선 근사 계수 또는 다항 근사 계수 중 어느 하나와 전처리된 입력으로부터 근사 결과를 구한다. 십진수 표현에서 전처리된 입력의 범위가 1 내지 2이므로, 근사 결과의 범위는 2 내지 4이다. 근사 결과의 범위가 2 내지 4이므로, FP 표현에서 근사 결과의 지수부는 바이어스에 1을 더한 값이다.
연산 장치는 근사 결과의 지수부에 오프셋을 더함으로써, 입력에 대한 자연 지수 함수의 최종 근사값을 계산한다(S526).
단계 S520 내지 S526을 간략히 설명하면, 연산 장치는 부동 소수점 표현에서 입력의 가수부만 분리하여 구간별 함수 근사를 적용한 뒤, 입력의 지수부를 근사 결과에 반영함으로써, 최종 근사값을 계산한다.
본 발명의 일 실시예에 따른 연산 장치는 단계 S524의 명령어를 제외하고, 입력을 전처리하는 데 2개의 명령어를 사용하고, 근사 결과를 후처리하는 데 1개의 명령어를 사용한다. 단계 S520, 단계 S522 및 단계 S526의 각 명령어는 FP 표현을 기반하므로, INT와 FP 사이 변환 명령어를 필요로 하지 않는다. 연산 장치는 부동 소수점 표현에만 기반하여 전처리 명령어와 후처리 명령어를 최소화한다.
또한, 연산 장치는 함수의 변화량이 작은 도메인에서 함수 근사를 연산하므로, 함수의 변화량이 큰 도메인에서의 함수 근사보다 근사 오차를 줄일 수 있다.
도 6a 및 도 6b는 입력에 대한 로그 함수 및 전처리된 입력에 대한 로그 함수를 나타낸 도면이다.
도 6a를 참조하면, 입력 x에 대한 로그 함수 y가 도시되어 있다.
구간 S1 내지 구간 S7에서는 로그 함수 y의 변화량이 상대적으로 작기 때문에, 연산 장치가 구간별 직선 근사 또는 다항 근사를 적용하더라도, 참값과 근사값 간 근사 오차가 작다.
하지만, 구간 S0에서는 로그 함수 y의 변화량이 상대적으로 크기 때문에, 연산 장치가 구간별 직선 근사 또는 다항 근사를 적용하는 경우, 참값과 근사값 간 근사 오차가 크다.
근사 오차를 줄이기 위해, 연산 장치는 입력을 함수의 변화량이 큰 도메인에서 함수의 변화량이 적은 도메인으로 매핑한다.
도 6b를 참조하면, 입력 t에 대한 로그 함수 yt가 도시되어 있다.
입력 t의 도메인 범위는 입력 x의 도메인 범위보다 좁다. 또한, 입력 t에 대한 함수 yt의 변화량은 입력 x에 대한 함수 y의 변화량보다 작다. 입력 x의 범위에서 로그 함수의 변화량보다 입력 t의 범위에서 로그 함수의 변화량이 작다.
입력 x가 함수 y의 변화량이 큰 구간인 S0 내 값이더라도, 전처리를 통해 함수의 변화량이 상대적으로 작은 t 도메인으로 될 수 있다. t 도메인에서 함수 근사를 적용하는 경우, x 도메인에서 함수 근사를 적용하는 경우보다 근사 오차가 작다.
연산 장치는 t 도메인에서의 근사 결과를 다시 입력 x의 도메인으로 변환함으로써, 입력 x에 대한 함수 y의 근사값을 구할 수 있다.
이하에서는, 입력의 전처리, 전처리된 입력에 대한 함수의 근사, 및 근사 결과에 대한 후처리를 수행하는 데 이용되는 명령어들 및 실행 순서를 종래의 연산 장치와 비교하여 설명한다.
도 6c 및 도 6d는 로그 함수의 근사를 위한 종래의 명령어들과 본 발명의 일 실시예에 따른 명령어들을 비교하기 위한 도면이다.
종래의 연산 장치는 로그 함수를 근사하기 위해, 수학식 3을 이용한다.
Figure pat00017
수학식 3에서 k는 입력 x의 지수부이고,
Figure pat00018
은 입력 x의 가수부이다.
수학식 3을 참조하면, 종래 연산 장치는 입력 x의 지수부 k, log(2) 및
Figure pat00019
에 곱셈 누적(Multiply-Accumulate; MAC) 연산함으로써, 입력 x에 대한 로그 함수의 함수값을 계산한다.
이때, 종래 연산 장치는
Figure pat00020
에 대해 구간별 근사를 적용할 수 있다. 입력 x의 가수부는 1 내지 2의 값을 가지므로, 입력 x보다 표현 범위가 좁다. 또한, 입력 x의 가수부의 범위에서 로그 함수의 변화량이 입력 x의 범위에서 로그 함수의 변화량보다 작다. 입력 x의 가수부에 대한 근사 오차가 입력 x에 대한 근사 오차보다 작다. 따라서, 종래 연산 장치는 입력 x의 가수부에 대한 구간별 근사를 통해 근사 오차를 줄일 수 있다.
종래 연산 장치는 지수부 k, log(2) 및 근사값에 MAC 연산을 수행함으로써, 입력 x에 대한 로그 함수의 최종 근사값을 계산할 수 있다.
도 6c를 참조하면, 종래 연산 장치가 수학식 3에 따른 함수 근사를 실행하기 위한 명령어들이 도시되어 있다.
종래 연산 장치는 입력의 지수부를 추출한다(S600).
종래 연산 장치는 입력에 시프트 연산, 마스크(mask) 연산 및 뺄셈(subtraction) 연산에 관한 명령어들을 실행함으로써, 입력의 지수부를 추출할 수 있다. 종래 연산 장치가 입력의 지수부를 추출하기 위해, 3개의 명령어가 필요하다.
종래 연산 장치는 추출한 지수부를 바이어스로 치환한다(S602).
종래 연산 장치는 입력의 지수부에 비트별 마스크(bit-wise mask) 연산 및 OR 연산에 관한 명령어들을 실행함으로써, 추출한 지수부를 바이어스로 치환할 수 있다. 종래 연산 장치가 추출한 지수부를 바이어스로 치환하기 위해, 2개의 명령어가 필요하다.
단계 S600 및 S602를 통해 종래 연산 장치는 입력을 전처리한다.
종래 연산 장치는 로그 함수에 구간별 근사를 적용하여 전처리된 입력에 대한 근사 결과를 계산한다(S508).
종래 연산 장치는 전처리된 입력에 대한 로그 함수의 근사 결과를 구한다. 전처리된 입력의 표현 범위에 따른 로그 함수의 변화량은 입력의 표현 범위에 따른 로그 함수의 변화량보다 적으므로, 종래 연산 장치는 근사 오차가 적은 근사 결과를 구할 수 있다.
종래 연산 장치는 지수부, log(2) 및 근사 결과에 MAC 연산을 수행함으로써, 입력에 대한 로그 함수의 최종 근사값을 계산한다(S606).
종래 연산 장치는 단계 S604의 명령어를 제외하고, 입력을 전처리하는 데 5개의 명령어를 사용하고, 근사 결과를 후처리하는 데 1개의 명령어를 사용한다.
이와 달리, 본 발명의 일 실시예에 따른 연산 장치는 수학식 3을 이용하여 로그 함수의 근사를 연산하되, 종래 연산 장치보다 적은 수의 명령어로 로그 함수의 근사값을 구할 수 있다.
도 6d를 참조하면, 본 발명의 일 실시예에 따른 연산 장치가 수학식 3에 따른 함수 근사를 실행하기 위한 명령어들이 도시되어 있다.
본 발명의 일 실시예에 따른 연산 장치는 입력의 지수부를 바이어스로 치환하여 입력을 전처리하고, 입력의 지수부와 바이어스 간 차이를 오프셋으로 생성한다(S610).
다시 말하면, 전처리된 입력은 입력의 지수부가 바이어스로 치환된 값이고, 오프셋은 입력의 지수부에서 오프셋을 뺀 값이다.
연산 장치는 로그 함수에 구간별 근사를 적용하여 전처리된 입력에 대한 근사 결과를 계산한다(S612).
연산 장치는 오프셋, log(2) 및 근사 결과에 MAC 연산을 수행함으로써, 입력 x에 대한 로그 함수의 최종 근사값을 계산한다(S614). 여기서, log(2)는 기 설정된 값일 수 있다.
본 발명의 일 실시예에 따른 연산 장치는 단계 S612의 명령어를 제외하고, 입력을 전처리하는 데 1개의 명령어를 사용하고, 근사 결과를 후처리하는 데 1개의 명령어를 사용한다. 종래 연산 장치에 비해, 연산 장치는 적은 수의 명령어들로 로그 함수의 근사를 연산할 수 있다.
또한, 연산 장치는 함수의 변화량이 작은 도메인에서 함수 근사를 연산하므로, 함수의 변화량이 큰 도메인에서의 함수 근사보다 근사 오차를 줄일 수 있다.
도 7a 및 도 7b는 입력에 대한 제곱근 함수 및 전처리된 입력에 대한 제곱근 함수를 나타낸 도면이다.
도 7a를 참조하면, 입력 x에 대한 제곱근(square root; sqrt) 함수 y가 도시되어 있다.
구간 S1 내지 구간 S7에서는 제곱근 함수 y의 변화량이 상대적으로 작기 때문에, 연산 장치가 구간별 직선 근사 또는 다항 근사를 적용하더라도, 참값과 근사값 간 근사 오차가 작다.
하지만, 구간 S0에서는 제곱근 함수 y의 변화량이 상대적으로 크기 때문에, 연산 장치가 구간별 직선 근사 또는 다항 근사를 적용하는 경우, 참값과 근사값 간 근사 오차가 크다.
근사 오차를 줄이기 위해, 연산 장치는 입력을 함수의 변화량이 큰 도메인에서 함수의 변화량이 적은 도메인으로 매핑한다.
도 7b를 참조하면, 입력 t에 대한 제곱근 함수 yt가 도시되어 있다. 입력 t는 입력 x가 매핑된 것이다.
입력 t의 도메인 범위는 입력 x의 도메인 범위보다 좁다. 또한, 입력 t에 대한 함수 yt의 변화량은 입력 x에 대한 함수 y의 변화량보다 작다. 즉, 입력 x의 범위에서 제곱근 함수의 변화량보다 입력 t의 범위에서 제곱근 함수의 변화량이 적다.
입력 x가 함수 y의 변화량이 큰 구간인 S0 내 값이더라도, 전처리를 통해 함수의 변화량이 상대적으로 작은 t 도메인으로 될 수 있다. t 도메인에서 함수 근사를 적용하는 경우, x 도메인에서 함수 근사를 적용하는 경우보다 근사 오차가 작다.
연산 장치는 t 도메인에서의 근사 결과를 다시 입력 x의 도메인으로 변환함으로써, 입력 x에 대한 함수 y의 근사값을 구할 수 있다.
이하에서는, 입력의 전처리, 전처리된 입력에 대한 함수의 근사, 및 근사 결과에 대한 후처리를 수행하는 데 이용되는 명령어들 및 실행 순서를 종래의 연산 장치와 비교하여 설명한다.
도 7c 및 도 7d는 제곱근 함수의 근사를 위한 종래의 명령어들과 본 발명의 일 실시예에 따른 명령어들을 비교하기 위한 도면이다.
종래의 연산 장치는 제곱근 함수를 근사하기 위해, 수학식 4를 이용한다.
Figure pat00021
수학식 4에서 k 및 n은 0 이상의 정수이다. n은 입력의 지수부에 해당한다.
수학식 4를 참조하면, 종래 연산 장치는 2를 밑으로 하고, 입력의 지수부를 지수로 가지는 제4 값을 계산한다. 종래 연산 장치는 입력의 가수부에 대한 제곱근 함수의 함수값을 계산한다. 종래 연산 장치는 제4 값과 가수부에 대한 제곱근 함수값을 곱함으로써, 입력에 대한 제곱근 함수의 함수값을 계산한다.
이때, 종래 연산 장치는
Figure pat00022
에 대해 구간별 근사를 적용할 수 있다. 종래 연산 장치는 제4 값 및 근사 결과의 곱셈을, 입력 x에 대한 제곱근 함수의 최종 근사값으로 계산한다.
한편, 종래 연산 장치는 입력의 지수부가 홀수인지 짝수인지 여부에 따라 함수값을 달리 계산할 수 있다. 입력의 지수부가 짝수인 경우, 종래 연산 장치는 입력의 가수부에 대한 근사 결과를 구하고, 제4 값과 근사 결과의 곱셈을 입력 x에 대한 제곱근 함수의 근사값으로 계산한다. 반면 입력의 지수부가 홀수인 경우, 종래 연산 장치는 입력의 가수부에 2를 곱한 값에 대한 근사 결과를 구하고, 제4 값과 근사 결과의 곱셈을 입력 x에 대한 제곱근 함수의 근사값으로 계산한다.
도 7c를 참조하면, 종래 연산 장치가 수학식 4에 따른 함수 근사를 실행하기 위한 명령어들이 도시되어 있다.
종래 연산 장치는 입력의 지수부를 추출한다(S700).
종래 연산 장치는 추출한 지수부를 바이어스로 치환한다(S702).
종래 연산 장치는 입력의 지수부가 홀수인지 여부를 판단한다(S704). 종래 연산 장치가 입력의 지수부의 홀수 여부를 판단하기 위해, 2개의 명령어가 필요하다.
입력의 지수부가 홀수인 경우, 종래 연산 장치는 입력의 지수부를 1만큼 감소시킨다(S706).
또한, 종래 연산 장치는 지수부가 바이어스로 치환된 입력에 2를 곱한다(S708).
종래 연산 장치는 제곱근 함수에 구간별 근사를 적용하여 전처리된 입력에 대한 근사 결과를 계산한다(S710).
단계 S704에서 입력의 지수부가 짝수인 경우, 종래 연산 장치는 단계 S706 및 S708를 수행하지 않고, 곧바로 전처리된 입력에 대한 근사 결과를 계산한다.
종래 연산 장치는 원 비트를 지수부의 반만큼 좌측 시프트하여 오프셋을 생성한다(S712).
원 비트의 시프트를 통해 생성된 오프셋은 INT 표현을 가진다.
종래 연산 장치는 오프셋의 표현을 INT에서 FP로 변환한다(S714).
종래 연산 장치는 근사 결과에 오프셋을 곱함으로써, 입력에 대한 제곱근 함수의 최종 근사값을 계산한다(S716).
종래 연산 장치는 단계 S710의 명령어를 제외하고, 입력을 전처리하는 데 7개 내지 9개의 명령어를 사용하고, 근사 결과를 후처리하는 데 4개의 명령어를 사용한다.
이와 달리, 본 발명의 일 실시예에 따른 연산 장치는 수학식 4를 이용하여 제곱근 함수의 근사를 연산하되, 종래 연산 장치보다 적은 수의 명령어로 제곱근 함수의 근사값을 구할 수 있다.
도 7d를 참조하면, 본 발명의 일 실시예에 따른 연산 장치가 수학식 4에 따른 함수 근사를 실행하기 위한 명령어들이 도시되어 있다.
본 발명의 일 실시예에 따른 연산 장치는 입력의 지수부와 바이어스 간 차이값이 홀수인지 짝수인지 여부에 기초하여, 전처리된 입력 및 오프셋을 생성한다(S720).
입력의 지수부와 바이어스 간 차이가 짝수인 경우, 연산 장치는 입력의 지수부를 바이어스로 치환함으로써, 전처리된 입력을 생성한다. 연산 장치는 입력의 지수부와 바이어스 간 차이값을 1만큼 우측 시프트함으로써, 오프셋을 생성한다.
입력의 지수부와 바이어스 간 차이가 홀수인 경우, 연산 장치는 입력의 지수부를 바이어스에 1을 더한 값으로 치환함으로써, 전처리된 입력을 생성한다. 연산 장치는 입력의 지수부로부터, 바이어스에 1을 더한 값(바이어스+1)을 뺄셈하고, 뺄셈 결과를 1만큼 우측 시프트하여 오프셋을 생성한다.
연산 장치는 제곱근 함수에 구간별 근사를 적용하여 전처리된 입력에 대한 근사 결과를 계산한다(S722).
연산 장치는 근사 결과의 지수부에 오프셋을 더함으로써, 입력에 대한 제곱근 함수의 최종 근사값을 계산한다(S724).
본 발명의 일 실시예에 따른 연산 장치는 단계 S722의 명령어를 제외하고, 입력을 전처리하는 데 1개의 명령어를 사용하고, 근사 결과를 후처리하는 데 1개의 명령어를 사용한다. 종래 연산 장치에 비해, 연산 장치는 적은 수의 명령어들로 제곱근 함수의 근사를 연산할 수 있다.
또한, 연산 장치는 함수의 변화량이 작은 도메인에서 함수 근사를 연산하므로, 함수의 변화량이 큰 도메인에서의 함수 근사보다 근사 오차를 줄일 수 있다.
도 8a 및 도 8b는 입력에 대한 제곱근의 역수 함수 및 전처리된 입력에 대한 제곱근의 역수 함수를 나타낸 도면이다.
도 8a를 참조하면, 입력 x에 대한 제곱근의 역수(reciprocal square root; rsqrt) 함수 y가 도시되어 있다.
구간 S1 내지 구간 S7에서는 제곱근의 역수 함수 y의 변화량이 상대적으로 작기 때문에, 연산 장치가 구간별 직선 근사 또는 다항 근사를 적용하더라도, 참값과 근사값 간 근사 오차가 작다.
하지만, 구간 S0에서는 제곱근의 역수 함수 y의 변화량이 상대적으로 크기 때문에, 연산 장치가 구간별 직선 근사 또는 다항 근사를 적용하는 경우, 참값과 근사값 간 근사 오차가 크다.
근사 오차를 줄이기 위해, 연산 장치는 입력을 함수의 변화량이 큰 도메인에서 함수의 변화량이 적은 도메인으로 매핑한다.
도 8b를 참조하면, 입력 t에 대한 제곱근의 역수 함수 yt가 도시되어 있다. 입력 t는 입력 x가 매핑된 것이다.
입력 t에 대한 함수 yt의 변화량은 입력 x에 대한 함수 y의 변화량보다 작다. 즉, 입력 x의 범위에서 제곱근의 역수 함수의 변화량보다 입력 t의 범위에서 제곱근의 역수 함수의 변화량이 적다.
입력 x가 함수 y의 변화량이 큰 구간인 S0 내 값이더라도, 전처리를 통해 함수의 변화량이 상대적으로 작은 t 도메인으로 될 수 있다. t 도메인에서 함수 근사를 적용하는 경우, x 도메인에서 함수 근사를 적용하는 경우보다 근사 오차가 작다.
연산 장치는 t 도메인에서의 근사 결과를 다시 입력 x의 도메인으로 변환함으로써, 입력 x에 대한 함수 y의 근사값을 구할 수 있다.
이하에서는, 입력의 전처리, 전처리된 입력에 대한 함수의 근사, 및 근사 결과에 대한 후처리를 수행하는 데 이용되는 명령어들 및 실행 순서를 종래의 연산 장치와 비교하여 설명한다.
도 8c 및 도 8d는 제곱근의 역수 함수의 근사를 위한 종래의 명령어들과 본 발명의 일 실시예에 따른 명령어들을 비교하기 위한 도면이다.
종래의 연산 장치는 제곱근의 역수 함수를 근사하기 위해, 수학식 5를 이용한다.
Figure pat00023
수학식 5에서 k 및 n은 0 이상의 정수이다. n은 입력의 지수부에 해당한다.
수학식 5를 참조하면, 종래 연산 장치는 2를 밑으로 하고, 입력의 지수부에 음수를 취한 값을 지수로 가지는 제5 값을 계산한다. 종래 연산 장치는 입력의 가수부에 대한 제곱근의 역수 함수의 함수값을 계산한다. 종래 연산 장치는 제5 값과 가수부에 대한 제곱근의 역수 함수값을 곱함으로써, 입력에 대한 제곱근의 역수 함수의 함수값을 계산한다.
이때, 종래 연산 장치는
Figure pat00024
에 대해 구간별 근사를 적용할 수 있다. 종래 연산 장치는 제5 값 및 근사 결과의 곱셈을, 입력 x에 대한 제곱근의 역수 함수의 최종 근사값으로 계산한다.
한편, 종래 연산 장치는 입력의 지수부가 홀수인지 짝수인지 여부에 따라 함수값을 달리 계산할 수 있다. 입력의 지수부가 짝수인 경우, 종래 연산 장치는 입력의 가수부에 대한 근사 결과를 구하고, 제5 값과 근사 결과의 곱셈을 입력 x에 대한 제곱근의 역수 함수의 근사값으로 계산한다. 반면 입력의 지수부가 홀수인 경우, 종래 연산 장치는 입력의 가수부에 2를 곱한 값에 대한 근사 결과를 구하고, 제5 값과 근사 결과의 곱셈을 입력 x에 대한 제곱근의 역수 함수의 근사값으로 계산한다.
도 8c를 참조하면, 종래 연산 장치가 수학식 5에 따른 함수 근사를 실행하기 위한 명령어들이 도시되어 있다.
단계 S800 내지 S808, 및 단계 S812 내지 S814는 단계 S700 내지 S708, 및 단계 S712 내지 S714에 대응되므로, 자세한 설명은 생략한다.
단계 S810에서 종래 연산 장치는 제곱근의 역수 함수에 구간별 근사를 적용하여 전처리된 입력에 대한 근사 결과를 계산한다(S810).
종래 연산 장치는 근사 결과에 오프셋을 나눔으로써, 입력에 대한 제곱근의 역수 함수의 최종 근사값을 계산한다(S816).
종래 연산 장치는 단계 S810의 명령어를 제외하고, 입력을 전처리하는 데 7개 내지 9개의 명령어를 사용하고, 근사 결과를 후처리하는 데 4개의 명령어를 사용한다.
이와 달리, 본 발명의 일 실시예에 따른 연산 장치는 수학식 5를 이용하여 제곱근의 역수 함수의 근사를 연산하되, 종래 연산 장치보다 적은 수의 명령어로 제곱근의 역수 함수의 근사값을 구할 수 있다.
도 8d를 참조하면, 본 발명의 일 실시예에 따른 연산 장치가 수학식 5에 따른 함수 근사를 실행하기 위한 명령어들이 도시되어 있다.
단계 S820은 단계 S720에 대응되고, 단계 S822는 단계 810에 대응되므로, 자세한 설명은 생략한다.
연산 장치는 근사 결과의 지수부에서 오프셋을 뺄셈으로써, 입력에 대한 제곱근의 역수 함수의 최종 근사값을 계산한다(S824).
본 발명의 일 실시예에 따른 연산 장치는 단계 S822의 명령어를 제외하고, 입력을 전처리하는 데 1개의 명령어를 사용하고, 근사 결과를 후처리하는 데 1개의 명령어를 사용한다. 종래 연산 장치에 비해, 연산 장치는 적은 수의 명령어들로 제곱근의 역수 함수의 근사를 연산할 수 있다.
또한, 연산 장치는 함수의 변화량이 작은 도메인에서 함수 근사를 연산하므로, 함수의 변화량이 큰 도메인에서의 함수 근사보다 근사 오차를 줄일 수 있다.
도 9a 및 도 9b는 입력에 대한 역수 함수 및 전처리된 입력에 대한 역수 함수를 나타낸 도면이다.
도 9a를 참조하면, 입력 x에 대한 역수(reciprocal) 함수 y가 도시되어 있다.
입력 x에 대한 역수 함수 y의 근사 오차를 줄이기 위해, 연산 장치는 구간별 근사를 이용할 수 있다.
구간 S1 내지 구간 S7에서는 역수 함수 y의 변화량이 상대적으로 작기 때문에, 연산 장치가 구간별 직선 근사 또는 다항 근사를 적용하더라도, 참값과 근사값 간 근사 오차가 작다.
하지만, 구간 S0에서는 역수 함수 y의 변화량이 상대적으로 크기 때문에, 연산 장치가 구간별 직선 근사 또는 다항 근사를 적용하는 경우, 참값과 근사값 간 근사 오차가 크다.
근사 오차를 줄이기 위해, 연산 장치는 입력을 함수의 변화량이 큰 도메인에서 함수의 변화량이 적은 도메인으로 매핑한다.
도 9b를 참조하면, 입력 t에 대한 역수 함수 yt가 도시되어 있다. 입력 t는 입력 x가 매핑된 것이다.
입력 t에 대한 함수 yt의 변화량은 입력 x에 대한 함수 y의 변화량보다 작다. 즉, 입력 x의 범위에서 역수 함수의 변화량보다 입력 t의 범위에서 역수 함수의 변화량이 적다.
입력 x가 함수 y의 변화량이 큰 구간인 S0 내 값이더라도, 전처리를 통해 함수의 변화량이 상대적으로 작은 t 도메인으로 될 수 있다. t 도메인에서 함수 근사를 적용하는 경우, x 도메인에서 함수 근사를 적용하는 경우보다 근사 오차가 작다.
연산 장치는 t 도메인에서의 근사 결과를 다시 입력 x의 도메인으로 변환함으로써, 입력 x에 대한 함수 y의 근사값을 구할 수 있다.
이하에서는, 입력의 전처리, 전처리된 입력에 대한 함수의 근사, 및 근사 결과에 대한 후처리를 수행하는 데 이용되는 명령어들 및 실행 순서를 종래의 연산 장치와 비교하여 설명한다.
도 9c 및 도 9d는 역수 함수의 근사를 위한 종래의 명령어들과 본 발명의 일 실시예에 따른 명령어들을 비교하기 위한 도면이다.
종래의 연산 장치는 역수 함수를 근사하기 위해, 수학식 6을 이용한다.
Figure pat00025
수학식 6을 참조하면, 종래 연산 장치는 2를 밑으로 하고, 입력의 지수부에 음수를 취한 값을 지수로 가지는 제6 값을 계산한다. 종래 연산 장치는 입력의 가수부에 대한 역수 함수의 함수값을 계산한다. 종래 연산 장치는 제6 값과 가수부에 대한 역수 함수값을 곱함으로써, 입력에 대한 역수 함수의 함수값을 계산한다.
이때, 종래 연산 장치는 가수부의 역수 함수값에 대해 구간별 근사를 적용할 수 있다. 종래 연산 장치는 제6 값 및 근사 결과의 곱셈을, 입력 x에 대한 역수 함수의 최종 근사값으로 계산한다.
도 8c를 참조하면, 종래 연산 장치가 수학식 6에 따른 함수 근사를 실행하기 위한 명령어들이 도시되어 있다.
종래 연산 장치는 입력의 지수부를 추출한다(S900).
종래 연산 장치는 추출한 지수부를 바이어스로 치환한다(S902).
종래 연산 장치는 역수 함수에 구간별 근사를 적용하여 전처리된 입력에 대한 근사 결과를 계산한다(S904).
종래 연산 장치는 원 비트를 지수부만큼 좌측 시프트하여 오프셋을 생성한다(S906).
종래 연산 장치는 오프셋의 표현을 INT에서 FP로 변환한다(S908).
종래 연산 장치는 근사 결과를 오프셋으로 나눔으로써, 입력에 대한 역수 함수의 최종 근사값을 계산한다(S910).
종래 연산 장치는 단계 S904의 명령어를 제외하고, 입력을 전처리하는 데 5개의 명령어를 사용하고, 근사 결과를 후처리하는 데 3개의 명령어를 사용한다.
이와 달리, 본 발명의 일 실시예에 따른 연산 장치는 수학식 6을 이용하여 역수 함수의 근사를 연산하되, 종래 연산 장치보다 적은 수의 명령어로 역수 함수의 근사값을 구할 수 있다.
본 발명의 일 실시예에 따른 연산 장치는 입력의 지수부를 바이어스로 치환하여 입력을 전처리하고, 입력의 지수부와 바이어스 간 차이를 오프셋으로 생성한다(S920).
연산 장치는 역수 함수에 구간별 근사를 적용하여 전처리된 입력에 대한 근사 결과를 계산한다(S922).
연산 장치는 근사 결과의 지수부에서 오프셋을 뺄셈으로써, 입력에 대한 역수 함수의 최종 근사값을 계산한다(S924).
본 발명의 일 실시예에 따른 연산 장치는 단계 S922의 명령어를 제외하고, 입력을 전처리하는 데 1개의 명령어를 사용하고, 근사 결과를 후처리하는 데 1개의 명령어를 사용한다. 종래 연산 장치에 비해, 연산 장치는 적은 수의 명령어들로 역수 함수의 근사를 연산할 수 있다.
또한, 연산 장치는 함수의 변화량이 작은 도메인에서 함수 근사를 연산하므로, 함수의 변화량이 큰 도메인에서의 함수 근사보다 근사 오차를 줄일 수 있다.
표 1은 종래의 명령어들의 수와 본 발명의 일 실시예에 따른 명령어들의 수를 비교하기 위한 것이다.
함수 종래 방법에 따른 명령어 수 본 개시에 따른 명령어 수
전처리 후처리 합계 전처리 후처리 합계
지수(exp) 4 3 7(100%) 2 1 3(43%)
로그(log) 5 1 6(100%) 1 1 2(33%)
제곱근(sqrt) 9 4 13(100%) 1 1 2(15%)
제곱근의 역수(rsqrt) 9 3 12(100%) 1 1 2(17%)
역수(recip) 5 3 8(100%) 1 1 2(25%)
표 1을 참조하면, 본 발명의 일 실시예에 따른 연산 방법에서 사용되는 명령어들의 수가 종래 방법에 따른 명령어의 수보다 적다. 이에 따라, 본 발명의 일 실시예에 따른 연산 방법은 종래 방법에 비해 오버헤드(overhead)를 15 ~ 43% 수준으로 줄일 수 있다.도 3에서는 과정 S300 내지 과정 S304를 순차적으로 실행하는 것으로 기재하고 있으나, 이는 본 발명의 일 실시예의 기술 사상을 예시적으로 설명한 것에 불과한 것이다. 다시 말해, 본 발명의 일 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 일 실시예의 본질적인 특성에서 벗어나지 않는 범위에서 도 3에 기재된 순서를 변경하여 실행하거나 과정 S300 내지 과정 S304 중 하나 이상의 과정을 병렬적으로 실행하는 것으로 다양하게 수정 및 변형하여 적용 가능할 것이므로, 도 3은 시계열적인 순서로 한정되는 것은 아니다.
한편, 도 3에 도시된 과정들은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 즉, 이러한 컴퓨터가 읽을 수 있는 기록매체는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등의 비일시적인(non-transitory) 매체를 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
또한, 본 발명의 구성 요소들은 메모리, 프로세서, 논리 회로, 룩-업 테이블(look-up table) 등과 같은 집적 회로 구조를 사용할 수 있다. 이러한 집적 회로 구조는 하나 이상의 마이크로 프로세서 또는 다른 제어 장치의 제어를 통해 본 명세서에 기술 된 각각의 기능을 실행한다. 또한, 본 발명의 구성 요소들은 특정 논리 기능을 수행하기 위한 하나 이상의 실행 가능한 명령을 포함하고 하나 이상의 마이크로 프로세서 또는 다른 제어 장치에 의해 실행되는 프로그램 또는 코드의 일부에 의해 구체적으로 구현될 수 있다. 또한, 본 발명의 구성 요소들은 각각의 기능을 수행하는 중앙 처리 장치(CPU), 마이크로 프로세서 등을 포함하거나 이에 의해 구현될 수 있다. 또한, 본 발명의 구성 요소들은 하나 이상의 프로세서에 의해 실행되는 명령어들을 하나 이상의 메모리에 저장할 수 있다.
이상의 설명은 본 실시예의 기술 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 실시예의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 실시예들은 본 실시예의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 실시예의 기술 사상의 범위가 한정되는 것은 아니다. 본 실시예의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 실시예의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
20: 연산 시스템 200: 데이터 메모리
210: 프로그램 메모리 220: 프로세서

Claims (14)

  1. 부동 소수점 표현에서 함수 근사의 연산을 위한 컴퓨터 구현 방법에 있어서
    입력의 지수부를 기 설정된 값으로 치환함으로써 전처리된 입력을 생성하고, 상기 입력의 지수부의 치환에 따른 오프셋(offset)을 생성하는 제1 명령어 실행 단계;
    상기 전처리된 입력에 대해 함수의 근사 결과를 구하는 제2 명령어 실행 단계; 및
    상기 오프셋을 이용하여 상기 근사 결과를 후처리함으로써, 상기 입력에 대한 상기 함수의 근사값을 계산하는 제3 명령어 실행 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 제1 명령어 실행 단계는,
    상기 입력의 지수부를 바이어스(bias)로 치환함으로써 상기 전처리된 입력을 생성하는 단계를 포함하는 방법.
  3. 제1항에 있어서,
    상기 제1 명령어 실행 단계는,
    상기 입력의 지수부와 상기 기 설정된 값 간 차이에 기초하여 상기 오프셋을 생성하는 단계를 포함하는 방법.
  4. 제1항에 있어서,
    상기 제1 명령어 실행 단계는,
    상기 입력의 지수부와 상기 기 설정된 값 간 차이만큼 원 비트를 시프트(shift)하여 상기 오프셋을 생성하는 단계를 포함하는 방법.
  5. 제1항에 있어서,
    상기 제1 명령어 실행 단계는,
    상기 입력의 지수부와 바이어스 간 차이값이 홀수인지 짝수인지 여부에 따라, 상기 입력의 지수부를 다른 값으로 치환하는 단계를 포함하는 방법.
  6. 제5항에 있어서,
    상기 치환하는 단계는,
    상기 차이값이 짝수인 경우, 상기 입력의 지수부를 바이어스로 치환함으로써 상기 전처리된 입력을 생성하고, 상기 입력의 지수부와 상기 바이어스 간 차이에 비트 시프트를 수행함으로써 상기 오프셋을 생성하는 단계를 포함하는 방법.
  7. 제5항에 있어서,
    상기 치환하는 단계는,
    상기 차이값이 홀수인 경우, 상기 입력의 지수부를 바이어스와 홀수의 합으로 치환함으로써 상기 전처리된 입력을 생성하고, 상기 입력의 지수부와 상기 합 간 차이에 비트 시프트를 수행함으로써 상기 오프셋을 생성하는 단계를 포함하는 방법.
  8. 제1항에 있어서,
    상기 제3 명령어 실행 단계는,
    상기 근사 결과의 지수부와 상기 오프셋의 합에 기초하여, 상기 입력에 대한 상기 함수의 근사값을 계산하는 단계를 포함하는 방법.
  9. 제1항에 있어서,
    상기 제3 명령어 실행 단계는,
    상기 근사 결과의 지수부와 상기 오프셋의 차이에 기초하여, 상기 입력에 대한 상기 함수의 근사값을 계산하는 단계를 포함하는 방법.
  10. 제1항에 있어서,
    상기 제3 명령어 실행 단계는,
    상기 입력에 대한 상기 함수의 근사값이 부동 소수점 체계의 표현 범위를 벗어나는 경우, 상기 근사값을 제로(zero) 또는 무한대(infinity) 중 어느 하나로 설정하는 단계를 포함하는 방법.
  11. 제1항에 있어서,
    상기 제1 명령어 실행 단계는,
    상기 입력의 전처리 전에 상기 입력에 기 설정된 로그값을 곱합으로써, 상기 입력을 조정하는 단계를 더 포함하고,
    상기 제2 명령어 실행 단계는,
    상기 전처리된 입력에 대해 상기 기 설정된 로그값과 연관된 지수함수의 근사 결과를 구하는 단계인 방법.
  12. 제1항에 있어서,
    상기 제3 명령어 실행 단계는,
    상기 오프셋, 기 설정된 로그값 및 상기 근사 결과에 곱셈 누적(Multiply Accumulate; MAC) 연산을 수행함으로써, 상기 입력에 대한 상기 함수의 근사값을 계산하는 단계를 포함하는 방법.
  13. 명령어들을 저장하는 메모리; 및
    상기 명령어들을 실행하는 프로세서를 포함하며,
    상기 프로세서는,
    입력의 지수부를 기 설정된 값으로 치환함으로써 전처리된 입력을 생성하고, 상기 입력의 지수부의 치환에 따른 오프셋(offset)을 생성하고,
    상기 전처리된 입력에 대해 상기 함수의 근사 결과를 구하고,
    상기 오프셋을 이용하여 상기 근사 결과를 후처리함으로써, 상기 입력에 대한 함수의 근사값을 계산하는, 연산 장치.
  14. 제1항 내지 제12항 중 어느 한 항의 방법을 실행하기 위한 컴퓨터 프로그램을 기록한 컴퓨터로 판독 가능한 기록매체.
KR1020210100619A 2021-07-30 2021-07-30 부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치 KR102670314B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020210100619A KR102670314B1 (ko) 2021-07-30 부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치
PCT/KR2022/011592 WO2023008984A1 (ko) 2021-07-30 2022-08-04 부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210100619A KR102670314B1 (ko) 2021-07-30 부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20230018742A true KR20230018742A (ko) 2023-02-07
KR102670314B1 KR102670314B1 (ko) 2024-05-29

Family

ID=

Also Published As

Publication number Publication date
WO2023008984A1 (ko) 2023-02-02

Similar Documents

Publication Publication Date Title
CN106990937B (zh) 一种浮点数处理装置和处理方法
EP4080351A1 (en) Arithmetic logic unit, and floating-point number multiplication calculation method and device
JP6360450B2 (ja) 浮動小数点オペランドを乗算するためのデータ処理装置及び方法
GB2586559A (en) Enhanced low precision binary floating-point formatting
CN111695671B (zh) 训练神经网络的方法及装置、电子设备
CN110569020A (zh) 超越函数求值
CN112506935A (zh) 数据处理方法、装置、电子设备、存储介质及程序产品
WO2022168604A1 (ja) ソフトマックス関数の近似計算装置、近似計算方法および近似計算プログラム
CN112241291A (zh) 用于指数函数实施的浮点单元
CN112035796B (zh) 面向集成电路的超低延时的整数次幂计算电路的优化方法
US6182100B1 (en) Method and system for performing a logarithmic estimation within a data processing system
US8775494B2 (en) System and method for testing whether a result is correctly rounded
WO2018196750A1 (zh) 处理乘加运算的装置和处理乘加运算的方法
CN116700663A (zh) 一种浮点数处理方法及装置
Chen et al. Approximate softmax functions for energy-efficient deep neural networks
KR100847934B1 (ko) 스케일링된 정수를 사용하는 부동 소수점 연산
CN111984226B (zh) 一种基于双曲cordic的立方根求解装置及求解方法
KR20170138143A (ko) 단일 곱셈-누산 방법 및 장치
KR102670314B1 (ko) 부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치
KR20230018742A (ko) 부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치
KR102503498B1 (ko) 수학적 함수를 연산하는 시스템 및 방법
Lim et al. RLIBM-ALL: A Novel Polynomial Approximation Method to Produce Correctly Rounded Results for Multiple Representations and Rounding Modes
CN111831257A (zh) 一种用于计算正弦或余弦函数的实现方法及装置
CN114860193A (zh) 一种用于计算Power函数的硬件运算电路及数据处理方法
Lee et al. Optimized custom precision function evaluation for embedded processors

Legal Events

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