Search

컴퓨터구조 3,4강

CPU time

CPU Time = CPU Clock Cycle x Clock Cycle Time = CPU Clock Cycle / Clock Rate

Performance는 다음과 같이 하여 향상시킬 수 있다
CPU Time이 짧을수록 Performance가 향상되므로
CPU Clock Cycle 또는 Clock Cycle Time을 감소시키기
Clock Rate 증가시키기 = Clock Period 감소시키기
보통 clock rate를 높이면 cycle count도 늘어나게 되어있다. 하드웨어 디자이너는 이 trade -off를 잘 조절하여 적당한 포인트를 찾아야 하겠다.

<예제>

컴퓨터 A : 2GHz clock(=clock rate), 10s CPU Time
컴퓨터 B : 6s의 CPU Time이 목표, 더 빠른 clock가능하지만 1.2 x clock cycle을 유발한다.
Q. 컴퓨터 B의 clock은 얼마나 빨라져야 하는가?
[풀이]
Clock Rate_B = Clock Cycles_B / CPU TIme_B = 1.2 x Clock Cycles_A / 6s
Clock Cycles_A = CPU Time_A x Clock Rate_A = 10s x 2GHz = 20 x 10^9
Clock Rate_B = 1.2 x 20 x 10^9 / 6s = 24 x 10^9 / 6s = 4GHz

Instruction Count and CPI

Cycle per Instruction = CPI = 하나의 명령어 실행에 몇 cycle이 걸리냐
Instruction Count = 명령어 수
Clock Cycles = Instruction Count x CPI CPU Time = Instruction Count x CPI x Clock Cycle Time = Instruction Count x CPI / Clock Rate

Instruction Count

program(의 알고리즘), ISA(Instruction set architecture), Compiler에 의해 결정된다
ISA란? 마이크로프로세서가 인식해서 기능을 이해하고 실행할 수 있는 기계어 명령어를 말한다. 마이크로프로세서마다 기계어 코드의 길이와 숫자 코드가 다르다. 명령어의 각 비트는 기능적으로 분할하여 의미를 부여하고 숫자화한다. 프로그램 개발자가 숫자로 프로그램하기가 불편하므로 기계어와 일대일로 문자화한 것이 어셈블리어이다. [위키백과]
프로그램 작성시 프로그램은 한 명령어로 되어있지 않다. 여러 명령어로 이루어져 있음. 그래서 더 정확한 표현을 위해 사용하는 것이
Average cycles per instruction
CPU 하드웨어에 의해 결정됨
만약 다른 명령어들이 다른 CPI를 갖는다면 Average CPI가 instruction mix(명령어의 조합)에 의해 영향을 받는다. → 어떤 프로그램은 A명령어가 많이 사용되어 Average CPI가 낮고 어떤 프로그램은 B명령어가 많이 사용되어 Average CPI가 높고 이럴 수 있다는 의미
[CPI 예제]
Computer A는 Cycle time이 260 ps → 4GHz, CPI = 2.0
Computer B는 Cycle time이 500 ps → 2GHz, CPI = 1.2
ISA는 같다
Q. 어떤 컴퓨터가 더 빠르고, 얼마나 빠른가?
[풀이]
CPU Time_A = Instruction Count(l) x CPI_A x Cycle Time_A = l x 2.0 x 250ps = l x 500ps
CPU Time_B = Instruction Count(l) x CPI_B x Cycle Time_A = l x 1.2 x 500ps = l x 600ps
CPUTimeBCPUTimeA=l600psl500ps=1.2\frac{CPU Time_B}{CPU Time_A} = \frac{l*600ps}{l*500ps} = 1.2
B가 1.2배만큼 빠르다

CPI in More Detail

다른 instruction classes가 다른 cycle수를 갖는다면
Clock Cycles = 1n(CPIi×InstructionCounti)\sum_1^n(CPI_i \times Instruction Count_i)
Latex수식으로 ∑밑을 i=1로 하는 법을 모르겠네욤.. 알려주세요..
Weighted average CPI 평균 CPI를 구하지만, weighted→ 즉 명령어들의 비율이 반영된 값 CPI = ClockCyclesInstructionCount\frac{Clock Cycles}{Instruction Count}=in(CPIi×InstructionCountiInstructionCount)\sum_i^n(CPI_i \times\frac{InstructionCount_i}{InstructionCount}) InstructionCountiInstructionCount\frac{InstructionCount_i}{InstructionCount}는 Relative frequency

