커뮤니티

십진 부동소수점 연산

현대의 모든 컴퓨터들은 이진 부동소수점 (binary floating point) 연산을 하드웨어 혹은 소프트웨어 형태로 지원하고 있다. 이진 부동 소수점은 많은 영역에서 매우 중요한 역할을 하고 있지만, 금융, 세금, 상거래, 사용자 중심의 애플리케이션 (user-centric application) 혹은 웹 서비스등에는 부적합하다. 왜냐하면, 위에서 열거된 애플리케이션들에서는 십진 데이터들의 정확도가 매우 중요하며 이진 부동소수점 연산으로는 정확히 표현되어질 수 없기 때문이다.

- 예 1: 은행에서 원금 $80.9에 대한 연 이율이 5%라고 할 때, 현행 이진 부동소수점을 이용하면, 1년 후 $84.9450000000001이 되고 이어 라운딩 (rounding)을 거치면 $84.95가 됨. 십진 부동소수점을 사용하면 1년 후 $84.945가 되고 라운딩을 거치면 $84.94가 됨.
- 예 2: 십진수 0.1을 2진수로 나타내면 0.00011..이고 이를 십진수로 표현해 보면 0.1이 아닌 0.09999..가 됨. 십진수를 이용하면 0.1임.

이에 따라 IEEE에서는 기존의 754 표준 [1](이진 부동소수점에 관한 표준으로 1985년에 제정 발표됨)에 십진 부동소수점 연산에 관한 내용과 fused multiply-add에 관한 내용들을 새로이 추가하여 2008년 8월에 IEEE 754-2008 [2]을 발표하였다. 기존의 binary16, binary32, binary64, binary128에 새로 포함된 십진 데이터 포맷은 decimal32, decimal64, decimal128이다.
십진 포맷과 연산을 이용한 소프트웨어및 하드웨어 구현들이 최근들어 소개되고 있는데, 요약하면 다음과 같다.

- IBM Power6 프로세서의 십진 부동소수점 유닛의 하드웨어 구현, IBM System z9 메인프레임의 펌웨어 (firmware), IBM System z10의 십진 부동소수점 유닛의 하드웨어. 지수(exponent) 부분은 2진수를 사용하고, significand부분은 인코딩 기법으로 DPD를 사용하고 있음
- Intel의 십진 부동소수점 지원 연산 라이브러리: 2008년 1월 P754 (754 표준안 직전의 draft)용 소프트웨어 라이브러리를 출시. 사용 가능한 플랫폼은 리눅스, 윈도우즈, HP-UX, 솔라리스, OSX임. BID 포멧을 지원함
- SilMinds의 십진 부동소수점 연산 하드웨어 IP (intelectuall property) 코어: 십진 부동소수점 전용 하드웨어를 이용하면 속도를 빨리할 수 있을 뿐만 아니라 에너지 소모를 줄일 수 있다는 데 중점을 두어 각종 IP를 개발, 판매하고 있음. 판매하고 있는 십진 IP 코어 (모두 64/128비트를 지원함)는 덧셈기, 곱셈기, FMA (fused multiply-add), 나눗셈기, 제곱근 연산기 (square rooter). DPD (Densely Packed Decoding) 를 지원함. 스탠퍼드 대학교 출신 박사들이 만든 회사로 2007년 이집트의 카이로에 본사를 두고 시작하였으며 2009년에 실리콘 밸리에 지점을 내고 영역을 북미 지역으로 확대하고 있음
- Out-of-the-Box Computing의 십진 마이크로프로세서 개발: 십진 초월함수 (로그 함수, 사인 함수, 코사인 함수등) 구현에 힘쓰고 있으며, 최종 목표는 모든 초월함수를 하나로 묶고, 나눗셈기와 제곱근을 하나로 묶는 등, 한 칩에 될 수 있는 한 많은 함수를 구현하려하고 있슴. 2003년에 실리콘 밸리 지역에서 시작하였으며 프로세서와 관련된 다양한 종류의 디자인을 시도하고 있음

