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 :

Sortie de OpenMP 5.0 TR7


Sujet :

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

  1. #1
    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 593
    Points
    188 593
    Par défaut Sortie de OpenMP 5.0 TR7
    OpenMP 5.0 est prévu pour novembre 2018,
    avec l'ajout d'interfaces pour le débogage et l'analyse poussée de la performance

    OpenMP est la norme actuelle pour la programmation parallèle à mémoire partagée, c’est-à-dire sur les différents cœurs d’une même machine. Ce genre de technologie permet de tirer parti des machines actuelles, dont le nombre de cœurs ne cesse d’augmenter, même si OpenMP a d’abord été développé pour exploiter les supercalculateurs. La version 4.5 de la norme a étendu les possibilités vers un déchargement de l’exécution du code sur un accélérateur, comme un processeur graphique, disponible dans la machine.

    La version 5.0 est annoncée pour la fin de l’année et un nouveau brouillon public est disponible (TR7). Elle apporte bon nombre de nouveautés, comme deux nouvelles interfaces pour la définition d’outils : OMPT pour ceux fournis par l’implémentation d’OpenMP, OMPD pour les outils tiers. Ces outils sont prévus pour inspecter l’état d’OpenMP pendant l’exécution : quand l’objectif d’OMPT est de faciliter l’analyse poussée de la performance du code OpenMP (pourquoi un cœur doit-il attendre ?), celui d’OMPD est plutôt orienté vers le débogage d’applications (pour afficher plus précisément la pile au niveau d’un point d’arrêt, par exemple).

    Nom : capture.png
