최근 멀티코어 프로그래밍을 좀더 심화시켜 보기 위해 Intel Threading Building Blocks 라는 오라일리에서 나온 책을 보고 있다.
책을 구입한지는 꽤 되었지만 그동안 배경지식이 별로 없어서 덮어두고 있다가 최근 틈틈히 봐서 반 이상은 본거 같다.
이 책을 보면서 느끼는건 저자가 어렵게 쓴 책을 보면서 원망을 많이 했었던 것이 시간이 가면 갈수록 경외감으로 바뀌어 간다는 것이다. 하지만 책을 보면서 같은 의미인테 왜 꼭 어려운 단어를 선택해서 썼을까 하는 생각은 끊이질 않았다.
CPU, OS 그리고 프로그램으로 이어지는 이 멀티코어의 힘을 쓰기 위해서는 위 CPU, OS에 대한 지식이 어느정도 필요할 거라는 생각을 책을 보면서 많이 했다.
전에 학교에서 공부했었던 OS나 컴퓨터 구조 과목을 생각해보면서 보고 있는데, 역시나 그 당시 멀티코어에 대한 공부는 전혀 없고 최신 기술 역시 배우지 않은 고전적인 것들만 봐서 그런지 보지 못한 단어들이 꽤 된다. False Sharing 같은것은 들어봄직 한데 이 책에서 처음 봤다. ㅜㅜ
False Sharing : 프로세서가 메모리를 패칭할때 특정 메모리 chunk 단위로 읽어보는것을 말한다. 각 프로세서가 인접한 서로 다른 메모리(같은 캐시라인에 있는)를 접근할때 경쟁이 생겨서 시스템의 부하가 걸릴 수 있다는 것을 의미한다.
TBB에서 제공하는 라이브러리는 이 캐시라인 단위로 메모리를 할당한다. 그래서 메모리 할당시 메모리 소모율을 큰 편이나, 이런 프로세스별 경쟁은 일어나지 않는다.
TBB라고도 불리우는 이 C++라이브러리에 대한 소감은
이 라이브러리에 대한 깊은 이해가 없이 사용하는건 성능향상에 그리 도움이 되지 않을거라는 것과,
멀티 프로세싱 기반의 프로세싱 라이브러리와 함께 메모리 관리 라이브러리, 그리고 컨테이너 라이브러리까지 아우르는 굉장히 다양한 고민을 통해서 나온 라이브러리 셋이라는 느낌이다. 이런것들을 아우를때 진정한 멀티코어 라이브러리라고 불리울수 있을것 같다.
Hadoop을 생각했을때 단순히 Map/Reduce를 가장 큰 위치를 차지하는것으로 봤는데, 이 책을 보면서 그 이외 메모리라든지 저장구조의 최적화가 같이 병행되어야 된다는 생각을 해봤다. 단순히 map/reduce를 구현하면 비슷하게 돌아갈 것이라고 오해를 했었는데 정말 실제 구현은 더욱 많은 성능향상에 대한 고민이 병행되어야 할듯 하다.
방금 대박 자료를 찾았는데, 위 책의 저자인 James Reinders(Intel Director)의 직강 자료가 있어서 링크해 본다.
오호.. 게다가 한글 자막까지 제공된다. @.@
위 강좌는 하둡 2차 모임때 했던 발표와 같은 내용이다. (이 자료가 있다는걸 알았으면 다른 발표를 했을텐데… ㅜㅜ )
이것 말고 7개의 강의가 더 있는데 TBB를 시작할때 큰 도움이 될거라 생각한다.
Intel Threading Building Blocks by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.