티스토리 뷰
본 포스팅은 "프로그래머가 몰랐던 멀티코어 CPU 이야기" 를 읽고 주인장의 생각을 정리한 게시글 입니다.
책정보, 프로그래머가 몰랐던 멀티코어 CPU 이야기 : 네이버 책 (naver.com)
1. 피연산자 인출(Operand Fetch).
명령어는 이제 준비가 되었습니다. 그럼 이제 이 명령어에서 필요한 Data를 가지고 오는 시간입니다.
Fetch에서 알 수 있든, 단순하게 연산에 필요한 Data를 가지고 오는 단계입니다.
아래는 피연산자의 예시들 입니다.
//메모리 주소로 피연산자 지정
ld r0, [sp+8]
//레지스터에 상수 지정
add r1, r0, 10
st [sp+4], r1
jz r1, 100
상수의 경우 메모리 해독과정에서 이미 2진수 형태로 값을 알고 있습니다.
때문에 따로 메모리를 읽을 필요 없이 바로 read, write가 가능하며 이때문에 immediate라고 부릅니다.
메모리 주소형태로 있는 경우 해당 메모리 주소에 가서 값을 읽어온 다음, 상수랑 같은 방식으로 처리가 가능합니다.
이때 해당 주소를 계산하는 작업을 고속화 하기 위해서 AGU(Address Generation Unit)을 대부분의 CPU가 가지고 있습니다.
이때 이 주소또한 가상화된 주소기 때문에, 실제 주소와 Matching시켜줄 DTLB(Data TLB)를 사용합니다.
2. 명령어 실행(Instruction Execution).
이제 명령어도 준비되었고, 피연산자도 준비 되었습니다. 그러면 이제 이 명령어를 실행하는 단계 입니다.
일반적으로 CPU 내부에서 ALU라고 불리는 곳에서
2_1. 더하기, 빼기와 같은 산술연산
2_2. 분기문
2_3. 시프트 연산
2_4. SIMD 연산
등이 이뤄집니다.
2010년에 나온 네할렘 프로세시의 경우 아래 10개의 종류의 명령어가 존재
1. 정수 ALU 및 시프트 연산
2. 정수 ALU 및 주소 계산
3. 복잡한 정수 계산
4. 나눗셈
5. 분기문
6. SSE 정수 명령어
7. SSE 정수 곱셈
8. 부동소수점 덧셈
9. 부동소수점 셔플
10. 부동소수점 곱셈
이 단계에서는 특별할 것은 없지만, 이 단계에서 실행된 결과를 바탕으로 UpdatePC()가 이뤄지게 됩니다.
3. 결과 저장(Write Back/Operand Store).
명령어 실행 후, 반환된 값을 명령어에 지정된 피연산자에 저장하는 단계 입니다
수리연산의 결과라면 메모리에 저장되고, 분기문의 결과라면 PC의 값이 변하게 될 것입니다.
특별한 내용은 없다고 할 수 있습니다.
'컴퓨터과학 > CPU' 카테고리의 다른 글
명령어 파이프라인(2편) (0) | 2022.06.29 |
---|---|
명령어 파이프라인(1편) (0) | 2022.06.03 |
CPU동작(FrontEnd) (0) | 2022.05.12 |
CPU의 성능 지표(CPI, IPC, Clock...) (0) | 2022.05.11 |
가상메모리 (0) | 2022.05.10 |
- Total
- Today
- Yesterday
- 병렬처리
- 완전탐색 알고리즘
- Greedy알고리즘
- heap
- git
- 사칙연산
- SIMD
- 알고리즘
- Python
- 프로그래머스
- AVX
- stack
- 자료구조
- hash
- 이분탐색
- prime number
- Search알고리즘
- Sort알고리즘
- GDC
- 컴퓨터그래픽스
- 코딩테스트
- C++
- 분할정복
- 동적계획법
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |