• Aucun résultat trouvé

5 Experimental Results

Dans le document A Stream Algorithm for the SVD (Page 27-31)

Os códigos na linguagem VHDL foram desenvolvidos na ferramenta de síntese Quartus 17.1 64-bits. O código-fonte foi sintetizado pra o FPGA EP4CE115F29C7, da família Cyclone IV E. A síntese foi realizada no sistema monoprocessado e no sistema multiprocessado com 2 núcleos. A tabela 9 apresenta os resultados obtidos:

Tabela 9: Aspectos de hardware obtidos na síntese no Quartus 17.1

Nº de Núcleos Elementos Lógicos Total de Registradores Bits de Memória elements Embedded Multiplier 9-bit 1 Núcleo 3157 (3%) 536 67584 (2%) 6 (1%) 2 Núcleos 117610 (103%) 33956 69632 (2%) 12 (2%)

Apesar de o banco de registradores possuir somente 32 registradores, houve uma utilização de 600 registradores pelo sistema com 1 núcleo, o que foi ocasionado pela metodologia utilizada no projeto de inserir sinais auxiliares nas saídas dos componentes do processador. A quantidade de bits de memória utilizados foi dentro do esperado uma vez que a memória de instruções e a memória de dados utilizam cada uma 32.768 bits.

Realizando uma comparação entre os resultados das sínteses do sistema monoprocessado e do sistema multiprocessado, houve um grande aumento na quantidade de registradores utilizado pelo sistema multiprocessado. Quando detalhados os dados da síntese do sistema multiprocessado, foi constatado que a ferramenta não conseguiu realizar simplificações no circuito durante a síntese e a memória de dados compartilhada, que deveria ter sido alocada dentre os bits de memória, foi instanciada como registradores. Um trabalho futuro trata-se da realização de simplificações na programação do sistema para corrigir tais problemas citados.

6 Considerações finais

Nesta monografia foi apresentado o desenvolvimento de um sistema multiprocessado com 2 núcleos baseados no MIPS Pipeline com 5 estágios. Foi desenvolvido um núcleo baseado na versão do livro Organização e Projeto

de Computadores (PATTERSON; HENNESSY, 2005) para executar um

conjunto reduzido de instruções, mas com mudanças que foram necessárias para a sincronização na execução do sistema.

O sistema multiprocessado foi constituído de duas instâncias do núcleo desenvolvido, as quais foram interligadas a uma única memória de dados compartilhada por uma interface de comunicação, que recebe os sinais de controle do estágio de acesso à memória, o endereço de memória, o dado de entrada da memória de dados e devolve para os núcleos os dados obtidos nas leituras.

Foram realizados testes considerando a multiplicação de matrizes 2x2 e 3x3. A opção por essa aplicação se deu pela facilidade de se realizar distribuição das instruções para serem executadas em dois núcleos. Nos testes realizados, cada núcleo do sistema multiprocessado realizou as leituras das matrizes na memória, calculou uma parte dos elementos da matriz resultado e salvou de volta na memória de dados.

Os resultados foram extraídos executando a mesma multiplicação com 1 núcleo e 2 núcleos. Quando comparados os números relacionados ao desempenho em ambos os cenários, constata-se a redução no número de ciclos necessários e no CPI médio quando as multiplicação são realizadas no sistema multiprocessado com 2 núcleos.

Dentre os trabalhos futuros estão a inclusão do tratamento de conflitos de dados e controle pelo pipeline. Instanciação de uma memória privada para cada núcleo com simulação e análise dos resultados, inclusão de novos núcleos no sistema, e simplificações na programação do sistema para a diminuição da utilização de registradores nos sistema com 1 e 2 núcleos.

52

7

Referências Bibliográficas

ALVES, M. A. Z. ; NAVAUX, P. O. A. ; KASTENSMIDT, F. L. . Avaliação de um

Chip Multiprocessado com Redes em Chip Implementado em FPGA. In:

Workshop de Processamento Paralelo e Distribuído, 2007, Porto Alegre - RS. WSPPD - V Workshop de Processamento Paralelo e Distribuído. Porto Alegre, RS: Evangraf, 2007. p. 75-78.

BARROS, Edna; CAVALCANTE, Sérgio. Introdução aos Sistemas

Embarcados, 2013.

FLOYD, Tom. Sistemas Digitais Fundamentos e Aplicações, 9ª ed. São Paulo, Bookman, 2007. 888p

JOHANN, S. F.; PONTES, J.; LEITHARDT, V. Multiprocessor system on a

chip. 2007

MELLANOX TECHNOLOGIES: GX72. Fev., 2015. Disponível em: <http://www.mellanox.com/page/products_dyn?product_family=238&mtag =tile_gx72>. Acesso em Novembro 14, 2017.

MOTTA, R. B. Reduzindo o consumo em MPSoCs Heterogênios via Clock

