시스템은 동시에 동작 가능한 여러 개의 하드웨어 위에 많은 수의 스레드를 운영한다. 하지만 지난날의 멀티 태스킹은 일종의 눈속임이였다. 여러 작업이 동시에 일어나는 것이 아니라 수 초의 짧은 시간을 쪼개서 여러 개의 태스크들을 번갈아 실행하는 방법으로 겉모양만 그럴듯하게 만든 것이었다. 또한 싱글 스레드로는 애플리케이션의 성능 이슈를 더 이상 해결할 수 없다. 멀티 스레드를 이용한 병렬화는 애플리케이션의 성능을 두 배, 세 배, 네 배씩 높여줄 수 있다. 이제 병렬화는 필수적이다.
이 책은 C언어에 익숙한 중급 이상의 개발자를 대상으로 하고 있으며, 병렬 애플리케이션을 개발하기 위해 특정한 방법론에 빠져들지 않고 여러 가지 접근 방법을 다루고 있다. POSIX, 윈도우 API, OpenMP, 스레딩 빌딩 블록, CUDA 등이다. 여기서 한 가지 확실한 점은 이제는 개발자가 병렬 애플리케이션에 친숙해져야 한다는 점이다. 이 책을 읽음으로써 병렬 프로그램을 작성하기 위한 도구와 그것이 올바르게 동작하고 많은 수의 CPU 코어에서 효율적으로 스케일링하기 위한 조건을 이해할 것이다.
이 책에서는 아주 깊이 있는 기술적 내용을 다루지는 않는다. 그러나 심도 있는 사항들에 익숙해질 수 있게 하기 위해 다양한 분야의 병렬화 방법과 주제를 다루고 있다. 하지만 이러한 지식을 실제 애플리케이션에 적용하는 것은 쉬워 보이지 않는다.
200 ~ 300 쪽 내외의 책들과 비슷한 두께를 가지고 있으면서도, 막상 안을 들여다 보면, 500쪽이 넘는, 막강한 내용을 담고 있는 책.
요즘 나오는 컴퓨터들은, 대부분 멀티코어이다. 기본 듀얼코어이거나, 그 이상이다. 하지만, 대부분의 컴퓨터 소프트웨어들은, 그 많은 코어들을 제대로 활용하지 못하고 있다. 대부분은 멀티코어를 가지고 있으면서도, 소프트웨어를 돌려보면, 하나의 코어만 가동하는 모습을 심심치 않게 볼 수있다. 이렇게 되면, 아무리 좋은 컴퓨터라고 해도, 제대로 된 성능을 낼 수 없는 것은 당연지사다.
이 책은, 이러한 것들을 해결할 수 있게, 멀티코어 프로그래밍이라는 주제로 아주 광범위한 주제를 다루고 있다. 어떻게 하면, 컴퓨터에 있는 멀티코어로, 소프트웨어를 작동 시킬 수 있을까, 어떻게 하면, 내가 가지고 있는 멀티코어를 효율적으로 작동 시킬 수 있을까를 정말 잘 배울 수 있는, 책 인 것 같다. 다만, 기본적으로, OS라던가, C 언어 프로그래밍을 알아야지만, 제대로 이해를 할 수 있을 것 같다. 책 대부분의 내용이, 그런 내용을 담고 있기 때문이다. 소스코드도 많이 나와있고, 소스코드에는 대부분 혼란스러워 하는 포인터라는 녀석도 가득가득 나와있다. 하지만, 이런 부분들을 정복하면, 어느새 한단계 발전해 있는 자신을 발견할 수 있을 것 같다. 그 만큼 심도있는 내용을 다루는 책이고, 유용한 내용을 다루고 있는 책이다. 나는 한번이 아니라, 두세번은 읽어봐야 좀 더 내용을 제대로 파악할 수 있을 것 같아서, 이제 두번째 읽어보려고 하고 있다. 내가 혹시나 지나친 부분이 있을 것, 같아서, 정말, 단 한부분도 놓치고 싶지 않다는 생각을 하게 만든 책이다.