DEC 알파

알파(Alpha, 원래 이름 Alpha AXP)는 디지털 이큅먼트 코퍼레이션(DEC)이 개발한 64비트 축소 명령어 집합 컴퓨터(RISC) 명령어 집합(ISA)이다. 알파는 32비트 VAX 복잡 명령어 집합 컴퓨터(CISC)를 대체하고, 유닉스 워크스테이션 및 유사 시장을 겨냥해 경쟁력이 높은 RISC 프로세서로 설계되었다.

알파는 원래 DEC에서 개발하고 제조한 일련의 마이크로프로세서로 구현되었다. 이 마이크로프로세서들은 다양한 DEC 워크스테이션과 서버에서 가장 두드러지게 사용되었으며, 결과적으로 DEC의 거의 모든 중대형 라인업의 기초가 되었다. PC 폼 팩터 메인보드를 포함하여 여러 제3자 업체에서도 알파 시스템을 생산했다.

알파를 지원했던 운영체제에는 OpenVMS(이전 이름 OpenVMS AXP), Tru64 UNIX(이전 이름 DEC OSF/1 AXP 및 Digital UNIX), 윈도우 NT(NT 4.0 이후 중단, 출시 전 윈도우 2000 RC2), 리눅스(데비안, SUSE, 젠투 및 레드햇), BSD(NetBSD, OpenBSD 및 6.x 버전까지의 FreeBSD), 플랜 9, L4Ka::Pistachio 커널 등이 있다. 알파 아키텍처의 초기 개발 중에 Ultrix를 알파로 이식하는 작업이 수행되었으나, 제품으로 출시되지는 않았다.

알파 아키텍처는 1998년 DEC의 대부분과 함께 컴팩에 매각되었다. 이미 인텔 x86 고객이었던 컴팩은 출시 예정인 휴렛 팩커드/인텔 아이테니엄 아키텍처를 위해 알파를 단계적으로 폐지한다고 발표했으며, 2001년에 모든 알파 지식 재산권을 인텔에 매각하여 사실상 제품을 단종시켰다. 휴렛 팩커드는 2002년에 컴팩을 인수하여 2004년까지 기존 제품 라인의 개발을 계속했으며, 주로 기존 고객층을 대상으로 2007년 4월까지 알파 기반 시스템을 판매했다.

 역사 

 PRISM 

1980년대 디지털 이큅먼트 코퍼레이션(DEC)은 VMS 운영체제를 구동하는 32비트 CISC 기반 VAX 컴퓨터로 큰 성공을 거두었다. 그럼에도 불구하고 1980년대 중반까지 회사는 새로운 RISC 기술이 CISC보다 훨씬 효율적이라는 업계의 합의에 동의했다. 이에 대응하여 많은 경쟁적인 내부 프로젝트가 시작되었고, 이는 지연과 불확실성을 초래했다.

알파는 여러 이전 프로젝트의 산물인 PRISM(Parallel Reduced Instruction Set Machine)이라는 초기 RISC 프로젝트에서 탄생했다. PRISM은 유닉스 스타일의 애플리케이션과 디지털의 기존 VAX/VMS 소프트웨어를 약간의 변환 후에 지원할 수 있는 유연한 설계로 기획되었다. MICA라는 새로운 운영체제는 공통 커널에서 Ultrix와 VAX/VMS 인터페이스를 모두 지원하여 두 플랫폼용 소프트웨어를 PRISM 아키텍처로 쉽게 이식할 수 있도록 할 예정이었다.

1985년에 시작된 PRISM 설계는 컴퓨터 시장의 변화에 대응하기 위해 개발 과정에서 계속해서 변경되었으며, 이는 도입의 긴 지연으로 이어졌다. 1987년 여름이 되어서야 마이크로프로세서 형식으로는 가장 초기의 설계 중 하나인 64비트 설계로 결정되었다. 1987년 10월, 썬 마이크로시스템즈는 새로운 SPARC 프로세서를 사용한 첫 워크스테이션인 Sun-4를 출시했다. 이는 모토로라 68020을 사용한 이전의 Sun-3 설계보다 약 3~4배 빨랐으며, DEC의 모든 유닉스 제품에 대해서도 동일한 우위를 가졌다. 계획은 다시 변경되어 PRISM은 32비트 부품으로 다시 조정되었고 유닉스 시장을 직접 겨냥했다. 이는 설계를 더욱 지연시켰다.

PRISM의 출시일이 계속 늦춰지는 것을 지켜보며 더 많은 지연 가능성에 직면하자, 팔로알토 사무소의 한 팀은 다른 RISC 프로세서를 사용하여 자체 워크스테이션을 설계하기로 결정했다. 그들은 MIPS R2000을 선택했고 90일 만에 Ultrix를 구동하는 첫 DECstation을 구축했다. 이는 회사 내에서 격렬한 논쟁을 불러일으켰고, 1988년 7월 경영진 회의에서 절정에 달했다. PRISM은 R2000보다 빠른 것으로 보였지만, R2000 기계는 PRISM보다 1년 이른 1989년 1월에 시장에 출시될 수 있었다. 이 제안이 받아들여졌을 때, PRISM의 원래 두 가지 역할 중 하나가 사라졌다. VMS PRISM을 만들기로 한 결정은 이미 이 시점에서 끝났기 때문에 남은 역할이 없었다. PRISM은 그 회의에서 취소되었다.

 RISCy VAX 
회의가 끝날 무렵, 밥 숩닉은 켄 올슨으로부터 RISC 칩이 미래에 VAX 라인에 위협이 될 것으로 보인다는 말을 들었다. 올슨은 숩닉에게 VAX를 미래의 RISC 시스템과 경쟁할 수 있도록 유지하기 위해 무엇을 할 수 있을지 고려해 보라고 요청했다.

