버클리 RISC

Berkeley RISC

Berkeley RISCDefense Advanced Research Projects Agency VLSI(Very Large Scale Integration) VLSI 프로젝트 하에서 실시되고 있는 RISC 기반의 마이크로프로세서 설계에 관한 2개의 중요한 연구 프로젝트 중 하나입니다.RISC는 1980년부터 [1]1984년까지 캘리포니아 버클리 대학에서 David Patterson(RISC라는 용어를 만든 사람)에 의해 주도되었습니다.또 다른 프로젝트는 1981년부터 1984년까지 MIPS의 노력으로 스탠포드 대학에서 가까운 거리에 있었다.

버클리 프로젝트는 매우 성공적이어서 모든 유사한 디자인의 이름이 되었습니다. 심지어 MIPS도 "RISC 프로세서"로 알려지게 되었습니다.Berkeley RISC 설계는 나중에 Sun Microsystems의해 SPARC 아키텍처로 상용화되었고 [2]ARM 아키텍처에 영감을 주었습니다.

RISC 개념

RISC 와 MIPS 는, 프로그램의 대부분이 프로세서의 명령의 대부분을 사용하지 않는 것을 인식해 개발되었습니다.유명한 1978년 신문에서 앤드류 S. Tanenbaum은 8비트 고정 길이 [3]opcode를 사용하여 단순화된 명령 집합 아키텍처를 사용하여 복잡한 10,000줄의 고급 프로그램을 나타낼 수 있음을 입증했습니다.이는 IBM 360과 같은 메인프레임에서 실행되는 자체 코드에 대한 연구에서도 사용 가능한 모든 명령의 작은 부분 집합만 사용한 IBM에서도 거의 동일한 결론이었습니다.두 연구 모두 실제 코드의 대부분을 실행할 수 있는 훨씬 단순한 CPU를 만들 수 있음을 시사했습니다.그 당시에는 완전히 탐구되지 않았던 또 다른 단서는 81.4 퍼센트의 상수가 0, 1, 또는 [3]2라는 타넨바움의 지적이었다.

이러한 인식은 마이크로프로세서 시장이 8비트에서 16비트로 이동하면서 이루어졌으며, 32비트 설계가 곧 등장할 것입니다.이러한 프로세서는 메인프레임과 미니컴퓨터의 세계에서 잘 알려진 ISA를 복제하기 위해 설계되었습니다.를 들어, National Semiconductor NS32000VAX-11의 싱글 칩 구현을 위한 노력으로 시작되었으며, VAX-11은 다양한 어드레싱 모드를 갖춘 풍부한 명령 세트를 가지고 있습니다.Motorola 68000은 일반적인 레이아웃에서 비슷했다.이 풍부한 명령어 세트를 제공하기 위해 CPU는 마이크로코드를 사용하여 사용자가 볼 수 있는 명령을 일련의 내부 조작으로 디코딩했습니다.이 마이크로코드는 아마도전체 설계의 트랜지스터 중 14~13.

이러한 다른 논문들이 시사하는 바와 같이, 이러한 opcode의 대부분이 실제로 사용되지 않는다면, 이 중요한 자원이 낭비되고 있는 것입니다.사용하지 않는 명령어를 삭제한 상태로 동일한 프로세서를 단순히 구축하면 더 작아지고 따라서 비용이 적게 들 것입니다.한편 사용하지 않는 명령어를 디코딩하는 대신 트랜지스터를 사용하여 성능을 향상시키면 더 빠른 프로세서가 가능했습니다.RISC의 개념은 이 두 가지를 모두 활용하여 68000과 같은 수준의 복잡도를 실현하면서도 훨씬 더 빠른 CPU를 생성하는 것이었습니다.

이를 위해 RISC는 매우 빠르게 액세스할 수 있는 임시 값을 보유한 메모리의 작은 비트를 더 추가하는 데 주력했습니다.이는 액세스에 몇 번의 사이클이 소요될 수 있는 일반 메인 메모리와 대조됩니다.더 많은 레지스터를 제공하고 컴파일러가 실제로 레지스터를 사용했는지 확인함으로써 프로그램은 훨씬 더 빠르게 실행될 수 있습니다.게다가 프로세서의 속도는, 메모리 액세스를 기다리는 시간이 단축되기 때문에, 클럭 속도에 의해서 보다 밀접하게 정의됩니다.트랜지스터용 트랜지스터, RISC 디자인은 기존 CPU를 크게 능가할 것입니다.

단점으로는 제거되는 명령어는 일반적으로 몇 가지 "하위 명령"을 수행하고 있었다.예를 들어,ADD전통적인 설계의 지침은 일반적으로 여러 가지 향미, 즉 두 개의 레지스터에 숫자를 추가하고 세 번째에 배치하는 향미, 다른 하나는 메인 메모리에서 찾은 숫자를 추가하고 결과를 레지스터에 저장하는 등 여러 가지 향미 등으로 이루어진다.한편, RISC 설계에는, 특정의 명령의 1개의 플레이버만이 포함되어 있습니다.ADD예를 들어, 는 모든 오퍼랜드에 대해 항상 레지스터를 사용합니다.이로 인해 프로그래머는 필요에 따라 메모리로부터 값을 로드하기 위한 추가 명령을 작성해야 했고, RISC 프로그램은 "조밀도가 낮은" 상태가 되었습니다.

고가의 메모리 시대에는 특히 메모리도 CPU보다 훨씬 느렸기 때문에 이것은 매우 걱정거리였습니다.RISC 설계에서는ADD는 실제로는 4개의 명령(2로드, 추가, 저장)이 필요합니다.머신은 추가 명령을 읽기 위해 훨씬 더 많은 메모리액세스를 실행할 필요가 있기 때문에 상당히 느려질 가능성이 있습니다.이것은 새로운 설계에서 32비트라는 매우 큰 명령어를 사용했기 때문에 어느 정도 상쇄되었습니다.따라서 작은 상수를 따로 로드할 필요 없이 명령어로 직접 접을 수 있습니다.또, 1개의 조작의 결과는 곧바로 다른 조작에 의해서 사용되는 경우가 많기 때문에, 메모리에의 쓰기를 건너뛰어 레지스터에 보존하는 것으로, 프로그램은 큰폭으로 종료하지 않고, 이론적으로는 훨씬 고속으로 동작할 수 있습니다.예를 들어 일련의 수학적 연산을 실행하는 일련의 명령어는 메모리에서 몇 개의 부하만 필요로 하지만 사용되는 숫자의 대부분은 명령의 상수이거나 이전 계산에서 레지스터에 남아 있는 중간 값일 수 있습니다.어떤 의미에서, 이 기술에서는 일부 레지스터가 메모리 위치를 섀도우하기 위해 사용되며, 명령 그룹이 결정된 후 최종값이 될 때까지 레지스터가 메모리 위치의 프록시로 사용된다.

일반 관찰자에게는 RISC 개념이 성능을 향상시키고 더 악화시킬 수 있다는 것이 명확하지 않았습니다.확신할 수 있는 유일한 방법은 그것을 시뮬레이션하는 것이었다.그러한 시뮬레이션의 결과는 분명했다. 즉, 테스트를 거듭할 때마다 모든 시뮬레이션이 이 설계의 성능에서 엄청난 이점을 보여주었다.

RISC와 MIPS라는 두 프로젝트가 다른 점은 레지스터의 처리였습니다.MIPS는 단순히 많은 레지스터를 추가하고 컴파일러(또는 어셈블리 언어 프로그래머)에게 그것들을 사용하도록 맡겼습니다.한편 RISC는 컴파일러를 지원하기 위해 CPU에 회로를 추가했습니다.RISC는 레지스터 창의 개념을 사용했습니다.여기서 "레지스터 파일" 전체가 블록으로 분할되어 컴파일러는 하나의 블록을 글로벌 변수에 대해 "확인"하고 다른 블록을 로컬 변수에 대해 "확인"할 수 있습니다.

