반응형
- 공통된 부분 표현식을 하나로 모으라
- 비싼 연산을 싼 연산으로 대체해라: 연산강도의 감축(reduction in strength)
ex. 나눗셈과 나머지 연산은 곱셈보다 훨씬 느리다.
따라서 나눗셈을 곱셈의 역연산으로 대체한다든가, 나누는 수가 2의 승수일 때 마스킹 연산(AND 연산)으로 나머지 연산을 대체하면 성능을 개선할 수 있을 것이다.
- 루프를 펼치거나 제거하라
루프를 준비하고 실행하는 데에는 시간과 메모리가 든다.
만약 루프가 너무 길지 않다면, 반복주기 내용을 쭉 장성하는 게 더 효율적일 수 있다.
for i in range(3): a[i] = b[i] + c[i]
대신
a[0] = b[0] + c[0] a[1] = b[1] + c[1] a[2] = b[2] + c[2]
을 사용하면 루프, 특히 분기(branching)의 오버헤드가 없어진다.
- 빈번히 사용되는 값을 캐싱하라
캐싱연산은 밖에서는 보이지 않는 게 제일 좋다.
그래서 프로그램을 더 빠르게 하는 효과 외에는 나머지 부분에 영향이 없어야 한다.
- 특수한 메모리 할당 함수를 작성하라
- 입력과 출력을 버퍼링하라
버퍼링을 하면 트랜잭션들을 모아 한번에 처리하기 때문에 잦은 연산을 가능한 한 적은 오버헤드로 수행할 수 있다.
예를 들어, C 프로그램이 printf를 호출하면 버퍼가 꽉 차거나 명시적으로 비워지기 전까지는 OS로 넘기지 않는다.
- 특수한 경우를 따로 처리하라
- 결과를 사전계산하라
값을 사전계산해서 필요할 때 바로 쓸 수 있게 준비해두면 프로그램을 더 빠르게 만들 수 있다.
- 근사값을 사용하라
정확성이 중요하지 않은 경우라면 정밀도가 더 떨어지는 데이터 타입을 사용한다.
- 저수준 언어로 재작성하라
반응형
'개발 > 기타' 카테고리의 다른 글
api 문서화, 좋은 예시 (2) | 2017.10.31 |
---|---|
[GitHub] Star와 Fork(Fork와 Clone) (4) | 2017.09.28 |
프로세스(Process) (2) | 2017.09.20 |
[HTTP] GET 과 POST (4) | 2016.11.29 |
[앱스토어 어플 등록]3. Itunes Connect에서 앱 만들기 (2) | 2016.11.24 |
댓글