Apollo 11 vs carregador USB-C (2020)
(forrestheller.com)- O microcontrolador dentro de um carregador de parede USB-C moderno evoluiu a ponto de ter clock, memória e armazenamento comparáveis ao Apollo 11 Guidance Computer de 1969
- O CYPD4225 do Anker PowerPort Atom PD 2 tem ARM Cortex-M0 de 48MHz, 128KB de Flash e 8KB de RAM, e o cálculo indica que ele é cerca de 563 vezes mais rápido que o AGC na maioria das execuções de instruções
- A capacidade de armazenamento varia conforme a suposição de codificação das instruções, e o CYPD4225 consegue acomodar entre 1,19 e 1,78 vez mais instruções que o AGC
- O Apollo 11 tinha 4 computadores, incluindo 2 AGC, 1 LVDC e 1 AGS, e seria difícil substituir todos por um único chip de carregador sem alterar bastante o projeto original
- Em poder de processamento puro, 4 carregadores Anker parecem alcançar computação de nível Apollo 11, mas certificação para ambiente espacial, periféricos, níveis de tensão e a lógica triplicada do LVDC continuam sendo restrições separadas
Objetos de comparação e especificações básicas
- A comparação é entre o Apollo 11 Guidance Computer e 3 carregadores USB-C recentes
- Google Pixel 18W Charger: Weltrend WT6630P, 10MHz, 512 bytes de RAM, 8KB de armazenamento
- Huawei 40W SuperCharge: Richtek RT7205, 22,7MHz, “0.75kB” de RAM, 24KB de armazenamento
- Anker PowerPort Atom PD 2: Cypress CYPD4225, 48MHz, 8KB de RAM, 128KB de Flash
- Apollo 11 Guidance Computer: baseado em componentes discretos, 1,024MHz, 2.048 palavras de 15 bits de RAM, 36.864 palavras de 15 bits de armazenamento de programa
- O AGC deu suporte à maior parte do voo lunar do CSM, ao pouso e à decolagem lunares do LEM, e ao retorno do CSM à Terra
- O CPU mais potente da tabela é o CYPD4225 do Anker PowerPort Atom PD 2
- Clock cerca de 48 vezes maior que o do AGC
- Armazenamento de programa cerca de 1,8 vez maior
Comparação da velocidade de execução de instruções
- O AGC usa um clock mestre de 1,024MHz e precisa de no mínimo 12 ciclos de clock por instrução
- Aritmética inteira usa complemento de um (one's complement)
- Não há ponto flutuante
- As operações aritméticas usam um único registrador acumulador
- O CYPD4225 tem uma CPU ARM Cortex-M0
- Tanto o AGC quanto o Cortex-M0 não têm cache, têm tempo de acesso à memória constante e executam instruções em ordem
- Nenhum dos dois tem ponto flutuante em hardware nem hardware vetorial/matricial como AVX, SSE ou NEON
- Comparando o número de ciclos de instruções semelhantes, o Cortex-M0 leva grande vantagem
- Soma/subtração de 15 bits: AGC 24 ciclos, Cortex-M0 1 ciclo
- Soma/subtração de 31 bits: AGC 36 ciclos, Cortex-M0 1 ciclo
- Multiplicação: AGC 36 ciclos, Cortex-M0 1 ciclo
- Desvio em zero: AGC 24 ciclos, Cortex-M0 1~4 ciclos sem CMP, 2~5 ciclos com CMP
- Armazenamento/carregamento em memória: AGC 24 ciclos, Cortex-M0 2 ciclos
- A maioria das instruções do AGC usa cerca de 12 vezes mais ciclos de clock que no Cortex-M0, e o Cortex-M0 roda a 48MHz
- A conta é
12 * 48MHz / 1.024MHz - Por esse critério, a CPU do carregador USB-C Anker PowerPort Atom PD 2 é 563 vezes mais rápida que o AGC na maioria das aplicações
- A conta é
- A instrução em que o Cortex-M0 fica visivelmente atrás em relação ao AGC é a divisão
- A divisão no AGC leva 72 ciclos, cerca de 70,3µs
- Nesse mesmo tempo, o CYPD4225 consegue executar cerca de 3.374 instruções aritméticas
- Como o custo de desvio é de cerca de 3 ciclos, há espaço para implementar divisão em software
Armazenamento de programa e codificação de instruções
- Os programadores do Apollo escreveram máquina virtual/interpretador por causa da falta de espaço de armazenamento no Guidance Computer
- A limitação de espaço era tão grande que valia sacrificar velocidade para economizar armazenamento
- O AGC armazena 36.864 palavras de 15 bits, e o CYPD4225 usa 128KB de Flash como armazenamento de programa
- Em volume bruto de informação, o CYPD4225 consegue guardar 1,90 vez mais informação que o AGC
- As instruções do AGC têm largura fixa de 15 bits
- O Cortex-M0 implementa o conjunto de instruções THUMB2 e usa instruções de 16 e 32 bits
- As instruções de 16 bits cobrem a maior parte das tarefas comuns, como aritmética, desvios e load/store
- Assumindo de forma simples que todas as instruções tenham 16 bits, o CYPD4225 pode armazenar 65.536 instruções
- Isso é no máximo 1,78 vez as 36.864 instruções do AGC
- Numa suposição mais extrema, com metade das instruções em 16 bits e metade em 32 bits, seria possível armazenar 43.690 instruções no total
- Isso equivale a 1,19 vez o AGC
- Comparar densidade de instruções não é simples
- O Cortex-M0 tem 12 registradores de propósito geral para guardar resultados aritméticos
- O AGC usa um único acumulador, mas consegue gravar resultados aritméticos diretamente em posições de memória
- No Cortex-M0, isso exige uma instrução
storeseparada - O bank switching do AGC permite codificar diretamente mais endereços de memória nas instruções aritméticas
- O Cortex-M0 tem uma memória mais simples e não precisa de bank switching
- O CYPD4225 consegue armazenar 1,19 a 1,78 vez mais instruções e, portanto, parece capaz de acomodar programas equivalentes aos do AGC
- Os outros carregadores USB-C têm capacidade de programa menor que a do AGC
- Ir à Lua com 8KB parece difícil
- O AGC também foi projetado originalmente com armazenamento de programa menor, mas isso precisou ser ampliado
- Por isso, os CPUs dos outros carregadores ficam fora da disputa para ir até a Lua
Comparação de RAM
- O AGC pode armazenar 2.048 palavras de 15 bits
- O CYPD4225 tem 8KB de RAM
- Em bytes, ele tem pouco mais de 2 vezes a RAM do AGC
- O AGC faz os cálculos principalmente em palavras de 15 bits
- O cálculo equivalente no Cortex-M0 é feito em palavras de 16 bits
- Em unidade de cálculo, o CYPD4225 tem 4.096 palavras de 16 bits, contra 2.048 palavras de 15 bits do AGC, exatamente o dobro
O conjunto completo de computadores do Apollo 11 e quantos carregadores seriam necessários
- Segundo a Wikipedia, a nave do Apollo 11 tinha 4 computadores
- 2 AGC: 1 no LEM e 1 no CSM
- 1 Saturn Launch Vehicle Digital Computer
- 1 Apollo Abort Guidance System
- Como os 4 computadores ficavam em partes diferentes da nave, é difícil substituir todos por um único CYPD4225
- Partindo da condição de não alterar muito o projeto do Apollo 11, assume-se que seriam necessários 4 computadores
- Cada computador do Apollo 11 mostrado na tabela tem desempenho e memória inferiores aos do Anker PowerPort Atom PD 2
- AGC: 1,024MHz, 2.048 palavras de 15 bits de RAM, 36.864 palavras de 15 bits de armazenamento de programa
- LVDC: 2,048MHz, 4.096 palavras de 13 bits de RAM, 32.768 palavras de 13 bits de armazenamento de programa
- AGS: 1,024MHz, 2.048 palavras de 18 bits de RAM, 2.048 palavras de 18 bits de armazenamento de programa
- Assume-se que LVDC e AGS não usem instruções peculiares difíceis de executar em um Cortex-M0
- Divisão provavelmente levaria mais tempo que multiplicação
- O CYPD4225 consegue executar milhares de instruções aritméticas no tempo em que qualquer um dos computadores do Apollo 11 faz uma única multiplicação
- Considerando apenas capacidade de cálculo, 4 carregadores USB-C Anker PowerPort Atom PD 2 já teriam processamento suficiente para ir à Lua
Restrições que permanecem e pontos de debate
- O CYPD4225 não é um componente com certificação espacial
- Não se sabe se funcionaria no espaço
- Os periféricos usados pelos computadores do Apollo 11 não foram analisados separadamente
- O CYPD4225 tem 30 sinais GPIO e suporta UART, I2C e SPI
- Ainda seria preciso verificar se o AGC suportava 100 periféricos, 10 ou mais
- Os níveis de tensão dos anos 1960 podem ser altos demais para conexão direta ao CYPD4225
- O LVDC de fato inclui lógica triplicada com redundância
- A lógica produz 3 respostas, e um mecanismo de votação escolhe a vencedora
- Por isso, pode-se argumentar que seriam necessários 3 carregadores USB-C para compará-lo ao LVDC
- Essa redundância existe por confiabilidade, e a comparação geral ignora confiabilidade
- Mesmo imitando esse esquema com 3 microcontroladores e um quarto microcontrolador para votação, isso não necessariamente aumentaria a confiabilidade do sistema
- Esse ponto pode ser controverso
A complexidade criada pela alimentação USB-C
- Por volta de 2012~2013, o firmware do Structure Sensor usava a detecção de carregador USB presente na maioria dos carregadores da época
- Era um esquema de rede de resistores entre os sinais USB D+ / D-
- Não havia comunicação digital
- A implementação do firmware, pelo que se lembra, era simples
- Em 2020, com a popularização do USB-C, muitos carregadores USB passaram a incluir um microcontrolador com CPU
- Alguns são menos potentes que o AGC
- Alguns são mais potentes que o AGC
- A maioria tem pelo menos uma frequência de clock cerca de 10 vezes maior
- O USB-C Power Delivery resolve problemas e oferece novos recursos, mas também aumenta a complexidade
- Passa a existir mais um firmware e mais um chip para lidar na fabricação
- E isso sem apresentar uma alternativa que use 1 fio do cabo e permita a um carregador USB-C oferecer corrente e tensão de carga arbitrárias
1 comentários
Opiniões do Hacker News
Computadores analógicos também merecem o devido reconhecimento. A nave da Apollo 11 tinha mais um computador: o FCC (Flight Control Computer), um computador analógico que controlava o gimbal dos foguetes no Saturn V.
Era um dispositivo cilíndrico de 2 pés e pesava quase 100 libras.
Os dois acabaram recebendo o mesmo nome porque originalmente ambos foram criados para substituir pessoas que faziam cálculos com calculadoras mecânicas de mesa — isto é, o trabalho chamado de “computador”.
Um “computador” de controle de voo está mais próximo de um módulo de sintetizador analógico do que de um Cray-1, AGC, Arduino, notebook ou carregador. Os dispositivos digitais usados na comparação são, entre si, tão parecidos que quase não se distinguem.
“O Flight Control Computer (FCC) era um dispositivo totalmente analógico de processamento de sinais e usava relés controlados pela Saturn V Switch Selector Unit para gerenciar a redundância interna e a seleção de bancos de filtros. O FCC tinha vários caminhos redundantes de processamento de sinais em configuração tripla e podia alternar para um canal em espera em caso de falha na comparação do canal principal. O computador de controle de voo implementava o feedback proporcional-derivativo básico para controle vetorial de empuxo durante o voo propulsado, e também incluía lógica de plano de fase para o controle do sistema auxiliar de propulsão (APS) do S-IVB.”
“No voo propulsado, o FCC implementava a lei de controle $ \beta_c = a_0 H_0(s) \theta_e + a_1 H_1(s) \dot{\theta} $. Aqui, $ a_0 $ e $ a_1 $ são ganhos proporcional e derivativo, e $ H_0(s) $ é a função de transferência em tempo contínuo do filtro de flexão estrutural do canal de atitude e taxa de variação de atitude. Na configuração do Saturn V, os ganhos $ a_0 $ e $ a_1 $ não variavam conforme uma programação, e havia uma chave discreta de ganho. O FCC do Saturn V também implementava uma função eletrônica de inclinação do vetor de empuxo usando um gerador de rampa e, a partir de 20 segundos após a decolagem, vetorizava os motores S-IC cerca de 2 graus para fora para reduzir a sensibilidade a desalinhamentos do vetor de empuxo.”
https://ntrs.nasa.gov/api/citations/20200002830/downloads/20...
[1] https://imgur.com/qscoWrR
[2] https://imgur.com/HHg5ohS
Quem disse que mulheres não sabem matemática?
https://www.smithsonianmag.com/science-nature/history-human-...
Estou meio cansado desses textos sensacionalistas do tipo “comparando o equipamento que pousou na Lua com o hardware de hoje”. O primeiro avião não tinha nenhum tipo de computador, então poder de computação não é o único fator que determina o desempenho e o sucesso desse tipo de feito.
O software e o hardware das missões Apollo foram muito bem projetados. Todo mundo sabe que, desde então, o poder de computação ficou absurdamente maior, mas isso não significa que fazer a mesma coisa hoje seria fácil. Mais desempenho não elimina a necessidade de boa engenharia. Ainda assim, algumas pessoas parecem se apoiar bastante nessa premissa.
O mais interessante é a comparação de como tecnologias com as quais não nos importamos ficaram complexas. É surpreendente que literalmente um cabo — nem um dispositivo inteligente, nem um relógio digital dos anos 80 — contenha tanta tecnologia quanto a Apollo 11, e mesmo assim nem percebamos.
Fazendo o contraponto por você: uma das razões pelas quais ir à Lua é mais difícil do que carregar um dispositivo USB é que, em voos espaciais, não há componentes prontos de prateleira. Se toda vez que você carregasse o celular fosse preciso construir um carregador USB do zero e ainda definir a especificação USB pela primeira vez, o cabo USB logo seria chamado de problema difícil.
A maior mensagem a tirar desses textos não é que a Apollo 11 não foi uma conquista enorme de engenharia. É que existe uma quantidade imensa de engenharia produzida em massa no nosso cotidiano, invisível aos nossos olhos.
Se esses engenheiros viajassem no tempo até hoje, aprenderiam o novo hardware sem problemas. Continuamos sendo os mesmos humanos, usando os mesmos cérebros humanos.
“Poder de computação não é o único fator determinante” também se aplica à tarefa de carregar um celular?
Fico me perguntando se hoje os cálculos de peso e custo já melhoraram o suficiente para que seja mais barato blindar o processador inteiro do que tornar o próprio circuito tolerante à radiação. Circuitos tolerantes à radiação dificultam o uso de componentes de prateleira e também limitam o uso de tecnologias mais recentes, então são muito mais caros
Se minha memória não falha, acho que essa era uma das áreas exploradas no drone de Marte, mas não sei bem se as preocupações com radiação na superfície de Marte são diferentes das de uso no espaço
“O software de voo é escrito em C/C++ e roda em um ambiente x86. A cada cálculo/decisão, a ‘flight string’ compara os resultados de dois núcleos. Se houver divergência, essa string é considerada defeituosa e não envia comandos. Se os dois núcleos retornarem a mesma resposta, a string envia comandos para os vários microcontroladores do foguete que controlam coisas como os motores e as grid fins.”
https://space.stackexchange.com/a/9446/53026
A sonda Galileo usou placas de tungstênio para proteger o processador do receptor de retransmissão da sonda, e o equipamento de plasma da Galileo usou blindagem de tântalo. Por acaso eu estava pesquisando blindagem contra radiação
Quase todos os chips USB, quando você olha o datasheet, têm uma CPU totalmente programável. Para um HID simples ou um carregador, isso parece meio ridículo, mas microcontroladores básicos são baratos e, na prática, reduzem o custo em relação a um ASIC
A afirmação de que “o LVDC na verdade tem lógica com redundância tripla” é um detalhe bem pequeno, mas o fato de haver três unidades de algo não significa que haja redundância tripla. Pelos critérios de redundância, três unidades significam redundância dupla; duas unidades significam redundância simples; uma unidade significa nenhuma redundância
A menos que o mecanismo de votação consiga, de alguma forma, produzir a resposta correta mesmo quando as três implementações dão respostas diferentes entre si, não vejo como isso poderia ser chamado de redundância tripla. O próprio mecanismo de votação é funcionalmente uma quarta implementação?
Como o LVDC é um computador serial, ele só precisa lidar com um bit de cada vez, o que torna a implementação da votação mais simples
O LVDC era um projeto altamente redundante que não podia falhar, enquanto o AGC não tinha redundância, mas foi projetado para se recuperar rapidamente quando uma falha ocorresse
Fico curioso se existe alguma forma de descobrir, sem desmontar, exatamente que hardware é usado em pequenos dispositivos que normalmente não consideramos computadores, como carregadores de smartphone
Existem datasheets especiais ou documentos de certificação governamental? Sempre achei fascinante o hardware de especificação mínima que faz eletrônicos do dia a dia funcionarem, então gostaria de saber de onde o autor tirou essas informações
Teclados antigos da década de 1970 também tinham CPUs totalmente programáveis, normalmente alguma variante do Intel MCS-48 https://en.wikipedia.org/wiki/Intel_MCS-48#Uses
Hoje isso é ainda mais verdadeiro. Teclados, trackpads, mouses, todos os dispositivos USB etc. têm CPUs totalmente programáveis
É incrível pensar que a CPU do Anker PowerPort Atom PD 2 USB-C Wall Charger é 563 vezes mais rápida que o Apollo 11 Guidance Computer; ao programar algo que carrega meus dispositivos, em tese daria até para mandar pessoas à Lua
Muitos engenheiros em terra não tinham computadores, e os poucos sortudos que usavam algum tinham acesso a mainframes, não a máquinas pessoais
Computadores eram tão preciosos que só eram usados em trabalhos que realmente exigiam um computador, especialmente quando a precisão ou a velocidade dos cálculos era importante
Isso mostra o que acontece quando se dão recursos de nível mainframe a pessoas que já eram boas em aeroespacial usando régua de cálculo
Todos os pousos eram fly-by-wire, com o piloto segurando os controles e os propulsores controlados por software
https://www.quora.com/Could-the-Apollo-Guidance-Computer-hav...:
“P64. A cerca de 7.000 pés de altitude, no ponto chamado de ‘high gate’, o computador mudava automaticamente para o P64. O computador ainda fazia todo o voo e guiava o LM até o alvo de pouso. Mas o Commander podia olhar o local de pouso e, se não gostasse, escolher outro alvo; o computador então alterava a trajetória e o guiava até esse alvo.
A partir desse ponto, um de três programas era usado para concluir o pouso.
P66. Este foi o programa efetivamente usado em todos os seis pousos lunares. A algumas centenas de pés acima da superfície, o Commander instruía o computador a mudar para o P66. Embora seja frequentemente conhecido como ‘modo manual’, na prática não era totalmente manual. Nesse modo, o Commander pilotava o LM instruindo o computador sobre o movimento desejado, e o computador executava isso. Isso continuava até o pouso.
P65. Este é o modo automático mencionado na pergunta. Se o computador permanecesse no P64 até cerca de 150 pés de altitude, ele mudava automaticamente para o P65, que levava o LM até a superfície sob controle do computador. O problema era que o computador não tinha como detectar obstáculos nem avaliar o quão plano era o local-alvo de pouso. Em todos os voos, o Commander quis escolher um ponto diferente daquele para o qual o computador estava levando a nave, então mudou para o P66 antes que o computador mudasse automaticamente para o P65. [Atualização: em voos posteriores, o código do P65 foi removido do AGC. Os programadores precisavam de memória para outro código, e a memória do AGC era tão limitada que, para adicionar código em um lugar, era preciso remover algo de outro. Naquele momento, estava claro que nenhuma tripulação usaria o modo de pouso automático, então o P65 foi removido.]
P67. Este é o verdadeiro modo totalmente manual. No P66, mesmo quando o piloto está no comando, o computador ainda permanece no loop. No P67, o computador é completamente desconectado. Ele continua fornecendo dados como altitude e taxa de descida, mas não controla o veículo.”
Daqui a 50 anos, o equivalente ao cluster de treinamento do GPT-4 dos data centers de hoje estará dentro de um cabo barato, rodando mais de 100 vezes mais rápido que o cluster inteiro atual
Se assumirmos que o treinamento do GPT-4 levou cerca de 100 dias, isso significa que, daqui a 50 anos, um dispositivo comum do nível de um celular poderá treinar do zero um modelo do nível do GPT-4 em menos de 1 segundo
Eu não sabia que só o LVDC tinha lógica tripla redundante
A afirmação de que “mesmo imitando esse esquema de votação com 3 microcontroladores e um 4º controlador para apurar os votos, a confiabilidade do sistema não aumenta” é bastante clara. Isso porque o apurador de votos vira um ponto único de falha
Não sei bem como Tandem e Stratus lidavam com divergências entre dois processadores. A Stratus usava um par de processadores OTC 68K, o que não parece significar votação. Se há apenas dois votantes, não sei como resolver uma divergência
Não vejo uma forma clara de criar, com chips de CPU prontos, um processador “confiável” baseado em votação. Parece que cada CPU teria de observar a saída das outras duas e, se perdesse na votação, parar de votar por conta própria, o que soa como hardware de CPU customizado
Um hardware externo que compara os votos, informa à CPU que ela deve parar de votar e roteia a saída vencedora acaba sendo um apurador de votos, e isso é um ponto único de falha. Você poderia ter três apuradores de votos se vigiando mutuamente, mas então precisaria de um apurador dos apuradores de votos. Daí para baixo, são tartarugas infinitas
Em geral, fazer várias CPUs votarem para aumentar a confiabilidade parece perigoso, porque aumenta a complexidade e pode acabar reduzindo a confiabilidade
Talvez criar um processador confiável, no fim das contas, signifique criar um processador em que se possa confiar
É uma pena que o link da biografia do Jonny Kim esteja quebrado. O link que funciona é https://www.nasa.gov/people/jonny-kim/
Ele deve ser um dos seres humanos mais impressionantes da história. Tem várias credenciais, como Navy SEAL condecorado, médico formado em Harvard e astronauta. Parece que uma criança montou o G.I. Joe definitivo