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

CUDA Discussion :

Sortie de CUDA 7.5


Sujet :

CUDA

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    août 2008
    Messages
    25 981
    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 : 25 981
    Points : 181 682
    Points
    181 682
    Par défaut Sortie de CUDA 7.5
    La première préversion publique de CUDA 7.5 est disponible pour tous les développeurs CUDA enregistrés auprès de NVIDIA. La principale nouveauté est la gestion des nombres à virgule flottante codés sur seize bits, c’est-à-dire la moitié de l’encodage traditionnel (float sur trente-deux bits). Cette format est principalement utilisée pour du stockage de données quand la précision requise n’est pas très importante, mais aussi pour des calculs sous la même hypothèse.

    Calculs sur seize bits

    L’effet sur la performance du code peut être énorme : la bande passante requise est divisée par deux, ce qui permet de transmettre deux fois plus de nombres par unité de temps sur les bus existants, d’en stocker deux fois plus sur la même quantité de mémoire. Ils pourront donc se révéler très utiles pour les applications où ces éléments sont limitatifs, comme l’apprentissage de réseaux neuronaux de grande taille ou le filtrage de signaux en temps réel.

    L’avantage en temps de calcul n’est disponible que sur les GPU ayant une partie prévue pour l’arithmétique sur seize bits, ce qui n’est pas le cas pour la majorité des processeurs disponibles, sauf sur Tegra. La prochaine architecture de GPU de NVIDIA, connue sous le nom de Pascal, aura des transistors alloués pour les calculs sur seize bits : le nombre de calculs effectués par seconde doublera entre les précisions FP16 et FP32 (le même rapport qu’entre FP32 et FP64). Entre temps, les calculs seront effectués en interne sur les mêmes circuits que précédemment, avec une précision bien plus élevée que des circuits dédiés (bien qu’elle soit en grande partie perdue lors de l’arrondi vers les seize bits).

    Réseaux neuronaux

    L’un des chevaux de bataille actuels de NVIDIA est l’apprentissage automatique, en particulier par réseaux neuronaux, plus spécifiquement profonds, par exemple pour une utilisation dans les voitures intelligentes. Ils ont par exemple développé la bibliothèque cuDNN (CUDA deep neural network), qui accélère les calculs par un GPU. La troisième version de cette bibliothèque a été optimisée, particulièrement au niveau des convolutions (FFT et 2D), ce qui améliore la performance lors de l’entraînement de réseaux neuronaux (gain d’un facteur deux pour l’apprentissage sur des GPU Maxwell). Elle gère également les nombres en virgule flottante sur seize bits, ce qui est utile pour des réseaux très grands, mais n’améliore pas (encore) les temps de calcul.



    NVIDIA a aussi développé l’outil DIGITS, un logiciel de bien plus haut niveau que cuDNN pour les mêmes réseaux neuronaux, prévu pour des profils plus scientifiques que pour des programmeurs. L’une des nouveautés est l’apprentissage distribué sur plusieurs GPU : ajouter un deuxième GPU aide à réduire fortement les temps de calcul (d’un facteur légèrement inférieur à deux), nettement moins impressionnant en ajoutant deux autres (facteur de deux et demi). Le gain sera probablement plus important avec les prochaines architectures de GPU, Pascal devant utiliser la technologie NVLink au lieu du bus PCI Express (partagé) pour la communication entre cartes.



    Algèbre linéaire creuse

    CUDA vient également avec la bibliothèque cuSPARSE pour l’algèbre linéaire sur des matrices creuses accélérée sur GPU. Une nouvelle opération vient d’y être ajoutée, nommée GEMVI, utilisée pour la multiplication entre une matrice pleine et un vecteur creux — la sortie étant évidemment un vecteur plein. Ce genre d’opérations est très utile pour l’apprentissage automatique, plus particulièrement dans le cas du traitement des langues. En effet, dans ce cas, un document rédigé dans une langue quelconque (français, anglais, allemand…) peut être représenté comme un comptage des occurrences de mots d’un dictionnaire ; bien évidemment, tous les mots du dictionnaire (même partiel) ne sont pas présents dans le texte, sa représentation vectorielle contient donc un grand nombre de zéros, il est donc creux. Une fois le dictionnaire défini, pour améliorer l’efficacité des traitements, le dictionnaire peut être réduit en taille pour n’en garder qu’un sous-espace vectoriel qui préserve la sémantique des textes : la transformation de la représentation du texte demande justement un produit entre le vecteur creux initial et une matrice de transformation.

    C++11 et fonctions anonymes

    La version précédente de CUDA a commencé à comprendre C++11, la dernière itération du langage de programmation. Les fonctions anonymes (lambdas) en font partie et servent notamment à écrire du code plus concis. CUDA 7.0 ne les tolérait que dans le code exécuté côté client, pas encore sur le GPU : ce point est corrigé, mais seulement comme fonctionnalité expérimentale. Par exemple, un code comptant les fréquences de quatre lettres dans une chaîne de caractères pourra s’écrire comme ceci :

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void xyzw_frequency_thrust_device(int *count, char *text, int n) {
      using namespace thrust;
     
      *count = count_if(device, text, text+n, [] __device__ (char c) {
        for (const auto x : { 'x','y','z','w' })
          if (c == x) return true;
        return false;
      });
    }

    La même fonctionnalité permet d’écrire des boucles for pour une exécution en parallèle, avec une syntaxe similaire à OpenMP, par exemple une somme de deux vecteurs (SAXPY pour BLAS) :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void saxpy(float *x, float *y, float a, int N) {
        using namespace thrust;
        auto r = counting_iterator(0);
        for_each(device, r, r+N, [=] __device__ (int i) {
            y[i] = a * x[i] + y[i];
        });
    }

    Profilage

    La dernière nouveauté annoncée concerne le profilage de code, nécessaire pour déterminer les endroits où les efforts d’amélioration de la performance doivent être investis en priorité. CUDA 7.5 améliore les outils NVIDIA Visual Profiler et NSight Eclipse Edition en proposant un profilage au niveau de l’instruction PTX (uniquement sur les GPU Maxwell GM200 et plus récents), pour détermines les lignes précises dans le code qui causent un ralentissement. Précédemment, le profilage ne pouvait se faire qu’au niveau d’un noyau, équivalent d’une fonction pour la programmation sur GPU (temps pris par le noyau à l’exécution, importance relative par rapport à l’exécution complète).

    CUDA 6 avait déjà amélioré la situation en affichant une corrélation entre les lignes de code et le nombre d’instructions correspondantes. Cependant, un grand nombre d’instructions n’indique pas forcément que le noyau correspondant prendra beaucoup de temps à l’exécution. Pour remonter jusqu’à la source du problème, ces informations sont certes utiles, mais pas suffisantes, à moins d’avoir une grande expérience. Grâce à CUDA 7.5, le profilage se fait de manière beaucoup plus traditionnelle, avec un échantillonnage de l’exécution du programme, pour trouver les lignes qui prennent le plus de temps.



    Sources et crédit des images et du code source : New Features in CUDA 7.5, NVIDIA @ ICML 2015: CUDA 7.5, cuDNN 3, & DIGITS 2 Announced.
    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
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    janvier 2006
    Messages
    5 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : janvier 2006
    Messages : 5 791
    Points : 9 851
    Points
    9 851
    Par défaut
    Cuda a vraiment l'air merveilleux, mais il ne fonctionne que sur des GPUs NVIDIA, ce qui limite trop son utilisation. Je suis donc forcé de me tourner vers OpenCL qui est beaucoup plus limité :-(
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre averti Avatar de steel-finger
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    janvier 2013
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : janvier 2013
    Messages : 143
    Points : 323
    Points
    323
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Cuda a vraiment l'air merveilleux, mais il ne fonctionne que sur des GPUs NVIDIA, ce qui limite trop son utilisation. Je suis donc forcé de me tourner vers OpenCL qui est beaucoup plus limité :-(
    Exactement, je trouve ça dommage qu'il ne tourne que sur des gpu Nvidia, car Cuda est vraiment merveilleux comme tu dis

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    août 2008
    Messages
    25 981
    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 : 25 981
    Points : 181 682
    Points
    181 682
    Par défaut
    Il faut quand même noter un début d'ouverture pour l'exécution par les pilotes libres, bien que toujours sur GPU NVIDIA : http://www.developpez.net/forums/d15...-s-ouvre-cuda/. Après cette étape, le portage de CUDA sur d'autres architectures devrait être simplifié.

    J'avais certes entendu parler de http://gpuocelot.gatech.edu/, à voir ce qu'il vaut en pratique. Ça m'étonnerait néanmoins que les outils de développement puissent être aussi poussés que ceux que propose NVIDIA (probablement en utilisant les spécificités de son matériel, vu les fonctionnalités limitées aux GM200 par exemple).
    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 !

  5. #5
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 2 741
    Points : 5 459
    Points
    5 459
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Cuda a vraiment l'air merveilleux, mais il ne fonctionne que sur des GPUs NVIDIA, ce qui limite trop son utilisation. Je suis donc forcé de me tourner vers OpenCL qui est beaucoup plus limité :-(
    C'est surtout sur l'outillage qu'il fait la différence, non ? Je n'ai pas d'expérience avec CUDA mais en termes de fonctionnalités proprement dîtes il ne m'avait pas semblé supérieur à OpenCL, au contraire.

  6. #6
    MikeRowSoft
    Invité(e)
    Par défaut
    L'avantage c'est interopérable avec de multiple systèmes d’exploitations pour ne pas dire seulement deux noyaux (sans compter UNIX), Microsoft Windows et Linux.
    L'usage imposé de carte avec architecture de Processors Units NVIDIA ou plutôt technologies breveté NVIDIA est l'équilibre entre le gratuit et le payant je suppose.
    L'appréciable serait de savoir la différence de performance entre les noyaux.
    Sacré OpenGL vs DirectX.

    Je me demande bien pourquoi certaines personnes pensent que OpenAL et les DSP vont trouver preneur avec PhysX et OpenCL?
    Dernière modification par MikeRowSoft ; 16/07/2015 à 14h45. Motif: OpenAL

  7. #7
    Membre confirmé
    Homme Profil pro
    nop
    Inscrit en
    mars 2015
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : nop
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mars 2015
    Messages : 436
    Points : 633
    Points
    633
    Par défaut
    ce qui me fascine est à quel point on arrive encore en 2015 à avoir des performances accrues de manières flagrantes juste en changeant de version de librairie ou de drivers.
    Si au moins c'était un firmware dans le GPU (voire le CPU) qu'on mettait à jour, je comprendrais; mais là non, c'est de la programmation pure, du logiciel, qui apporte un gains incroyable.

    je reste à me demander si je dois me contenter d'être content d'avoir ce gain de perf gratuitement ou de ne pas être content pour ne pas l'avoir eu avec les premiers drivers (forcément inachevés) de la carte 3D achetée...
    Si Audi venait vous voir 10ans après votre achat en vous disant "on a trouvé pour 0€ le moyen de réduire de 50% la consommation d'essence de votre voiture en changeant une valeur dans les paramètres de l'ordinateur de bord...vous réagiriez comment ?

    Ce sont les acheteurs récents de carte nvidia qui doivent être les plus contents d'avoir des perfs optimales dès l'achat et non pas des années après....

    Enfin bon, réjouissons-nous, on va gagner qq secondes dans les rendus 3D ou calculs de math scientifiques prévisionnels... Et quelques secondes dans une renderfarm ça compte énormément.

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : décembre 2011
    Messages : 256
    Points : 502
    Points
    502
    Par défaut
    Le problème des virgules flottantes et de leur précision est un problème tellement bas niveau pour un développeur qu'ils ont tout simplement sous-estimé l'impact d'une utilisation sur 16 bits, sachant qu'effectivement cela reduit mécaniquement la taille mémoire par 2 et donc pour des traitements de gros volumes à précision moindre, ça se ressent, c'est un peu un cas d'école en fait ...

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    Consultant Ingenierie mécanique
    Inscrit en
    mars 2006
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant Ingenierie mécanique
    Secteur : Transports

    Informations forums :
    Inscription : mars 2006
    Messages : 1 234
    Points : 2 809
    Points
    2 809
    Par défaut
    c'est toujours pareil on code facilement maintenable et pas performant parce que les pc sont sur-puissants. donc pas étonnant de gagner du fps en faisant le boulot plus finement qu'a l'habitué.

    Oepncv par ex sans et avec la libraire de primitive intel ( fonctions matricielle et autres codées en assembleur ). dans un cas tu es quasi temps réel, dans l'autre cas complètement...

  10. #10
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    août 2008
    Messages
    25 981
    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 : 25 981
    Points : 181 682
    Points
    181 682
    Par défaut
    Citation Envoyé par MichaelREMY Voir le message
    Ce sont les acheteurs récents de carte nvidia qui doivent être les plus contents d'avoir des perfs optimales dès l'achat et non pas des années après....
    Oui, mais non. Diminuer la précision par deux, ça fait beaucoup moins de données… mais ça fait aussi beaucoup moins de précision ! Selon les applications, une grande précision est importante ou pas — ça peut faire la différence entre un algorithme itératif qui converge ou pas du tout, ces affaires de précision. C'est donc à chaque développeur de se demander s'il a besoin d'une grande précision ou pas : si non, alors il peut gagner en performance.

    Pour reprendre ton exemple, ça serait plutôt réduire la consommation de 50 % en te disant que ta voiture sera à peu près sur la route — et pas juste parce que tu bois trop, aussi parce que la direction est nettement moins précise.
    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
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    août 2008
    Messages
    25 981
    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 : 25 981
    Points : 181 682
    Points
    181 682
    Par défaut
    La version finale est maintenant disponible : https://developer.nvidia.com/cuda-toolkit
    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 !

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/03/2015, 18h12
  2. CUDA, C++, Qt : Sortie anticipée de fonction
    Par brugere dans le forum C++
    Réponses: 6
    Dernier message: 07/03/2013, 11h05
  3. Réponses: 5
    Dernier message: 13/04/2010, 11h31
  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