메모리 모델을 사라지게 만든 두 가지 이슈 : 메모리의 계층성과 프로세서의 병렬성
RAM : Random Access Memory
CPU : Central Processing Unit
프로그램의 성능은 사용된 알고리즘의 효율성과 프로그램을 생성하고 기계어로 번역하는 데 사용된 소프트웨어 시스템, 입출력(I/O) 작업을 포함하여 번역된 명령어를 실행하는 컴퓨터릐 효율성에 의해 결정된다.
Moore의 법칙(Moore's Law) : 18~ 24 개월마다 칩에 집적되는 소자의 수가 2배가 된다.
추상화(abstraction) : 하위 수준의 상세한 사항을 안 보이게 함으로써 상위 수준 모델을 단순화 한다.
자주 생기는 일을 빠르게(common case fast)
병렬성(parallelism) : 일의 양을 균등하게 나누어 실행한다.
파이프라이닝(pipelining) : 병렬성의 한 특징으로 스테이지 별로 일을 나누어 실행한다(양동이, 컨베이어 벨트)- 명령어 실행을 중첩
예측(prediction)
메모리 계층구조(hierarchy of memories) : 최상위 계층에는 비트당 가격이 제일 비싸지만 작고 빠른 메모리를 사용하고, 최하위 계층에는 느리지만 크고 비트당 가격이 제일 싼 메모리를 사용한다.
여유분을 이용한 신용도 개선
명령어 : 컴퓨터 하드웨어가 이해하고 수행하는 명령
어셈블리 언어 : 기계 명령어를 기호 형태로 표현한 것
기계어 : 기계 명령어의 이진 표현
상위 수준 언어의 장점 두가지
- 프로그래머가 영어 단어와 수학 기호를 사용해서 자연스러운 언어로 생각할 수 있다.
- 프로그래머의 생산성을 높여준다는 점이다.
- 프로그램을 개발한 기종과 상관없이 어느 컴퓨터에서든 실행이 가능하다는 점이다.
모든 컴퓨터의 하드웨어가 수행하는 네가지 기본 기능
- 데이터 입력
- 데이터 출력
- 데이터 처리
- 데이터 저장
Processor => datapath + control
컴퓨터의 고전적 구성 요소 다섯가지
- 입력
- 출력
- 메모리
- 데이테 패스
- 제어 유닛
- 성능
CPU 성능과 성능 인자
프로그램의 CPU 실행시간 = 프로그램의 CPU클럭 사이클 수 X 클럭 사이클 시간
(CPU Time) (CPU clock cycles) (Clock Cycle Time) = 1 / 클럭 속도(Clock Rate)
명령어 성능
CPU클럭 사이클 수 = 명령어 수 X 명령어당 평균 클럭 사이클 수
(Clock Cycles) (Instruction Count) (Cycles per Instruction) = CPI
명령어 집합 구조가 같으면 프로그램에 필요한 명령어 수가 같으므로, CPI는 서로 다른 구현을 비교하는 한 가지 기준이 될 수 있다.
명령어당 클럭 사이클 수 = 프로그램 전체 혹은 일부에서 명령어 하나의 실행에 필요한 평균 클럭 사이클 수
고전적인 CPU 성능식
CPU 시간 = 명령어 개수 X CPI X 클럭 사이클 시간
클럭 속도 = 1 / 클럭 사이클 시간 -> 실행속도가 빠르다 = 클럭 사이클이 적다.
CPU시간 = 명령어 개수 X CPI / 클럭 속도
CPI 가 낮다 = 더 빠르다
CPI = CPU클럭 사이클 수 / 명령어 개수
시간 = 초 / 프로그램 = (명령어 수 / 프로그램) * (클럭 사이클 수 / 명령어) * (초 / 클럭 사이클)
CPI는 명령어 배합(instruction mix)에 따라 달라지므로 클럭 속도가 같더라도 명령어 개수와 CPI는 반드시 비교해야 한다.
명령어 배합 : 하나 또는 여러 개의 프로그램에서 수행된 명령어들의 동적 빈도수에 대한 척도
어떤 프로세서는 매 클럭 사이클마다 여러 개의 명령어를 인출하고 수행한다. 이런 방식을 반영하기 위하여 어떤 설계자는 CPI의 역수인 IPC(Instructions per clock cycle, 클럭 사이클당 명령어 수)를 이야기 한다. 어떤 프로세서가 클럭 사이클당 평균 2개의 명령어를 수행한다면 IPC는 2가 되고, CPI는 0.5가 되는 것이다.
CPI < 1 or IPC > 1 인 경우 => 병렬
Amdahl의 법칙(Amdahl's law)
개선 후 실행시간 = 개선에 의해 영향을 받는 실행시간 / 개선의 크기 + 영향을 받지 않는 실행시간
MIPS(millon instructions per second) : 프로그램의 실행속도를 백만 개의 명령어 단위로 나타내는 척도. MPIS 는 실행한 명령어 개수를 실행시간 X 10^6으로 나누어 계산된다.
IMPS = 명령어 개수 / 실행시간 * 10^6
속도는 MIPS에 비례한다.
빠른 컴퓨터일수록 높은 MIPS값을 갖는다.
그러나 컴퓨터의 성능을 비교하는 기준으로 MIPS를 사용하는 데는 세 가지 문제가 있다.
첫째로 MIPS는 단순히 명령어를 실행하는 속도를 나타낼 뿐이지, 그 명령어 하나가 얼마나 많은 일을 수행하는지는 반영하지 못한다. 명령어 집합이 다르면 명령어 개수가 달라지기 때문에 단순히 MIPS 값으로만 성능을 비교할 수는 없다.
둘째로 같은 컴퓨터에서도 어떤 프로그램을 실행하느냐에 따라 MIPS값은 달라진다. 그러므로 컴퓨터의 MIPS값은 하나가 아니다.
마지막으로 많은 명령어를 실행하지만 빠른 명령어를 사용하는 프로그램으로 바꾸는 경우, 컴퓨터 성능과는 반대로 MIPS 값이 작아진다.
MIPS = 명령어 개수 / ((명령어 개수* CPI / 클럭속도 ) 10^6) = 클럭속도 / (CPI*10^6)
'Programming > Architecture' 카테고리의 다른 글
Chapter1 (0) | 2019.05.27 |
---|---|
Chapter3 (0) | 2019.04.18 |