728x90

 잘못된 최적화

 

최적화란?

 Optimization : 우너래 의미는 개선을 하고 더 좋은 무엇인가를 만드는 것이지만 일반적으로 code의 실행 속도를 높이는 것으로 받아들여 진다.

* 프로그램의 실행 속도를 높이는 것

* 실행파일의 크기를 줄이는 것

* 코드의 질을 향상시키는 것

* 출력의 정확성을 높이는 것

* 기동시간(startup time)을 최소화하는 것

* 단위시간당 데이터의 처리량을 늘리는 것(반드시 실행속도와 같지는 않다)

* 저장장치의 부담을 줄이는 것(ex. database size)

** Embedded에서 최적화라 하면 Tuning의 개념도 포함된다.

 

코드를 다 만들고 나서 나중에 최적화 하는 것은 아주 위험하다.

 - 처음 시작할 때부터 성능에 대해 고민하라. 개발이 끝날 때 고칠 수 있다고 생각하면서 소홀히 하지 마라

 - 올바른 코드가 빠른 코드보다 훨씬 더 중요하다.

 

최적화를 해치는 요인들

* 복잡성

* 간접성

* 중복성

* 잘못된 설계

* I/O : 특히 입출력이 어려군데 흩어져 있으면 성능에 아주 많은 영향을 준다.

 

최적화의 필요성

 * 게임 프로그래밍 : 실행환경의 한계까지 가기 때문에 실행 속도에 대한 최적화가 필요, 특히나 delay에 민감하다

* Digital signal porocessing : 대량의 data를 빠르게 digital filtering해야 함

* Embedded platform : 자원이 제한된 환경이라 하드웨어에 맞춰 최대한의 성능을 이끌어 내야 한다

* Realtime system : 정확한 시간에 시작하고, 주어진 시간 내에 작업을 완료해야 한다. 이 환경에서는 알고리즘이 신중하게 다듬어져야 하고, 실행이 정해진 제한시간 안에 된다는 것을 증명해야 한다.

 * 금융 분야, 과학 연구에 사용되는 수치 프로그래밍(numerical programming) : 높은 성능을 필요로 함, 벡터연산(vector operation), 병렬계산(parallel calculation)

 

최적화를 할 때는..

* 가장 느린 코드를 찾아라 : 모든 코드를 고치지 말고 가장 느린(특별하게 느린) 부분만 수정

* 수정한 코드에 대해 unit test : 모든 수정은 side-effect를 유발할 수 있다

* 그럼에도 느릴 수밖에 없는 일은 ->

        1) 실행 속도를 높인다.

        2) 횟수를 줄인다

        3) 정말 필요할 때까지 미루었다가 한다(상대적으로 중요하지 않은 시간에 한다)

 

H/W의 성능은 시간이 갈수록 좋아지고 있다. 그리고 compiler단계의 최적화도 점점 더 좋아지고 있다.

이미 최적화가 되어 있는 library도 더 많아지고 있다.

==> 결론은 최적화보다는 정확하고 (사람이) 알아보기 쉬운 코드를 작석하는 것이 훨씬 중요하다.

728x90

'Programming > 좋은습관들이기' 카테고리의 다른 글

[코드멍키] 생각해 봅시다  (0) 2022.01.08
프로그래머의 종류  (0) 2022.01.03
설계하기  (0) 2022.01.02
Build 관점에서의 language 구분  (0) 2021.12.31
Comment 작성 요령  (0) 2021.12.30
.vimrc option  (0) 2011.07.22
Artistic Style : SourceInsight  (0) 2011.04.28
툴을 사용하자  (0) 2008.07.08
오류처리 - 프로그래밍 습관03  (0) 2008.06.26
오류처리 - 프로그래밍 습관02  (0) 2008.06.24

+ Recent posts