AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/101
Sistemasde Computaçãoe Desempenho
M e s tr a d o e m I n fo rm á ti c a
2009/10A .J .P ro e n ç a T e m a R e v is it a n d o o s S is te m a s d e C o m p u ta ç ã o
(2) AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/102Chapter 1 —Computer Abstractions and Technology —2Understanding Performance
• A lg o ri th m – D e te rm in e s n u m b e r o f o p e ra ti o n s e x e c u te d • P ro g ra m m in g l a n g u a g e , c o m p ile r, a rc h it e c tu re – D e te rm in e n u m b e r o f m a c h in e i n s tr u c ti o n s e x e c u te d p e r o p e ra ti o n • P ro c e s s o r a n d m e m o ry s y s te m – D e te rm in e h o w f a s t in s tr u c ti o n s a re e x e c u te d • I/ O s y s te m ( in c lu d in g O S ) – D e te rm in e s h o w f a s t I/ O o p e ra ti o n s a re e x e c u te d
AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/103Análise do desempenho em Sistemas de Computação: oportunidades para optimizar na arquitectura
O p ti m iz a ç ã o d o d e s e m p e n h o ( n o C P U ) – c o m i n tr o d u ç ã o d e p a ra le li s m o
•ao nível do processo(sistemas concorrentes/paralelos/distribuídos) –sófio de execução(multi-threading/ -core/ -chip...) –processo(memória partilhada/distribuída) •ao nível da instrução (InstructionLevelParallelism) –sónos dados(processadores vectoriais) –paralelismo desfasado(pipeline) –paralelismo "real"(VLIW, superescalar) •no acesso àmemória –paralelismo desfasado(interleaving) –paralelismo "real"(maior largura dobus) –paralelismo “redundante”(hierarquia de memória) »análise de processadores da Intel AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/104Paralelismo no processador Exemplo 1
E x e m p lo d e p ip e li n e
AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/105
Paralelismo no processador Exemplo 2
E x e m p lo d e s u p e re s c a la ri d a d e ( n ív e l 2 )
AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/106A introdução de cache na arquitectura Intel P6 Nota: "Intel P6" éa designação comum da microarquitecturade PentiumPro, Pentium II e Pentium III, que serviu depois de base àCore e Nehalem AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/107Chapter 1 —Computer Abstractions and Technology —7
Inside an AMD Processor
• A M D B a rc e lo n a : 4 p ro c e s s o r c o re s
AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/108Inside an Intel Processor
• In te l N e h a le m : 4 p ro c e s s o r c o re s
AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/109
A arquitectura interna dos processadores Intel P6(1) Unidades FuncionaisInteger/ BranchFP AddFP Mult/DivLoadStoreInstruction Cache Data Cache
Fetch Control Instruction Decode
Address Instrs. Operações PrevisãoOK? DataData
Addr.Addr.
General Integer Operation Results
Retirement Unit Register File Execution Unit
Instruction Control Unit AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1010
Algumas potencialidades do Intel P6(1) de 4-níveis de pipeline...
para vários níveis de pipeline... AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1011
A arquitectura interna dos processadores Pentium 4 AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1012
AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1013
Percurso crítico no pipeline de instruções: o P6 e o Pentium 4
P 6 P e n ti u m 4
AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1014Níveis de pipeline em 3 gerações de Pentium AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1015
O pipeline no Pentium 4: níveis 1-5 AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1016
O pipeline no Pentium 4: níveis 6-12
AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1017
O pipeline no Pentium 4: níveis 13-17 AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1018
O pipeline no Pentium 4: níveis 18-20 AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1019
CPU features before 2006 FIGURE 4.73 Record of Intel and Sun Microprocessors in terms of pipeline complexity, number of cores, and power.The Pentium 4 pipeline stages do not include the commit stages. If we included them, the Pentium 4 pipelines would be even deeper. Copyright ©2009 Elsevier, Inc. All rights reserved. AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1020
A brief history of x86 vector capabilities
AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1021
Como estão a evoluir as memórias?
“T h e m a in c h a lle n g e f o r th e C P U d e s ig n e r to d a y i s t h e a v e ra g e m e m o ry l a te n c y t h e C P U s e e s . A P e n ti u m 4 3 .6 G H z w it h D D R -4 0 0 ru n s ( .. .) f a s te r th a n t h e b a s e c lo c k o f th e R A M ( 2 0 0 M H z ). ( .. .) T h e r e s u lt i s t h a t w a it ti m e s o f 2 0 0 t o 3 0 0 c y c le s a re n o t u n c o m m o n o n t h e P e n ti u m 4 . T h e g o a l o f C P U c a c h e i s t o a v o id a c c e s s in g R A M , b u t (. .. )”
Statement in 2004… AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1022Evolução das caches nos x86, pré2006 AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1023
•Execuçãoparalela de váriasinstruções –2integer(1 podeser branch) –1FPAdd –1FPMultiplyouDivide –1load –1store •Algumasinstruçõesrequerem> 1 ciclo, maspodemser encadeadas InstruçãoLatênciaCiclos/Emissão –Load/Store31 –IntegerMultiply41 –IntegerDivide3636 –Double/SingleFPMultiply52 –Double/SingleFPAdd31 –Double/SingleFPDivide3838
U. Func.Integer/ BranchFP AddFP Mult/DivLoadStore Data Cache
DataDataAddr.Addr.
General Integer Operation Results Execution Unit
Algumas potencialidades do Intel P6(2) AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1024
•TraduzinstruçõesemOperações –Operações: designaçãodaIntel parainstruçõestipo-RISC –instruçãotípicarequer1–3 operações •Convertereferênciasa RegistosemTags –Tags: identificadorabstractoqueligao resultadode umaoperaçãocom operandos-fontede operaçõesfuturas
Instruction Cache
Fetch Control Instruction Decode
Address Instrs. Operations
Retirement Unit Register File
A unidade de controlo de instruções do Intel P6 Instruction Control Unit
P a p e l d a I C U :
•LêinstruçõesdaInstCache –baseadono IP + previsãode saltos –antecipadinamicamente(por h/w) se salta/não_saltae (possível) endereçode saltoAJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1025
Algumas limitações do pipeline: dependências de dados e saltos condicionais Ver exemplo nos slides seguintes...
incl%edx cmpl%esi,%edx jl.L24 AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1026
• P ro c e d im e n to – c a lc u la a s o m a d e t o d o s o s e le m e n to s d o v e c to r – g u a rd a o r e s u lt a d o n u m a l o c a liz a ç ã o d e s ti n o – e s tr u tu ra e o p e ra ç õ e s d o v e c to r d e fi n id o s v ia A D T
voidcombine4(vec_ptrv,int*dest) { inti; intlength=vec_length(v); int*data=get_vec_start(v); intsum=0; for(i=0;i<length;i++) sum+=data[i]; *dest=sum; }
Análise detalhada do exemplo: forma genérica e abstracta decombine voidabstract_combine4(vec_ptrv,data_t*dest) { inti; intlength=vec_length(v); data_t*data=get_vec_start(v); data_tt=IDENT; for(i=0;i<length;i++) t=tOPdata[i]; *dest=t; } AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1027
• V e rs ã o d e c o m b i n e 4 – ti p o d e d a d o s : in te ir o ; o p e ra ç ã o : m u lt ip lic a ç ã o • T ra d u ç ã o d a 1 ª it e ra ç ã o
.L24:#Loop: imull(%eax,%edx,4),%ecx#t*=data[i] incl%edx#i++ cmpl%esi,%edx#i:length jl.L24#if<gotoLoop .L24: imull(%eax,%edx,4),%ecx incl%edx cmpl%esi,%edx jl.L24 load(%eax,%edx.0,4)t.1 imullt.1,%ecx.0%ecx.1 incl%edx.0%edx.1 cmpl%esi,%edx.1cc.1 jl-takencc.1
Conversão de instruções com registos para operações com tags AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1028
•Operações –a posiçãovertical dáumaindicação do tempo emqueéexecutada •umaoperaçãonãopodeiniciar-se semosseusoperandos –a alturatraduza latência •Operandos –osarcos apenassãorepresentados paraosoperandosquesãousados no contextodaexecution unit
cc.1 t.1
load %ecx.1
incl cmpl jl
%edx.0 %edx.1 %ecx.0 imull
Time
Análise visual da execução de instruções no P6: 1 iteração do ciclo de produtos emcombine load(%eax,%edx.0,4t.1 imullt.1,%ecx.0%ecx.1 incl%edx.0%edx.1 cmpl%esi,%edx.1cc.1 jl-takencc.1
AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1029
cc.1 t.1
load %ecx.1
incl cmpl jl
%edx.0 %edx.1 %ecx.0 imull
cc.1 cc.2%ecx.0
%edx.3 t.1 imull %ecx.1
incl cmpl jl
%edx.0 i=0
load t.2 imull %ecx.2
incl cmpl jl
%edx.1 i=1
load cc.3 t.3 imull %ecx.3
incl cmpl jl
%edx.2 i=2
load Cycle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
cc.1 cc.2 Iteration 3
Iteration 2
Iteration 1
cc.1 cc.2%ecx.0
%edx.3 t.1 imull %ecx.1
incl cmpl jl
%edx.0 i=0
load t.1 imull %ecx.1
incl cmpl jl
%edx.0 i=0
load t.2 imull %ecx.2
incl cmpl jl
%edx.1 i=1
load t.2 imull %ecx.2
incl cmpl jl
%edx.1 i=1
load cc.3 t.3 imull %ecx.3
incl cmpl jl
%edx.2 i=2
load Cycle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Cycle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
cc.1 cc.2 Iteration 3
Iteration 2
Iteration 1
• A n á li s e c o m r e c u rs o s il im it a d o s – e x e c u ç ã o p a ra le la e e n c a d e a d a d e o p e ra ç õ e s n a E U – e x e c u ç ã o o u t- o f- o rd e r e e s p e c u la ti v a • D e s e m p e n h o – fa c to r lim it a ti v o : la tê n c ia d a m u lt ip l. d e i n te ir o s – C P E : 4 .0
Análise visual da execução de instruções no P6: 3 iterações do ciclo de produtos emcombine AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1030
• A n á li s e c o m r e c u rs o s il im it a d o s • D e s e m p e n h o – p o d e c o m e ç a r u m a n o v a i te ra ç ã o e m c a d a c ic lo d e c lo c k – v a lo r te ó ri c o d e C P E : 1 .0 – re q u e r a e x e c u ç ã o d e 4 o p e ra ç õ e s c / in te ir o s e m p a ra le lo
%edx.0 t.1
%ecx.i +1
incl cmpl jl addl %ecx.1
i=0
load cc.1
%edx.0 t.1
%ecx.i +1
incl cmpl jl addl %ecx.1
i=0
load cc.1
%edx.1 t.2
%ecx.i +1
incl cmpl jl addl %ecx.2
i=1
load cc.2
%edx.1 t.2
%ecx.i +1
incl cmpl jl addl %ecx.2
i=1
load cc.2
%edx.2 t.3
%ecx.i +1
incl cmpl jl addl %ecx.3
i=2
load cc.3
%edx.2 t.3
%ecx.i +1
incl cmpl jl addl %ecx.3
i=2
load cc.3
%edx.3 t.4
%ecx.i +1
incl cmpl jl addl %ecx.4
i=3
load cc.4
%edx.3 t.4
%ecx.i +1
incl cmpl jl addl %ecx.4
i=3
load cc.4
%ecx.0 %edx.4 Cycle
1 2 3 4 5 6 7
Cycle
1 2 3 4 5 6 7
Iteration 1 Iteration 2 Iteration 3 Iteration 4
4 ops inteiro
Análise visual da execução de instruções no P6: 4 iterações do ciclo de somas emcombine AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1031
Iteration 4 Iteration 5 Iteration 6 Iteration 7 Iteration 8
%ecx.3 %edx.8
%edx.3 t.4
%ecx.i +1
incl cmpl jladdl %ecx.4
i=3
load cc.4
%edx.3 t.4
%ecx.i +1
incl cmpl jladdl %ecx.4
i=3
load cc.4
%edx.4 t.5%ecx.i +1
incl cmpl jladdl %ecx.5 i=4
load cc.5
%edx.4 t.5%ecx.i +1
incl cmpl jladdl %ecx.5 i=4
load cc.5 cc.6 %edx.7 t.8%ecx.i +1
incl cmpl jladdl %ecx.8
i=7
load cc.8
%edx.7 t.8%ecx.i +1
incl cmpl jladdl %ecx.8
i=7
load cc.8
%edx.5 t.6
incl cmpl jl
addl %ecx.6
load i=5
%edx.5 t.6
incl cmpl jl
addl %ecx.6
load i=5
6 7 8 9 10 11 12 Cycle
13 14 15 16 17
6 7 8 9 10 11 12 Cycle
13 14 15 16 17 18
cc.6
%edx.6 t.7 cmpl jl
addl %ecx.7
load cc.7 i=6
incl
%edx.6 t.7 cmpl jl
addl %ecx.7
load cc.7 i=6
incl
– a p e n a s 2 u n id fu n c io n a is d e i n te ir o s – a lg u m a s o p e ra ç õ e s tê m d e s e r a tr a s a d a s , m e s m o e x is ti n d o o p e ra n d o s – p ri o ri d a d e : o rd e m d e e x e c d o p ro g ra m a • D e s e m p e n h o – C P E e x p e c tá v e l: 2 .0
As iterações do ciclo de somas: análise com recursos limitados AJProença,Sistemas de Computação e Desempenho, MInf, UMinho, 2009/1032
O p ti m iz a ç ã o 4 : – ju n ta r v á ri a s ( 3 ) it e ra ç õ e s n u m s im p le s c ic lo – a m o rt iz a o v e rh e a d d o s c ic lo s e m v á ri a s it e ra ç õ e s – te rm in a e x tr a s n o fi m – C P E : 1 .3 3
voidcombine5(vec_ptrv,int*dest) { intlength=vec_length(v); intlimit=length-2; int*data=get_vec_start(v); intsum=0; inti; /*junta3elem'snomesmociclo*/ for(i=0;i<limit;i+=3){ sum+=data[i]+data[i+1] +data[i+2]; } /*completaosrestanteselem's*/ for(;i<length;i++){ sum+=data[i]; } *dest=sum; } Técnicasde optimizaçãodependentesdamáquina: loop unroll(1)