공짜 점심의 끝

암달의 법칙 깨트리기!; Break Amdhal’s Law! 라는 제목의 아티클이 금요일 오전(GMT +9기준)으로 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]

ps. 이 글을 시작으로 지난 주에 읽었던 혹은 다시 읽은 허브 서터 아티클들을 정리하려 합니다.

Published by

rein

나는 ...

5 thoughts on “공짜 점심의 끝”

  1. 제목 보고 no free lunch theorem을 떠올렸는데 좀 다른 얘기로군. 병렬GA도 다시 떠오르는 주제가 되려나······

  2. 음 지금 요약하고 있는 허브 서터의 다른 아티클에 나온 내용이지만,
    저 글에서 밝힌 이유들 때문에 “한 코어가지고 빨라지는 것”은 사실상 막바지라 결국엔 “병렬로 일을 어떻게 더 만들어내는가”가 주제가 되어갈것같긴해요. 그렇지만 전 GA는 하나도 모른다는거[…]

  3. Pingback: rein's world
  4. 피앙 / 축척 -> 축적 맞는듯

    SW가 OS를 포함하는 용어인진 나도 모르겠다. 구분선 나름인듯. 근데 여기서는 응용 프로그램 관점에서 얘기하는 거라서 OS는 빼고 생각해주자.

Leave a Reply