좋기는 좋겠지만, 아직은 어려울 것 같은 병렬 프로그래밍

2011.11.11 08:03 컴퓨터/컴퓨터 이야기

n 멀티 코어 시대

IT 전문가가 아니더라도 "듀얼 코어"라는 말은 대부분 알고 계실 것입니다. 잘 모르셔도 들어는 보셨을 것이라고 생각되는데, 최근 기술은 듀얼에서 멈추지 않았습니다. 4 코어, 5코어, 7코어를 넘어 9코어를 적용한 개인용 PC 제품이 있는 것으로 알고 있습니다. 사람 머리에 해당하는 것이 컴퓨터의 CPU라고 한다면, CPU가 똑똑해지고 빨라 지는 것은 즐거운 일입니다.

그러나 실제로 즐거운 일이 되기 위해서는 똑똑하게 일을 시킬 수 있어야 합니다.

여러 개의 일을 동시에 실행할 수 있는 하드웨어는 갖추었는데, 실제로 이용하는 소프트웨어가 한심하게 코어 하나만 사용하고 나머지를 쉬게 한다면 멀티 코어를 애써 갖춘 수고가 없어 집니다. 기껏 왕복 20차선 고속 도로를 만들어 놓고 한쪽 차로만 사용하는 꼴이죠.

저도 직업이 프로그래머이지만, 지금까지 멀티 코어 시스템을 사용하고 있어도 신경 쓰지 않았습니다. 그저 사용하는 OS만 믿고 알아서 해 주기를 바랄 뿐이죠. 그러나 OS에 의지하지 않고 적극적인 방법이 있습니다. 바로 병렬 프로그래밍입니다.

매력적인 주제, 병렬 프로그래밍

병렬 프로그래밍. 생각해 보면 매우 매력적인 주제입니다. 프로그램의 업무에 따라 분리하여 CPU의 여러 코어에 나누어 주고 따로따로 실행 시켜 속도를 올리고 능률을 높일 수 있다면 이를 싫어할 사람은 없겠죠.

무어의 법칙이 깨지지 않는 한 CPU의 코어 수는 계속 늘어 날 것입니다. 그러나 컴퓨터 속도에 직접적으로 영향을 미치는 또 다른 변수, CPU 클록 주파수는 높이는데 한계가 있습니다. 높이면 높일수록 컴퓨터의 처리 속도는 빨라지겠지만, 그만큼 감내해야 할 비용이 함께 커집니다.

가장 큰 문제는 열 문제입니다. 공냉식으로는 한계가 있습니다. 감당하기 어렵게 되면 수냉식으로 바꾸어야 하고, 어쩌면 컴퓨터 본체 보다도 냉각 시스템이 더 커질 수 있습니다. 뿐만 아니라 고속 처리를 위해 메인보드의 제작 수준을 더욱 높여야 하는데 그 비용뿐만 아니라 주변 부품들도 함께 고가 제품으로 바꿔야 할 것입니다. 더 욕심을 부리면, 가정용 전력으로는 감당하기 어려운 지경까지 되겠죠.

코어는 늘릴 수 있는데 CPU 클럭 주파수가 제한된다고 한다면, 확장된 코어를 제대로 사용할 수 있도록 소프트웨어의 기술을 높이는 것이 가장 현명한 선택일 것입니다. 그리고 그 기술이 병렬 프로그래밍이죠.

인텔 병렬 프로그래밍을 위한 솔루션

며칠 전에 인텔에서 병렬 프로그래밍에 대한 세미나를 진행했습니다. 이번이 처음은 아니죠. 인텔은 이미 몇 년전부터 병렬 프로그래밍을 위한 솔루션을 내놓고 판매하고 있으며, 여러 차례 공개 세미나를 열어 제품을 선 보여 왔습니다. 저도 이번이 처음 방문은 아닙니다. 이전에도 몇 번 참석했는데, 그럼에도 이번 세미나를 방문하는 것은 어떤 기대감 때문입니다.

그 기대감은 "얼마나 편하고 빨리 적용할 수 있느냐?"하는 것입니다. 저는 오래도록 직렬 프로그래밍에 익숙해 왔고 제가 사용하는 개발툴도 모두 병렬 프로그래밍을 생각하지 않은 직렬 프로그래밍 툴입니다. 여기에 병렬 프로그래밍 기술을 녹여야 하는데, 과연 얼마나 쉬울까 하는 것이죠.

생소하기는 하지만, 예전보다는 많이 편해진 것 같습니다.

아직은 힘들어 보이는 병렬 프로그래밍

그러나 좋아지기는 한 것 같고 장점도 많은 것 같은데 매우 생소한 모습이 부담되네요.

생소한 문제는 자주 사용하다 보면 친근해집니다. 문제는 디버깅이 걱정됩니다. 버그 없는 프로그램을 만들기는 매우 힘듭니다. 세계 유명 프로그래머를 모아 놓은 Microsoft 나 구글에서도 버그가 있고 패치 버전이 계속 나오는데, 저 같은 사람은 어떻겠습니까?

배보다 배꼽이 더 커지지 않을까?

직렬 모드로 작성해서 병렬 프로그래밍을 적용하려면 우선 직렬 모드에서 작성한 프로그램에서 버그를 제대로 잡아야 합니다. 병렬 프로그래밍을 적용하면 없던 버그도 생기는데, 직렬에서부터 버그가 있다면 병렬 적용 후에는 더 어려운 상황이 예상되기 때문입니다.

이런 문제로 인텔에서는 다양한 도구를 제공해 줍니다. 어느 부분에 문제가 있는지 찾아 주는 유틸리티를 제공해 준다는 것이죠. 그러나 매번 이런 유틸리티에 의존해야 한다는 것이 코드 생산성을 떨이 뜨리지 않을까 하는 생각이 듭니다. 그리고 이 유틸리티가 과연 모든 문제를 걸러내 줄까 하는 의심도요. 만일 흘린다면?

그렇다고 병렬 프로그래밍에 대해 회의적으로만 생각하지 않습니다. 분명 필요한 기술이고 앞으로 수요가 늘어날 것입니다. 앞으로 계속 병렬 프로그래밍에 대한 기술이 발전될 것이구요. 그래서 언젠가는 프로그램을 작성하는 습관부터 바꿔야 할 시기가 오지 않을까 예상도 됩니다. 그러나 저의 소견으로는 그 시기가 모든 프로그래머에게 올 것 같지는 않을 것 같군요.

물론 지금도 당장 필요하신 분이 계시겠지요. 하지만, 저에게는 빛 좋은 개살구이네요.

신고
이 댓글을 비밀 댓글로