이것이 "RISCy VAX" 팀의 결성으로 이어졌다. 그들은 처음에 세 가지 개념을 고려했다. 하나는 RISC와 유사한 시스템에서 실행되고 더 복잡한 VAX 명령어는 시스템 서브루틴에 맡기는 축소된 VAX 명령어 집합(ISA) 버전이었다. 다른 개념은 기존 VAX 코드를 실행 중에 자체 ISA로 번역하여 CPU 캐시에 저장하는 순수 RISC 시스템이었다. 마지막으로, 완전한 VAX ISA를 구동하는 훨씬 빠른 CISC 프로세서의 가능성이 여전히 남아 있었다. 불행히도 이러한 모든 접근 방식은 오버헤드를 유발하며 고유 RISC 코드를 실행하는 순수 RISC 기계와 경쟁할 수 없었다.

그 후 그룹은 기존 VAX 원칩 솔루션 중 하나와 고성능 요구를 위한 코프로세서로 사용되는 RISC 칩을 결합한 하이브리드 시스템을 고려했다. 이러한 연구는 시스템이 필연적으로 저성능 부품에 의해 발목을 잡힐 것이며 설득력 있는 이점을 제공하지 못할 것임을 시사했다. 이 시점에서 낸시 크로넨버그는 사람들이 구동하는 것은 VAX가 아니라 VMS이며, VMS는 인터럽트 및 메모리 페이징 모델링에 기반한 몇 가지 하드웨어 의존성만 가지고 있다는 점을 지적했다. 모델의 이러한 작은 부분들만 보존된다면 VMS를 RISC 칩으로 이식하지 못할 설득력 있는 이유가 없어 보였다. 이 개념에 대한 추가 작업은 이것이 실행 가능한 접근 방식임을 시사했다.

숩닉은 그 결과 보고서를 1989년 2월 전략 태스크포스에 가져갔다. 두 가지 질문이 제기되었다. 결과물인 RISC 설계가 유닉스 시장에서도 성능 리더가 될 수 있는가, 그리고 그 기계는 개방형 표준이어야 하는가? 그리고 그와 함께 적절한 수정을 거쳐 PRISM 아키텍처를 채택하기로 결정했다. 이것은 성공적인 CMOS CVAX 구현의 후속인 "EVAX" 개념이 되었다. 경영진이 조사 결과를 수락했을 때, 그들은 프로젝트에 "VAX"를 제거한 더 중립적인 이름을 부여하기로 결정했고 결국 알파(Alpha)로 낙점했다. 이 이름은 NVAX 기반 VAX 4000 모델의 코드명으로 사용된 "Omega"에서 영감을 받았다. "Alpha"는 새로운 라인의 시작을 의미하도록 의도되었다(알파와 오메가 참조). 직후에 새로운 아키텍처로 VMS를 이식하는 작업이 시작되었다.

 알파 
알파는 고성능과 VMS 및 유닉스를 모두 실행할 수 있는 능력을 위해 설계되었다. 이진 변환은 VAX VMS 및 Ultrix MIPS 애플리케이션과의 하위 호환성을 제공한다. 이는 대부분의 기본 PRISM 개념을 구현하지만, VMS 및 VMS 프로그램이 전혀 변환 없이 합리적인 속도로 실행될 수 있도록 재조정되었다. 주요 알파 명령어 집합 설계자는 리처드 L. 사이츠와 리처드 T. 위텍이었다. PRISM의 Epicode는 알파의 PALcode로 발전하여 플랫폼 및 프로세서 구현별 기능에 대한 추상화된 인터페이스를 제공했다.

알파가 마이크로프로세서 산업에 기여한 주요 공헌과 그 성능의 주된 이유는 아키텍처 자체보다는 그 구현에 있다. 당시(그리고 지금도 마찬가지로) 마이크로칩 산업은 자동화된 설계 및 레이아웃 도구가 지배하고 있었다. 디지털의 칩 설계자들은 복잡한 VAX 아키텍처를 처리하기 위해 정교한 수동 회로 설계를 계속 추구했다. 알파 칩은 더 단순하고 깔끔한 아키텍처에 적용된 수동 회로 설계가 더 자동화된 설계 시스템으로 가능한 것보다 훨씬 높은 동작 주파수를 허용한다는 것을 보여주었다. 이 칩들은 마이크로프로세서 설계 커뮤니티 내에서 맞춤형 회로 설계의 르네상스를 일으켰다.

원래 알파 프로세서들은 DECchip 21x64 시리즈로 명명되었으며, 1990년대 중반에 "DECchip"이 "Alpha"로 대체되었다. 처음 두 자리 숫자 "21"은 21세기를 의미하고, 마지막 두 자리 "64"는 64비트를 의미한다. 알파는 처음부터 64비트로 설계되었으며 32비트 버전은 없다. 가운데 숫자는 알파 아키텍처의 세대를 나타낸다. 내부적으로 알파 프로세서는 EV 번호로도 식별되었는데, EV는 공식적으로 "Extended VAX"를 의미하지만, 웨스턴 리서치 랩의 전기 피클 실험에 대한 경의를 표하는 "Electric Vlasic"이라는 유머러스한 대체 의미도 가지고 있었다. EV 명칭의 숫자는 칩이 설계된 반도체 공정을 나타냈다. 예를 들어, EV4 프로세서는 DEC의 CMOS-4 공정을 사용했다.

1997년 5월, DEC는 인텔이 오리지널 펜티엄, 펜티엄 프로, 펜티엄 II 칩을 설계하면서 알파 특허를 침해했다고 소송을 제기했다. 화해의 일환으로 DEC의 칩 설계 및 제조 사업의 상당 부분이 인텔에 매각되었다. 여기에는 인텔이 포켓 PC에서 흔히 사용되는 XScale 프로세서로 마케팅한 DEC의 StrongARM 구현이 포함되었다. 디지털 세미컨덕터의 핵심인 알파 마이크로프로세서 그룹은 DEC에 남았고, 관련 사무실 건물들은 허드슨 팹의 일부로 인텔로 넘어갔다.

 개선된 모델들 
