(시론)분수의 덧셈과 곱셈
2024-07-31 06:00:00 2024-07-31 06:00:00
최근 두어 달 동안 나는 컴퓨터를 이용해 복잡한 계산을 수행하는 일에 몰두해 있었다. 이 작업은 규모가 매우 커서, 때로는 클러스터 컴퓨터에서 1500개가 넘는 코어를 한꺼번에 사용하기도 했다. 이는 흔히 볼 수 있는 성능의 사무용 컴퓨터 수백 대의 계산력을 동원하는 것과 맞먹는 수준이다. 이처럼 많은 자원을 투입했음에도 불구하고, 중간중간 원하는 결과를 얻기까지 짧게는 며칠, 길게는 몇 주 동안 프로그램을 실행해 둔 채 기다려야 하는 상황이 반복되었다. 몇 시간 정도를 기다리는 일은 비교적 쉽게 참을 수 있지만, 계산이 무사히 끝날지도 모르는 상태에서 주 단위의 시간을 기다리는 것은 매우 큰 불안을 가져오는 일이다. 이에 따라 프로그램을 지속적으로 검토하며, 다양한 가능성을 고려해 걸리는 시간을 줄일 방법을 고민해야 했다.
 
효율성을 높이기 위해, 프로그램에서 시간이 오래 걸리는 부분을 찾아내어, 같은 작업을 여러 다른 프로그래밍 언어로 구현해 실험하는 일이 필요했다. 이 과정에서 때때로 처리 속도에 큰 차이가 나타나는 순간들을 경험할 수 있었다. 이러한 차이의 원인을 검토한 결과, 이것이 각 프로그래밍 언어가 분자와 분모가 매우 큰 분수의 연산을 처리하는 속도의 차이에서 비롯된다는 결론에 이르렀다. 프로그래밍 언어마다 큰 분수를 처리하는 방식이 상당히 다를 수 있다는 점을 깨닫게 되었는데, 이는 이전에는 미처 생각하지 못했던 부분이었다. 하나하나의 분수를 다루는 계산에서 작은 실행 시간의 차이가 누적되면, 전체 계산을 수행하는 데 매우 큰 실행 시간의 차이를 가져올 수 있다. 일주일 걸릴 작업이 하루 정도로 줄어든다면, 연구의 효율성도 당연히 높아진다. 큰 분자와 분모를 가진 분수를 더하고 곱하는 일이 얼마나 까다롭고 복잡하며 중요할 수 있는지를 새삼 실감하게 되었다.
 
우리는 종종 "바퀴를 다시 발명하지 않는다"는 말처럼, 이미 잘 알려진 기초적인 개념이나 방법론에 대해 깊이 생각하지 않는 경향이 있다. 분수의 덧셈 같은 기본적인 수학적 연산도 마찬가지이다. 프로그램을 작성할 때 이렇게 기본적인 부분은 이미 만들어진 도구나 코드를 사용하고, 그 위에 필요한 기능을 추가하여 개발하는 것이 일반적이다. 이러한 연산은 학교에서 배운 간단한 방법에 따라 쉽게 해결할 수 있는 것처럼 보인다.
 
분자와 분모가 큰 분수를 다루는 일은 결국 1, 2, 3과 같은 큰 정수를 처리하는 문제로 귀결된다. 이번 일을 겪기 전까지, 나 역시 자릿수가 매우 큰 정수를 컴퓨터가 어떻게 처리하는지의 문제에 대해 깊이 생각해 본 적이 없었다. 그러나 생각해 보면, 이것은 수많은 계산의 기초를 이루는 매우 중요한 문제이다. 모든 컴퓨터는 이런 종류의 작업을 수행해야만 한다. 이러한 문제는 일상에서도 중요한 역할을 한다. 예를 들어, 컴퓨터의 암호화 연산은 우리가 인터넷을 안전하게 이용하는 데 필수적이며, 이는 큰 정수의 연산을 끊임없이 필요로 한다.
 
나는 연구를 하는 과정에서 감당하기 힘들어 보이는 컴퓨터 계산에 도전하는 일을 즐기는 편이다. 문제를 해결해 나가는 과정에서 얻는 성취감은 물론 크다. 하지만 내가 정말 좋아하는 것은, 수많은 어려운 과정을 극복하는 동안 근본적으로 중요하지만 잊고 있거나 나의 인식 밖에 있던 것들을 마주하는 일이다. 이번에는 큰 정수와 큰 분수의 연산이 그러한 새로운 인식의 대상이었다. 앞으로 만들게 될 프로그램이 전보다 더 단단한 기초 위에 서게 될 것이라는 생각에 설렌다.
 
이철희 고등과학원 수학난제연구센터 연구원
이 기사는 뉴스토마토 보도준칙 및 윤리강령에 따라 김기성 편집국장이 최종 확인·수정했습니다.

ⓒ 맛있는 뉴스토마토, 무단 전재 - 재배포 금지

지난 뉴스레터 보기 구독하기
관련기사