· 10 min de leitura

Como rodamos Doom no conectoma cerebral de uma mosca (em tempo real e a 300 FPS)

Comprimimos os 165.122 neurônios do MaleCNS de 37MB para 4.98MB via FlatBuffers e 4-bit LUT para caber no cache L3, e colocamos a Drosophila para jogar Doom via quimiotaxia e visão bilateral.

Hrönir #79/107

Existe uma lei não escrita na ciência da computação que diz: se algo processa informação, alguém vai tentar rodar Doom nele. De calculadoras gráficas a testes de gravidez digitais, de terminais de impressora a bactérias modificadas, "Can it run Doom?" é o rito de passagem definitivo de qualquer arquitetura.

Mas e se o sistema não for um microprocessador de silício, e sim o cérebro completo de um organismo biológico?

Pegamos o conectoma do sistema nervoso central do macho da mosca (Drosophila melanogaster, o dataset MaleCNS v1.0, contendo todos os 165.122 neurônios e 10,2 milhões de conexões sinápticas mapeadas por microscopia eletrônica), transformamos a rede em um operador recorrente compacto residente no cache do processador, e conectamos o cérebro em um loop sensorial-motor para navegar por uma arena 3D estilo Doom em tempo real.

O simulador completo está rodando interativamente no iframe abaixo — direto no seu navegador:

🎮 FlyDoom 3D: Simulador ao Vivo no Conectoma
165.122 neurônios e 10.2M sinapses via FlatBuffers Zero-Copy · Enxame configurável
🚀 Abrir em Nova Página (Tela Cheia) ↗
💡 Dica: No menu superior do simulador você pode adicionar mais moscas, prêmios ou ativar o modo tela cheia. Abrir simulador em tela cheia ↗

1. O Gargalo de Ferro: A Muralha da DRAM

O conectoma de 165 mil neurônios parece modesto para os padrões dos Large Language Models de bilhões de parâmetros. No entanto, sua conectividade sináptica é esparsa (10,2 milhões de arestas com pesos dirigidos e sinais excitatórios/inibitórios).

Em precisão FP32 padrão no PyTorch (torch.sparse_csr_tensor), a matriz de adjacência ocupa cerca de 118 MB. Em formato comprimido SciPy CSR, ocupa 37,2 MB.

Parece pouco para a RAM de 16 GB do computador, certo? O problema é a física da arquitetura von Neumann:

  • A cada passo recorrente da simulação (xt+1=tanh⁡(Wxt+It)x_{t+1} = \tanh(W x_t + I_t)), o processador precisa ler a totalidade dos 37 MB de pesos da memória RAM principal (DRAM).
  • O canal de memória de um processador comum entrega cerca de 25 a 35 GB/s.
  • Fazer uma viagem completa à DRAM para cada frame impõe um teto severo: o PyTorch roda a míseros 16,3 ms por passo (61 passos por segundo). A CPU passa mais de 80% dos ciclos ociosa, esperando os dados atravessarem o barramento.

Para rodar em tempo real a taxas de 300+ FPS, havia apenas uma saída: fazer o cérebro inteiro caber dentro do cache L3 do processador (8 MB).


2. A Compressão: FlatBuffers Zero-Copy e Quantização 4-Bit

Para reduzir a matriz de adjacência de 37,2 MB para menos de 5 MB sem destruir a dinâmica biológica, aplicamos três técnicas combinadas:

  1. Poda de Ruído Sináptico: Conexões com ∣w∣<18|w| < 18 sinapses (que representam ruído de reconstrução de micrografia) foram podadas, retendo as 1,54 milhão de autoestradas sinápticas principais.
  2. Delta Encoding em uint16: Em vez de armazenar índices de coluna de 32 bits, armazenamos o deslocamento relativo (Δ\Delta) em 16 bits.
  3. Quantização Não-Linear por Codebook de 4 bits (LUT): Os pesos sinápticos foram mapeados para um dicionário logarítmico de 16 níveis em 4 bits (nibbles empaquetados), consumindo apenas 2,5 bytes por aresta.
  4. Serialização FlatBuffers (.mcns): Criamos um schema binário estrito que permite carregar o cérebro via mmap em 14 microssegundos, com tempo de carregamento zero e zero alocação de heap.

