Le code optimisé pour le cache est bien plus rapide que vous ne le pensez

2025-05-07

Les programmeurs se concentrent souvent sur la complexité algorithmique, négligeant l'impact de la hiérarchie de mémoire du matériel moderne sur les performances. Cet article compare expérimentalement les différences de performances entre l'accès mémoire séquentiel, indirect et aléatoire. Les résultats montrent que l'accès séquentiel est le plus rapide, tandis que l'accès aléatoire est un ordre de grandeur plus lent. L'optimisation des schémas d'accès mémoire est cruciale pour les performances ; même les opérations simples obtiennent des gains importants grâce à une disposition mémoire optimisée. L'article conseille de prendre en compte les schémas d'accès mémoire lors de la conception des structures de données et des algorithmes, par exemple, en plaçant les données fréquemment utilisées de manière contiguë en mémoire pour tirer parti du cache du processeur et éviter les ratés de cache.

Lire plus
Développement accès mémoire

La concurrence en Haskell : échapper à l'enfer des threads

2025-04-17

Cet article relate le parcours de l'auteur, du développement de systèmes embarqués en C/C++/Rust à Haskell, en soulignant les avantages de Haskell dans la programmation concurrente. Haskell utilise des threads verts et des E/S pilotées par événements, évitant les complexités des modèles de threads traditionnels. Grâce au package `async` et à la STM (Software Transactional Memory), Haskell offre une approche plus propre et plus sûre pour les tâches concurrentes. Des fonctions comme `concurrently`, `race` et `mapConcurrently`, ainsi que des structures de données telles que `TVar` et `TBQueue`, simplifient les opérations concurrentes et évitent les problèmes courants de concurrence, tels que les blocages et les conditions de concurrence.

Lire plus
Développement