임베디드/임베디드 개념

프로세서 관점에서 본 임베디드 시스템

fish9903 2023. 2. 27. 18:53

임베디드 프로세서

흔히 말하는 CPU는 general purpose processor로, 범용 processor이다. 이름에서 알 수 있듯이 범용, 즉 다양한 목적을 위해 사용되는 processor이다. 이와는 다른 processor들도 존재하는데, 임베디드 processor가 이중 하나이다.

 

우선 임베디드 processor는 사용되는 목적부터 범용 processor와 다르다. 다양한 목적을 위해 다양한 동작을 할 수 있도록 만들어지는 범용 processor와 다르게 특정한 목적을 위해 만들어진 것이 임베디 드 processor이다. 특정한 목적을 위해 동작하는 processor란 이미지 처리, 신호 처리 등의 하나의 목표를 위해 주어진 동작만 수행하는 processor라는 것이다. 보통 이러한 동작은 복잡한 계산과 이것이 반복되는 것으로, 범용 processor에서 이 동작을 처리하면 처리 시간도 오래 걸리고 비효율적이다. 따라서 이 동작을 위해 개발된 임베디드 processor가 이럴 때 사용된다.

 

DSP(Digital Signal Processor)

임베디드 processor의 대표적인 예가 DSP이다. DSP란 Digital Signal Processor로, 신호 처리에 사용 되는 processor이다. DSP는 다음과 같은 신호 처리에 대한 복잡한 계산을 반복하는 작업을 한다. 신호처리는 Fourier transform을 사용하는데, Fourier transform 자체가 복잡한 연산과 많은 반복으로 이루어져 있다.

 

푸리에 변환

 

또한, 단순한 정수사이의 연산이 아닌 삼각함수, 자연상수 e, 지수에 대한 곱셈과 이를 반복해 서 더하는 계산이기 때문에 매우 복잡하다. 그리고 임베디드 시스템은 주변 환경과 실시간으로 상호작용하는 특징을 가지고 있기 때문에, 많은 양의 데이터(여기서는 신호)를 처리해야하는데, 이러한 연산을 반복적으로 하는 것에 범용 processor를 사 용하는 것은 매우 비효율적이기때문에 이 연산을 위한 processor를 따로 만들었고, 그것이 DSP이다.

 

앞의 연산을 빨리 처리하기 위해 DSP processor에는 MAC이라는 instruction이 존재한다. MAC은 Multiply-Accumulate의 약자로, 이름에서 알 수 있듯이, 곱하고 더하는 연산을 한다. 특징은 곱하고 더 하는 연산을 한 번에 처리하여 빠르게 동작한다는 것이다.

MAX instruction 예시

곱셈과 덧셈을 한 번에 처리하는 것이 당연 해 보일 수 있고, 이 방식이 왜 빠른지 의문을 가질 수 있다. 이는 MAC이 속한 ISA의 특징을 보면 알 수 있다. ISA는 Instruction Set Architecture의 약자로, 명령어의 구조를 나타낸 것이다.

 

ISA(Instruction Set Architecture)

ISA를 크게 2가지로 구별하면 CISC와 RISC가 있다. CISC란 Complex Instruction Set Computer의 약자로, 이름에서 알 수 있듯 이 복잡한 명령어 구조를 의미한다. 한 개의 program line을 한 개의 instruction으로 변환하는 것이 CISC의 철학이다. 예를 들어 x=a+b+c+d와 같은 연산을 한 개의 instruction으로 처리한다는 것이다. 이렇게 하기 위해선, 각 연산에 대응되는 instruction이 존재해야 하고, instruction개수가 많아지고 복잡 해질 수밖에 없다.

 

RISC는 이러한 복잡한 instruction구조에서 벗어나고자 만들어진 구조로 단순한 동작을 하는 instruction을 기본으로 이를 조합하여 복잡한 동작을 한다. RICS는 위의 x=a+b+c+d를 한 번에 처리하 지 않고 덧셈을 담당하는 instruction을 여러 번 사용하여 처리한다. 이렇게 하면 instruction 자체는 단 순해지고, 복잡한 instruction의 기능을 외우지 않아도 된다. 하지만 한 개의 식을 여러 번의 동작으로 처리하기 때문에, 처리 속도가 느려질 수 있다. 이런 RISC를 기반으로 개발한 ARM이라는 architecture 가 존재한다. ARM은 전력소모가 적고 빨라서 임베디드 시스템뿐만 아니라 핸드폰과 같은 곳에서도 널 리 쓰인다.

 

위에서 언급하였던 DSP의 MAC instruction은 한 개의 instruction이고, 더하고 곱하는 연산을 MAC이 라는 한 개의 instruction으로 처리하므로 CISC에 속한다. CISC인 MAC를 사용하는 이유는 속도 때문이다. Fourier transform의 계산을 RISC로 쪼개서 하는 것보단 CISC로 한 번에 처리하는 것이 빠르다.

 

DSP의 다른 중요한 특징 중의 하나는 Harvard architecture를 따른다는 것이다. Harvard architecture는 하나의 메모리에 data와 instruction이 존재하는 Von Neumann architecture와 다르게, 메모리가 data를 저장하는 data memory와 instruction을 저장하는 instruction memory 2개로 나뉘어져 있다. 이렇게 나누면 좋은 점은 data와 instruction을 동시에 읽어올 수 있어 속도가 빠르다. 이러한 Harvard architecture는 임베디드 시스템에서 자주 사용되는데, 임베디드 시스템에선 instruction memory를 건들 이유가 없기 때문이다.