Gating. 2008. 106 f. Dissertação (Mestrado em Ciência da Computação) –

Instituto de Informática. Universidade Federal do Rio Grande do Sul, Porto Alegre.

OLIVEIRA, Bruno Cruz ; SILVA, I. S. . Comparação de Modelos de Memória

para Plataformas MPSoC Usando SystemC. In: Workshop de Sistemas

Embarcados, 2010, Porto Alegre. I Woekshop de Sistemas Embarcados. Porto Alegre: SBC, 2010. v. 1. p. 59-68.

OLIVEIRA, Odair. Odair Implementação e avaliação de desempenho de um

MPSOC homogêneo interconectado por NOC. 2009. 90 f. Dissertação

(Mestrado em Ciência da Computação) – Faculdade de Informática. Pontifícia Universidade Católica do Rio Grande do Sul, Porto Alegre.

PATTERSON, D. A.; HENNESSY, J. L. Organização e Projeto de

Computadores: A interface hardware/software. São Paulo: Elsevier, 2005.

484p

TANENBAUM, A. S. Organização Estruturada de Computadores, 5ª. ed. São Paulo: Prentice-Hall, 2007. 448p

TORTATO, Jorge; HEXSEL, Roberto. MPSoC Minimalista com Caches

Coerentes Implementado num FPGA, 2009.

WOLF, Marilyn. Computers As Components: Principles of Embedded

Computing System Design. 3a ed. Morgan Kaufmann, 2012. 528p.

ZHANG W. et al. , Design of a Hierarchy-Bus Based MPSoC on FPGA, International Conference on Solid-state and Integrated Circuit Technology,

54

APÊNDICE A – Instruções necessárias

para a Multiplicação 2x2 com 1 núcleo

Este apêndice apresenta o conjunto de instruções necessárias para realizar a multiplicação de duas matrizes 2x2 com 1 núcleo. As duas matrizes de operandos são lidas na memória de dados, a matriz resultado é calculada e salva de volta na memória de dados. A Figura 22 apresenta como a matriz foi representada no conjunto de instruções.

Figura 22: Representação da matriz 2x2 no conjunto de instruções

lw r11, 04(r0) →A lw r15, 08(r0) → E lw r12, 16(r0) → B lw r17, 20(r0) → G lw r16, 12(r0) → F mult r11, r15 → A*E lw r18, 24(r0) → H mult r12, r17 → B*G mflo r1 → A*E mult r11, r16 → A*F mflo r2 → B*G lw r13, 28(r0) → C mflo r3 → A*F mult r12, r18 → B*H lw r14, 32(r0) → D

add r21, r1, r2 → A*E + B*G – A(1,1) mflo r4 → B*H mult r13, r15 → C*E mult r14, r17 → D*G mult r13, r16 → C*F mflo r5 → C*E mflo r6 → D*G mult r14, r18 → D*H mflo r7 → C*F

add r22, r3, r4 → A*F + B*H – A(1,2) mflo r8 → D*H

add r23, r5, r6 → C*E + D*G – A(2,1) sw r21, 104(r0) → A(1,1)

add r24, r7, r8 → C*F + D*H – A(2,2) sw r22, 108(r0) → A(1,2)

sw r23, 112(r0) → A(2,1) sw r24, 116(r0) → A(2,2)

APÊNDICE B – Divisão das Instruções

para a Multiplicação 2x2 com 2 núcleo

Este apêndice apresenta o conjunto de instruções necessárias para realizar a multiplicação de duas matrizes 2x2 no sistema multiprocessado com 2 núcleo. As instruções foram distribuídas de forma que o Núcleo 1 calcule a primeira linha da matriz resultado e o Núcleo 2 calcule a segunda linha. A Figura 22 também se aplica a este conjunto de instruções.

Tabela 10: Instruções distribuídas nos 2 núcleos

INSTRUÇÕES NO NÚCLEO 1 INSTRUÇÕES NO NÚCLEO 2

lw r11, 4(r0) → A lw r13, 28(r0) → C lw r15, 8(r0) → E lw r15, 8(r0) → E lw r12, 16(r0) → B lw r12, 32(r0) → D lw r17, 20(r0) → G lw r17, 20(r0) → G lw r16, 12(r0) → F lw r16, 12(r0) → F mult r11, r15 → A*E mult r13, r15 → C*E lw r18, 24(r0) → H lw r18, 24(r0) → H mult r12, r17 → B*G mult r14, r17 → D*G mult r11, r16 → A*F mult r13, r16 → C*F mflo r1 → A*E mflo r1 → C*E mflo r2 → B*G mflo r2 → D*G mult r12, r18 - B*H mult r14, r18 → D*H mflo r3 → A*F mflo r3 → C*F