CPI Example

같은 프로그램인데 컴파일을 다르게 하여 다른 명령어 조합으로 이루어진 Alternative Compiled Code
다음은 A, B, C 클래스의 명령어만 사용하는 Alternative compiled code sequences이다.(IC = Instruction Count)
Sequence 1 : IC = 5
Clock Cycles = 2 x 1 + 1 x 2 + 2 x 3 = 10
Avg. CPI (= 2/5 + 2/5 + 6/5) = 10/5 = 2
Sequence 2 : IC = 6
Clock Cycles = 4 x 1 + 1 x 2 + 1 x 3 = 9
Avg.CPI = 9/6 = 1.5
⇒Sequence 2가 IC가 더 큼에도 불구하고, Avg.CPI가 더 작아 실행시간이 더 빠르다는 것을 알 수 있다.

Performance Summary

CPUTime=InstructionsProgram×ClockCyclesInstructionCount×SecondsClockCyclesCPU Time = \frac{Instructions}{Program} \times \frac{ClockCycles}{Instruction Count} \times \frac{Seconds}{Clock Cycles}
[식에서 알 수 있는 것]
Instructions는 Program의해, ClockCycles는 Instruction 의해, Seconds(실행시간)은 Clock Cycles의해 결정됨
위 식은 결국 = Instruction Count x CPI x Clock Cycle Time(Clock Period) = Instruction Count x CPI / Clock Rate
Performance를 결정하는 것
알고리즘 : IC, 어쩌면 CPI에도 영향을 미침
Programming language: IC, CPI에 영향을 미침
Compiler : IC, CPI에 영향을 미침
Instruction set architecture(ISA) : IC, CPI, TcT_c에 영향을 미침

Performance 예제

난이도 상
Op = 명령어 타입
Freq x CPIiCPI_i 는 위에서부터 순서대로 0.5, 1.0, 0.3, 0.4, ∑ = 2.2
Q1. 어떤 더 나은 data cache가 average load time을 2cycles로 줄인다면 기계는 얼마나 빨라지는가?
→ Load의 CPIiCPI_i가 2로 줄어드므로 Freq x CPIiCPI_i 는 위에서부터 순서대로 0.5, 0.4, 0.3, 0.4, ∑ = 1.6
→ 새로운 CPU Time = 1.6 x IC x CC, 2.2 / 1.6 = 1.375 ⇒ 37.5% 더 빨라짐
Q2. branch prediction을 사용하여 branch time을 한 사이클 단축하는 것과 비교하면 어떻습니까?
→ Branch의 CPIiCPI_i가 1로 줄어듬
→ Freq x CPIiCPI_i 는 위에서부터 순서대로 0.5, 1.0, 0.3, 0.2, ∑ = 2.0
→ 2.2 / 2.0 = 1.1 ⇒ 10% 더 빨라짐
Q3. ALU명령어가 한번에 2개씩 실행할 수 있도록 하면 어떻게 되나요?
→ ALU의 CPIiCPI_i가 0.5로 줄어듬(절반으로)
→ Freq x CPIiCPI_i 는 위에서부터 순서대로 0.25, 1.0, 0.3, 0.4, ∑ = 1.95
⇒ 2.2/1.95 = 1.128 ⇒ 12.8% 더 빨라짐

The Power Wall

컴퓨터 트렌드에 큰 변화를 준 요인 중 하나이다.
시간에 따른 Clock Rate(log scale로 나타남, 파란 꺾은선), Power(linear scale, 검정 꺾은 선)
IC Technology의 CMOS에서는
Power = Capacitive load x Voltage^2 x Frequency
2004~2005년 기점으로 Clock Rate도 거의 변화하지 않고 Power은 오히려 감소하는 모습을 보인다.
Power는 그래프의 기간 동안 약 30배, Voltage는 1/5배, (Clock)Frequency는 약 1000배가 되었다.
Power는 Voltage에 가장 큰 영향을 주고있다.
Power를 그대로 하고, Frequency를 늘리고 싶다면 Voltage는 제곱이기 때문에 Voltage를 줄이는 것이 가장 효과적이다.
그래서 그동안 5V→1V로 줄여온 것이었다. 그러나 이 이하로 내리면 칩이 동작하지 않아 더이상 줄일 수 없었고, Frequency의 증가도 멈춘 것이다.