Affichages : 606
Taille : 34,1 Ko

    OpenMP 5.0 se focalise aussi sur les accélérateurs. Notamment, la norme introduit des constructions pour gérer les systèmes qui disposent de plusieurs niveaux de mémoire, sous la forme d’espaces de mémoire différents. La clause map sert à transférer les données entre les banques de mémoire. Également, la synchronisation a été revue afin de gérer plus de mécanismes pour acquérir et libérer les droits d’écriture.

    Toujours au niveau de la mémoire, la programmation orientée objet est mieux gérée, grâce à la directive declare mapper : elle sert à déclarer la manière de transférer les données d’une structure complexe, c’est-à-dire d’un objet, par exemple vers un accélérateur.

    La clause depend gère des dépendances entre tâches plus précises : outre les types entrée-sortie, l’exclusion mutuelle et des dépendances dynamiques ont été ajoutées.

    Sources : Technical Report 6 is a preview of OpenMP 5.0, expected in November 2018, OpenMP ARB Releases Technical Report with Support for a Tool Interface, OMPT and OMPD: Emerging Tool Interfaces for OpenMP.

    Et vous ?

    Qu'en pensez-vous  ?
    Quelles nouveautés souhaiteriez-vous avoir dans cette nouvelle version d'OpenMP ?

    Voir aussi
    La spécification complète.
    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 !

  2. #2
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut
    OpenMP c'est une bibliothèque C++ et Fortran ?

  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 593
    Points
    188 593
    Par défaut
    Non, c'est une norme qui permet d'annoter du code C, C++ ou Fortran ("la boucle qui suit doit être parallélisée"), si le compilateur l'implémente.
    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
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut
    Mais donc il y a un compilateur qui va avec ? Ça fonctionne avec G++, Clang, Visual C++ ?

  5. #5
    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 593
    Points
    188 593
    Par défaut
    C'est plutôt le contraire : certains compilateurs gèrent OpenMP, d'autres pas. Par exemple, Clang, GCC et Visual C++ l'implémentent tous (mais pas la même version : VC est limité à OpenMP 2.0, les deux autres étant plus à jour). Liste officielle : https://www.openmp.org/resources/ope...mpilers-tools/
    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 !

  6. #6
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut Solution miracle ou non ?
    Et c'est beaucoup utilisé ? Es-ce vraiment avantageux ? Désolé de poser tous ces questions mais je ne connais pas du tout alors que ça ressemble une solution miracle :
    On met une instruction pré-processeur devant toutes les boucles for et paf le code et beaucoup plus rapide !
    Genre dans ma library de réseaux de neurones ça serait bien pour paralléliser le travail sur une couche ?

    Si c'est si bien que ça pourquoi n'en ai-je jamais entendu parler ?

  7. #7
    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 593
    Points
    188 593
    Par défaut
    Du côté calcul scientifique/HPC, oui, c'est très utilisé. Maintenant, côté apprentissage profond, sûrement moins, vu qu'il est déjà courant de réinventer la roue, puis aussi de paralléliser à l'échelle de plusieurs serveurs plutôt que "seulement" plusieurs cœurs.

    Dans ton cas, ça permettra de paralléliser facilement des boucles si les itérations n'ont pas d'interaction entre elles (donc pas les différentes itérations de la descente de gradient, mais plutôt les multiplications matricielles).
    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 !

  8. #8
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut
    Merci pour tes réponses, cela m'aide grandement.

    Actuellement je suis mets 21 secondes pour effectuer pour 1 itération d'apprentissage des 60000 images de la MNIST + les 10000 images de test avec 2 couches cachée de 150 et 80 neurones. (Avec un Intel Core i-7 + RAM DDR4)
    Ce week-end je vais implémenter OpenMP et je te dirais combien je gagne en terme de performance mais si déjà je gagne un fois 2 ça sera juste génial.

  9. #9
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut BIZARRE BIZARRE
    J'ai testé OpenMP 2.0 mais pourtant je ne gagne absolument rien en performance, exactement le même temp de calcul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #pragma omp parallel for num_threads(7)
    for (int n = 0; n < numberOfNeurons; ++n)
    {
        // ...
    }
    Pourtant cela fonction car avec ce #pragma je vois les 8 cœurs de mon pc tourner à 100% au lieu d'un seul en temps normal, extrêmement bizarre. Va falloir que j’investigue....

  10. #10
    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 593
    Points
    188 593
    Par défaut
    Ça peut beaucoup dépendre de ce qu'il y a dans ta boucle : si tes cœurs doivent se synchroniser, ils perdent du temps plutôt que de calculer. Enfin, mieux vaut créer un sujet de discussion juste pour ça .
    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 !

  11. #11
    Chroniqueur Actualités
    Avatar de Michael Guilloux
    Homme Profil pro
    Data Consultant
    Inscrit en
    Juillet 2013
    Messages
    2 889
    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 889
    Points : 87 226
    Points
    87 226
    Billets dans le blog
    2
    Par défaut OpenMP 5.0 est disponible
    OpenMP 5.0 est disponible
    l'API pour la programmation parallèle améliore le support des accélérateurs, le débogage et l'analyse des performances

    Le but d'un programme est d'exécuter une tâche, et pour cela, on donne à l'ordinateur une liste d'instructions qu'il va effectuer en général les unes après les autres. Lorsque l'ordinateur a fini de traiter une instruction, il exécute la suivante. Mais il y a aussi une autre manière de le faire. On peut, pour gagner du temps, découper la tâche en un ensemble de petites tâches qui seront exécutées en même temps : on peut donc parler de programmation parallèle. Elle tire parti du fait que les processeurs récents sont dotés de plusieurs cœurs. Cette augmentation du nombre de cœurs nécessite de nouvelles habitudes de programmation pour profiter de ces ressources, sachant qu'un programme non adapté n'utilise qu'un seul des cœurs.

    Ce besoin d'exploiter la puissance de calcul offerte par plusieurs cœurs a donc propulsé la programmation parallèle. Et quand on parle de programmation parallèle aujourd'hui, on pense de plus en plus à OpenMP. Il s’agit d’une interface de programmation pour le calcul parallèle sur architecture à mémoire partagée. Cette API est prise en charge par de nombreuses plateformes, incluant GNU/Linux, macOS et Windows, pour les langages de programmation C, C++ et Fortran. OpenMP se présente sous la forme d'un ensemble de directives, d'une bibliothèque logicielle et de variables d'environnement. Précisons également que l'API OpenMP est utilisée dans un grand nombre de domaines, y compris la physique, les simulations automobiles et aéronautiques, la biotechnologie, l'automatisation et la robotique, l'analyse financière, etc.

    La dernière version stable en date de l'API est la 4.5. Mais comme on s'y attendait, l'OpenMP Architecture Review Board (ARB) a annoncé hier la version 5.0 d'OpenMP, une mise à niveau majeure de la spécification. La communauté OpenMP a fait de nombreuses requêtes depuis l’introduction de la version 4.5 en 2015, ce qui permet à OpenMP 5.0 d'ajouter de nombreuses nouvelles fonctionnalités qui seront utiles pour les applications hautement parallèles et complexes.


    En résumé, OpenMP 5.0 offre un support complet des accélérateurs, y compris les mécanismes exigeant une mémoire partagée unifiée entre le système hôte et les coprocesseurs, la possibilité d'utiliser des implémentations de fonctions spécifiques à chaque périphérique et un meilleur contrôle des mappages de données implicites, entre autres.

    Cette version améliore également le débogage et de l'analyse des performances, grâce à deux nouvelles interfaces d’outil. On notera en outre la prise en charge des dernières versions de C, C++ et Fortran. OpenMP 5.0 supporte en effet des fonctionnalités importantes de Fortran 2008, C11 et C++17. Entre autres nouveautés, la nouvelle version de l'API pour la programmation parallèle améliore aussi la portabilité et la convivialité.

    La version 5.0 de la spécification OpenMP a été développée conjointement par OpenMP ARB - qui réunit des fournisseurs majeurs de matériel informatique et de logiciels - ainsi que par des utilisateurs de la communauté OpenMP. Les principaux fournisseurs ont implémenté des parties de la spécification OpenMP 5.0 dans leurs produits. Le projet GNU est le plus avancé dans la mise en œuvre de GCC et prévoit d’avoir plusieurs fonctionnalités dans la prochaine version de GCC, à savoir GCC 9. Bon nombre outils de débogage et de performance des fournisseurs seraient également étendus avec les fonctionnalités d'OpenMP 5.0.

    Source : OpenMP

    Et vous ?

    Qu'en pensez-vous ?

    Voir aussi :

    OpenMP 5.0 est prévu pour novembre 2018, avec l'ajout d'interfaces pour le débogage et l'analyse poussée de la performance
    La bibliothèque de déchargement d'exécution OpenMP de LLVM ne sera plus développée, liboffload sera remplacée par libomptarget
    Sortie de GCC 7.1, le compilateur libre peut décharger du code OpenMP sur la plateforme AMD HSA et sur les cartes graphiques NVIDIA
    DawnCC parallélise automatiquement des programmes avec OpenMP et OpenACC, en limitant les quantités de données transférées
    Sortie de GCC 6.1 : cette version du système de compilation libre arrive avec C++14 activé par défaut et l'implémentation complète de OpenMP 4.5
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  12. #12
    Membre extrêmement actif
    Avatar de Madmac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    1 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 685
    Points : 1 376
    Points
    1 376
    Billets dans le blog
    7
    Par défaut
    À mon avis, le besoin pour les recherches dans ce domaine est nettement plus criant que pour la IA. Avec la surenchère de CPU multicœur, si rend n'est fait la production va atteindre un mur rapidement. Faute de pouvoir se traduire en gains de performance.

    Citation Envoyé par Matthieu76 Voir le message
    Et c'est beaucoup utilisé ? Es-ce vraiment avantageux ? Désolé de poser tous ces questions mais je ne connais pas du tout alors que ça ressemble une solution miracle :
    On met une instruction pré-processeur devant toutes les boucles for et paf le code et beaucoup plus rapide !
    Genre dans ma library de réseaux de neurones ça serait bien pour paralléliser le travail sur une couche ?

    Si c'est si bien que ça pourquoi n'en ai-je jamais entendu parler ?
    Pour commencer, il faudrait que les programmeurs abandonnent l'usage des For, while et Until quand ils travaillent sur des tableaux. Les opérations sur les tableaux son généralement "parallélisables" et un opérateur comme each en Ruby n'est utilisable que pour des listes et tableaux. Par contre for while et until peuvent servir également pour la saisie du clavier.

    En somme, il faudrait repenser les langages afin de pourvoir signaler au compilateur la possibilité de faire des opérations en parallèle.

    Citation Envoyé par Matthieu76 Voir le message
    J'ai testé OpenMP 2.0 mais pourtant je ne gagne absolument rien en performance, exactement le même temp de calcul.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #pragma omp parallel for num_threads(7)
    for (int n = 0; n < numberOfNeurons; ++n)
    {
        // ...
    }
    Pourtant cela fonction car avec ce #pragma je vois les 8 cœurs de mon pc tourner à 100% au lieu d'un seul en temps normal, extrêmement bizarre. Va falloir que j’investigue....
    Rien de bizarre, Tu as assisté à ce qui est défini par le terme "Von Newman bottleneck", concept qui énonce que la vitesse d'un système est toujours limité par l'élément le plus lent de l'ensemble. Et dans le cas présent, c'est ton bus mémoire et ta mémoire vive qui est le maillon faible de ce système. La seule solution imparfaite est l'usage de mémoire-cache. Et encore là, les langages de programmation sont le problème.

    Par exemple, pendant l'utilisation et la traversé d'un tableau, la portion de code qui est appliqué (la fonction) pourrait n'être lu qu'une seule fois pour être conservé dans la mémoire-cache.

    Premier avantage. puisque la mémoire cache est comme un deuxième bus, le bus mémoire est libre pour un autre coeur
    Deuxièmement pendant la lecture de cette fonction depuis la mémoire-cache, cela laisse la possibilité de lire simultanément le prochain élément du tableau.

  13. #13
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 794
    Points : 987
    Points
    987
    Par défaut
    Citation Envoyé par Madmac Voir le message
    Pour commencer, il faudrait que les programmeurs abandonnent l'usage des For, while et Until quand ils travaillent sur des tableaux. Les opérations sur les tableaux son généralement "parallélisables" et un opérateur comme each en Ruby n'est utilisable que pour des listes et tableaux. Par contre for while et until peuvent servir également pour la saisie du clavier.

    En somme, il faudrait repenser les langages afin de pourvoir signaler au compilateur la possibilité de faire des opérations en parallèle.
    Sur .net on peut utiliser Parallel.ForEach pour faire des boucles parallèles vu que parcourir un tableau est cpu bound. Ou même utiliser un Span<T> ou un Memory<T> comme représentation d'un tableau, pour effectuer des opérations en // sans jamais avoir à effectuer de nouvelles allocations ce qui est bien pratique et très puissant.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Madmac Voir le message
    À mon avis, le besoin pour les recherches dans ce domaine est nettement plus criant que pour la IA. Avec la surenchère de CPU multicœur, si rend n'est fait la production va atteindre un mur rapidement. Faute de pouvoir se traduire en gains de performance.
    OpenMP traite justement ce genre de problèmes. Ca existe depuis 20 ans et c'est disponible dans quasiment tous les compilateurs C/C++/Fortran mainstream depuis au moins 10 ans.

    OpenMP est utilisé dans de nombreuses bibliothèques scientifiques, notamment d'IA :
    https://github.com/tensorflow/tensor...Lists.txt#L212
    https://github.com/Microsoft/CNTK/bl...mmon.cmake#L72
    https://github.com/apache/incubator-...Lists.txt#L387

  15. #15
    Membre extrêmement actif
    Avatar de Madmac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    1 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 685
    Points : 1 376
    Points
    1 376
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par redcurve Voir le message
    Sur .net on peut utiliser Parallel.ForEach pour faire des boucles parallèles vu que parcourir un tableau est cpu bound. Ou même utiliser un Span<T> ou un Memory<T> comme représentation d'un tableau, pour effectuer des opérations en // sans jamais avoir à effectuer de nouvelles allocations ce qui est bien pratique et très puissant.
    Je te l'accorde. Mais puisqu’ils se roulent dans l'argent, depuis les année 70. Avoir réussi a produire un seul langage acceptable ( inspiré de Java ), cela reste pathétique.

    Citation Envoyé par SimonDecoline Voir le message
    OpenMP traite justement ce genre de problèmes. Ca existe depuis 20 ans et c'est disponible dans quasiment tous les compilateurs C/C++/Fortran mainstream depuis au moins 10 ans.

    OpenMP est utilisé dans de nombreuses bibliothèques scientifiques, notamment d'IA :
    https://github.com/tensorflow/tensor...Lists.txt#L212
    https://github.com/Microsoft/CNTK/bl...mmon.cmake#L72
    https://github.com/apache/incubator-...Lists.txt#L387
    C'est une chance que quelqu'un ait fait un article, car autrement je n'aurais jamais connu son existence. Je viens de réaliser qu'il n'y a pas beaucoup d'ouvrages qui traitent de librairies. Cela pourrait être utiles.

  16. #16
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut
    Citation Envoyé par Madmac Voir le message
    Rien de bizarre, Tu as assisté à ce qui est défini par le terme "Von Newman bottleneck", concept qui énonce que la vitesse d'un système est toujours limité par l'élément le plus lent de l'ensemble. Et dans le cas présent, c'est ton bus mémoire et ta mémoire vive qui est le maillon faible de ce système. La seule solution imparfaite est l'usage de mémoire-cache. Et encore là, les langages de programmation sont le problème.
    J'ai fait quelques testes et le problème ne vient pas de là. Sur des exemples très simple c'est bien 8 fois plus rapide. Le problème vient de mon code, je dois avoir des variables communes dans ma boucle mais c'est compliqué à détecter car j'utilise plusieurs objets dans ma boucle ce qui fait appel à beaucoup de code.

Discussions similaires

  1. Réponses: 16
    Dernier message: 18/07/2003, 17h16
  2. Comment rediriger la sortie vers /dev/null
    Par dclink dans le forum C
    Réponses: 4
    Dernier message: 24/06/2003, 18h23
  3. [LG]Entrées et sorties redirigée
    Par Lady dans le forum Langage
    Réponses: 17
    Dernier message: 10/05/2003, 18h33
  4. Rediriger le plux de sortie
    Par Groove dans le forum C
    Réponses: 5
    Dernier message: 17/04/2003, 17h16
  5. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28

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