(ⓒ홍종옥 기자)

최근 사물인터넷과 인공지능이 비약적으로 발전하며 슈퍼컴퓨터에 대한 관심도 증가하고 있다. 슈퍼컴퓨터는 보통의 컴퓨터보다 월등한 성능을 가진 컴퓨터로, 일기 예보, 암호 해독, 양자역학적 시뮬레이션 등 복잡한 계산이 필요한 작업에서 핵심적인 역할을 담당하고 있다. 4차 산업혁명 시대에 더욱 화려한 활약이 기대되는 슈퍼컴퓨터와 그를 둘러싼 여러 컴퓨터 개념을 알아보자.

슈퍼컴퓨터의 연산은 얼마나 빠를까

슈퍼컴퓨터의 가장 중요한 요소가 연산 속도임은 당연하다. 연산 속도를 비교하기 위한 값으로 가장 직관적인 것은 IPS(Instructions Per Second)로 컴퓨터의 중앙처리장치가 1초에 처리하는 명령의 수를 뜻한다. 그러나 복잡한 명령어 집합을 갖는 CISC(Complex Instruction Set Computer)의 경우, 명령의 종류에 따라 처리하는 시간이 다르기 때문에 IPS를 정확히 정의하기 어렵다. 또한 데이터의 양과 종류에 따라서도 명령의 처리 속도는 달라지며, 같은 데이터와 같은 명령이라도 명령의 처리 순서가 달라지면 속도가 달라지는 경우가 많아 IPS 대신 컴퓨터의 성능을 비교하기 위한 값이 필요하다.

FLOPS(Floating Point Operations Per Second)는 컴퓨터가 1초에 처리할 수 있는 부동 소수점 연산의 수를 뜻하며, 슈퍼컴퓨터의 성능을 정량적으로 비교하고자 미국 로렌스 리버모어 국립 연구소의 프랭크 맥메이헌이 제안했다. 부동 소수점은 아주 큰 수, 혹은 아주 작은 수를 컴퓨터에서 나타내는 방법으로, 소수점의 위치를 유동적으로 바꿀 수 있기 때문에 필요에 따라 소수점 앞의 자릿수와 뒤의 자릿수를 조절할 수 있다. 이와 같은 장점 때문에 부동 소수점은 컴퓨터에서 실수를 나타내는 방법으로 널리 쓰이고 있으며, FLOPS는 부동 소수점으로 표현된 실수에 대한 연산 횟수를 측정한다. FLOPS 기준 현재 세계에서 가장 뛰어난 슈퍼컴퓨터는 미국의 컴퓨터 하드웨어 회사 IBM이 보유하고 있으며, 약 15경 FLOPS의 실측 연산속도를 갖는다.

 

1,024마리의 닭과 2마리의 황소

슈퍼컴퓨터는 일반 컴퓨터보다 FLOPS가 훨씬 높지만, 이것이 슈퍼컴퓨터를 이루는 모든 부품의 우수성을 의미하지는 않는다. 슈퍼컴퓨터는 분명 우수한 부품으로 이뤄지지만, 일반 컴퓨터와 대비되는 엄청난 성능의 차이는 각 부품의 차이가 아니라 부품의 수와 여러 부품을 효율적으로 연동하는 구조에서 비롯한다. 근래에는 개인용 컴퓨터 역시 단일 중앙처리장치(CPU)가 아닌 여러 개의 중앙처리장치를 연동해 동작하는 경우가 많아지고 있으며, 이처럼 하나의 큰 문제를 여러 작은 문제로 쪼개서 여러 처리장치로 동시에 연산하는 방식을 병렬연산, 혹은 병렬컴퓨팅이라 부른다.

슈퍼컴퓨터의 초기 개발자인 세이모어 크레이가 창립한 슈퍼컴퓨터 전문회사 크레이는 1976년 상업적으로 가장 성공한 슈퍼컴퓨터 중 하나인 Cray-1을 출시했다. 이후 전자공학이 빠르게 발전함에 따라 컴퓨터에 쓰이는 처리장치의 성능 역시 기하급수적으로 발전했으나, 슈퍼컴퓨터가 산업 현장에 활용되기 위해선 당시 최고의 처리장치보다도 빠른 성능이 필요했다. 따라서 여러 처리장치를 함께 사용해서 처리 속도를 높이는 병렬연산의 개념이 곧바로 슈퍼컴퓨터에 적용되기 시작했다. Cray-1의 차기작인 Cray-2에서는 8개의 중앙처리장치를 효과적으로 연결하는 데 성공했고, 세계에서 두 번째로 빠른 연산속도를 달성하며 많은 주목을 받았다. 당시 이보다 더 빠른 슈퍼컴퓨터로 소련의 M-13이 있었으나, 출시된 나라의 경제 상황으로 인해 시장에서 큰 주목을 받지는 못했다.

