Introduction
Updated 2019-09-05
Why Architecture?
Dennard scaling describes that more frequency and power usage increase linearly. But this is no longer true, which is why clock frequencies have plateaued. Moore’s Law describes the number of transistors in a given area doubles every two years. This is coming to an end too.
We need more computation.
To make things faster, we need more “clever” architecture.
Architecture Design Process
op1=>operation: Simple performance model
op2=>operation: Detailed performance model
op3=>operation: HDL performance model
op4=>operation: Circuit/layout desgin
op5=>operation: Verification
op6=>operation: FAB
op1->op2->op3->op4->op5->op6
A set of benchmarks and and performance evaluations are applied in the first three steps. Most design iterations also happen in the first three steps before design team continue to circuit layout designs.
Performance
Measuring Performance
We use benchmarks which are based on real applications and application suites. At high level, we may look at space-time complexity or magnitude (big-O, etc.); on lower level, we may look at frequency.
In architecture, we look a mixture of high and low level performance metrics.
Kernels may also be used as “representations” of parts of real applications. They’re easier and quicker to set up and run but are often do not reflect representatively of the entire app.
Benchmarks
TPC benchmarks used for monetary transaction applications, latency is important in this benchmark.
SPLASH, PARSEC are open source benchmarks, the former is more for scienctific computing tasks, and the latter is more oreitned towards desktop PCs.
Performance Metrics
Gflops and Tflops, gigaflops, teraflops
Mips
MIPS
Micro-instructions per second
How do we compare benchmarks from one machine to another? Suppose Machine A has ISA “A” of 10 MIPS, and Machine B has ISA “B” with 5 MIPS.
The performance could be affected by the instruction set encodings. For example RISC instruction sets ….
CPU Performace Equation
CPU time = cpu clock cycl e* clock cycle time
Cpu clock cylce breaks down into two parts: instruction count multiplied by cycles per instruciton
Breaking it further:
CPU time = seconds / program = instructions / program * clock cycles / instruction * time / cycle
continue from slides
CPU time = sum_i=1^n IC_i times C P I_i * clock cycle time to latex
Branches make up control flow logic. Suppose an application has a lot of cerntain type of branch, then we can predict the behaviour of the program and pre-fetch the relevant data in the computer architecture.
We need load or store instructions to access and modify memory. When we deal with IO or high-level interfacing, we are writing into memory or disk.
it is uncommon to have this (insert table from sldies
) distribution of type of instructions.
Comparing Performance
X is n times faster than Y:
exectuion time of Y / execution time of X = n
Throughput of X is n times faster than Y:
tasks per unit of time for X / tasks per unit of time for Y = n
So if we take the arithmetic mean for average exevution time, then we are giving more weight ot logner running programs.
We can also get weighed arithmetic mean, and emphasize on the applications that are more important. To determine which applications are important, some of the factors include usage time, required resources, etc.
Speedup
Suppose:
A | B | |
---|---|---|
Program 1 | 5 | 4 |
Program 2 | 3 | 6 |
Speed up of A to B in program 1? 4/5 (slower)
Speed up of A to B in program 2? 6/3 (twice as fast)
Average speed up of A to B? (4/5+6/3)/2 = 1.4
Sum of average of A to B? (4+6)/(5+3)=1.25
It is recommended to use geometric means because it deals better with numbers with very different magnitudes. Before we apply geometric mean, we must normalize the execution time. Do not use arithmetic mean for normalized execution times. \(\sqrt[\leftroot{-2}\uproot{2}a]{\prod}\)
CPI/IPC
Cycles per instruction
Instruction per cycle
Average CPI is given by Sum(CPI_i)/n
but arithmetic mean of the IPC is not proportional to average CPI
For average ICP, we must use harmonic mean.
We need average CPI to compute average execution time.
Suppose we have machine A and B, we obtain average execution time for A and B for a bunch of applications. We will obtain an array of speedups for each application. Then we take the geometric mean of all the speed ups.
harmonic mean: \(n\over{\frac 1{cpi_1}+\frac 1{cpi_2}+\dots}\)