메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

멀티프로세서 프로그래밍: The Art of Multiprocessor Programming

  • 저자 : 모리스 헐리히 , 니르 샤비트
  • 번역 : 김진욱 , 하재승
  • 출간 : 2009-07-14
  • 페이지 : 668 쪽
  • ISBN : 9788979146820
  • 물류코드 :1682
TAG :
초급 초중급 중급 중고급 고급
4점 (1명)
좋아요 : 19

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

컴퓨터 산업은 속도 경쟁을 포기했고, 단일코어에서 다중코어 경쟁으로 돌아섰다. 이런 변화는 프로그래밍 방법에 근본적인 변화를 가져왔다. 이제 하드웨어를 업그레이드하면 프로그램이 빨라지던 시대는 끝났다. 다중코어를 활용하지 못하면 프로그램은 더 빨라지지 않는다. 지금까지 단일코어 중심으로 해왔던 프로그래밍이 아닌 다중코어 중심으로 프로그래밍해야 한다. 프로세서 간에는 어떻게 통신해야 하는지, 다중코어는 어떻게 동기화해야 하는지와 같은 다양한 문제가 남아 있다.

다중코어 환경에서 프로그램을 어떻게 작성해야 하고, 위와 같은 문제를 어떻게 해결해야 하는지, 자료 구조는 어떻게 디자인해야 하는지 명확하게 밝힌 첫 번째 책이다. 이 책을 통해 독자는 지금까지 문제 해결을 위해 동료나 선배들에게 물어서 알아낸 트릭이나 지루한 시행착오를 없애고 올바르게 다중코어 프로그램을 작성하는 데 필요한 원칙과 도구를 학습하게 된다.

  • 여러 스레드가 공유 메모리에 접근하는 프로그래밍의 기초를 차근차근 학습한다.
  • 현대 다중 프로세서가 어떻게 병행 프로그래밍을 지원하는지 자세히 설명한다.
  • 현재 가장 주류인 자료 구조들을 자세히 살펴보며 각각의 핵심 디자인을 알아본다.
  • 잠금에서부터 최첨단의 트랜잭션 메모리 시스템에 이르기까지의 동기화 기술을 완벽하고 면밀하게 설명한다.
  • Java Concurrency 패키지를 사용한 완전히 동작하는 자바 예제를 제공한다.
  • 부록으로 하드웨어와 다른 프로그래밍 언어나 패키지를 사용한 프로그래밍에 관한 배경 자료를 제공한다. C#이나 Pthreads 라이브러리를 사용한 C, C++에 대한 내용을 포함한다.
저자

모리스 헐리히

모리스 헐리히(Maurice Herlihy)는 하버드 대학에서 수학사를 받았으며 M.I.T에서 전산학 박사학위를 받았다. 헐리히는 카네기 멜론 대학 교수진의 일원으로 DEC 케임브릿지 연구실에서 근무하며 현재 브라운 대학의 컴퓨터 과학부 교수다. 모리스 헐리히는 ACM 명예 회원이며, 2003년 분산 컴퓨팅에 관한 다익스트라 상을 받았다.

저자

니르 샤비트

니르 샤비트(Nir Shavit)은 테크니온에서 컴퓨터 공학사 및 석사 학위를 받았으며 히브리 대학(Hebrew Univ.)에서 컴퓨터 공학 박사 학위를 받았다. 1999년부터 수년간 M.I.T에 방문 교수로 머물렀으며, 그동안 썬 연구실의 기술진으로 일했다. 샤비트는 1992년부터 텔아비브 대학의 전산학 교수로 있다. 저자들은 공동으로 2004년 ACM/EATCS 괴델 상을 받았으며 합쳐서 40년 이상 병행 프로그래밍을 가르쳐왔다.

역자

김진욱

서울대학교 컴퓨터공학부와 대학원을 졸업했다. 현재 병역특례 중으로 하고 싶었던 게임 만들기의 길에 들어서서 NCSoft에 입사하여 서버 프로그래밍을 하고 있다. 새로운 프로그래밍 언어와 테스팅에 관심이 많다. http://rein.upnl.org/에서 프로그래밍과 책에 관한 블로그를 운영하고 있다.

역자

하재승

