성능 이슈 해결하기 ②(프로그램 더 빠르게 실행하기)

728x90

'프로그램을 더 빠르게'  혹은 '예전 보다 느리다' 이런 성능 이슈를 해결하기 위해서는

프로그램을 더 빠르게 만들 수 있는 해결방안이 필요하다. 어떻게 더 빠르게 동작하게 할 수 있을까?

 

사실 프로그램이 실행되는 시간은 두 가지에 의해 결정된다.

a. 그 프로그램에 얼마나 많은 instruction이 있는가?

b.  instruction을 실행하는 속도가 얼마나 빠른가?

(즉, instrcution을 줄이거나, instruction의 실행 속도를 높여 프로그램을 더 빠르게 만들 수 있다.)

 

1. Instruction 개수 줄이기

1)  실행코드를 짧게 만들기

: 프로그래밍 된 코드가 짧다고 실행코드가 짧아지는 것이 아니라, 아예 머신코드로 바꿨을 때 짧아져야하는 것이다.

 

머신코드에 영향을 미치는 것은 a.언어, b.알고리즘, c.컴파일러

a. 기계어에 가까운 언어를 선택할수록 짧은 실행코드(머신코드)로 만들 수 있다. 

 예를들어, C언어로 길게 쓴 언어를 Python으로 짧게 썼다고 하더라도 머신코드로 바꿨을 때는 C언어의 코드가 더 짧은 머신코드로 실행될 수 있다

b. 같은 언어를 쓰더라도 좋은 알고리즘을 쓴다면 머신코드를 짧게 만들 수 있다.

 

c. 고수준 언어를 더 낮은 수준의 언어로 낮추는 것이 컴파일러의 역할이다. 같은 언어로 같은 코드를 쓰더라도 어떤 컴파일러를 쓰는지에 따라 머신코드의 길이가 달라진다. 컴파일러가 좋다면 머신코드를 짧게할 수 있다.

 

2. Instruction 실행 속도 올리기(cpu의 성능)

cpu 성능이 높으면instruction의 실행속도가 올라갈 수 있다. 하지만 서비스를 운영하는 입장에서 모든 사용자의 물리적 환경을 맞출 수 없기 때문에 어떻게하면 같은 cpu에서 더 빠르게 동작할 수 있을까?라는 고민을 하게된다. 이럴 때 instruction의 실행 속도를 올릴 수 있는 방법은 

 

a. 파이프라인

: 하나의 작업이 끝날 때 까지 기다리지않고 중첩해서 실행할수 있도록 하는 방법. cpu의 효율을 끌어올릴 수 있음. 

1번 가져오기 - 1번 계산하기 - 1번 저장하기
                      - 2번 가져오기 - 2번 계산하기 - 2번 저장하기
                                              - 3번 가져오기 - 3번 계산하기 - 3번 저장하기 

 

b. 예측

: 다음에 필요한 데이터를 미리 예측해서 더 빠른 공간에 복사해두는 것 더 빠른 속도로 자주 쓰는 데이터를 꺼내쓸 수 있기 때문에 효율을 올릴 수 있다. RAM과 CPU 사이에 캐시메모리에 저장해두고 Cache메모리를 빠르게 꺼내 쓸 수 있다.

Cache메모리도 level1,2,3으로 나누어 관리할 수 있다.

 

c. 그 외 최적화 방법

: Make the common cas fast (자주 일어나는 일을 빠르게 하라) 

모든 명령의 속도를 빠르게하는 것 보다 .자주 일어나는 명령어의 속도를 빠르게 하는 방법이다.

 

 

728x90