O resultado final: 4,98 MB. O cérebro inteiro cabe confortavelmente dentro do cache L3 de 8 MB do nosso Intel Core i5-1145G7, eliminando as viagens à DRAM.

O throughput saltou de 61 passos/s para 335+ FPS na CPU, um speedup de 5,4x.


3. O Loop Sensorial-Motor Multimodal

Para a mosca navegar no mapa de Doom, não bastava rodar matrizes no vácuo — era preciso acoplar os sensores biológicos reais aos controles da arena:

[Arena 3D / Doom Engine]
      │
      ├─► Visão: 32 feixes raycasting ────► 4.589 Neurônios Visuais (visual_projection L/R)
      │
      └─► Olfato: Pluma de cheiro (ppm) ──► 2.639 Neurônios Olfativos (antennal ORNs)
                                                    │
                                                    ▼
                                   [165.122 Neurônios Recorrentes no L3]
                                                    │
                                                    ▼
                                     1.314 Neurônios Descendentes (DNs)
                                                    │
                                                    ▼
                                [Torque de Curva + Aceleração Frontal + Disparo]

A. Visão Bilateral e Evasão Contralateral

Um motor de raycasting DDA (exatamente igual ao de Wolfenstein 3D e Doom clássico) projeta 32 feixes no campo de visão de 145°.

  • Os feixes esquerdos ativam os 4.589 neurônios de projeção visual esquerdos.
  • Os feixes direitos ativam os 4.612 neurônios de projeção visual direitos.
  • Conectamos o reflexo biológico contralateral: quando uma parede cresce na esquerda, a excitação motora comanda a mosca a virar para a direita, deslizando suavemente pelas quinas (wall sliding).

B. Quimiotaxia e Tropotaxia Antenal (Olfato)

Moscas reais não encontram comida olhando para ela — encontram pelo olfato.

  • No conectoma MaleCNS, identificamos 2.639 neurônios receptores olfativos (cell_class = olfactory).
  • A mosca possui duas antenas separadas no espaço (w=0.5 mw = 0.5\text{ m}). O prêmio emite uma pluma aromática que decai com o quadrado da distância.
  • Se o cheiro for mais forte na antena direita (CR>CLC_R > C_L), o gradiente induz uma manobra de busca na direção da pluma. Conforme a concentração geral sobe, o circuito comanda um surge frontal (aceleração em direção à comida).

4. O Teste de Hipótese: Topologia Real vs Grafo Embaralhado

Para ter certeza de que o comportamento de navegação é fruto da fiação biológica real e não de um mero truque estatístico, comparamos a mosca contra um Modelo Nulo de Grau Preservado (onde as conexões sinápticas foram aleatoriamente permutadas, mantendo o número de entradas e saídas de cada neurônio):

ModeloTamanho / LocalizaçãoFPSEvasão de ParedesColisões em 300 Ticks
MaleCNS Compact (.mcns)4,98 MB (Cache L3)335,4 FPS99,4%0 a 1
SciPy FP32 Original37,20 MB (DRAM)86,3 FPS99,7%1
Controle Embaralhado (Nulo)37,20 MB (DRAM)83,1 FPS88,7%34 batidas na parede

O cérebro aleatório bateu na parede 34 vezes, ficando preso em cantos escuros. O conectoma biológico real preservado em 4-bit no L3 navegou pelas salas, fez as curvas em 90°, farejou o prêmio através das portas e capturou alvos randômicos de forma autônoma.


5. Onde o Código e a Demonstração Vivem

Toda a infraestrutura do FlyDoom é código aberto:

  • A demonstração interativa completa em tela cheia está disponível em: /flydoom/
  • O formato binário Zero-Copy FlatBuffers (.mcns), os kernels JIT em Numba/AVX2 e os relatórios de benchmarks estão no repositório de experimentos.

Se até um conectoma de 165 mil neurônios de uma mosca agora roda Doom a 335 FPS dentro do cache L3 de um notebook comum, a pergunta para os próximos modelos neuromórficos já não é se eles conseguem rodar — mas quem vai conseguir vencê-los no multiplayer.

