예를든다면, TI에서 주력하는 C6000 DSP의 경우는 RISC 구조를 갖추고 있기에, C 로 작업을 한다고 해도 칩의 성능을 십분 발휘할 수 있다는 판단을 할 수 있다. C5000이나 24계열은 CISC 구조의 특징을 대폭 안고 있기에 C 로 작업할 경우, 어셈블리에 비해서 효율이 떨어질 수 있음을 예측할 수 있다. C와 어셈블리를 혼용하는 전략을 채택할 수도 있을 것이다. C5000에서 어셈블리보다 C 작업이 많은 이유는 클럭 스피드가 높기 때문이지, 칩 구조가 C 하고 친하기 때문은 아니다.
C2000의 떠 오르는 별인 28계열은 CISC와 RISC 구조의 장점을 골고루 채용하고 있는 아주 재미난 칩이다. 이 칩을 CISC 구조로 볼 것이냐, RISC 구조로 볼 것이냐는 보는 각도에 따라 정확히 달라질 수 있는 참 재미난 칩인데, 사실상 이렇게 분류하는 작업에는 큰 의미가 없다. 각각의 장점을 잘 파악하고 그 장점을 십분 활용할 수 있는 자세만 갖추면 되는데, 이 자세를 갖추기 위해서는 각각을 이해하고 있어야 한다.
RISC 란 Reduced Instruction Set Computer의 약자로, 말 그대로 명령어 체계가 대폭 단순화 된 컴퓨터를 말한다. CISC는 Complex Instructions Set Computer 의 약자로 그야말로 명령어 체계가 복잡하다. 쉬운 예를 들자면, 우리나라 말인 한글은 RISC 체계에 비유할 수 있겠고 한자와 같은 표의문자는 CISC 체계에 비유할 수 있다.
시간날 때, C6000이 갖춘 명령어 체계와 24계열이 갖춘 명령어 체계를 비교해보시기 바란다. 간단히 명령어 수가 몇 개인가만 세어 보아도 위 내용을 체감할 수 있을 것이다. 24계열이 훨씬 complex 하다는 것을 느낄 수 있을 것이다. 칩은 C6000이 훨씬 큰데도 불구하고...
여기서 잠깐, 세종대 정보통신공학과 양홍준, 윤재선씨가 정리한 CISC와 RISC의 정의를 살펴보자.
일반적으로 우리가 사용하는 IBM 호환기종의 데스크 탑이나 상당수 노트북의 CPU 는 CISC 방식인 경우가 많다. CISC 방식은 연산에 처리되는 복잡한 명령어들을 수백개 이상 탑재하고 있는 마이크로 프로세서이다. 하지만 CISC 는 명령어 개수의 증가에 따라 프로세서 내부구조가 매우 복잡하게 되고 고속으로 작동되는 프로세서를 만들기가 힘든 편이다. 따라서 이런 단점을 극복하기 위해 등장한 것이 RISC CPU 이다.
CISC 방식의 경우 사용되는 모든 명령어들을 내장하고 있지만 실제 주로 사용되는 명령어들은 그중 10% 이하에 불과하다. 이에 착안해서 만들어진 것이 RISC 방식으로서 사용빈도가 높은 명령어들만을 내장하여 CPU 를 구성하게 된다. RISC 에 대해 간단히 설명하면 축약형 프로세서라고 할 수 있는데 CISC 처럼 많은 수의 단순한 명령어들을 탑재하는 것이 아니라 여러 종류의 명령을 포괄해 처리할 수 있는 작은 수의 명령어만을 탑재하는 방식이라고 할 수 있다.
초기에는 단순히 RISC 가 CISC 를 간소화시킨 정도로 보기도 했지만 RISC 방식으로 CISC 에서 처리할 수 있는 기능들을 모두 처리할 수 있게 됨에 따라 RISC 방식이 점차 주목받게 되었다. RISC 방식은 명령어 수를 줄이는 대신 CPU 내부 캐쉬, 수퍼스칼라, 파이프 라이닝, 비순차 명령 실행, 레지스터 개수 증가 등 CPU 의 근본적인 기능을 향상시켜 CISC 에 비해 월등히 높은 처리 속도를 가질 수 있게 되었다. 우리가 흔히 볼 수 있는 CPU 들중에서 인텔의 x86 계열 CPU 와 AMD 의 인텔 호환 CPU 등은 CISC 방식으로, 트랜스메타의 크루소와 애플의 PowerPC 등은 RISC 방식으로 분류할 수 있다.
개인용 컴퓨터에서 사용되는 CPU 중 대표적인 RISC 방식이라고 할 수 있는 PowerPC(Power Optimized with Enhanced RISC PC)는 애플과 IBM 그리고 모토로라가 합작해서 만든 CPU 이다. 이 PowerPC 의 경우 CISC 방식인 인텔의 x86 CPU 와 비교하면 같은 클럭에서 수배 이상의 처리속도를 보여주고 있다. 이런 빠른 속도 때문에 워크스테이션이나 대형 서버 같은 컴퓨터들은 대부분 RISC 방식의 CPU 를 사용하고 있다.
RISC 의 장점들이 많아 이런 점을 설명하다보니 CISC 는 무조건 비효율적인 방식이라고 보기 쉽지만 그런 것은 아니다. CISC 는 수백개의 명령어를 내장함에 따라 이 명령어들을 이용해 프로그램을 짜기가 보다 편리하고 CPU 를 좀 더 복잡하고 세밀하게 다룰 수 있다는 장점이 있다. 또 하위호환성을 갖게 되고 다양한 환경에서도 제 성능을 발휘할 수 있다.
짤막한 글이지만 RISC와 CISC의 특징 그리고 각각의 장점을 아주 잘 설명해주고 있다. DSP는 각각의 특징중에서 스피드를 잘 살릴 수 있는 구조만을 취사 선택했다고 볼 수 있다.
DSP의 생명은 스피드이기에 이 스피드를 살리기 위해서 여러 가지 특징을 취사선택해서 사용하고 있는데, RISC 구조로부터는 다음과 같은 특징을 채용하고 있다.
하버드 아키텍쳐 - 1클럭으로 1 명령어처리 가능
register-to-register operation - 메모리 접근 빈도를 줄여서 시스템 효율 극대화
CISC에서는 한 명령어로 많은 일을 처리할 수 있다는 점을 채용해서, 24게열에서는 MACD 과 같은 명령어를 갖추게 된다. MACD라는 명령어는 Sum of Product를 하기위한 핵심 명령어인데, APAC, LT, MPY, DMOV 라는 서로 다른 4개의 명령어로 순차처리되어야 할 내용을 한 명령어로 합쳐서 한 사이클에 처리할 수 있도록 하고 있다. RISC 구조였다면 결코 합칠 수 없는 명령어들이다.
스피드가 생명인 DSP에서는 대부분의 명령어를 한 사이클에 처리하기 위해서는 희생해야하는 부분도 있게 된다. 수치 연산을 위한 하드웨어 곱셈기 운용 명령어들도 다뤄야 하고, 스트림 데이터를 처리하기 위해서 Circular addressing을 지원해야 하는 등 특화된 구조에 따른 명령어들을 RISC에 비해서 더 갖추고 있음에도 불구하고, 거의 모든 명령어를 한 사이클에 처리하려다 보니, 대용량 메모리 관리나 byte addressing등을 희생하게 된다. 그러나, C6000에서는 병령 프로세서 구조를 통해서 대용량 메모리 관리와 byte 어드레싱을 지원하고 있으며, 28X에서도 최대 4G byte에 달하는 메모리 관리 능력과 제한되긴 하지만 byte addressing도 일부 가능하다
좀 더 세부적으로 얘기하자면, 24계열은 (원어민의 말을 빌리자면) very CISC 하다. CISC 구조를 갖춘 DSP 이기에 구조를 아는 만큼 프로그램의 효율은 좋아지게 된다. C6000이 24계열에 비해서 월등히 규모가 큰 칩임에도 불구하고 24계열이 어렵게 느껴지는 이유가 바로 이 때문이다. 시쳇말로, 'C6000에서 가장 어려운 부분은 땜질이다.' 라고 한다. 그 이유가 바로 여기에 있는 것이다. 3X도 마찬가지다. 3X 역시 RISC 특징을 띄고 있어서, 접근하기가 무척 쉽다. 게다가, Peripherals 모듈이 극히 작아서 ' 그냥 돌리면 되네' 하는 정도다. 24계열은 CISC 특징을 대폭 띄고 있는데다가, 아주 다양한 peripherals를 탑재하고 있어서 까다롭고 어렵게 느껴지는데 이는 초기장벽에 불과하다. 이 부분을 혼돈하면 점점 멀어지게 된다. C3X나 C6000으로 모터제어를 할려면, 대여섯 개 이상의 칩을 갖다부쳐야 한다. 쉬운 작업이 아니다. 하지만, 24계열은 하나면 된다.
DSP가 RISC냐 CISC냐 묻는다면, 사실 답하기가 곤란하다. 그냥 DSP는 DSP일뿐이다 라고 말할 수밖에 없다. 이 글을 읽은 이상은 이 DSP는 어떤 특징을 띄고 있나? 하고 의문을 품어야 할 것이다.
<자료출처 - (주)싱크웍스(http://www.syncworks.co.kr)>
※ 글을 옮겨갈 때에는 꼭 출처를 밝혀주시기 바랍니다.