testes_em_multicore

Testes em Multicore

Com a exploração de paralelismo e o consequente crescimento exponencial de desempenho nas últimas décadas, a fabricação de multiprocessor chips (CMP) é cada vez mais complexa. Multiprocessadores requerem modos de comunicação entre seus núcleos. Arquiteturas baseadas em trocas de mensagem fornecem ao processador uma memória local que só pode ser acessada por ele e requer trocas de mensagens com os demais núcleos do sistema. Arquiteturas baseadas em memória compartilhada fazem com que toda a memória seja acessível por todos os núcleos, possibilitanto a comunicação através de loads e stores. A abstração de uma única memória compartilhada requer um modelo conceitual de operações de memória que podem ser executadas simultaneamente de forma a orientar o programador sobre uma ordem específica de comportamento de programas paralelos.

 

Esse modelo, implementado em hardware, é chamado de Memory Consistency Model (MCM). Na busca cada vez maior de aumento de desempenho, fabricantes de multicore chips passaram a utilizar MCM’s cada vez mais relaxados, onde instruções de leitura e escrita podem ser realizadas fora da ordem especificada pelas threads de um programa. O aumento de número de núcleos de processamento e o uso de modelos de consistência relaxados corroboram o aumento da complexidade de projetos de processadores, deixando-os sucetíveis a erros.

A verificação funcional, essencialmente, é um processo comparativo entre o que o processador idealmente deveria ser e o que ele atualmente é. No contexto de CMPs, o processo de verificação consiste em executar programas concorrentes em simuladores de multicores chips e avaliar se o comportamento observado corresponde ao comportamento esperado. Tais programas são criados automaticamente através de agentes inteligentes e o comportamento do MCM do(s) chip(s) também é automaticamente avaliado por checkers depois (post-morten) ou durante a execução (on-the-fly).

 

O ECL, durante mais de uma década de pesquisa, desenvolveu um complexo, porém eficiente framework de verificação funcional de memória compartilhada. O Framework consiste de gerador automático de programas concorrentes, um checker e agentes inteligentes que direcionam a criação automática de testes, de forma a diminuir o tempo e o esforço de verificação, explorando as características desse problema. Cada programa concorrente é executado em um multicore, estimulando o sistema de memória compartilhada.  O checker verifica automaticamente se, ao executar o programa, algum comportamento observado desobedeceu o modelo de memória do multicore, o que representa um erro no hardware.

 

Após mais de uma década de publicações, o grupo de testes em multicore do ECL continua trabalhando na geração automática de testes, de forma a reduzir o tempo e o esforço de verificação, criando novas formas de representação de testes e algoritmos inteligentes. Além de portar o framework para Instruction Set Architectures para SPARC e ARM, o RISC-V surge como um alvo de portabilidade e publicações.

 

A partir dessa área de pesquisa, o ECL produziu teses de doutorado, dissertações de mestrado e projetos de iniciação científica, gerando publicações de alto impacto científico e profissionais qualificados que trabalham com pesquisas no Brasil e em empresas na Europa e nos Estados Unidos da América.

 

Publicações (até 2023):

E. A. Rambo, O. P. Henschel and L. C. V. dos Santos, “Automatic generation of memory consistency tests for chip multiprocessing,” 2011 18th IEEE International Conference on Electronics, Circuits, and Systems, Beirut, Lebanon, 2011, pp. 542-545, doi: 10.1109/ICECS.2011.6122332.

L. S. Freitas, G. A. G. Andrade and L. C. V. dos Santos, “Efficient verification of out-of-order behaviors with relaxed scoreboards,” 2012 IEEE 30th International Conference on Computer Design (ICCD), Montreal, QC, Canada, 2012, pp. 510-511, doi: 10.1109/ICCD.2012.6378698.

E. A. Rambo, O. P. Henschel and L. C. V. dos Santos, “On ESL verification of memory consistency for system-on-chip multiprocessing,” 2012 Design, Automation & Test in Europe Conference & Exhibition (DATE), Dresden, Germany, 2012, pp. 9-14, doi: 10.1109/DATE.2012.6176424.

