IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation parallèle, calcul scientifique et de haute performance (HPC) Discussion :

Comment implémenter la vectorisation dans vos développements pour créer un code plus rapide ?


Sujet :

Programmation parallèle, calcul scientifique et de haute performance (HPC)

  1. #1
    Chroniqueur Actualités
    Avatar de Michael Guilloux
    Homme Profil pro
    Data Consultant
    Inscrit en
    Juillet 2013
    Messages
    2 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Data Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2 888
    Points : 87 206
    Points
    87 206
    Billets dans le blog
    2
    Par défaut Comment implémenter la vectorisation dans vos développements pour créer un code plus rapide ?
    Comment implémenter la vectorisation dans vos développements pour créer un code plus rapide ?
    Un exemple avec Intel Advisor XE

    Pour leurs différents projets, les développeurs recherchent avant tout un code qui marche. Ensuite, certains le retravaillent pour le rendre plus efficace, selon certains critères d’optimisation. L’optimisation de code tente de minimiser ou de maximiser certains attributs d’un programme informatique exécutable. La pratique la plus courante consiste à minimiser le temps nécessaire pour exécuter une fonction. L’optimisation peut viser également la réduction de la quantité de mémoire occupée (l’espace occupé par les données et le programme). Avec la croissance des ordinateurs portables, l’énergie consommée est devenue également un critère à minimiser.

    Si l’optimisation de code a toujours été une question importante pour certains programmeurs, la grande majorité des compilateurs actuels effectuent automatiquement des optimisations. En effet, la plupart des nouveaux compilateurs pratiquent de façon automatique un certain nombre d’optimisations qu’il serait fastidieux d’effectuer manuellement et qui rendraient le code source moins lisible. L’optimisation de la part du compilateur est généralement mise en œuvre en utilisant une séquence de transformations, des algorithmes qui transforment un programme en un programme de sortie sémantiquement équivalent, mais qui utilise moins de ressources.

    Il existe de nombreuses techniques d’optimisation, l’une d’elles étant la vectorisation. Il s’agit d’une optimisation de code qui transforme des boucles (un ensemble d’instructions scalaires) en instructions vectorielles. L’idée de base est qu’une boucle (sur une série d'éléments scalaires) peut être transformée en une unique instruction vectorielle (sur une série d'éléments). Cette dernière peut en plus être considérablement plus rapide que la boucle équivalente. Toutefois, le processus d’ajout de vectorisation à votre code peut sembler une tâche ardue.

    En effet, de nombreux problèmes peuvent empêcher la vectorisation ou la rendre inefficace, privant ainsi les développeurs du bénéficie de cette accélération remarquable de leur code. Cela n’empêche que la vectorisation est absolument nécessaire si vous voulez tirer le meilleur parti du matériel moderne. Cependant, il convient de noter que la vectorisation automatique est encore un sujet de recherche majeur en informatique. Des recherches se poursuivent pour trouver des méthodes qui permettent à un compilateur de convertir (sans assistance humaine) des programmes scalaires en programmes vectorisés.

    C’est donc en voulant rendre plus facile d’optimiser un code par cette technique qu’Intel a conçu la dernière version d’Intel Advisor XE. Il s’agit d’un outil d’assistance à la vectorisation SIMD pour C, C++, C# et Fortran. Intel Advisor XE est disponible sur les systèmes Windows et Linux sous forme d’outil GUI autonome, d'extension à Microsoft Visual Studio ou d’interface en ligne de commande. Il permet une analyse des applications pour déterminer leur profit des architectures SIMD. Ce sont en général les applications qui utilisent beaucoup de tableaux, de matrices ou de structures de données similaires. On peut notamment citer les applications scientifiques ou de traitement du signal.

    Pour que la vectorisation soit possible et efficace, Intel Advisor XE fournit des informations détaillées sur les inefficacités SIMD existantes et sur les manières de résoudre les problèmes empêchant cette optimisation. L’outil peut vous aider à vectoriser efficacement votre code, à l’aide d’une méthodologie dont les étapes sont les suivantes :

    • enquête : cette étape indique sur quelles boucles vous passez du temps, avec des statistiques SIMD détaillées ;
    • nombres de parcours : il s’agit de mesurer le nombre d’itérations et le nombre d’appels pour chaque boucle ;
    • recommandations : à cette étape, l’outil donne des conseils spécifiques sur la façon de résoudre les problèmes qui pourraient empêcher l’optimisation ou la rendre inefficace ;
    • analyse de dépendances : Intel Advisor XE fournit une analyse dynamique des dépendances, afin de vérifier si une boucle a des dépendances croisées entre itérations ;
    • analyse des tendances d’accès à la mémoire : à cette étape, l’outil vérifie si vous accédez à la mémoire de manière favorable pour la vectorisation.

    Un livre blanc sur la vectorisation est disponible en téléchargement. Il permet de mieux appréhender les difficultés de la vectorisation et comment la mettre en œuvre de manière efficace et facilement. L’article montre également, sur des exemples de code réel, comment utiliser Intel Advisor XE pour optimiser les codes vectoriels. Dans l’exemple traité, l’outil d’assistance à la vectorisation d’Intel a permis une accélération du code par un facteur de 3,2.

    Téléchargez le livre blanc sur la vectorisation et son implémentation avec Intel Advisor XE
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    MikeRowSoft
    Invité(e)
    Par défaut
    C'est bien sa le problème. Au final il y aura des champs à renseigner ou formules mathématique à écrire et ensuite la librairie proprio et optimisé pour l'architecture d'un système fera le reste. Un peu comme les calculatrices, mais de beaucoup plus haut niveau...

    C'est bien pour l'enseignement mais pas forcément pour la recherche. (bien que cela peut facilité des tâches qui pourraient être jugées pénible comme la résolution d'équation)

    Je m'attendais plus à des cycles de traitements (fréquences) et bases de registres (ordonnancement et requête) au lieu de la couche programmation de l'utilisateur final.
    Il faut bien préparer quelques choses avant de l'utiliser?
    Dernière modification par MikeRowSoft ; 30/11/2015 à 12h04.

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 591
    Points
    188 591
    Par défaut
    Citation Envoyé par MikeRowSoft Voir le message
    C'est bien pour l'enseignement mais pas forcément pour la recherche. (bien que cela peut facilité des tâches qui pourraient être jugées pénible comme la résolution d'équation)
    La recherche à quel niveau ? Au contraire, je pense qu'il faut laisser aux fabricants de CPU la lourde tâche d'optimiser des interfaces communes (à la BLAS) pour leurs processeurs pour en tirer le meilleur parti (tout en évitant qu'ils écrasent des implémentations libres : OpenBLAS a déjà été plus rapide que la MKL d'Intel — https://github.com/JuliaLang/julia/i...mment-22745557 —, je ne sais pas si ça a vraiment évolué depuis). De manière plus générale, dans pas mal de domaines, la tendance est à l'abstraction, à écrire ses équations différentielles de manière très proche des mathématiques (comme GetDP http://geuz.org/getdp/ ou OpenFOAM https://openfoamwiki.net/index.php/H...sport_equation).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  4. #4
    MikeRowSoft
    Invité(e)
    Par défaut
    Très captivant.
    C'est aussi un moyen d'éviter les erreurs ou incohérences.

    Tu as raison, SSE et MMX ne sont pas les vraies mots clés des calculs scientifiques.

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/05/2006, 18h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo