COMPUTER ARCHITECTIRE 제 8장 CPU설계와 구조 COMPUTER ARCHITECTIRE
목 차 8-1. CISC와 RISC의 구조 8-2. VLIW 8-3. 파이프라인
8-1. CISC와 RISC의 구조 복합형 명령어 셋 컴퓨터(CISC; Complex Instruction Set Computer) 축소형 명령어 셋 컴퓨터(RISC; Reduced Instruction Set Computer) - 폰 노이만 형 컴퓨터 구조 CISC 구조 RISC ( 마이크로코드 ) 슈퍼스칼라 프로세서 파이프라인 멀티스레디 VLIW 싱글 칩 멀티프로세서 마이크로 코드 VLIW : Very Long Instruction Word = 명령어의 실행 개수를 늘리는 구조 - 여러 개의 명령어를 아주 긴 하나로 복합하여 병렬 고속 처리하는 방식이다. [그림 8-1] CPU 설계 변천사
8-1 CISC 와 RISC 구조 1) CPU 설계 변천과정 1970년대부터 논리회로에 고밀도 집적회로가 사용되면서 [표 8-0]과 같이 크기와 속도 면에서 비약적인 발전이 시작 1970-1980 1980-1990 1990-2000 2000-2010 트랜지스터 수 2K-100K 100K-1M 1M-100M 100M-1B 클럭 주파수 0.1-3MHz 3-30MHz 30M-1GHz 1-15GHz 사이클당 명령어 < 0.1 0.1-0.9 0.9-1.9 1.9-2.9(?) [표 8-0] 고밀도 집적회로의 크기와 속도
[그림 8-2] 의미 갭(Semantic Gap) 8-1 CISC 와 RISC 구조 1) CPU 설계 변천과정 프로그래밍 언어 컴파일과 인터프리팅 기계어 프로그래머 하드웨어 Semantic Gap ■ CISC 명령체제는 마이크로 코드가 작고 고성능 메모리에 저장될 수 있었기 때문에 가장 강력한 형태의 컴퓨터로 인식되었으며 의미 캡을 어드레스 하였음 의미 갭(Semantic Gap) 기계어와 사용자들이 컴퓨터 프로그램을 작성하는데 사용하는 프로그래밍 언어와의 차이를 정의 [그림 8-2] 의미 갭(Semantic Gap)
2) 프로그램 수행 실행 시간 = IC ☓CPI ☓ CT IC (Instruction Count): 명령어의 개수 8-1 CISC 와 RISC 구조 2) 프로그램 수행 실행 시간 = IC ☓CPI ☓ CT IC (Instruction Count): 명령어의 개수 CPI (Clocks Per Instruction): 평균 명령어당 클럭 펄스의 수 즉 각 명령어 당 평균 연산 단계의 수 CT (Click Times): 클럭 펄스의 사이클 시간, 즉 하나의 연산단계를 수행하는 시간 결론 : 프로그램의 고속 수행을 위해서는 IC, CPI, CT의 3변수 중 어느 한가지 혹은 모두를 감소 시키면 된다. ▶ CISC : 기본 설계 개념이 IC 감소에 목적이 있다. ▶ RISC : CPI와 CT 감소 목적을 갖고 있다.
3) CISC 구조 CISC (Complex Instruction Set Computer) 구조란? 8-1 CISC 와 RISC 구조 3) CISC 구조 CISC (Complex Instruction Set Computer) 구조란? ▶ 복합적, 고기능의 명령어 셋을 가진 컴퓨터 - 많은 명령어 수, 다양한 종류의 명령어 다양한 주소 모드, 가변길이의 명령어 형식으로 구성된 명령어의 셋이다. ▶ 모든 고급 언어 명령어들에 대해 각각 하나의 기계어 명령어가 일대일로 대응되게 하여 컴파일 동작을 간소화 시켜 전반적인 컴퓨터의 성능을 향상시키는 방식 장점 : 컴파일 과정이 쉽고 호환성이 좋음 단점 : 많은 하드웨어가 필요하고 속도가 느림
4) RISC 구조 RISC (Reduced Instruction Set Computer) 구조란? 8-1 CISC 와 RISC 구조 4) RISC 구조 RISC (Reduced Instruction Set Computer) 구조란? ▶ 간단한 명령어 형태로 CPU 성능을 높이려 개발한 형태이다. - 명령어들을 사용하여 효율적인 기계어 코드를 생성하고 처리를 단순화 시켜 속도 향상을 높였다. - CISC 구조에서 자주 사용되지 않은 명령어를 제거하고 전체 프로그램의 실행시간에 영향을 주는 부분을 최적화 시켜 CPU 성능을 향상 시키려 했음 ▶ RISC 구조의 출발 - 고급언어 컴파일러들이 컴퓨터의 명령어 셋을 어떻게 활용하고 있는가? 측 컴파일러 측면에서 명령어 셋을 설계한 컴퓨터. - 복잡한 기능의 명령어들을 제거하고 컴파일러에 의해 쉽게 생성될 수 있으면서, 간단한 하드웨어로도 효율적으로 구현 시키도록 컴파일러에게 맡기자는 것이다.
[표 8-1] 고급 프로그래밍 언어 문장의 상대적인 동적 수행 빈도 8-1 CISC 와 RISC 구조 4) RISC 출현 배경 고급 프로그래밍 언어 문장의 상대적인 동적 수행 빈도 (명령어 수행빈도) ▶ SAL : Studies in American Language 언어 PSCAL FORTRAN PASCAL C SAL 작업 과학기술 학생 시스템 지정문 Loop Call If Go To 기타 74 4 1 20 2 - 67 3 11 9 7 45 5 15 29 6 38 12 43 42 36 ▶ 지정문은 if 및 Loop의 수행빈도를 합한 것보다 수행빈도가 높다. [표 8-1] 고급 프로그래밍 언어 문장의 상대적인 동적 수행 빈도
4) RISC 출현 배경 명령어의 상대적인 동적 수행 빈도 8-1 CISC 와 RISC 구조 ▶ 고급 프로그래밍 언어로 작성한 프로그램을 수행할 때 어느 유형의 명령어가 가장 많은 시간이 소요 되는가를 나타낸다. 동적 변환빈도 기계어 명령어 메모리 참조 Pascal C 지정문 45 38 13 14 15 Loop 5 3 42 32 33 26 Call 12 31 44 If 29 43 11 21 7 GoTo - 기타 6 1 2 ▶ 프로시저 호출문(Call)과 루프(Loop)를 만드는 문장을 수행할 때 가장 많은 수의 기계어 명령어를 수행과 메모리 참조를 함. [표 8-2] 명령어의 상대적인 동적 수행 빈도
4) RISC 출현 배경 오퍼랜드(연산을 수행하는데 필요한 데이터 혹은 데이터 주소 ) 8-1 CISC 와 RISC 구조 Pascal C 평균 정수 상수 16 23 20 스칼라 변수 58 53 55 배열/구조 26 24 25 Scalar: 개념은 간단히 하나의 이름에 하나의 값이 대입되는 변수를 말함. [표 8-3] 지역 변수의 엑세스 현상
5) RISC 특성 RISC구조 단순 명령어 구조로 명령어의 실행 속도를 높임 빠른 클럭 속도로 동작시킴 8-1 CISC 와 RISC 구조 5) RISC 특성 RISC구조 단순 명령어 구조로 명령어의 실행 속도를 높임 빠른 클럭 속도로 동작시킴 하드웨어 구조의 간단한 형태로 파이프라인 구성이 쉽도록 작성 32 bits 원시 2 1 목적 IM( 직접 비트 ) 원 시 목 적 Scc :Source Code Control [그림 8-4] 버클리 RISC 명령어 형식
5) RISC 특성 간단한 명령어 셋 구성 메모리를 참조 할 수 있는 LOAD/STORE 명령어 구조를 지니고 있음 8-1 CISC 와 RISC 구조 5) RISC 특성 간단한 명령어 셋 구성 메모리를 참조 할 수 있는 LOAD/STORE 명령어 구조를 지니고 있음 파이프라인 하드웨어 구조 사용 대량의 레지스터 셋과 메모리 계층의 다단계화 캐시 메모리 역할 증대 부동 소수점 보조 프로세서(Floating-Point Coprocessor) 이용 컴파일러 최적화 높은 병렬성을 위한 고도의 파이프라인 수행 장치
[그림 8-5] RISC와 CISC의 명령어 실행 [그림 8-6] CISC와 RISC의 명령어의 실행 상태 기계 명령어 명령어 실행 RISC 기계 명령어 마이크로 코드 변환 마이크로 명령어 마이크로 명령어 실행 CISC RISC CISC 클럭 펄스 시간 단계 3 명령어 2 1 ■ CISC구조 - 거의 사용하지 않은 명령어가 있음 - 이러한 명령어 때문에 회로, 하드웨어가 복잡함. - 복잡한 명령어를 디코딩하여 실행하는데 시간이 많이 필요하고, 수행속가 감소됨. ■ RISC구조 - 자주 사용되고 아주 짧은 실행시간을 갖는 간단한 형태의 명령어들로 명령어 셋을 구성 - 마이크로 코드 변환 단계를 거치치 않기 때문에 빠르게 명령어를 실행 - 처리과정을 위해 CISC 컴파일러 보다 더 많은 명령어를 생성한다. ■ CISC구조 - 형태와 크기가 다양하므로 하나의 명령어를 실행하기 위하여 여러 단계를 거치게 되고 실행시간도 서로 다르다. ■ RISC구조 - 모든 명령어는 동일한 형태와 크기를 구성하고 있기 때문에 하나의 실행 주기 동안 하나의 명령어를 처리할 수 있다. [그림 8-5] RISC와 CISC의 명령어 실행 [그림 8-6] CISC와 RISC의 명령어의 실행 상태
6) CISC와 RISC 비교 RISC와 CISC 프로세서의 공통적인 특징 ① 단일 사이클 연산 ② 하드 배선(Hardwired) 제어장치 이용 - CISC는 마이크로제어 방식 사용. - RISC는 하드웨어에 의한 명령어 해석, 즉 논리회로를 이용하여 단일 사이클 시간 내에서 하나의 명령을 실행하기 위해 하드 배선논리에 의해 제어를 통해 제어논리를 단순화한다. ③ 소수 명령 형태 - CISC는 다양한 데이터의 형태의 주소 기법을 채택 함. - RISC는 상대적으로 적은 수의 명령어 주소와 주소 지정 양식으로 명령해석에 요구되는 시간을 단축함. [표 8-4] RISC와 CISC의 구조상 특성
6) CISC와 RISC 비교 RISC와 CISC 프로세서의 공통적인 특징 ④ 명령어 형식 고정 특 성 CISC RISC IBM 370/168 Vax 11/780 Intel 8086 버클리 MIPS SPARC 개발 연도 1973 1978 1995 1981 1991 1987 명령어 개수 208 303 235 31 94 52 명령어크기(bits) 16-48 16-456 8-88 32 4 주소 모드 22 11 3 1 2 범용 레지스터 개수 16 8 138 520 이상 [표 8-4] RISC와 CISC의 구조상 특성
8-2. VLIW (Very Long Instruction Word) 그래픽 가속기에서는 오래 전부터 사용되는 기술임. ■ 하나의 긴 명령에 다수의 연산들을 기술하여 명령수준에서 병렬처리를 수행하는 기술 데이터 캐시 실행장치 #1 #2 #3 #4 레지스터 파일 명령어 [그림 8-7] VLIW 프로세서를 구현한 블록도
8-2. VLIW VLIW 구조 ■ 클럭 당 8개의 연산을 실행하는 VLIW프로세스 [그림 8-8] VLIW 프로세서
8-2. VLIW ■ 장점 ■ 문제점 ▶ 병렬 연산의 동기화가 컴파일 시간에 수행되므로 프로세서의 효율성이 향상 ▶ 프로그램의 길이가 짧아지게 되므로 실행시간이 감소 ▶ 명령어 병렬처리, 데이터 이동이 컴파일 시간에 완전히 명시되어 실시간 자원 스케줄링이 간단함 ■ 문제점 ▶ 지능적인 컴파일러가 없으면 불가능 ▶ 현재의 X86 또는 RISC 프로그램과 호환성이 없음 ▶ 새로운 컴파일러가 필요
8-3. 파이프라인 1) 명령어 실행 주기를 단축시키는 과정 2) 파이프 라인 ① 클럭 속도 클럭 속도가 향상되면 명령어 실행에 필요한 전체 클럭 수가 줄어들어 성능 향상 ② 데이터 폭 데이터 폭이 클수록 실행주기가 짧음(32비트, 64비트) 2) 파이프 라인 ■ 파이프 라인은 하나의 통합적이고 복잡한 작업을 몇 개의 소규모 작업 단계들로 분할하여 작업의 수행과정에서 병렬 효과를 나타내어 CPU의 성능을 하상시키는 하드웨어적인 기술. ■ 하드웨어의 추가 부담을 최소화하면서 프로그램의 처리 속도를 높이고자 명령어의 실행 주기에서 서로 연관 관계가 없는 작업을 병렬 처리하여(명령어 중첩) 성능을 향상시키는 구조
2) 파이프라인 개념 예) 빨래 꾸러미 4개(A,B,C,D)의 세탁 과정 = 연결 작업 8-3 파이프라인 2) 파이프라인 개념 예) 빨래 꾸러미 4개(A,B,C,D)의 세탁 과정 = 연결 작업 [그림 8-9] 아이콘 설명 [그림 8-10] 세탁 처리 과정 세탁시간이 총 1시간 30분이 소요된다고 가정 총 소요시간은 6시간
[그림 8-11] 파이프라인 기법의 세탁 꾸러미 처리과정 8-3 파이프라인 2) 파이프라인 개념 예) 빨래 꾸러미 4개(A,B,C,D)의 세탁 과정 = 분리된 작업 [그림 8-11] 파이프라인 기법의 세탁 꾸러미 처리과정 총 세탁처리 시간은 3.5 시간
[그림 8-13] 항상 동작중인 명령어에 대한 인출과 실행 단계 8-3 파이프라인 3) 명령어 파이프라인 F 1 E 2 3 Time I [그림 8-12] 명령어 인출과 실행 단계 F 1 E 2 3 Time I 명령어 [그림 8-13] 항상 동작중인 명령어에 대한 인출과 실행 단계
8-3 파이프라인 3) 명령어 파이프라인 클럭의 속도는 인출과 실행의 동작이 각각 한 개의 클럭 사이클 내에 완료될 수 있도록 가정 명령어 실행 속도는 위 순차 동작에 비해 두 배 빨라짐 [그림 8-14] 클럭의 속도
3) 명령어 파이프라인 Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Ifetch Reg /Dec 8-3 파이프라인 3) 명령어 파이프라인 Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Ifetch Reg /Dec Exec Mem Wr Load [그림 8-15] 5단계로 구성된 Load 명령어 Ifetch : 명령어가 저장된 메모리로부터 명령어 인출 Reg/Dec : 원시 오퍼랜드(레지스터 값) 인출과 명령어(제어 정보) 해석 Exec : 산술 연산의 수행과 주소 계산 Mem : 데이터 메모리로부터 데이터 읽어오기 Wr : 수행 결과의 저장 단계로 레지스터 파일에 데이터 저장
[그림 8-17] 4단계로 이루어진 R-형태의 명령어들 8-3 파이프라인 3) 명령어 파이프라인 Clock Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Ifetch Reg/Dec Exec Mem Wr 1st lw 2nd lw 3rd lw [그림 8-16] 파이프라인에 의한 수행 과정 R-형태 Cycle 1 Cycle 2 Cycle 3 Cycle 4 Ifetch Reg/Dec Exec Wr R - type [그림 8-17] 4단계로 이루어진 R-형태의 명령어들
[그림 8-18] [Wr] 단계가 겹치게 되어 문제 발생 8-3 파이프라인 3) 명령어 파이프라인 ■ 실행 Type이 틀린 경우 파이프 라인 처리시 문제 발생 Clock Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Cycle 8 Cycle 9 Ifetch Reg/Dec Exec Wr R - type Mem Load 문제 발생 부분이 겹침 [그림 8-18] [Wr] 단계가 겹치게 되어 문제 발생
3) 명령어 파이프라인 8-3 파이프라인 ■ 실행 Type이 틀린 경우 파이프 라인 처리시 문제 발생 8-3 파이프라인 3) 명령어 파이프라인 ■ 실행 Type이 틀린 경우 파이프 라인 처리시 문제 발생 ■ 해결 방법 : bubble 삽입 (NOP; No Operation) - 결론 1사이클 지연을 가져옴 Clock Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Cycle 8 Cycle 9 Ifetch Reg/Dec Exec Wr R - type Mem Load Pipeline Bubble [그림 8-19] 사이클 6에서의 명령어의 중단
[그림 8-21] 5단계로 확장한 R-형태의 명령어들 8-3 파이프라인 3) 명령어 파이프라인 ■ 4단계에서 5단계로 확장 ■ 해결 방법 : Mem 삽입 (NOP; No Operation) - 결론 1사이클 지연을 가져옴 Ifetch Reg/Dec Exec Wr R - type Mem 1 2 3 4 5 [그림 8-21] 5단계로 확장한 R-형태의 명령어들 Clock Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5 Cycle 6 Cycle 7 Cycle 8 Cycle 9 Ifetch Reg/Dec Mem Wr R - type Exec Load [그림 8-22] R-형태의 파이프라인 수행 결과
4) 분기 처리 8-3 파이프라인 Ifetch W r Dec Exec bubble 4 단계 파이프라인 Bubble ; 해결책 8-3 파이프라인 4) 분기 처리 Ifetch W r Dec Exec bubble 4 단계 파이프라인 Bubble ; 해결책 명령어는 BRAN 이고 다음 명령어는 i+1보다 주소 N에서 인출 되어야 한다. ADD R1,R2,R3 JMPX N ADD R2,R4,R5 ADD R7,R8,R9 [그림 8-22] 분기과정
[그림 8-23] 지연분기 과정을 RISC 프로세서에서 구현한 과정 8-3 파이프라인 4) 분기 처리 ADD R1,R2,R3 JMPX N ADD R2,R4,R5 ADD R7,R8,R9 Dec Exec Wr 이 명령은 비순차로 실행된다 BRAN [그림 8-23] 지연분기 과정을 RISC 프로세서에서 구현한 과정
5) 명령어 경로와 데이터 경로 분리 레지스터 파일 부동 소수점 연산 장치 정수 코드 명령어 데이터 주소 8-3 파이프라인 8-3 파이프라인 5) 명령어 경로와 데이터 경로 분리 레지스터 파일 부동 소수점 연산 장치 정수 코드 명령어 데이터 주소 목적 버스 원시 2 1 [그림 8-24] 모토롤라 88100 프로세서의 내부조직
5) 명령어 경로와 데이터 경로 분리 레지스터 파일 부동 소수점 연산 장치 정수 코드 명령어 데이터 주소 8-3 파이프라인 8-3 파이프라인 5) 명령어 경로와 데이터 경로 분리 레지스터 파일 부동 소수점 연산 장치 정수 코드 명령어 데이터 주소 목적 버스 원시 2 1 [그림 8-24] 모토롤라 88100 프로세서의 내부조직
6) 데이터 종속성 [예] X := (A + B)AND(A + B - C) 8-3 파이프라인 6) 데이터 종속성 [예] X := (A + B)AND(A + B - C) ADD A, B, T1 [T1] ← [A] + [B] SUB T1, C, T2 [T2] ← [T1] - [C] AND T1, T2 ,X [X] ← [T1] + [T2] Ifetch Reg Exec Wr A,B Sub T T1,C T1,T2 + - x X T2 AND Add [그림 8-25] 파이프라인 수행 결과
6) 데이터 종속성 ADD R1,R2,R3 [R3] ← [R1] + [R2] 8-3 파이프라인 6) 데이터 종속성 ADD R1,R2,R3 [R3] ← [R1] + [R2] ADD R4,R5,R6 [R6] ← [R4] + [R5] ADD R3,R4,R7 [R7] ← [R3] + [R4] ADD R7,R1,R8 [R8] ← [R7] + [R1] Exec Wr Reg 내부 포워딩 이 경우 R3 은 원시 오퍼랜드로 필요하기 전에 저장된다 . 포워딩은 여기서 필요하다 왜냐하면 R7 아직 저장되지 않았다 [그림 8-26] 파이프라인 수행 결과
[그림 8-27] 슈퍼스칼라와 스칼라 파이프라인 명령어 실행 과정 8-3 파이프라인 7) 슈퍼스칼라 프로세서 명령어 1 2 3 4 5 6 7 8 (a) 명령어 1 2 3 4 (b) [그림 8-27] 슈퍼스칼라와 스칼라 파이프라인 명령어 실행 과정
[그림 8-28] 전형적인 슈퍼스칼라 프로세서 조직으로서 4개의 실행 장치로 구성한 프로세서 구조도 8-3 파이프라인 7) 슈퍼스칼라 프로세서 데이터 캐시 실행장치 #1 #2 #3 #4 레지스터 파일 명령어 [그림 8-28] 전형적인 슈퍼스칼라 프로세서 조직으로서 4개의 실행 장치로 구성한 프로세서 구조도