+ 한국항공대학교 길현영 교수님의 컴퓨터구조론 과목 내용을 정리한 글입니다.
왜 CPU 내 기억장치 (Register)가 필요한가?
폰 노이먼 모델에서 발생 가능한 데이터 트래픽 추정
< 폰 노이먼 모델: 실행 장치 (CPU)와 기억장치 (Memory)의 분리 >
- SW와 HW의 분리로, 프로그램이 수정이 가능하고, 다양한 프로그램을 쉽게 사용 가능하다.
- 대신, 항상 기억 장치와 CPU 간 데이터 이동이 발생한다. (명령어/자료 등)
=> 시간이 지날 수록, CPU와 기억 장치 간 속도 차이가 커졌다. (병목 현상)
CPU 내부 기억장치(레지스터)가 없는 가상의 컴퓨터를 가정
M - M (메모리 - 메모리) 컴퓨터
- CPU 내부에 데이터 저장 불가하다.
- 모든 데이터는 메모리에서 CPU를 경유하여 메모리로 전송된다.
- 데이터가 필요한 경우, 명령어의 피연산자 필드에 메모리 전체 주소를 명시한다.
시스템은 아래 조건을 따른다고 가정한다.
- 연산 부호 비트는 8Bit (1Byte)이다.
- 연산마다 최대 2개의 피연산자를 사용한다. (피연산자 1개는 2Byte이다.)
- 첫 번째 피연산자는 Source & Destination이다.
ex) 피연산자 주소 1에 저장된 a, 피연산자 주소 2에 저장된 b를 연산한 값 c는 피연산자 주소 1에 저장된다.
- 메모리 주소는 16Bit (2 Byte)이고, 데이터의 크기는 32 Bit(4 Byte)이다.
M - M 컴퓨터: y = ax^2 + bx + x (시험)
< Register가 없을 때 >
+ 식의 앞 부분부터 계산하여 y에 저장하라
+ 새로운 변수는 최소한으로 사용하라
1. y = ax^2 만들기
1) y = a
MOV y a
=> M[y] <- M[a]: 메모리 주소 a의 데이터를 메모리 주소 y에 저장한다.
2) y = ax
MUL y x
=> M[y] <- M[y] × M[x]: 메모리 주소 y의 데이터와 메모리 주소 x의 데이터의 곱을 메모리 주소 y에 저장한다.
3) y = ax^2
MUL y x
=> M[y] <- M[y] × M[x]: 메모리 주소 y의 데이터와 메모리 주소 x의 데이터의 곱을 메모리 주소 y에 저장한다.
2. y = ax^2 + bx 만들기
1) t = b
MOV t b
=> M[t] <- M[b]: 메모리 주소 b의 데이터를 메모리 주소 t에 저장한다. (변수를 따로 할당 overwrite 주의)
2) t = bx
MUL t x
=> M[t] <- M[t] × M[x]: 메모리 주소 t의 데이터와 메모리 주소 b의 데이터의 곱을 메모리 주소 t에 저장한다.
3) y = y + t (y = ax^2 + bx)
ADD y t
=> M[y] <- M[y] + M[t]: 메모리 주소 y의 데이터와 메모리 주소 t의 데이터의 합을 메모리 주소 y에 저장한다.
3. y = ax^2 + bx + c 만들기
y = y + c (y = ax^2 + bx + c)
ADD y c
=> M[y] <- M[y] + M[c]: 메모리 주소 y의 데이터와 메모리 주소 c의 데이터의 합을 메모리 주소 y에 저장한다.
< 명령어 인출 트래픽 >
- 한 명령어 당 5Byte 트래픽 발생
=> 7개의 명령어를 사용했으므로 5Byte * 7 = 35Byte 트래픽 발생
< 데이터 이동 트래픽 (1) - MOV >
- 데이터 이동 연산: MOV y a
- a번지의 데이터를 메모리에서 CPU로 갖고 왔다가 다시 메모리 y번지로 저장한다.
- 4Byte데이터가 한 MOV 명령어당 2회 이동하므므로 4Byte × 2 = 8Byte 트래픽 발생
=> 2개의 명령어를 사용했으므로 8Byte × 2 = 16Byte 트래픽 발생
< 데이터 이동 트래픽 (1) - MUL, ADD >
- MUL과 ADD 연산 시 트래픽 양은 동일하다.
- 산술 연산: MUL y, x (산술연산을 수행하는 것은 트래픽이 없다.)
- y번지와 x번지의 데이터를 CPU로 갖고 와서 곱셈 수행 후, 결과 데이터를 y번지에 저장한다.
- 한 MUL 명령어당 4Byte 데이터 2개를 CPU에 가져오는 8Byte트래픽과 4Byte 결과 데이터 1개를 메모리에 저장하는 4Byte 트래픽이 발생하므로 총 12Byte의 트래픽이 발생한다.
=> 5개의 명령어를 사용했으므로 12Byte × 5 = 60Byte 트래픽 발생
=> 35Byte + 16Byte + 60 Byte = 총 111Byte 트래픽이 발생한다.
< Register가 있을 때 >
데이터 이동 트래픽이 감소한다.
- 반복적으로 사용되는 피연산자를 CPU 내부의 기억 장치에 보관한다.
- 메모리를 다시 참조할 필요성이 제거된다.
ex) MUL y x를 2번 사용할 필요가 없다.
=> 이미 2번째 코드에서 x를 메모리에서 가져왔기 때문에 3번째 코드에서 다시 가져올 필요가 없다.
명령어 트래픽이 감소한다
- 대용량 메모리를 위한 긴 주소 대신에 소규모 기억장치(레지스터)의 짧은 주소를 사용할 수 있다.
- 레지스터 개수 = 레지스터 주소 bit수
- 레지스터 개수 << 메모리 entry 수
- 피연산자 필드가 짧아지면 명령어의 길이가 축소된다.
'Computer Science > Computer Architecture' 카테고리의 다른 글
[Computer Architecture] 주소 지정 방식 (0) | 2023.10.07 |
---|---|
[Computer Architecture] 명령어 집합 분류 (1) | 2023.10.06 |
[Computer Architecture] 명령어 집합 (1) (0) | 2023.09.22 |
[Computer Architecture] 명령어 집합 구조 (0) | 2023.09.18 |
[Computer Architecture] 컴퓨터의 성능 (1) | 2023.09.10 |