그 아이디어는 특히 일반적인 명령인 프로시저 호출을 구현하기 매우 쉽게 만드는 것이었습니다.거의 모든 프로그래밍 언어는 프로시저가 호출된 주소, 전달된 데이터(파라미터) 및 반환되어야 하는 결과 값의 공간을 포함하는 각 프로시저에 대해 활성화 레코드 또는 스택프레임으로 알려진 시스템을 사용합니다.대부분의 경우 이러한 프레임은 3개 이하의 입력이 있고 1개 또는 0개의 출력이 있는 소형 프레임입니다(또한 입력이 출력으로 재사용되는 경우도 있습니다).버클리 디자인에서 레지스터 창은 여러 레지스터의 집합이었고, 그 중 프로시저 스택 프레임 전체가 레지스터 창 안에 완전히 들어갈 수 있을 정도로 충분했습니다.

이 경우, 프로시저에의 콜과 프로시저로부터의 콜의 회송은 간단하고, 매우 고속입니다.새로운 레지스터 블록(새로운 레지스터 창)을 설정하기 위해 단일 명령이 호출되며, 그 후 새로운 창의 "로우엔드"에서 피연산자가 프로시저로 전달되면 프로그램은 프로시저로 넘어갑니다.반환 시 결과는 같은 끝에 있는 창에 배치되고 절차가 종료됩니다.레지스터 창은 마지막에 겹치도록 설정되어 있기 때문에 콜의 결과가 발신자 창에 「표시」되기 때문에, 데이터를 카피할 필요는 없습니다.따라서 일반적인 프로시저 호출은 메인메모리와 상호작용할 필요가 없어지기 때문에 메인메모리가 크게 고속화됩니다.

단점으로는 이 접근방식은 로컬 변수가 많은 절차가 문제이며, 수가 적은 절차는 레지스터(비용이 많이 드는 리소스)를 낭비하게 됩니다.설계에는 한정된 수의 레지스터 창이 있습니다(예를 들어 8개).따라서 레지스터 윈도우 메커니즘이 한계에 도달하기 전에 프로시저를 네스트할 수 있는 것은 그 정도의 레벨뿐입니다.마지막 창에 도달하면 다른 네스트된 콜에 대해 새로운 창을 설정할 수 없습니다.프로시저가 몇 레벨만 네스트 되어 있는 경우, 콜 네스트레벨이 가장 깊은 창의 레지스터에는 전혀 액세스 할 수 없기 때문에, 이러한 레지스터는 완전하게 낭비됩니다.효율적인 컴파일러가 하드웨어에서 고정된 시스템보다 레지스터를 더 잘 사용할 수 있다고 믿었던 것은 스탠포드의 컴파일러에 대한 연구였다.(똑같은 추론이 스마트 어셈블리 언어 프로그래머에게도 적용됩니다.)

RISC I

RISC 개념을 구현하기 위한 첫 번째 시도는 Gold였습니다.1980년에 VLSI 설계 과정의 일환으로 설계에 착수했지만, 당시 복잡한 설계로 인해 기존의 설계 도구가 거의 모두 손상되었습니다.팀은 상당한 시간을 들여 툴을 개선하거나 다시 작성해야 했습니다.또, 이러한 새로운 툴을 사용해도, 설계를 VAX-11/780으로 추출하는 데 1시간도 걸리지 않았습니다.