L. S. Freitas, G. A. G. Andrade and L. C. V. dos Santos, “A template for the construction of efficient checkers with full verification guarantees,” 2012 19th IEEE International Conference on Electronics, Circuits, and Systems (ICECS 2012), Seville, Spain, 2012, pp. 280-283, doi: 10.1109/ICECS.2012.6463746.

L. S. Freitas, E. A. Rambo and L. C. V. dos Santos, “On-the-fly verification of memory consistency with concurrent relaxed scoreboards,” 2013 Design, Automation & Test in Europe Conference & Exhibition (DATE), Grenoble, France, 2013, pp. 631-636, doi: 10.7873/DATE.2013.138.

O. P. Henschel and L. C. V. dos Santos, “Pre-silicon verification of multiprocessor SoCs: The case for on-the-fly coherence/consistency checking,” 2013 IEEE 20th International Conference on Electronics, Circuits, and Systems (ICECS), Abu Dhabi, United Arab Emirates, 2013, pp. 843-846, doi: 10.1109/ICECS.2013.6815546

G. A. G. Andrade, M. Graf and L. C. V. dos Santos, “Chain-based pseudorandom tests for pre-silicon verification of CMP memory systems,” 2016 IEEE 34th International Conference on Computer Design (ICCD), Scottsdale, AZ, USA, 2016, pp. 552-559, doi: 10.1109/ICCD.2016.7753340.

G. A. G. Andrade, M. Graf, N. Pfeifer and L. C. V. dos Santos, “Steep Coverage-Ascent Directed Test Generation for Shared-Memory Verification of Multicore Chips,” 2018 IEEE/ACM International Conference on Computer-Aided Design (ICCAD), San Diego, CA, USA, 2018, pp. 1-8, doi: 10.1145/3240765.3240852.

G. A. G. Andrade, M. Graf and L. C. V. dos Santos, “Chaining and Biasing: Test Generation Techniques for Shared-Memory Verification,” in IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, vol. 39, no. 3, pp. 728-741, March 2020, doi: 10.1109/TCAD.2019.2894376.

M. Graf, O. P. Henschel, R. P. Alevato and L. C. V. dos Santos, “Spec&Check: An Approach to the Building of Shared-Memory Runtime Checkers for Multicore Chip Design Verification,” 2019 IEEE/ACM International Conference on Computer-Aided Design (ICCAD), Westminster, CO, USA, 2019, pp. 1-7, doi: 10.1109/ICCAD45719.2019.8942040.

G. A. G. Andrade, M. Graf, N. Pfeifer and L. C. V. dos Santos, “A Directed Test Generator for Shared-Memory Verification of Multicore Chip Designs,” in IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, vol. 39, no. 12, pp. 5295-5303, Dec. 2020, doi: 10.1109/TCAD.2020.2974343.

N. Pfeifer, B. V. Zimpel, G. A. G. Andrade and L. C. V. dos Santos, “A Reinforcement Learning Approach to Directed Test Generation for Shared Memory Verification,” 2020 Design, Automation & Test in Europe Conference & Exhibition (DATE), Grenoble, France, 2020, pp. 538-543, doi: 10.23919/DATE48585.2020.9116198.M. Graf, G. A. G. Andrade and L. C. V. dos Santos, “EveCheck: An Event-Driven, Scalable Algorithm for Coherent Shared Memory Verification,” in IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, vol. 42, no. 2, pp. 683-696, Feb. 2023, doi: 10.1109/TCAD.2022.3178051.

circuito_tolerancia_falhas

Circuitos e Sistemas Tolerantes a Falhas

Com a miniaturização dos transistores, cada vez mais partículas com baixa carga elétrica, provenientes do sol ou de fora da galáxia, são capazes de interagir e interferir na operação de dispositivos eletrônicos. Desenvolvemos no ECL técnicas para estudar e mitigar os efeitos da interação de partículas elétricas em diferentes tipos de circuitos e em nodos tecnológicos distintos.

EDA_example

Algoritmos e Técnicas para a Automação do Projeto de Chips

Para projetos VLSI (Very Large Scale Integration), são necessárias ferramentas computacionais que automatizam o fluxo de projeto dos circuitos integrados. No ECL, trabalhamos com algoritmos e técnicas para a automação do projeto de chips (EDA – Electronic Design Automation), investigando a integração de ferramentas para síntese aproximada com fluxos tradicionais e possibilitando a redução do consumo energético em várias aplicações.

Exploramos a utilização de diversas técnicas de aprendizado de máquina para melhorar a qualidade das soluções e reduzir o tempo de projeto. Também são desenvolvidos algoritmos com método de otimização matemática para posicionar e rotear as células na mesma etapa. Estes algoritmos buscam reduzir as interconexões e assim aumentar eficiência energética dos dispositivos.

layout_circuitos_integrados_s

Projeto de Circuitos Integrados Digitais

Os circuitos integrados (CIs) ou “chips” estão presentes em praticamente todos os aparelhos eletrônicos da atualidade. Os projetos de circuitos digitais, como processadores ou codificadores de vídeo, requerem um número muito grande de transistores para serem implementados, caracterizando circuitos VLSI (Very Large Scale Integration). O projeto desse tipo de circuito é feito com base em um fluxo de projeto (digital flow), o qual é definido por diferentes etapas.

Na concepção de um projeto, realiza-se inicialmente a especificação do sistema a ser projetado: entradas e saídas, funcionalidade, blocos principais, dentre outros. Em seguida, define-se quais partes do sistema serão desenvolvidas em software e quais delas serão elaboradas em hardware. Para a parte em hardware, inicia-se então aplicação do fluxo de projeto VLSI. 

Primeiramente, a descrição do circuito é realizada utilizando linguagens de descrição de hardware (HDL), como Verilog ou VHDL. A funcionalidade do circuito é aferida por meio de uma simulação inicial sem atrasos e, caso não sejam encontrados problemas, o fluxo segue para a próxima etapa: a síntese lógica, em que a descrição do circuito gera um mapeamento de conexões (netlist) utilizando uma biblioteca de células padrão, que inclui portas lógicas, flip-flops, dentre outros componentes. 

As informações sobre as células padrão estão definidas em PDKs (Process Design Kits), que são específicos para cada uma das tecnologias utilizadas, dependendo do nodo tecnológico (comprimento do canal dos transistores utilizados, como 65nm, 45nm, 28nm) e também da foundry em questão (TSMC, Global Foundries, entre outras).

Após a síntese lógica acontece a síntese física, que consiste no processo de criação do layout do chip, incluindo etapas internas como o posicionamento das células, roteamento e a colocação de pads (conexões ao mundo externo). Uma nova simulação pode ser executada, considerando agora atrasos mais realistas das células utilizadas e das interconexões do circuito.

Por fim, o circuito ainda deve ser verificado segundo as regras de projeto para fabricação na tecnologia (DRC) e também a equivalência entre o layout obtido e o esquemático inicial desejado (LVS). Com o layout completo e validado, é possível realizar o envio do projeto para fabricação e posteriormente as etapas de packaging e testing dos novos chips.

Além das partes do fluxo destacadas acima, cabe mencionar que etapas intermediárias como Logical Equivalence Check (LEC), extração de parâmetros RC, dentre outras, também fazem parte do fluxo e são importantes para garantir o bom funcionamento do produto final. Todas as etapas de síntese são realizadas de forma automática pela ferramenta, bem como as verificações. Quanto às simulações, normalmente o projetista deverá desenvolver um testbench para teste da arquitetura, buscando validar o circuito com a melhor abrangência possível e evitando erros que poderiam levar à perda de muitos recursos com a fabricação de um chip defeituoso.