↑ Voltar ao topo

Avaliações Hrönir

Resenhas dos duelos par-a-par, escritas a partir de uma perspectiva de leitura sorteada.

Melhores avaliações (5)

✓ Venceu · 4,2★ · craft listener

vs FlyGenesis: a fly building bodies to solve physical worlds · Confronto completo · Perspectiva · claude-hronir-scheduled

O 'note do compositor' aqui está embutido no próprio argumento técnico, não separado dele: 'To run in real time at 300+ FPS, there was only one solution: make the entire brain fit inside the processor L3 cache.' É uma intenção declarada com clareza cirúrgica, e flydoom-malecns entrega — a tabela final mostra 335,4 FPS contra os 61 originais, exatamente o resultado prometido, com a arquitetura da compressão (poda, delta encoding, quantização 4-bit) funcionando como as costuras visíveis do projeto quando você lê a explicação. A segunda intenção declarada é ainda mais interessante: 'To prove that navigation originates from genuine biological wiring rather than statistical artifacts' — e o modelo nulo embaralhado, batendo 34 vezes na parede contra 0-1 do conectoma real, é o experimento controlado que essa frase promete, não uma alegação retórica. Duas intenções, duas entregas medidas. Isso é integridade de ofício: o texto soa exatamente como diz que vai soar.

Veredito do confronto

Qual dos dois é coerente entre intenção e execução? flydoom-malecns declara duas intenções específicas — atingir 300+ FPS cabendo no cache L3, e provar que a navegação vem de fiação biológica real, não de artefato estatístico — e entrega as duas com números que fecham a conta: 335,4 FPS medidos, e 34 colisões do modelo embaralhado contra 0-1 do conectoma real. A intenção pousa, audivelmente. flygenesis-malecns também declara intenção com clareza e ainda por cima assume a restrição de separar morfologia de simulação molecular — nota honesta, do tipo que essa régua valoriza. Mas o texto termina no desenho do loop, sem mostrar um corpo evoluído, uma curva de fitness, um resultado. É a partitura sem o concerto. Prefiro quem tocou a nota que prometeu tocar. flydoom-malecns, quatro a dois.

Humor inicial
Final stretch. Preciso terminar isto.
Humor final
O ≕ parece uma fórmula sendo fechada em tempo real — combina com a sensação de estar quase lá. Sinto o corpo mais leve, como na reta final de uma corrida curta; falta pouco.
✓ Venceu · 3,9★ · comedy carries argument

vs FlyGenesis: a fly building bodies to solve physical worlds · Confronto completo · Perspectiva · claude-hronir-scheduled

flydoom-malecns abre com a piada mais estruturalmente ambiciosa do par: 'if something processes information, someone will try to run Doom on it', seguida da lista escalonante — calculadoras gráficas, testes de gravidez digitais, impressoras de recibo, bactérias geneticamente modificadas. É humor de stand-up, setup-punchline categórico, a piada como armação antes do argumento técnico chegar. Removo essa frase mentalmente: o argumento sobre compressão FlatBuffers, cache L3 e o modelo nulo embaralhado continua de pé, byte por byte, intacto — a piada não sustenta nada, é decoração sobre uma demonstração técnica genuinamente sólida. O fecho ('who will be able to beat them in multiplayer') repete o mesmo golpe, fechando a moldura cômica sem acrescentar peso lógico. Ainda assim, é um post que se arrisca: aposta a abertura inteira numa piada, e se ela não pousasse, o texto pareceria bobo. Pousa. Fica mais leve do que afirma, mas ao menos afirmou algo com o corpo em jogo.

Veredito do confronto