add r21, r1, r2 → A*E+B*G – A(1,1) add r23, r1, r2 → C*E+D*G – A(2,1) mflo r4 → B*H mflo r4 - D*H

NO-OP NO-OP

sw r21, 104(r0) → A(1,1) sw r23, 112(r0) → A(2,1) add r22, r3, r4 → A(1,2) add r24, r3, r4 → A(2,2)

NO-OP NO-OP

NO-OP NO-OP

56

APÊNDICE C – Instruções necessárias

para a Multiplicação 3x3 com 1 núcleo

Este apêndice apresenta o conjunto de instruções necessárias para realizar a multiplicação de duas matrizes 3x3 com 1 núcleo. As duas matrizes de operandos são lidas na memória de dados, a matriz resultado é calculada e salva de volta na memória de dados. A Figura 23 apresenta como a matriz foi representada no conjunto de instruções.

Figura 23: Representação da matriz 3x3 no conjunto de instruções lw r1, 4(r0) → A lw r2, 16(r0) → J lw r3, 8(r0) → B lw r4, 20(r0) → M lw r5, 12(r0) → C mult r1, r2 → A*J lw r6, 24(r0) → P mult r3, r4 → B*M lw r7, 28(r0) → K mflo r8 → A*J mult r5, r6 → C*P mflo r9 → B*M lw r10, 32(r0) → N lw r11, 36(r0) → Q mflo r12 → C*P add r8, r8, r9 → A*J + B*M mult r1, r7 → A*K lw r9, 40(r0) → L mult r3, r10 → B*N lw r31, 44(r0) → O mflo r13 → A*K mult r5, r11 → C*Q mflo r14 → B*N mult r1, r9 → A*L lw r15, 48(r0) → R mflo r1 → C*Q mult r3, r31 → B*O mflo r16 - A*L

add r21, r8, r12 → (A*J+B*M)+C*P – a(1,1) add r8, r13, r14 → (A*K + B*N) mflo r12 → B*O lw r13, 52(r0) → D lw r14, 56(r0) → E mult r5, r15 → C*R lw r30, 60(r0) → F mult r13, r2 → D*J add r22, r8, r1 → (A*K + B*N)+C*Q – a(1,2) mflo r5 → C*R

add r1, r16, r12 → A*L + B*O mflo r3 → D*J

mult r14, r4 → E*M sw r21, 104(r0) → a(1,1)

add r23, r1, r5 → (A*L+B*O)+C*R - a(1,3) mflo r1 → E*M mult r30, r6 → F*P mult r13, r7 → D*K mult r14, r10 → E*N mflo r5 → F*P mflo r12 → D*K add r3, r3, r1 → D*J + E*M mflo r29 → E*N mult r30, r11 → F*Q mult r13, r9 → D*L

add r24, r3, r5 → (D*J+E*M)+F*P – a(2,1) mflo r5 → F*Q mflo r3 → D*L add r12, r12, r29 → (D*K+E*N) mult r14, r31 → E*O mult r30, r15 → F*R lw r17, 64(r0) → G mflo r16 → E*O mflo r12 → F*R lw r18, 68(r0) → H add r25, r12, r5 → (D*K+E*N)+F*Q – a(2,2)

lw r19, 72(r0) → I add r3, r3, r16 → D*L + E*O mult r17, r2 → G*J mult r18, r4 → H*M sw r22, 108(r0) → a(1,2) mflo r5 → G*J mflo r16 → H*M mult r17, r7 → G*K mult r18, r10 → H*N

add r26, r3, r12 → (D*L+E*O)+F*R – a(2,3) mflo r3 → G*K mult r19, r6 → I*P mflo r12 → H*N mult r17, r9 → G*L add r5, r5, r16 → G*J + H*M mflo r13 → I*P mult r18, r31→ H*O mflo r14 → G*L mult r19, r11 → I*Q add r3, r3, r12 → G*K + H*N mflo r12 → H*O mult r19, r15 → I*R mflo r20 → I*Q

add r27, r5, r13 → (G*J+H*M)+I*P – a(3,1) add r14, r14, r12 → G*L + H*O mflo r13 → I*R add r28, r3, r20 → (G*K + H*N) + I*Q – a(3,2) sw r23, 112(r0) → a(1,3) sw r24, 116(r0) → a(2,1) add r29, r14, r13 → (G*L+H*O)+I*R – a(3,3) sw r25, 120(r0) → a(2,2) sw r26, 124(r0) → a(2,3) sw r27, 128(r0) → a(3,1) sw r28, 132(r0) → a(3,2) sw r29, 136(r0) → a(3,3)

58

APÊNDICE D – Divisão das Instruções

para a Multiplicação 3x3 com 2 núcleos