No ECL, nosso fluxo de projetos é feito com ferramentas de EDA Synopsys. Além disso, temos implementado também um fluxo de projeto digital para ASIC (circuitos integrados de aplicação específica) totalmente open source com ferramentas como Icarus Verilog, Yosys e OpenROAD Trabalhamos também com diferentes nodos tecnológicos, além de PDKs open source e privados de diversas foundries do mundo.

image34

Algoritmos e Arquiteturas para Processamento de Imagem e Vídeo

A codificação de vídeo é imprescindível para permitir o uso de vídeos digitais. Sem ela, vídeos com trinta ou sessenta quadros (frames) por segundo ocupariam um espaço gigantesco, inviabilizando o seu armazenamento em dispositivos móveis ou mesmo o compartilhamento de vídeos em tempo real, como acontece em videoconferências. Com base nessa perspectiva, codificadores atuam no sentido de modificar uma sequência de frames de modo a reduzir a quantidade de informação que deve ser armazenada, sobretudo ao explorar a diminuição de redundâncias entre frames. Os decodificadores, por sua vez, recebem a informação codificada e devem executar o caminho contrário ao codificador, descobrindo as informações necessárias para reconstrução e apresentação das imagens recebidas.

O modelo de codificador padrão é composto por diferentes etapas, conforme ilustra a Figura 1. Nele, o blocos do quadro original serão comparados com blocos de referência (preditos com base em informações de quadros passados ou do mesmo quadro). A diferença entre os dois blocos (resultado da subtração entre original e de referência) gera o que é chamado de resíduo, uma matriz com valores muito menores que do bloco original e que, portanto, gera um menor volume de informação para ser armazenado.

As redundâncias presentes nas imagens podem ser tanto espaciais (em um mesmo frame) como temporais (entre frames). Existem, portanto, dois tipos de predição: intra-quadros (em um mesmo quadro, para redundância espacial) e inter-quadros (entre quadros, para redundância temporal). Essa etapa de predição realiza a determinação dos blocos de referência. Em seguida, o resíduo passa por uma transformação, levando a sua informação para o domínio da frequência, de modo a possibilitar a filtragem apenas das componentes mais relevantas para a visão humana. Em seguida, tem-se a quantificação da informação e finalmente a codificação de entropia. Nessa codificação, dados que acontecem com maior frequência recebem codificações com menor número de bits, enquanto dados menos frequentes são mapeados para maiores conjuntos de bits, de modo a reduzir o bitstream gerado ao final da codificação.

Figura 1: Representação das etapas da codificação de vídeo, adaptado de Richardson (2004) [1].

No ECL, desenvolvemos soluções em hardware para aplicações de codificação de vídeo, como arquiteturas para a Estimação de Movimento Fracionária (FME), uma das etapas mais custosas e que acontece durante a predição inter-quadros. Por meio de uma arquitetura dedicada, busca-se reduzir o consumo de energia do bloco, o que apresenta grande importância para a codificação de vídeo, visto a necessidade de processamento de imagem e vídeo em dispositivos móveis, movidos a bateria.

Figura 2: Representação dos módulos de interpolação e busca da arquitetura de FME desenvolvida no ECL.

Além da FME, também são realizadas no ECL pesquisas voltadas à Computação Aproximada (AxC), que consiste em uma abordagem para reduzir energia, área e atraso em arquiteturas de hardware. Avaliamos no ECL técnicas AxC em arquiteturas de filtro gaussiano para reduzir a potência e a área enquanto minimizamos a perda na qualidade da resolução. Ademais, desenvolvemos pesquisas que combinam métodos tradicionais de codificação de vídeo com Inteligência Artificial para melhorar a eficiência na codificação, além de estudar métodos de pós-processamento de vídeos, a fim de melhorar a experiência do usuário em diferentes plataformas.

[1] RICHARDSON, I. E. G. H.264 and MPEG-4 video compression: video coding for next-generation multimedia. West Sussex, England: John Wiley & Sons Ltd, 2004. 206 p.