초기 몇 세대의 알파 칩들은 당시 가장 혁신적인 제품들이었다.
 EV3로 명명된 사전 생산 모델은 Alpha Demonstration Unit(ADU)이라는 프로토타입 시스템에 사용되었다. ADU는 운영체제를 알파 아키텍처로 이식하는 데 사용되었다. EV3와 이후 모델의 주요 차이점 중 하나는 부동소수점 장치가 없었다는 점이다.
 첫 번째 버전인 알파 21064 또는 EV4는 동작 주파수가 고전력 ECL 미니컴퓨터 및 메인프레임과 경쟁한 최초의 CMOS 마이크로프로세서이다.
 두 번째인 21164 또는 EV5는 칩 내부에 대용량 보조 캐시를 배치한 최초의 마이크로프로세서이다.
 세 번째인 21264 또는 EV6은 높은 동작 주파수와 더 복잡한 비순차적 명령어 처리 마이크로아키텍처를 결합한 최초의 마이크로프로세서이다.
 21364 또는 EV7은 칩 내부에 메모리 컨트롤러를 탑재한 최초의 고성능 프로세서이다.
 생산되지 않은 21464 또는 EV8은 동시 멀티스레딩을 포함한 최초의 제품이 될 예정이었으나, DEC가 컴팩에 매각된 후 이 버전은 취소되었다. EV9으로 불렸을 가능성이 높은 타란툴라(Tarantula) 연구 프로젝트는 벡터 프로세서 유닛을 특징으로 하는 최초의 알파 프로세서가 되었을 것이다.

DEC 내부 관계자에 따르면 프로세서에 AXP 태그를 선택한 것은 여전히 VAX 상표권 분쟁으로 곤욕을 치르고 있던 DEC 법무 부서의 결정이었다고 한다. 오랜 검색 끝에 "AXP"라는 태그가 어떤 법적 제약도 없다는 사실이 밝혀졌다. 컴퓨터 업계 내에서는 AXP라는 약어가 "Almost eXactly PRISM"(거의 정확히 PRISM)을 의미한다는 농담이 돌기도 했다.

 설계 원칙 
알파 아키텍처는 고성능 설계를 지향했다. 디지털은 25년에 걸쳐 성능을 천 배 증가시키는 것을 목표로 삼았다. 이를 보장하기 위해 다중 명령어 발행, 클럭 속도 또는 다중 처리를 방해하는 아키텍처 기능은 모두 제거되었다. 그 결과 알파에는 다음과 같은 기능이 없다:

 분기 지연 슬롯
 억제된 명령어
 바이트 로드 또는 스토어 명령어 (나중에 바이트 워드 확장(BWX)으로 추가됨)

 조건 코드 
알파는 정수 명령어에 대한 조건 코드를 갖지 않는데, 이는 조건 상태 레지스터에서의 잠재적인 병목 현상을 제거하기 위함이다. 두 수의 합이 64비트에 맞지 않는 오버플로가 발생하는 명령어는 하위 32비트 또는 64비트 결과값을 대상 레지스터에 기록한다. 올림수(carry)는 결과값과 피연산자 중 하나에 대해 부호 없는 비교를 수행하여 결과가 피연산자보다 작은지 확인하여 생성된다. 테스트가 참이면 조건를 나타내기 위해 대상 레지스터의 최하위 비트에 1을 기록한다.

 레지스터 
+ DEC 알파 레지스터 63 . . . 47 . . . 31 . . . 15 . . . 01 00 (비트 위치) 범용 레지스터 R0 R0 R1 R1 R2 R2 •   •   •   R29 R29 R30 R30 R31 (zero) R31, 항상 0 부동소수점 레지스터 F0 F0 F1 F1 F2 F2 •   •   •   F29 F29 F30 F30 F31 (zero) F31, 항상 0.0 프로그램 카운터 PC 0 0 Program Counter 제어 레지스터 LR0 Lock Register 0 LR1 Lock Register 1 FPCR FP Control Register

이 아키텍처는 프로그램 카운터, 2개의 록 레지스터, 부동소수점 제어 레지스터(FPCR) 외에도 32개의 정수 레지스터 세트와 32개의 부동소수점 레지스터 세트를 정의한다. 또한 구현상 필요한 경우에만 구현되는 선택적 레지스터들도 정의한다. 마지막으로 PALcode용 레지스터가 정의되어 있다.

정수 레지스터는 R0~R31로 표시되고 부동소수점 레지스터는 F0~F31로 표시된다. R31과 F31 레지스터는 0으로 하드와이어되어 있으며 명령어에 의한 해당 레지스터 쓰기는 무시된다. 디지털은 통합 레지스터 파일을 사용하는 것을 고려했으나, 분할 레지스터 파일이 두 개의 칩으로 구현할 때 각 칩에 레지스터 파일을 위치시킬 수 있고 정수 전용 구현에서 부동소수점 레지스터 파일을 생략할 수 있어 더 낫다고 판단했다. 분할 레지스터 파일은 읽기 및 쓰기 포트 수가 줄어들어 다중 명령어 발행에도 더 적합한 것으로 판단되었다. 레지스터 파일당 레지스터 수도 고려되었으며 32개와 64개가 경쟁했다. 디지털은 32개의 레지스터가 다이 공간을 적게 차지하여 클럭 주파수를 향상시킬 수 있으므로 더 적합하다고 결론지었다. 32개의 레지스터가 최소 8방향 명령어 발행을 지원할 수 있으므로 성능 및 미래 성장 측면에서 큰 문제가 되지 않을 것으로 간주되었다.