임베디드 시스템은 보통 개발자가 프로그램을 작성하여 instruction memory에 넣어 놓고 사용자가 건들지 않는다. 변경되는 부분은 data memory로, 임베디드 시스템은 data만 가지고 작동되는 것이다. 따라서 임베디드 시스템은 instruction 메모리와 data 메모리 를 분리시킬 수 있고, 이는 속도 향상에 많은 도움이 된다.

 

속도

 이렇듯 속도는 범용 컴퓨터뿐만 아니라, 임베디드 컴퓨터에서도 중요한 요소이다. 약간 다른 점이 있다면 범용 컴퓨터는 처리 시간이 짧을수록 좋고, 임베디드 컴퓨터는 처리 시간이 짧을수록 좋긴 하지만, ‘right time’ 또는 ‘on time’, 즉 정해진 시간 내에 처리할 수 있는지를 더 중요하게 생각한다. 명령어 처리 속도를 빠르게 하기 위해 processor는 여러 가지 parallelism을 제공한다. Parallelism은 동시에 여 러 작업을 하는 것으로 속도를 빠르게 하기위해서 사용된다. Parallelism은 범용 컴퓨터에서도 중요하지 만 임베디드 컴퓨터에서도 매우 중요하다. 하드웨어에서 지원해주는 parallelism에는 pipelining, ILP, 그 리고 multicore가 있다.

 

 Pipelining은 processor가 하나의 instruction이 실행되는 중간에 다른 instruction들을 처리하는 방법 이다. Instruction을 처리하는 과정을 몇 가지 단계로 나눌 수 있고, 각 단계를 처리하는 부분이 processor에 존재한다. 하나의 instruction이 한 단계를 실행할 때 다른 instruction들의 다른 단계를 동 시에 실행하는 것이다. 이렇게 하면 processor에 명령어를 처리하는 부분들이 쉬지 않고 작동하면서 많은 수의 instruction을 빠른 시간 내에 처리할 수 있다. Pipeline을 좀 더 효과적으로 사용하기 위해 다음에 실행될 명령어를 예측하는 방법을 사용하기도 한 다. if문과 같은 조건문은 조건문의 결과에 따라 다음에 실행되는 명령어가 바뀐다. 만약 if조건문에 있 는 조건이 참이면 if문 안의 명령어를 실행해야 하고, 거짓이면 else문에 있는 명령어를 실행하거나 넘 어가야 한다. Pipeline은 한 명령어를 실행하는 중간에 그 다음에 실행될 명령어를 미리 fetch해야 하는 데, 조건문의 결과에 따라 그 다음 명령어가 달라지기 때문에, 무엇을 fetch해야할지 난감하다. 이걸 해결하기 위해 processor가 예측을 하는데, 이것을 branch speculate이라고 하고, 이 예측의 확률을 높이는 것이 좋은 성능을 가져온다.

 

임베디드 processor는 속도를 높이기 위해 pipeline이외에도 여러가지 parallelism을 지원한다. Multicore와 ILP로, multicore는 코어를 여러 개 사용하여 코어 개수만큼의 thread를 동시에 처리하는 방법이다.

ILP는 Instruction Level Parallelism으로 CISC instruction, subword parallelism, superscalar와 VLIW가 있다. CISC instruction은 앞서 설명했듯이 더 빠른 연산을 위해 MAC과 같이 한 instruction이 복합적인 계 산을 지원하는 instruction을 사용하는 것이다.

Subword parallelism은 word size보다 작은 단위에서의 parallelism을 의미한다. 빠른 데이터 처리를 위해 하나의 큰 adder를 여러 개의 작은 adder로 쪼개서 사용하여 연산을 동시에 하는 방법이다.

Superscalar는 한 번에 여러 개의 instruction을 fetch하여 동시에 연산하는 것이다. Pipeline과 차이점 은 pipeline은 instruction들을 순차적으로 fetch하여 서로 다른 단계를 동시에 처리하는 것이고, superscalar는 instruction들을 순차적이 아닌 동시에 fetch하여 실행한다는 것이다. 여러 instruction을 동시에 처리하기 위해선 여러 개의 ALU가 필요하고, 동시에 fetch하는 instruction들이 서로 독립적이어야 한다.

VLIW는 Very Long Instruction Word의 약자로, instruction을 fetch할 때 서로 독립적인 instruction들을 한 word에 넣고 이것을 한 번에 처리하는 방식이다. 따라서 VLIW라는 이름에서 알 수 있듯이 한 word의 크기가 매우 길어진다.

 


 처음 언급했듯이, 임베디드 processor는 사용목적부터 범용 processor차이가 있고 그 특징 또한 다양 하다. 또한 임베디드 processor는 범용 processor와 다르게 특정 architecture가 시장을 dominate하고있 지 않기 때문에 자신의 목적에 맞는 임베디드 processor를 선택하는 것이 중요하다

'임베디드 > 임베디드 개념' 카테고리의 다른 글

ARM Mode, Register, Exception  (0) 2023.07.14
빠른 프로세스와 느린 메모리  (0) 2023.03.25