* 주의 : 이 글은 (주)싱크웍스가 DSP를 사용하거나, 시작하시려는 분들을 위해서 준비한 기술 자료이며 향후 인쇄매체에 활용될 예정입니다. 다른 매체에 이용하시려는 분들은 미리 연락을 취해주시기 바랍니다.
정의
흔히 접하는 DSP중에 TMS320C3000 계열이나 TMS320C67계열은 Floating Point Processor다. Floating 이라는 말은 ‘둥둥 떠다니는’ 정도로 번역될 수 있기에 Floating Point Processor를 부동(浮動) 소수점 연산자라 부르기도 한다. 한편, TMS320C2000 계열과 같은 DSP를 Fixed Point Processor라고 분류하는데, Fixed라는 말이 ‘고정된’ 정도로 번역되기에 Fixed Point Processor를 고정 소수점 연산자라 부르기도 한다.
그런데, 도대체 뭐가 고정이고 부동이란 말인가? 참으로 알다가도 모를 일이다. 소수점이 둥둥 떠다녀서 부동이라는 말인가? 소수점이 어디에 콱 박혀, 빼도 박도 못해서 고정이라는 말인가? 참으로 부적절한 용어 선정이라 할 수 밖에 없다. 용어만 가지고도 충분히 이해할 수 있어야 할 텐데, 오히려 헷갈리게 만드니 어떻게 올바르다 할 수 있겠는가? 본 에세이에서는 Floating Point Processor와 Fixed Point Processor에 대한 설명과 아울러 적절한 용어를 제안하고자 한다.
Floating Point Processor
주위에서 DSP를 접해본 경험이 있으신 분들을 더러 뵙는다. 어떤 칩을 사용해 보셨습니까? 하고 여쭈면, 대부분 TMS320C3X계열을 언급하신다. 거의 학교나 연구소에서 널리 쓰이는 듯 보인다. 왜, 3X를 사용하셨습니까? 하고 여쭈면, C3X는 Floating Point Processor이기에 수치 처리가 편리하고 연산이 정확해서 사용했습니다 하고 답을 하신다. 바로 Floating Point Processor의 가장 큰 장점이 되겠다.
왜 Floating Point Processor는,
수치 처리가 편리하고,
연산 결과가 정확하고,
다루기가 쉬운가?
이게 과연 정말일까? 남들이 얘기하니 그냥 그러려니 하고 무작정 사용하고 있는 것은 아닐까? 하나씩 따져보자. 지금도 3X를 사용하고 있다면, 상황은 조금 심각해질 수 있다. 3X는 TI에서 주력하는 3대 플랫폼에 포함되어 있지 않다. 왜 그럴까?
Floating Point Processor에서의 수치 표현
Floating Point Processor 내부에서는 숫자를 조금 특이하게 표현하고 있다. TMS320C67계열에서는 숫자를 어떻게 표현하고 있는지 그림 1을 보도록 하자. 참고로 C67XX 계열은 32비트 프로세서이고, 그림 1은 32비트로 데이터를 표현할때의 모습니다. 이를 흔히 단정도(Single Precision) 표현이라고 한다. 솔직히 ‘단정도‘라는 용어도 꽝이라고 하고 싶다.

[그림 1] TMS320C67XX 계열에서 데이터 표현법
그림 상단에보면 우측에서 좌측으로 번호가 0부터 31까지 먹여져 있는데, 비트를 지시하고 있다. 네모로 이뤄진 그림에서는 s,e,m 등이 보이는데 각각은,
s = 부호 비트 (sign bit)
e = 지수 비트 (exponent)
m = 밑 비트 (mantissa)
이다.
즉, 지수와 밑, 그리고 부호를 각각 표현하기에 소수점 표현이 가능하다. 상상을 해보시기 바란다. 각각의 규정을 좀 더 살펴보자.
s = 부호 비트로 이 값이 0 이면 양수, 1이면 음수를 가르킨다.
e = 지수로 -128 ~ 127 까지 표현한다.
m = 23비트의 normalized fractional 형태로 숫자를 표현한다.
* normalized fractional이라는 용어에 대해서 Fixed Point Processor에서 설명하고 있다. 분수형태로 수를 표현하는 방법이다라고 우선 생각하자.
위와 같이 설명이 될 때, 그림 1이 표현하는 수는 어떻게 계산될까?
.....(수식 1-1)
처럼 된다. 위 수식에서 다른 부분은 쉽게 이해가 될 것 같은데, 1.m 이라는 부분에 혼돈이 있을 수 있을 듯 하다.
만약
m = 0 이면, 1.m = 1.0 이 된다.
m = 1 이면, 1.m = 1.0 + 1/224 이 된다.
보다 자세한 설명은 Fixed Point Processor 편을 기다려 주시기 바란다.
수식 1-1에서 e 값이 변화한다고 상상해보자. 소수점이 여기저기 돌아다니는 것을 쉽게 떠올릴 수 있을 것이다. 그래서, Floating Point Processor인 것이다. 필자는 이를 소수형 프로세서라 부르고 싶다. 칩 내부에서 소수 표현이 가능한 회로를 가지고 있기 때문이다. 연산자라는 말도 솔직히 싫다. 우리나라 말도 아니고, 어차피 외래어를 쓸려면 뜻 전달이 명확한 것이 낫다는 생각이다. 연산자가 뭔가? 참고로 Fixed Point 프로세서에는 소수를 표현할 회로가 없다. 다음 편에서 살펴 볼 예정이니, 조금만 기다려 주시기 바란다.
Floating Point Number의 규정
Floating Point Processer 끼리 데이터를 주고 받는 것을 가정해보자. 부호비트, 지수비트, 밑 비트들이 서로 맞지 않으면 데이터 교환에 낭패를 볼 수 있다. 그래서, IEEE에서는 754번째로 Floating Point Number에 대해서 규정을 해두었다. 그림 1이 바로 IEEE의 754 규격 중에서 32비트 데이터 표현 규격이다. 이를 단정밀도(Single Precision) 표현이라고도 한다고 했다. 따라서, TMS320C67계열을 IEEE의 754 규격을 따르고 있다. 그러나, C3X 계열은 TI 자체 규격을 따르고 있기에 다른 프로세서와 Floating Number를 교환할 때에는 신경을 바짝 써야 한다.
단정밀도 숫자 표현
그림 1에서 표현 가능한 숫자 범위를 계산해보자. 아주 간단하다.
단정밀도에서 최대값
s = 0 ; 양수이어야 하니깐,
e = 255 ; 최대이어야 하니깐,
m = 1 - 2-(23-1);역시 최대이어야 하니깐
수식 1에다 대입해보자. 얼마가 나오는가?
최대값 = [1 + (1-2-24)]*2255-127 = 3.4 *1038
음의 최소값은 어떻게 될까?
각자 계산해보시기 바란다. 답만 알려드리자면,
최소값 = -3.4 * 1038
이다. 숫자 분해능도 계산해보시기 바란다. 최대값과 최소값의 범위를 한번 상상해보시기 바란다. 얼마나 큰가? 그래서, 좀처럼 소수형 프로세서에서는 숫자가 넘치는 현상이 발생하지 않는다. 많은 사람들이 좋아하는 이유 중 으뜸이다. 이를 조금 더 전문적으로 얘기하자면, Dynamic Range가 넓다라고 표현한다. 당연히, Fixed Point Processor에 비해서 넓은 것이다.
두 배의 정밀도 표현
C로 프로그램을 짤 때, 보다 높은 정밀도의 숫자가 필요해서 double이라는 키워드를 사용하는 경우가 있다. 두 배의 정밀도로 숫자를 표현하고 싶다는 것인데, IEEE 754에서는 배정밀도 수치 표현도 규정하고 있으며, C67XX 계열은 이를 따르고 있다. 그림 2는 배정밀도 규격이다.

[그림 2] 배정밀도(Double Precision) 표현
두 배가 되었다고 해서, 지수가 16비트로 늘어난 것이 아님에 주의해야 한다.
IEEE 754에서 추가적으로 알아 둘만한 내용
IEEE 754에서는 특별한 숫자를 다루고 있다. 표1을 우선 보도록 하자. 보면 아하~ 하게 될 것이다.

[표1] IEEE 754의 특별 숫자
아하~ 그렇구나! 맞는가? 프로그램 짜신 분들은 더러 겪어본 내용이 들어 있을 것이다.
소수형 프로세서의 장단점
DSP가 가장 많이 쓰이는 분야 중 하나인 이동전화나 MP3 플레이어 등에는 Fixed Point Processor가 들어간다. 왜 소수형 프로세서가 안 쓰일까? 수치 표현 능력이 저렇게도 뛰어난데... MP3 플레이어나 휴대폰에는 수치처리를 웬만큼 해도 되기에 저러나?
왜 TI는 제어용 DSP에 Fixed Point Processor인 C2000 계열을 선전할까? 학교나 연구소에서는 소수형 프로세서를 사용하는데, TI가 바보 아닌가? 의문이 많다. Fixed Point Processor 까지 다룬 후에 종합적인 장단점 비교를 해보고자 한다. 여기서는 지금까지 언급된 내용을 토대로 소수형 프로세서의 장단점을 비교하도록 하겠다.
장점
쓰기가 너무나 쉽다. 누구 말대로, 돌리면 되네~~ 다. 숫자에 대해서 고민할 필요가 없다. 그냥 쓰면 된다. 이유는? 소수형 프로세서의 Dynamic Range가 엄청나게 넓기 때문이다. 알고리즘 개발이 급선무인 곳에서 숫자처리 때문에 골머리를 싸맨다면, 낭비로 밖에 볼 수가 없다.
단점
소수표현을 위한 회로가 추가되기에 가격이 비싸다. TMS320C6211과 TMS320C6711은 서로 Pin for Pin 호환이 가능한 프로세서다. 다시 말해 C6211 칩을 들어내고, C6711을 장착해도 잘 돌아갈 수 있다는 얘기다. 그런데, C6211은 Fixed Point 프로세서이고 C6711은 소수형 프로세서다. 가격차가 50%이상 난다. 소수형 처리를 위한 회로에 기인한다.
또한, 소비전력이 많다. 안 그렇겠는가? 회로가 더 들어갔는데...
결정적으로 느리다. 정수형 계산보다 소수형 계산이 더 많은 사이클을 요구한다. 소수형 프로세서에서 간간히 정수형 계산을 하는 경우를 볼 수 있는데, 이는 사이클 소비를 개선하기 위함이다.
한가지 생각해 볼만한 내용이 있다. Data Converter와 DSP와 연결문제인데, 데이터 컨버터에서 받아들이는 데이터는 한결같이 Fixed Point 데이터다. Floating Point Number를 받아들이는 Data Converter는 없다. 소수형 프로세서에서 이러한 Data Converter로 값을 전달할 때 어떤 일들이 벌어지는지 각자 생각해보시기 바란다.
<자료출처 - (주)싱크웍스(http://www.syncworks.co.kr)>
※ 글을 옮겨갈 때에는 꼭 출처를 밝혀주시기 바랍니다.