Extension of ACETONE C code generator for multi-core architectures

Este artigo propõe a extensão do gerador de código C ACETONE, originalmente limitado a sequências, para arquiteturas multicore, definindo formalmente o problema de alocação de processadores e planejando a implementação de heurísticas de agendamento, mecanismos de sincronização e avaliação de tempo de execução no pior caso.

Yanis Aït-Aïssa (IRIT-TRACES), Thomas Carle (IRIT-TRACES), Sergei Chichin, Benjamin Lesage, Claire Pagetti

Publicado Wed, 11 Ma
📖 5 min de leitura🧠 Leitura aprofundada

Each language version is independently generated for its own context, not a direct translation.

Imagine que você tem uma equipe de chefs muito talentosos trabalhando em uma cozinha de alta pressão (um sistema de aviação seguro). O objetivo é preparar um prato complexo (uma Rede Neural) que precisa ser feito com perfeição absoluta e dentro de um tempo exato, pois se demorar, o avião pode ter problemas.

Até agora, o sistema ACETONE era como um "super chef solitário". Ele pegava a receita, escrevia as instruções passo a passo para que um único cozinheiro fizesse tudo, do início ao fim. Isso era seguro e previsível, mas se a receita fosse grande, o cozinheiro demoraria muito, e o avião poderia ficar esperando.

Este artigo apresenta uma evolução: transformar essa cozinha de um único chef em uma equipe de vários chefs trabalhando juntos (multi-core), mas mantendo a segurança e a precisão necessárias para voar.

Aqui está a explicação do trabalho, usando analogias do dia a dia:

1. O Problema: Um Chef Só vs. Uma Equipe

No mundo dos aviões, usar Inteligência Artificial é difícil porque os sistemas precisam ser certificados (aprovação oficial de segurança). O sistema antigo (ACETONE) gerava código para um único processador.

  • A Analogia: Imagine tentar carregar 100 caixas pesadas sozinho. Você consegue, mas demora. Se você tiver 4 amigos (4 núcleos de processador), você poderia carregar tudo em um quarto do tempo.
  • O Desafio: Coordenar 4 pessoas é mais difícil do que fazer sozinho. Se um amigo entregar uma caixa para o outro no meio do caminho, eles precisam combinar quando e como fazer isso, senão as caixas caem ou o tempo de espera aumenta.

2. A Solução: O "Maestro" de Agendamento (DAG)

Os autores transformaram a rede neural em um mapa de tarefas chamado DAG (Grafo Acíclico Direcionado).

  • A Analogia: Pense em uma linha de montagem de carros. O motor não pode ser instalado antes da estrutura do carro estar pronta. O DAG é o mapa que diz: "O Passo A deve terminar antes do Passo B começar".
  • O Truque: O sistema agora divide esse mapa entre os vários "chefs" (núcleos). O objetivo é que nenhum chef fique parado esperando o outro, e que todos terminem o trabalho o mais rápido possível.

3. Como eles decidem quem faz o quê? (Scheduling)

Para organizar essa equipe, eles usaram duas abordagens principais, como se fossem dois tipos de gerentes:

  • O Gerente Rápido (Heurística ISH): Ele olha para a lista de tarefas e diz: "Quem está livre? Vamos colocar a próxima tarefa nele!". É rápido de decidir, mas às vezes deixa um chef esperando um pouco mais do que o necessário.
  • O Gerente Perfeccionista (Heurística DSH): Ele pensa mais a fundo. Se um chef vai ficar esperando uma peça chegar de outro, ele pergunta: "E se o chef que está fazendo a peça anterior copiar a tarefa para cá também?". Isso evita o tempo de espera, mas exige mais tempo de planejamento (cálculo).
  • O Matemático (Programação Linear - ILP): É como tentar calcular a solução perfeita usando uma calculadora superpotente. É a melhor solução possível, mas pode demorar horas para calcular. Os autores criaram uma versão "mais leve" dessa calculadora para que ela não trave o sistema.

4. A Comunicação: O Sistema de "Bandeirinhas"

Como os chefs (núcleos) não podem falar entre si diretamente, eles usam uma memória compartilhada (uma prateleira central).

  • A Analogia: Imagine que cada par de chefs tem uma bandeirinha vermelha e uma verde na prateleira.
    • O Chef 1 termina sua tarefa, coloca o resultado na prateleira e levanta a bandeira verde.
    • O Chef 2 olha para a bandeira. Se estiver vermelha, ele espera. Assim que vê a verde, ele pega o resultado e levanta a bandeira vermelha para avisar que já pegou.
  • Isso garante que ninguém use dados que ainda não estão prontos ou que sejam sobrescritos por outro.

5. O Resultado na Prática

Eles testaram isso em um computador real (um chip com 4 núcleos) usando uma rede neural famosa (GoogLeNet).

  • O Ganho: A versão paralela ficou 8% mais rápida no total.
  • A Surpresa: Parece pouco? É porque a parte mais pesada da receita (as camadas iniciais) ainda tinha que ser feita por um único chef. Mas, na parte onde eles conseguiam dividir o trabalho, a velocidade aumentou em 31%.
  • Segurança: O tempo máximo que o sistema poderia levar (WCET) foi calculado com precisão, garantindo que o avião nunca fique esperando indefinidamente.

Conclusão

Este trabalho é como transformar uma cozinha de um único chef em uma equipe coordenada e segura. Eles criaram um "maestro" que divide o trabalho, um sistema de "bandeirinhas" para garantir que ninguém se atrapalhe, e provaram que isso funciona rápido e com segurança em hardware real.

O objetivo final é permitir que aviões usem inteligência artificial mais complexa e rápida, sem violar as regras de segurança rigorosas da aviação. No futuro, eles querem adaptar isso para chips com núcleos diferentes (alguns mais fortes que outros) e até aceleradores dedicados.