리지 경제학

오늘의 역사

수식을 실행 코드로 바꾼 포트란 70년

1956년 IBM 704용 매뉴얼 발행...프로그램 작성 부담 줄이고 수작업으로 짠 프로그램에 버금가는 실행 효율 추구

리지

1956년 10월 15일2분

Illustration by Gemini

70년 전 오늘, 1956년 10월 15일 미국 뉴욕의 IBM이 51쪽짜리 IBM 704용 포트란(FORTRAN) 프로그래머 참조 매뉴얼을 발행했다. 개발 책임자 존 배커스는 훗날 1954년의 상황을 돌아보며 프로그램 작성과 오류 수정에 운영비의 최대 4분의 3이 들었다고 회고했다. 이 비용에는 프로그래머 인건비와 오류를 찾는 데 든 컴퓨터 가동 비용이 포함됐다.

당시 프로그래머들은 계산 과정을 기계의 명령과 메모리 주소에 맞게 풀어 적어야 했다. 명령과 주소를 기호로 적는 방식과 자동 프로그래밍 시스템도 이미 있었지만 배커스 팀은 수식에 가까운 문장으로 계산을 표현하면서 실행 효율이 높은 프로그램까지 만들려 했다. 수식으로 계산 과정을 적는 프로그래밍 언어 포트란에서는 사람이 수식과 계산 순서를 적으면 번역 프로그램인 컴파일러가 이를 IBM 704가 실행할 수 있는 명령인 기계어로 바꿨다.

배커스는 포트란에 앞서 복잡한 기계어 작성을 돕는 IBM 701 컴퓨터용 초기 자동 프로그래밍 시스템 Speedcoding을 개발했다. 그는 1979년 인터뷰에서 미사일 궤적 계산 프로그램을 작성하는 일이 싫어 Speedcoding을 만들기 시작했다며 "게으름"을 개발 동기로 들었다. 이후 IBM 704용 포트란 프로젝트에서는 프로그램 작성의 편의성과 함께 번역된 프로그램의 실행 효율이 핵심 과제가 됐다.

자동 프로그래밍 시스템으로 작성한 프로그램의 실행 속도가 느리다는 것을 경험한 기술자들은 컴퓨터가 번역한 프로그램의 효율을 의심했다. 프로그램 작성 시간을 줄여도 실행 시간이 크게 늘면 컴퓨터 가동 비용이 증가하기 때문이다. 배커스 팀은 수작업으로 작성한 프로그램에 버금가는 실행 효율을 확보해야 포트란이 보급될 수 있다고 판단했다.

배커스 팀은 컴파일러가 생성하는 실행 프로그램에서 불필요한 반복 계산을 줄이는 등 실행 효율을 높이는 최적화에 역량을 집중했다. 배커스의 회고에 따르면 1957년 초까지 대체로 포트란에 관심이 적었던 고객 기관들도 실제 실행 프로그램이 나오기 시작하자 관심을 보였다. 그해 4월 고객들은 포트란 컴파일러를 전달받았다.

1957년 개발팀 논문에는 하루 교육을 받고 매뉴얼을 더 살펴본 사용자가 포트란 47문장으로 프로그램을 4시간 만에 작성한 사례가 나온다. 컴파일러는 이 프로그램을 약 1000개의 기계 명령으로 바꿨다. 첫 실행에서 잘못된 결과가 나오자 사용자는 자신이 쓴 포트란 문장에서 오류를 찾아 수정한 뒤 다시 번역한 프로그램으로 올바른 결과를 얻었다. 사용자는 계산을 기계 명령으로 풀어 쓰는 작업을 컴파일러에 맡긴 덕분에 자신이 적은 계산 과정을 살피며 오류를 수정할 수 있었다.

초기 포트란은 IBM 704에 맞춘 프로그래밍 언어였다. 1956년 매뉴얼에는 IBM 704의 콘솔 표시등을 켜고 끄는 문장과 스위치 상태에 따라 실행 경로를 나누는 문장도 들어 있었다. 이후 다른 제조사들이 자사 기종에 맞는 컴파일러를 개발하고 언어의 공통 규격을 정하는 표준화가 진행되면서 포트란은 여러 기종으로 보급됐다. 포트란은 이처럼 다른 기종에서도 사용할 수 있도록 구현되고 언어가 정비되면서 기계 의존성이 줄고 다른 기종으로 프로그램을 옮겨 쓰기도 쉬워졌다.

매뉴얼 발행 70년 뒤에도 포트란은 과학 계산에 쓰인다. 미국 플래시 계산과학 센터가 천체 가스 흐름 등을 모의실험하려고 개발한 시뮬레이션 소프트웨어 FLASH는 프로그래밍 언어 FORTRAN90과 C로 작성돼 있다. 연구자는 물리 법칙을 수치 계산 절차로 구현한 이 프로그램으로 가스가 압축되고 이동하는 과정을 계산한다. FLASH는 계산 공간을 작은 구역으로 나누어 각 구역의 가스 흐름을 계산한다. 더 세밀한 계산이 필요한 구역을 더 작게 나누는 격자 방식을 지원해 필요한 곳에 계산을 집중할 수 있고, 여러 프로세서에 계산을 나눠 맡길 수도 있다.

이 글이 어땠나요?

눌러 주시면 다음 글을 쓸 때 소중한 참고가 됩니다.