목차 일부
저자 서문 ... 4
Story 01 프로그래머가 프로세서도 알아야 해요?
들어가며 ... 15
고달픈 프로그래머 ... 16
누구를 위해 이 책을 썼는가? ... 21
참고문헌 ... 22
Story 02 프로세서의 언어 : 명령어 집합 구조
들어가며 ... 23
프로그래머가 보는 프로세서 ... 24
프로세서의 언어...
더보기
목차 전체
저자 서문 ... 4
Story 01 프로그래머가 프로세서도 알아야 해요?
들어가며 ... 15
고달픈 프로그래머 ... 16
누구를 위해 이 책을 썼는가? ... 21
참고문헌 ... 22
Story 02 프로세서의 언어 : 명령어 집합 구조
들어가며 ... 23
프로그래머가 보는 프로세서 ... 24
프로세서의 언어 : 명령어 집합 구조 ... 27
RISC와 CISC로 알아보는 명령어 집합 구조 ... 30
간단한 코드로 보는 RISC와 CISC의 차이 ... 35
아직도 RISC vs. CISC ? ... 39
결론 ... 41
참고문헌 ... 42
Story 03 프로세서의 기본 부품과 개념들
들어가며 ... 43
마이크로아키텍처란? ... 43
산술 논리 장치 : 프로세서 속의 계산기 ... 45
클록, 1사이클이 가지는 의미 ... 50
메모리 계층 ... 51
컨트롤 장치 ... 55
프로세스와 스레드 ... 55
가상 메모리 ... 56
결론 ... 61
참고문헌 ... 61
Story 04 암달의 법칙과 프로세서의 성능 지표
들어가며 ... 62
암달의 법칙 ... 62
병렬 처리에서의 암달의 법칙 ... 64
프로그램의 수행 시간 ... 67
성능 향상을 위해 해야 할 일 ... 70
결론 ... 74
참고문헌 ... 74
Story 05 프로그램의 의미를 결정 짓는 의존성
들어가며 ... 75
데이터 의존성 ... 75
컨트롤 의존성 ... 78
메모리 의존성 ... 79
루프에서의 데이터 의존성 ... 82
결론 ... 85
Story 06 프로세서 기본 동작
들어가며 ... 86
명령어 처리의 기본적인 다섯 단계 ... 86
명령어 인출 ... 89
명령어 해독 ... 92
피연산자 인출 ... 95
명령어 실행 단계 ... 97
연산 결과 저장 ... 98
예외 처리 ... 99
결론 ... 101
참고문헌 ... 102
Story 07 고성능 프로세서의 시작 : 명령어 파이프라인
들어가며 ... 103
파이프라인의 기본 개념 ... 103
파이프라인의 효율적인 설계 ... 106
파이프라인 프로세서의 구현 ... 110
파이프라인 해저드 ... 114
파이프라인 : 소프트웨어 병렬화의 한 가지 방법 ... 122
결론 ... 127
참고문헌 ... 128
Story 08 또 하나의 혁명 : 비순차 실행
들어가며 ... 129
비순차 슈퍼스칼라 프로세서가 필요한 이유 ... 129
비순차 실행의 원리 : 명령어 수준 병렬성 ... 132
슈퍼스칼라 파이프라인 구조 ... 135
비순차 실행의 구현 : 토마슐로 알고리즘 ... 137
비순차 프로세서 파이프라인 ... 148
결론 ... 150
참고문헌 ... 151
Story 09 하이퍼스레딩 : 병렬성의 극대화
들어가며 ... 152
하이퍼스레딩이 뭐야? ... 152
동시 멀티스레딩의 구현과 성능 ... 159
결론 ... 164
참고문헌 ... 165
Story 10 멀티코어 혁명 : 칩 멀티프로세서
들어가며 ... 166
멀티코어 시대 ... 166
싱글코어의 한계 : 에너지 장벽 ... 170
싱글코어의 한계 : ILP의 한계 ... 174
병렬 컴퓨터의 개념 ... 176
병렬 컴퓨터 구조 ... 179
멀티코어의 구성 방식 ... 183
멀티코어의 한계 : 메모리 장벽과 병렬 프로그래밍 ... 185
여전히 중요한 싱글코어 성능 ... 188
결론 ... 189
참고문헌 ... 189
Story 11 데이터 병렬성 : SIMD와 GPU
들어가며 ... 191
데이터 병렬성 ... 191
GPU : 또 하나의 병렬 프로세서 ... 194
CUDA 프로그래밍 모델 : 스레드와 메모리 모델 ... 199
CUDA 프로그래밍의 예 : 행렬 곱셈 ... 205
nVidia GPU의 자세한 스레드 실행 구조 : 워프(Warp) ... 210
결론 ... 213
참고문헌 ... 214
Story 12 고성능 프로세서의 필수 조건 : 똑똑한 캐시
들어가며 ... 215
왜 캐시가 필요하고 잘 작동할 수 있을까? ... 216
일반적인 캐시 구조 ... 218
CPU 캐시의 기본적인 설계 ... 220
고성능 캐시를 위한 알고리즘 ... 230
멀티코어에서의 캐시 ... 234
결론 ... 240
참고문헌 ... 241
Story 13 if 문은 그냥 실행되는 것이 아니다
들어가며 ... 242
분기문 명령어와 프로그래밍 언어 ... 242
분기 예측이 필요한 이유 ... 245
분기 예측에 기반한 투기적 실행 ... 248
기본적인 분기 예측 방법 ... 250
더 똑똑한 과거 기반의 미래 예측 ... 256
히스토리를 이용한 분기 예측 ... 259
프리디케이션 ... 263
결론 ... 265
참고문헌 ... 265
Story 14 가상 함수에 담긴 복잡함
들어가며 ... 266
분기 목적지 예측 ... 266
간접 분기문의 분기 목적지 예측 ... 269
결론 ... 278
참고문헌 ... 279
Story 15 효율적인 메모리 명령 실행 알고리즘
들어가며 ... 280
효율적인 메모리 연산의 실행 ... 280
컴파일러 최적화의 장애물 : 포인터 ... 288
결론 ... 292
참고문헌 ... 293
Story 16 메모리 레이턴시 감추기 : 프리펫처
들어가며 ... 294
필요한 데이터를 미리 잘 가져오자 ... 294
기본적인 소프트웨어 프리펫칭 ... 297
포인터 기반 자료구조의 소프트웨어 프리펫칭 ... 302
하드웨어 프리펫칭 알고리즘 ... 309
결론 ... 317
참고문헌 ... 317
Story 17 VLIW로 살펴보는 두 변수 교환 방법
들어가며 ... 319
VLIW의 철학 ... 319
두 변수를 교환하는 방법에 대한 고찰 ... 324
결론 ... 332
참고문헌 ... 332
Story 18 프로그래머의 새로운 과제 : 병렬 프로그래밍
들어가며 ... 333
병렬 프로그래밍은 선택이 아니라 필수 ... 333
기본 개념 : 원자적 실행과 동기화 연산 ... 335
멘델브로 집합으로 보는 병렬 프로그래밍 ... 341
결론 ... 356
참고문헌 ... 357
Story 19 골치 아픈 멀티스레드 버그 : 하이젠버그
들어가며 ... 358
재현이 어려운 골치 아픈 버그 ... 358
대표적인 병행성 버그 : 원자성 위반과 순서 위반 ... 366
결론 ... 375
참고문헌 ... 375
Story 20 어려운 병렬 프로그래밍, 그리고 그 미래는?
들어가며 ... 376
비효율적인 병렬 프로그래밍 : 가짜 공유 문제 ... 376
미래의 병렬 프로그래밍 방법론 ... 381
결론 ... 387
참고문헌 ... 387
찾아보기 ... 389
더보기 닫기