Wednesday, December 24, 2014

[매드프로젝트 강좌] CORDIC - 01. 개념


오랜만에 조금은 전문적인 강좌를 해보고자 한다.
이유는 어쩌다보니 이 CORDIC에 관한 자료를 찾게되었는데 인터넷 블로그에 제대로 설명된 블로그가 개인적으로 검색(?) 했을 때 나오지 않는 것 같다.

홍익인간의 뜻으로 자료를 한글로 정리하고자 한다.
짧은 영어 실력과 나쁜 머리로 이해한 것이니 .. 혹시 틀린게 있더라도 널리 이해를 바란다.(리플 달아주시면 더욱더 감사드립니다.)

우선 CORDIC이 무엇인지 알아보자.

CORDIC란? COordinate Rotation DIgital Computer의 약어로 1959년 Volder에 의해 나온 알고리즘이다. 이 알고리즘을 이용하여 삼각 함수, 쌍곡선 함수, 승산, 나눗셈 등을 할 수 있다.

응? 삼각 함수, 쌍곡선 함수, 승산, 나눗셈 등은 이미 가능한데 이건 먼소리인가?

후.. 이걸 설명하려면 조금 더 거슬러야 하는데 최대한 간략히 설명해 보도록 하겠다.

우리가 이미 사용하고 있는 컴퓨터 언어는 굉장히 상위레벨의 언어들이다. JAVA, C/C++, C# 등 이 되겠는데 여기서 사용하는 언어에서는 +, -, *, /, %, sin함수, cos함수, tan함수, root 등을 사용하여 단순하게 기입한다.

그러나 실제로 이렇게 사용한 것들을 컴파일러를 통해 컴퓨터언어로 바꾸게 되고 최종적으로 CPU 또는 MCU 등에서 처리 할 때는 하드웨어로 처리하게 되는 것이다.

그래 .. 내가 멀 코딩하던 그게 최종 처리하는건 하드웨어인걸 알겠어 그래서?

문제는 하드웨어에서는 우리가 표현할 수 있는 한계가 바로 0과 1 이라는 것이다. 이것만을 가지고 덧셈, 뺄셈, 곱셈 정도는 그럭저럭 할 수 있지만 나눗셈, 삼각함수 등으로 넘어가게 되면 엄청나게 복잡해지고 느려지게 된다. 거기다가 소숫점이라니... 하드웨어로 소수점을 표현하기 위해서 고정소수점과 부동소수점이 있는데 부동소수점 같은 경우에도 엄청나게 복잡한 하드웨어가 필요하기 때문에 느려지고 커지게 된다. (이를 특화 시킨게 DSP 임)

자 .. 그럼 이거랑 CORDIC랑 어떤 연관이냐 하는 것인데 이전 암호화 강좌에서 한번 언급했듯 인류가 발전하게된 가장 큰 원인은 바로 '전쟁'에서 나오는 것인데 CORDIC 또한 군사용으로 사용하게 되었다. 바로 대표적인게 군용 레이더 이다. 속도를 빠르게 하기 위해서는 위의 문제로 인해 가능하면 하드웨어로 처리하는 것이 좋다. 따라서 적보다 빠르게 레이더로 발견하기 위해 삼각함수나 나눗셈 같은 연산들을 하드웨어로 처리하려고 보니 너무너무 복잡하고 느리고 크기가 커지게 되는데 여기서 이 CORDIC 연산을 사용하게 되는 것이다.

아마 처음에는 LOGIC 게이트인 74 시리즈 칩들만을 이용하여 CORIDC 연산기를 설계하지 않았나 싶은데 지금은 주로 FPGA, ASIC을 위한 알고리즘으로 많이 사용하고 있으며 Pipeline 설계에도 적합하다.

들리는 말로는 이 CORDIC을 증명하신 Volder 님께서 알고리즘 특허를 내셨으면 아마 때돈을 손에 쥐셨겠지만 '널리 인간을 이롭게 한다'는 취지로 특허를 일부러 안내셨다고 하는 카더라가 있다.

그냥 생각난거지만 특허라는 제도도 사실은 '널리 인간을 이롭게 하자' 라는 것에서 부터 시작된 것이다. 특허를 통해서 기술을 공개시키지만 그것에 대한 소유권을 보장해주고 대신 특정기간이 지난 후에는 인류를 위해 누구나가 사용할 수 있도록 하는 것이 바로 특허제도 인 것이다. 재밌지 않은가??

이를 이용해서 아주아주 옛날에 개발되었지만 최근에서야 급격하게 떠오르고 있는 것이 3D 프린터 되시겠다. 특허 풀리면서 제조 산업의 구조가 변하고 있다는...

잡소리가 긴데 마..마지막 하나만 더... 재밌는 단어가 있어 공유하고자 한다.

세상이 천천히 '시나브로' 변하고 있다.

시나브로 .. 이 이쁜 순우리말을 왜 난 모르고 있었지??

다음 강좌는 실제로 CORDIC 알고리즘에 대해서 설명한다... 쿨럭;

No comments :

Post a Comment