IBM 801

IBM 801

801은 1970년대에 IBM에 의해 개발실험적인 중앙 처리 장치(CPU) 설계입니다.이것은 최초의 현대적인 RISC 설계로 간주되며, 모든 연산에 프로세서 레지스터의존하며, CISC 설계에서 볼 수 있는 다양한 바리안트 어드레싱 모드를 배제합니다.원래는 전화 스위치용 프로세서로 개발되었지만, 나중에 미니컴퓨터메인프레임 라인의 많은 제품들의 기반으로 사용되었습니다.초기 설계는 24비트 프로세서였지만 곧 같은 개념의 32비트 구현으로 대체되었고, 원래 24비트 801은 1980년대 초반에만 사용되었습니다.

801은 컴퓨터 시장에서 매우 영향력이 있었다.IBM은 엄청난 양의 성능 데이터로 무장한 채, 가장 강력한 기존 CPU 설계도 쉽게 능가할 수 있다는 것을 입증하는 동시에 고도로 최적화된 CISC 명령보다 약간 더 큰 기계 코드를 생성할 수 있었습니다.이러한 기술을 System/370과 같은 기존 프로세서에도 적용하면 일반적으로 이들 시스템의 성능도 2배로 향상됩니다.이는 RISC 개념의 가치를 입증했으며, IBM의 모든 미래 시스템은 801 프로젝트 동안 개발된 원칙을 기반으로 했습니다.

801년에 대한 그의 업적으로, 존 코크1987년튜링상, 1991년에 국립 기술 훈장, 1994년에 국립 과학 훈장을 받았습니다.

역사

오리지널 컨셉

1974년, IBM은 시간당 100만 통화, 즉 초당 약 300 통화를 처리할 수 있는 전화 교환기의 구축 가능성을 검토하기 시작했습니다.이들은 각 콜을 완료하려면 20,000개의 명령이 필요하며 타이밍 오버헤드 및 기타 고려사항을 추가할 경우 이러한 머신은 약 12MIPS의 [1]성능을 필요로 한다고 계산했습니다.이를 위해서는 성능이 크게 향상되어야 합니다. 1972년 말의 IBM System/370 Model 168은 약 3개의 MIPS를 [2]제공했습니다.

John Coke를 포함한 Thomas J. Watson Research Center에서 이 프로젝트를 수행하고 있는 그룹이 이 목적을 위해 프로세서를 설계했습니다.필요한 퍼포먼스에 도달하기 위해서, 그러한 머신이 필요로 하는 조작의 종류를 고려해, 적절하지 않은 조작은 모두 삭제했습니다.이것에 의해, 예를 들면 부동 소수점 유닛이 삭제되어 이 애플리케이션에서는 불필요하게 되었습니다.보다 중요한 것은 메인 메모리의 데이터에 대해 동작하는 명령어 대부분을 삭제하고 내장 프로세서 레지스터에 동작하는 명령어만 남겼다는 것입니다.이 명령어들은 사용 속도가 훨씬 빨라지고 전화 스위치 내의 심플한 코드도 이러한 유형의 명령어만을 사용하도록 작성될 수 있기 때문입니다.이 작업의 결과는 필요한 [1]성능을 갖춘 심플한 프로세서의 개념적인 설계입니다.

전화 교환 프로젝트는 1975년에 취소되었지만, 팀은 그 컨셉에 대해 상당한 진전을 이루었고, 10월에 IBM은 그것을 범용 설계로 계속하기로 했습니다.붙여야 할 명확한 프로젝트가 없었기 때문에, 그 팀은 그것을 그들이 일했던 건물의 이름을 따서 "801"이라고 부르기로 결정했다.범용적인 역할을 위해 팀은 일반적인 미니컴퓨터에서 실행되는 실제 프로그램을 검토하기 시작했습니다.IBM은 기계에서 실제 워크로드의 성능에 대한 방대한 통계 데이터를 수집했으며, 이 데이터는 일반적인 프로그램에서 메모리 값 로드, 메모리 값 저장, 분기, 고정 소수점 수 비교, 고정 소수점 수 추가 등 5가지 명령만 수행하는 데 절반 이상이 소요된 것으로 나타났습니다.이것에 의해, 특수 목적의 [3]스위치와 같이, 범용의 미니 컴퓨터에서도 같은 심플한 프로세서 설계가 유효하게 됩니다.

마이크로코드가 불량.