연산기는 소형 임베디드 컴퓨터부터 일반 범용 컴퓨터에 이르기까지 곱셈, 덧셈, 뺄셈, 나눗셈 등의 기본 연산과 기타 연산 (예. 초월함수)을 수행하며 로직 처리를 담당 하는 부분과 함께 ALU (Arithmetic Logic Unit)를 구성하며 ALU는 각종 제어부와 함께 중앙처리 장치 (CPU: Central Processing Unit)를 구성한다.
부동 소수점 방식 연산기는 고정 소수점 방식 (fixed point)과 달리 지수 (exponent)를 따로 처리 하여 수의 표현 범위를 크게 할 수 있는 방식으로 이 다이내믹한 표현 방식은 일반 범용 컴퓨터 연산 처리에 적합하여 주로 사용된다.
1985년 IEEE에서 표준을 정한 이래로 32비트, 64비트의 2진 형태의 부동소수점이 채택되어 현재까지 사용되어 지고있으며 10진 부동 소수점 연산 방식은 인간이 주로 사용하는 10진수 체계를 그대로 사용함으로써 2진 체계로의 변환 오차를 줄인 보다 정확한 연산 방식이다.
10진 부동소수점 연산 방식은 2진수로의 변환 오차가 없어 보다 정확한 수의 표현이 가능하며, 사람에게 보다 친숙한 수의 표현 체계이다. 하지만, 컴퓨터 하드웨어가 0과 1의 2진 구조를 가지므로 BCD (Binary Coded Decimal)와 같이 2진수를 십진 수로 변환하는 방법이 필요하다 [3]. IEEE 표준안에서는 DPD (densely packed decimal) 코드와 BID (binary integer decimal) 코드가 제안되어 있는데, DPD는 하드웨어에 적합한 것으로 알려져 IBM이 선호하고 있으며, BID는 소프트웨어에 적합한 것으로 알려져 Intel이 선호하고 있다. 하지만, 2009년 부터는 두 인코딩 방법의 장점을 서로 연결하려는 시도가 이루어지고 있다. 또한 기본적인 연산 (덧셈, 뺄셈, 곱셈, 나눗셈)기 구현 이외에 초월함수에 대한 관심도 크게 증가되고 있다 [4].
십진 연산기는 10진 및 2진 변환 모듈과 복잡한 연산기 구조로 인해 칩 사이즈 및 연산 처리 시간이 크게 증가된다. 그리고, 최신 기술임에 따라 많은 연구가 이루어져 있지 않으며, 연산기 구조 및 관련 소프트웨어 라이브러리 등 연구 및 갱신이 필요한 시점이다 [5].
연산기 기술은 범용 컴퓨터 및 임베디드 시스템 하드웨어의 핵심 기술이다. 수의 표현은 무한정이며 하드웨어의 규모는 제한되어 있으므로 시스템에 맞도록 연산 기를 설계하여 적용하는 것이 필요하다.
부동소수점 방식은 표현하고자 하는 수에 일정 비율로 오차를 발생시키며 이 오차에 의해 금융 및 과학 기술 분야에 사고를 유발 할 수 있다. 예를 들어 미국 아리안 로켓 폭발 사고 [6]를 들 수 있다. 인류는 2진수 보다는 10진수를 주로 사용하여 왔으며 10진수의 수 표현을 현재 컴퓨터는 2진 표현으로 바꾸어 사용하며 이때, 변환 오차가 발생한다. 또한 경제 규모가 커지고 과학 기술이 발전함에 따라 표현되는 숫자의 범위가 급격히 늘어나며 이에 비례하여 변환 오차의 문제점 및 중요성이 크게 대두되었다. 실제로 몇몇 응용의 경우 50% ~ 90%의 처리시간이 10진 처리에 소요되는 것으로 보고되고 있다.
10진수 체계보다는 2진수 체계가 처리 속도와 칩 크기 면에서 유리하나, 최근 반도체 기술의 급격한 성능 향상으로 이 문제는 어느 정도 극복이 가능할 것으로 전망되고 있다. 그러므로, 10진 부동 소수점 방식을 설계하여 범용 컴퓨터 및 임베디드 시스템에 적용하여 오차를 줄이고 보다 정확한 컴퓨팅 환경을 제공할 필요성이 크게 대두되고 있다.
현재는 10진 부동 소수점 방식을 지원하는 소프트웨어 형태의 라이브러리가 제공되고 있으나 하드웨어 방식에 비하여 100배 ~ 1000배가 느린 것으로 알려져 있어 고속의 연산이 필요한 곳에는 매우 부적합하다.
연산 기술 개발에서 덧셈 /뺄셈 기는 가장 중요한 부분이다. 곱셈기 및 나눗셈기는 계산 과정이 매우 복잡하므로 다양한 연구가 필요한 분야이다. 예를 들어 로그 함수를 이용하여 곱셈과 나눗셈을 덧셈과 뺄셈 개념으로 해결 가능할 것이다. 기타 초월함수 및 논리부 개발은 다른 부분에 비해 상대적으로 연구/개발이 더딘 분야로 집중적인 공략이 필요하다.
회로 설계에서는 하드웨어에 대한 의존도를 높임으로써 처리속도 향상 및 에너지 효율 증대, 경박 단소형의 저 잡음 부품을 개발, ASIC 보다는 FPGA를 많이 사용하여 시간 단축 및 수정 용이, 및 고 부가가치 기술 개발등이 필요하다.
또한, 설계 모듈을 IP (Intellectual Property) 화함으로써, 재사용 성을 강화시켜 설계 시간을 단축시킬 수 있고, 데이터 베이스 화 하는 작업 과 IP의 신뢰성 확보, 표준화, 복사및 재분배 방지 등이 필요하다. 소프트웨어 측면에서는 알고리즘 및 프로그램 개발과 라이브러리 및 IP 구축이 필요하다. 그리고, 연산기 신뢰성을 고려하여야 하는데, 연산 장치는 하드웨어의 핵심품인 이유로 높은 신뢰성이 요구된다. 예를 들어, 인텔의 경우 1994년 경미한 오류의 발생으로 전 세계 펜티엄 프로세서를 모두 교체한 전력이 있으며 현재도 수시로 여러 오차와 하드웨어적 문제로 리콜 요구에 시달리는 실정이다. 따라서 효율적인 테스팅 기법 개발이 필요하다.
10진 부동소수점 연산 기술의 경제적 파급 효과를 가늠하기 위하여 응용 가능한 분야를 살펴보면 다음과 같다.
은행이나 세무 관련 회사및 정부 기관의 이율 및 세율 계산에 필요할 것으로 예측된다. 소형 전자계산기도 높은 연산 처리 속도를 요구하지 않고 정확도가 보다 중요한 특징이 있어 본 기술의 적용이 효과적일 것으로 판단된다. 국내의 디스플레이 기술과 결합되어 수첩에 부착되는 소형 계산기, 전자수첩 및 MP3의 부가기능으로서의 계산기 등  다양한 응용 제품 등의 창출로 산업에 큰 기여가 가능할 것으로 보인다. 자동 표적 사격 등에서 오차가 중요한 경우에 적용되어 군사 무기의 첨단화에 기여하게 될 것으로 예상된다.
상기에 기술한 응용 예들 외에도, 임베디드 시스템 시장의 확대로 많은 응용 사례가 생겨나고 있으며 CPU 기술의 개발은 국가의 군사적 그리고 경제적 안보에 매우 중요한 기술이다. 10진수치 체계의 사용과 적은 오차를 갖는 연산처리 시스템은 금융등 상업적인 분야뿐만 아니라 전 산업에 걸쳐 경제적, 안보적, 그리고 보다 신뢰할 수 있는 시스템 제공이 활발해 지고 이에 따른 응용으로 직,간접적인 IT 산업에 영향을 미칠 기술이다. IT와 반도체 설비 기반과 같은 첨단 기술을 갖추고 있는 우리나라에서 정부의 통합된 관련 기구의 합리적이고 일관된 연구 관리 하에, 본 DFP 기술을 포함하여 임베디드 시장을 필두로 성공 사례를 만들고 범용 컴퓨터 시장으로 확대해 나간다면 DFP 산업 뿐 아니라 CPU 산업은 큰 성장 동력으로 국가 산업과 경제에 기여하게 될 것이다.

참고문헌
[1] ANSI/IEEE Std 754: IEEE Standard for Binary Floating-Point Arithmetic, IEEE, 1985.
[2] IEEE754-2008, IEEE, 2008.
[3] http:speleotrove.com/decimal/
[4] M. Cowlishaw, “Decimal Floating-Point: Algorithm for Computers,” IEEE Symp. on Computer Arithmetic, pp. 104-111, 2003.
[5] B. Parhami, Computer Arithmetic: Algorithms and Hardware Designs, Oxford Univ. Press, 2000.
[6] Wikipedia, Ariane 5, http://en.wikipedia.org/wiki/Ariane_5

 

  • 좋아요
등록된 댓글이 없습니다.