공짜 점심의 끝

암달의 법칙 깨트리기!; Break Amdhal’s Law! 라는 제목의 아티클이 금요일 오전(KST 기준)으로 DDJ에 올라왔다. 아티클의 저자는 허브 서터;Hurb Sutter였다. 일단 그거랑 관련된 얘기로, 2005년에 “The Free Launch Is Over: A Fundamental Turn Toward Concurrency in SW“라는 글을 통해 SW 개발자/엔지니어들의 공짜 점심에 해당하는 것들

  • CPU 클럭의 증가 – 2000년대 초반까진 exponential 하게 증가했음
  • CPU 실행 시간 최적화 – CPU 명령어의 순차 실행 최적화 (파이프라인, 분기예측, Out-of-order-execution 등)
  • Cache 크기 증가

을 통해서 우리가 일반적으로 짜는 SW – Single Process/Single threaded – 의 속도가 “공짜로” 증가했다고 설명한다.

그렇지만 전력 소모와 발열 문제로 인해서 _CPU 클럭이 증가하는 것은 사실상 불가능_하게 되었다. (물론 약간씩이야 증가한다) 그리고 실행 시간 최적화 부분에선 가장 보수적이라고 할만한 CPU 엔지니어들이 원래 순서대로 실행시키지 않는 부분을 떠나 무려 out-of-order-read/write 를 구현하려고하는 것 까지 보면 이미 한계에 가까워졌다는 느낌을 지울 수 없다(물론 이 내용들은 위 아티클 내용).

결국 남는 것은 “당분간 지속 가능한” cache 자체의 크기 증가. 그렇지만 이것만으론 예전처럼 메인 스트림 프로그램 – 싱글프로세스/싱글스레드 – 의 속도 증가는 확실히 더뎌지게 된다. 그래서 선택하게 되는 것은 “트랜지스터 수는 지속적으로 증가할 것이다"이기 때문에 (적어도 근미래에서는) CPU의 성능을 올릴 방법은 코어 수를 늘리는 것 뿐이고 결국엔 SW 쪽에서는 동시 실행을 통해 성능을 올리는 길로 가게 된다는 것이 해당 아티클의 결론.

이런 점도 걸려있고 혁명적인 변화; revolutionary change 가 일어나는 것은 언제나 “성숙된 기술” – 수 년간 기술이 축척되고 관련 교육이 퍼지고, 해당하는 라이브러리나 툴들이 활성화 된 것들 – 에서 발생하며 그 예로 구조적 프로그래밍에서 OOP로 넘어간 사건?을 들고 있다. 비슷한 형태로 지금 점점 더 성숙화되고 있는 – 그렇지만 아직도 상당히 원시적인 – concurrent programming이 등작하지 않겠느냐하는 것.

사실 최근의 .net 프레임웍이나 Java의 방향성 (특히나 병렬연산을 위한 지원)의 변화, 가장 성숙한 언어 중 하나인 C++의 추가되는 라이브러리나(intel TBB, OpenMP, concurrent STL) C++ 0x의 스레딩에 대한 집중 같은 걸 생각해보면 때가 오고 있다 랄까.


Reference