La gestion de la mémoire pour assurer le traitement des ensembles de données traditionnels représente déjà un défi. Mais quand il s’agit de données big data, le maintien des performances peut devenir très problématique. Un langage de programmation annoncé par le MIT cette semaine pendant la 25e Conférence internationale PACT (Parallel Architectures and Compilation Techniques) qui se tient du 11 au 15 septembre à Haïfa, Israël, pourrait permettre de remédier à ce problème. Ce langage s’avère d’ores et déjà prometteur puisque les tests montrent qu’il peut multiplier la vitesse de traitement des algorithmes courants par quatre.
Dans la plupart des processeurs informatiques actuels, la gestion de la mémoire répond au principe de localité. Cela signifie que si un programme a besoin d’accéder à un bout de données stockées dans un emplacement de mémoire, on suppose qu’il aura aussi besoin des autres données situées à proximité. Cependant, dans le cas des données big data, ce n'est pas toujours le cas. Au contraire, les programmes doivent souvent travailler sur quelques éléments de données dispersées dans d'énormes ensembles de données.
Meilleure gestion de la mémoire
Avec les puces actuelles, cette nécessité d’extraire des données de la mémoire principale est responsable des plus importantes baisses de performance. Le fait d'avoir à aller chercher plus fréquemment des données peut considérablement ralentir le processus d’exécution. « C’est comme si, à chaque fois que l’on aurait envie de manger une cuillerée de céréales, il fallait ouvrir le frigidaire, ouvrir la bouteille de lait, verser une cuillerée de lait, refermer la bouteille, et la remettre dans le réfrigérateur », a expliqué Vladimir Kiriansky, un doctorant en génie électrique et informatique au MIT.
C’est pour répondre à ce problème que lui-même et d'autres chercheurs du Computer Science and Artificial Intelligence Laboratory (CSAIL) du MIT ont créé Milk, un langage qui permet aux développeurs d'applications d’améliorer la gestion de mémoire dans les programmes qui ont besoin d’aller chercher des données dispersées dans de grands ensembles de données. Essentiellement, Milk ajoute quelques commandes à OpenMP, une API pour des langages tels que le C et le Fortran, facilitant l’écriture de code pour les processeurs multicœurs. Avec l’API, le programmeur insère quelques lignes de code supplémentaires autour de chaque instruction pour réduire la recherche à un nombre plus restreint de données. A charge ensuite pour le compilateur de Milk de gérer la mémoire en conséquence.
Redistribution des données entre CPU
Dans un programme écrit en Milk, si un noyau découvre qu'il a besoin d'un morceau de données et des données adjacentes, il ne le demande pas à la mémoire principale : il ajoute l'adresse de l'élément de données à une liste d'adresses stockées localement. Quand la liste est suffisamment longue, tous les cœurs du processeur mettent leurs listes en commun, regroupent les adresses proches les unes des autres, et les redistribuent aux noyaux. De cette façon, chaque cœur ne demandera que les éléments de données dont il sait qu’il aura besoin et qui peuvent être retrouvés efficacement. « Dans les tests effectués sur plusieurs algorithmes courants, des programmes écrits avec le nouveau langage ont exécuté leur tâche quatre fois plus rapidement que ceux écrits avec les langages existants », a déclaré le MIT. Et les chercheurs devraient encore améliorer ces performances en peaufinant la technologie.