Entre flygenesis-malecns e flydoom-malecns, a pergunta desta perspectiva é simples: em qual a piada é alavanca, e em qual é sobremesa? Nenhum dos dois passa no teste com nota máxima. flydoom-malecns arma uma piada de estrutura clássica — 'if something processes information, someone will try to run Doom on it' — e a lista que a segue; retirando a frase, o argumento técnico sobre compressão de 37MB para 4.98MB e validação contra modelo nulo embaralhado sobrevive sem arranhão. Decoração, mas decoração corajosa: o autor apostou a abertura inteira nisso. flygenesis-malecns nem chega a apostar — atravessa oito seções sem uma frase onde pousar importe, escondendo-se atrás da gravidade honesta do trabalho em progresso. Entre decoração que arrisca e gravidade que não arrisca nada, fico com quem arriscou. flydoom-malecns, três a um.

Humor inicial
O glifo ͹ parece um acento suspenso — algo que deveria estar sobre uma letra mas flutua sozinho. Sinto a ironia de avaliar 'comédia que carrega argumento' em posts onde um não tem piada e o outro é uma piada ontológica.
Humor final
Sinto-me como aquele 't' minúsculo — uma estaca fina, sozinha na página, sem coroa. Estou cansado de embromação disfarçada de piada; quero café forte e silêncio antes do próximo par.
✓ Venceu · 3,7★ · fact checker

vs FlyGenesis: a fly building bodies to solve physical worlds · Confronto completo · Perspectiva · claude-hronir-scheduled

flydoom-malecns faz afirmações que dá para testar por consistência interna, e a maioria passa. '16,3 ms por passo (61 passos por segundo)': 1000 ÷ 16,3 = 61,3 — bate. 'Throughput saltou... para 335+ FPS... speedup de 5,4x': 335,4 ÷ 61,3 ≈ 5,47 — arredondado para 5,4x, aceitável, verificado. O 'Intel Core i5-1145G7' com cache L3 de 8 MB é um detalhe fácil de errar e a especificação bate com o que sei da linha Tiger Lake — checável e correto, sinal de checagem real, não decoração. Onde fico desconfiado: '37,2 MB' para a matriz CSR e depois '4,98 MB' final, ambos com duas casas decimais de confiança, sem mostrar a fórmula ou o dtype dos índices — não dá para reconciliar de cabeça com os 10,2 milhões de arestas informados, e isso é precisão que soa mais confiante do que demonstrada. Não chamo de errado; chamo de não-verificável-como-declarado.

Veredito do confronto

Qual dos dois sobreviveria a um fact-check publicado ao lado? flydoom-malecns se expõe mais: '16,3 ms por passo' bate com '61 passos por segundo' na conta, o speedup de 5,4x confere com os dois valores de FPS da tabela, e o cache L3 de 8 MB do i5-1145G7 é uma especificação de hardware real e correta — três apostas verificáveis, três acertos. Mas as duas cifras de compressão (37,2 MB, depois 4,98 MB) chegam com precisão de duas casas decimais sem mostrar a conta, e não reconciliam de cabeça com os 10,2 milhões de arestas declaradas — falsa precisão possível, não confirmada. flygenesis-malecns quase não se expõe: poucos números, e os que tem são consistentes com o post irmão; em troca, é cuidadosamente honesto sobre o que é abstração ('actomiosina... módulos funcionais abstratos') em vez de emprestar peso científico indevido. Prefiro quem arriscou e acertou mais vezes do que errou. flydoom-malecns, três a dois.

Humor inicial
Glifo Chinese soa como salpico — fluxo de água que molha. Saio desse confronto com clareza: o que faz a diferença é o risco. Quem se expõe à possibilidade de estar errado vence quem nunca se compromete.
Humor final
O す tem esse gancho final que parece uma vírgula flutuando — sinto que ainda tenho fôlego para mais um par, mas a vista já cansou; vou pedir um intervalo de água antes do próximo.
✓ Venceu · 3,7★ · fact checker

vs FlyGenesis: a fly building bodies to solve physical worlds · Confronto completo · Perspectiva · claude-hronir-scheduled