이 결론은 마이크로코드 사용의 개념에 기초한 현대의 프로세서 설계와 정면으로 충돌했습니다.IBM은 System/360 시리즈의 일부로 이 기술을 널리 사용한 최초의 기업 중 하나입니다.360s와 370s는 모두 동일한 기계어 코드를 실행하는 다양한 성능 수준으로 출시되었습니다.하이엔드 머신에서는, 이러한 명령의 대부분은 부동소수점 유닛과 같은 하드웨어에 직접 실장되어 있습니다만, 로우엔드 머신에서는, 대신에 일련의 다른 명령어를 사용해 그러한 명령어를 시뮬레이트 할 수 있었습니다.이를 통해 단일 애플리케이션 바이너리 인터페이스를 전체 라인에서 실행할 수 있게 되었고, 고객은 더 많은 성능이 필요할 경우 별도의 [4]변경 없이 더 빠른 머신으로 전환할 수 있다는 확신을 가질 수 있었습니다.

마이크로코드는 단순한 프로세서가 다양한 어드레싱 모드를 구현하기 위해 사용해 온 많은 명령어를 제공할 수 있게 했다.예를 들어, 다음과 같은 명령입니다.ADD에는 내부 레지스터에 2개의 숫자를 추가하는 버전, 메모리 값에 레지스터를 추가하는 버전, 메모리에서 2개의 값을 추가하는 버전 등 12개의 버전이 있습니다.이를 통해 프로그래머는 특정 작업에 필요한 정확한 변화를 선택할 수 있었습니다.프로세서는 이 명령을 읽고 마이크로코드를 사용하여 일련의 내부 명령으로 나뉩니다.예를 들어, 메모리에 2개의 번호를 추가하는 것은, 그 2개의 번호를 레지스터에 로드하고, 추가해 다시 [3]보존하는 것으로 실장할 수 있습니다.

팀은 이 개념의 부작용을 알아차렸습니다. 주어진 명령어의 가능한 버전이 너무 많을 때 컴파일러 작성자들은 거의 항상 단일 버전을 선택하곤 했습니다.이것은 거의 항상 로우엔드 머신의 하드웨어에 실장되어 있습니다.이를 통해 컴파일러에 의해 생성된 머신 코드가 전체 라인업에서 가능한 한 빨리 실행되도록 할 수 있었습니다.하드웨어에 다른 버전의 명령어를 구현한 머신에서는 다른 버전의 명령어를 사용하는 것이 훨씬 더 빠르게 실행될 수 있지만, 끊임없이 변화하는 머신 목록에서 어떤 것을 선택해야 하는지 아는 것이 복잡하기 때문에 이는 매우 매력적이지 않았고 컴파일러 작성자들은 이러한 [3]가능성을 대부분 무시했습니다.

그 결과 명령 집합에서 사용할 수 있는 명령의 대부분은 컴파일된 프로그램에서 사용되지 않았습니다.그리고 팀은 여기서 801 프로젝트를 실현했습니다.

컴퓨터와 사용자 사이에 마이크로코드를 적용하면 가장 자주 실행되는 [3]명령을 수행하는 데 많은 비용이 소요됩니다.

마이크로코드는 명령을 수행하기 전에 명령을 검사하는 데 0이 아닌 시간이 걸립니다.마이크로 코드를 삭제한 같은 기본 프로세서를 사용하면 이러한 오버헤드가 없어지고 명령어 실행 속도가 빨라집니다.마이크로코드는 기본적으로 특정 하드웨어 구현 전용의 작은 서브루틴을 실행했기 때문에 최종적으로 컴파일러와 동일한 기본 태스크를 수행하고 기계 고유의 일련의 명령으로 상위 수준의 명령을 구현했습니다.마이크로코드를 삭제하고 컴파일러에 실장하는 것만으로 [3]머신을 고속화할 수 있습니다.

한 가지 우려 사항은 이러한 기계용으로 작성된 프로그램이 더 많은 메모리를 차지한다는 것입니다. 370에서 한 번의 명령으로 수행할 수 있는 일부 작업은 801에서 여러 명령으로 표현되어야 합니다.예를 들어 메모리에서2개의 번호를 추가하려면 2개의 Load-to-register 명령, 레지스터-to-register add 명령, 스토어-to-memory 명령이 필요합니다.메모리로부터 명령어를 읽어내는 시간이 이전에 비해 길어지면, 시스템 전체의 속도가 저하할 가능성이 있습니다.설계 작업을 계속하고 컴파일러를 개선하면서 전체 프로그램 길이가 계속 줄어들어 결국 [5]370과 거의 같은 길이가 되었습니다.

