OpenMP vs MPI?
on
OpenMP를 지원하는 게 흔한 일이 되었는지 이젠 리눅스 배포판에 gomp가 기본으로 붙어서 배포되는 것 같다. pthread와 fork를 쓰는 것보다 openmp를 쓰는 것이 간결(?)해 보이기도 하고 뭐 그런 이점이 있긴 하다.
난 OpenMP가 mpi같은 기능도 제공해주는 건가 했는데 알고보니 OpenMP는 multiple node에 대해서 동작하는 것이 아니었다. 결국 network으로 여러 대의 컴퓨터를 물려서 병렬로 돌리려면 여전히 mpi를 써야 되는 시대인 모양이다. 그 옛날 mpich라는 것을 썼던 적도 있는데, 사실 이것도 알고 보면 같은 기계에서 fork로 thread를 벌이고 다른 기계에서도 fork로 thread를 벌여서 마지막에 최종결과를 보고하고 끝나는 식으로 돌아가는 것이니까 그냥 fork/pthread를 잘 쓰는 이 입장에선 NIS로 묶인 컴퓨터 그룹을 병렬로 돌리는 것을 나름 격식을 차려서 라이브러리화 했다고 봐야한다.
지금 세상은 한개의 CPU가 64개 core를 갖고 그래서 128개 thread를 벌일 수 있는데다 그게 multiprocessor가 가능해서 2개를 하나의 보드위에 올리면 128개 thread로 병렬처리를 하는 것이 그다지 큰 돈 안들이고도 가능한 세상이다. 그런 이유 때문인 것인지 mpi보다 openMP가 많이 보급이 되었는지도 모를 일이지만.
어쨌든 귀찮아서 1개 thread로 꾸역꾸역 돌리는 것보단 조금 부지런해서 fork/pthread를 써주면 적어도 보드 한장에 올라간 CPU는 최대 활용해서 빨리 일을 끝마칠 수 있다는 장점이 있긴 한데, 문제는 열과 소음이다.
48개 thread가 올라가는 threadripper 2개로 된 웍스테이션에서 96개 thread를 올려본 적이 있는데 (귀찮아서 그냥 phtread로 했다), 누군가한테 메일도 오고 대략 한달 후쯤인가 기계가 고장나서 수리를 보냈는데 수리비가 엄청났다는 이야기를 들었다. 당시엔 그게 나름 비싼 머신이었어서 (지금도 싸다고는 할 수 없지만) 죄인의 마음으로 지냈던 것 같은데, 잘 생각해보면 96개 thread를 올려서 (ps나 top을 보면 9600%까진 아니지만 대부분 9000%가 넘는 숫자가 올라오는 것을 볼 수 있었다) 장시간 가동해도 문제가 생기지 않게 만들어야 하는 것 아닌가 하지만, 대개 그렇게 만들지 않는다.
대부분의 core가 놀고 있어도 쿨러(CPU/케이스)만 요란한 굉음을 내며 비싼 장비라고 유세를 떨 뿐.
지금 CPU를 보면 공정이 좋아지면서 single core 성능이 엄청나게 올라가고 일반용 CPU의 탑티어의 물건을 선택하면 32개 thread를 돌릴 수 있는 정도로 나오는데, 쿨러가 잘 만들어져서인지 32개 thread를 모두 사용하더라도 제트기가 이륙하는 수준의 굉음을 내진 않는다. 오히려 Xeon이 박힌 예전 서버, 1U 혹은 2U 사이즈들이 굉음을 내며 load를 올리면 당장이라도 죽을 듯 하지만 말이다.
아직 테스트를 해보지 않았는데, mpi를 열심히 쓰던 시절에 쓰던 CPU가 4 core짜리 Xeon이고 그게 2개 박힌 (그런데 thread는 8개가 max인) 웍스테이션이 20대 묶여있었던 것이라 이 장비를 최대한 사용해봐야 160 thread 였었다. 다행스럽게도 실험결과가 나오는 빈도는 내 생각에 충분한 통계 결과를 뽑았다고 해도 고작 2분밖에 걸리지 않았던 기억이다. 당시 CPU 성능을 Geekbench score로 보면 core당 5-600점이었던 걸로 보면 지금은 1700점이 넘어가는 시절이니까 대략 1/3 개수의 thread만 있어도 원하는 결과를 얻을 수 있단 이야기가 된다. 여기에 compiler 및 instruction의 개량이 있었으니까 (이게 이미 벤치에 반영이 되었으리라 보지만) 대충 1/4개수의 thread만 있어도 되는 것이 아닌가. 사실 그 시절 compiler 대비 지금의 compiler는 대단히 좋아졌으니까.
즉, 32 thread CPU 하나만 가지고도 그 옛날 Xeon 20대가 하던 일을 해낼 수 있지 않을까 하는 하다 못해 15대 쯤의 성능은 되지 않을까 기대해보는 것이다. 20대가 full loaded로 돌아가면 CPU 및 케이스팬이 미친듯이 돌고 그 소음이 X20이 되는 것이라 그 장비들이 보관되어있던 곳의 열기와 굉음이 엄청났던 기억이 떠오른다. 당시에 했던 일과 지금 하고 있는 일이 난이도라든가 내용이 같질 않아서 동등 비교를 할 수 없는 것이 섭섭한 일이긴 하다. 그러니까 체감상의 시스템 성능 차이를 알 수 있는 좋은 기회인데 말이다.