Le problème avec les ordinateurs multicœurs

Les ordinateurs haut de gamme d'aujourd'hui sont dotés de processeurs double cœur : deux unités de calcul capables de gérer des tâches distinctes en même temps. Et d'ici l'année prochaine, les principaux fabricants de puces Intel et AMD auront déployé des systèmes quadricœurs. Bien que plusieurs processeurs soient théoriquement plus rapides qu'un seul cœur, il est extrêmement difficile d'écrire un logiciel qui tire parti de nombreux processeurs, une tâche appelée programmation parallèle.





Des recherches récentes du MIT, cependant, pourraient faciliter la programmation parallèle, aidant finalement à maintenir les performances de l'informatique personnelle sur la bonne voie. Les chercheurs proposent un nouveau cadre informatique qui combine des instructions logicielles spécialisées et des modifications au matériel multicœur qui pourraient permettre aux programmeurs d'écrire des logiciels sans avoir à gérer certains détails fastidieux de programmation parallèle.

Historiquement, l'écriture de logiciels pour les systèmes multicœurs a été le travail d'experts dans le monde du calcul intensif. Mais avec l'ère à venir des superordinateurs personnels, les programmeurs moyens doivent également être capables d'écrire des logiciels avec plusieurs cœurs à l'esprit.

C'est effrayant, dit Krste Asanovi , professeur d'électrotechnique et d'informatique au MIT, car la plupart n'ont jamais fait ça, et c'est assez difficile à faire. Asanovic et ses collègues s'attaquent à l'un des principaux défis auxquels les programmeurs sont confrontés lorsqu'ils essaient d'écrire des logiciels qui fonctionneront efficacement sur des systèmes multicœurs : coordonner plusieurs tâches qui s'exécutent sur des cœurs séparés de manière à ne pas provoquer le plantage du système. .



Lorsqu'une application telle que Microsoft Outlook ou un lecteur vidéo est parallélisée, certaines tâches sont réparties entre les processeurs. Mais souvent, ces tâches distinctes doivent puiser dans un cache de mémoire partagée pour accéder aux données. Lorsqu'une transaction accède à la mémoire et qu'une autre transaction doit accéder à la même partie de la mémoire, et que les protections appropriées ne sont pas mises en place, un système peut tomber en panne. Cela peut être comparé à un couple avec un compte courant partagé avec des fonds limités écrivant des chèques simultanément et faisant un découvert par inadvertance sur le compte.

La programmation parallèle standard nécessite qu'un programmeur anticipe ces activités simultanées et s'assure qu'une fois qu'une certaine activité commence à accéder à la mémoire, il verrouille les autres activités afin qu'elles attendent la fin de la transaction.

Lorsqu'ils sont mis en œuvre correctement, les verrous accélèrent les systèmes parallèles, mais leur mise en pratique est compliquée, explique Jim Larus, responsable du domaine de recherche chez Microsoft. Par exemple, explique-t-il, deux applications différentes peuvent acquérir des verrous en même temps, ce qui les oblige à s'attendre. Sans l'intervention d'un tiers pour sortir de l'impasse, dit Larus, les applications resteraient gelées.




Les chercheurs du MIT contournent ce problème en utilisant une approche appelée mémoire transactionnelle, un domaine de recherche qui a explosé au cours des cinq dernières années, explique Asanovic. La mémoire transactionnelle coordonne les opérations logicielles afin que les programmeurs n'aient pas à l'écrire dans leurs programmes. Il permet en fait à de nombreuses transactions de partager la même mémoire en même temps. Lorsqu'une transaction est terminée, le système vérifie que les autres transactions n'ont pas apporté de modifications dans la mémoire qui entraveraient le résultat de la première transaction. Si tel est le cas, la transaction est réexécutée jusqu'à ce qu'elle réussisse.

Bien que la mémoire transactionnelle fonctionne dans certains cas, elle n'est toujours pas parfaite, explique Asanovic. La plupart du temps, les transactions sont petites et la taille fixe de la mémoire dans le matériel permet de les gérer rapidement. Mais, dit-il, de temps en temps, les transactions nécessitent plus de mémoire que la quantité fixe disponible, et lorsque cela se produit, le système se bloque. Asanovic dit qu'en ajoutant un petit cache de mémoire de sauvegarde au matériel et en ajoutant un logiciel pour reconnaître lorsque les transactions débordent, la capacité de la mémoire transactionnelle peut être augmentée, ce qui atténue les défaillances système précédentes.

La méthode utilisée par les chercheurs du MIT repose sur une combinaison de logiciels et de matériel pour améliorer la mémoire transactionnelle, explique Larus de Microsoft, et de nombreuses conceptions reposent sur des logiciels ou du matériel à des degrés divers. On ne sait pas encore où se situe la bonne ligne entre l'utilisation de matériel et de logiciels pour résoudre le problème, dit-il, mais les chercheurs s'attaquent à d'importants problèmes non résolus dans la programmation de systèmes multicœurs.

Microsoft, AMD, Intel et des universités telles que le MIT et Stanford, entre autres, sont tous investis pour rendre les systèmes multicœurs plus faciles à programmer. En plus d'améliorer la mémoire transactionnelle, les chercheurs explorent de meilleures façons de déboguer des programmes parallèles et créent également des bibliothèques d'opérations parallèles prêtes à l'emploi afin que les programmeurs puissent insérer des morceaux de code dans le logiciel sans avoir à résoudre les problèmes à chaque fois.



À l'heure actuelle, les systèmes dual-core ne sont pas aussi affectés par le manque de programmes véritablement parallèles que le seront les prochains systèmes quad-core, explique Asanovic. Pour la plupart, les systèmes d'exploitation tels que Windows et Mac OS X sont capables de diviser efficacement les applications sur un système dual-core. Par exemple, un antivirus s'exécute discrètement en arrière-plan sur un cœur, tandis que des applications telles que Microsoft Word ou Firefox s'exécutent sur l'autre cœur, sans que leur vitesse soit entravée.

Mais lorsqu'il s'agit de 4, 8 ou 16 cœurs, les applications elles-mêmes doivent être modifiées pour obtenir plus de performances. Asanovic dit que la mémoire transactionnelle ne sera pas une solution miracle qui facilitera la programmation de ces systèmes, mais il s'attend à ce qu'elle fasse partie du futur modèle de calcul parallèle. C'est un mécanisme qui semble être utile, dit-il.

cacher