첫 번째 구현

처음에 제안된 아키텍처는 가상 메모리[6][7]없는 16개의 24비트 레지스터를 갖춘 머신이었습니다.명령어에 2연산자 형식을 사용했기 때문에 명령어는 일반적으로 다음과 같은 형식입니다.A = A + B3개의 오퍼랜드 형식이 아닌A = B + CCPU는 1980년 여름부터 가동되기 시작하여 Motorola MECL-10K 전용 컴포넌트[8] 테크놀로지를 사용하여 커스텀 보드에 실장되었습니다.CPU는 66ns 사이클(약 15.15MHz)로 측정되었으며 약 15MIPS의 빠른 속도로 계산할 수 있었습니다.

801 아키텍처는 S/370 메인프레임용 채널 컨트롤러(예:[9]: 377 IBM 3090), 다양한 네트워킹 장치 및 IBM 9370 메인프레임 [10][11]제품군의 9373 및 9375 프로세서에서 수직 마이크로코드 실행 장치로 사용되는 등 다양한 IBM 장치에 사용되었습니다.801 아키텍처의 원래 버전은 IBM RT PC 워크스테이션 컴퓨터IBM Research의 여러 실험 컴퓨터에 사용되는 IBM ROMP 마이크로프로세서[9]: 378 아키텍처의 기초가 되었습니다.Iliad라는 이름의 32비트 어드레싱을 사용하는 801 아키텍처의 파생 모델은 실패한 Fort Knox 미드레인지 시스템 [12]프로젝트의 프라이머리 프로세서로 기능하도록 의도되었습니다.

이후의 수정

원래 제한된 기능만을 위해 설계된 801 설계에는 대형 머신에서 볼 수 있는 많은 기능이 없었습니다.그 중에서도 주목할 만한 것은 가상 메모리에 대한 하드웨어 지원이 부족하다는 것입니다.이러한 메모리는 컨트롤러 역할에는 필요하지 않으며 가상 메모리가 필요한 초기 801 시스템의 소프트웨어로 구현되어 있었습니다.보다 광범위한 사용을 위해 하드웨어 지원은 필수 기능입니다.게다가 1980년대에 이르러서는 컴퓨터 세계 전체가 32비트 시스템으로 이행해, 801에서도 [13]같은 것을 실현하고 싶다고 생각하고 있었습니다.

32비트 포맷으로의 이행에는 또 다른 큰 이점이 있었습니다.실제로 2-operand 형식은 일반적인 수학 코드에서 사용하기 어려운 것으로 나타났습니다.이상적으로는 양쪽 입력 오퍼랜드가 이후 동작에서 재사용될 수 있는 레지스터에 남아 있지만, 오버프로트 동작의 출력으로 인해 값 중 하나를 메모리에서 새로고침해야 하는 경우가 종종 있었습니다.32비트 포맷으로 이동함으로써 명령어 내의 추가 비트는 추가 레지스터를 지정할 수 있게 되어 이러한 연산의 출력이 별도의 레지스터로 향할 수 있게 되었다.더 큰 명령어는 또한 레지스터 수를 16개에서 32개로 늘릴 수 있게 해주었는데, 이는 801개의 코드를 검토함으로써 명백하게 제시되었던 변화이다.명령어가 24비트에서 32비트로 확장되었음에도 불구하고, 이러한 [13]두 가지 변경으로 인한 로드 회피와 절약으로 인해 프로그램은 33% 증가하지 않았습니다.

다른 바람직한 추가 사항으로는 단일 메모리 워드에 여러 ASCII 문자가 포함된 "패킹" 형식으로 인코딩된 문자열 데이터를 처리하는 명령과 4비트 10진수를 [13]통과할 수 있는 추가 사항을 포함하여 이진 코드화된 10진수로 작업하는 명령이 있습니다.