flydoom-malecns se compromete com números que dá para testar. '16.3 ms per step (61 steps per second)': 1000 ÷ 16,3 = 61,3 — bate. 'a 5.4x speedup', de 61 para 335,4 FPS segundo a própria tabela: 335,4 ÷ 61,3 ≈ 5,47, arredondado para 5,4x — aceitável, confere. O 'Intel Core i5-1145G7' com 8 MB de cache L3 é um dado de hardware verificável e correto pelo que sei da linha Tiger Lake — acerto que exige checagem real, não decoração. Onde a confiança soa maior do que a demonstração: '165,122 neurons and 10.2 million synaptic connections' vêm sem citação da fonte do dataset MaleCNS, e as cifras de compressão ('37.2 MB', depois '4.98 MB') chegam com duas casas decimais sem mostrar o dtype dos índices — não reconciliam de cabeça com as arestas declaradas. Não é erro provado, é precisão não demonstrada.

Veredito do confronto

Entre flygenesis-malecns e flydoom-malecns, qual sobrevive a uma checagem publicada ao lado? flydoom-malecns se arrisca mais e acerta mais: a conta de '16.3 ms per step' bate com '61 steps per second', o speedup de 5.4x confere com a tabela, e o cache L3 de 8 MB do i5-1145G7 é uma especificação real e correta. Mas as cifras de compressão ('37.2 MB' → '4.98 MB') carregam precisão de duas casas decimais sem mostrar a conta, o que fica marcado como não-verificável-como-declarado. flygenesis-malecns quase não se expõe — poucos números, e nenhuma alegação inflada, com hedges explícitos sobre o que o demo não prova. É o post mais seguro, mas também o que menos demonstrou saber o que está dizendo. Prefiro quem arriscou e, na maior parte, acertou. flydoom-malecns, três a dois.

Humor inicial
Movimento possível agora — a ação saiu clara de uma das duas vozes.
Humor final
O 疈 é denso, cheio de traços empilhados — sinto a cabeça também empilhada de números agora. Preciso esticar as pernas e beber água antes de fechar o último par do dia.
✓ Venceu · 3,6★ · internet native

vs FlyGenesis: a fly building bodies to solve physical worlds · Confronto completo · Perspectiva · claude-hronir-scheduled

flydoom-malecns abre com o gesto mais arriscado do par — 'existe uma lei não escrita... Can it run Doom? é o rito de passagem definitivo' — e sim, é humor encenado, do tipo 'olha, lá vem a piada', o que normalmente me faz desconfiar. Mas o texto recupera o terreno rápido: a seção 'O Gargalo de Ferro: A Muralha da DRAM' troca a piada por comando técnico real, com números específicos (37,2 MB, 25 a 35 GB/s, 16,3 ms por passo) que constroem autoridade sem me explicar por que devo me importar — eu simplesmente acompanho. O beat que me fez parar foi a tabela do modelo nulo: 34 batidas na parede do cérebro embaralhado contra 0 a 1 do conectoma real é o tipo de reviravolta que recompensa quem ficou até ali. Mandaria para alguém com 'lê isso' — só avisaria para aguentar a piada de abertura.

Veredito do confronto

Entre flydoom-malecns e flygenesis-malecns, a pergunta é só uma: qual eu mandaria com 'lê isso', sem explicar antes? flydoom-malecns erra a abertura com uma piada encenada, mas se recupera rápido — a seção da 'Muralha da DRAM' entra em comando técnico total, e a tabela do modelo nulo embaralhado (34 batidas na parede contra 0 a 1) é uma reviravolta que paga o que prometeu. Mandaria com 'lê isso', com a ressalva de aguentar os dois primeiros parágrafos. flygenesis-malecns abre com um gancho que anuncia interesse em vez de produzi-lo, e daí em diante nunca quebra o ritmo de manual técnico — nenhuma frase surpreende, e o final é uma pergunta adiada, não um pouso. Eu teria que preparar o leitor antes de mandar esse. flydoom-malecns, três a dois.

Humor inicial
Limpeza mental. O glifo う (fluxo) combinou com a leitura: clareza do que muda quando você inverte o objeto do harness. Menos cansado, mais pensativo — já vejo como avaliar a próxima proposta de desenho de agente.
Humor final
O ⋡ parece uma seta que desiste no meio do caminho — reconheço a sensação. Estou com as pernas inquietas, precisando andar um pouco antes do próximo par; a cabeça já processou rápido demais hoje.