RISC I라는 이름의 최종 디자인은 1981년 컴퓨터 아키텍처에 관한 Association for Computing Machine(ACM) International Symposium on Computer Architecture(ISCA)에서 발표되었습니다.31개의 명령을 구현하는 44,500개의 트랜지스터와 78개의 32비트 레지스터가 포함된 레지스터 파일을 가지고 있었다.이는 14개의 레지스터를 포함하는 6개의 레지스터 창에서 허용됩니다.14개의 레지스터 중 4개가 이전 창에서 겹쳤습니다.총계는 윈도우의 10*6 레지스터 + 18 글로벌=78 레지스터입니다.제어 및 명령 디코딩 섹션은 다이의 6%만 차지했지만, 시대의 일반적인 설계에서는 동일한 역할에 약 50%를 사용했습니다.레지스터 파일이 [4]그 공간의 대부분을 차지했습니다.

또한 RISC I은 2단계 명령 파이프라인을 통해 속도를 높였습니다. 단, 보다 현대적인 디자인의 복잡한 명령어 재배열은 필요 없습니다.컴파일러는 조건부 브랜치(일명 브랜치 지연 슬롯) 뒤에 있는 명령어를 "안전"하도록 선택된 것(즉, 조건부 결과에 의존하지 않음)으로 채워야 하기 때문에 조건부 브랜치가 문제가 됩니다.이 경우 적절한 지침은 다음과 같습니다.NOP이후의 RISC 스타일 설계에서는 브랜치 지연을 고려할 필요가 있습니다.

검증과 디버깅을 거쳐 1981년 6월 22일 설계를 2μm(2,000nm) 공정을 사용하여 혁신적인 MOSIS 서비스에 보냈습니다.다양한 지연으로 인해 그들은 마스크를 네 번이나 버려야 했고, 작동 예가 있는 웨이퍼는 1982년 5월까지 버클리 대학에 도착하지 않았다.최초의 동작하고 있는 RISC I 「컴퓨터」(실제로는 계산대)가 6월 11일에 가동되었습니다.테스트에서 칩의 성능은 예상보다 낮았다.일반적으로 명령의 완료에는 2μs가 소요되지만, 원래의 설계에서는 약 0.4µs(5배의 속도)가 할당됩니다.이 문제의 정확한 이유는 결코 충분히 설명되지 않았다.그러나 테스트를 통해 특정 명령이 예상 속도로 실행된다는 것이 분명했으며, 이는 문제가 논리적이지 않고 물리적임을 시사합니다.

디자인이 전속력으로 작동했다면 성능은 뛰어났을 것이다.4MHz RISC I와 5MHz 32비트 VAX 11/780 및 5MHz 16비트 Zilog Z8000을 비교한 다양한 소규모 프로그램을 사용한 시뮬레이션에서 이를 명확하게 알 수 있었습니다.프로그램 사이즈는 VAX보다 약 30% 컸지만 Z8000에 매우 가까웠기 때문에 CISC 설계의 높은 코드 밀도가 실제로는 그다지 인상적이지 않다는 주장이 입증되었습니다.전체적인 퍼포먼스 면에서 RISC I은 VAX보다 2배, Z8000보다 약 4배 빠릅니다.큰 레지스터 파일이 필요한 오퍼랜드가 이미 온칩 상태일 가능성을 극적으로 높였기 때문에 프로그램은 전체 메모리 액세스의 거의 같은 양을 수행하게 되었습니다.

이 퍼포먼스를 컨텍스트에 넣는 것이 중요합니다.RISC 설계는 VAX보다 느리게 실행되었지만 설계의 중요성은 변하지 않았습니다.RISC는 이미 오래된 팹을 사용하여 실제 칩 다이 상에서 진정한 32비트 프로세서를 생산할 수 있었습니다.기존의 설계에서는 디코더 로직 전용 칩 표면이 너무 많기 때문에 Motorola 68020과 같은 진정한 32비트 설계에서는 실용화되기 전에 새로운 팹이 필요했습니다.같은 팹을 사용했을 경우 RISC는 경쟁사보다 훨씬 뛰어난 성능을 발휘할 수 있었습니다.

