KOCW에 공개된 영남대 최규상 교수님 컴퓨터 구조 강의를 수강 후 정리한 내용입니다!
Chapter 1에서 배울 내용
- 프로그램이 어떻게 기계 언어로 변환되는지, 실제 하드웨어가 어떻게 명령을 실행시키는지
- 하드웨어/소프트웨어 인터페이스
- 성능을 어떻게 정의하고 향상시키는지
- 하드웨어 디자이너들어 어떻게 성능을 향상시키는지
- Parallel processing이 무엇인지
1.1 Introduction
1. Computer Revolution
- 무어의 법칙에 의해 컴퓨터 기술이 급격히 발전
- 새로운 어플리케이션이 파생 됨
- ex) 핸드폰, 자동차, 유전자 프로젝트, WWW
- 최근에는 모든 것이 컴퓨터화됨
2. 무어의 법칙
- 1965년 인텔 CEO인 골든 무어가 2년마다 하나의 칩에 들어가는 트랜지스터 수는 두 배씩 증가할 것이라 예언
- 실제론 두 배보다 더 빠르게 증가
- 많은 트랜지스터가 들어가므로 다양한 어플리케이션 실행이 가능해짐
3. 컴퓨터의 종류
- Personal Computers (PC)
- 일반적인 용도로 사용
- 가격대 성능비에 민감
- Server Computers
- 기업에서 중요한 데이터를 처리할 때 사용
- High capacity, performance, reliability
- PC보다 고가, 고용량, 고성능
- Super Computers
- 특수한 목적을 가지고 사용하는 컴퓨터
- 과학적인 목적, 엔지니러링 계산을 목적으로 사용
- 아주 고가, 전력 소모가 많아 유지 비용이 많이 듦
- Embedded Computers
- 큰 시스템에 컴퓨터가 하나의 컴포넌트로 구성되어 있음
- 적은 전력소모, 저성능, 저가
- ex) 스마트폰, 태블릿 PC
4. 기본 단위
5. PostPC Era
- Personal Mobile Device (PMD)
- 배터리로 동작, 인터넷에 연결되어 있음
- ex) 스마트폰, 태블릿, electronic glasses
- Cloud computing
- Warehouse Scale Computers (WSC): 특정 데이터를 처리해주는 것들이 하나의 서버에서 제공
- SaaS: 소프트웨어를 서비스로 제공받을 수 있음
- 소프트웨어의 일부(단순한 기능)는 PMD에서 실행되고 나머지 복잡한 기능은 클라우드에서 실행
- ex) Amazon, Google
6. Performance의 이해
- 알고리즘에서의 성능
- 오퍼레이션(추상화된 개념)의 수로 정의
- 오퍼레이션의 수가 적을수록 성능이 좋음
- 프로그래밍 언어, 컴파일러, 아키텍처에서의 성능
- 오퍼레이션 당 수행되는 인스트럭션(실제 CPU가 실행하는 명령어)의 수로 정의
- 프로세서와 메모리 시스템에서의 성능
- 얼마나 명령어들을 빠르게 수행할건가
- 단위 시간당 얼마나 많은 명령어들이 수행되는가
- I/O 시스템에서의 성능
- 단위 시간당 얼마나 많은 I/O operation이 수행되는가
1.2 Eight Great Ideas in Computer Architecture
1. 무어의 법칙
2. 추상화(abstraction): 복잡한 문제를 단순화하기 위해 추상화를 사용
3. 공통된 케이스를 빠르게 수행하도록 하는 것
4. parallelism을 통해 성능을 향상시키는 것
5. 파이프라인을 통해 성능을 향상시키는 것
6. prediction을 통해 성능을 향상시키는 것
7. 메모리 계층구조
8. redundancy을 통해 Dependability을 향상시키는 것: redundancy는 6장에서 배울 RAID와 관련있음
이 8가지 아이디어가 컴퓨터의 성능 향상에 크게 기여
1.3 Below Your Program
1. 컴퓨터 시스템 구성
1. Application software
- 일반적인 사용자가 사용하는 소프트웨어
- ex) MS Office
2. System software
- 컴퓨터가 실행되는데 사용되는 아주 기본적인 소프트웨어
- 컴파일러: HLL을 기계 언어로 변환해줌
- OS(운영체제): 어플리케이션이 사용되는 서비스를 제공
- input/output을 핸들링
- 메모리와 저장공간 관리
- 자원 공유와 Scheduling tasks
3. Hardware
- 프로세서, 메모리, I/O controllers
2. 프로그램 코드의 레벨
1. High-level language
- 컴파일러는 HLL을 input으로 받아 어셈블리어로 변환
2. Assembly language
- 기계 언어의 텍스트적인 표현
- 사람이 이해할수 있도록 텍스트로 표현해준 것
- 컴파일러에 의해 생성이 되고 어셈블리어를 어셈블러를 통해 바이너리 코드로 변환
- VS 스튜디오는 컴파일러와 어셈블러가 함께 있는 것. 한 번에 실행시킬 수도 있고 컴파일러와 어셈블러를 따로 실행시킬 수도 있음
3. Hardware representation
- 바이너리 코드 (bits): 0과 1의 조합
- instructions과 data를 표현
1.4 Under the Covers
1. Components of a Computer
- 많은 종류의 컴퓨터들은 같은 구성 요소를 가지고 있음
- 데스크탑, 서버, 임베디드 시스템도 내부 구성 요소는 비슷
- Input/Output를 포함하고 있음
- User-interface devices: display, keyboard, mouse
- Storage devices(저장 장치): hard disk, CD/DVD, flash
- Network adapters
2. Inside the Processor (CPU)
- datapath: 데이터가 연산이 되는 경로
- control: 프로세서에 있는 다양한 컴포넌트들을 컨트롤
- cache memory: cpu 내부의 작고 아주 빠른 SRAM으로 구성된 캐시 메모리에 자주 사용하는 데이터를 저장해 빠르게 접근할 수 있도록 함
3. Abstractions (추상화)
- 아주 복잡한 문제를 풀 때 사용하면 효과적. 복잡한 문제를 단순화해 쉽게 풀 수 있도록 하는 기법
- 컴퓨터 구조에서 추상화의 대표적인 예가 Instruction set architecture(ISA)
- ISA는 하드웨어/소프트웨어 인터페이스
- 소프트웨어는 instruction으로 구성. 하드웨어는 instruction을 실행. 소프트웨어와 하드웨어는 instruction을 통해 데이터를 주고 받음
- Application binary interface(ABI)
- ISA와 밀접하게 관련되어 있음
- ISA와 시스템 소프트웨어의 인터페이스
- 자세한 설명은 뒤에
- Implementation: 실제로 어떻게 구현할 것인가
4. 저장공간, 네트워크
1. 저장공간
- 휘발성 메인 메모리
- ex) DRAM
- 전원이 꺼지면 저장된 데이터가 사라짐
- 비휘발성 메모리
- magnetic disk, Flash memory(SRAM), Optical disk(CDROM, DVD)
2. 네트워크
- Local area network(LAN): Ethernet
- Wide area network(WAN): Internet
- Wireless network: WIFI, Bluetooth
1.5 Technologies for Building Processors and Memory
- 최근에는 아주 싼 가격으로 DRAM을 사용할 수 있게 됨
- 시간이 지남에 따라 성능이 급격히 향상됨
1.6 Performance
1. Response Time and Throughput
1. Response Time
- operation을 할 때 얼마나 걸리는가
- 하나의 operation에 걸리는 시간
2. Throughput
- 단위 시간당 얼마나 많은 일을 할 수 있는가
- ex) 한 시간 동안 실행한 transactions의 수
3. 만약 기존 사용하던 CPU보다 더 빠른 CPU를 사용하려면
- 오래된 CPU를 새 CPU로 교체했을 때 response time과 throughput에 영향을 주는가?
- 영향을 줌. 더 빠른 CPU를 사용할 경우 response time이 줄어들고, response time이 줄어듦에 따라 단위 시간당 할 수 있는 연산의 수도 증가하므로 throughtput이 증가함
- CPU를 추가할 경우 response time과 throughput에 영향을 주는가?
- 하나의 코어에서 실행하는 시간은 줄어들지 않음. 즉, response time은 영향을 받지 않음. 하지만 throughput은 증가. 각각의 코어에서 서로 다른 일을 할 수 있기 때문에 단위 시간 당 한 일의 수가 많아짐.
- 일반적으로 response time이 감소할 경우 throughput은 증가. 하지만 throughput은 response time에 영향을 주지 않을 수도 있음
- 이제부터는 response time에 집중. 즉, 성능 측정 기준을 response time으로 함
2. Relative Performance
- Performance = 1 / Execution Time
- Performance와 Excution Time은 반비례 관계
- 수식의 값이 n일 경우 "$X$는 $Y$보다 $n$배 빠르다"라고 표현
- Performance와 Excution Time은 반비례 관계
3. Excution Time 측정
1. Elapsed time (걸린 시간)
- operation이 시작할 때부터 끝날 때까지 걸리는 시간
- processing, I/O, OS overhead, idle time(대기 시간)을 모두 포함한 시간
- 시스템 전체의 성능을 정의할 때 사용
2. CPU time
- 어떤 일을 처리할 때 CPU에서 걸리는 시간
- I/O 시간과 CPU가 다른 일을 할 때 걸리는 시간을 제외
- user CPU time(user 레벨에서 CPU를 사용할 때 걸리는 시간)과 system CPU time(작업을 수행하기 위해 운영체제에서 걸리는 시간)으로 나눠짐
- 프로그램에 따라 성능에 영향을 주는 요인이 다름
- 어떤 프로그램은 CPU에 영향을 받을 수 있고, 어떤 프로그램은 I/O에 영향을 받을 수 있음
4. CPU Clocking
- Clock period: 하나의 clock cycle 동안 걸리는 시간 (단위: ps)
- Clock frequency(rate): 초당 몇 cycles이 존재하는가 (단위: Hz)
- Clock rate는 Clock cycle time(Clock period)와 반비례 관계
1.6 Performance
1. CPU Time
- 성능을 향상시키기 위해서는
- clock cycles 수 감소
- clock rate 증가
- cycle 수와 clock rate는 트레이드 오프 관계
2. Instruction Count and CPI
- Instruction Count: 프로그램, ISA, 컴파일러에 의해 결정
- CPI: CPU 하드웨어가 어떻게 구성되어 있는지에 따라 결정
- 각각의 다른 instructions는 서로 다른 CPI를 요구
- 서로 다른 instructions이 섞여있을 경우 평균 CPI를 사용해야 함
- Computer A의 Clock rate: 4GHz, Computer B의 Clock rate: 2GHz
- Same ISA: Instruction Count의 값이 A, B가 서로 같음을 의미
- 성능은 Excution Time에 반비례. 컴퓨터 A가 컴퓨터 B보다 1.2배 빠름을 의미
3. CPI in More Detail
- 다른 instruction classes는 다른 cycles 수를 요구
- 평균 가중치 CPI: 여러 개의 instruction classes을 사용할 때 사용
- 예시
- IC: Instrcution Count
- Sequence 2가 Sequence 1보다 IC가 하나 더 많지만 Clock Cycles는 하나 작음. 즉, Sequence 2가 Sequence 1보다 실행 시간이 빠를 수 있음
- 하나의 instruction을 수행하는데 걸리는 CPI가 Sequence 1의 CPI보다 짧기 때문에 Sequence 2가 Sequence 1보다 삐르게 수행 가능
- 예시
4. Performance Summary
- 알고리즘: Instruction Count, CPI에 영향을 줄 수 있음
- 프로그램 언어: IC와 CPI에 영향을 줄 수 있음
- 컴파일러: IC와 CPI에 영향을 줄 수 있음
- ISA(Instructon Set Architecture): IC, CPI, Clock Cycle time에 영향을 줄 수 있음
1.7 The Power Wall
Power Wall
- voltage(전력)을 더 이상 낮추지 못하므로 이로 인해 발생하는 열을 없앨 수 없음
- 따라서 기존에 사용했던 성능 향상 방법을 더 이상 사용할 수 없게 됨
- 새로운 방법인 multi-core를 사용해 성능을 향상시키고자 함
1.8 The Sea Change: The Switch to Multiprocessors
- power(전력), instruction-level parallelism, memory latency로 인해 싱글 코어일 때보다 성능 향상 퍼센트가 낮아짐
1. Multiprocessors
- Multicore microprocessors: 하나의 칩 안에 여러 프로세서를 넣음
- 멀티코어의 성능 향상을 위해서는 parallel programming을 사용해야 함
- 기존의 sequencial programming을 사용할 경우 멀티 코어에서의 성능 향상은 없음. 기존 프로그램을 parallel programming으로 바꿔야만 성능이 향상됨
- instruction level parallelism: 하드웨어가 알아서 동시에 명령어를 수행해주는 것
- parallel programming: 프로그래머가 하나하나 프로그램을 짜야 함
- 하나의 일을 여러 개로 나눴을 경우 나눠진 일들이 비슷한 load를 가져야 함
- parallel programming에서 발생하는 communication과 synchronization 문제를 줄여주어야 함
- 멀티코어에서의 성능 향상을 위해서는 parallel programming을 사용해야하는데 parallel programming을 사용하는 것 자체가 어렵기 때문에 유니 코어(싱글 코어)에 비해 성능 향상 속도가 낮을 수 밖에 없음
2. SPEC CPU Benchmark
- SPEC: Standard Performance Evaluation Corp
- CPU, I/O, Web 등의 성능을 측정해주는 benchmarks를 만드는 회사
- SPEC CPU Benchmark
- CPU의 성능을 측정하는 benchmark
- SPEC CPU 2006
- 여러 개의 프로그램을 실행해 실행한 프로그램의 총 실행 시간을 더함
- 아주 작은 I/O를 사용하므로 I/O 시간을 무시할 수 있고 CPU 성능을 측정하는데 집중
- 기존의 표준 성능으로 잡은 reference machine과 비교해 얼마나 성능이 향상되었는지 비교 가능
- integer 프로그램용인 CINT2006과 floating-point 프로그램용인 CFP2006으로 나눠짐
- 여러 개의 프로그램을 실행해 실행한 프로그램의 총 실행 시간을 더함
1.9 Concluding Remarks
1. Cost/performance is improving
- 무어의 법칙에 의해 가격 대비 성능이 계속 향상되고 있음
2. Hierarchical layers of abstraction
3. Instuction set architecture
- 컴퓨터 구조에서의 abstraction은 ISA라고 할 수 있음
- ISA는 하드웨어와 소프트웨어의 인터페이스
- 하드웨어와 소프트웨어가 통신하는 방식이 instruction임
4. Excution Time
- 가장 좋은 성능 측정 방법
5. Power is a limiting factor
- power 문제는 성능을 향상시키는데 제약이 됨
- 이 문제는 멀티코어 방식을 사용해 해결하려고 하고 멀티 코어에서는 parallelism을 사용해야만 성능 향상이 가능
1.10 Fallacies and Pitfalls
1. Pitfall: Amdahl's Law
- 컴퓨터의 한 부분의 성능을 향상 시키면 전체 performance의 성능 향상은 비례한다
- T_affected: 한 부분의 향상시킨 후의 성능
- T_unaffected: 성능을 향상시키지 않았을 때의 성능
- improvement factor: 성능을 향상시킨 한 부분
- 시스템의 한 컴포넌트 성능을 향상시키면 전체 시스템의 성능 향상은 그 컴포넌트가 시스템의 얼마만큼을 차지하는지의 비율에 비례한만큼만 향상됨
- 곱하기 연산은 전체 100초 연산 중 80초를 차지. 이럴 경우 multiply performance를 향상시켜 전체 성능을 5배 향상시키고자 함. 이럴 경우 곱하기 연산의 성능은 얼만큼 향상되어야 하는가?
- n이 무한대로 갈 경우에만 식이 성립하므로 불가능하다는 의미. 곱하기 성능 향상만으로는 전체 성능을 5배로 향상시킬 수 없다
- 결론: 어떤 시스템의 성능을 향상시키기 위해서는 그 시스템에서 가장 많은 portion을 차지하는 컴포넌트를 가장 빠르게 만드는 것이 전체 시스템 성능을 향상시킬 수 있는 방법
2. Fallacy: Low Power at Idle
- processor를 만들 때 load에 비례해서 전력 소모를 할 수 있도록 만들어야 함
3. Pitfall: MIPS as a Performace Metric
- MIPS: Millions of Instructions Per Second (시간당 몇 백만개의 instructions을 실행하는가)
- MIPS를 Performance Metric으로 사용했지만 MIPS를 Performance Metric으로 사용할 경우 오해를 불러올 수 있음
- 컴퓨터마다 ISA가 다르기 때문
- 명령어마다 복잡성이 다르기 때문
- MIPS는 CPI에 의해 좌우됨. 하지만 CPI는 프로그램과 CPU에 의해 달라질 수 있음. 따라서 성능 측정 단위로 사용하기 어려움
- 정확한 성능 측정을 위해서는 앞에 나온 SPEC CPU Benchmark를 사용하는 것이 좋음
공식 암기
- performance = 1/Execution Time
- CPU Time = Instruction Count X CPI X Clock Cycle Time
Chapter 1 끝!!
게시글에 나와있는 사진의 출처는 강의 동영상에 나오는 사진을 캡쳐한 것 입니다.
댓글