Jeff Dean & Sanjay, 코드 성능 향상 팁 공개!
성능 최적화는 Google 초기부터 중요했으며, 코드의 가독성을 해치지 않는 선에서 성능 개선을 추구해야 함.
Knuth의 말을 인용하며, 97%의 시간은 작은 효율성에 매달릴 필요 없지만, 중요한 3%를 놓치지 말아야 함을 강조함.
알고리즘 개선, 벌크 API 활용, 뷰 타입 사용 등 구체적인 기술과 함께, 프로파일링 도구 활용의 중요성을 강조함.
성능 튜닝의 핵심 원리
Jeff Dean과 Sanjay Ghemawat은 성능 튜닝의 핵심으로 알고리즘 개선을 꼽으며, O(N²)을 O(N log N) 또는 O(N)으로 변경하는 것이 중요하다고 강조한다. 구체적으로, 정렬된 리스트 교차를 해시 테이블을 활용하여 O(N log N)에서 O(N)으로 개선하는 사례를 제시한다. 따라서, 자료구조 선택이 성능에 미치는 영향이 크다는 것을 알 수 있다.
API 설계 및 벌크 연산
API 설계 시 벌크 API를 제공하여 API 호출 비용을 줄이는 것이 효과적이다. MemoryManager::LookupMany 인터페이스 추가를 통해 여러 개의 텐서를 한 번에 조회하도록 개선하고, ObjectStore::DeleteRefs API를 활용하여 락킹 오버헤드를 줄인다. 반면, API 변경은 기존 코드에 영향을 줄 수 있으므로, 캡슐화를 통해 변경 범위를 최소화해야 한다.
프로파일링 도구 활용 및 측정
성능 개선 전, pprof 및 perf와 같은 프로파일링 도구를 사용하여 코드의 병목 지점을 파악하는 것이 필수적이다. 또한, 마이크로벤치마크를 통해 성능 개선 효과를 검증하고, 하드웨어 성능 카운터를 활용하여 캐시 미스와 같은 문제를 식별할 수 있다. 결과적으로, 측정은 성능 개선의 성공 여부를 판단하는 핵심 지표가 된다.