미래의 프로그래밍 기법에 대해
IBM의 최고 아키텍트인 Catherine Crawford가 쓴 글이 Information Week에 실렸다.
Where’s The Software To Catch Up To Multicore Computing?
하드웨어는 빠른 속도로 클러스터와 멀티코어(multi-core)로 끝없이 발전해나가는데, 소프트웨어는 그런 발전된 하드웨어를 잘 활용할 수 있는 게 별로 없고 동등한 발전을 보여주고 있지 못하기 때문에 그 한계를 드러내고 있다는 내용이다. 현재 대부분의 소프트웨어는 최대 32개 프로세서, 중요한 소프트웨어는 기껏해야 4개 프로세서를 지원할 따름이라고 한다.
오늘날의 수퍼컴퓨팅은 주로 클러스터 리눅스와 멀티코어 프로세서라는 2가지 방향으로 발전하고 있는데, 이 중에서 클러스터란 일반적인 소형컴퓨터를 대규모로 집적하여 마치 하나의 멀티프로세서 수퍼컴퓨터처럼 사용하는 기술을 지칭한다. 또한, 멀티코어란 하나의 CPU가 여러 개의 core를 가짐으로써 마치 여러 개의 CPU를 가진 컴퓨터처럼 동작하는 기술을 의미하며, 실제로는 동일한 작업을 여러 개의 쓰레드(thread)로 나눠서 동시에 처리할 때 그 처리효율을 극대화할 수 있는 하드웨어 기술을 의미한다. 코어의 집적률이 높아지면 덩달아 멀티프로세서(multi-processor)의 상용화에도 도움이 될 것은 짐작하기 어렵지 않다. 그야말로 소형 수퍼컴퓨터가 내 방에 놓이게 되는 것이다.
K선배님께서 며칠 전에 퇴근하는 길에 앞으로는 APL이나 SNOBOL같은 독특한 언어가 다시금 주목받게 될 거라고 말씀하셨는데, 마침 이런 기사를 보게 되니 C 프로그래머로서 위기의식같은 것을 느끼게 된다.
애자일이야기의 김창준님께서도 J언어에 대해서 언급하신 바가 있는데, 이것도 비슷한 성격의 언어로 알고 있다. (J 언어는 APL의 후손이라고 할 수 있음)
일반적인 C나 Java류의 imperative(procedural) programming 방식으로는 멀티코어 하드웨어를 제대로 지원하기가 점점 더 어려워질 것이다. Imperative programming language를 위한 멀티쓰레드 프레임웍이나 분산컴퓨팅 프레임웍이 필수적이다. 언어의 본질적인 속성 상, APL이나 J같은 array programming 방식이 superscalar computing을 좀 더 편하게 지원해 줄 것으로 예상된다.
물론 아직까지는 이 언어들이 이 방면의 기술에 실전활용될 수 있도록 개발되어 있지는 않아서 수퍼컴퓨팅이나 병렬 처리에서는 그다지 주목을 받고 있지 못한 실정이다.
참조: Supercomputing and Parallel Computing Research Groups