티스토리 뷰
본 포스팅은 "프로그래머가 몰랐던 멀티코어 CPU 이야기" 를 읽고 주인장의 생각을 정리한 게시글 입니다.
책정보, 프로그래머가 몰랐던 멀티코어 CPU 이야기 : 네이버 책 (naver.com)
1. RISC과 CISC
방통대의 경우, 컴퓨터 구조 수업에서 RISC과 CISC의 언급이 짧게 나옵니다.
"RISC은 Reduced ISC(Instruction Set Computer)로, 명령어의 길이가 짧고 고정되어있다.
CISC의 경우 Complex ISC로, 명령어의 길이가 가변적이고 매우 복잡하다"
정도로 정리가 되어있습니다.
그래서 CISC는 X86-64 아키텍쳐(인텔, AMD에서 만드는)CPU를 만들고, 성능이 높지만 전기를 많이는다.
RISC는 성능이 낮지만, 전기를 덜 먹는 편이어서 모바일CPU(ARM계열의 CPU)로 알고 있었습니다.
아래는 C언어 코드에 대한 RISC과 CISC의 어쎔블리 예제 입니다.
struct Vector
{
int x;
int y;
int z;
} data[10];
data[index].y = 0x87654321;
/*
ARM, RISC의 어쎔블리 코드
ldr r1, [sp, #4] ; r1 = index
mov r3, #0xC ; r2 = sizeof(Vector) -> 컴파일할때 이미 구조체 Vector의 크기는 정해져 있다(12)
mul r2, r1, r3 ; r2 = index * sizeof(Vector)
add r3, sp, #8 ; r3 = data
add r3, r3, r2 ; r3 = &data[index]
add r2. r3, #4 ; r2 = &(data[index].y)
ldr r3, [pc, #8] ; r3 = 0x87654321
str r3, [r2] ; *(r2) = r3
x86-64, CISC의 어쎔블리 코드
movsxd rax, dword ptr[rsp + 24h]
imul rax, rax, 0ch
mov dword ptr[rsp+rax+34h], 87654321h
*/
2. 현재의 CPU
하지만 이것도 과거 이야기 입니다.
해당 책이 쓰여진 시점인 2010년도 기준이므로, 지금은 더 많이 다를겁니다.
2_1. RISC
RISC은 크게 변한게 없습니다. 하지만 CISC은 RISC대비 전성비의 열등한 점을 보완하기 위해서 여러 장치가 도입되었습니다.
RISC의 경우 명령어의 길이가 고정된 형태이기 때문에 하드웨어적으로 명령어를 해독(Decord)하기 위한 하드웨어의 설계가 상대적으로 CISC대비 쉬워집니다.
또한 RISC 자체가 CISC대비 Reduced, 명령어 Set 자체가 많지 않고 작은 단위의 명령어를 조합해서 작업을 수행하합니다.
다양하게 조합된 명령어를 컴파일러 단에서 작은 단위의 명령어로 쪼갠 다음 CPU로 전달하기 때문에 CPU에서 구현해야할 하드웨어의 복잡도가 내려가게 되죠
2_2. CISC
반면 CISC의 경우 가변적이고 많은 수의 명령어를 하드웨어에서 해독하기 위한 CPU의 하드웨어 설계가 어려워 집니다.
이 부분은 여전해서, 최근 애플 M1과 인텔, AMD CPU에서도 확인할 수가 있습니다.
RISC계열의 M1의 경우 상대적으로 명령어를 해독할 디코더를 많이 늘릴 수 있지만, X86-64 진영은 추가로 디코더를 늘리는데 어려움을 겪고 있습니다.
Apple M1칩은 왜 그렇게 빠를까? - 컴퓨터 / 하드웨어 - 기글하드웨어 (gigglehd.com)
하지만 다양한 명령어를 준비해야 하는 CISC의 약점은 어느정도 극복 된 상태입니다.
그중 하나가 명령어 -> 마이크로 명령어로의 분해 입니다.
CISC의 경우 컴파일러 단 에서는 여전히 RISC처럼 작은 단위 명령어로 쪼개지는 않지만, 복잡한 명령어가 하드웨어에서 마이크로 명령어로 쪼개집니다.
덕분에 쪼개진 명령어는 RISC정도로 작은 단위의 명령어가 되고, 이런 작은 다위의 명령어를 수행하기 위한 CPU의 구현은 상대적으로 복잡도가 내려가게 됩니다.
이때 CISC의 명렁어 분해는 하드웨어단에서 실행되기 때문에 어쎔블러를 통해서는 확인하지는 못한다고 알려져 있습니다.
'컴퓨터과학 > CPU' 카테고리의 다른 글
명령어 파이프라인(1편) (0) | 2022.06.03 |
---|---|
CPU동작(BackEnd) (0) | 2022.06.02 |
CPU동작(FrontEnd) (0) | 2022.05.12 |
CPU의 성능 지표(CPI, IPC, Clock...) (0) | 2022.05.11 |
가상메모리 (0) | 2022.05.10 |
- Total
- Today
- Yesterday
- 자료구조
- prime number
- 알고리즘
- 이분탐색
- git
- Sort알고리즘
- 병렬처리
- hash
- GDC
- Greedy알고리즘
- 동적계획법
- Python
- 완전탐색 알고리즘
- SIMD
- stack
- 컴퓨터그래픽스
- heap
- 코딩테스트
- AVX
- C++
- 분할정복
- 프로그래머스
- 사칙연산
- Search알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |