성능을 100% 끌어내는 멀티코어 애플리케이션 프로그래밍 - 윈도, 리눅스, 솔라리스부터 CUDA, TBB, POSIX, C++/CLI, C++11, OpenMP까지 한 번에 배운다
대릴 고브 지음, 권오인 옮김 / 한빛미디어 / 2012년 7월
평점 :
절판


초보자에게는 다소 어려운 내용입니다. 운영체제 교과목에 대한 지식도 어느정도 있어야 합니다.
C언어와 포인터를 주로 다루므로 관련 문법들은 반드시 알고 계셔야 합니다.
극히 일부분은 어셈블리어로 명령들을 설명하기는 하지만 복잡한 명령들까지 기술하지는 않으므로 굳이 모르셔도 됩니다(아주 단순합니다).
이 책은 단순히 멀티스레드 기반의 애플리케이션 구현을 위한 관련 라이브러리 함수를 활용하는 방법만을 다루지 않는다는 점입니다.
* 다루는 내용들을 대략적으로 살펴보면 다음과 같습니다...
  1단계: 애플리케이션의 실행시간을 줄이려면 어떻게 해야 할까요?
  다양한 시각을 가질 수 있도록 배경지식을 제공하고 있습니다.
  이러한 내용들을 다루면서 병렬 프로그래밍의 개념과 소스코드 단계에서 애플리케이션의 성능을 개선하기 위한 방법들을 찾아봅니다.
  병렬로 수행될 수 있는 작업영역을 찾는게 중요합니다.
  결과적으로는 컴파일러가 최적화된 실행코드를 만들 수 있도록 도와주어야 겠지요 ^^;
  2단계: 경쟁상태의 여러 개의 스레드들이 데이터를 공유하면서 발생하는 문제점들을 다룹니다.
  이를 방지하기 위한 동기화(락, 해제) 기법에는 무엇이 있는지 알아봅니다.
  프로세스 간의 메모리 공유방법과 통신방법도 다룹니다.
  3단계: UNIX 계열에서 사용할 수 있는 POSIX 스레드, MS-Windows 계열에서 사용할 수 있는 WINAPI 스레드의 활용방법을 다룹니다.
  역시나 어렵습니다.
  4단계: 추상화된 병렬처리방법은 없을까?
  #pragma omp로 시작하는 OpenMP를 다룹니다. #pragma 전처리기 지시자를 활용하네요.
  5단계: 동기화 장치를 직접 만들 수 있을까요?
* 주요특징
- 용어를 설명함에 있어서(예를들면 프로세스, 스레드, 캐시 등) 단순히 언급만 하는 것이 아니라 상세한 의미와 관련 배경지식도 같이 알려줍니다.
  개념을 설명하는 경우에는 몇개의 단계로 나누어서 한단계를 설명하고 그 다음 단계를 설명하는 방식입니다.
  비교적 알기쉬운 사례로 예를 들고 사각형만 모인 그림이지만 적절하게 구성된 그림을 첨부하여 이해를 돕습니다(그림이 좀더 상세했으면 하는 바램은 있습니다. 어렵거든요 ^^;).
- 예제 코드는 정말 짧막합니다. 정말 간단한 몇줄의 코드만 가지고 예를 들어줍니다.
  해당언어의 문법을 알고 있다면 직관적으로 어떤 연산을 하는지 알 수 있습니다.
  본문에서 다루는 내용들이 쉽지 않은 개념이어서 소스코드까지 복잡하면 이해하기 어려울 수 있는데, 간단명료하게 필요한 코드만 선정한 것 같습니다(소스코드가 너무 간결한 점에서 왠지 아쉬운 느낌까지 드네요).
  문제가 있는 소스 -> 간단하게 보완한 소스 -> 고급스럽게(!) 보완한 소스 순으로 설명하기도 합니다.
  본문에 삽입된 소스코드가 C언어로 되어 있다는게 장점이자 단점입니다.
  Java 언어로 구현된 소스코드를 다루면서 비교해 주었으면 좋겠다는 생각도 해봅니다.
  아! 그리고 예제로 첨부된 소스코드를 100% 이해하기는 쉽지가 않습니다.
  개념 이해로는 적당한것 같기는 합니다.
  중요한건 실무에 적용하려면 본인이 잘 소화를 시켜야 할 겁니다.
- 번역관련해서 문장의 흐름이 어색하지 않고 사용된 어휘의 선택도 적절한 것 같습니다(예전에 억지로 끼워맞추거나 직역한 다른 책을 보다 보면 한숨이 나올 때가 있었습니다).
  역자분의 필체도 상당히 매끄러운 느낌입니다.
  번역 시 영어로 된 용어를 한글로만 써놓으면 그 의미를 다르게 받아들일 수 있는데,
  용어인 경우 한글단어와 원문단어를 윗첨자로 표시해 놓아서 개념을 이해하는데 도움을 줍니다.
* 후기
- 실제로 프로그래밍 언어로 구현하려면 머리가 좀 아프겠지요.
  다행히도 POSIX 스레드, WINAPI 스레드로 작성된 실제코드를 접해봅니다.
  어떤 함수를 어떻게 호출하고 서로 어떤 관계가 있어서 어떻게 사용해야 하는지 설명하는 방식입니다.
  인터넷 검색으로 익히는 것보다 일련의 정리된 순서대로 책에서 배울 수 있다는게 정말 좋았던것 같습니다.
- 멀티스레드간 데이터 공유와 동기화 처리 관련하여 발생하는 문제점에 대한 여러가지 방안을 제시하고 코드로도 구현을 해보기는 합니다만,
  명쾌하지는 않은것 같네요.
  이런게 있구나 정도로 아셔도 도움은 되실 것 같습니다.
- 시스템 자원의 효율을 최대한 활용하여 병렬프로그래밍(단순히 멀티스레드 기반의 애플리케이션을 개발하는 것이 아닌)을
  하고자 하시는 분들이 참고하시면 좋은 서적일 것 같습니다.

 


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo