La fin de la loi de Moore a remis en avant le problème de la portabilité des performances. Une rupture technologique majeure est apparue avec le concept de processeur multi-coeur qui s'est rapidement imposé au niveau des processeurs généralistes, des processeurs embarqués et des accélérateurs de calcul. Les plates-formes de calcul sont devenues très parallèles, hétérogènes avec une hiérarchie mémoire particulièrement complexe. Les noyaux de calcul des applications doivent être continuellement optimisés pour exploiter la complexité croissante des architectures et régulièrement adaptées aux évolutions architecturales. Il faut donc à la fois optimiser, porter et maintenir régulièrement ces noyaux de calcul. Sans cela, il n'est pas possible de tirer le meilleur parti des plates-formes modernes en termes de niveau de performance atteint par l'application, c'est-à-dire qu'une part souvent très importante de la puissance de calcul disponible est perdue.
Se pose aussi le problème de la maintenabilité et de la pérennité de ces noyaux, notamment avec le nombre d'architectures qui ne cessent de croître (Intel Xeon, Xeon Phi, GPU, FPGA, ARM, ...), utilisant des langages différents (C, Fortran, Cuda, OpenCL), avec des paradigmes de programmation différents (OpenMP, OpenACC, MPI,...) sur des compilateurs différents qui essaient d'exploiter des instructions intrinsèques, par exemple, de vectorisation. Les avancées en parallélisation automatique par les compilateurs n'ont pas été suffisantes et le travail de parallélisation/vectorisation repose encore sur les programmeurs.
Pour répondre à cette problématique, l'équipe-commune INRIA Corse a développé un environnement de génération automatique de codes [BOAST] permettant d'évaluer les différents modèles d'optimisations possibles sur une architecture donnée en générant de multiples variantes de codes source dont la performance est analysée. Cet environnement, BOAST, a démontré qu'il pouvait sur deux codes, BigDFT et SPECFEM3D fournir des performances supérieures aux routines déjà optimisées. Pour cela, il suffit d?exprimer dans un langage spécifique les noyaux de calcul, en décrivant les optimisations possibles (déroulement des boucles, vectorisation, ...). BOAST génère différentes versions des noyaux dans les langages cibles (C, Fortran, CUDA ou OpenCL), évalue ensuite leurs performances en les exécutant sur la plate-forme cible. Le programmeur peut ensuite sélectionner la plus performante et la plus adaptée à l'architecture visée.
BOAST a été financé et développé dans le contexte des projets européens FP7 Mont-Blanc (2011-2016).