2015년 2월 12일 IEEE는 RISC-I의 [5]공헌을 기념하기 위해 UC 버클리대에 명판을 설치했습니다.명판에는 다음과 같이 적혀 있습니다.

  • UC 버클리 대학의 학생들은 1981년에 최초의 VLSI 축소 명령 세트 컴퓨터를 설계 및 제작했습니다.RISC-I의 간단한 명령으로 명령 디코딩 및 제어를 위한 하드웨어가 줄어들어 플랫한 32비트 주소 공간, 대규모 레지스터 세트 및 파이프라인 실행이 가능했습니다.C 프로그램 및 Unix 운영체제에 적합한 RISC-I는 게임 콘솔, 스마트폰 및 태블릿용 명령어 세트를 포함하여 오늘날 널리 사용되는 명령어 세트에 영향을 주었습니다.

RISC II

내가 설계한 RISC가 지연되는 동안 버클리에서는 이미 새로운 Blue 설계로 작업이 전환되었습니다.Blue에 대한 작업은 Gold보다 더디게 진행되었습니다.Gold가 곧 완성될 예정이기 때문에 긴급한 필요성이 부족하고 수업과 학생들의 인력 배치 전환이 필요했기 때문입니다.또한 이러한 속도 덕분에 설계를 대폭 개선할 수 있는 몇 가지 새로운 기능을 추가할 수 있었습니다.

주요 차이점은 1비트당 1줄(3줄에서 2줄)을 제거하여 레지스터 파일 크기를 크게 줄인 단순한 캐시 회로입니다.이 변경은 버스 시간도 훨씬 더 빡빡하게 해야 했지만, 이것은 작은 대가였고, 요구를 충족시키기 위해 설계의 다른 부분들도 속도를 높였습니다.

새로운 디자인으로 인한 비용 절감은 엄청났다.Gold가 6개의 창에 총 78개의 레지스터를 가지고 있는 반면, Blue는 각각 16개의 레지스터 8개의 창에 138개의 레지스터를 가지고 있었고, 또 다른 10개의 글로벌 레지스터를 가지고 있었다.이 레지스터 파일의 확장에 의해, 특정의 프로시저가 레지스터의 모든 로컬 스토리지에 들어갈 가능성이 높아져, 네스트의 깊이가 증가합니다.그럼에도 불구하고 레지스터 파일이 클수록 필요한 트랜지스터의 수가 적었고, 최종 블루 디자인은 RISC II로 팹되어 40,760개의 [6]트랜지스터만으로 모든 RISC 명령 세트를 구현했습니다.

또 다른 주요 변경사항은 16비트 명령을 32비트 형식으로 "업 변환"하는 명령 형식 확장기를 포함하는 것이었습니다.이것에 의해, 일반적으로 오퍼랜드가 1개 또는 0개 있는 명령어, 예를 들면 다음과 같은 작은 명령어가 가능하게 됩니다.NOP메모리에 16비트 작은 포맷으로 저장되며, 이러한 명령어가1개의 머신 워드로 압축됩니다.명령어는 산술논리유닛(ALU)에 도달하기 전에 32비트버전으로 눈에 보이지 않게 확장됩니다.즉, 코어 로직을 변경할 필요가 없습니다.이 간단한 기술을 통해 코드 밀도가 30%나 향상되었으며, 메모리 액세스 수가 감소했기 때문에 Blue에서 동일한 프로그램을 Gold에서보다 빠르게 실행할 수 있었습니다.

RISC II는 실리콘과 테스트에서 거의 모든 작업에서 거의 모든 미니컴퓨터를 훨씬 능가하는 성공을 거두었습니다.예를 들어, 다양한 부하에서 VAX 속도의 85%에서 256%까지 성능이 다양했습니다.또한 RISC II는 유명한 Motorola 68000에 대항해 당시 최고의 상용 칩 구현으로 간주되어 140% 대 420%의 성능을 발휘했습니다.

후속 조치

