728x90
1.1 최적화는 소프트웨어 개발의 일부입니다. : 최적화 역시 코딩에 속한다.
최적화가 이루어지는 단계
전통적인 소프트웨어 개발 프로세스 : 프로젝트 통합 및 테스트 단계
애자일 프로세스 : 프로토타입으로 빠르게 기능 구현
최적화의 목표
속도, 메모리 사용량, 전력 소비 등에 대한 고객의 요구를 충족
성능저하는 버그나 기능 누락처럼 용납할 수 없는 문제일 수 있다.
버그 수정 vs 성능 향상
버그 수정 : ‘있다/없다’로 판단
성능 향상 : 지속해서 이어지는 범위, 느린 곳을 개선하면 그 다음 느린 곳을 개선함.
최적화는 과학적 사고방식을 더 많이 요구하는 과학 실험이다.
관찰 -> 검증 -> 가설 -> 지지 or 반박 -> 측정 실험
1.2 최적화는 효과적입니다.
숙련된 팀이 많은 시간을 들여 작성한 코드조차도 보통 30% ~ 100%의 속도 향상을 이룰 수 있다.
코드를 열심히 고쳐도 10배이상 성능향상은 어렵다.
- 새로운 알고리즘이나 자료구조로 해결 가능
1.3 최적화해도 괜찮습니다.
효율적인 코드를 작성하는 시간과 느리고 낭비되는 코드를 작성하는 시간은 같다.
단일코어프로세서 발전의 한계까지 왔기 때문에 최적화는 필수가 되어 간다.
1.4 여기에 나노초, 저기에 나노초
효율성은 서버를 100대 쓸지, 500대 쓸지, 1000대 쓸지를 결정짓는 차이
1.5 C++코드 최적화 전략 요인
더 좋은 컴파일러를 사용하라.
C++ 표준을 준수하는 컴파일러를 사용
컴파일러를 더 잘 사용하라
최적화 설정을 키기만 해도 몇 배는 빨라진다.
더 좋은 알고리즘을 사용하라.
최적화의 빅뱅은 최적의 알고리즘 선택에서 비롯됨.
대부분의 최적화는 30% ~ 100%정도 성능향상을 이룬다.
운이 좋으면 성능을 3배로 높일 수 있고, 더 효율적인 알고리즘을 찾을 수 없다면
엄청난 성능 향상을 기대하기는 어렵다.
최적의 알고리즘을 찾자.
더 좋은 라이브러리를 사용하라.
라이브러리를 통해 쉽게 속도향상을 할 수 있다.
메모리 할당과 복사 줄이기
메모리 관리자 호출 비용은 수천 줄에 달하기 때문에 자주 호출 하지 않는 것이 좋다.
생성자/대입연산자/I/O를 최적화 하는 것이 좋다.
계산 제거하기
재귀함수처럼 호출이 여러 번 되는 것들은 큰 문제가 된다.
더 좋은 자료구조 사용하기
자료구조에 의존하는 런타임 비용을 갖으며, 서로 다른 메모리 관리자를 사용한다.
동시성 증가시키기
코어의 개수를 최대한 활용하자.
메모리 관리자 최적화 하기
동적 메모리 할당을 관리하기 위해 C++ API를 활용하자
728x90
'Language > C++최적화' 카테고리의 다른 글
C++최적화 (2단원) (0) | 2021.09.21 |
---|
댓글