새로운 버전의 801이 370에서 시뮬레이터로 실행되었을 때, 팀은 801로 컴파일되어 시뮬레이터에서 실행되는 코드가 370의 PL/[14]1 컴파일러를 사용하여 370 머신 코드로 직접 컴파일된 소스 코드보다 종종 더 빠르게 실행된다는 것을 발견하고 놀랐습니다.실험용 "PL.8" 언어를 370으로 포팅하고 이를 사용하여 애플리케이션을 컴파일했을 때 기존 PL/1 코드보다 무려 3배 빠른 속도로 실행되었습니다.이는 컴파일러가 내부 레지스터에 코드를 컴파일하는 방법에 대해 RISC와 같은 결정을 내림으로써 가능한 한 많은 메모리 액세스를 최적화했기 때문입니다.이것들은 370에서는 801과 마찬가지로 비쌌지만, 일반적으로 이 비용은 CISC 코드의 한 줄의 단순함에 가려져 있었습니다.PL.8 컴파일러는 부하와 절약을 회피하기 위해 매우 적극적이었습니다.그 결과 CISC [14]프로세서에서도 퍼포먼스가 향상되었습니다.

아메리카 프로젝트

1980년대 초에 801에서 얻은 교훈은 새로운 "미국" 디자인에 반영되었다.이것은 명령어를 가져오고 디코딩하는 명령어 프로세서, 명령어 프로세서와 듀티를 공유하는 고정 소수점 프로세서 및 명령어를 필요로 하는 시스템을 위한 부동 소수점 프로세서를 포함하는 3칩 프로세서 세트입니다.801 팀이 설계한 최종 설계는 IBM의 Austin 사무소로 보내졌고, Austin 사무소는 이를 IBM RS/6000 시스템으로 개발했습니다.25MHz로 작동하는 RS/6000은 그 시대에 가장 빠른 기계 중 하나였습니다.일반적인 테스트에서는 다른 RISC 머신보다 2~3배 높은 퍼포먼스를 보였으며 구식 CISC 시스템보다 [10]훨씬 뛰어난 퍼포먼스를 보였습니다.

RS/6000 이후 다양한 규모로 효율적으로 제작할 수 있는 801 컨셉 버전에 관심을 기울였습니다.그 결과 IBM POWER 명령 집합 아키텍처와 PowerPC가 분리되었습니다.801년에 대한 그의 업적으로, 존 코크1987년튜링상, 1991년에 국립 기술 훈장,[15] 1994년에 국립 과학 훈장을 받았습니다.

마이클 J. Flynn은 IBM 801 설계를 최초의 RISC([16]Reduced Instruction Set Computer) 시스템으로 보고 있습니다.

레퍼런스

인용문

  1. ^ a b Cocke & Markstein 1990, 페이지 4.
  2. ^ Savard, John. "On the 370/165 and the 360/85".
  3. ^ a b c d e Cocke & Markstein 1990, 5페이지
  4. ^ Sack, Harald (7 April 2016). "microcode in the system 360". SciHub.
  5. ^ Coke & Markstein 1990, 페이지 6-7.
  6. ^ "The 801 Minicomputer - An Overview" (PDF). October 8, 1976. p. 9.
  7. ^ "System 801 Principles of Operation" (PDF). January 16, 1976.
  8. ^ 라딘 1982년
  9. ^ a b Dewar, Robert B.K.; Smosna, Matthew (1990). Microprocessors: A Programmer's View. McGraw-Hill.
  10. ^ a b Cocke & Markstein 1990, 9페이지
  11. ^ Mitchell, James (September 1988). "Implementing a mainframe architecture in a 9370 processor". ACM SIGMICRO Newsletter. 19 (3): 3–10. doi:10.1145/62185.62186. ISSN 1050-916X. S2CID 14602753.
  12. ^ Frank G. Soltis (1997). Inside the AS/400, Second Edition. Duke Press. ISBN 978-1882419661.
  13. ^ a b c Cocke & Markstein 1990, 7페이지
  14. ^ a b Cocke & Markstein 1990, 8페이지
  15. ^ "NSTMF". NSTMF. Retrieved 2020-05-12.
  16. ^ Flynn, Michael J. (1995). Computer architecture: pipelined and parallel processor design. pp. 54–56. ISBN 0867202041.

참고 문헌

추가 정보

  • IBM 연구진은 "컴퓨터 아키텍처를 변경하는 것이 처리량을 높이는 방법"이라고 제안합니다.전자제품 V. 49, N. 25(1976년 12월 23일), 페이지 30-31.
  • V. 맥렐란: "IBM Mini a Radical Department"데이터메이션 V. 25, N. 11(1979년 10월), 53-55페이지.
  • Dewar, Robert B.K.; Smosna, Matthew (1990). Microprocessors: A Programmer's View. McGraw-Hill. pp. 258–264.
  • Tabak, Daniel (1987). RISC Architecture. Research Studies Press. pp. 69–72.

외부 링크