강좌 & 팁
Cortex-A8 을 표방하는 MCU 들의 스펙들을 보면 모두 NEON 을 지원한다는 용어를 보게된다.
NEON 이 무엇인가?
결로부터 말하면 계산을 빠르게 하게위한 명령어 셋트이다.
NEON은 32비트 32개, 64비트 32개, 128비트 16개의 레지스터가 있다.
(각레지스터는 공통으로 사용한다 32비트 2개로 64비트를 만들고 64비트 두개로 128비트레지스터를 만든다
또한 소수점 연산을 위해 VFP 가 있으며 위의 레지스터는 VFP 와 같이 사용한다.)
명령어를 살펴보면 범인이 이해하기엔 난해한 것들이 많다.
그래도 그중에 쉬운명령어를 살펴보면
VMUL.u32 D1, D2, D3
참고) D 로 시작하는 레지스터는 double 레지스터 즉 64비트이다.
Q 는 128비트, S 는 32비트이다
위의 명령어는 두개의 32비트 곱셈이 수행되는 명령어 이다.
두개의 곱셈명령어일 경우 풀어보자면 아래의 2개의 명령어가 동시에 수행되는 것이다.
MUL R1, R2, R3
MUL R4, R5, R6
또한 예를 들면 아래는 D1 += D2*D3 의 명령어이다.
VMLA.f32 D1, D2, D3
사용해본 분들의 말을 들어보면 DSP 가 이제 필요 없다고 한다.
또한 영상처리에서 사용해보니 C 코드 알고리즘이 10배정도가 빨라진다고 한다. 대단 ^^
NEON 명령어는 그리 많지 않다.
용어가 생소해서 어려운정도이다.
용어중에 스칼라, 벡터라는 말이 나온다.
설명하자면 간단하다.
MUL R0,R1,R2 <== 요거는 스칼라연산 R0 = R1*R2
MUL R0,R1 <== 요거는 벡터연산 R0 = R0*R1
이제 NEON 을 공부해야 겠다 ^^ 어셈블러는 묘한 매력이 있다.. 암호와 같은 ㅋㅋ
참고로 플로팅연산을 담당하는 코프로세서를 FP 라고한다.
ARM 에는 VFP 가 있다. VectorFP 인것이다. 즉 위의 연산 두번째 기능이 되는 향상된(?) FP 인것이라고
개인적인 결론을 내려본다.
와우 완전 흥미 진진 합니다.