프로그램 카운터는 롱워드 정렬된 가상 바이트 주소를 포함하는 64비트 레지스터이다. 즉 프로그램 카운터의 하위 2비트는 항상 0이다. 명령어가 디코딩될 때 PC는 다음 명령어의 주소로 4만큼 증가한다. 록 플래그와 록 물리 주소 레지스터는 다중 처리 지원을 위해 로드-록(load-locked) 및 스토어-조건부(store-conditional) 명령어에 의해 사용된다. 부동소수점 제어 레지스터(FPCR)는 IEEE 754 준수 부동소수점 하드웨어를 갖춘 알파 구현에서 사용하도록 정의된 64비트 레지스터이다.

 데이터 형식 
알파 아키텍처에서 바이트는 8비트 데이터(옥텟), 워드는 16비트 데이터, 롱워드는 32비트 데이터, 쿼드워드는 64비트 데이터, 옥타워드는 128비트 데이터로 정의된다.

알파 아키텍처는 원래 6가지 데이터 형식을 정의했다.

 쿼드워드(64비트) 정수
 롱워드(32비트) 정수
 IEEE T-부동소수점 (배정밀도, 64비트)
 IEEE S-부동소수점 (단정밀도, 32비트)

알파 이전의 32비트 아키텍처인 VAX와의 호환성을 유지하기 위해 두 가지 다른 부동소수점 데이터 형식이 포함되었다.

 VAX G-부동소수점 (배정밀도, 64비트)
 VAX F-부동소수점 (단정밀도, 32비트)

VAX H-부동소수점(4배 정밀도, 128비트)은 지원되지 않았으나, 또 다른 128비트 부동소수점 옵션인 X-부동소수점이 알파에서 사용 가능하며 VAX에서는 불가능하다.H와 X는 유사하지만 동일하지는 않은 것으로 설명되어 왔다. H-부동소수점에 대한 소프트웨어 에뮬레이션은 DEC에서 제공하며 DECmigrate라는 소스 코드 수준 변환기도 제공된다.

 메모리 
알파는 메모리 분할(segmentation)이 없는 64비트 선형 가상 주소 공간을 갖는다. 구현체는 최소 43비트 크기의 더 작은 가상 주소 공간을 구현할 수 있다. 사용되지 않는 비트는 TLB와 같은 하드웨어에 구현되지 않았지만, 아키텍처는 더 큰(또는 전체) 가상 주소 공간을 갖는 구현체와의 소프트웨어 호환성을 보장하기 위해 해당 비트들이 0인지 확인하도록 요구했다.

 명령어 형식 
알파 ISA는 32비트의 고정 명령어 길이를 갖는다. 6가지 명령어 형식이 있다.

 유형 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 정수 연산 Opcode Ra Rb 미사용 0 Function Rc 정수 연산, 리터럴 Opcode Ra Literal 1 Function Rc 부동소수점 연산 Opcode Ra Rb Function Rc 메모리 형식 Opcode Ra Rb 변위(Displacement) 분기 형식 Opcode Ra 변위(Displacement) CALL_PAL 형식 Opcode Function

정수 연산 형식은 정수 명령어에 사용된다. 6비트 opcode 필드와 첫 번째 피연산자를 포함하는 레지스터를 지정하는 Ra 필드, 두 번째 피연산자를 포함하는 레지스터를 지정하는 Rb 필드가 차례로 온다. 다음은 사용되지 않고 예약된 3비트 필드이다. 1비트 필드는 정수 리터럴 형식과 이 형식을 구별하는 "0"을 포함한다. 7비트 function 필드가 뒤따르며, 이는 opcode와 함께 연산을 지정하는 데 사용된다. 마지막 필드는 Rc 필드로, 계산 결과가 기록될 레지스터를 지정한다. 레지스터 필드는 모두 5비트 길이로, 32개의 고유 위치인 32개 정수 레지스터를 주소 지정하는 데 필요하다.

정수 리터럴 형식은 리터럴을 피연산자 중 하나로 사용하는 정수 명령어에 사용된다. 5비트 Rb 필드와 미사용 공간 3비트가 64비트 피연산자로 제로 확장되는 8비트 리터럴 필드로 대체되는 것을 제외하고는 정수 연산 형식과 동일하다.

부동소수점 연산 형식은 부동소수점 명령어에 사용된다. 정수 연산 형식과 유사하지만 정수 연산 형식에서 예약된 리터럴 및 미사용 비트를 사용하여 11비트 function 필드를 갖는다.

메모리 형식은 주로 로드 및 스토어 명령어에 사용된다. 6비트 opcode 필드, 5비트 Ra 필드, 5비트 Rb 필드 및 16비트 변위 필드를 갖는다.

분기 명령어는 6비트 opcode 필드, 5비트 Ra 필드 및 21비트 변위 필드를 갖는다. Ra 필드는 조건부 분기 명령어에 의해 테스트될 레지스터를 지정하며, 조건이 충족되면 프로그램 카운터에 변위 필드의 내용을 더하여 프로그램 카운터를 업데이트한다. 변위 필드는 부호 있는 정수를 포함하며, 정수 값이 양수이고 분기가 실행되면 프로그램 카운터가 증가한다. 정수 값이 음수이고 분기가 실행되면 프로그램 카운터는 감소한다. 따라서 분기 범위는 ±1 Mi 명령어 또는 ±4 MiB이다. 알파 아키텍처는 아키텍처의 미래 지향적인 목표의 일환으로 넓은 범위를 갖도록 설계되었다.

CALL_PAL 형식은 PALcode 서브루틴을 호출하는 데 사용되는 CALL_PAL 명령어에 의해 사용된다. 이 형식은 opcode 필드는 유지하지만 나머지는 PAL 서브루틴을 지정하는 정수를 포함하는 26비트 function 필드로 대체한다.

 명령어 집합 

 제어 명령어 