원래의 RISC 설계에 대한 작업은 RISC II로 종료되었지만, 그 개념은 버클리에서도 계속되었습니다.기본 코어는 1984년에 SURAGY에서 재사용되었고, 기본적으로는 Smalltalk를 실행하도록 RISC가 변환되었으며(RISC가 C를 실행한다고 주장할 수 있는 것과 같은 방식으로), 나중에 Smalltalk 대신 Prolog를 실행한 유사한 VLSI-BAM에서 다시 사용되었습니다.또한 32비트 워크스테이션을 구축하기 위해 필요한 칩셋인 SPER도 있습니다.

RISC는 Sun Microsystems의 상용 SPARC 프로세서 설계의 기초가 되기 때문에 그다지 유명하지는 않지만 영향력이 큽니다.SPARC는 RISC 개념의 위력을 가장 먼저 입증했습니다.첫 Sun-4s 출하에서는 시장에서 어떤 제품보다 뛰어난 성능을 보였습니다.이로 인해 거의 모든 Unix 벤더가 자체 RISC 설계를 서두르게 되었고, DEC Alpha 및 PA-RISC같은 설계를 하게 되었고, Silicon Graphics(SGI)는 MIPS Computer Systems를 구입하게 되었습니다.1986년에는 대부분의 대형 칩 벤더가 Motorola 88000, Fairchild Clipper, AMD 29000PowerPC같은 노력을 기울였습니다.2015년 2월 13일 IEEE는 산타클라라의 [7]오라클사에 명판을 설치했습니다.라고 쓰여 있다

  • Sun Microsystems는 1987년에 Scalable Processor Architecture(SPARC) RISC를 도입했습니다.UC Berkeley RISC 및 Sun 컴파일러와 운영체제 개발에 기반한 SPARC 아키텍처는 진화하는 반도체, 소프트웨어, 시스템 테크놀로지 및 사용자 요구에 매우 적합합니다.이 아키텍처는 엔지니어링, 비즈니스, 인터넷 및 클라우드 컴퓨팅 용도로 최고의 성능과 확장성이 뛰어난 워크스테이션 및 서버를 제공했습니다.

명령어 세트의 축소를 위해 개발된 기법은 기존의 "복잡한" x86 아키텍처의 보다 강력한 구현과 확장에도 채택되어 왔습니다.현대 마이크로프로세서의 트랜지스터 카운트의 대부분은 명령 아키텍처에 관계없이 적용할 수 있는 대용량 캐시, 많은 파이프라인 단계, 슈퍼스케일러 명령 디스패치, 분기 예측 및 기타 최신 기술에 할애됩니다.현대의 x86 실장에서의 명령어 디코딩 전용 실리콘의 양은 비교적 적기 때문에, 「복잡한」프로세서와 RISC 프로세서의 실장의 구별이 모호해지고 있습니다.

「 」를 참조해 주세요.

레퍼런스

인용문

  1. ^ Reilly, Edwin D. (2003). Milestones in Computer Science and Information Technology. p. 50. ISBN 1573565210.
  2. ^ Chisnal, David (2010-08-23). "Understanding ARM Architectures". Informit. Retrieved 13 October 2015.
  3. ^ a b Tanenbaum, Andrew (March 1978). "Implications of Structured Programming for Machine Architecture". Communications of the ACM. 21 (3): 237–246. doi:10.1145/359361.359454. S2CID 3261560.
  4. ^ Peek, James B. (1983-06-02). "The VLSI Circuitry of RISC I" (PDF). University of California at Berkeley Berkeley, CA, USA. pp. 13, 59.
  5. ^ "memorabilia [RISC-I Reunion]". risc.berkeley.edu. Retrieved 2020-03-19.
  6. ^ "Berkeley Hardware Prototypes". people.eecs.berkeley.edu. Retrieved 2021-11-06.
  7. ^ Gee, Kelvin. "Oracle to Receive IEEE Milestone Award for SPARC RISC Architecture". blogs.oracle.com. Retrieved 2020-03-19.

참고 문헌