우리는 오랜 배터리수명과 좋은 하드웨어빨을 가진 태블릿PC나 랩탑등을 일상적으로 많이들 사용하고 있습니다. 많은 경우에서 소프트웨어의 성능은 기존 하드웨어보다 보다 좋은 하드웨어에서 더 빠른 성능을 보여주는것을 알 수 있습니다. 예를들면 웹브라우저에서 돌아가는 자바스크립트 인터프린터의 경우 원래의 것보다 많게는 10배에서 20배까지 빠르다는것으 볼 수 있습니다.
하지만, 하드웨어들이 발전해 나가지만 모든 소프트웨어 개발자들이 그 하드웨어에 맞게 기존에 사용했던 코드들을 타이트하게 작성하고 있을까요? 당연히 아닐겁니다. 하지만 소프트웨어 개발자들이 계속해서 발전하고 있는 좋은 툴(IDE, Compiler)을 사용하고 있기때문에, 더 빠른 소프트웨어를 만들어 낼 수 있을겁니다. 예를들면, 소프트웨어 개발자가 사용하는 컴파일러들은 더 향상된 성능을 제공하기위해서 계속해서 발전합니다. 그러므로, 모든 프로그래머들은 같은 코드를 사용하지만 더 빠른 소프트웨어를 만들어 낼 수 있습니다. 고 수준의 프로그래밍 언어를 사용하는 우리의 경우, 아직까지는 컴파일러가 발전할수록 우리의 소프트웨어도 발전하고 있는것이죠. 저는 고수준의 프로그래밍언어의경우 최근 10년간 꾸준히 성능이 발전해 왔다고 믿고(생각하고) 있습니다.
자 간단한 사례를 한번 들어봅시다. 여러분이 계속해서 어떤 값이 누적되는 프로그램을 작성한다고 가정해 봅시다. 1,2,0,4,5 에서 시작해 1,3,3,7,12 로 계산해 나가는 거죠. 많은 C++개발자들이 아래와 같이 구현 할 것입니다.
for (size_t i = 1; i != data.size(); ++i) {
data[i] += data[i - 1] ;
}
당연히, 자바로 짤때도 매우 유사한 코드가 나오겠죠?
가장 최근에 출시된 intel i7 Core를 장착한 Linux Desktop에서, 저는 Java7을 포함해 서로 다른 컴파일러를 통해 시도해 보았습니다. (-O3 flag를 붙여서요.) 그결과 이와같은 결과를 받을수 있었습니다.
컴파일러 |
초당 처리한 명령어 수 |
Java |
1785 |
GCC 4.5 |
520 |
GCC 4.7 |
1667 |
GCC 4.7 (with -funroll-loops) |
2000 |
clang 3.1 |
1923 |
자, JAVA가 GCC를 얼마나 따라잡았는지, 보이시나요?
결론 : 당신이 만약, C++의 속도 때문에 C++을 고집하고있다면, 최적화에 대한 노력이 더 필요 할것입니다.
출처 : http://lemire.me/blog/archives/2012/07/23/is-cc-worth-it/