제어 흐름 명령어는 조건부 및 무조건부 분기, 점프로 구성된다. 조건부 및 무조건부 분기 명령어는 분기 명령어 형식을 사용하며, 점프 명령어는 메모리 명령어 형식을 사용한다.

조건부 분기는 레지스터의 최하위 비트가 설정되었는지 또는 해제되었는지 테스트하거나, 레지스터를 부호 있는 쿼드워드로 0과 비교하여 지정된 조건이 참이면 분기한다. 레지스터를 0과 비교하는 데 사용할 수 있는 조건은 같음, 같지 않음, 작음, 작거나 같음, 크거나 같음, 큼이다. 새 주소는 21비트 변위를 롱워드 정렬하고 부호 확장한 후 조건부 분기 다음 명령어의 주소에 더하여 계산된다.

무조건부 분기는 조건부 분기와 동일한 방식으로 계산된 새 주소로 프로그램 카운터를 업데이트한다. 또한 무조건부 분기 다음 명령어의 주소를 레지스터에 저장한다. 이러한 명령어는 두 가지가 있으며 분기 예측 하드웨어에 제공되는 힌트에서만 차이가 있다.

네 가지 점프 명령어가 있다. 이들은 모두 점프 다음 명령어의 주소를 저장하고 프로그램 카운터에 레지스터의 새 주소를 제공하는 동일한 연산을 수행한다. 이들은 분기 예측 하드웨어에 제공되는 힌트에서 차이가 있다. 사용되지 않는 변위 필드가 이 목적으로 사용된다.

 정수 산술 
정수 산술 명령어는 롱워드 및 쿼드워드에 대한 덧셈, 곱셈, 뺄셈을 수행하고 쿼드워드에 대한 비교를 수행한다. 설계자들이 하드웨어에서의 나눗셈 구현이 단순함을 해친다고 생각했기 때문에 나눗셈 명령어는 없다. 표준 덧셈 및 뺄셈 명령어 외에도 스케일링된 버전이 있다. 이 버전들은 더하거나 빼기 전에 두 번째 피연산자를 왼쪽으로 2비트 또는 3비트 시프트한다. 롱워드 곱셈 및 쿼드워드 곱셈 명령어는 각각 64비트 또는 128비트 결과의 하위 32비트 또는 64비트를 대상 레지스터에 기록한다. 상위 절반을 얻는 것이 유용하므로 Unsigned Multiply Quadword High(UMULH) 명령어가 제공된다. UMULH는 다중 정밀도 산술 및 나눗셈 알고리즘을 구현하는 데 사용된다. 결과의 상위 절반을 반환하는 곱셈을 위한 별도의 명령어 개념은 PRISM에서 가져왔다.

롱워드에서 작동하는 명령어는 레지스터의 상위 절반을 무시하며 32비트 결과는 대상 레지스터에 기록되기 전에 부호 확장된다. 기본적으로 UMULH와 스케일링된 버전의 덧셈 및 뺄셈을 제외한 덧셈, 곱셈, 뺄셈 명령어는 오버플로 시 트랩을 발생시키지 않는다. 그러한 기능이 필요한 경우 오버플로 감지를 수행하고 오버플로 시 트랩을 발생시키는 이러한 명령어의 버전이 제공된다.

비교 명령어는 두 레지스터 또는 레지스터와 리터럴을 비교하고 지정된 조건이 참이면 대상 레지스터에 '1'을 기록하고 그렇지 않으면 '0'을 기록한다. 조건은 같음, 같지 않음, 작거나 같음, 작음이다. 처음 두 조건을 지정하는 명령어를 제외하고 부호 있는 비교와 부호 없는 비교를 수행하는 버전이 있다.

정수 산술 명령어는 정수 연산 명령어 형식을 사용한다.

 논리 및 시프트 
논리 명령어는 비트별 논리 연산과 정수 레지스터에 대한 조건부 이동을 수행하는 명령어들로 구성된다. 비트별 논리 명령어는 두 레지스터 또는 레지스터와 리터럴 간에 AND, NAND, NOR, OR, XNOR, XOR를 수행한다. 조건부 이동 명령어는 레지스터를 부호 있는 쿼드워드로 0과 비교하여 지정된 조건이 참이면 이동한다. 지정된 조건은 같음, 같지 않음, 작거나 같음, 작음, 크거나 같음, 큼이다. 시프트 명령어는 산술 오른쪽 시프트, 논리 왼쪽 및 오른쪽 시프트를 수행한다. 시프트 양은 레지스터나 리터럴에 의해 주어진다. 논리 및 시프트 명령어는 정수 연산 명령어 형식을 사용한다.

 확장 

 바이트-워드 확장 (BWX) 
이후의 알파에는 8비트 및 16비트 데이터 형식을 조작하기 위한 명령어 세트인 바이트-워드 확장이 포함되어 있다. 이 명령어들은 21164A(EV56) 마이크로프로세서에서 처음 도입되었으며 이후의 모든 구현에 존재한다. 이 명령어들은 이전에는 구현하기 위해 여러 명령어가 필요했던 연산을 수행하여 코드 밀도와 특정 애플리케이션의 성능을 향상시킨다. BWX는 또한 x86 기계어 코드 에뮬레이션과 장치 드라이버 작성을 더 쉽게 만든다.

 니모닉 명령어 LDBU 메모리에서 레지스터로 제로 확장된 바이트 로드 LDWU 메모리에서 레지스터로 제로 확장된 워드 로드 SEXTB 바이트 부호 확장 SEXTW 워드 부호 확장 STB 레지스터에서 메모리로 바이트 저장 STW 레지스터에서 메모리로 워드 저장

 모션 비디오 명령어 (MVI) 
