More at http://sites.google.com/site/cudaiap2009 and http://pinto.scripts.mit.edu/Classes/CUDAIAP2009
Note that some slides were borrowed from Matthew Bolitho (John Hopkins), Mike Houston (Stanford) and NVIDIA.
1. 6.963
IT /
A@M
CUD
9
IAP0
Supercomputing on your desktop:
Programming the next generation of cheap
and massively parallel hardware using CUDA
Lecture 02
Nicolas Pinto (MIT)
CUDA - Basics #1
2. During this course,
3
6
for 6.9
ed
adapt
we’ll try to
“ ”
and use existing material ;-)
6. ion
at
tiv
Mo
!quot;#$%&'()*$+,-.%/'0%(,1,(2(%&'()'1$1-%&'3-3%#43%
-.'#%quot;0%5","&#quot;,%&(1&#(+/3$4"&1quot;',(#&(1&,2(&*%#&4%quot;#&666&
7%#,quot;-.$4&(8%#&,3%&03(#,&,%#)&,3-0&#quot;,%&'quot;.&9%&%:*%',%5&,(&
'(.,-.+%;&-1&.(,&,(&-.'#%quot;0%6&<8%#&,3%&$(./%#&,%#);&,3%&
#quot;,%&(1&-.'#%quot;0%&-0"&9-,&)(#%&+.'%#,quot;-.;"$,3(+/3&,3%#%&-0&
.(&#%quot;0(.&,(&9%$-%8%&-,&2-$$&.(,&#%)quot;-.&.%quot;#$4&'(.0,quot;.,&1(#&
quot;,&$%quot;0,&=>&4%quot;#06&?3quot;,&)%quot;.0&94&=@AB;&,3%&.+)9%#&(1&
'()*(.%.,0&*%#&-.,%/#quot;,%5&'-#'+-,&1(#&)-.-)+)&'(0,&2-$$&
9%&CB;>>>6&D&9%$-%8%&,3quot;,&0+'3"&$quot;#/%&'-#'+-,&'quot;.&9%&9+-$,&
'1%4%3,15*$%64/$07
H.&6.2'J.."9'>,quot;#$&.21#;'J+3+=12quot;9'KL'D0&1,'KLMN
slide by Matthew Bolitho
7. ion
at
tiv
Mo
7Fquot;'/.;$'quot;#.2./1#'2%/Cquot;&'.O'#./0.2quot;2$;'
!
12'+2'E-'I1,,'6.%C,quot;'quot;<quot;&8'8quot;+&
P1;$.&1#+,,8'! -*Q;'3quot;$'O+;$quot;&
!
quot; P+&6I+"'"+#F123'O"R%quot;2#8',1/1$+$1.2;
S.I'! -*Q;'3quot;$'I16quot;&
!
slide by Matthew Bolitho
9. U?
GP
GPUs are REALLY fast
Performance (gflops) Development Time (hours)
3D Filterbank Convolution
Nicolas Pinto, James DiCarlo, David Cox (MIT, Harvard)
10. U?
GP
GPUs are REALLY fast
Performance (gflops) Development Time (hours)
3D Filterbank Convolution
Matlab
C/SSE
PS3
GT200
Nicolas Pinto, James DiCarlo, David Cox (MIT, Harvard)
11. U?
GP
GPUs are REALLY fast
Performance (gflops) Development Time (hours)
3D Filterbank Convolution
0.3
Matlab
C/SSE
PS3
GT200
Nicolas Pinto, James DiCarlo, David Cox (MIT, Harvard)
12. U?
GP
GPUs are REALLY fast
Performance (gflops) Development Time (hours)
3D Filterbank Convolution
0.3
Matlab
9.0
C/SSE
PS3
GT200
Nicolas Pinto, James DiCarlo, David Cox (MIT, Harvard)
13. U?
GP
GPUs are REALLY fast
Performance (gflops) Development Time (hours)
3D Filterbank Convolution
0.3
Matlab
9.0
C/SSE
110.0
PS3
GT200
Nicolas Pinto, James DiCarlo, David Cox (MIT, Harvard)
14. U?
GP
GPUs are REALLY fast
Performance (gflops) Development Time (hours)
3D Filterbank Convolution
0.3
Matlab
9.0
C/SSE
110.0
PS3
330.0
GT200
Nicolas Pinto, James DiCarlo, David Cox (MIT, Harvard)
15. U?
GP
GPUs are REALLY fast
Performance (gflops) Development Time (hours)
3D Filterbank Convolution
0.3
Matlab
0.5
9.0
C/SSE
110.0
PS3
330.0
GT200
Nicolas Pinto, James DiCarlo, David Cox (MIT, Harvard)
16. U?
GP
GPUs are REALLY fast
Performance (gflops) Development Time (hours)
3D Filterbank Convolution
0.3
Matlab
0.5
9.0
C/SSE
10.0
110.0
PS3
330.0
GT200
Nicolas Pinto, James DiCarlo, David Cox (MIT, Harvard)
17. U?
GP
GPUs are REALLY fast
Performance (gflops) Development Time (hours)
3D Filterbank Convolution
0.3
Matlab
0.5
9.0
C/SSE
10.0
110.0
PS3
30.0
330.0
GT200
Nicolas Pinto, James DiCarlo, David Cox (MIT, Harvard)
18. U?
GP
GPUs are REALLY fast
Performance (gflops) Development Time (hours)
3D Filterbank Convolution
0.3
Matlab
0.5
9.0
C/SSE
10.0
110.0
PS3
30.0
330.0
GT200
10.0
Nicolas Pinto, James DiCarlo, David Cox (MIT, Harvard)
19. U?
GP
6'401-'@&)*(&+,3AB0-3'-407':&C,(,DD'D&
!
C(*8D'+4/
E*('&3(,-4043*(4&@'@0.,3'@&3*&?quot;>&3A,-&)D*F&
!
.*-3(*D&,-@&@,3,&.,.A'
slide by Matthew Bolitho
20. U?
GP
GA,3&,('&3A'&.*-4'H2'-.'4I
!
$(*1(,+&+243&8'&+*('&C('@0.3,8D'/
!
! 6,3,&,..'44&.*A'('-.5
! $(*1(,+&)D*F
slide by Matthew Bolitho
21. U?
GP
T+$Fquot;&'$F+2'quot;:0quot;#$123'-*Q;'$.'3quot;$'$I1#quot;'+;'
!
O+;$9'quot;:0quot;#$'$.'F+<quot;'$I1#quot;'+;'/+28U
*+&+,,quot;,'0&.#quot;;;123'O.&'$Fquot;'/+;;quot;;
!
Q2O.&$%2+$quot;,8)'*+&+,,quot;,'0&.3&+//123'1;'F+&6V''
!
quot; D,3.&1$F/;'+26'B+$+'?$&%#$%";'/%;$'Cquot;'
O%26+/quot;2$+,,8'"6quot;;132quot;6
slide by Matthew Bolitho
22. U?
GP
Task vs. Data parallelism
• Task parallel
– Independent processes with little communication
– Easy to use
• “Free” on modern operating systems with SMP
• Data parallel
– Lots of data on which the same computation is being
executed
– No dependencies between data elements in each
step in the computation
– Can saturate many ALUs
– But often requires redesign of traditional algorithms
4
slide by Mike Houston
23. U?
GP
CPU vs. GPU
• CPU
– Really fast caches (great for data reuse)
– Fine branching granularity
– Lots of different processes/threads
– High performance on a single thread of execution
• GPU
– Lots of math units
– Fast access to onboard memory
– Run a program on each fragment/vertex
– High throughput on parallel tasks
• CPUs are great for task parallelism
• GPUs are great for data parallelism 5
slide by Mike Houston
24. Us
The Importance of Data Parallelism for GPUs P
G
• GPUs are designed for highly parallel tasks like
rendering
• GPUs process independent vertices and fragments
– Temporary registers are zeroed
– No shared or static data
– No read-modify-write buffers
– In short, no communication between vertices or fragments
• Data-parallel processing
– GPU architectures are ALU-heavy
• Multiple vertex & pixel pipelines
• Lots of compute power
– GPU memory systems are designed to stream data
• Linear access patterns can be prefetched
• Hide memory latency 6
slide by Mike Houston
27. ory
ist
H
!quot;quot;#$%&'$() 4:.;'/&,$'$()&#;+(,.#;<(/;=>9;1.),./$)8
*(++&),
!quot;#$%
! ?./'$%.2;&),;@/$+$'$A.2
-.(+.'/0
! 4/&)2<(/+&'$()2
! !quot;#$%quot;&#'()*)+,%,*-.',%/0
1&2'./$3&'$()
&$%#$%
4.5'6/.
! B9;C+&8.;<(/;,$2quot;#&0
7/&8+.)'
9$2quot;#&0
slide by Matthew Bolitho
28. ory
ist
H
1.),./;.'("#,(.0&F;/.&#$2'$%;%(+quot;6'./;
!
8.)./&'.,;2%.).2
! G&%=;A/&+.;$2;%(+quot;#.5
! H..,;IJ;A/&+.2;quot;./;2.%(),
quot;#$%&'()*)'+,,'&-,(.
!
quot; 3&4.,#(&4)5#quot;46#quot;&
slide by Matthew Bolitho
29. ory
ist
H
*:O;P;N(2'
!quot;quot;#$%&'$() 4(;$+quot;/(K.;quot;./A(/+&)%.F;+(K.;2(+.;
!
L(/M;'(;,.,$%&'.,;=&/,L&/.
*(++&),
N&/,L&/.;%(6#,;quot;/(%.22;.&%=;K./'.5;
!
-.(+.'/0
&),;.&%=;A/&8+.)';$),.quot;.),.)'#0;
quot; 7.$528)*#quot;#22&2
-/"=$%2;N&/,L&/.
1&2'./$3&'$()
4.5'6/.
7/&8+.)'
9$2quot;#&0
slide by Matthew Bolitho
30. ory
ist
H
/0)'1*23045&'#43)-46)'(2&'7!quot;#$%&!'()*quot;+(8
!
quot; N&/,L&/.;L&2;=&/,L$/.,;'(;quot;./A(/+;'=.;
(quot;./&'$()2;$);'=.;quot;$quot;.#$).
GK.)'6&##0F;quot;$quot;.#$).;@.%&+.;+(/.;
!
quot;/(8/&++&@#.
slide by Matthew Bolitho
31. ory
ist
H
*=>:?:@(2'
!quot;quot;#$%&'$() 4.5'6/.:&),:7/&8+.)':2'&8.2:;.%&+.:
!
+(/.:quot;/(8/&++&;#.<:%(+;$).,:$)'(:
*(++&),
!quot;#$%&'()*+(,)-
-.(+.'/0
=/(8/&++&;#.:C$&:&22.+;#0:#&)86&8.
!
D.+(/0:/.&,2:C$&:'.5'6/.:#((E6quot;2
!
-/"A$%2:@&/,B&/.
1&2'./$3&'$()
!.'/'(0$()-*)'1)2#'*34452/6
!
F$+$'.,:=/(8/&+:2$3.
!
7/&8+.)':>)$'
G(:/.&#:;/&)%A$)8:H'A62:#((quot;$)8I
!
9$2quot;#&0
slide by Matthew Bolitho
32. ory
ist
H
*=>:?:@(2'
!quot;quot;#$%&'$() -.(+.'/0:2'&8.:;.%&+.:
!
/#4%#$&&$73'8*9$33'0*!:'#)'1*+(,)-
*(++&),
=/(8/&++&;#.:C$&:&22.+;#0:#&)86&8.
!
J./'.5:>)$'
G(:+.+(/0:/.&,2K
!
-/"A$%2:@&/,B&/.
1&2'./$3&'$()
F$+$'.,:=/(8/&+:2$3.
!
G(:/.&#:;/&)%A$)8:H'A62:#((quot;$)8I
!
7/&8+.)':>)$'
9$2quot;#&0
slide by Matthew Bolitho
33. ory
ist
H
*=>:?:@(2'
!quot;quot;#$%&'$() 4A$)82:$+quot;/(C.,:(C./:'$+.L
!
J./'.5:6)$':%&):,(:+.+(/0:/.&,2
!
*(++&),
D&5$+6+:=/(8/&+:2$3.:$)%/.&2.,
!
M/&)%A$)8:26quot;quot;(/'
!
J./'.5:>)$'
@$8A./:#.C.#:#&)86&8.2:H.N8N:@FOF<:*8I
!
-/"A$%2:@&/,B&/.
1&2'./$3&'$()
G.$'A./:'A.:J./'.5:(/:7/&8+.)':6)$'2:
!
%(6#,:B/$'.:'(:+.+(/0N::*&):()#0:B/$'.:
7/&8+.)':>)$'
'(:P/&+.:;6PP./
G(:$)'.8./:+&'A
!
G(:;$'B$2.:(quot;./&'(/2
!
9$2quot;#&0
slide by Matthew Bolitho
34. ory
ist
H
*=>:?:@(2'
!quot;quot;#$%&'$()
*(++&),
1&2'./$3&'$()
-/"A$%2:@&/,B&/.
9$2quot;#&0
*#+,-quot;($&
!quot;#$quot;%&'()$
'()$
4.5'6/.:D.+(/0 4.5'6/.:D.+(/0
slide by Matthew Bolitho
35. ory
ist
H
;(*<==>*?@+A6*7'9$&'*&46)3B*/#4%#$&&$73'8*
!
!C23),Q/$66-*$3%4#,)D&6*$334E'0*E#,)'6*)4*
!
+.+(/0L
! R):quot;&22:S:B/$'.:'(:P/&+.;6PP./
! 1.;$),:'A.:P/&+.;6PP./ &2:&:'.5'6/.
! 1.&,:$':$):quot;&22:T<:.'%N
M6':B./.:$).PP$%$.)'
!
slide by Matthew Bolitho
36. ory
ist
H
!quot;#$%"'(%)%&*&%+,#-'././0'1+))2,%&3'45quot;6
!
7././0'8'.quot;,quot;5*('/25$+#quot;'9+)$2&*&%+,'+,'&:quot;'./0;
!quot;!quot;#$quot;%&'%()*
! !quot;#$%&'()&*)+%),&-#.%
! /(*1quot;'<*&*'%,'"=&25quot;#
! !5*6'*'>(*&'?2*<'7+>>@#15quot;quot;,;
! A5%"')2(&%@$*##'*(4+5%&:)'2#%,4'B5*4)quot;,&'0,%&'
&+'$quot;5>+5)'12#&+)'$5+1quot;##%,4
slide by Matthew Bolitho
37. ory
ist
H
0,<quot;5@2&%(%Cquot;<':*5<6*5quot;
!
! D,(3'2&%(%Cquot;<'B5*4)quot;,&'0,%&
! D>",')quot;)+53'E*,<6%<&:'(%)%"<
.*&:quot;5@E*#quot;<'*(4+5%&:)#'+,(3'7,+'#1*&"5;
!
0#quot;<'&:quot;'.5*$:%1#'F/G
!
slide by Matthew Bolitho
38. ory
ist
H
9/0'H'I+#&
F$$(%1*&%+,
9+))*,<
J*#"5%C*&%+,
.5*$:%1#'I*5<6*5quot;
!%#$(*3
!,&),-%2$ 1%('),/-$
+,%-,.$#/0-
#/0- #/0-
Kquot;)+53 Kquot;)+53 Kquot;)+53
slide by Matthew Bolitho
39. ory
ist
H
.quot;+)quot;&53'0,%&'+$quot;5*"#'+,'*'$5%)%&%Lquot;-'1*,'
!
65%"'E*1M'&+')quot;)+53
9:*,4quot;#'&+'2,<quot;5(3%,4':*5<6*5quot;N
!
! FE%(%&3'&+'65%"'&+')quot;)+53
! /-#.0.)12&3+quot;4)((.#5&'#.%(
slide by Matthew Bolitho
41. ysis
nal
A
//
#-+-
!%&'() $*(+%,()
!%&'()
!quot;!# !quot;$#
quot;&.+/*0+%1&
$*(+%,()
$quot;!# $quot;$#
slide by Matthew Bolitho
42. ysis
nal
A
//
9)('.0/1)/16quot;.0&7#)+/3):')#/,')$/./11'1):;)
!
!quot;#$quot;#%&'!quot;#$%&'()$!*+%,+-..!,+/0
! <03,)-%3,/#'3&/1)$/.&()quot;-)&7')/16quot;.0&7#)
&7/&)/.')('$/./:1'
slide by Matthew Bolitho
43. ysis
nal
A
//
!quot;#$%&'()'*$'+&',)($'',%$)-.quot;#)$/.&0/1)
!
0#$.quot;2'#'3&
45)$.quot;$quot;.&0quot;3)quot;-)$.quot;6./#)&7/&)0()$/./11'1
!
85)($'',%$)quot;-)$/./11'1)$quot;.&0quot;3)
!
slide by Matthew Bolitho
44. ysis
nal
A
//
&'()*+)#,-,). &'+'.3'.(7%8.quot;97#,#
!quot;#$%&'()*+)#,-,). /0)1+%!quot;#$#
"-quot;%&'()*+)#,-,). 203'0%!quot;#$#
"-quot;%45quot;0,.6
slide by Matthew Bolitho
45. ysis
nal
A
//
896)0,-5*#%(quot;.%:'%3'()*+)#'3%:7%:)-5%-quot;#$%
!
quot;.3%3quot;-quot;;
! !quot;#$;%<,.3%60)1+#%)=%,.#-01(-,).#%-5quot;-%(quot;.%:'%
'>'(1-'3%,.%+quot;0quot;99'9
! %quot;";%<,.3%+quot;0-,-,).#%,.%-5'%3quot;-quot;%-5quot;-%(quot;.%:'%1#'3%
?0'9quot;-,@'97A%,.3'+'.3'.-97
slide by Matthew Bolitho
46. ysis
nal
A
//
&'()*+)#,-,). &'+'.3'.(7%8.quot;97#,#
!quot;#$%&'()*+)#,-,). /0)1+%!quot;#$#
"-quot;%&'()*+)#,-,). 203'0%!quot;#$#
"-quot;%45quot;0,.6
slide by Matthew Bolitho
47. lysis
Ana
//
!quot;#$%&'()*'(#$+,-.)*/(#quot;0(1.quot;0(!quot;#$%&'#('
!
)*&+quot;$,+)#*& )*#)(#-'(2-'$#).3'$%4(.quot;0'5'quot;0'quot;)
6+7(8,$'9:$#-(;%quot;#/.9<
!
! =,/5:)'>.?-#).,quot;#$@,-9'<
! =,/5:)'A,)#).,quot;#$@,-9'<
! =,/5:)';.*'0-#$@,-9'<
! =,/5:)'B'.+*?,:-<
! =,/5:)'B,quot;C,quot;0.quot;+@,-9'<
! D50#)'E,<.).,quot;<!quot;0>'$,9.).'<
slide by Matthew Bolitho
48. ysis
nal
A
//
;'9,/5,<.).,quot; ;'5'quot;0'quot;9%(!quot;#$%<.<
F#<G(;'9,/5,<.).,quot; H-,:5(F#<G<
;#)#(;'9,/5,<.).,quot; I-0'-(F#<G<
;#)#(J*#-.quot;+
slide by Matthew Bolitho
49. ysis
nal
A
//
!quot;#$%&'()*'(#$+,-.)*/(),(1.quot;0(K#%<(),(
!
%-quot;+)+)#*'+./'0-+-
6+7(8#)-.L(8:$).5$.9#).,quot;7(=,$:/quot;<(#quot;0(A,K<
!
1 2
slide by Matthew Bolitho
50. ysis
nal
A
//
!quot;#$%&'()*'(#$+,-.)*/(),(1.quot;0(K#%<(),(
!
%-quot;+)+)#*'+./'0-+-
6+7(8#)-.L(8:$).5$.9#).,quot;7(C$,9G<
!
1 2
slide by Matthew Bolitho
51. sis
naly
// A
!5'0'%quot;0'%*quot;.7%:quot;7#%-)%3'()*+)#'%quot;.7%
!
6,;'.%quot;96)0,-5*
4)*'-,*'#%3quot;-quot;%3'()*+)#'%'quot;#,97
!
4)*'-,*'#%-quot;#$#%3'()*+)#'%'quot;#,97
!
4)*'-,*'#%<)-5=
!
4)*'-,*'#%.',-5'0=
!
slide by Matthew Bolitho
52. ysis
nal
A
//
&'()*+)#,-,). &'+'.3'.(7%8.quot;97#,#
!quot;#$%&'()*+)#,-,). /0)1+%!quot;#$#
"-quot;%&'()*+)#,-,). 203'0%!quot;#$#
"-quot;%45quot;0,.6
slide by Matthew Bolitho
53. ysis
nal
A
//
2.('%-5'%quot;96)0,-5*%5quot;#%<''.%3'()*+)#'3%
!
,.-)%3quot;-quot;%quot;.3%-quot;#$#>
! 8.quot;97?' @.-'0quot;(-,).#
slide by Matthew Bolitho
54. ysis
nal
A
//
!)%'quot;#'%-5'%*quot;.quot;6'*'.-%)A%3'+'.3'.(,'#%
!
A,.3%-quot;#$#%-5quot;-%quot;0'%#,*,9quot;0%quot;.3%60)1+%-5'*
!5'.%quot;.quot;97?'%().#-0quot;,.-#%-)%3'-'0*,.'%quot;.7%
!
.'('##quot;07%)03'0
slide by Matthew Bolitho
55. ysis
nal
A
//
!quot;#$%&$#'($#)%*%+$)$*'#quot;,#-$.$*-$*/0$&#
!
,0*-#'%&1&#'(%'#%2$#&0)03%2#%*-#+2quot;4.#'($)
5+6#7quot;3$/43%2#89*%)0/&
!
! :quot;).4'$;0<2%'0quot;*%3=quot;2/$&
! :quot;).4'$>quot;'%'0quot;*%3=quot;2/$&
! :quot;).4'$80($-2%3=quot;2/$&
! :quot;).4'$?$0+(<quot;42&
! :quot;).4'$?quot;*@quot;*-0*+=quot;2/$&
! A.-%'$Bquot;&0'0quot;*&C*-;$3quot;/0'0$&
slide by Matthew Bolitho
56. ysis
nal
A
//
:quot;).4'$#@quot;*-$-#=quot;2/$&
!
! :quot;).4'$;0<2%'0quot;*%3=quot;2/$&
! :quot;).4'$>quot;'%'0quot;*%3=quot;2/$&
! :quot;).4'$80($-2%3=quot;2/$&
:quot;).4'$#?$0+(<quot;42&
!
:quot;).4'$#?quot;*D@quot;*-0*+#=quot;2/$&
!
A.-%'$Bquot;&0'0quot;*&C*-;$3quot;/0'0$&
!
slide by Matthew Bolitho
57. ysis
nal
A
//
E*/$#+2quot;4.&#quot;,#'%&1&#%2$#0-$*'0,0$-F#-%'%#,3quot;G#
!
/quot;*&'2%0*'&#$*,quot;2/$#%#.%2'0%3#quot;2-$26
?$0+(<quot;2#H0&'
@quot;*-$-#=quot;2/$& ?quot;*#@quot;*-$-#=quot;2/$&
A.-%'$#Bquot;&0'0quot;*&#%*-#;$3quot;/0'0$&
slide by Matthew Bolitho
58. ysis
nal
A
//
8$/quot;).quot;&0'0quot;* 8$.$*-$*/9#C*%39&0&
!%&1#8$/quot;).quot;&0'0quot;* I2quot;4.#!%&1&
8%'%#8$/quot;).quot;&0'0quot;* E2-$2#!%&1&
8%'%#J(%20*+
slide by Matthew Bolitho
59. ysis
nal
A
//
!quot;#$%&'()*'++,%-(.$($.%/(-0&1%-2%)'131%'quot;.%
!
&'()*)*-quot;1%-2%.')'%'($%*.$quot;)*2*$.4%'quot;'+,5$%)6$%
!quot;#quot;$%"'()*$)6')%-##0(1
slide by Matthew Bolitho
60. ysis
nal
A
//
7')'%16'(*quot;/%#'quot;%8$%#')$/-(*5$.%'19
!
! :$'.;-quot;+,
! <22$#)*=$+,%>-#'+
! :$'.;?(*)$
! @##0A0+')$
! B0+)*&+$%:$'.CD*quot;/+$%?(*)$
slide by Matthew Bolitho
61. ysis
nal
A
//
+,quot;!-.)/0
! 7')'%*1%($'.4%80)%quot;-)%E(*))$quot;
! F-%#-quot;1*1)$quot;#,%&(-8+$A1
! :$&+*#')*-quot;%*quot;%.*1)(*80)$.%1,1)$A
slide by Matthew Bolitho
62. ysis
nal
A
//
122,3#(4,/0-5.3quot;/
! 7')'%*1%($'.%'quot;.%E(*))$quot;
! 7')'%*1%&'()*)*-quot;$.%*quot;)-%1081$)1
! !quot;$%)'13%&$(%1081$)
! G'quot;%.*1)(*80)$%1081$)1
slide by Matthew Bolitho
63. ysis
nal
A
//
+,quot;!-6'(#,
! 7')'%*1%($'.%'quot;.%E(*))$quot;
! B'quot;,%)'131%'##$11%A'quot;,%.')'
! G-quot;1*1)$quot;#,%*110$1
! B-1)%.*22*#0+)%)-%.$'+%E*)6
slide by Matthew Bolitho
64. ysis
nal
A
//
:8(;$/%<#=(-&,8#=2/-,$/,9(-,14
!
'%()*>4/5
3 4
'%()*>4/5
:??%9-,@%/5*
A19(/
slide by Matthew Bolitho
65. ysis
nal
A
//
:8(;$/%<#=1/%92/(&#B54(;,9quot;
!
F%,30I1&#A,quot;-
H1&9%quot;
G14)%)#H1&9%quot; F14#G14)%)#H1&9%quot;
C$)(-%#D1quot;,-,14quot;#(4)#E%/19,-,%quot;
slide by Matthew Bolitho
66. ysis
nal
A
//
:8(;$/%<#=1/%92/(&#B54(;,9quot;
!
F%,30I1&#A,quot;-
!-1;,9#
J11&),4(-%quot;
G14)%)#H1&9%quot; F14#G14)%)#H1&9%quot;
C$)(-%#D1quot;,-,14quot;#(4)#E%/19,-,%quot;
slide by Matthew Bolitho