Código otimizado para cache é muito mais rápido do que você imagina

2025-05-07

Programadores geralmente se concentram na complexidade algorítmica, ignorando o impacto da hierarquia de memória do hardware moderno no desempenho. Este artigo compara experimentalmente as diferenças de desempenho entre acesso à memória sequencial, indireto e aleatório. Os resultados mostram que o acesso sequencial é o mais rápido, enquanto o acesso aleatório é uma ordem de magnitude mais lento. Otimizar os padrões de acesso à memória é crucial para o desempenho; mesmo operações simples obtêm ganhos massivos com o layout de memória otimizado. O artigo aconselha a considerar os padrões de acesso à memória ao projetar estruturas de dados e algoritmos, por exemplo, colocando dados usados com frequência de forma contígua na memória para alavancar o cache da CPU e evitar erros de cache.

Leia mais
Desenvolvimento acesso à memória

Concorrência em Haskell: Escape do Inferno das Threads

2025-04-17

Este artigo relata a jornada do autor do desenvolvimento de sistemas embarcados em C/C++/Rust para Haskell, destacando as vantagens do Haskell na programação concorrente. Haskell usa threads verdes e E/S acionada por eventos, evitando as complexidades dos modelos tradicionais de threads. Por meio do pacote `async` e STM (Software Transactional Memory), Haskell oferece uma abordagem mais limpa e segura para tarefas concorrentes. Funções como `concurrently`, `race` e `mapConcurrently`, juntamente com estruturas de dados como `TVar` e `TBQueue`, simplificam as operações concorrentes e evitam problemas comuns de concorrência, como deadlocks e condições de corrida.

Leia mais
Desenvolvimento