| <bgcolor=#96834a> 명령어 집합 | |
| CISC | AMD64●x86● · M68K · 68xx · Z80 · 8080 · MOS 65xx · VAX |
| RISC | Arm ARM · RISC-V● · MIPS● · DEC Alpha · POWER PowerPC · CELL-BE LoongArch · OpenRISC · PA-RISC · SPARC · Blackfin · SuperH · AVR32 AVR |
| VLIW EPIC | E2K · IA-64 · Crusoe |
1. 개요
Very Long Instruction Word1980년 전후로 예일대에 재학 중이던 조셉 피셔(Joseph Fisher)가 박사학위 취득을 위해 발표한 CPU 명령어 처리 기법이다.
2. 상세
병렬화된 컴퓨팅 기술에 관한 개념은 무려 1946년 앨런 튜링 등의 학자들이 연구한 수평적 프로그래밍 개념으로부터 기원한다. 명령어를 일반적인 튜링 머신처럼 선형으로 처리하는 것보다 서로간에 종속성이 없는 명령어들을 한꺼번에 처리하면 더욱 효율적일 것이라는 아이디어를 시작으로 명령 처리의 병렬화에 관한 연구가 이루어졌고 그 결과 중 하나가 VLIW다.즉 CISC 방식의 복잡한 명령어를 내부적으로 쪼개어 일정한 명령어 크기를 갖도록 가공해 명령어 처리의 효율성을 높이는 것이 RISC라면 VLIW는 그냥 처음부터 디코드 유닛에 한꺼번에 종속성이 없는 여러 명령어를 때려박고 그걸 한번에 처리하여 효율성을 높이는 방식이다. VLIW 방식의 디코딩을 하려면 처음부터 들어오는 명령어들이 어느 정도 일정한 크기와 적은 종속성을 가지고 있다고 가정하고 소프트웨어적으로 명령어를 가공해 주어야 한다.
만일 상기한 이상적인 상태가 주어진다면 VLIW 방식의 명령어 디코딩은 비교적 단순한 하드웨어로 동일 공정, 유사한 갯수의 트렌지스터를 가진 CISC나 RISC를 뛰어넘는 굉장한 명령어 처리 효율을 낼 수 있다. 그러나 하술할 단점들로 인해 1980년대~90년대를 거치며 많은 VLIW 방식으로 명령어를 처리하는 중앙처리장치들이 만들어졌음에도 대부분 혹평을 들었다. 이후 하드웨어적으로 명령어를 최적화하고 코드 재배치를 하여 병렬로 실행하는 슈퍼스칼라와 여러 데이터를 묶어 한번에 처리하는 SIMD 그리고 비순차적 실행 등이 도입되면서 CISC나 RISC도 VLIW 방식을 어느정도 흉내내게 되고 소프트웨어 생산성이 떨어진다는 단점이 현대 컴퓨터 시장에서 더 크게 다가오게 되고 ASIC, FPGA 만큼의 효율도 안나오면서 일반적인 목적의 CPU 시장에서 사장되고 군사 & 우주용 CPU나 전자계산기 등 특정 목적의 CPU 시장에서 근근히 살아남고 있다.
3. 장점
- 이론적인 처리 속도는 정말 빠르다. 한번에 하나씩 처리하는 것보다는 당연히 여러 개의 명령어를 한꺼번에 처리하는 것이 빠르다. VLIW 방식의 최대의 장점이다. 한국 인터넷 상에서는 SIMD 처리에 밀린다고 하는데 이는 황당한 소리다. VLIW는 디코더 크기를 키울 필요없어 그 자리와 할당할 트렌지스터를 연산기에 넣으면 되기 때문에 성능이 좋을 수 밖에 없다. 아이테니엄이나 옐브루스 프로세서 광고에 항상 나오는 동일 공정 CPU 대비 2배니 3배니 하는 광고 대조군 CPU 역시 SSE나 AVX 등 SIMD를 포함한 부동소수점 연산 비교였다.
- 다양한 명령어 크기와 종속성 분석이 쉽지 않은 CISC 방식 명령어의 파이프라이닝보단 미리 종속성을 제거하고 크기가 일정하게 들어오는 VLIW 방식 명령어의 파이프라이닝이 더 간단하다. 이러한 특징으로 DSP나 NPU같이 입력 값들의 형식이 일정하다면 디코더와 같은 부분까지 최대한 줄여서 성능도 ASIC에 준하고 범용 처리에도 사용이 가능한 프로세서의 제작이 가능하다.
4. 단점
- 컴파일러 설계 난이도가 매우 높다. VLIW 방식 명령어 처리의 가장 큰 단점. VLIW 방식의 명령어 처리 기법을 효율적으로 쓰려면 애초에 Fetch되는 명령어의 크기가 일정하게 되어야 할 필요가 있다. 그러나 그렇게 하려면 컴파일러가 미리 바이너리 파일을 만들때 내부의 이진 코드의 크기를 일정하게 만들고 종속성이 최대한 줄어들도록 재배치해 줘야 한다. 단순히 어셈블러를 바이너리 코드로 바꾸고 명령어 가공 및 프로세스 스케줄링을 하드웨어에 맡기기만 하면 되는 RISC, CISC 방식의 컴파일러보다 컴파일러 제작 난이도가 더 높을 수밖에 없다.
- 종속성이 지나치게 높은 코드가 들어올 경우 여러 개의 명령어가 들어올 것을 가정한 유닛에 한두개의 명령어만이 한번에 처리되고 나머지 공간은 NOP(명령어 없음) 상태로 채워지게 되어 의외로 효율성이 떨어질 수 있다.
- 위의 단점들로 소프트웨어 만들때 다른 CPU보다 좀더 까다롭다. 과거보다 소프트웨어 생산성이 더 중요시 되는 현대 컴퓨터 산업에선 맞지 않는 CPU다.
- 간단한 구조에 높은 효율을 내지만 융통성이 없는 ASIC, FPGA와 반대의 성격을 가진 CISC와 RISC 사이에 애매하게 껴있다. 과거 GPU를 봐도 컴퓨트 유닛을 VLIW로 만들다가 RISC와 ASIC 조합으로 전환했다.
- 캐시 메모리 미스나 예외, 분기 예측 실패 등 명령어가 기대하던 대로 제때 들어오지 않고 잘못 들어올 상황에 처할 경우 같이 처리하기 위해 들어왔던 다른 명령어들까지 한꺼번에 빼고 다시 명령어를 읽어들여야 해서 예측 실패에 취약한 편이다.
5. 적용 제품
- 인텔 아이테니엄 시리즈
- 옐브루스 프로세서
- 트랜스메타의 크루소, 이피시온 프로세서
- AMD의 TeraScale 셰이더 아키텍처
- Nuon 플레이어의 Nuon MPE#
- DSP (Texas Instruments, Tensilica 등)
- NPU (Apple NPU, Intel NPU 등)
6. EPIC
Explicitly Parallel Instruction ComputingEPIC은 Explicitly Parallel Instruction Computing의 약자로, 휴렛 팩커드와 인텔에서 개발한 VLIW의 개량형이다.
VLIW는 명령어의 병렬화와 같은 처리를 모두 컴파일러에게 전담시켰고 프로세서는 이 명령어를 받아다 그대로 실행하는 구조를 가진 스케줄된 파이프라인에 묶여져 있기 때문에 파이프라인의 깊이나 실행 유닛의 결합을 바꾸는 것이 불가능하거나, 바꾸기 위해서는 코드를 다시 컴파일 해야 한다는 단점이 있다.
EPIC은 이러한 문제를 해결하기 위해 컴파일러가 병렬화가 가능한 명령어를 번들링해 프로세서가 이 힌트를 가지고 명령어를 병렬 처리 (ILP) 하였으며 투기적 실행과 분기 예측을 위한 명령어와 레지스터 프리페칭 관련 기능 등이 추가되어 명령어를 받아다 그대로 실행하는 딱딱한 VLIW구조를 탈피해 약간의 추상화적인 특성이 도입된 유연한 구조를 가진다.
인텔 아이테니엄 시리즈가 최초로 EPIC을 채택했고 옐브루스 프로세서 등 현대의 VLIW들이 EPIC과 유사한 구조를 영향 받았다고 한다.