모션 비디오 명령어(MVI)는 SIMD 연산을 위한 명령어를 추가한 알파 ISA의 명령어 집합 확장이다.Gwennap, Linley (18 November 1996). "Digital, MIPS Add Multimedia Extensions". Microprocessor Report. MVI를 구현한 알파 구현체는 연대순으로 Alpha 21164PC(PCA56 및 PCA57), 알파 21264(EV6), 알파 21364(EV7)이다. MIPS의 MDMX나 SPARC의 Visual Instruction Set과 같은 같은 시기의 대부분의 다른 SIMD 명령어 집합과 달리, PA-RISC의 Multimedia Acceleration eXtensions(MAX-1, MAX-2)와 마찬가지로 MVI는 기존 정수 레지스터에 저장된 정수 데이터 형식에 대해 작동하는 몇 가지 명령어로 구성된 단순한 명령어 집합이었다.

MVI의 단순함은 두 가지 이유 때문이다. 첫째, 디지털은 알파 21164가 이미 소프트웨어를 통해 DVD 디코딩을 수행할 수 있어 그 목적을 위한 하드웨어 조항이 필요하지 않지만 MPEG-2 인코딩에서는 비효율적이라는 점을 확인했다. 두 번째 이유는 구현체의 빠른 사이클 타임을 유지해야 했기 때문이다. 많은 명령어를 추가하면 명령어 디코딩 로직이 복잡해지고 커져서 구현체의 클럭 주파수가 낮아질 수 있었다.

MVI는 13개의 명령어로 구성된다.

 니모닉 명령어 MAXSB8 벡터 부호 있는 바이트 최대값 MAXSW4 벡터 부호 있는 워드 최대값 MAXUB8 벡터 부호 없는 바이트 최대값 MAXUW4 벡터 부호 없는 워드 최대값 MINSB8 벡터 부호 있는 바이트 최소값 MINSW4 벡터 부호 있는 워드 최소값 MINUB8 벡터 부호 없는 바이트 최소값 MINUW4 벡터 부호 없는 워드 최소값 PERR 픽셀 오차 PKLB 롱워드를 바이트로 팩(Pack) PKWB 워드를 바이트로 팩(Pack) UNPKBL 바이트를 롱워드로 언팩(Unpack) UNPKBW 바이트를 워드로 언팩(Unpack)

 부동소수점 확장 (FIX) 
부동소수점 확장(FIX)은 알파 아키텍처의 확장이다. 부동소수점 제곱근과 정수 레지스터 및 부동소수점 레지스터 간의 데이터 전송을 위한 9개의 명령어를 도입한다. 알파 21264(EV6)는 이러한 명령어를 구현한 최초의 마이크로프로세서이다.

 니모닉 명령어 FTOIS 부동소수점에서 정수 레지스터로 이동, S_floating FTOIT 부동소수점에서 정수 레지스터로 이동, T_floating ITOFF 정수에서 부동소수점 레지스터로 이동, F_floating ITOFS 정수에서 부동소수점 레지스터로 이동, S_floating ITOFT 정수에서 부동소수점 레지스터로 이동, T_floating SQRTF 제곱근 F_floating SQRTG 제곱근 G_floating SQRTS 제곱근 S_floating SQRTT 제곱근 T_floating

 카운트 확장 (CIX) 
카운트 확장(CIX)은 비트 수를 세기 위한 세 가지 명령어를 도입하는 아키텍처 확장이다. 이 명령어들은 정수 산술 명령어로 분류된다. 알파 21264A(EV67)에서 처음 구현되었다.

 니모닉 명령어 CTLZ 선행 제로 카운트(Count Leading Zero) CTPOP 비트 카운트(Count Population) CTTZ 후행 제로 카운트(Count Trailing Zero)

 구현 
DEC는 VAX가 큰 성공을 거둔 후 했던 것과 유사하게 알파를 자사의 유일한 컴퓨터 아키텍처로 만들었다. 이 기술은 회사에 매우 중요하여 한 업계 분석가는 컴퓨터월드에 "알파가 실패하면 DEC는 죽는다"라고 말했으며, PC Week는 DEC가 "생사가 걸린 싸움"을 벌이고 있다고 묘사했다. 1992년 11월 첫 알파 시스템 데뷔 당시 약 30개의 애플리케이션을 사용할 수 있었으며, DEC는 9개월 이내에 500개 더, 나중에는 1,500개 더 출시될 것이라고 밝혔다.

발표 당시 알파는 향후 25년을 위한 아키텍처로 예고되었다. 그렇게 되지는 않았지만 알파는 꽤 긴 수명을 누렸다. 첫 번째 버전인 알파 21064(EV4)는 1992년 11월에 최대 192 MHz로 구동되며 도입되었고, 몇 달 후 다이를 약간 축소한 것(0.75 μm에서 0.675 μm로 축소한 EV4S)이 200 MHz로 구동되었다. 이 64비트 프로세서는 다른 RISC 설계와 마찬가지로 슈퍼파이프라인 및 슈퍼스칼라 설계였지만, 그럼에도 불구하고 다른 모든 프로세서를 압도했으며 DEC는 이를 세계에서 가장 빠른 프로세서라고 홍보했다. 거대한 중앙 집중식 클럭 회로와 같이 허드슨 설계 팀의 특징인 세심한 회로 설계 덕분에 마이크로아키텍처가 다른 RISC 칩과 상당히 유사했음에도 불구하고 CPU를 더 높은 속도로 구동할 수 있었다. 이에 비해 저렴한 인텔 펜티엄은 이듬해 봄 출시 당시 66 MHz로 작동했다.

