'병렬처리'란 표현이 컴퓨터계를 뒤흔들고 있다. 병렬처리컴퓨터는 슈퍼컴퓨터나 인공지능컴퓨터와 어떻게 다르며 궁극적으로 지향하는 바는 무엇인가.
요사이 과학발전의 속도가 더욱 가속화되고 있다. 더욱이 이 추세의 대표격에 해당하는 컴퓨터의 발전은 하루가 다르다. 최근 개인용컴퓨터(PC) 등의 보급으로 이제는 컴퓨터가 우리일상 주변에 가까이 온 것 같기도 한데, 아직 여전히 어려운 말들이 계속 나타나는 것은 무엇일까?
인공지능 컴퓨터, 제5세대 컴퓨터, 지능형컴퓨터, 객체지향형 컴퓨터 등등. 컴퓨터가 궁극적으로 발전하면 사람의 지능을 닮는다고 하니 그 비슷한 이야기 같기도 하고 그래도 잘 모르겠고…. 이와 같은 경우가 대부분의 입장일 것이다. 이러한 사정에 '병렬처리 컴퓨터'라는 말이 나타났으니 이것은 또 무엇인가?
요즘은 가히 기술에 관한 용어의 혼란시대라 할 수 있다. 컴퓨터도 예외는 아니다. 용어의 시작은 대개 미국 등 선진국에서 오고, 번역도 가지가지 인데다가 같은 뜻을 다르게 표현하는 등 혼란의 도를 더해 가는 느낌이다.
일을 나누어 해보자
병렬처리(parallel processing)라는 말은 말 그대로 여럿이서 같이 처리한다는 말로, 컴퓨터분야에서는 기존의 단일처리기(single processor)에 대치되는 말로 시작되었다. 단일처리기에 대치되는 엄밀한 용어는 다중처리기, 또는 다중프로세서(multiprocessor)로서 한개의 처리기 대신에 여러개의 처리기로 더많이 처리해보자는 단순한 동기이다. 즉 한사람이 일하는 것 보다 여러사람이 일을 나누어 하면 더 빨리할 수 있는 것은 당연하지 않느냐는 것이다.
일을 여럿이 나누어 하는 경우도 다음과 같이 두가지가 있다. 즉 한개의 일을 여러 처리기가 나누어 하는 것이 병렬처리가 되겠고, 여러개의 일들을 한개 이상의 여러 처리기가 나누어 수행하는 경우를 다중처리(multi-processing)라고 할 수 있는데, 이는 사람마다 서로 조금씩 다르게 용어를 사용하는 측면도 작용한다.
최근 이와같은 방식의 컴퓨터가 많이 등장하기 시작하였는데, 제작사마다 자기 상품의 성능을 표시할 때 각 처리기의 성능을 처리기의 갯수로 곱하여 표시하는 등 개념 및 용어까지도 혼란을 일으키고 있다. 이로인해 외국에서는 용어 및 개념의 혼란이 다중처리기 컴퓨터 시장의 발전을 저해한다고 걱정하며 표준화작업을 준비하고 있을 정도이다.
단일처리기의 한계
이미 설명하였듯이 원리가 너무 간단한데 왜 용어 및 개념이 혼란스러운지 의심스러울 지경이다. 즉 혼자 할 일을 여럿이 나누어 하면 더 빠르고 처리 능력이 많아진다는 것이 본질이다. 그러나 이와같은 단순한 원리와는 달리 컴퓨터세계에선 아직 이 원리를 그렇게 빨리 적용하기가 쉽지 않다.
기존의 컴퓨터는 소형에서 대형까지 대개 중앙처리장치(CPU:central processing unit)라는 단일처리기 구조를 하고 있다. 반도체 기술이 발달하고 기억장치의 집적도가 높아짐에 따라 컴퓨터의 능력은 상상할 수 없을 정도로 성능이 높아져가고 있다. 이런 발전 추세라면 웬만하면 단일처리기 시스팀으로도 만족할텐데, 왜 다중처리기에 의한 병렬처리기 등이 거론 되는 것일까?
컴퓨터의 능력이 발달할수록 사람의 욕심도 덩달아 증가되어 컴퓨터의 업무처리범위가 한없이 늘어나기 때문이다. 예전에는 단순한 계산 등에 국한되었던 것이 점점 더 복잡한 업무를 요구하게 되고 심지어는 인간의 사고능력을 흉내내 보겠다는 등 컴퓨터의 처리능력에 무한한 시험을 시도하게 돼, 엄청난 컴퓨터의 발전 속도에도 불구하고 단일처리기로서는 언젠가 한계가 올것이라는 예측과 함께 다중처리기 구조를 한 컴퓨터를 연구하게 된 것이다.
즉 단일처리기에 의한 물리적인 한계속도를 극복하기 위하여 여러개의 프로세서, 심지어는 몇만, 몇백만개의 프로세서를 쓰게되면 이와같은 한계점을 극복할 수 있지 않느냐는 것이다.
그런데 이와 같은 단순한 원리가 실제 컴퓨터 분야에서 적용되기 쉽지 않다는 것은 무엇일까?
그 대답도 간단하다. 즉 여러개의 처리기로 더 많은 일을 수행하기 위해서는 효율적이고 현명하게 일을 나누어 주어야 하는데 이게 쉽지 않다는 것이다. 즉 일의 성질에 따라 잘 나누어지는 일도 있지만 그렇지 못한 경우가 허다하다는 것이다. 이러한 현상은 비단 컴퓨터 경우만이 아닌 일반 일에도 나타난다.
초기의 대형 운영체계를 개발한 경험이 있는 '브룩스'라는 사람의 말을 빌면 "벽돌을 쌓는 단순 작업의 경우는 두배의 사람을 투입하면 두배의 시간 단축을, 다섯배의 사람이면 다섯배의 시간 단축을 가져 올 수 있지만, 아무리 사람을 몇배 더 투입해도 시간 단축이 별로 안되는 성질의 일들도 많다. 극단적인 예로 애기 낳는 일은 아무리 여럿이 도와 주려해도 열달을 채워야 한다"는 것이다.
이러한 현상을 컴퓨터 세계에서 수식으로 표현한 것이 '암달'의 법칙이다. 이에 의하면 아무리 처리기 수가 많다 하더라도, 수행하려는 일의 성질이 α% 만큼은 병렬로 할 수 없는 부분이 있다면 전체 속도의 증가는 단일처리기보다 100/α 이상 빨라지지 않는다는 것이다. 즉 약 10% 정도를 병렬로 못하고,순서적으로 해야되는 성질의 일을 처리하는 경우 처리기를 백개를 쓰든 천개를 쓰든 열배 이상의 속도 증가는 어렵다는 것이다.
이와 같은 원리에서 살펴보듯이 병렬처리일 경우, 즉 한 문제를 여러 처리기에서 나누어서 수행하고자 할 경우는 그 문제의 병렬성을 얼마나 찾아 내는가가 전체 문제 해결의 핵심이 된다. 이와 같은 연구를 '병렬알고리즘'개발이라 하는데 문제의 성질에 따라 다양한 연구가 진행되고 있다.
이상에서 보듯이 실제 다중프로세서에 의한 병렬처리의 문제점은, 여럿이 나누어하면 그만큼 빠르다는 단순한 생각과는 달리 그 일을 어떻게 나누느냐가 더 중요한 문제임을 알 수 있다.
일을 잘 나누었다해도 실제 컴퓨터에서 수행하려면 또 고려해야할 여러가지가 있는데 이것은 뒷 장에서 논의하도록 하자.
지금가지 병렬처리 컴퓨터의 원리 및 문제점을 살펴보았는데, 기존에 많이 이야기 되어온 슈퍼컴퓨터나 인공지능용 컴퓨터 등과 같은 맥락이며 용어만 새로 나온 것이라는 의심이 든다. 무엇이 다른 것인가?
인공지능형과 병렬처리
병렬처리 기술이란 사실 기존의 슈퍼컴퓨터나 지능형(인공지능형) 컴퓨터 등과 별개의 것이 아니다. 이 모두가 병렬처리 기술을 사용하고 있다.
그럼에도 불구하고 왜 병렬처리 컴퓨터라는 말이 독자적으로 사용되는 것일까?
이미 언급하였듯이 병렬처리 컴퓨터에서의 중요한 고려점은 병렬성을 찾는일이고 이것은 문제의 성질마다 특성이 있다고 했다.
이와같은 병렬성의 문제는 전통적으로는 주로 대형의 과학계산 문제를 어떻게 빨리 푸느냐는데 있고 이것이 결국 슈퍼컴퓨터를 탄생시키게 되었다. 과학계산에 관계된 병렬성들은 대개 규칙적인 병렬 데이타의 흐름으로 슈퍼컴퓨터는 이 병렬 데이타의 제어 및 계산을 병렬로 하여 결과적으로 문제를 해결하는 속도를 증가시키는 특수 컴퓨터이다. 이 슈퍼컴퓨터를 이용하는 응용분야로는 대형의 과학계산으로 일기예보를 위한 계산, 우주 항공 및 설계를 위한 계산, 그래픽 및 시뮬레이터 등이다. 특수 분야의 과학자들이 전세계적으로 불과 몇 백대의 슈퍼컴퓨터를 사용하고 있다.
예전에는 병렬처리를 이용한 컴퓨터라면 이와같은 슈퍼컴퓨터가 대부분 이었기 때문에 병렬처리 컴퓨터라는 용어를 굳이 따로 사용할 필요가 없었다.
그러나 최근에 기존의 컴퓨터처리 방식과는 다른 인공지능 기법이라는 것이 나타나면서 부터 컴퓨터의 구조 및 연구방식이 새로와지기 시작했다. 소위 '폰노이만'방식이라고 불리우는 기존의 프로그래밍 방식, 즉 데이타를 정의하고 명령어를 기억장치에 두고 그것을 순차적으로 수행하는 방식과는 달리, 사용자는 되도록이면 지금 자체를 표현만하고 해결은 기계가 알아서 하는 '논(non)폰노이만'방식을 탐구하게 되었다. 경우에 따라서 많은 사람들이 단일처리기가 아닌 병렬처리를 하는 경우를 '논 폰노이만' 식이라고도 하나, 어쨌든 여기서의 관심사는 이와 같은 인공지능 분야의 문제가 병렬성을 많이 지니고 있느냐는 것이다.
아직도 많은 연구가 진행중인 단계이긴하나 인공지능 분야의 문제들은 대부분 병렬성이 많을 것으로 학자들은 믿고 있다. 인공지능 분야에서는 사용자가 문제를 풀 때 기계에 무엇(what)이라는 식으로 알려주고 예전처럼 어떻게(how)라는 식은 피하므로 기계가 알아서(사실은 컴퓨터 과학자가 미리 병렬성을 연구해서 구현시켜 놓아야 하는 것이지만) 병렬성을 찾아 수행할 수 있는 여지가 많다는 것이다.
인공지능 분야에서의 병렬성은 슈퍼컴퓨터가 다루는 과학 계산용의 수치분야와는 달리 병렬 데이타의 구조도 불규칙하고 흐름도 시간에 따라 불규칙해 그 상태가 상당히 동적인 특성을 가지고 있다. 이로인해 인공지능 분야의 병렬처리는 이에 맞는 특수한 구조를 가지고 있는데, 슈퍼컴퓨터의 수치계산이 정해진 순서에 의해 결정적으로 진행되는 것에 비해, 인공지능 분야는 일단 해결을 시도하다 실패하면 다음의 방법을 찾는 비결정적인 특성을 병렬적으로 해결하려는 특수한 구조를 갖고 있다.
이와같이 일을 나누어서 동시에 처리해 보려는 병렬처리 방식에서도, 컴퓨터의 경우 문제의 분야에 따라 서로 상당히 다르다는 것을 알 수 있다.
그러나 비록 성질이 다르다고는 해도 문제내에서 되도록이면 많은 병렬성을 찾아내야 효율이 높다는 것은 공통적이다. 인공지능 분야에서는 이것을 프로그램언어에서 찾으려는 노력을 하고 있다. 즉 사용자가 무엇(what)이라는 지식을 넣어줄 때 쓰는 언어에 따라 병렬성이 많고 적음이 나타난다고 믿고 있는데 현재 대표적인 언어 분야는 다음과 같다.
논리언어 분야인'프롤로그'(prolog)라는 언어가 있는데, 이 언어는 수학적으로도 상당수준 정리가 되어 있고 기존의 데이타베이스, 운영체제및 문제해결 방식 등에 다 적용이 될 것으로 믿어져 유럽에서 개발된 언어이다. 이 언어는 일본에서 1982년부터 10년 계획으로 '제5세대 컴퓨터'라는 이름으로 개발이 시작되어 진행중에 있다. 이것을 기반으로 인공지능 분야의 응용에 슈퍼컴퓨터(심볼릭 슈퍼컴퓨터라고도 하며 기존의 '뉴메릭'(Numeric) 슈퍼컴퓨터와 구분하기도 한다)로 쓰겠다는 계획이었다. 학자들은 이 언어가 무엇(what)에 근거한 좋은 언어이기 대문에 많은 병렬성을 기대했는데 후반기에 들어선 '제5세대 컴퓨터'프로젝트 보고서에 의하면 기대보다 그다지 병렬성을 구현하지 못하고 있는 것으로 알려져 있다.
또 다른 것으로는 미국 등지에서 예전부터 써오던 함수 언어 계통의 리스프(lisp)라는 언어가 인공지능 분야의 전문 가시스팀을 비롯한 여러응용에 쓰여왔고 아직도 주류를 이루고 있다. 이 계통도 병렬성 탐구에 의한 새로운 구조의 컴퓨터 연구가 있으나, 프롤로그와는 달리 보수적으로 점증적인 개선을 꾀하고 있다.
이 두 언어 모두는 수치계산 보다는 기호처리 방식이라는 공동 특징을 지니고 있다.
또 한부류의 새로운 학문분야로는 신경망구조를 한 컴퓨터의 연구이다. 이 분야에서는 기존의 컴퓨터가 강력한 한개 또는 여러개의 처리기로 문제를 푸는 반면, 처리기의 능력 자체는 작고 간단하나 갯수는 몇만 몇십만개 이상이 모여 풀 수 있는 성질의 응용분야를 연구하고 있다.
이는 사람의 뇌나 감각 신경세포와 원리가 유사하다하여 신경망모델 또는 신경망컴퓨터 등으로 불리고 있다. 이 분야는 극도의 병렬성이 요구되므로 기존의 병렬알고리즘 정도와는 달리 특별 모델이 제시돼 인간의 감각기관과 비슷한 화상인식이나 음성인식 또는 학습에 의한 인식 등 특수분야에서 상당한 가능성을 보여주고 있다. 이미 선진국에서도 이 분야의 기초연구에 많은 투자를 시작했으며 우리나라에서도 연구가 시작되고 있다.
지금까지 병렬처리 관련의 여러 응용 및 그에 대응하는 컴퓨터를 살펴 보았다. 그러면 기존의 컴퓨터는 곧 사라지는 것일까? 또는 아직도 병렬처리 컴퓨터라는 용어가 기존의 슈퍼컴퓨터나 인공지능컴퓨터, 신경망컴퓨터라는 용어가 있는데 따로 필요한 것일까?
개선이냐 혁명이냐
지금까지의 논의를 살펴보면 병렬성을 찾기만 한다면 결국 병렬성을 이용한 다중처리기 컴퓨터는 궁극의 목표처럼 느껴진다.
그런데 실제 현실에서는 아직 그렇게 쉽게 단정을 내리기 어려운 형편이다. 지금까지 발견된 병렬알고리즘이나 이를 이용한 컴퓨터일수록 일반 여러 응용에 골고루 쓸 수 있는 범용성에서 벗어나 특수용 컴퓨터가 된다는 사실이다. 즉 이와같은 컴퓨터는 특수분야에 적용하기 위해서는 또 다른 특수 병렬컴퓨터를 써야하는 형편이다. 더구나 기존에 쓰고 이미 보급되어 있던 수많은 소프트웨어들을 병렬처리 컴퓨터들이 수용하지 못하고 있다는데서 외형적인 요란과는 달리 현실에서는 멀리 있는 것이다.
그러므로 이러한 병렬처리 컴퓨터들이 기존의 중형 또는 대형컴퓨터와 더불어 보조컴퓨터의 양상으로 쓰일 수 있도록 네트워크를 통한 새로운 분산방식의 컴퓨터 구조 등이 제안되고 있는데, 이러한 보조기능(서버:server)으로서의 병렬처리를 생각하는 것과, 궁극적으로 기존의 모든 문제를 이 방식으로 풀어보려는 접근방식이 아직은 모두 존재한다고 할 수 있다.
이와같은 범용성 및 특수성의 한계와 관련, 원천적으로 인간의 사고방식이 순차적이냐 병렬적이냐를 가지고 학자들 간에 오랫동안 논란을 거듭했다.
인공지능계열의 원로인 '매카시' 교수는 "뇌에서 고차원생각은 순차적으로, 저차원(감각 등)동작은 병렬적으로 행해진다"고 주장했다. 이 말을 적용하면 사람의 생각같이 다각적인 사고(범용성)는 기존의 컴퓨터가 고성능인 순차적 방식으로 하고 감각기관에 해당하는 특수분야 인식 등은 고도의 병렬처리 컴퓨터가 담 할 수 있다는 말이 된다.
이처럼 필자도 '병렬처리 컴퓨터'라는 용어를 이러한 특수 분야의 처리를 위한 컴퓨터의 총칭으로 쓰고 있는데, 결국 기존의 순차방식에 의한 범용성과 병렬방식에 의한 특수성에 대한 구분이 최근들어 문제의 촛점이 되고 있다. 그러므로 궁극적으로 병렬처리방식이 기존의 응용을 모두 수용할 수 있을 것인가라는 질문이 핵심이 된다.
지금까지 여러 각도에서 연구해오던 학자들은 처음의 생각과는 달리 무엇(what)에 의한 기술과 그 속에서 병렬성을 찾으려는 시도가 생각보다는 쉽지 않다는 것을 점차 인식해 가고 있다. 이로인해 이와같은 혁명적인 접근방식보다는 점증적인 접근방식으로 무엇과 어떻게(how)가 적당히 섞여 사용자에게는 기존의 물체 및 그의 성질, 동작관계를 다루는것 처럼 보이게하는 '객체지향형'(object-oriented)컴퓨터를 생각하게 되었다.
이 방식의 궁극적인 목표는 기존의 범용 응용분야를 되도록 모두 수용하고 또한 '무엇'방식에 근거한 인공지능언어방식도 수용해 보자는 것으로 결국 범용성을 갖는 병렬처리 컴퓨터를 개발해 보자는 것이다. 즉 중간에 모든 분야의 언어 및 특성을 수용할 수 있는 '커널'(kernel)을 매체로 두고 기계는 이것을 병렬로 수행하고 번역장치는 여러문제를 이 중간매체로 변형한다는 것이다.
더이상의 자세한 기술 사항은 피하도록하고 '병렬처리 컴퓨터'에 대한 용어가 독자적으로 발생하게된 연유를 결론적으로 이야기 해보자. 이와 같은 기존의 범용응용 분야에서 부터 고도의 처리속도가 요구되는 특수분야 까지 수용할 수 있는 고성능 컴퓨터를 병렬처리 방식으로 설계 개발할 수 없을까라는 연구가 최근들어 선진국에서 일고있기 때문이다. 즉 이미 언급된 슈퍼컴퓨터나 제5세대 컴퓨터 등에서도 병렬처리 방식을 이용하고 있으나, 이러한 컴퓨터도 병렬처리를 일반화 하기에는 좀더 근본적인 해결이 있어야 하며 이를 위한 논점이 부각되어야 된다는 의미에서 '병렬처리 컴퓨터'라는 말이 쓰이고 있다.
완벽한 것은 없다
마지막으로 이러한 병렬처리 방식을 위한 해결시 고려사항을 간단히 언급해 보자. 이미 논의한 바와 같이 병렬처리분야에서는 응용 자체에서 병렬성을 찾는 것이 기본문제이다.
이미 병렬성을 찾았다 하더라도 이와같은 분담일을 처리기에 골고루 나누어 주는 일과 각각 처리한 일을 최종적으로 거두어 종합하는 일이 컴퓨터 구조상에서는 문제가 된다. 여러개의 처리기가 있다해도 분배 및 종합을 위해서는 서로 교신을 해야하고 이를 위한 연결 방식이 필요한데, 수많은 처리기를 어떻게 효율적으로 연결하며 처리를 위한 기억장치 등은 공유할 것인지 각각 가지고 있을 것인지 등이 주요 논점이 되고 있다.
연결방식 (interconnection topology)등은 이미 많은 연구가 진행되었으며, 통신 속도 또한 몇단계를 거쳐 목적된 처리기에 도달하는지 등을 고려하여 최대 효율을 찾고자 하고 있다. 아무리 병렬성을 잘찾았다 해도 이러한 문제에 걸리면 또 한계에 부딪치게 마련인데, 이것도 특수분야에선 특수 구조가 좋다는 식이므로 모든것을 만족하는 구조는 없다.
이러한 연결방식 및 통신속도의 고려 외에도, 각 처리기가 각각 수행할 때 필요로하는 데이타가 서로 동시에 필요하게되면 서로 충돌을 방지하고 사이좋게 순차적으로 사용하게 해야하는데 이러한 문제를 '동기화' (synchronigation)라 한다.
서로 제한된 데이타나 자원을 충돌없이 나누어 쓰게 하기 위해서는 공유자원이나 데이타 구조를 적당한 크기로 잘라서 한 순간에는 한 처리기만 수행하도록 해야 한다. 이 크기(granularity)의 결정및 구현이 가장 어렵고 중요한 문제라 할 수 있다.
마지막으로 병렬성에 관한 정보를 사용자가 제공하는지 기계가 알아서 하는지의 문제이다. 이 문제가 궁극적으로 병렬처리방식의 컴퓨터 보급에 결정적인 제약이 되고 있는데, 사용자가 많은 정보를 줄수록 병렬처리 효율을 극대화 할 수 있는 반면 사용자에 부담을 주고, 기계가 자동으로 하도록 할수록 병렬성 파악의 한계로 효율이 상당히 떨어진다는 것이다. 사람이 어느정도까지 병렬성 정보를 기계에 주는 것이 아직은 효율적인데, 순차적 프로그램 방식에 익숙해져있는 사람이 병렬 프로그램에 익숙하기란 현재 상태로는 너무 어렵고 시간이 걸린다. 일반 사람에게 서로 연관된 일을 몇백개 주고 동시에 하라면 정신 못차릴 것이라는 것은 쉽게 이해될 것이다.
우리 수준은 아직…
지금까지 여러 각도에서 병렬처리에 관련된 응용 및 컴퓨터 그리고 실현시의 문제점들을 살펴보았다. 병렬처리 컴퓨터란 원리가 갑자기 튀어나온 특수한 것도 아니고 이미 연구가 진행되고 있는 새로운 구조의 컴퓨터와 다른 것도 아니다.
그럼에도 불구하고 병렬처리컴퓨터라는 말이 대두되고 있는 것은, 지금까지 진행되어온 새구조의 컴퓨터들이 특수 분야에 적극 연구방향을 정진하는 것에 비해, 기존의 일반 범용응용까지도 포함하는 문제를 병렬처리로 해결해보려는 더 포괄적인 연구와 노력이 있기 때문이다. 즉 용어 그 자체 보다는 연구의 범위 및 특성에 대한 환경적인 요인에 의해서 '병렬처리 컴퓨터'라는 표현이 쓰이고 있다는 의미이다.
우리나라는 이제 겨우 개인용컴퓨터 및 소형컴퓨터를 생산하고 있고 중형 및 대형 이상은 수입에 의존하고 있다. 설계 및 원천기술은 소형 이하도 그나마 제대로 가지지 못하고 있는 취약한 상태이다. 선진국은 지금의 슈퍼 및 대형컴퓨터도 모자라 이와같은 신기술 개발에 전력을 기울이고 있다. 외형적인 성장으로 중진국 대열에 선 우리나라가 실질적인 선진국을 바라보려면 이와같은 현실을 파악하고 외국의 기술수준을 간파하여 더욱 많은 국민의 관심과 적극적인 개발 투자를 서둘러야 점점 벌어지고 있는 선진국과의 기술격차를 메어갈 수 있을 것이다.