입문자를 위한 병렬 프로그래밍
도서명:입문자를 위한 병렬 프로그래밍
저자/출판사:피터,파체코/제이펍
쪽수:512쪽
출판일:2015-02-26
ISBN:9791185890159
목차
CHAPTER 1 왜 병렬 컴퓨팅인가?
1.1 성능 증가의 필요성 2
1.2 병렬 시스템을 구축해야 하는 이유 3
1.3 병렬화 프로그래밍이 필요한 이유 4
1.4 병렬화 프로그램을 작성하는 방법 8
1.5 배울 내용 11
1.6 병행, 병렬, 분산 13
1.7 책의 구성 14
1.8 당부의 말 14
1.9 이 책의 표기 방법 15
1.10 요약 16
1.11 연습문제 17
CHAPTER 2 병렬 하드웨어와 병렬 소프트웨어
2.1****간의 배경 지식 22
2.1.1 폰 노이만 아키텍처 22
2.1.2 프로세스, 멀티태스킹, 그리고 스레드 24
2.2 폰 노이만 모델의 수정 26
2.2.1 캐시의 기본 개념 26
2.2.2 캐시 매핑 29
2.2.3 캐시와 프로그램: 예제 30
2.2.4 가상 메모리 32
2.2.5 명령어 레벨 병렬화 35
2.2.6 하드웨어 멀티스레딩 39
2.3 병렬 하드웨어 40
2.3.1 SIMD 시스템 40
2.3.2 MIMD 시스템 44
2.3.3 인터커넥션 네트워크 48
2.3.4 캐시 일관성 57
2.3.5 공유 메모리와 분산 메모리 61
2.4 병렬 소프트웨어 62
2.4.1 경고 63
2.4.2 프로세스/스레드의 조정 63
2.4.3 공유 메모리 65
2.4.4 분산 메모리 71
2.4.5 하이브리드 시스템 프로그래밍 75
2.5 입력과 출력 76
2.6 성능 78
2.6.1 스피드업과 효율성 78
2.6.2 암달의 법칙 81
2.6.3 확장성 83
2.6.4 타이밍 84
2.7 병렬 프로그램 디자인 88
2.7.1 예제 89
2.8 병렬 프로그램의 작성과 실행 94
2.9 가정 94
2.10 요약 96
2.10.1 시리얼 시스템 96
2.10.2 병렬 하드웨어 98
2.10.3 병렬 소프트웨어 100
2.10.4 입력과 출력 102
2.10.5 성능 102
2.10.6 병렬 프로그램 설계 103
2.10.7 가정 104
2.11 연습문제 104
CHAPTER 3 MPI를 이용한 분산 메모리 프로그래밍
3.1 시작하기 112
3.1.1 컴파일과 실행 113
3.1.2 MPI 프로그램 115
3.1.3 MPI_Init과 MPI_Finalize 116
3.1.4 커뮤니케이터, MPI_Comm_size와 MPI_Comm_rank 117
3.1.5 SPMD 프로그램 117
3.1.6 통신 118
3.1.7 MPI_Send 118
3.1.8 MPI_Recv 121
3.1.9 메시지 매칭 121
3.1.10 status_p 인수 123
3.1.11 MPI_Send와 MPI_Recv의 동작 의미 124
3.1.12****간의 심각한 문제 126
3.2 MPI를 사용한 사다리꼴 규칙 126
3.2.1 사다리꼴 규칙 126
3.2.2 사다리꼴 규칙의 병렬화 128
3.3 I/O의 처리 131
3.3.1 출력 132
3.3.2 입력 133
3.4 컬렉티브 통신 135
3.4.1 트리 구조 통신 135
3.4.2 MPI_Reduce 137
3.4.3 컬렉티브 통신 대 일대일 통신 139
3.4.4 MPI_Allreduce 141
3.4.5 브로드캐스트 141
3.4.6 데이터 분산 144
3.4.7 스캐터 146
3.4.8 게더 148
3.4.9 Allgather 150
3.5 MPI 파생 데이터 타입 153
3.6 프로그램의 성능 평가 157
3.6.1 수행 시간 159
3.6.2 결과 162
3.6.3 속도 향상과 효율성 165
3.6.4 확장성 166
3.7 병렬 정렬 알고리즘 167
3.7.1 간단한 시리얼 정렬 알고리즘 168
3.7.2 병렬 홀수-짝수 변환 정렬 170
3.7.3 MPI 프로그램에서 세이프티 173
3.7.4 병렬 홀수-짝수 정렬의 마지막 설명 177
3.8 요약 179
3.9 연습문제 185
3.10 프로그래밍 문제 194
CHAPTER 4 Pthreads를 이용한 공유 메모리 프로그래밍
4.1 프로세스, 스레드, 그리고 pthreads 200
4.2 HELLO, WORLD 202
4.2.1 실행 202
4.2.2 준비 204
4.2.3 스레드의 시작 206
4.2.4 스레드의 실행 208
4.2.5 스레드의 중지 209
4.2.6 에러 체킹 210
4.2.7 스레드의 시작에 대한 다른 접근 210
4.3 매트릭스-벡터 곱셈 211
4.4 크리티컬 섹션 214
4.5 비지-웨이팅 218
4.6 뮤텍스 222
4.7 프로듀서-컨슈머 동기화와 세마포어 227
4.8 배리어와 조건 변수 232
4.8.1 비지-웨이팅과 뮤텍스 233
4.8.2 세마포어 234
4.8.3 조건 변수 236
4.8.4 Pthreads 배리어 239
4.9 읽기-쓰기 잠금 239
4.9.1 링크드 리스트 함수 239
4.9.2 멀티스레드 링크드 리스트 242
4.9.3 Pthreads 읽기-쓰기 잠금 246
4.9.4 여러 가지 구현에 대한 성능 247
4.9.5 읽기-쓰기 잠금의 구현 249
4.10 캐시, 캐시 일관성, 그리고 거짓 공유 250
4.11 스레드 세이프티 257
4.11.1 올바르지 않은 프로그램이 올바른 출력을 낼 수 있다 260
4.12 요약 261
4.13 연습문제 264
4.14 프로그램 문제 272
CHAPTER 5 OpenMP를 사용한 공유 메모리 프로그래밍
5.1 시작 277
5.1.1 OpenMP 프로그램의 컴파일과 실행 방법 278
5.1.2 프로그램 279
5.1.3 오류 체크 283
5.2 사다리꼴 규칙 284
5.2.1 첫 번째 openMP 버전 285
5.3 변수의 범위 290
5.4 감소 클라우즈 291
5.5 parallel for 디렉티브 295
5.5.1 주의 사항 297
5.5.2 데이터 의존성 298
5.5.3 루프에 의한 의존성 찾기 300
5.5.4 의 계산 301
5.5.5 변수 범위 304
5.6 OpenMP에서 루프의 다른 예제: 정렬 305
5.6.1 버블 정렬 305
5.6.2 홀수-짝수 변환 정렬 307
5.7 루프 스케줄 310
5.7.1 schedule 클라우즈 312
5.7.2 static 스케줄 타입 313
5.7.3 dynamic과 guided 스케줄 타입 314
5.7.4 runtime 스케줄 타입 315
5.7.5 어떤 스케줄을 사용해야 할까? 316
5.8 프로듀서와 컨슈머 317
5.8.1 큐 317
5.8.2 메시지 패싱 318
5.8.3 메시지 전송 319
5.8.4 메시지 수신 319
5.8.5 종료 검출 320
5.8.6 시작 321
5.8.7 atomic 디렉티브 322
5.8.8 크리티컬 섹션과 잠금 323
5.8.9 메시지 패싱 프로그램에서 잠금의 사용 326
5.8.10 critical 디렉티브, atomic 디렉티브, 혹은 잠금? 327
5.8.11 몇 가지의 문제점 328
5.9 캐시, 캐시 일관성, 거짓 공유 330
5.10 스레드 세이프티 337
5.10.1 올바르지 않은 프로그램이 정상적인 결과를 만들어 낼 수도 있다 340
5.11 정리 341
5.12 연습문제 346
5.13 프로그래밍 문제 352
CHAPTER 6 병렬 프로그램 개발
6.1 두 개의 n-body 솔루션 357
6.1.1 문제 358
6.1.2 두 개의 시리얼 프로그램 359
6.1.3 솔루션의 병렬화 365
6.1.4 I/O 369
6.1.5 OpenMP를 사용한 기본 솔루션의 병렬화 370
6.1.6 OpenMP를 사용한 리듀스 솔루션의 병렬화 373
6.1.7 OpenMP 코드의 평가 378
6.1.8 Pthreads를 사용한 솔루션의 병렬화 380
6.1.9 MPI를 사용한 기본 솔루션의 병렬화 381
6.1.10 MPI를 사용한 리듀스 솔루션의 병렬화 384
6.1.11 MPI 솔루션의 성능 391
6.2 트리 검색 393
6.2.1 재귀적 깊이-우선 검색 396
6.2.2 비재귀적 깊이-우선 검색 397
6.2.3 시리얼 구현을 위한 자료 구조 400
6.2.4 시리얼 구현의 성능 402
6.2.5 트리 검색의 병렬화 402
6.2.6 pthreads를 사용한 트리 검색의 정적 병렬화 405
6.2.7 pthreads를 사용한 트리 검색의 동적 병렬화 408
6.2.8 Pthreads 트리-검색 프로그램의 평가 413
6.2.9 OpenMP를 사용한 트리-검색 프로그램의 병렬화 414
6.2.10 OpenMP 구현의 성능 418
6.2.11 MPI와 정적 파티셔닝을 사용한 트리 검색의 구현 419
6.2.12 MPI와 동적 파티셔닝을 사용한 트리 검색의 구현 429
6.3 조언 440
6.4 어떤 API가 최선인가? 440
6.5 요약 441
6.5.1 Pthreads와 OpenMP 443
6.5.2 MPI 444
6.6 연습문제 448
6.7 프로그래밍 연습 461
CHAPTER 7 그 다음에 해야 할 일
참고문헌 469
찾아보기 473