Combinando hardware e software: uma história em formação

Jan 05 2023
Por: Carlo Contavalli, vice-presidente de engenharia de software, Enfabrica
Se já leu sobre nós ou consultou o nosso site, sabe bem que a Enfabrica é uma empresa de hardware: o nosso sucesso depende do sucesso do nosso chip, o nosso ASIC. Mas um ASIC só é bem-sucedido se resolver um problema.
Os primeiros racks que construímos na Enfabrica com base na nossa tecnologia.

Se já leu sobre nós ou consultou o nosso site , sabe bem que a Enfabrica é uma empresa de hardware: o nosso sucesso depende do sucesso do nosso chip, o nosso ASIC . Mas um ASIC só é bem-sucedido se resolver um problema. E para resolver um problema, o hardware em si não é suficiente. Não importa o quão incrível seja nosso ASIC, precisaremos mostrar que os aplicativos rodam mais rápido e melhor com ele. Com cargas de trabalho reais, end-to-end e em um valor que não apenas justifica os custos, mas deixa os clientes empolgados e ansiosos para trabalhar conosco (e dispostos a apostar em nossa startup).

Antes da Enfabrica, eu estava envolvido em vários projetos na vanguarda do desenvolvimento de hardware: desde escrever software para fazer com que o hardware fizesse coisas para as quais não foi projetado, até descobrir como explorar o último pedaço de hardware para melhorar o desempenho de nossos aplicativos. Desde integrar recursos por meio de um SDK fornecido por um fornecedor até ajudar a convencer esse mesmo fornecedor a fornecer os novos recursos de que precisávamos.

Raramente era uma navegação tranquila: na maioria das vezes, colher completamente os benefícios de um recurso de hardware em um ambiente de produção exigia muito trabalho complexo. Desde cirurgias difíceis na pilha de software até descobrir um caminho rápido de qualificação e implantação que seria transparente para os usuários finais ou para o restante da infraestrutura.

E ainda tenho pesadelos com os momentos em que essas iniciativas não deram certo: quando as cargas de trabalho reais acabaram mostrando que os ganhos não compensavam a complexidade, apesar dos impressionantes benchmarks. Ou quando muitos dos benefícios foram perdidos quando consideramos as soluções alternativas para alcançar a paridade total de recursos, ter boas métricas, oferecer suporte ao encaminhamento contínuo durante as atualizações, fazer tudo o que for necessário para gerenciar o recurso em um ambiente de produção. Ou simplesmente quando a complexidade do lançamento era um preço muito alto a ser pago.

Com nossas ambições e objetivos em mente, e com um greenfield à nossa frente, ficou claro desde o início que na Enfabrica tínhamos uma grande oportunidade : a de poder entregar uma pilha de hardware e software muito melhor integrada. Uma pilha onde os aplicativos existentes podem se beneficiar imediata e facilmente das novas funcionalidades fornecidas pelo hardware. Onde o hardware é projetado em torno do problema do aplicativo que está sendo resolvido e onde o hardware e o software podem evoluir juntos facilmente com ciclos de desenvolvimento, qualificação e implantação incrivelmente rápidos.

Claro, transformar qualquer visão em realidade é sempre mais difícil do que parece. Sabíamos desde o início que a criação do nível de integração necessário para atingir nossa visão exigia um forte acoplamento entre as equipes de hardware e software e os ciclos de desenvolvimento. E, sem surpresa, esse acabou sendo um dos principais desafios. Embora as habilidades para entender e projetar os algoritmos e a tecnologia por trás do produto sejam semelhantes entre as equipes, as equipes de software e hardware seguem fundamentalmente processos diferentes.

Como a maioria de vocês sabe, o software tende a ser altamente iterativo: o lançamento requer algo que funcione “suficientemente bem” com um conjunto de recursos “suficientemente valioso” — o mítico MVP. O sucesso requer o crescimento do produto ao longo do tempo junto com um conjunto confiável de clientes e adotantes iniciais. A máquina de vendas e marketing pode ser aumentada lentamente à medida que o produto cresce em maturidade, enquanto muitos dos recursos e desafios podem esperar para serem resolvidos até que esteja claro que serão uma prioridade real para os usuários. A capacidade de implementar novos recursos rapidamente, de tê-los prontos para uso em produção por um subconjunto de clientes sem esforço ou de ter as ferramentas instaladas para depurar e entender como o produto é usado pode se tornar mais valiosa do que muitos dos próprios recursos. Prazos geralmente podem ser cumpridos ao hackear algo para depois melhorar ou consertar com o tempo,

