A Tiny Compiler for Data-Parallel Kernels
Un petit compilateur (~180 lignes de Python) abaisse des kernels écrits sous forme d'AST vers une IR intermédiaire où le parallélisme de données devient explicite. Il remplace les boucles classiques par des vector_for qui exécutent plusieurs itérations en parallèle via des lanes et utilisent des masques pour gérer les queues d'itération. La passe de classification identifie pour chaque expression si elle est uniforme (même valeur pour toutes les lanes) ou varying (valeur par lane) et propage cette information dans l'AST. Selon cette classification, des accès contigus deviennent masked_load/masked_store tandis que des accès par indices variables deviennent des gather, ce qui change le code émis. Ce lowering fournit la structure nécessaire pour générer ensuite des instructions vectorielles ciblées, tout en restant un prototype simplifié qui évite des questions comme les types, l'aliasing ou le contrôle de flux complexe.