![Black Python Devs: um novo grupo de afinidade com alcance global](https://optimuscloud.com.br/wp-content/uploads/2024/05/1717154526_Black-Python-Devs-um-novo-grupo-de-afinidade-com-alcance-150x150.jpg)
Black Python Devs: um novo grupo de afinidade com alcance global
31 de maio de 2024![Como compreender e reduzir os custos do Google BigQuery](https://optimuscloud.com.br/wp-content/uploads/2024/05/1717165326_Como-compreender-e-reduzir-os-custos-do-Google-BigQuery-150x150.jpg)
Como compreender e reduzir os custos do Google BigQuery
31 de maio de 2024Tem havido muita conversa sobre como a IA está impactando a engenharia de software, concentrando-se principalmente nos casos de uso positivos para desenvolvedores. Mas há uma suspeita crescente de que a enorme quantidade de poder de computação necessária para produzir grandes modelos de linguagem terá um efeito sobre quanto mais computação nesta escala poderemos fazer. A grande quantidade de energia elétrica necessária, em todos aqueles chips da Nvidia, já era um problema quando tivemos uma overdose de Crypto. Mas pelo menos um dos principais impulsionadores, Ethereum, mudou seu algoritmo principal de Prova de Trabalho para Prova de Participação, desperdiçando assim muito menos energia.
Esta postagem é uma tentativa de esclarecer uma área de esperança que tem recebido cobertura recentemente: computação reversível. Veremos como a arquitetura reversível pode economizar energia e o que isso pode significar para os desenvolvedores.
A Física Básica de Uns e Zeros
À medida que os componentes dos chips ficam menores e mais próximos, o excesso de calor se torna um problema sério. Para parar de desperdiçar energia, temos que parar de fazer trabalhos computacionais que nunca poderemos recuperar. Acontece que a ainda distante computação quântica também precisa considerar essas alternativas.
Lição para desenvolvedores: fique atento aos princípios da programação funcional e tente imaginar sistemas movendo-se entre vários estados fixos.
Mas antes de tudo, o que na Terra é e o que não é reversível? Todos sabemos que um vaso partido nunca se desfaz, e isto leva à ideia de entropia, que é a observação de que, em termos energéticos, tudo naturalmente fica mais caótico e desmorona. Este é um processo unilateral, exemplificado pelo vaso.
Vejamos uma porta lógica. Sabemos que estes são os princípios básicos dos circuitos. O clássico 2 entrada E porta executa exatamente a mesma operação bit a bit que fazemos no software. Eu faço isso em C# abaixo:
Geralmente usamos aritmética bit a bit para criar máscaras, por exemplo, ao manipular imagens para fazer com que os sprites se movam na tela.
Agora, em inglês, a porta AND é positiva (com uma saída binária de 1
) quando as entradas A e B são ambas 1
. Relativamente simples:
Então, posso fazer o sentido inverso? Em outras palavras, Posso olhar a saída e deduzir as entradas? Agora, posso ter certeza de que se a saída for 1
então as entradas também foram ambas1
. Essa é apenas a linha inferior. Infelizmente, não posso fazer isso se a saída for 0
pois existem claramente três rotas alternativas para essa saída.
Então o portão perde informações; ele perde energia a cada operação. Em comparação, uma porta NOT simples, que apenas inverte o bit, é de fato totalmente reversível. Embora o portão possa perder energia apenas invertendo bits, devemos nos esforçar para impedir a perda de informações.
No mundo mecânico, estamos acostumados a um certo grau de reversibilidade. Se você tem um carro a gasolina antigo, sabe que ele usa uma bateria para dar partida. Mas quando o motor está funcionando, o alternador ajuda a recarregar a bateria. Então, primeiro a energia vai da bateria para o motor e depois do motor volta para a bateria. Também permitimos que processos mecânicos funcionem em ciclos de maneira semelhante, como os quatro tempos de um motor de combustão. Ou até mesmo um pêndulo.
Portanto, para permitir uma operação inversa numa porta lógica, teríamos que reter de alguma forma a informação do lado direito. Isto será provavelmente mais lento, mas deverá permitir um cálculo reversível da poupança de energia. Para começar, você imaginaria que teria o mesmo número de entradas e saídas.
Muito disso é apoiado por teorias recentes. Se você deseja uma versão completa do que está acontecendo com a física, este artigo recente aborda a relação entre energia e informação.
Software reversível
Você pode imaginar que, se estamos gastando tempo pensando em computação reversível, então deveria haver algum software reversível – e talvez uma linguagem de software reversível. Podemos entender o código reversível assumindo que ele existe em estados fixos e que você pode voltar aos estados anteriores. Às vezes, linguagens de programação funcionais podem conseguir isso. Mas, em geral, se você não puder deduzir as entradas da saída de um método, provavelmente não terá reversibilidade.
De outro nível, se você pode considerar a execução de código como uma passagem de um ‘estado’ para outro, como uma máquina de estados ou uma Máquina de Turing clássica, então a ideia de reversibilidade parece mais direta. Se você pensar na maneira como o Git funciona, ele verá a progressão do seu código como nós em uma ramificação, com um passado para o qual você pode voltar. O Git é totalmente reversível – na verdade, qualquer um que tenha feito uma mesclagem complicada saberá que tentar voltar a um estado passado enquanto mantém algumas partes escolhidas do seu estado atual não é divertido.
Existe uma linguagem de programação reversível de alto nível chamada Janus. Apenas como uma amostra, abaixo está o código Janus para um cálculo de par de Fibonacci onde n = 4 na sequência (que dá 5 e 8).
procedure fib(int x1,int x2,int n) if n=0 then x1 += 1 x2 += 1 else n -= 1 call fib(x1,x2,n) x1 += x2 x1 <=> x2 fi x1=x2 procedure fib_fwd(int x1,int x2,int n) n += 4 call fib(x1,x2,n) // forward execution procedure fib_bwd(int x1,int x2,int n) x1 += 5 x2 += 8 uncall fib(x1,x2,n) // backward execution
Não creio que nenhuma organização esteja empenhada em completar a pilha reversível ainda, mas dada a velocidade a que os LLMs estão a ser energizados, precisaremos de ter a certeza de que podemos continuar a alimentar o seu insaciável apetite energético de alguma forma.
O que isso significa para os desenvolvedores?
Houve uma grande reformulação da arquitetura dos transputadores quando a computação paralela (ou simultânea) era nova. Precisávamos usar chips RISC (instrução reduzida), não chips CISC (instrução complexa). Além disso, havia uma linguagem simultânea especializada chamada OCCAM.
Com o passar dos anos, os sistemas operacionais subjacentes dominaram melhor as operações paralelas, e o resultado foi o threading – que sempre foi difícil até mesmo para desenvolvedores experientes controlarem de maneira confiável. Hoje, a arquitetura RISC fez da ARM o líder em chips para smartphones.
A melhor maneira de se manter à frente das revoluções arquitetônicas é ficar de olho na comunidade que lidera o ataque. Para a computação reversível, se você ficar atento aos princípios da programação funcional e tentar imaginar os sistemas se movendo entre vários estados fixos, você deverá ser capaz de se manter atualizado sobre quaisquer mudanças que esse novo paradigma possa trazer para você no futuro.
A postagem Computação reversível para desenvolvedores: entendendo o básico apareceu pela primeira vez em The New Stack.