서브메뉴

본문

멀티프로세서 프로그래밍
멀티프로세서 프로그래밍
저자 : 모리스 헐리히
출판사 : 한빛미디어
출판년 : 2009
ISBN : 9788979146820

책소개


생각을 바꾸는 다중코어 프로그래밍

다중코어 환경에서 프로그램을 어떻게 작성해야 하고, 위와 같은 문제를 어떻게 해결해야 하는지, 자료 구조는 어떻게 디자인해야 하는지 명확하게 밝힌 책이다. 오늘날 컴퓨터 산업은 속도 경쟁을 포기했고, 단일코어에서 다중코어 경쟁으로 돌아섰다. 지금까지 단일코어 중심으로 해왔던 프로그래밍이 아니라, 다중코어 중심으로 프로그래밍을 해야 하는 것이다.

이 책은 프로세서 간에는 어떻게 통신해야 하는지, 다중코어는 어떻게 동기화해야 하는지와 같은 다양한 문제를 해결하기 위해 다중코어 프로그램을 작성하는 데 필요한 원칙과 도구를 설명하고 있다. 프로그래밍의 기초를 차근차근 익히고, 현대 다중 프로세서가 어떻게 병행 프로그래밍을 지원하는지 자세히 설명한다. 현재 가장 주류인 자료 구조들을 자세히 살펴보며, Java Concurrency 패키지를 사용한 완전히 동작하는 자바 예제를 제공한다.

목차


1장 소개
1.1 공유 객체와 동기화
1.2 우화
1.3 생산자-소비자 문제
1.4 독자-저자 문제
1.5 병렬화의 잔혹한 현실
1.6 병렬 프로그래밍
1.7 일러두기
1.8 연습문제

2장 상호 배제
2.1 시간
2.2 임계영역
2.3 2-스레드 해법
2.4 필터 잠금
2.5 공정성
2.6 램포트의 빵집 알고리즘
2.7 유한 타임스탬프
2.8 (메모리) 위치 개수에 대한 하한
2.9 일러두기
2.10 연습문제

3장 병행 객체
3.1 병행성과 정확성
3.2 순차 객체
3.3 정지 무모순성
3.4 순차 무모순성
3.5 선형화 가능성
3.6 수학적 정의
3.7 진행조건
3.8 Java 메모리 모델
3.9 주의할 것
3.10 일러두기
3.11 연습문제

4장 공유 메모리의 기초
4.1 레지스터의 공간
4.2 레지스터 만들기
4.3 원자적인 스냅샷
4.4 일러두기
4.5 연습문제

5장 동기화 연산 요소들의 상대적인 능력
5.1 합의 수
5.2 원자적인 레지스터
5.3 합의 프로토콜
5.4 FIFO 큐
5.5 다중 대입 객체
5.6 읽기-변경-쓰기 연산
5.7 Common2 RMW 연산
5.8 CAS 연산
5.9 일러두기
5.10 연습문제

6장 합의의 만능성
6.1 소개
6.2 만능성
6.3 무잠금 만능 구성
6.4 무대기 만능 구성
6.5 일러두기
6.6 연습문제

7장 스핀락과 경쟁
7.1 현실 세계에 온 것을 환영한다
7.2 test-and-set 잠금
7.3 TAS 기반의 잠금 재검토
7.4 지수적인 백오프
7.5 큐 잠금
7.6 시간제한이 있는 큐 잠금
7.7 복합 잠금
7.8 계층적 잠금
7.9 모든 상황을 처리할 수 있는 하나의 잠금
7.10 일러두기
7.11 연습문제

8장 모니터와 멈춤 동기화
8.1 소개
8.2 모니터 잠금과 조건 변수
8.3 독자-저자 잠금
8.4 직접 만든 재진입성 잠금
8.5 세마포어
8.6 일러두기
8.7 연습문제

9장 연결리스트: 잠금의 역할
9.1 소개
9.2 리스트로 만든 집합
9.3 병행 추론
9.4 성긴 동기화
9.5 세밀한 동기화
9.6 낙천적인 동기화
9.7 게으른 동기화
9.8 비멈춤 동기화
9.9 토의
9.10 일러두기
9.11 연습문제

10장 병행 큐와 ABA 문제
10.1 소개
10.2 큐
10.3 제한된 부분 큐
10.4 무제한 완전 큐
10.5 무제한 무잠금 큐
10.6 메모리 재사용과 ABA 문제
10.7 이중 자료구조
10.8 일러두기
10.9 연습문제

11장 병행 스택과 소거
11.1 소개
11.2 무제한 무잠금 스택
11.3 소거
11.4 소거 백오프 스택
11.5 일러두기
11.6 연습문제

12장 숫자 세기, 정렬 그리고 분산 협조
12.1 소개
12.2 공유된 세기
12.3 소프트웨어 결합
12.4 정지 무모순한 풀과 카운터
12.5 계산 네트워크
12.6 회절 트리
12.7 병렬 정렬
12.8 정렬 네트워크
12.9 샘플 정렬
12.10 분산 협조
12.11 일러두기
12.12 연습문제

13장 병행 해시와 자연적인 병렬성
13.1 소개
13.2 닫힌 주소법 해시 집합
13.3 무잠금 해시 집합
13.4 열린 주소법 해시 집합
13.5 일러두기
13.6 연습문제

14장 스킵리스트와 균형 잡힌 검색
14.1 소개
14.2 순차 스킵리스트
14.3 잠금 기반의 병행 스킵리스트
14.4 무잠금 병행 스킵리스트
14.5 병행 스킵리스트
14.6 일러두기
14.7 연습문제

15장 우선순위 큐
15.1 소개
15.2 배열 기반의 제한된 우선순위 큐
15.3 트리 기반의 제한된 우선순위 큐
15.4 힙 기반의 무제한 우선순위 큐
15.5 스킵리스트 기반의 무제한 우선순위 큐
15.6 일러두기
15.7 연습문제

16장 미래, 스케줄링, 그리고 작업 분배
16.1 소개
16.2 병렬성 분석
16.3 현실적인 다중프로세서 스케줄링
16.4 작업 분배
16.5 작업 훔치기 덱
16.6 일러두기
16.7 연습문제

17장 배리어
17.1 소개
17.2 배리어 구현
17.3 센스리버싱 배리어
17.4 트리 결합 배리어
17.5 정적 트리 배리어
17.6 종료 감지 배리어
17.7 일러두기
17.8 연습문제

18장 트랜잭션 메모리
18.1 소개
18.2 트랜잭션과 원자성
18.3 소프트웨어 트랜잭션 메모리
18.4 하드웨어 트랜잭션 메모리
18.5 일러두기
18.6 연습문제

부록 A 소프트웨어의 기초
A.1 소개
A.2 Java
A.3 C#
A.4 Pthreads
A.5 일러두기

부록 B 하드웨어의 기초
B.1 소개(와 수수께끼)
B.2 프로세서와 스레드
B.3 인터커넥트
B.4 메모리
B.5 캐시
B.6 캐시를 고려한 프로그래밍 또는 수수께끼는 풀렸다!
B.7 다중코어와 다중스레드 구조
B.8 하드웨어 동기화 명령
B.9 일러두기
B.10 연습문제

참고문헌
찾아보기

QuickMenu