70년대에 Cray-1의 성능을 따라잡을 수 있는 슈퍼컴퓨터는 ILLIAC IV가 유일했다. ILLIAC IV는 병렬연산을 극단적으로 적용한 경우로, 256개의 처리장치를 연동하는 방식으로 설계되었으나 기술적 한계로 인해 실제로는 64개의 처리장치를 연동하는 데 그쳤다. 크레이는 이와 같은 거대한 병렬연산(Massively Parallel Computing)을 다음과 같이 비난했다. “만약 당신이 밭을 갈려고 한다면, 2마리의 황소를 쓰겠습니까, 아니면 1,024마리의 닭을 쓰겠습니까?” 당시에는 크레이의 말처럼 소규모의 병렬연산이 더 성공적이었으나, 이후 병렬연산과 관련한 소프트웨어가 발전하며 슈퍼컴퓨터는 거대한 병렬연산으로 진화했다. 결과적으로 1,024마리의 닭이 황소를 이긴 것이다.,

 

왜 슈퍼컴퓨터는 리눅스를 사용할까

운영체제(Operating System)는 컴퓨터 프로그램을 실행하기 위해 컴퓨터의 하드웨어 자원을 효율적으로 분배하는 시스템 소프트웨어다. ILLIAC IV에 적용된 거대한 병렬연산은 당시에는 크게 효율적이지 않았지만, 처리장치의 수를 늘림으로써 각각의 처리장치의 한계를 극적으로 뛰어넘을 수 있다는 가능성을 보여주었다. 거대한 병렬연산에 대한 필요가 늘어나면서 이를 효율적으로 수행할 수 있는 운영체제가 등장하기 시작했다. 1982년, 운영체제의 발전에 힘입어 오사카 대학교에서 512개의 처리장치를 사용하는 슈퍼컴퓨터가 개발되었으며 이 컴퓨터는 3D 컴퓨터 그래픽 제작에 사용되었다. 현대의 슈퍼컴퓨터는 수만에서 수십만 개의 처리장치를 연동해 사용하고 있으며, 이들의 연산은 운영체제에 의해 효율적으로 조율된다.

개인용 컴퓨터의 운영체제는 대부분 마이크로소프트의 윈도우나 애플의 맥OS를 사용하고 있다. 그러나 슈퍼컴퓨터는 대부분 리눅스를 운영체제로 채택하고 있고, FLOPS 기준 세계 500대 슈퍼컴퓨터는 현재 모두 리눅스를 운영체제로 사용한다. 리눅스와 윈도우를 예시로 비교하면서 슈퍼컴퓨터에 효율적인 운영체제는 어떤 특성이 있는지 살펴보자.
리눅스와 윈도우의 가장 큰 차이점은 수정 가능성이다. 리눅스는 개인 개발자 리누스 토발스가 개발한 운영체제로 전체 코드가 무료로 공개되어 있으며, 사용자는 목적에 맞게 리눅스를 수정해서 사용할 수 있다. 그러나 윈도우는 마이크로소프트사가 개발해 유지 관리하고 있으며, 전체 코드는 회사 외부로 공개되지 않아 수정이 불가능하다. 실제로 개인 사용자가 운영체제를 수정해야 할 경우는 거의 없지만, 슈퍼컴퓨터의 경우 운영체제에 따라 성능이 크게 달라질 수 있기 때문에 리눅스처럼 수정 가능한 운영체제가 유리하다. 이미 여러 목적에 따라 다르게 수정된 리눅스의 여러 버전이 개발되었으며, 대부분 무료로 배포되고 있기 때문에 리눅스가 더 경제적이기도 하다.

윈도우의 높은 시장 점유율은 수많은 해커를 윈도우로 불러들였다. 네트워크를 통해 확산하는 바이러스의 대부분은 윈도우를 대상으로 만들어졌으며, 하나의 운영체제를 대상으로 하는 바이러스는 다른 운영체제에서는 무용지물인 경우가 대부분이다. 리눅스는 개발자가 아닌 사용자에게는 큰 인기를 끌지 못하고 있어, 리눅스를 대상으로 하는 바이러스도 거의 없다. 따라서 리눅스는 윈도우에 비해 네트워크 상의 양산형 바이러스에 비교적 안전하다. 또한, 리눅스는 윈도우나 맥OS에 비해 새로운 소프트웨어를 실행하기 위해 거쳐야 하는 보안 단계가 많아 사용자가 알지 못하는 사이에 바이러스가 실행될 확률이 낮다.

