Developpez.com

Le Club des Développeurs et IT Pro

OpenACC : le standard de programmation parallèle par NVIDIA

Accélérer les applications hybrides CPU/GPU avec les directives

Le 2011-11-17 18:16:36, par Idelways, Expert éminent sénior
En compagnie de Cray, PGI et avec le soutien de Caps ; NVidia a développé un nouveau standard ouvert pour la programmation parallèle.

OpenACC est conçu pour permettre aux programmeurs d'exploiter facilement la puissance transformatrice de l'hétérogénéité des systèmes informatiques hybrides CPU/GPU (processeur graphique). Il trouve son indication auprès des programmeurs travaillant dans l'analyse de donnée, l'intelligence artificielle et la physique entre autres domaines scientifiques et techniques.



Le standard donne la possibilité aux développeurs C/C++ et Fortran de désigner au compilateur les boucles et régions du code à accélérer en leur passant de "simples conseils" (ou directives) « sans qu'ils aient besoin de modifier ou d'adapter le code sous‐jacent lui‐même », affirment les initiateurs du standard. Les investissements dans les applications existantes peuvent donc être conservés, tout en permettant une migration facile vers l'informatique accélérée

L'annonce du standard souligne que la plupart des développeurs rapportent des augmentations 2 à 10 fois supérieures dans les performances des applications (après près de deux semaines de tests avec les nouveaux compilateurs).

Le standard sera pris en charge par les compilateurs de Cray, PGI et CAPS à partir du premier trimestre 2012. Il sera entièrement compatible et interopérable avec l'architecture de programmation parallèle NVIDIA CUDA.

Télécharger les spécifications du standard OpenACC

Source : comuniqué de presse collectif

  Discussion forum
8 commentaires
  • iNaKoll
    Membre régulier
    Bonjour,

    C'est quoi la différence avec OpenHMPP ? Ca commence à faire pas mal de Open** vive LE standard...
  • wirenth
    Membre averti
    Je suis assez étranger au développement parallèle, concrètement c'est quoi la différence avec OpenMP ? l'exploitation du GPU ?
  • Joker-eph
    Membre confirmé
    OpenMP se limite aux machines à mémoire partagée alors que le type de modèle de programmation visé ici est plus hétérogène. Ça signifie qu'avant d'exécuter du code sur un accélérateur il faut y avoir transféré (ou mapper dans son espace mémoire) les données à traiter.
  • Traroth2
    Membre émérite
    C'est compatible CUDA, très bien, mais est-ce que c'est compatible OpenCL ? Parce qu'une technologie "ouverte" qui dépend entièrement d'une technologie propriétaire, ça ne me semble pas très ouvert, personnellement...

    Edit : La FAQ dit que non, mais que rien ne s'y oppose. De même qu'une compatibilité avec les GPU d'AMD...
  • gbdivers
    Inactif
    Cela me semble un peu concurent avec OpenCL, qui permet aussi les architectures hybrides CPU/GPU. J'ai pas trop testé les CPU multi core avec OpenCL mais c'est faisable sans problème.
    A priori, la différence est l'utilisation de directives (de la même manière que OpenMP) plutôt que de kernels.
    A tester... mais je doute de l'intérêt. Peut être plus en remplacement de OpenCL qu'en complément.
  • gbdivers
    Inactif
    Cela dépend comment on prend la chose
    On retrouve beaucoup de poins commun avec l'existant :
    - utilisation des directives comme OpenMP
    - programmation des GPU comme CUDA
    - programmation hybride comme OpenCL
    Bref, je vois pas comment ça va se positionner. Mais j'ai pas encore testé
  • Joker-eph
    Membre confirmé
    C'est clairement une solution qui remplace OpenCL. Si vous déjà vu à quoi ressemble un code OpenCL, une solution "à la OpenMP" à le mérite de rendre ça "utilisable" !
  • Joker-eph
    Membre confirmé
    C'est dans la même veine qu'HMPP, mais fait par les ricains et supporté par un plus large nombre d'industriel dont Nvidia. A noter que CAPS qui a produit HMPP fait partie du consortium OpenACC.

    Voir aussi cette analyse: http://terboven.wordpress.com/2011/1...p-and-openacc/

    OpenACC n'est qu'un prototype de ce qui devrait apparaitre en tant que partie du standard OpenMP 4.0 si j'ai bien lu.