Este apêndice apresenta o conjunto de instruções necessárias para realizar a multiplicação de duas matrizes 3x3 no sistema multiprocessado com 2 núcleos. As instruções foram distribuídas de forma que o Núcleo 1 calcule a primeira linha da matriz resultado e o Núcleo 2 calcule a segunda linha. Na terceira linha, 2 elementos são calculados pelo Núcleo 1, e 1 no Núcleo 2 A Figura 23 também se aplica a este conjunto de instruções.

Tabela 11: Instruções distribuídas nos 2 núcleos

INSTRUÇÕES NO NÚCLEO 1 INSTRUÇÕES NO NÚCLEO 2

lw r1, 4(r0) → A lw r1, 52(r0) → D lw r2, 16(r0) → J lw r2, 16(r0) → J lw r3, 8(r0) → B lw r3, 56(r0) → E lw r4, 20(r0) → M lw r4, 20(r0) → M lw r5, 12(r0) → C lw r5, 60(r0) → F mult r1, r2 → A*J mult r1, r2 → D*J lw r6, 24(r0) → P lw r6, 24(r0) → P mult r3, r4 → B*M mult r3, r4 → E*M lw r7, 28(r0) → K lw r7, 28(r0) → K mflo r8 → A*J mflo r8 → D*J mult r5, r6 → C*P mult r5, r6 → F*P mflo r9 → B*M mflo r9 → E*M lw r10, 32(r0) → N lw r10, 32(r0) → N lw r11, 36(r0) → Q lw r11, 36(r0) → Q mflo r20 → C*P mflo r20 → F*P

add r8, r8, r9 → A*J + B*M add r8, r8, r9 → D*J + E*M mult r1, r7 → A*K mult r1, r7 → D*K

lw r9, 40(r0) → L lw r9, 40(r0) → L mult r3, r10 → B*N mult r3, r10 → E*N lw r31, 44(r0) → O lw r31, 44(r0) → O mflo r13 → A*K mflo r13 → D*K mult r5, r11 → C*Q mult r5, r11 → F*Q mflo r14 → B*N mflo r14 → E*N

mult r1, r9 → A*L mult r1, r9 → D*L lw r15, 48(r0) → R lw r15, 48(r0) → R mflo r1 → C*Q mflo r1 → F*Q mult r3, r31 → B*O mult r3, r31 → E*O mflo r16 → A*L mflo r16 → D*L lw r17, 64(r0) → G lw r17, 64(r0) → G lw r18, 68(r0) → H lw r18, 68(r0) → H mflo r12 → B*O mflo r12 → B*O mult r5, r15 → C*R mult r5, r15 → F*R mult r17, r2 → G*J mult r17, r9 → G*L lw r19, 72(r0) → I lw r19, 72(r0) → I mflo r5 → C*R mflo r5 → F*R mflo r3 → G*J mflo r3 → G*L

add r13, r13, r14 → A*K + B*N mult r18, r31 → H*O mult r18, r4 → H*M mult r19, r15 → I*R

mult r19, r6 → I*P add r13, r13, r14 → D*K + E*N add r16, r16, r12 → A*L + B*O mflo r14 → H*O

mflo r14 → H*M add r16, r16, r12 → D*L+E*O mflo r12 → I*P mflo r12 → I*R

mult r17, r7 → G*K add r24, r8, r20 → (D*J+E*M)+F*P – a(2,1) mult r18, r10 → H*N add r3, r3, r14 → G*L+H*O

add r21, r8, r20 → (A*J+B*M)+C*P – a(1,1) add r25, r13, r1 → (D*K+E*N)+F*Q – a(2,2) mflo r30 → G*K add r26, r16, r5 → (D*L+E*O)+F*R – a(2,3) mult r19, r11 → I*Q sw r24, 116(r0) → a(2,1)

mflo r31→ H*N add r29, r3, r12 → (G*L+H*O)+I*R – a(3,3) add r22, r13, r1 → (A*K+B*N)+C*Q – a(1,2) sw r25, 120(r0) → a(2,2)

mflo r17 → I*Q sw r26, 124(r0) → a(2,3) add r3, r3, r14 → G*J+H*M sw r29, 136(r0) → a(3,3) add r30, r30, r31 → G*K+H*N

add r23, r16, r5 → (A*L+B*O)+C*R –a(1,3) sw r21, 104(r0) →

add r27, r3, r12 → (G*J+H*M)+I*P – a(3,1) add r28, r30, r17 – (G*K+H*N)+I*Q – a(3,2) sw r22, 108(r0) → a(1,2)

sw r23, 112(r0) → a(2,2) sw r27, 128(r0) → a(3,1) sw r28, 132(r0) → a(3,2)

60

APÊNDICE E – Simulações 2x2

Figura 24: Simulação da Multiplicação 2x2 com 1 núcleo

APÊNDICE F – Simulações 3x3

Figura 26: Simulação da multiplicação 3x3 com 1 núcleo

Dans le document A Stream Algorithm for the SVD (Page 27-31)

Documents relatifs