Blog

Retour sur la formation IA Parallelisme #1

Retour sur la formation IA parallelisme #1 : du quantum de temps au thread.


J'ai eu l'occasion d'animer ce volet axé sur l'orchestration système, l'isolation mémoire, le SIMD et l'usage des threads. L'objectif était de dépasser la simple création de threads pour comprendre comment le matériel et le noyau exécutent réellement le code, afin d'optimiser au bon endroit sans subir les coûts cachés de la concurrence.

Le fil rouge de ce cours repose sur un principe simple : un code parallèle rapide et faux reste faux, et la fraction séquentielle reste le véritable goulot d'étranglement. Pour traiter le sujet en profondeur, nous avons structuré la session en quatre temps :

  • Concurrence vs Parallélisme et rôle du noyau : Nous avons posé les fondements de la gestion du temps CPU en étudiant le découpage en quantums, l'ordonnanceur et le coût réel des changements de contexte lors des blocages E/S ou de la préemption.
  • Parallélisme de données (SIMD) : Nous avons analysé le parallélisme au niveau des registres (SSE, AVX2, AVX-512) offrant des gains mesurés de $\times 4$ à $\times 15$ sans aucun thread ni synchronisation. Nous avons mis en évidence le mur mémoire : vectoriser un code limité par la bande passante ne sert à rien sans restructuration des données (AoS vers SoA).
  • Isolation par processus : Nous avons décortiqué la traduction d'adresses par la MMU, le mécanisme de fork() avec copy-on-write, ainsi que les compromis de communication Inter-Processus (IPC) lorsque la robustesse et l'isolation priment sur le partage de mémoire.
  • Threads, synchronisation et pièges mémoire : Nous avons exploré la mémoire partagée et l'échelle des stratégies d'accès (du "ne pas partager" aux verrous lock-free, en passant par les atomiques et mutex). Nous avons disséqué les pathologies classiques : courses critiques, interblocages (conditions de Coffman), faux partage lié aux lignes de cache (remboursé par alignas(64)), et la loi d'Amdahl qui plafonne l'accélération.

La session s'est conclue sur un TP pratique : partir d'une simulation de Boids séquentielle pour mesurer et appliquer progressivement des optimisations SIMD (intrinsèques), le découpage par threads POSIX (pthread) avec accumulation privée, et l'implémentation d'un pool de threads.


#IA #Parallelism #CPP #SystemProgramming #SIMD #MultiThreading #ComputerScience