O design ASIC é praticamente o oposto : a iteração tem um custo incrivelmente alto. Perder um prazo é muitas vezes pago com notas de um milhão de dólares. À medida que o produto se aproxima da fita adesiva, ele ainda pode ser alterado, mas qualquer alteração se torna exponencialmente mais cara. E uma vez que o produto é gravado, vendido e instalado pelos clientes, a única maneira de alterá-lo ou iterá-lo é, bem, esperar que o cliente queira comprar a próxima geração do ASIC e absorver o custo de implantação e uso. . A única flexibilidade disponível é o que foi planejado antes da gravação. Você não tem muitas chances de acertar seu produto.

No design ASIC, os processos em cascata construídos em torno de prazos são a norma, com várias equipes de especialistas iterando em diferentes aspectos do chip em um pipeline - primeiro o design lógico, a verificação extensiva, o design físico, com problemas relacionados a energia, aquecimento, pinos e fabricação abordados. Alterar o design lógico significa que todo o pipeline precisa fazer outra passagem na criação dos esquemas finais. E nossas equipes de hardware continuam me lembrando que mesmo apenas a parte de codificação, a primeira etapa do processo, é mais semelhante a construir uma casa do que escrever um software: você quer construí-lo uma vez e acertar na primeira tentativa.

E depois há as ferramentas EDA , os fluxos de trabalho de “Automação de Projeto Eletrônico” e processos relacionados : todas as ferramentas usadas para realmente transformar uma ideia em tudo o que é necessário para uma fábrica criar o chip.

Esqueça kubernetes, containers, computação em nuvem ou código aberto: a maioria das ferramentas são proprietárias, foram projetadas para rodar em máquinas físicas com um sistema de arquivos compartilhado por todos os nós. Alguns dos trabalhos levam dias para serem concluídos, geram centenas de GB de saída e uma boa parte do software não foi realmente projetada para distribuir a complexidade computacional entre os nós. O LSF Spectrum é o estado da arte para clustering. As ferramentas exigem licenças muito caras em tempo de execução, com muitas dessas licenças ainda vinculadas a um conceito de estação de trabalho ou ao número de núcleos de CPU físicos usados. O sistema operacional típico mais recente suportado é um RHEL 7 ou RHEL 8. Tivemos solicitações de suporte negadas porque em 2022 estávamos executando um kernel mais recente que 3.10 ( fim da vida desde 2017 ).

Mas quando começamos a Enfabrica, acreditávamos que criar boas ferramentas e infraestrutura seria uma parte fundamental da nossa história .

Afinal, se você está tentando construir um arranha-céu ou uma ponte ambiciosa, não se trata apenas do design e da engenharia por trás do prédio em si. Descobrir como desviar a água ou como resistir a ventos fortes durante a construção; os andaimes; os guindastes; como os materiais serão armazenados, movimentados e levantados; etc. Criar as ferramentas e a infraestrutura que permitirão que o projeto avance rapidamente é tão importante e um desafio tão grande quanto desenvolver o produto final.

Dois anos nessa jornada, aprendemos muitas lições valiosas. Desde o que é necessário para executar de forma confiável algumas dessas ferramentas EDA na nuvem, até processos que podem ajudar as equipes a trabalharem melhor juntas. Desde o uso de um monorepo e um sistema de compilação compartilhado entre as equipes de hardware e software, até a execução de trabalhos de CI/CD para toda a base de código.

Nas próximas postagens do blog, falaremos sobre o que tentamos e como nossa visão evoluiu e mudou com o tempo. O que funcionou, o que não funcionou e o que ainda estamos tentando descobrir. Falaremos sobre as abordagens, bem como as soluções técnicas. Fique atento.

Você está lendo um artigo do blog enfabrica tech . Na enfabrica , construímos soluções entendendo os requisitos do sistema distribuído, usando co-design inteligente de hardware-software e criando as ferramentas/automação para entregar produtos com eficiência e escala.

Interessado em se juntar à nossa equipe? jobs.enfabrica.net