COMPTOIR
register

×

C'est pas facile tout ça !

Du machine learning pour... prédire des temps d'exécution ?
C'est pas facile tout ça !

Ce n’est un secret pour personne, les processeurs deviennent de plus en plus complexes au fil du temps. Depuis les premiers pentium où la fréquence faisait tout et où une mine de crayon suffisait à surcadencer, beaucoup de chemin a été parcouru, et il faut désormais tenir compte des caches, ports d’exécution, prefetchers et autres pipelines qui, s’ils accélèrent en général les temps d’exécutions, complexifient d’autant plus sa prédiction. Si ces rouages vous intéressent, nous vous avions compilé un petit récapitulatif il y a deux ans déjà.

 

Or, dans le cycle de développement d’un programme, il se peut (bon, pas pour tous, nous sommes d’accord...) qu’une phase d’optimisation ait lieu. Dans ce cas l’idée est de passer d’un débugging fonctionnel (« pourquoi mon programme ne donne pas les réponses attendues ? ») à un débugging de performance (« pourquoi mon programme est-il lent ? »). Vous vous en doutez, plus le CPU est complexe, plus cette réponse est longue et fastidieuse à trouver. Généralement, une bonne partie des optimisations sont effectuée par le compilateur (dans le cas des langages passant par cette étape), ou l’interpréteur (dans les autres cas, justement).

 

C'est pas facile tout ça ! [cliquer pour agrandir]

«Un CPU, c’est que c’est pas simple du tout » —Captain Obvious

 

Pourtant, dès que le code devient non-trivial, les compilateurs rament et ont du mal à trouver la meilleure solution, qui se base de toute manière sur un modèle de coût des instructions pas forcément toujours aussi proche de la réalité qu’espéré. C’est ce problème-là qu’a voulu attaquer une équipe de chercheurs du MIT, en passant par une approche bien en vogue en 2019 2020 : le machine learning.

 

Entraîné sur un ensemble de plus de 300 000 basic blocks — des morceaux élémentaires de programme constitués d’instructions ne contenant ni sauts ni de points d'arrivées de sauts, c'est-à-dire des blocs d'instructions exécutées pour sûr consécutivement par le CPU — issus de tous les horizons, un algorithme basé sur des méthodes statistiques a réussi à prédire les temps d’exécutions et la consommation énergétique de programmes de manière plus précise que les outils fournis par Intel (à savoir IACA, un projet maintenant déprécié).

 

L’inconvénient de cette approche réside cependant dans le côté « boite noire » que les méthodes statistiques offrent. En effet, sans représentation un minimum exploitable, difficile de renvoyer à l’utilisateur une information utile sur les démarches à suivre permettant l’optimisation. Si, en France, certaines équipes se penchent sur cette thématique, le MIT a décidé de repasser par une boite noire sauce machine learning toujours. Si cela fonctionne sur la plupart des exemples fournis dans le papier, notamment en matière de vectorisation de code, nous pouvons émettre quelques doutes quant à sa généralisation et son intégration dans des suites logicielles répandues dans les environnements de production tels LLVM ou GCC.... Ce qui est le souci de la plupart des papiers de recherche de manière générale ! (Source : MIT News)

Un poil avant ?

Soldes • PNY CS900 960 Go à 79,90 € (hors livraison)

Un peu plus tard ...

Faites le plein de Wi-Fi 6 et de WP3 avec TP-Link et D-LINK

Les 7 ragots
Les ragots sont actuellement
ouverts à tous, c'est open bar !
par Un ragoteur Gaulois en Auvergne-Rhône-Alpes, le Jeudi 09 Janvier 2020 à 16h27  
par Une ragoteuse à forte poitrine en Auvergne-Rhône-Alpes le Jeudi 09 Janvier 2020 à 10h42
Ça serait pas un peu de l'auto-promo ça ? Le Nicolas et donc
grenoblois
Les touristes ça compte pas vraiment!
par Nicolas D., le Jeudi 09 Janvier 2020 à 15h37  
par Une ragoteuse à forte poitrine en Auvergne-Rhône-Alpes le Jeudi 09 Janvier 2020 à 10h42
Ça serait pas un peu de l'auto-promo ça ? Le Nicolas et donc grenoblois
Caramba, démasqué !
par Une ragoteuse à forte poitrine en Auvergne-Rhône-Alpes, le Jeudi 09 Janvier 2020 à 10h42  
 
Si, en France, certaines équipes (CORSE) se penchent sur cette thématique

Ça serait pas un peu de l'auto-promo ça ? Le Nicolas et donc grenoblois
par Jemporte, le Jeudi 09 Janvier 2020 à 01h36  
Pourvu que ce genre d'optimisation "intelligent", soit incontrôlable par l'utilisateur "bête", n'entraîne pas des temps de compilation x10.
par Nicolas D., le Mercredi 08 Janvier 2020 à 22h31  
par Une ragoteuse à forte poitrine en Auvergne-Rhône-Alpes le Mercredi 08 Janvier 2020 à 18h30
Je trouves cette définition a minima trompeuse, si ce n'est fausse ?
Un basic block est un ensemble d'instructions élémentaires (et non un morceau) qui ne contient aucun saut et qui n'est visé par aucun saut.
En gros, c'est tout le code entre les sauts et les labels.
Totalement ma faute, j'ai voulu rendre ça accessible... et j'en ai oublié une partie de ma phrase ! C'est corrigé
par Une ragoteuse à forte poitrine en Auvergne-Rhône-Alpes, le Mercredi 08 Janvier 2020 à 18h30  
par Un champion du monde en Nouvelle-Aquitaine le Mercredi 08 Janvier 2020 à 16h22
Surtout que si leur machin c'est une boite noire et que le code reste fermé ça ne sera JAMAIS intégré à GCC (aka le compilateur barbu).
C'est dommage parce-que ça à l'air d'avoir du potentiel mais il est totalement gâché par le passage dans une boite noire.
Je ne suis pas certain que tu ai compris le sens de "boite noire", cela n'as rie na voir avec "open source".
quand on parle d'une boite noire dans ce genre de situation c'est que l'on prend un système et que l'on fait aucune assomption sur son contenu, on considère que le système est une boite noire dont on ne peut pas voir le contenu.

Le projet est open-source le github du projet (1) est cité dans le papier.

 
basic blocks ? des morceaux élémentaires d'instructions ne contenant pas de sauts, manipulés par le CPU

Je trouves cette définition a minima trompeuse, si ce n'est fausse ?
Un basic block est un ensemble d'instructions élémentaires (et non un morceau) qui ne contient aucun saut et qui n'est visé par aucun saut.
En gros, c'est tout le code entre les sauts et les labels.

(1) : github.com/ithemal/Ithemal
par Un champion du monde en Nouvelle-Aquitaine, le Mercredi 08 Janvier 2020 à 16h22  
[quote]nous pouvons émettre quelques doutes quant à sa généralisation et son intégration dans des suites logicielles répandues dans les environnements de production tels LLVM ou GCC....|/quote] Surtout que si leur machin c'est une boite noire et que le code reste fermé ça ne sera JAMAIS intégré à GCC (aka le compilateur barbu).
C'est dommage parce-que ça à l'air d'avoir du potentiel mais il est totalement gâché par le passage dans une boite noire.