[IT에 한 걸음 더 다가가기] 연산처리의 성능한계에 도전하는 병렬컴퓨팅 (1편)

1

SMAC은 소셜에서 생산하는 대량 데이터, 모바일 어플리케이션, 빅데이터 분석, 클라우드의 거대한 시스템 환경을 기반으로 하여 서로간의 융합을 꾀하고 새로운 서비스를 제공하여  IT혁명을 주도할 요즘 가장 Hot한 ICT 트렌드로 화자되고 있습니다. 이러한 SMAC 서비스를 가능하게 하기 위한 가장 중요한 핵심요소는 바로 컴퓨팅 능력일 것입니다. 그중에서도 컴퓨팅 성능을 극대화하기 위한 병렬 컴퓨팅이라는 주제로 연재를 시작하려고 합니다.

이번 편에서는 컴퓨터의 성능이 과거부터 현재까지 어떻게 향상되어 왔는지를 짚어보고 그 중 핵심기술인 병렬컴퓨팅의 탄생배경과 기본 개념에 대해 알아보도록 하겠습니다.

 

제 1편 : 컴퓨터의 성능향상

제 2편 : 병렬 컴퓨팅의 다양한 기법I

제 3편 : 병렬 컴퓨팅의 다양한 기법II

제 4편 : 병렬 컴퓨터

제 5편 : 병렬 프로그래밍

제 6편 : 병렬컴퓨팅의 미래와 전망

23

컴퓨터가 처음 만들어진 시기부터 현재까지 컴퓨터의 성능을 어떻게 끌어올리느냐는 고민은 계속해서 있어 왔습니다. 즉 컴퓨터의 역사는 성능향상의 역사라고 해도 과언이 아닙니다. 1946년 최초의 전자식 컴퓨터라고 일컬어지는 ENIAC의 탄생 이후, 초기에는 프로세서를 구성하는 소자를 통한 성능향상에 많은 초점이 맞춰졌습니다. 1세대 진공관에서부터 트랜지스터, 집적회로, 대규모 집적회로로 발전하게 되었죠. 프로세서의 회로를 구성하기 위해서는 전기신호의 흐름을 제어하는 스위칭 기술, 원거리까지 신호를 전송하게 하는 증폭기술이 핵심이라고 볼 수 있습니다.

초기에는 진공관이라는 소자를 이용하여 이러한 회로를 구성하였으나 부피가 크고 전력소모가 많아 작은 회로를 구성하지 못하는 단점 때문에 이를 대신할 수 있는 소자가 필요하게 되었으며, 그렇게 탄생하게 된 것이 바로 반도체 기술을 이용한 트랜지스터라는 소자입니다. 진공관과 똑같은 역할을 수행할 수 있지만,진공관보다 훨씬 작은 크기에 소비전력이 적어 전자회로를 작게 구성할 수 있게 되었죠. 그 이후부터 전자회로를 더욱더 작게 만들기 위한 노력은 계속되어 왔으며 현재의 대규모 집적회로까지 발전하게 되었습니다. 집적회로란 실리콘 등의 반도체 칩 위에 트랜지스터, 저항, 커패시터 등의 소자 등을 집적하여 구성하는 회로입니다.

오늘날의 컴퓨터 소자는 대규모 집적회로 즉 VLSI 기반이라고 할 수 있는데, MOSFET이라는 트랜지스터를 조합한 CMOS 회로구성을 통하여 대규모 집적을 실현할 수 있게 됩니다. 또한 최근에는 3D 반도체 공정기술 (FinFET)을 통해 기존에 평면구조의 반도체 칩 구조를 입체적(3D) 구조로 설계하여 물리적 한계를 극복하면서 7나노 크기의 소자개발까지 이루어지고 있습니다. 이러한 소자의 집적도 기술 발전은 컴퓨터의 클럭 주파수를 크게 끌어 올리고 컴퓨터의 병렬성 향상에 크게 기여하게 되었습니다.

인텔의 공동설립자 고든 무어라는 사람은 반도체 집적도 성능(트랜지스터 집적 수)이 18개월마다 2배로 증가하며, 컴퓨팅 성능은 2배로 향상된다는 이른바 무어의 법칙을 내놓은 바 있습니다. 최근에는 이 법칙에 대한 약간의 논란이 있기는 하지만, 현재까지는 거의 맞아떨어지며 컴퓨터의 성능이 향상되어 왔습니다.

 

하지만 컴퓨터의 성능향상은 이러한 소자의 발전만으로는 한계가 있었습니다. 프로세서가 자신이 가진 최대의 성능을 내기 위해서는 프로세서의 동작을 얼마나 잘 정의하는지도 매우 중요하기 때문입니다. 이러한 관점에서 소자의 발전과 더불어 마이크로 아키텍처에 대한 성능향상 또한 지속적으로 연구 되어 왔습니다.

4

컴퓨터의 아키텍처는 크게 명령어 집합구조와 마이크로 아키텍처로 분류될 수 있는데, 마이크로 아키텍처에 대하여 설명하기 전에 먼저 명령어 집합 구조에 대한 이해가 필요하니, 잠깐 짚고 넘어가겠습니다. 명령어 집합 구조란 프로세서가 인식하여 실행할 수 있는 기계어 명령을 의미합니다.

