-
최적화란
- C++ 최적화 전략 코드
- 더 좋은 컴파일러
- 더 좋은 알고리즘
- 더 좋은 라이브러리
- 메모리 할당과 복사 줄이기
- 계산 제거하기
- 더 좋은 자료구조 사용하기
- 동시성 증가하기
- 메모리 관리자 최적화 하기
- C++ 최적화 전략 코드
-
컴퓨터 하드웨어와 최적화
-
메모리는 느립니다
메모리에 접근하는 비용은 프로세서의 다른 비용들을 압도합니다 ( 메인 메모리는 게이트와 레지스터보다 매우 느립니다 ) -
메모리는 워드 단위로 접근합니다
저 사양 프로세서는 한번에 1바이트만 가져올 수 있을지도 모릅니다. 데스크탑 급 프로세서는 한번에 64바이트를 가져올 수 있습니다) int, double, 포인터처럼 여러 바이트를 갖는 자료형을 가져올 때, 데이터를 구성하는 바이트가 실제 메모리에서는 두 워드에 걸쳐 있을 수 있습니다 이를 정렬되지 않은 메모리 접근이라고 합니다 -
메모리마다 접근 속도가 다릅니다
컴퓨터에는 프로세서와 매우 가까운 곳에 임시 저장소인 캐시 메모리가 있습니다. 인접한 위치의 메모리가 멀리 떨어진 곳의 메모리보다 (평균적으로) 더 빨리 접근할 수 있습니다 -
워드를 저장하는 방법에는 빅 엔디언과 리틀 엔디언이 있습니다
-
메모리는 한정된 자원입니다
-
명령 실행은 느립니다
-
컴퓨터는 의사 결정을 잘 하지 못합니다
-
프로그램 실행에는 여러 스트림이 있습니다
한 프로그램에서 다른 프로그램으로 컨텍스트를 전환하면 비용이 훨씬 높습니다 -
운영체제 기능을 호출하는 비용은 높습니다
-
문장의 비용이 똑같이 높지는 않습니다
c++에서 int를 다른 int로 대입하는 대입문은 C의 대입문과 동일한 작업을 수행합니다. 그러나 BigInstance i = OtherObject와 같은 문장은 구조체 전체를 복사합니다 -
문장은 순서대로 실행되지 않습니다
컴파일러는 성능을 향상하려고 내부에서 문장을 재정렬하고 때로는 순서를 변경합니다. 동기화 코드는 동시에 실행될 수 있는 스레드가 데이터를 공유함으로써 얻을 수 있는 동시성의 양을 줄입니다
-
-
성능 측정
- 측정 도구
- 프로파일러
프로그램 실행 중 호출된 각 함수를 수행하는데 걸린 시간을 정리 소프트웨어 - 타이머
개발자가 오래 실행되는 작업을 측정하기 위해 타이머로 실행을 수행 1. 상대적 성능을 측정하세요 2. 모듈 테스트를 측정해 반복성을 향상하세요 3. 측정 기준을 사용해 성능을 튜닝하세요 4. 여러 차례 반복한 결과의 평균으로 정확도를 높이세요 5. 우선순위를 높여 운영체제의 비결정적 행동을 줄이세요 6. 비결정적인 무언가가 발생해도 앞으로 나아가세요
- 프로파일러
- 측정 도구
-
문자열 최적화
- 더 좋은 알고리즘
- 더 좋은 컴파일러
- 더 좋은 라이브러리
-
알고리즘 최적화
-
동적 할당 변수 최적화
-
문장 최적화
-
라이브러리 최적화
-
검색 및 정렬 최적화
-
자료구조 최적화
-
입출력 최적화
-
동시성 최적화
-
메모리 관리 최적화