서울대학교 컴퓨터공학부를 다니다 병역 특례로 NEXON에서 일하면서 BigShot!을 개발했다. 지금은 학교로 다시 돌아와 졸업을 준비 중이다. 세계 대학생 프로그래밍 경시대회 결선(ACM ICPC World Final)에 서울대 대표로 참가한 적이 있다.

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 연습문제 
참고문헌 
찾아보기

  • 학교를 다닐 때 친구가 한 말이 있다.
    "우리 학교가 왜 좋은 학교인가 - 그건 "저자 직강" 이 많기 때문이다."

    이 책의 저자 (모리스 헐리히, 니르 샤비트) 들에 대해 잘 몰랐지만, 챕터의 끝 마다 있는 "일러두기"를 볼 때 마다 이 사람들이 책에서 설명하고 있는 바로 이 알고리즘을 발견한 사람들이구나 하는 감탄을 반복하게 된다.

    물론 이 책에서 이야기 하는 선형화 가능 시점을 찾아내어 증명하고, 무잠금 알고리즘을 적용하는 것이 산업 현장에서 바로 적용하는 건 쉽지 않다. 왜냐면 이러한 무잠금 알고리즘은

    1. 닥치고 synchronize 인 Coarse-grained 잠금 보다 이해하기 어려워 적용하기 쉽지 않고
    2. 따라서 향후 유지보수가 쉽지 않으며
    3. 환경 ( H/W support 여부, Application algorithm, 경쟁상황의 빈도) 에 따라 그 결과치가 매우 다를 수 있으므로

    쉽게 복잡한 타이밍 기반 기술로 생각되기 쉽다.
    하지만, 이미 해당 이론을 적용한 결과(java.util.concurrent.*) 들이 널리 쓰이고 있으니, 더이상 실용성 없는 이론가들의 이상세계에 대한 넋두리라고 치부할 일은 아니다.
    그동안 Middleware 를 만드는 일을 해 왔으면서도 바쁘다는 핑게로 기반 이론에 대한 이해와 발전 상황에 대해 지나치게 피동적이고 방어적으로 행동하지 않았는가 라는 반성을 하게 된다.

    자 이제 번역서의 질에 대해 듣기싫은 이야기를 좀 해야 되겠다.
    일단 지금까지 읽은 부분에 대해 리스트업을 좀 하면

    1. p53 무기아 상태와 무교착 상태에 대해 거꾸로 설명한다.
    2. p54 오기가 있다. j = 1-i
    3. p78 최대 n-1 개의 DOWN 과 DOWN <- RIGHT 의 오기
    4. p249 클래스는 모니터가 클래스가 <- 중복
    5. p288 각 노드에 Boolean 인 marked 필드를 추가하려 (추가하여 의 오기)
    6. p298 만약 currA 의 키가 a 의 키와 갔다면 (어딜 가?)
    7. p342 EliminationArray 를 사용하여 Stack 를 만들었는데 전체적으로 선형화 되지는 않으므로 (push/pop 이 성공한 경우와 실패한 경우 선형화 시점이 다르다) 선입 선출이 깨진 것이 아닌지. 그렇다면 이걸 Stack 이라고 부를 수 있을까?
    8. p354 그림 12.6 결합 전단계 는 12.3 의 오기인듯
    9. p369 Balancer.traverse() 는 인자가 없다고 해 놓고선 public synchronized int traverse(t) -> 응?
    10. p367 입력 수열이 계단 속성을 지닌다. - 수열의 계단 속성에 대해서는 설명한 바 없음 -> 원서에도 이모양일까?
    11. p369 half[] 는 width 의 반인 Merger 객체의 2차원 배열이다 -> element 가 2개인 1차원 배열이던데?
    12. p409 크기를 변강?하는 중에는
    13. p415 비트를 뒤집다 -> 일반적으로 1->0, 0->1 로 하는 걸 비트를 뒤집다 라고 표현하지 않는가?
    14. p438 이런 종류의 성능을 무작위화 없이 만들어낼 방법을 -> 은 의 오기?

    헥헥.
    아... 너무 읽기 힘들어요...
    2판에는 신경 좀 써 주세요.

결재하기
• 문화비 소득공제 가능
• 배송료 : 0원배송료란?

배송료 안내

  • 책, 아이템 등 상품을 3만원 이상 구매시 무료배송
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
멀티프로세서 프로그래밍: The Art of Multiprocessor Programming
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
멀티프로세서 프로그래밍: The Art of Multiprocessor Programming
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
멀티프로세서 프로그래밍: The Art of Multiprocessor Programming
구입처*
구입일*
부가기호*
부가기호 안내

* 회원가입후 도서인증을 하시면 마일리지 500점을 드립니다.

* 한빛 웹사이트에서 구입한 도서는 자동 인증됩니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한됩니다.

* 절판도서, eBook 등 일부 도서는 도서인증이 제한됩니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실