Reducing Power

새로운 CPU가
이전 CPU의 85%의 capacitive load를 갖고, 15%의 voltage reduction과 15%의 frequency reduction을 가져온다고 가정해보자
PnewPold=Cold×0.85×(Vold×0.85)2×Fold×0.85Cold×Vold×Fold=0.854=0.52\frac{P_{new}}{P_{old}} = \frac{C_{old}\times0.85\times(V_{old}\times0.85)^2\times F_{old}\times0.85}{C_{old}\times V_{old} \times F_{old}}=0.85^4=0.52
⇒ 새로운 CPU의 Power는 이전 CPU의 power의 약 52%
용량성 부하(Capacitive Load) 용량성 리액턴스가 유도성 리액턴스보다 큰 부하. 이 경우 부하에 흐르는 전류는 전압보다 위상이 앞서 있으며 진상 전류를 형성하고 방해원과 신호 시스템 사이의 용량에 의한 결합으로 만들어진 전계에 의해 신호 시스템에 방해를 준다.

The Power Wall

더 이상 voltage는 줄일 수가 없음
발열도 제거할 수가 없음(전력많이 사용시 발열 증가)
이러한 이유로 성능을 더 이상 향상시킬 수 없게되는 현상을 Power Wall이라고 한다.
어떻게 해야 다른방식으로 Performance 향상시킬 수 있을까?
1976-1996 : 1년에 약 25% 증가
1996-2003 : 1년에 약 52% 증가 - 급격한 성장
2003-2012 : 1년에 약 22% 증가 - 성장 줄어듬 ⇒ Power, Instruction-level parallelism, memory latency 등 의해 제한을 받았기 때문

MultiProcessors

다중 프로세서는 단일 프로세서의 참조이기도 합니다. 멀티프로세서와 유니프로세서의 차이점은 멀티프로세서가 (컴퓨터 하드웨어) 여러 개의 CPU 또는 실행 장치를 통합 제어 하에 둔 컴퓨터인 반면, 유니프로세서는 한 번에 하나의 태스크에서 순차적으로 작동할 수 있는 단일 프로세서(CPU)라는 점입니다.
Multicore microprocessors
하나의 칩 당 하나 이상의 프로세서 존재
dual core, quad core, ..., octa core
parallel programming이 가능해졌다.
Requires explicitly parallel programming 병렬 프로그래밍의 명시적 필요성
instruction level parallelism(ILP)과의 비교
ILP는
하드웨어가 한번에 여러 instructions를 실행한다(명령어 차원에서의 병렬). parallel programming은 프로그램 자체를 여러개 돌리는 것
이에 프로그래머들은 관여하지 않는다.
[Parallel Programming의 어려운 점]
프로그래밍하기가 힘들다(디버깅 까다로움)
여러 프로세서 중 A는 실행할 것이 많고, B는 적고 이런 imbalance가 발생할 수 있다 = Load Balancing이 어렵다
프로세스 간의 communication과 synchronization이 발생한다. 그래서 예상보다 성능이낮게 나오게된다.

SPEC CPU Benchmark

SPEC = Standard Performance Evaluation Corp
benchmark란 어떤 것의 성능을 측정해주는 프로그램
SPEC CPU Benchmark란 CPU 성능 측정해주는 benchmark
supposedly typical of actual workload
SPEC은 CPU, I/O, Web등의 benchmarks를 개발
SPEC CPU2006 - 2006년에 만들어진 CPU성능 측정 위한 benchmark
selection of programs를 실행하는데 소요된 시간으로 구성되어 있음
프로그램인데, 무시가능한 I/O (I/O시간은 매우매우매우 짧음)으로 CPU Performance에 집중할 수 있는 것이 특징
reference machine에 비교하여 normalize하여 비교한다.
숫자가 클 수록 성능이 좋은 것이다.
Summarized as geometric mean of performance ratios
여러가지 프로그램의 SPEC ratio의 geometric mean을 이용해 성능 측정
[종류] CINT2006(integer) and CFP2006(floating point)
Intel Core i7대한 CINT2006결과
맨 첫 줄을 살펴보자면, 일단 reference machine에서는 9770초(Reference Time)가 걸린 것을 i7에서는 508초(Execution time)가 걸렸다고 한다.
프로그램 이름은 perl이고, 특성은 Description에 쓰인대로
명령어의 수는 2252x10^9 (Instruction Count)
그 외 CPI, Clock Cycle Time등이 표현되어있다
그래서 결과적으로 맨 마지막에 나와있는 SPECratio를 gemetric mean구하여 기존 reference machine에 비해 얼마나 성능이 좋은지 표현. 이 표에선 25.7배 빠르다고 할 수 있겠다.

