2008년 10월 23일 여의도 KT빌딩 인텔코리아(7F)에서 Multi-Cores Programming 세미나 참석후..
기업에서 하는 무료 세미나가 그렇듯이, 제품 설명이 60%이고, 40%가 기술적인 내용들이다. 하지만 제품 설명이 필요 없다는 것이 아니다. 제품들이 가지는 특징이나 방법론 혹은 아이디어를 통해 돌파구를 마련해줄 수 있기 때문이다. 하지만, 내가 회사에서 하는 일과는 직접적인 관련이 없는 세미나들이 대부분이다. 소모전류를 하는 소프트웨어의 비애(?)라고 할까? 그래서 이제껏 여러 세미나에 참석해보지 못했었다. 그 결과는... 점점 냄비안에 개구리가 되어서 따뜻해지는 물 속에서 만족만을 느끼고 지냈던것 같다. 진짜 세상은 빠르게 흐르고 있는데 말이다. 특히 휴대폰 쪽은 제조업이다가 보니까 새로운 것을 적용하는데 리스크가 크다. 그래서 좀더 보수적인 업무에 익숙해질수록 보수적인 생각을 하게 되는것 같아서 아쉽다.
우선 세미나는 30여명 남짓 들어갈만한 작은 공간에서 진짜(?)세미나라고 느낄정도로, 진행이 되었다. 발표자가
James Reinders로 Intel Soft Group Director이다. O'Relly의
"Intel Threading Building Blocks"와 Intel Press의
"VTune Performance Analyzer Essentials"라는 책의 저자이기도 하다. 세미나는 자리를 다 메우고도 모자라서 주변에 걸터 앉는 사람들이 있거나, 서서 듣는 사람도 있었다. 정말 그들의 열의가 부럽기만 했다. 특히 머리가 희신 40대 중반의 참석자도 있었다. 그리고 나를 알아보시는 분도 한분 계셨다.(참 세상 좁다.) 얼마전에 인텔에 경력직으로 입사를 하셨다고 했다. 그리고 더불어서, 어떻게 이 세미나에 오게 되었냐면서 회사에서 보내주었냐고 물으셨다. 그 소리를 들으니 왠지 내가 다니는 회사를 다른 사람들이 얼마나 보수적으로 보는지 새삼(?) 깨닫게 해주었다. 연봉이나, 대우, 업무환경, 문화등이 부럽기만 했다. 물론 15분정도의 짧은 시간에 그 많은 것을 제대로 봤다고 생각하지는 않는다. 자 세미나의 분위기와 인텔에 대한 이야기는 이쯤으로 마무리하고, 오늘 내용을 잊지않기 위해 정리 해볼까 한다.
멀티 쓰레딩(멀티코어)에 빠짐없이 항상 매번!! Dijkstra 만큼이나 유명한 것이 나온다.
이다.
이번에도 어김없이 이 법칙으로 시작을 했다. 그러면 왜 멀티코어가 그렇게 필요한가? 지금의 프로그램을 좀더 빠르게 하는 것은 암달에 법칙처럼 한계가 있는 것이 분명한데 말이다. 이를
과 Computer가 처리하는 데이터의 양이 증가하는 것으로 멀티코어가 꼭 필요하고 이에 따른 멀티 쓰레딩이 필요하다며 세미나를 시작했다. (나도 전적으로!!! 같은 의견이다.)
그러면 어떤 프로그래밍 언어를 사용해야 하는것에 대해서는 역질문으로 이를 답하고 있다. 어떤 프로그래밍이 싱글코어에서 Best인가? 물론, 답이 없기 때문에 역질문으로 방어를 한것이다. 특정 언어를 고집하지 말라는(?) 의견이기도 하다. 자 그럼 좀더 여기서 나아가면, 그러면 어떻게 멀티코어에서 멀티 프로그래밍을 하며, 어떤 방법이 있는가? James씨는 이 부분에 대해서 세가지가 자신이 생각하기에 가장 범용적으로 사용되며, 가장 많이 사용되기 때문에 우리가 익혀야 한다고 말했다. (이런 부분이 세미나에서 정말 얻는 것이라고 생각된다. 내가 판단할 것을 전문가가 대신 판단해주니 말이다. 하하하하. 나의 게으름은 정말...)
1. Threaded Library : 언어별로 무수히 많이 존재한다.
2.
OpenMP : Macro를 통해서 Multi Programming을 할 수 있게 끔 도와준다. 정말 사용하기 쉬웠다.
3.
TBB(Intel Threading Building Blocks) : 인텔에서 멀티 프로그래밍을 할 수 있게 Parallel computing을 도와주며 OpenMP와 유사하게 사용하기 쉽다.
그러면 이 셋의 차이는 무엇이 있는가? 우선 Threaded Library는 제외하고(case by case다) OpenMP와 TBB를 비교해보자. James씨가 말하는 차이는 TBB에는 Resource Manager가 있어서 Core에 신경쓰지 않고 Load balancing을 맞춰주는 반면에, OpenMP (2.0으로 기억됨)에서는 Work를 1/core로 나누어서 코어에 분배 해버리기 때문에 때론 이미 코어가 많은 작업을 처리하는 중이라면, 전체 결과를 얻는데까지 시간이 더 필요할 때가 있다라고 말했다. 하지만 특정 목적상의 컴퓨터에서는 리소스 매니져가 없는 OpenMP가 더 빠르다는 것도 함께 언급했다. (3.0이 2008년 5월에 Release되었으며, 아마도 개선이 되고 있을 것이라고 전했다.)
멀티 프로그래밍은 무엇을 고려하며 작성되어야 하나?
1. Scalability
2. Correctness
3. Maintainablity
위의 세 가지를 가장 중요한 요소라고 생각한다고 말했다. 음. 일일이 설명은 필요 없겠다.
약 1시간 정도의 발표 이후에 장장 40분의 시간동안 QA시간을 가졌다. 질문들은 끊임없이 나오고, 이에 대한 답변과 그 시간에 해결되지 못한 답변에 대해서는 명함과 함께 메일을 써달라고 하며 첫번째 세션이 끝났다.
그후에는, VTune에 대한 데모를 인텔코리아에 근무하시는 분이 했다. 음. 시간이 촉박해서일까? 말이 빠르고, 장표 위주로 넘어가버려서 아쉬운 부분도 있었다. 하지만 멀티코어 프로그래밍을 할때, 얼마나 툴이 중요한지는 한눈에 알수 있었다. 또한 Amdahl's law가 목표가 되어서 이와 유사한 퍼포먼스를 얻도록 튜닝해나가는 과정은 들을만 했다. 그리고 세미나 참가 사례(?)로써 TBB와 VTune에 대한 책을 나누어 주었으며, 나는 VTune 책을 받았다. 음... 레퍼런스용(?)정도로 볼려고 한다. 워낙에 유료인 부분들이 많아서 개인적으로 사용하기에는 부담스럽다.