알파 21164 또는 EV5는 1995년에 최대 333 MHz의 프로세서 주파수로 사용 가능해졌다. 1996년 7월에는 라인 속도가 500 MHz로, 1998년 3월에는 666 MHz로 향상되었다. 또한 1998년에 알파 21264(EV6)가 450 MHz로 출시되었으며, 결국 2001년 21264C/EV68CB를 통해 1.25 GHz에 도달했다. 2003년에는 알파 21364 또는 EV7 Marvel이 출시되었는데, 이는 기본적으로 향상된 다중 처리 시스템 성능을 위해 4개의 1.6 GB/s 프로세서 간 통신 링크를 갖춘 EV68 코어로 1 또는 1.15 GHz로 작동했다.

1996년 알파 칩 생산은 삼성전자에 라이선스되었다. 컴팩이 디지털을 인수한 후 알파 제품의 대부분은 삼성과 컴팩이 자금을 지원하는 민간 기업인 API NetWorks, Inc.(이전의 Alpha Processor Inc.)에 배치되었다. 2001년 10월, Microway는 API NetWorks의 알파 기반 제품 라인의 독점 판매 및 서비스 제공업체가 되었다.

2001년 6월 25일, 컴팩은 인텔의 아이테니엄을 위해 2004년까지 알파를 단계적으로 폐지할 것이라고 발표했으며 계획된 EV8 칩을 취소하고 모든 알파 지식 재산권을 인텔에 매각했다. 휴렛 팩커드는 2002년에 컴팩과 합병했다. HP는 EV7z로 명명된 1.3 GHz EV7 변종 출시를 포함하여 알파 시리즈의 개발이 몇 년 더 계속될 것이라고 발표했다. 이것이 알파의 마지막 반복이 되었으며 0.13 μm EV79 또한 취소되었다.

알파는 컴팩의 기업 연구 및 논스톱 하드웨어 개발 그룹이 웨스턴 리서치 래버러토리와 시스템 리서치 센터에서 개발한 연구 프로토타입인 Piranha에서도 구현되었다. Piranha는 8개의 단순한 코어를 포함하는 트랜잭션 처리 워크로드용 멀티 코어 설계이다. 이는 2000년 6월 제27회 국제 컴퓨터 구조 심포지엄에서 발표되었다.

Sunway 아키텍처의 초기 개정판은 알파에 기반한 것으로 알려졌으나, SW26010 이후 Sunway는 알파와 관련 없는 새로운 명령어 집합 아키텍처를 사용한다.

 모델 역사 
 모델 모델 번호 연도 주파수 [MHz] 공정 [μm] 트랜지스터 [백만] 다이 크기 [mm2] IO 핀 전력 [W] 전압 D캐시 [KB]캐시 메모리 맥락에서 1 KB = 1024 바이트; 1 MB = 1024 KB I캐시 [KB] S캐시 B캐시 ISAEV4210641992100–2000.751.68234290303.388–128 KB–16 MB EV4S210641993100–2000.6751.68186290273.388–128 KB–16 MB EV4521064A1994200–3000.52.85164333.31616–256 KB–16 MB LCA4210661993100–1660.6751.75209213.388–  LCA4210681994660.6751.7520993.388–  LCA4521066A1994100–2660.51.8161233.388–  LCA4521068A19941000.51.81613.388–  EV5211641995266–5000.59.3299296563.3/2.58896 KB최대 64 MBREV5621164A1996366–6660.359.6620931–553.3/2.58896 KB최대 64 MBR,BPCA5621164PC1997400–5330.353.514126426–353.3/2.5816–512 KB–4 MBR,B,MPCA5721164PC 600–6660.285.710128318–232.5/2.01632–512 KB–4 MBR,B,MEV6212641998450–6000.3515.2314389732.06464–2–8 MBR,B,M,FEV6721264A1999600–7500.2515.2210389 2.06464–2–8 MBR,B,M,F,CEV68AL21264B2001800–8330.1815.2125  1.76464–2–8 MBR,B,M,F,C,TEV68CB21264C20011000–12500.1815.2125 65–751.656464–2–8 MBR,B,M,F,C,TEV68CX21264D       1.656464–2–8 MBR,B,M,F,C,TEV72136420031000–11500.181303971251.564641.75 MB–R,B,M,F,C,TEV7z21364200413000.181303971251.564641.75 MB–R,B,M,F,C,T 취소됨EV78/EV7921364A2004년 예정17000.131523001201.264641.75 MB–R,B,M,F,C,TEV8214642003년 예정1200–20000.1252504201800??1.264643 MB–R,B,M,F,C,T

ISA 확장

 R – 무한대 및 음의 무한대로의 반올림에 대한 하드웨어 지원.
 B – BWX(Byte/Word Extension), 메모리 및 I/O에서 8비트 및 16비트 연산을 허용하는 명령어 추가
 M – MVI, "멀티미디어" 명령어
 F – FIX, 정수 및 부동소수점 레지스터 간의 데이터 이동 및 제곱근을 위한 명령어
 C – CIX, 비트를 세고 찾는 명령어
 T – 록 획득의 첫 번째 시도 성능을 개선하기 위해 수정 의도가 있는 프리페치 지원

 성능 