SPEC Power Benchmark

Power Consumption of server at different workload levels
Performance = ssj_ops/sec
Power = Watts(Joules/sec)
ssj_ops = server size 작업(ssj가 server size라는 말)
Overall ssh_ops per Watt = (i=010ssj_opsi)/(i=010poweri)(\sum_{i=0}^{10} ssj_ops_i)/(\sum_{i=0}^{10} power_i)

SPECpower_ssj2008 for Xeon X5650

Xeon X5650 이라는 CPU대한 내용
당연히 Target Load가 높아짐에 따라 Performance(ssh_ops), Average Power도 증가
Target Load에 따른 Performance 의 합에서 Average Power의 합을 나눠주면 Overall ssh_ops per Watt를 알 수 있음 ⇒ 높을수록 효율적! 낮다는건 전력효율이 낮다는 뜻이기 때문

Concluding Remarks

Cost/performance is improving
underlying technology development(Moore's Law)의해
최근에는 Moore's Law의 적용이 어려워짐
Hierarchical layers of abstraction
hardware와 software 둘 다에서
Instruction set architecture
= hardware/sortware interface
Execution time: the best performance measure(가장 좋은 성능지표)
Power is a limiting factor
Performance향상을 위해 parallelism사용

Fallacies and Pitfalls(오류와 위험들)

Pitfall : Amdhl's Law

aspect of a computer(컴퓨터의 한 부분, 컴퓨터의 한 컴포넌트)의 성능을 향상시키면 그 컴포넌트가 전체에서 차지하는 비율만큼 전체 performance가 향상된다는 법칙
식 : Timporved=Taffectedimporovementfactor+TunaffectedT_{imporved} = \frac{T_{affected}}{imporovement factor}+T_{unaffected}
(예) 어떤 프로그램에서 multiply는 전체실행시간 100s에서 80s를 차지한다.
전체 성능이 5배 더 좋아지려면 multiply performance가 얼마나 향상되어야하는가?
20s = 80s/n + 20 (n=얼마나 향상시켰는가)
이 식에서 문제를 만족시키려면 n은 무한대가 되어야함
불가능!
우리가 알 수 있는 것!
전체의 성능에서 많이 차지하는 것의 성능을 향상 시킬수록 전체 성능이 더 많이 향상된다!

Fallacy: Low Power at Idle

i7의 power bench돌아보기
at 100% load : 256W
at 50% load : 170W (100%의 66%)
at 10% load : 121W(100%의 47%)
⇒ 10% load라고 해서 10%의 Power만 사용하는 것이 아니다.
Google Data Center의 경우
보통의 경우 전체 성능의 10-50% load 정도만 사용한다
전체시간의 약 1%도 안되는 시간동안에만 100% load를 사용
⇒ 적은 작업을 해도 전력 소비량이 크다!
Hardware Designers : 프로세서 설계시 load에 비례하게 전력을 소비할 수 있도록 고려하여 디자인해야 한다.

Pitfall: MIPS as a Performance Metric

MIPS = Millions of Instructions Per Second(지금은 잘 쓰지 않는 용어이다. 한때의 성능지표)
1초에 몇백만의 명령어를 실행하는지
이러한 것들을 고려하지 않아 문제가 되었다
1.
Differences in ISAs between computers
2.
Differences in complexity between instructions(명령어사이의 CPI값 차이)
MIPS=InstructionCountExecution×106=InstructionCountInstructionCount×CPIClockRate×106=ClockRateCPI×106MIPS = \frac{InstructionCount}{Execution\times10^6}=\frac{InstructionCount}{\frac{InstructionCount\times CPI}{ClockRate}\times 10^6}=\frac{ClockRate}{CPI\times 10^6}
MIPS는 결국 CPI가 결정하게 됨
그러나 CPI는 주어진 CPU에서 프로그램마다 다르다.
올바른 성능지표가 아님!