Pour faire fonctionner des applications avec du code avx2, le noyau doit gérer correctement le stockage/restauration de l'état du processeur lors du passage d'une tâche à l'autre, ce qui a été fait dans la 2.6.30 ( https://kernelnewbies.org/Linux_2_6_30 ). Le programme doit également contenir (il peut être décidé à la compilation de l'inclure ou non) du code avx2 et l'utiliser (ou il peut contenir les deux et décider à l'exécution mais pour cela il doit détecter que votre processeur supporte l'avx2). Les avantages de l'avx2 dépendent aussi du processeur (certains processeurs le supportent mais n'en tirent pas vraiment profit pour diverses raisons). Les processeurs Intel en bénéficient généralement plus que les processeurs AMD et chaque nouvelle génération en bénéficie davantage).
Le noyau lui-même peut aussi contenir du code optimisé par avx2 pour des choses comme le cryptage, le hachage, la compression et tout autre chose qui en bénéficie (tout ne le fait pas et certaines choses qui le font en théorie sont très difficiles à coder en utilisant avx2 d'une manière qui soit à la fois correcte et plus rapide que le code scalaire faisant la même chose) selon les paramètres utilisés au moment de la compilation.
Vous pouvez vérifier cela en faisant des choses comme dmesg | grep avx2 ou en lisant le fichier de configuration (la configuration utilisée pour compiler le noyau en cours d'exécution peut parfois être trouvée dans /proc/config.gz) et rechercher avx2.