인텔 스레딩 빌딩 블록

멀티코어 프로세서 병렬처리를 위한 C++ 기술

제임스 레인더스 저 / 이창재 역

이 책은 인텔 스레딩 빌딩 블록인 TBB를 사용하여 멀티코어 프로세서의 효용성을 극대화할 수 있는 방법을 알려주고 있다. TBB는 윈도우, 리눅스, 매킨토시 및 유닉스 시스템에서 동작할 수 있는 이식성이 좋은 C++ 라이브러리로, 이 책을 통해 스레딩 전문 지식이 없이도 병렬 프로그래밍을 할 때 TBB를 효과적으로 사용하는 방법을 배울 수 있다. 저자는 인텔 소프트웨어 제품 팀의 책임자로, 인텔의 개발자와 고객들에 대한 경험을 기초로 내용을 기술하였다. 


도서 상세

분야: [프로그래밍 언어]

출간일: Nov 20, 2009

페이지: 432

도서정가: 24,000 원

ISBN: 9788993827118

부가 정보


출판사 서평


인텔 소프트웨어 제품 팀의 책임자인 제임스 레인더스는 인텔의 개발자와 고객들에 대한 경험을 기초로 이 책을 저술했는데, 멀티스레딩에 대한 핵심 작업들을 설명하며 TBB를 사용하여 이식성이 뛰어나고 튼튼한 구조를 가진 애플리케이션을 작성하는 방법을 알려준다. 또한 이 책은 풍부한 예제들과 참고 정보들을 통해 TBB에 대한 공통적인 사용 패턴들과 노하우를 제공하며, 최고의 성능을 얻기 위한 여러 기술들 중에서 적합한 기술을 선택할 수 있는 확실한 가이드라인을 제공한다.

다음은 이 책에서 다루는 주요 내용이다.
* 멀티코어 시스템에서 병렬 처리를 하기 위한 쉽고 효율적인 방법
* 병렬 프로그램을 작성할 때 주요 고려 사항
* 멀티스레딩에 대한 공통적인 패턴
* 효율적인 처리를 위한 스레드 안전성이 있는 컨테이너
* 태스크 스케줄링
* 스레드 처리된 환경에서 메모리 관리 방법


인텔 스레딩 빌딩 블록은 C++에서 병렬 처리를 할 때 TBB를 사용함으로써 원초적인 스레드를 사용하는 것보다 훨씬 더 편리하면서도 성능, 이식성 및 조정성을 향상시킬 수 있는 방법을 제공해 준다. 여러분이 TBB 사용을 시작하는 데 있어서 병렬 프로그래밍 또는 멀티코어 프로세서를 사용해본 경험은 필요하지 않다. 멀티코어 시스템에서 실행되는 프로그램을 작성하고자 하는 C++ 프로그래머라면 누구나 이 책을 통해 큰 도움을 받을 것이라고 믿는다.

저자 소개

제임스 레인더스 : 제임스 레인더스는 1989년에 인텔사에 입사하였고 현재 인텔 소프트웨어 제품 개발팀장으로 일하고 있다. 그는 프로세서 아키텍처, 컴파일러 최적화, 병렬 컴퓨터 아키텍처 및 소프트웨어 제품 개발에 많은 경험을 가지고 있으며, 세계적인 TeraFLOP 슈퍼컴퓨터(ASCI Red)와 iWarp, 펜티엄 프로, 펜티엄 2, 이태늄 및 펜티엄 4 프로세서를 위한 컴파일러와 아키텍처를 포함한 많은 프로젝트에 공헌했다. 또한 레인더스는 www.goparallel.com에서 월간 ‘The Gauntlet’의 칼럼리스트로 활동하고 있고, 인텔에서 출판한 VTune Performance Analyzer Essentials라는 책의 저자이며, Multi-Core Programming라는 책이 나오기까지 큰 공헌을 하였다.


역자 소개

이창재 : 이창재는 MCSE, MCDBA, ICDL 등의 자격을 보유하고 있다. 액세스 개발 전문가로 '할 수 있다 액세스 2003(영진)’, ‘액세스 2007(성안당)’ 을 출간하여 액세스 분야 판매1위를 기록하였고, ‘VC++2008, 코더에서 개발자로,C++완벽해설서’ 등을 (주)사이텍미디어에서 번역/출간하였다. VC, VB 개발에서 경력 10년차의 개발자이며, 공정 데이터 통계처리, 반도체장비 제어 분야에서 근무하고 있다.


1. 왜 스레딩 빌딩 블록인가?
개요
어떤 이점이 있는가?

2. 병렬적 사고방식
병렬적 사고 요소
분해
조정성 및 속도 증가
스레드란 무엇인가?
상호 배제와 잠금
정확성
추상화
패턴
직관력

3. 기본 알고리즘
라이브러리 초기화 및 종료
루프 병렬화
재귀적 범위 명세
루프에 대한 요약

4. 고급 알고리즘
스트림에 대한 병렬 알고리즘

5. 컨테이너
concurrent_queue
concurrent_vector
concurrent_hash_map

6. 조정성이 있는 메모리 할당
한계 사항
메모리 할당 작업 시 발생하는 문제
메모리 할당자
malloc, new 및 delete 대체하기

7. 상호 배제
상호 배제를 사용할 때
뮤텍스
뮤텍스
원자적 연산

8. 타이밍

9. 태스크 스케줄러
태스크 기반의 프로그래밍이 적합하지 않을 때
원초적 스레드보다 나은 방식
라이브러리를 초기화하는 것은 여러분의 할 일
피보나치 숫자에 대한 예제
태스크 스케줄링 개요
태스크 스케줄링 동작 원리
권장되는 태스크 반복 패턴
스케줄러를 가장 잘 사용하는 방법
태스크 스케줄러 인터페이스
태스크 스케줄러 요약

10. 성공을 위한 핵심 사항
성공을 위한 핵심 단계
느슨한 순차적 실행(Relaxed Sequential Execution)
메서드와 라이브러리에 대한 안전한 동시성
디버그 대. 릴리즈
효율성을 위하여
디버깅 기능 사용하기
다른 스레딩 패키지와 혼용
명명 규칙

11. 예제
아하! 요인
몇 가지 다른 핵심 사항들
parallel_for 예제들
인생게임
parallel_reduce 예제들
CountStrings: concurrent_hash_map 사용하기
퀵 정렬: 태스크 스틸링 시각화하기
더 나은 행렬 곱셈 (Strassen)
고급 태스크 프로그래밍
패킷 처리 파이프라인
메모리 할당
게임 스레딩 예제
물리적 상호작용 및 업데이트 코드
ODE(Open Dynamics Engine)

12. 역사와 관련 프로젝트들
라이브러리
언어
프라그마
제네릭 프로그래밍
캐시
시간 분할에 대한 비용
람다 함수에 대한 간략한 소개
참고 문헌