병렬화의 목적은 동시에 일을 처리함으로써 처리속도의 한계를 극복하여 성능을 향상시키는데 있다. 즉 우리가 만든 대부분의 알고리즘은 순차적으로 한 개씩 일을 처리하도록 되어 있는데 이것을 동시에 처리하여 빠르게 결과를 만들 수 있는 방법을 찾게 된 것이다. 한가지 예를 들어서 병렬화에 대해서 알아보자.

한 사과농장에서 올해에는 크고 맛있는 사과를 수확하게 되었다. 이를 알고 대형마트에서 사과 1,000 박스를 내일까지 보내달라는 주문하였다. 이 주문을 처리하는데 농장주인 혼자서는 5일이 걸리는 큰 작업인데 혼자서는 도저히 감당할 수 없었기 때문에 농장 주인은 일꾼을 5명 고용하였다. 사과 밭을 5개 구역으로 나누고 각각 일꾼이 한 구역씩 맡아서 사과상자 200박스를 포장하도록 할당하고 일을 동시에 시작하게 하였다. 다행히 계획대로 일은 잘 진행되었고 다음날 아침에 무사히 사과를 납품할 수 있게 되었다.

이 사례에서 병렬화의 개념이 포함되어 있는 사항을 뽑아보면 아래와 같다.
1) 계획 : 주인은 사과 밭의 구역을 5개 구역으로 나누어 작업을 실행함
2) 여러 사람 : 5명의 일꾼을 고용
3) 동시 : 사과를 따고 포장
4) 관리 : 일의 전반적인 관리를 맡음

실제 일을 할 때도 이렇게 일을 계획하고, 다수가 동시에 처리함으로써 5일이 걸리는 작업을 단 하루 만에 마무리 할 수 있게 되었는데 우리가 알게 모르게 실생활에서도 병렬화가 이용되고 있다는 사실을 알 수 있다. 컴퓨터에서도 이러한 병렬화를 이용해서 복잡한 문제들을 빠르고 효율적으로 처리할 수 있게 된다. 현재 우리가 일상에서 접하고 있는 기상예보, 금융 및 경제 분석, 신약개발, 암호해독 등에는 고성능의 슈퍼컴퓨터가 활용이 되고 있는데, 이 슈퍼컴퓨터는 처리 속도를 높이기 위해 최신의 병렬화 기술이 적용되고 있는 대표적인 컴퓨터이다.

어떤 일에 대해서 속도를 향상시키는 병열 처리를 위해서는 사과 농장의 사례에서 봤듯이 일을 나눌 수 있어야 한다. 그런데 나누어진 일은 독립적으로 처리될 수 있어야만 가능하다. 서로가 독립적이지 않으면 동시에 처리 될 수 없기 때문이다. 또한 동시에 처리된 결과는 모아질 수 있어야 한다. 사과 농장의 경우는 동일한 일은 여러 사람이 분담하여 처리하였기 때문에 큰 문제 없이 수확된 사과 박스를 모으는 것 만으로 결과를 만들어 낼 수 있는 병렬처리가 가능했지만, 어떤 경우에는 좀 더 복잡한 관리 방법이 필요할 수 있다. 관리 방법에 포함되는 것들은 여러 일들을 처리하는 계획, 동기화, 제어 및 일관성 유지에 대한 것이다.

병렬화를 위한 중요 관리 방법인 동기화는 각자 생산되는 컴퓨터 CPU와 메인보드 생산의 예로 이해할 수 있다. 애초에 설계된 CPU는 바늘을 8개 가진 모델이었다고 가정해 보자. 그러나 여러 가지 테스트를 거쳐서 좀 더 성능이 좋은 CPU를 만들다 보니 바늘이 10개가 되었다. 이 때 컴퓨터 생산의 병렬화를 위해서는 메인보드의 CPU 꽂는 자리도 바늘이 10개인 것으로 변경이 되어야 한다. 이렇게 독립적인 처리 과정을 갖고 있지만 상대방에게 영향을 미치는 요소가 있을 경우 같이 변경되어야 하는데 동기화는 서로간의 변화와 변경 상황을 일치시키는 것을 의미한다.

병렬화를 위하여 해결해야 할 것이 하나 더 있는데 경쟁 상황에서 교착상태에 대한 것이다. 교착상태라는 것은 하나의 자원을 두고 다투는 상태이다. 어린 아이들이 사탕 하나를 두고 싸우는 것과 같은 상태를 의미한다. 예를 들어 매표소와 입구가 하나인 국립 공원에 있다. 들어갈 때는 만원을 내지만 다시 나올 때 쓰레기를 가지고 나오면 오천원을 돌려 주는 곳이다. 매표소 앞에는 회전문이 있는데 한 사람씩 밖에 통과를 못하는 곳이다.

들어가는 사람은 표를 이미 사서 들어가려고 한다. 반대로 나오는 사람은 이미 회전문에 도착하여 들어가기 일보 직전일 경우, 서로 가지 못하고 서있는 상태가 된다. 즉 들어가는 사람과 나오는 사람이 서로 진입하려고 대기 하는 상태가 만들어 질 수 있는 것이다.

국립공원 매표소에서의 교착상태를 해결하기 위해서는 깃발을 이용하여 깃발이 있으면 통과를 하고 깃발이 없으면 대기하는 방식 즉 자원을 배분하는 방식으로 교착상태에 빠지지 않도록 알고리즘을 만들 수 있다. 교차로의 신호등과 같은 원리를 사용하여 교착 상태에 빠지지 않도록 할 수 있는 것이다.

들어갈 때 알고리즘
1. 깃대를 확인한다
1-1 만약 깃발이 없으면 10분간 대기한다.
1-2 깃발이 있으면 깃발을 내리고 진입한다.
2. 매표소에서 표를 산다
3. 회전문을 통과한다.
4. 깃발을 올린다.

나갈 때 알고리즘
1. 깃대를 확인한다
1-1 만약 깃발이 없으면 10분간 대기한다.
1-2 깃발이 있으면 깃발을 내리고 진입한다.
2. 회전문을 통과한다
3. 매표소에서 돈을 환불 받는다.
4. 깃발을 올린다.

채성수 chaesungsoo@iabacus.co.kr 소프트웨어 개발 전문기업 ㈜ 애버커스 사업총괄 부사장. 엘지전자와 엘지씨엔에스(LG CNS)에서 다년간 컴퓨터 관련 사업을 추진한 전문가이다. 국가 공인 최고 자격인 정보관리기술사로 성균관대 및 서강대에서 컴퓨터 관련 연구를 수행했으며 소프트웨어 공학, 컴퓨터적 사고에 대해서 관심을 갖고 다양한 활동을 하고 있다.

(*이 칼럼은 Nextdaily의 편집방향과 다를 수 있습니다.)

관련기사

저작권자 © 넥스트데일리 무단전재 및 재배포 금지