빠른 컴퓨터에 대한 개발을 위하여…

빠른 컴퓨터에 대한 요구는 지금도, 앞으로도 지속적으로 있을 것으로 보여진다.

컴퓨터의 속도를 결정하는 첫 번째 요소는 다들 알듯 프로세서의 속도가 향상되는 것이다. 그러나, 그것이 한계에 부딧히게 되어 멀티코어를 만들고 병렬처리 기술들을 지속적으로 하고 있다.

병렬 처리란 다수의 프로세서들이 여러 개의 프로그램들 혹은 한 프로그램의 분할된 부분을 분담하여 동시에 처리하는 기술을 말한다. 병렬처리가 가능해지기 위해서는 다음과 같은 조건들을 만족해야 한다.

  1. 많은 수의 프로세서들을 이용하여 하나의 시스템을 구성할 수 있도록, 작고 저렴하며 고속인 프로세서들의 사용이 가능해야 함
  2. 한 프로그램을 여러 개의 작은 부분들로 분할하는 것이 간으해야 하며, 분할된 부분들을 병렬로 처리한 결과가 전체 프로그램을 순차적으로 처리한 경우와 동일한 결과를 얻을 수 있어야 함

첫 번째 조건은 최근 반도체 및 프로세서 기술의 발전으로 만족을 하고 있는 상황이다. 그러나 두 번째 조건은 다음과 같은 새로운 과제들을 야기시킨다.

  • 분할성
  • 복잡성
  • 프로세서간 통신

분할성이란 병렬 처리를 위하여 하나의 프로그램을 여러 개로 나눌 수 있어야 ㅎ나다는 것이다. 프로그램들 중에는 반드시 순차적으로 처리되어야 하는 것들도 있기 때문에 병렬 처리가 근본적으로 불가능할 수도 있다. 또한 많은 수의 프로세서들이 제공되더라도 프로그램을 그 수만큼 분할할 수 없는 경우에는 프로세서 이용률이 낮아져서 원하는 만큼의 성능 향상을 얻을 수 없기 때문에 분할성은 매우 중요하다. 이러한 경우에 병렬처리의 효과를 높이기 위해서는 순차적으로 처리해야 하는 부분을 최소화할 수 있는 새로운 알고리즘 개발이 필요하게 되고, 알고리즘 자체가 복잡해질 수도 있다. 이 부분이 복잡성에 해당한다.

하나의 프로그램이 여러 개의 작은 부분들로 나누어져 서로 다른 프로세서들에 의해 처리되는 경우에는 프로세서들 간에 데이터 교환을 위한 통신이 필요하게 된다. 프로세서의 수가 증가하면 통신 선로의 수도 그만큼 더 많아지고, 인터페이스를 위한 하드웨어도 복잡해진다. 그에 따라 프로세서간 통신을 지원하기 위한 소프트웨어 오버헤드와 하드웨어상 지연 시간 때문에 통신에 소모되는 시간이 길어져서 속도 향상에도 한계가 있게 된다.

이 밖에도 알고리즘의 병렬성을 표현해줄 수 있는 병렬 프로그램 언어와 컴파일러의 개발도 요구된다. 또한 프로세서들이 각종 하드웨어 자원들을 공유할 수 있도록 상호 베타 매너키즘이 설계되어야 하고, 공유자원들에 대한 경합을 줄이고, 이용률을 극대화시킬 수 있도록 운영체제에서도 특별한 기능이 추가되어야 한다.

이 내용들을 전부 정리해보면 병렬컴퓨터 시스템을 개발하기 위해서는 하드웨어의 구조, 운영체제, 알고리즘, 프로그래밍 언어, 컴파일러 등 거의 모든 분야의 컴퓨터 기술들이 통합되어야 한다.

p.s. 진짜 진짜 관심 있는 분야이긴 한데…./먼산

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다