Paraleliza¸c˜
ao de Simuladores de Hardware
Descritos em SystemC
Prof. Msc. Liana Dessandre Duenha
18 de maio de 2011
Motiva¸c˜ao
Introdu¸c˜ao `a SLDL SystemC O Escalonador SystemC
Simula¸c˜ao Paralela baseada em Eventos Discretos
Suporte `a paraleliza¸c˜ao de uma simula¸c˜ao SystemC Como avaliar desempenho
Motiva¸c˜
ao
O que ´e simula¸c˜ao de um sistema? Por que ´e importante?
Por que desempenho ´e importante?
Os simuladores s˜ao implementados com Linguagens de Descri¸c˜ao em N´ıvel de Sistema (SLDLs);
Estas SLDLs s˜ao tipicamente single threaded e n˜ao aproveitam toda a infra-estrutura paralela inerente `as arquiteturas de multiprocessamento;
M´odulos s˜ao pequenos e a troca de contexto pode afetar desempenho
Exemplos: System Verilog, Spec, SystemC;
O que pode ser feito para acelerar a simula¸c˜
ao?
O que ´e simula¸c˜ao de um sistema? Por que ´e importante?
Por que desempenho ´e importante?
Os simuladores s˜ao implementados com Linguagens de
Descri¸c˜ao em N´ıvel de Sistema (SLDLs);
Estas SLDLs s˜ao tipicamente single threaded e n˜ao aproveitam toda a infra-estrutura paralela inerente `as arquiteturas de multiprocessamento;
M´odulos s˜ao pequenos e a troca de contexto pode afetar desempenho
Exemplos: System Verilog, Spec, SystemC;
O que pode ser feito para acelerar a simula¸c˜
ao?
Motiva¸c˜
ao
O que ´e simula¸c˜ao de um sistema? Por que ´e importante?
Por que desempenho ´e importante?
Os simuladores s˜ao implementados com Linguagens de
Descri¸c˜ao em N´ıvel de Sistema (SLDLs);
Estas SLDLs s˜ao tipicamente single threaded e n˜ao aproveitam toda a infra-estrutura paralela inerente `as arquiteturas de multiprocessamento;
M´odulos s˜ao pequenos e a troca de contexto pode afetar desempenho
Exemplos: System Verilog, Spec, SystemC;
O que pode ser feito para acelerar a simula¸c˜
ao?
O que ´e simula¸c˜ao de um sistema? Por que ´e importante?
Por que desempenho ´e importante?
Os simuladores s˜ao implementados com Linguagens de
Descri¸c˜ao em N´ıvel de Sistema (SLDLs);
Estas SLDLs s˜ao tipicamente single threaded e n˜ao aproveitam toda a infra-estrutura paralela inerente `as arquiteturas de multiprocessamento;
M´odulos s˜ao pequenos e a troca de contexto pode afetar
desempenho
Exemplos: System Verilog, Spec, SystemC;
O que pode ser feito para acelerar a simula¸c˜
ao?
Motiva¸c˜
ao
O que ´e simula¸c˜ao de um sistema? Por que ´e importante?
Por que desempenho ´e importante?
Os simuladores s˜ao implementados com Linguagens de
Descri¸c˜ao em N´ıvel de Sistema (SLDLs);
Estas SLDLs s˜ao tipicamente single threaded e n˜ao aproveitam toda a infra-estrutura paralela inerente `as arquiteturas de multiprocessamento;
M´odulos s˜ao pequenos e a troca de contexto pode afetar
desempenho
Exemplos: System Verilog, Spec, SystemC;
O que pode ser feito para acelerar a simula¸c˜
ao?
Desenvolver t´
ecnicas para habilitar a simula¸c˜
ao
paralela de sistemas descritos em SystemC, a SLDL
mais utilizada por projetistas de SoCs e sistemas
embarcados, visando acelera¸c˜
ao da simula¸c˜
ao e
transparˆ
encia para o projetista.
Introdu¸c˜
ao `
a SLDL
SystemC
SystemC´e um conjunto de classes C++ que d´a suporte `a modelagem e simula¸c˜ao de sistemas de hardware em alto n´ıvel de abstra¸c˜ao;
Principal escolha de projetistas de SoCs em processadores embarcados
Suporte ao comportamento concorrente, estrutura hier´arquica e simula¸c˜ao;
Possui estruturas que facilitam a descri¸c˜ao de hardware, software e interfaces em C++, tais como: m´odulos, processos, portas, sinais, frequˆencia de rel´ogio, etc.
SystemC´e um conjunto de classes C++ que d´a suporte `a modelagem e simula¸c˜ao de sistemas de hardware em alto n´ıvel de abstra¸c˜ao;
Principal escolha de projetistas de SoCs em processadores embarcados
Suporte ao comportamento concorrente, estrutura hier´arquica e simula¸c˜ao;
Possui estruturas que facilitam a descri¸c˜ao de hardware, software e interfaces em C++, tais como: m´odulos, processos, portas, sinais, frequˆencia de rel´ogio, etc.
Introdu¸c˜
ao `
a SLDL
SystemC
SystemC´e um conjunto de classes C++ que d´a suporte `a modelagem e simula¸c˜ao de sistemas de hardware em alto n´ıvel de abstra¸c˜ao;
Principal escolha de projetistas de SoCs em processadores embarcados
Suporte ao comportamento concorrente, estrutura hier´arquica e simula¸c˜ao;
Possui estruturas que facilitam a descri¸c˜ao de hardware, software e interfaces em C++, tais como: m´odulos, processos, portas, sinais, frequˆencia de rel´ogio, etc.
SystemC´e um conjunto de classes C++ que d´a suporte `a modelagem e simula¸c˜ao de sistemas de hardware em alto n´ıvel de abstra¸c˜ao;
Principal escolha de projetistas de SoCs em processadores embarcados
Suporte ao comportamento concorrente, estrutura hier´arquica
e simula¸c˜ao;
Possui estruturas que facilitam a descri¸c˜ao de hardware, software e interfaces em C++, tais como: m´odulos, processos, portas, sinais, frequˆencia de rel´ogio, etc.
Introdu¸c˜
ao `
a SLDL
SystemC
SystemC´e um conjunto de classes C++ que d´a suporte `a modelagem e simula¸c˜ao de sistemas de hardware em alto n´ıvel de abstra¸c˜ao;
Principal escolha de projetistas de SoCs em processadores embarcados
Suporte ao comportamento concorrente, estrutura hier´arquica
e simula¸c˜ao;
Possui estruturas que facilitam a descri¸c˜ao de hardware,
software e interfaces em C++, tais como: m´odulos,
processos, portas, sinais, frequˆencia de rel´ogio, etc.
Os m´odulos representam componentes (funcionalidades, com
estado, comportamento e uma estrutura hier´arquica).
Um processo ´e a unidade b´asica de execu¸c˜ao; ´
E um m´etodo de classe de um m´odulo que ´e invocado pelo
escalonador no n´ucleo do SystemC.
As portas permitem que os m´odulos se comuniquem.
Exige a defini¸c˜ao de uma fun¸c˜ao principal sc main para declara¸c˜ao dos componentes do sistema e inicializa¸c˜ao da simula¸c˜ao.
Introdu¸c˜
ao `
a SLDL
SystemC
i n t s c m a i n ( i n t ac , c h a r av [ ] ) {
// INSTANCIACAO DOS COMPONENTES DO SISTEMA m i p s MEU MIPS ( ”MIPS” ) ; // p r o c e s s a d o r
mem MEM( ”MEM” ) ; // memoria // CONEXAO ENTRE COMPONENTES
MEU MIPS . DMport (MEM. t a r g e t e x p o r t ) ; // I N I C I O DA SIMULACAO
s c s t a r t ( ) ;
// AVALIACAO DOS RESULTADOS DA SIMULACAO MEU MIPS . P r i n t S t a t ( ) ;
r e t u r n MEU MIPS . e x i t s t a t u s ; }
A execu¸c˜ao de processos ´e dirigida por eventos;
O kernel SystemC mant´em informa¸c˜oes sobre o conjunto de
processos prontos e tamb´em a fila de eventos;
Fase de Avalia¸c˜ao
Enquanto h´a processos prontos, um deles ´e selecionado para iniciar a execu¸c˜ao e permanece executando at´e que termine ou at´e que inicie a espera por algum evento;
Se o processo corrente gerar eventos, todos os processos sens´ıveis a esses eventos tornam-se imediatamente prontos;
O Escalonador
SystemC
A execu¸c˜ao de processos ´e dirigida por eventos;
O kernel SystemC mant´em informa¸c˜oes sobre o conjunto de
processos prontos e tamb´em a fila de eventos;
Fase de Avalia¸c˜ao
Enquanto h´a processos prontos, um deles ´e selecionado para iniciar a execu¸c˜ao e permanece executando at´e que termine ou at´e que inicie a espera por algum evento;
Se o processo corrente gerar eventos, todos os processos sens´ıveis a esses eventos tornam-se imediatamente prontos;
A execu¸c˜ao de processos ´e dirigida por eventos;
O kernel SystemC mant´em informa¸c˜oes sobre o conjunto de
processos prontos e tamb´em a fila de eventos;
Fase de Avalia¸c˜ao
Enquanto h´a processos prontos, um deles ´e selecionado para iniciar a execu¸c˜ao e permanece executando at´e que termine ou at´e que inicie a espera por algum evento;
Se o processo corrente gerar eventos, todos os processos sens´ıveis a esses eventos tornam-se imediatamente prontos;
O Escalonador
SystemC
A execu¸c˜ao de processos ´e dirigida por eventos;
O kernel SystemC mant´em informa¸c˜oes sobre o conjunto de
processos prontos e tamb´em a fila de eventos;
Fase de Avalia¸c˜ao
Enquanto h´a processos prontos, um deles ´e selecionado para iniciar a execu¸c˜ao e permanece executando at´e que termine ou at´e que inicie a espera por algum evento;
Se o processo corrente gerar eventos, todos os processos sens´ıveis a esses eventos tornam-se imediatamente prontos;
Fase de Atualiza¸c˜ao
Atende `as requisi¸c˜oes de atualiza¸c˜ao dos respectivos processos; Todos os processos sens´ıveis a estas requisi¸c˜oes tornam-se prontos para execu¸c˜ao e a simula¸c˜ao inicia a fase de avalia¸c˜ao novamente;
Neste ponto, dizemos que a simula¸c˜ao avan¸cou em umciclo delta;
O tempo de simula¸c˜ao avan¸ca e todos os processos sens´ıveis a eventos de tempo tornam-se prontos e a fase de avalia¸c˜ao novamente ´e iniciada.
Se n˜ao h´a eventos de tempo pendentes, a simula¸c˜ao termina.
O Escalonador
SystemC
O que deve mudar para dar suporte `a execu¸c˜ao paralela?
O sistema ´e dividido em subsistemas para serem executados
paralelamente e cada processador executa um processo l´ogico
(PL);
Cada PL pode trabalhar com a evolu¸c˜ao de seu tempo de
processamento independentemente de outros PLs (TVL -tempo virtual local);
PL1
PROC1 MEM leituraPL2
PROC2PL3
escritaSimula¸c˜
ao Paralela baseada em Eventos Discretos (PDES)
O conjunto de TVLs de todos os PLs ir´a determinar o valor
do tempo virutal global (TVG), que representa o avan¸co geral
da simula¸c˜ao;
Torna-se necess´ario o uso de sofisticados algoritmos de comunica¸c˜ao para sincroniza¸c˜ao de rel´ogios locais e intercˆambio de informa¸c˜oes.
Erros de Causalidade E1 E2 1 2 PL1 2 Tempo t t (a) t1 t3 t2 E3 E2 Tempo (b) E1 1 2 timestamp timestamp PL PL PL
Pode-se garantir que n˜ao haver´a erros de causalidade quando ´e obedecida a seguinte restri¸c˜ao:
Restri¸c˜ao de Causalidade: Uma simula¸c˜ao baseada em eventos discretos, consistindo de processos l´ogicos que interagem
exclusivamente pela troca de mensagens de tempo, obedece a restri¸c˜ao de causalidade local se e somente se cada processo l´ogico
executa eventos em ordem n˜ao decrescente de tempo.
Simula¸c˜
ao Paralela baseada em Eventos Discretos (PDES)
Categorias de Protocolos de Sincroniza¸c˜ao:
Protocolos Conservadores:
Permitem execu¸c˜ao de eventos seguros, apenas (i.´e. que obedecem a restri¸c˜ao de causalidade);
Um evento ´e considerado seguro para ser processado quando todos os eventos com timestamp menor que o seu e que possam afet´a-lo de alguma forma, j´a tenham sido tratados. Quando um evento ´e seguro?
Protocolos Otimistas:
Permitem a execu¸c˜ao de eventos n˜ao-seguros;
Erros de causalidade s˜ao tratados por meio de rollback; Tendem a melhorar o desempenho da simula¸c˜ao O que fazer com leituras e escritas?
Figura: Escalonador SystemC palalelo.
Suporte `
a paraleliza¸c˜
ao de uma simula¸c˜
ao SystemC
Ezudheen et al. (2009): modifica¸c˜ao do escalonador original SystemC para dar suporte `a execu¸c˜ao de m´ultiplos processos em paralelo.
A quantidade de processos paralelos ´e reduzida linearmente ao n´umero de cores dispon´ıveis no sistema
Particionamento manual obteve melhores resultados
Maia, Greiner e Pecheux (2006) e Mello et al (2010):
modifica¸c˜ao no kernel SystemC a fim de melhorar o
desempenho de simula¸c˜oes de modelos em n´ıvel de transa¸c˜ao (TLM), resultando na cria¸c˜ao do modelo TLM de tempo distribu´ıdo (TLM-DT).
Cada processo tem sua pr´opria defini¸c˜ao de “tempo” local Simula¸c˜ao n˜ao utiliza o conceito de “tempo global”
Ezudheen et al. (2009): modifica¸c˜ao do escalonador original SystemC para dar suporte `a execu¸c˜ao de m´ultiplos processos em paralelo.
A quantidade de processos paralelos ´e reduzida linearmente ao n´umero de cores dispon´ıveis no sistema
Particionamento manual obteve melhores resultados
Maia, Greiner e Pecheux (2006) e Mello et al (2010):
modifica¸c˜ao no kernel SystemC a fim de melhorar o
desempenho de simula¸c˜oes de modelos em n´ıvel de transa¸c˜ao
(TLM), resultando na cria¸c˜ao do modelo TLM de tempo
distribu´ıdo (TLM-DT).
Cada processo tem sua pr´opria defini¸c˜ao de “tempo” local Simula¸c˜ao n˜ao utiliza o conceito de “tempo global”
Suporte `
a paraleliza¸c˜
ao de uma simula¸c˜
ao SystemC
Faveri (2010): apresenta uma nova vers˜ao do kernel SystemC capaz de obter ganho de desempenho em multicores;
Nova classe para mapeamento das threads da simula¸c˜ao ( SC DTHREAD );
As threads mapeadas como objetos desta nova classe liberam o processador e continuam aptas para serem escalonadas posteriormente;
Toda a paraleliza¸c˜ao do modelo de sistema ´e feita explicitamente;
Speedup de 2 a 22 em computadores com 4 a 12 n´ucleos.
Primeira abordagem: identifica¸c˜ao de quais threads do simulador
podem ou n˜ao executar em paralelo.
mapear as threads como SC DTHREAD
Ao encontrar uma chamada de wait(), a thread libera o processador para que outra thread execute e continua apta a ser escalonada posteriormente
Para evitar erros de causalidade decorrentes da execu¸c˜ao concorrente, ´e necess´ario verificar se os sinais de entrada de uma thread s˜ao v´alidos antes de iniciar sua execu¸c˜ao.
Suporte `
a paraleliza¸c˜
ao de uma simula¸c˜
ao SystemC
Identifica¸c˜ao de quais threads do simulador podem ou n˜ao
executar em paralelo. 1 2 3 4 5 6 7 8 A B B C D C A E A F E F G G G H I
Figura 1
Podemos estabelecer grupos cujas threads participantes
podem ser executadas em paralelo (P ar1, P ar2 e P ar3) e
grupos que obrigatoriamente devem ter execu¸c˜ao sequencial
(Seq1 e Seq2); 5 1 2 4 5 6 7 8 Seq Par Seq Par Par 1 1 3 2 2 3 Figura 2
Suporte `
a paraleliza¸c˜
ao de uma simula¸c˜
ao SystemC
Minimizar o overhead das trocas de contexto. ´
E comum que em um simulador descrito em SystemC existam muitos processos pequenos
A troca de contexto entre eles causa perda de desempenho na simula¸c˜ao
Identifica¸c˜ao e jun¸c˜ao de processos pequenos na simula¸c˜ao, visando minimizar o tempo gasto com trocas de contexto.
1 2 3 Trocas de contexto Figura 3 2 P P P P P P2 Tempo Tempo 1 P12 P12 P12 P3 (b) (a) evento evento Processos em execucao~ ’
Uso de Padr˜oes de Programa¸c˜ao Paralela: Mem´oria
compartilhada→ Padr˜ao OpenMP.
. . . double sum ; double a [ 2 5 6 ] , b [ 2 5 6 ] ; i n t n =256; . . . // i n i c i a l i z a c a o de a e b sum = 0 ;
#pragma omp f o r r e d u c t i o n ( + : sum ) f o r ( i =1; i <=n ; i ++) {
sum = sum+a [ i ] ∗ b [ i ] ; }
p r i n t f ( ”sum = %f \ n ” , sum ) ; . . .
Suporte `
a paraleliza¸c˜
ao de uma simula¸c˜
ao SystemC
Avalia¸c˜ao de Desempenho: compara¸c˜ao do tempo de
simula¸c˜ao e taxa de utiliza¸c˜ao dos cores durante simula¸c˜oes
com e sem o uso de t´ecnicas como estas apresentadas.
“Coleta” de simuladores para testes
Pesquisa e escolha de um padr˜ao de programa¸c˜ao paralela compat´ıvel (OpenMP?)
P. Ezudheen,P. Chandran,J. Chandra,B.P. Simon,D. Ravi. Parallelizing SystemC Kernel for Fast Hardware Simulation on SMP Machines. In 23rd Workshop on Principles of Advanced and Distributed Simulation, 2009.
R.R.C. Faveri. Viabilizando a Simula¸c˜ao Multi-Threaded para
Modelos Escritos em SystemC. Disserta¸c˜ao de
Mestrado-Instituto de Computa¸c˜ao da Universidade Estadual
de Campinas (IC-Unicamp), 2010.
B. Chopardl,P. Combes,J. Zory. A Conservative Approach to SystemC Parallelization. In International Conference on Computational Science, 2006.
A. Mello,I. Maia,A. Greiner,F. Pecheux. Parallel Simulation of SystemC TLM 2.0 Compliant MPSoC on SMP Workstations. In Design, Automation and Test in Europe Conference and Exhibition, 2010.