예를 들어 프로그램 코드를 컴파일하면 실행파일이 만들어지고, 이 파일을 실행하게 되면 코드와 데이터가 메모리로 복사되어, 프로세서를 통해 읽히고 동작을 수행하게 됩니다. 여기서 실행파일은 프로세서가 인식할 수 있는 기계어 형태로 되어 있으며, 이를 명령어 집합이라고 부릅니다. (실제 Windows OS에서는 실행파일이 Portable Executable File이라는 포맷으로 되어 있으며, 명령어 집합뿐 아니라 프로그램을 실행하기 위한 다양한 헤더 정보도 같이 들어 있습니다.)

즉 명령어 집합구조는 이러한 명령어와 레지스터 및 메모리 상호작용 등에 관한 모든 내용을 포함하고 있으며, CISC나 RISC 등의 아키텍처에 따라 여러 형태로 구성될 수 있습니다. 마이크로 아키텍처는 바로 이러한 명령어 집합구조를 조직하고, 프로세서를 운영하기 위한 하드웨어 수준의 구조를 정의하는 개념이라고 볼 수 있습니다.

인텔에서 새로운 프로세서가 개발되어    붙여지는 이름인 네할렘이나 하스웰 등이 바로 마이크로 아키텍처입니다.

그렇다면 컴퓨터의 성능향상을 위해 마이크로 아키텍처는 어떻게 발전이 되어 왔을까요? 마이크로 아키텍처의 성능은 명령어를 얼마나 최소의 시간 내에 실행할 수 있느냐가 중요한 척도가 되어 발전해 왔습니다. 마이크로 아키텍처의 성능향상 기법은 여러가지가 있지만 여기서는 중요한 3가지 정도만 살펴보겠습니다.

 

첫째, 연산장치의 고속화입니다.

실제로 프로세서의 부하에 많은 영향을 미치는 부분이 연산장치라고 할 수 있습니다. 특히 실수를 표현하는 부동소수점 연산은 정수 연산보다 훨씬 복잡하여 성능에 많은 영향을 미칠 수 있습니다. 프로세서에는 이러한 연산처리를 위해 ALU라는 유닛을 두고 있으며, 마이크로 아키텍처는 연산을 고속화하기 위한 다양한 알고리즘을 제공하고 있습니다. 초기에는 ALU만을 사용하였으나, 부동 소수점 연산의 고속처리를 위해 전용 하드웨어인 FPU라는 장치가 만들어지게 됩니다.

 

둘째, 캐시 기술입니다.

프로세서 자체가 아무리 고속성능을 낸다 하더라도 메모리의 액세스 시간이 길어지면 결과적으로 아무런 효과를 못 보게 되죠. 따라서 메모리와 프로세서 사이에 고속의 메모리(SRAM)를 두어 자주 사용되는 데이터를 저장해서 메모리 액세스를 최대한 고속으로 처리할 수 있게 하는 기술이 바로 캐시 기술입니다.

 

셋째, 병렬처리 기술입니다.

마이크로 아키텍처에서는 처리해야 할 명령어를 최대한 동시에 실행하는 방법을 사용하여 처리시간을 단축시키는 기술을 사용하고 있는데 이를 명령어 수준 병렬성이라고 얘기하며, 파이프라인이나 슈퍼스칼라 등의 기술이 있습니다.

 

이렇게 소자의 발전과 더불어 마이크로 아키텍처의 성능 또한 꾸준히 발전되어 왔으며, 특히 병렬컴퓨팅 기술은 마이크로 아키텍처를 뛰어넘어 병렬컴퓨터 및 분산컴퓨터 환경에도 적용이 되어 대용량 처리를 위한 핵심적인 요소로 자리 잡고 있습니다.

5

병렬 컴퓨팅이란 여러 개의 연산을 동시에 병렬적으로 처리하는 방법을 의미합니다.6

▲ 병렬 컴퓨팅

 

좀 더 쉽게 예를 들자면, 두 개의 연산을 처리해야 하는 문제가 있는데 두 개의 연산이 서로 의존성이 없다면 한 개 연산이 완료될 때까지 나머지 연산이 기다리지 않고 동시에 수행하는 것이 바로 병렬컴퓨팅의 기본 개념입니다. 여기서 동시에 수행할 수 있는 대상을 찾는 것이 병렬처리의 가장 시작점이라고 할 수 있으며, 이러한 일련의 과정을 병렬화라고 합니다.

그렇다면 도대체 무엇을 병렬화하는 걸까요?

하드웨어 수준으로 봤을 때, 버스의 대역폭을 늘려서 한 번에 처리되는 비트신호의 양을 늘릴 수도 있고, 여러 명령어를 동시에 수행가능 하도록 단계별로 잘게 나누는 방법도 있을 겁니다. 좀 더 상위의 프로세스나 스레드 수준에서도 마찬가지입니다. 멀티프로세서 또는 클러스터와 같은 분산 컴퓨터 환경에서는 특정작업을 잘게 나눠서 스레드 수준에서의 병렬화를 통해 동시에 수행할 수도 있습니다.

다음 편부터는 본격적으로 이러한 병렬컴퓨팅의 다양한 기법들을 파헤쳐 보도록 하겠습니다.

 

<참고 자료>

Hisa Ando (2011). ‘프로세서를 지탱하는 기술.’ 제이펍

위키백과, https://en.wikipedia.org/

 

7
공유하기