'프로그램을 더 빠르게' 혹은 '예전 보다 느리다' 이런 성능 이슈를 해결하기 위해서는
프로그램을 더 빠르게 만들 수 있는 해결방안이 필요하다. 어떻게 더 빠르게 동작하게 할 수 있을까?
사실 프로그램이 실행되는 시간은 두 가지에 의해 결정된다.
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 (자주 일어나는 일을 빠르게 하라)
모든 명령의 속도를 빠르게하는 것 보다 .자주 일어나는 명령어의 속도를 빠르게 하는 방법이다.
'IT 정보' 카테고리의 다른 글
성능이슈 해결하기①(CPU의 성능지표 cpi,ipc,ips...) (0) | 2023.08.06 |
---|---|
논리연산(and,or,nor,xor,nand,xand,xnor) (3) | 2023.07.30 |
프로토콜이 뭐지?(http,https의 차이점) (3) | 2023.07.25 |
데이터의 기본단위(bit와 byte) (0) | 2023.07.24 |