A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Vitor Fiorotto Astolfi Orientador: Jorge Luiz e Silva

Apresentações semelhantes


Apresentação em tema: "Vitor Fiorotto Astolfi Orientador: Jorge Luiz e Silva"— Transcrição da apresentação:

1 Vitor Fiorotto Astolfi Orientador: Jorge Luiz e Silva
PROCESSAMENTO CONCORRENTE EM ALGORITMOS COM EXECUÇÃO ORIENTADA A FLUXO DE DADOS EM HARDWARE RECONFIGURÁVEL Vitor Fiorotto Astolfi Orientador: Jorge Luiz e Silva

2 Problemas Enfrentados pelas Indústrias de Processadores
Maior barreira – densidade de potência. (W/cm²) Pentium Pro – densidade de uma chapa quente. Em 2010 – atingiria a temperatura de um reator nuclear Porém: em 2004 Intel anuncia que focará nos multi-core. Outras fabricantes seguem.

3 Problemas Enfrentados pelas Indústrias de Processadores
Gargalo – aumento da freqüência dos barramentos não acompanhou aumento da freqüência dos processadores. 7% ao ano.

4 PARALELISMO EM NÍVEL DE INSTRUÇÃO – PROCESSADORES SUPERESCALARES.
Técnicas – pipeline, execução fora-de- seqüência, execução especulativa. Temos algum processamento dirigido pelo fluxo de dados. Essas técnicas forneceram aumento de desempenho de 600% na década passada.

5 PARALELISMO EM NÍVEL DE INSTRUÇÃO – LIMITAÇÕES
Aumento indefinido de estágios de pipeline não é uma boa solução Potência consumida Baixo speedup

6 PARALELISMO EM NÍVEL DE INSTRUÇÃO – LIMITAÇÕES
Especulação agressiva aumenta muito o uso de memória Aumento da latência Prejudica preenchimento dos pipelines. Aumento da EPI

7 Arquiteturas Dataflow
Usa todo paralelismo possível Sem considerar execuções especulativas Elimina gargalo de acesso à memória centralizada Não há necessidade de armazenamento de dados compartilhado. Arquiteturas Dataflow (anos 70 e 80): problemas Granularidade fina demais – mais tempo era gasto durante o tráfego que a computação em si dos dados. Estruturas de dados Linguagens de programação Etc...

8 Projeto ChipCFlow Compilador da linguagem C para grafos Dataflow (fluxo de dados) Não usa linguagens de programação específicas das Arquiteturas Dataflow. Multi-tarefa – Uso do paralelismo natural do hardware Threads – Condições de disputa. Execução direta em hardware. Similar ao Impulse C, etc.

9 CPSEQ – DUAS COMPARAÇÕES SIMPLES EM SEQÜÊNCIA.
/* Programa CpSeq – Duas comparações em seqüência */ int main () { int a, b, c, d, e, f; int p, q, r, s, t, u; input(&a, &b, &c, &d, &e); if (a > 0) { f = b + c; } else { f = d – e; output(f); input(&p, &q, &r, &s, &t); if (p < 0) { u = q / r; } else { u = s * t; output(u);

10 CPPAR – DUAS COMPARAÇÕES SIMPLES EM PARALELO.
/* Programa CpPar – Duas comparações em paralelo */ void F( ) { int a, b, c, d, e, f; input(&a, &b, &c, &d, &e); if (a > 0) { f = b + c; } else { f = d – e; output(f); void U ( ) { int p, q, r, s, t, u; input(&p, &q, &r, &s, &t); if (p < 0) { u = q / r; } else { u = s * t; output(u); int main ( ) { thread tf, tu; thread_create(&tf, F); thread_create(&tu, U);

11 REPRESENTAÇÃO DE AMBOS CPSEQ E CPPAR EM GRAFO DATAFLOW

12 PROBLEMA DO PRODUTOR-CONSUMIDOR (MODIFICADO) – IMPLEMENTAÇÃO INCORRETA
/* quantidade máxima de elementos */ #define N 100 /* quantidade de elementos no momento */ int count = 0; int produzir; int consumir; void produtor ( ) { input(produzir); while (produzir) { if (count < N) { count = count + 1; } void consumidor ( ) { input(consumir); while (consumir) { if (count > 0) { count = count − 1; } int main ( ) { thread p; /*1 produtor */ thread c1, c2;/*2 consumidores */ thread_create(&p, produtor); thread_create(&c1, consumidor); thread_create(&c2, consumidor);

13 Problema do Produtor-Consumidor (modificado) – grafo Dataflow incorreto
Grafo Inseguro Grafo com condições de disputa. Inicialização da variável compartilhada

14 PROBLEMA DO PRODUTOR-CONSUMIDOR (MODIFICADO) – IMPLEMENTAÇÃO COM MONITORES
#define N 100 int count = 0; monitor produtor_consumidor { void insere () { if (count < N) { count = count + 1; } void remove () { if (count > 0) { count = count - 1; } void produtor () { input(produzir); while (produzir) { insere(); void consumidor ( ) { input(consumir); while (consumir) { remove(); } int main ( ) { thread p; /* 1 produtor */ thread c1, c2; /* 2 consumidores */ thread_create(&p, produtor); thread_create(&c1, consumidor); thread_create(&c2, consumidor);

15 Problema do Produtor-Consumidor (modificado) – grafo Dataflow com “distribuidor”
Grafo seguro Escalonamento round-robin Problema: limitação do paralelismo (gargalo).

16 Prova de conceito – Produtor Consumidor com compartilhamento de duas variáveis
Count – Número de itens disponíveis Cons – Número de itens consumidos Novos operadores em negrito Distribuidor – envio de dados simultâneo e exclusivo a cada linha de execução

17 PROVA DE CONCEITO – MODULARIZAÇÃO DO PROBLEMA
Criação de operadores produtor e consumidor Cada um deles testado separadamente.

18 SUPER-BLOCO “CONSUMIDOR” – IMPLEMENTAÇÃO NO XILINX ISE

19 Teste do super-bloco “consumidor”
Blocos INDATA e AOUT: Sincronizar dados de entrada e de saída.

20 Teste do super-bloco “consumidor” - Resultados

21 APÓS CRIAÇÃO DOS BLOCOS DISTRIBUIDOR E PRODUTOR – CIRCUITO FINAL

22 Circuito final – resultado (até 1000 ns)

23 Obrigado Perguntas?


Carregar ppt "Vitor Fiorotto Astolfi Orientador: Jorge Luiz e Silva"

Apresentações semelhantes


Anúncios Google