[리뷰] 멀티코어 애플리케이션 프로그래밍

성능을 100% 끌어내는 멀티코어 애플리케이션 프로그래밍 - 한빛미디어



표지부터 뭔가 복잡함을 느끼게 해주는 이책은 역시나 내용도 어려웠습니다.

주제가 주제이니 만큼 아무리 쉽게 쓰여있다고 해도 초급자가 접근하기에는 사전지식이 필요합니다.


예제 코드들이 C로 작성되어있기 때문에 C언어에 대한 이해는 있어야 합니다. 

Visual Studio에서의 프로그래밍만 익숙한 사람이라면 Unix/Linux에서의 콘솔 명령어 설명부분이

낯설게 느껴지겠지만 그정도는 쉽게 알아차릴 수 있으니 문제될것은 없을 것입니다.


책에 나오는 예제 코드는 가독성이 아주 좋게 표현되어 있습니다. 그래서 코드를 읽으면서

짜증나는 부분도 없었고, 예제 코드들도 몇페이지씩 있지 않고 짧게 짧게 있어서 파악하기가 쉬웠습니다.


멀티코어 프로그래밍이라고 해서 OpenMP나 TBB에 관한 내용들만 있을거라 예상했는데

책에는 그보다더 근본적인 부분들부터 접근을 시작하고 있습니다.


싱글코어에서 멀티코어로 넘어가면서 생기는 여러가지 변화에 대한 설명부터

성능 최적화를 고려한 코딩, 병렬화, 동기화와 데이터 공유, POSIX 스레드, 

Window 스레드, OpenMp까지 체계적으로 아주 잘 설명해주고 있습니다. 

각 설명마다 예제 코드가 있어서 다른 책을 보면서 혼동되거나 

이해안되었던 부분들을 좀더 명확하게 이해할 수 있었습니다.


책은 기본적인 내용들의 설명으로 각 챕터들을 시작합니다.

예를 들면, 데이터 레이스가 발생하는 이유 부터 크리티컬 섹션 / 뮤텍스에 대한 

설명도 하고 윈도우에서 스레드 생성/종료와 같은 부분도 설명합니다.


이러한 기본적인 것들을 설명한 이후에 본격적으로 병렬화에서의 처리들을 이야기합니다.

병렬화 도구로 OpenMP를 사용해서 어떻게 병렬화 코딩을 하는지  한 챕터에 자세하게 설명하고

그외 TBB, CUDA, Cilk++와 같은 부분도 간략하게 설명하고 있습니다.


책을 그나마 읽을 수 있었던것도 기본적인 것부터 시작했기 때문입니다.

이런것들을 생략하고 적혀있었다면 아마 다른 책들을 

더 공부하고 나서야 책을 읽을 엄두를 낼 수 있었을 것입니다.


책 후반부에는 동기화 장치와 데이터 공유의 직접구현 / 

멀티코어 프로세서와 스레드 스케일링과 같은 내용도 있습니다.


책에는 여러가지 내용이 나오지만 아직도 선명하게 기억나는 부분은

멀티코어를 쓴다고 하더라도 병렬화 가능한 코드의 비율이 증가해야 

멀티코어의 이점을 살릴 수 있다는 부분입니다.

병렬화 가능한 코드를 만들지 않으면 코어 수가 아무리 많아도 성능에는 큰 영향이 없다는 이야기이고,

앞으로는 코어수가 늘어날테고, 공짜로 프로그램의 속도가 향상되지는 않을테니 

멀티코어에서 속도를 향상시킬 수 있는 방법에 관한 공부가 필요함을 느꼈습니다.

싱글코어 프로그래밍만으로 버티는 것도 언젠가 한계가 있겠지요ㅠ


이것은 다 저의 내공이 딸려서 그렇겠지만.. 어려웠습니다.. 책의 어떤 부분은 무슨얘기인가 싶을 정도였고...ㅠ

그렇지만, 좋은 내용의 책인것은 확실합니다. 어려웠던 부분들이외에는 개념을 더 확실히 잡을 수 있었습니다.