알파 기반 시스템의 비교 성능을 보여주기 위해 몇 가지 SPEC 성능 수치(SPECint95, SPECfp95)가 아래에 나열되어 있다. SPEC 결과는 CPU뿐만 아니라 전체 컴퓨터 시스템(CPU, 버스, 메모리, 컴파일러 최적화 프로그램)의 측정된 성능을 보고한다고 주장한다는 점에 유의하라. 또한 벤치마크와 척도가 1992년에서 1995년 사이에 변경되었다는 점에 유의하라. 그러나 이 수치는 동시대의 HP(64비트) 및 인텔 기반 제품(32비트)과 비교한 알파 아키텍처(64비트)의 성능에 대한 대략적인 인상을 제공한다. 아마도 가장 분명한 경향은 인텔이 정수 성능에서는 항상 알파에 상당히 가깝게 접근할 수 있었지만, 부동소수점 성능에서는 그 차이가 상당했다는 것이다. 반면에 HP(PA-RISC)도 알파에 상당히 근접했지만, 이러한 CPU들은 훨씬 낮은 클럭 속도(MHz)로 작동하고 있었다. 표에는 CPU의 전력 소비와 가격이라는 두 가지 중요한 수치가 누락되어 있다.

 시스템 CPU MHz 정수 부동소수점+SPEC 벤치마크 1995 성능 비교 (SPECint95 및 SPECfp95 결과 사용 )AlphaServer 8400 5/35021164 (EV5)35010.114.2Intel Alder System (200 MHz, 256 KB L2)펜티엄 프로2008.96.75HP 9000 C160PA-800016010.416.3

 시스템 CPU MHz 정수 부동소수점+2000 성능 비교 (SPECint95 및 SPECfp95 결과 사용)AlphaServer ES40 6/83321264 (EV6)83350.0100.0Intel VC820 메인보드펜티엄 III100046.831.9HP 9000 C3600PA-860055242.164.0

 알파 기반 시스템 
1세대 DEC 알파 기반 시스템은 DEC 3000 AXP 시리즈 워크스테이션 및 보급형 서버, DEC 4000 AXP 시리즈 중형 서버, 그리고 DEC 7000 AXP 및 10000 AXP 시리즈 고성능 서버로 구성된다. DEC 3000 AXP 시스템은 이전의 MIPS 기반 DECstation 모델과 동일한 TURBOchannel 버스를 사용하는 반면, 4000은 Futurebus+에 기반하고 7000/10000은 해당 VAX 모델과 아키텍처를 공유한다.

DEC는 또한 확장 산업 표준 아키텍처(EISA) 버스를 갖춘 개인용 컴퓨터(PC) 구성의 알파 워크스테이션인 DECpc AXP 150(코드명 Jensen, DEC 2000 AXP로도 명명됨)을 생산했다. 이것은 윈도우 NT를 지원하는 최초의 알파 시스템이다. DEC는 나중에 21164 프로세서를 탑재한 Celebris XL 및 Digital Personal Workstation PC 라인의 알파 버전을 생산했다.

디지털은 또한 임베디드 및 산업용으로 VME버스 기반의 단일 보드 컴퓨터를 생산했다. 1세대에는 21068 기반의 AXPvme 64 및 AXPvme 64LC, 그리고 21066 기반의 AXPvme 160이 포함된다. 이들은 1994년 3월 1일에 도입되었다. AXPvme 100, AXPvme 166 및 AXPvme 230과 같은 이후 모델은 21066A 프로세서에 기반하며, Alpha VME 4/224 및 Alpha VME 4/288은 21064A 프로세서에 기반한다. 마지막 모델인 Alpha VME 5/352 및 Alpha VME 5/480은 21164 프로세서에 기반한다.

21066 칩은 DEC Multia VX40/41/42 소형 워크스테이션과 Tadpole Technology의 ALPHAbook 1 노트북에 사용되었다.

1994년에 DEC는 새로운 AlphaStation 및 AlphaServer 제품군을 출시했다. 이들은 21064 또는 21164 프로세서를 사용하며 PCI 버스, VGA 호환 프레임 버퍼, PS/2 스타일의 키보드 및 마우스를 도입했다. AlphaServer 8000 시리즈는 DEC 7000/10000 AXP를 대체하며 XMI 및 FutureBus+ 버스도 사용한다.

AlphaStation XP1000은 21264 프로세서를 기반으로 한 최초의 워크스테이션이다. 21264를 기반으로 한 이후의 AlphaServer/Station 모델은 DS(부서용 서버), ES(엔터프라이즈 서버) 또는 GS(글로벌 서버) 제품군으로 분류된다.

최종 21364 칩은 AlphaServer ES47, ES80 및 GS1280 모델과 AlphaStation ES47에 사용된다.

DEC에 의해 많은 OEM 메인보드가 생산되었는데, 21066 및 21068 기반의 AXPpci 33 "NoName"은 회사의 주요 OEM 시장 진출의 일환이었으며,Reinhardt Krause. "DEC launching Alpha board push". Electronic News, April 4, 1994. 21164 기반의 AlphaPC 164 및 AlphaPC 164LX, 21164PC 기반의 AlphaPC 164SX 및 AlphaPC 164RX, 그리고 21264 기반의 AlphaPC 264DP가 있다. 삼성과 API 같은 여러 제3자 업체도 API UP1000 및 UP2000과 같은 OEM 메인보드를 생산했다.

제3자가 플랫폼용 하드웨어 및 소프트웨어를 개발하는 것을 돕기 위해 DEC는 Alpha 21064A 및 21164 마이크로프로세서용으로 각각 EB64+ 및 EB164와 같은 평가 보드(Evaluation Board)를 생산했다.

21164 및 21264 프로세서는 넷앱에서 다양한 네트워크 결합 스토리지 시스템에 사용되었으며, 21064 및 21164 프로세서는 크레이에서 T3D 및 T3E 대규모 병렬 슈퍼컴퓨터에 사용되었다.

 슈퍼컴퓨터 
알파 프로세서를 기반으로 한 가장 빠른 슈퍼컴퓨터는 로스앨러모스 국립 연구소의 ASCI Q였다. 이 기계는 HP AlphaServer SC45/GS 클러스터로 구축되었다. 4,096개의 알파(21264 EV-68, 1.25 GHz) CPU를 장착했으며, Rmax는 7.727 TFLOPS에 달했다.

 각주 

 내용주

 외부 링크 


분류:마이크로프로세서
분류:64비트 컴퓨터
분류:명령어 집합 구조
분류:DEC의 마이크로프로세서