본문 바로가기
Language/C++최적화

C++최적화 (1단원)

by y.j 2021. 9. 17.
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

댓글