커널은 운영체제의 가장 핵심적인 부분에 해당하는 프로그램으로 중앙처리장치와 메모리, 그리고 입출력장치를 비롯한 기타 장치를 제어하고 연결한다. 리눅스의 커널은 윈도우의 커널에 비해 세 가지 장점을 갖는다. 첫 번째로, 리눅스의 커널은 운영체제가 다룰 수 있는 대부분의 기능을 제공해 서로 다른 프로그램이 함께 상호작용하기 용이하다. 리눅스에서는 파일 시스템, 기기 드라이버, 메모리 관리, 작업 스케줄러 등 모든 프로그램이 단일의 커널 공간(Kernel Space)에서 실행되기 때문에 서로 다른 프로그램끼리 상호작용하기가 쉽고 빠르기 때문이다. 하지만 윈도우의 커널은 메모리 관리, 스케줄러 등의 기본적인 기능만 커널에서 제공하고 나머지는 사용자 공간(User Space)에서 제공하기 때문에 마이크로커널(Microkernel)이라 불리며, 서로 다른 프로그램끼리 상호작용하기 위해서는 추가적인 작업이 필요하다. 두 번째, 윈도우의 커널이 리눅스보다 속도 면에서 뒤처진다. 왜냐하면 리눅스는 모든 코드가 공개되어 있어 개발자 및 운영자가 최적화를 통해 성능을 향상시키기 용이하기 때문이다. 마지막으로, 리눅스에서는 사용자와 개발자가 성능 향상을 위해 다양한 시도를 쉽게 할 수 있다. 과학 계산에 사용되는 대부분의 사용자 개발 환경, 수치 라이브러리 및 응용 소프트웨어 등이 오픈소스 기반으로 리눅스 환경에서 우선적으로 개발되었기 때문이다. 

 

분산연산, 개인 컴퓨터를 슈퍼컴퓨터로

마지막으로 윈도우는 소수의 개발자만 발전시킬 수 있지만, 리눅스는 전 세계의 개발자가 수정할 수 있어 다양한 방향으로 빠르게 발전할 잠재력을 보여줬다. 이와 같은 경향은 슈퍼컴퓨터에 다시 한번 적용되어 한 장소에 모여 있는 하나의 커다란 슈퍼컴퓨터가 아닌, 여러 장소의 분산된 수많은 컴퓨터를 연동해 하나의 슈퍼컴퓨터처럼 사용하는 분산연산으로 발전했다.

분산연산은 병렬연산과 많은 공통점을 가지며 이 둘을 구분하는 명확한 경계는 없다. 예전에는 병렬연산은 여러 처리장치가 하나의 메모리를 공유하는 반면, 분산연산은 각각의 처리장치가 각자의 메모리를 따로 사용한다고 구별하기도 했으나, 현재는 이와 같은 구분보다는 처리장치 간의 결합된 정도를 기준으로 구별한다. 현재 대부분 슈퍼컴퓨터에 해당하는 클러스터 시스템은 수백 수천 대의 서버를 고속네트워크로 연결한 형태로 서버별로 메모리를 개별적으로 사용한다. 따라서 슈퍼컴퓨터는 병렬 시스템인 동시에 분산 시스템으로 볼 수 있다.

분산연산의 극단적인 예시는 개인용 컴퓨터를 인터넷을 통해 연결해 슈퍼컴퓨터처럼 사용하는 것이다. 개인용 컴퓨터는 대부분의 시간에 잉여 처리 능력을 갖추고 있어서, 이를 낭비하지 않고 인터넷을 통해 병렬연산처럼 연결해서 거대한 슈퍼컴퓨터를 만드는 것이 주요 개념이다. 추가적인 기기의 설치와 생산 없이도, 개인 컴퓨터 사용자를 참여시킬 수만 있다면 세계에서 가장 많은 처리장치를 거느린 슈퍼컴퓨터를 만들 수 있다는 점은 아주 매력적이다. 하지만 하나의 큰 작업을 여러 개의 컴퓨터에서 나누어 처리할 때, 컴퓨터마다 나누어진 작업 간에 서로 정보를 공유해야 계산할 수 있는 경우가 많으며, 이 때문에 작업과 작업 사이의 통신이 병렬연산과 분산연산에서는 가장 많은 시간을 차지한다. 따라서 인터넷을 통한 작업 간의 통신은 처리 시간보다 많은 시간을 필요로 할 수도 있으며, 분산연산이 그 장점을 온전히 발휘하기 위해선 하나의 컴퓨터 안의 부품끼리 통신하는 것처럼 빠르게 통신할 수 있는 네트워크가 필요하다.

한국과학기술정보연구원(KISTI)가 보유한 슈퍼컴퓨터 5호기 누리온은 2018년 독일 프랑크푸르트에서 개최된 국제슈퍼컴퓨팅컨퍼런스(ISC’18)에서 FLOPS 기준 세계 11위를 기록했다. Cray의 제품으로 2경 5천7백조 FLOPS의 이론성능을 갖는 이 슈퍼컴퓨터는 한국과학기술정보연구원이 보유한 GPU 기반 시스템과 함께 국내 여러 연구개발에 슈퍼컴퓨터 자원을 제공하며 국가 과학기술 발전에 기여하고 있다. 슈퍼컴퓨터가 과학기술의 밝은 미래를 계산하기를 기대해보자.

저작권자 © 카이스트신문 무단전재 및 재배포 금지