강의 주소 : 연남대 최규상 교수님 컴퓨터 구조 강의 (2015년)
Chapter 1. Computer Abstractions and Technology
1.1 Introduction
1) 컴퓨터의 발전
- 컴퓨터 기술의 진전
- 새로운 응용 프로그램들이 실현 가능해짐
- 자동차 내부의 컴퓨터, 스마트폰, WWW(World Wide Web), 검색 엔진 등
- 모든 것이 컴퓨터화 되고 있음
2) 무어의 법칙(Moore's Law)
1965년, Intel의 공동 설립자인 Gordon Moore가 제시한 것으로, 반도체 집적회로의 성능이 2년마다 2배로 증가
한다는 법칙
3) 컴퓨터의 종류
1. Personal computers(개인용 컴퓨터)
- 일반적인 용도로 사용
- 다양한 종류의 소프트웨어
- 비용과 성능이 다양
2. Server Computers(서버 컴퓨터)
- 네트워크 기반
- 높은 수용성, 성능, 신뢰도 -> 고가, 대용량, 고성능
3. Super Computers(슈퍼 컴퓨터)
- 복잡한 과학적, 공학적 계산에 사용
- 초고성능이지만 초고가, 전력소모, 유지비용 등의 문제 존재
- 제한된 곳에서 사용
4. Embedded Computers(임베디드 컴퓨터)
- 시스템의 요소(컴포넌트)로서 구성되어 있음
- 제한된 전력, 성능, 비용에서 돌아갈 수 있도록 요구됨
- 스마트폰이나 테블릿도 임베디드 시스템이라고 할 수 있음
4) 컴퓨터에서 사용되는 기본 단위
5) PostPC 세대
-> 기존의 PC보다 스마트폰, 태블릿의 사용량이 증가되는 추세
PMD(Personal Mobile Device)의 사용 증가
- 배터리 사용
- 인터넷과 연결 가능
- 예) 스마트폰, 전자 안경, 태블릿 등
Cloud computing
- WSC(Warehouse Scale Computers) : 컴퓨터를 사는 것이 아닌, 제공해주는 업체에서 원하는 만큼 할당받아 사용
- SaaS(Software as a Service) : SW는 서비스로 제공받을 수 있음
- 기기에서의 실행과 클라우드의 실행이 나뉘어지기도 함 : 복잡한 연산 등은 클라우드(서버)에서, UI 등 필요한 부분은 클라이언트(PMD)에서 실행
- 예) Amazon, Google의 서비스
1. Algorithm에서의 성능
- 수행되는 연산(operation)의 수로 결정
- operation의 수가 적을수록 성능이 좋음
2. 프로그래밍 언어, 컴파일러, 아키텍처에서의 성능
- operation당 수행되는 instruction의 수
- operation : 추상화된 개념 & instruction : 실제 CPU가 실행하는 명령어
3. 프로세서, 메모리 시스템에서의 성능
4. I/O 시스템(OS 포함)에서의 성능
- Input & Output이 얼마나 빠르게 수행되는가
1.2 Eight Great Ideas in Computer Architecture
1) Eight Great Ideas
컴퓨터 성능 향상에 지대한 공헌을 한 8가지
무어의 법칙
을 위한 디자인
- 디자인을 간결화, 단순화하기 위해
추상적 개념
을 사용
- 공통되는(일반적인) 부분을 빠르게 할 것
- parallelism을 통한 성능 향상
- pipelining을 통한 성능 향상
- prediction을 통한 성능 향상
- 메모리의 체계
- 여분(redundancy)을 통한 신뢰성(dependability) 향상 - RAID와 관련(6장)
1.3 Below Your Program
1) 컴퓨터 시스템 구성
Application SW
- 일반적으로 사용자가 사용하는 SW
- High-Level Language(C, C++, Java 등)로 작성되어 있음
System SW
- 컴파일러 : HLL(High-Level Language)를 기계어로 번역
- 운영체제 : 어플리케이션이 사용되는 서비스 제공(input/output 조절, memory/storage 관리, scheduling tasks, sharing resources)
HW
- 프로세서, 메모리, I/O controllers
2) Levels of Program Code
High-Level Language
- 자연어와 가장 가까운 프로그래밍 언어
- 사람의 입장에서 쓰여지는 언어
- 높은 생산성, 이식성
Assembly Language
컴파일러
가 HLL을 Assembly Language로 번역
- 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어
- instruction의 집합
HW representation(기계어)
어셈블러
가 Assembly Language를 기계어 형태의 오브젝트 코드로 번역
- Binary digits(bits) : 0과 1의 조합
- 명령(instruction)과 data
- 컴퓨터는 메모리에 올라간 바이너리 코드를 CPU로 가져와 instruction 수행
1.4 Under the Covers
1) 컴퓨터 구성요소
- 모든 종류의 컴퓨터는 같은 구성요소로 이루어져 있다.
- Input/Ouput
- UI devices : display, keyboard, mouse
- Storage devices : 하드디스크, CD/DVD, flash
- Network adapters : 다른 컴퓨터와 통신
- PostPC 세대
- Touchscreen : 키보드, 마우스 대체
- LCD : 연속되는 픽셀들의 표현 집합으로 그림(움직이는) 표현
2) 프로세스 내부(CPU)
- Datapath : CPU 안에서 데이터, 주소, 레지스터 처리 및 연산을 하는 모든 요소
- Control : datapath 순서, memory 제어
- Cache memory : 데이터에 빠르게 접근하기 위한 작지만 고속의 SRAM 메모리
3) Abstractions(추상화)
복잡한 문제를 단순화
하여 쉽게 풀 수 있도록 하는 기법
- low-level의 복잡성을 줄여줌
- ISA(Instruction Set Architecture) :
HW와 SW 사이의 인터페이스
로 SW은 instruction으로 구성 & HW는 이것을 실행
- Application binary interface
- Implementation(구현)
3) 저장장치
휘발성(Volatile) 메인 메모리
비휘발성(Non-volatile) 보조 메모리
- Magnetic disk
- Flash memory
- Optical disk(CDROM, DVD)
4) 네트워크
- Communicaion, resource sharing, nonlocal access
- LAN(Local area network) : 이더넷
- WAN(Wide area network) : 인터넷
- Wireless network : WiFi, Bluetooth
1.5 Technologies for Building Processors and Memory
1) 기술 트렌드
시간이 지남에 따라 capacity, performance는 증가 & cost는 감소
-> DRAM의 capacity가 계속 증가하고 있다.
2) Semiconductor Technology(반도체 기술)
집적 회로를 만드는 과정
어떤 것을 기준으로 성능이 좋다고 말할 수 있는가?
어떻게 정의하냐에 따라 달라진다.
1) Response Time(응답시간) & Throughput(처리량)
Response Time
하나의 operation을 수행하는데 걸리는 시간
Throughput
단위 시간 당 얼마나 많은 일을 할 수 있는지
응답시간과 처리량은 무엇에 영향을 받는가?
- 더욱 빠른 CPU로 교체하면? -> Response Time이 줄어들고 Throughput이 증가하게 된다.
- CPU를 추가하면? -> Response Time은 변하지 않고 Throughput이 증가하게 된다.
-> Response Time은 Throughput에 영향을 주지만 Throughput은 Response Time에 영향을 주지 않을 수도 있다.
-> X가 Y보다 n배 더 빠르다.
예) A는 프로그램이 돌아가는데 10s, B는 15s가 걸린다고 가정.
Execution Time B / Execution Time A
= 15s / 10s = 1.5
-> A는 B보다 1.5배 더 빠르다.
3) Measuring Execution Time(실행시간 측정)
1. Elapsed Time(경과 시간)
- 모든 측면에서의 총 응답시간 : Processing, I/O, OS overhead, idle time
- 어떤 작업의 시작부터 끝까지
총 작업시간
- 시스템 전체의 performance를 정의하는데 사용
2. CPU Time
- 주어진 일을 처리하는데 걸리는 시간(순수하게 CPU에서 걸리는 시간) : I/O time, other job's shares
- user CPU time과 system CPU time으로 나눠짐
- 프로그램마다 CPU와 시스템 성능에 대해 다르게 영향을 받음
4) CPU Clocking
일정한 속도의 클럭으로 제어되는 디지털 하드웨어의 작동
-
Clock period : duration of a clock cycle(한 클럭 사이클 기간), rising edge 후 다음 rising edge까지의 길이
-
Clock frequency(rate) : cycles per second(초당 싸이클 수)
-> CC(Clock cycles per second in MHz or GHz) = 1 / CR(Clock cycle time)
5) CPU Time
- 성능을 향상시키려면? -> clock cycle 감소, clock rate 증가로 CPU Time을 줄이는 방법
- HW 디자이너는 반드시 cycle 수 대비 clock rate를 조절해야 한다.
예) 컴퓨터 A : 2GHz clock, 10s CPU Time라고 가정.
컴퓨터 B를 컴퓨터 A보다 빠르게 설계하려고 할 때(6s CPU Time으로), 컴퓨터 B의 clock을 얼마나 빠르게 해야할까?(단, 컴퓨터 B의 clock cycles는 A의 1.2배)
6) Instruction Count & CPI
- Instruction Count : 프로그램, ISA와 컴파일러 등에 의해 결정됨
- CPI(instruction당 평균 cycle 수) : CPU HW에 의해 결정됨
-> 만약 insruction이 다르다면, CPI도 다르다.
예) 컴퓨터 A : Cycle Time = 250ps, CPI = 2.0라고 가정 & 컴퓨터 B : Cycle Time = 500ps, CPI = 1.2라고 가정할 때 동일한 ISA일 경우, 어떤 컴퓨터가 얼마나 더빠른가?
-> 컴퓨터 A가 컴퓨터 B보다 1.2배 더 빠르다.
CPI를 더 자세히
예) 두 가지 다른 컴파일된 코드 결과를 처리하는데, 아래와 같은 다른 세 종류의 CPU의 혼합을 이용하였다.
- 결과 1 : instruction의 총 수 = 5
- Clock Cycles = 2 x 1 + 1 x 2 + 2 x 3 = 10
- Avg CPI = 10 / 5 = 2.0
- 결과 2 : instruction의 총 수 = 6
- Clock Cycles = 4 x 1 + 1 x 2 + 1 x 3 = 9
- Avg CPI = 9 / 6 = 1.5
-> 총 instruction의 수는 결과 2가 더 많았지만, 평균 CPI는 결과 2가 더 작았고 결과 1보다 빨리 실행될 수 있다.
- 알고리즘, 프로그래밍 언어, 컴파일러, ISA는 IC와 CPI에 영향을 미칠 수 있다.
8) 종합 예제
- 더 좋은 데이터 캐시(평균 load time이 2 cycles로 감소된)를 사용하면 장치는 얼마나 더 빨라질 수 있는가?
-> Load의 CPI_i가 2로 줄어들면 Freq CPI_i가 0.4가 되고, 모든 instruction의 Freq CPI_i의 합은 1.6으로 줄어든다. 2.2 / 1.6 = 1.375로, 기존의 1.375배의 속도가 된다.
-> 37.5% 향상
- branch prediction을 이용해 branch time에서 한 cycle을 단축하면 성능이 어떻게 되는가?
-> Branch의 CPI_i가 1로 줄어들면 모든 instruction의 Freq * CPI_i의 합은 2로 줄어든다. 2.2 / 1.1 = 1.1로, 기존의 1.1배의 속도가 된다.
-> 10% 향상
- 두 개의 ALU 명령이 동시에 실행될 수 있다면 어떻게 될 것인가?
-> ALU의 CPI_i가 1에서 0.5로 줄어들면 ALU의 Freq CPI_i는 0.25가 되고 모든 instruction의 Freq CPI_i의 합은 1.95로 줄어든다. 2.2 / 1.95 = 1.1282로, 기존의 1.1282배의 속도가 된다.
-> 12.82% 향상