-
-
C++ 최적화 - 최고 성능을 구현하는 10가지 검증된 기법
커트 건서로스 지음, 옥찬호 옮김 / 한빛미디어 / 2019년 7월
평점 :
리뷰에 앞서 본 리뷰는 한빛 출판 네트워크에서 진행한 ‘나는 리뷰어다’ 이벤트에서 제공받은 책으로 진행한 것을 밝힙니다.

보통 프로그램을 작성할 때, 어떤 프로그램 언어를 이용해 목적하는 기능을 어떻게 구현하는 것에 대해 신경을 쓴다. 동작 시간과 관련한 요구사항이 특별히 없다면 프로그램이 원하는 대로 동작하면 거기서 프로그램 작성은 완료일 것이다. 하지만, 상업용으로 사용되는 프로그램의 경우 시간에 대한 요구사항은 항상 포함된다. PC나 서버에서 동작하는 프로그램부터 아주 작은 크기의 임베디드 시스템에서 동작하는 프로그램까지 아주 다양한 분야에서 다양한 요구사항이 존재한다. 그래서 하드웨어 제약(CPU 속도, 메모리 용량, 배터리 이용 유무 등)이 있으면서도 빠른 속도를 요구하는 시스템에서는 C, C++과 같은 언어를 이용하여 프로그램을 개발하는 경우가 많다. 프로그래밍 언어를 C, C++로 선택했다고 해서, 성능이 원하는 대로 빠르게 나올 수는 없기 때문에, 코드 작성 시 시간 제약을 맞추기 위해, 많은 시간을 최적화에 쏟을 수 밖에 없다. 최적화된 프로그램을 작성하기 위해, 많은 시간을 할애하지만 어떻게 하면 최적화를 할 수 있다는 정답은 없다고 생각한다. 내가 작성한 프로그램이 어떤 CPU와 어떤 메모리를 갖추고 있는 프로그램에서 돌고 있는 지, 어떻게하면 동일 연산을 수행하더라도 메모리 접근을 줄일 수 있는 지, Cache 활용은 어떻게 해야하는지 등 단순 언어의 지식만이 아닌 아키텍쳐적인 지식 및 지금까지 최적화를 하면서 겪은 경험도 중요하다고 생각한다.
업무에서 주로 C 언어로 코드를 작성해 왔기 때문에, C++로 코드를 작성하기 전까지는 C 언어나 어셈블러 레벨의 최적화 자료들을 많이 찾아보았었다. 하지만 C나 어셈블러 그리고 컴파일러의 특성을 이용한 최적화 기법이나 사례들을 정리해 놓은 책들의 수가 많지 않고, 여러 권의 책을 읽어보아도 중복되는 내용이 많아, 아무래도 좀 더 정리되어 있는 자료가 있으면 좋겠다 싶은 아쉬움을 늘 가지고 있었다.
본 책을 리뷰하면서 느낀 점은 저자가 직접 경험하면서 느낀 내용들을 주제별로 그리고 C++이라는 언어가 가지는 특성과 잘 조합하여 정리해 두었다는 점이다. 그리고 주제별로 성능에 영향을 많이 줄 만한 부분들을 다루고 있어, 필요할 때 찾아보기가 쉽게 되어있다는 점도 이 책의 장점이라고 생각한다.
C언어로 개발을 할 때는 못 느끼다가, C++을 이용해서 개발을 하기 시작했을 때, 제일 먼저 어찌해야 할지 답을 잘 찾지 못했던 것이 상당히 많이 이루어지는 메모리 복사이다. C언어와 달리 풍부한 라이브러리가 기본 제공되고, 사용하기 편하기 때문에 무턱대로 사용을 하게 되는데, 이러한 측면은 아무래도 성능에 영향을 많이 주게 된다. 그리고 어떠한 기능을 구현할 때, 여러 템플릿 중 어느 것을 이용해 구현해도 구현을 할 수 있으나, 어떤 것이 더 효율적인 지를 잘 모르는 경우가 있는데, 저자는 이런 부분들에 대해서도 상세히 설명해 주고 있다. 따라서 경험이 적은 C++ 개발자의 경우, 이 책이 상당히 도움이 될 것이라 생각한다. 물론 C++ 을 오랫동안 개발을 해 왔지만, 성능적인 측면을 크게 고려하지 않고 개발을 해 온 개발자들에게도 좋은 조언이 될 수 있는 부분이 많다고 생각한다.
이 책은 Cache level 최적화와 같이 특정 아키텍쳐에 의존적인 내용이나 병렬처리 알고리즘이나 병렬처리를 위한 SSE, AVX 등의 SIMD instruction 사용 기법을 고려한 내용은 다루고 있지 않다. 또 컴파일러 레벨의 최적화 원리 설명이나 linker를 이용한 성능 향상 등의 주제는 다루지 않으므로 관련 내용이 필요한 분들은 다른 책을 참고할 필요가 있다.
이 책을 읽고 예제를 이해하기 위해서는, C++의 문법과 동작 원리를 어느 정도 이해하고 있어야 한다. 그리고 저자가 모던 C++11과 같은 모던 C++의 문법도 이용하여 설명을 하고 있어, 관련 문법도 알고 있으면 더 좋을 것이라 생각한다. 책 내용 자체가 쉽지 않기 때문에, C++ 초보자를 위한 책은 아니지만, 최적화를 고려하는 최적화 초보자 분들께는 좋은 지침서가 될 것으로 생각된다.