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

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

C++ AMP : le nouvel outil de Microsoft
Pour la conception d'applications parallèles en C++ utilisant la puissance du GPU

Le , par Hinault Romaric

55PARTAGES

6  1 
Mise à jour du 07/02/2012, par Hinault Romaric

Comme Microsoft l’avait promis lors de la présentation de C++ AMP, l’éditeur a publié le cahier des charges de la spécification afin que les autres éditeurs de compilateur C++ puissent l’utiliser.

Pour rappel, C++ AMP (Accelerated Massive Parallelism) est une nouvelle technologie conçue pour aider les développeurs C++ dans la conception d'applications parallèles utilisant le GPU. C++ AMP s’appuie sur les bibliothèques de programmation d'applications multimédia DirectX et facilite le développement en exploitant la puissance du matériel massivement parallèle (GPU et APU).

C++ AMP permet donc de combler les attentes des développeurs qui ont de plus en plus besoin de tirer parti de la puissance des GPU dans leurs applications. La technologie a été développée tout d’abord pour Visual Studio 2011, et un aperçu est déjà disponible avec la Developper Preview de l’environnement de développement publiée en septembre dernier.

La technologie a été mise au point en partenariat avec NVIDIA et AMD. Les ingénieurs de Microsoft ont réduit au minimum le nombre de changements dans le code. C++ AMP comporte quelques restrictions qui sont nécessaires lors de l’exécution du code sur plusieurs processeurs. Il dispose également d’un certain nombre de fonctionnalités supplémentaires comme les types de tableaux multidimensionnels et le support du transfert de mémoire synchrone.

La spécification publiée sous une licence Open Specification Promise (OPS) par Microsof lors de la conférence GoingNative C++ 2012, peut désormais être utilisée par d’autres responsables de compilateur C++ comme Embarcadero, Intel ou encore la Free Software Foundation, tout en étant à l’abri de toute revendication de droits de brevets par l’éditeur.

L’implémentation de C++ AMP dans Visual Studio 11 utilise DirectCompute pour générer le byte code qui sera interprété par le GPU. Les éditeurs de compilateur C++ pourront utiliser d’autres interfaces comme CUDA de Nvidia.

L’éditeur travaille par ailleurs avec le comité de normalisation du C++, afin de faire adopter les idées derrières C++ AMP dans le noyau du langage.

Source : Microsoft

C++ AMP : le nouvel outil de Microsoft
Pour la conception d'applications parallèles en C++ utilisant la puissance du GPU

Microsoft a annoncé lors de la conférence Fusion Sommet d’AMD, une nouvelle technologie conçue pour aider les développeurs C++ dans la conception d'applications parallèles utilisant le GPU (Graphics Processing Unit).

La technologie baptisée C++ Accelerated Massive Parallelism (C++ AMP) est construite en C++ moderne, et s’appuie sur les bibliothèques de programmation d'applications multimédia DirectX. C++ AMP permettra de faciliter la programmation en exploitant la puissance du matériel massivement parallèle (GPU et APU).

C++ AMP sera fourni avec une bibliothèque STL-like, qui pourra être utilisée en faisant appel à amp.h dans un code C++. Les développeurs n’auront pas besoin d’apprendre une nouvelle syntaxe.

La portabilité est également un point essentiel dans C++ AMP. Les applications utilisant cette technologie pourront être utilisées sur un large éventail de matériels de n’importe quel fournisseur. La première version sera centrée sur le GPU, mais Microsoft prévoit dans le futur, d'étendre la technologie pour exploiter les architectures multi-cœurs et le Cloud.

C++ AMP sera proposée comme spécification ouverte. Microsoft prévoit de mettre le cahier de charge de cette technologie à la disposition des autres éditeurs de compilateur C++ pour qu’ils puissent l’utiliser.

L'outil sera intégré dans la prochaine version du compilateur Visual C++. Et il sera totalement pris en charge (édition, build, débogage, profiling, etc.) dans la prochaine version de Visual Studio.

Source : Microsoft

Et vous ?

Que pensez-vous de la volonté de Microsoft de sortir un nouvel outil pour la programmation parallèle : bienvenue ou vous avez déjà ce qu'il vous faut ?

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Firwen
Membre expérimenté https://www.developpez.com
Le 16/06/2011 à 14:00
Grande différence entre les deux : OpenCL est une extension du C, ici on parle d'une extension du C++, donc avec le support de tout ce qui fait que ce langage est une horreur à parser et délicieux à utiliser (enfin, j'espère, ça a quand même pris un sacré bout de temps pour que CUDA C++ sorte...).
Le GPGPU implique une gestion de la mémoire trés fine, avec une gestion manuelle des différents caches (_thread, _local, _shared, _global ) car les transferts mémoirs sont de loin ce qui est le plus couteux en terme de temps d'execution.
Il implique aussi, une gestion spécial des appels de fonctions avec l'absence de récursion entre autre, et des typages supplémentaires sur celles-ci ( _kernel, _global, etc )....

Qu'est-ce que vient foutre un langage Object là dedans ? CUDA fait déja la même chose et bien souvent, l'aspect objet est totalement zappé dans les sections parallélisées car trop couteux et pas adapté, on revient a de l'impératif traditionnel.

C++ est un excellent langage, mais j'ai de gros doutes sur son utilité en GPGPU par rapport au C/OpenCL.
5  0 
Avatar de jmnicolas
Membre éprouvé https://www.developpez.com
Le 07/02/2012 à 14:20
C++ AMP permet donc de combler les attentes des développeurs qui ont de plus en plus besoin de tirer parti de la puissance des GPU dans leurs applications.
Malgré tout le battage médiatique autour de la parallélisation, je suis pas sûr qu'il y ait beaucoup de développements concernés.
4  0 
Avatar de teddyalbina
Membre confirmé https://www.developpez.com
Le 16/06/2011 à 18:03
Citation Envoyé par Traroth2 Voir le message
D'après l'article de Microsoft, le système est bâti comme une surcouche de DirectX. Ce qui veut dire que DirectX va devenir une API incontournable pour les machines HPC sous Windows. L'idée est amusante.

Et comme d'habitude, Microsoft fait totalement différent et incompatible avec tout ce qui est existe, tant OpenCL que Cuda. Par contre, pour la première fois, Microsoft se met en concurrence avec nVidia et d'AMD, et même avec Intel (Parallel Studio)...

Oui et non ici le but pour MS est de faire en sorte que les devs n'aient pas besoin d'utiliser plusieurs technos différentes pour un même soft. Donc sous Win ça passera par Direct Compute parce que c'est plus simple pour eux. Et comme ils veulent le soumettre à standardisation sous Unix ça pourra utiliser OpenCL.

Concrètement il s'agit d'une interface et pas d'une nouvelle technologie.
3  0 
Avatar de TNT89
Membre confirmé https://www.developpez.com
Le 07/02/2012 à 20:20
Citation Envoyé par Hinault Romaric Voir le message

Et vous ?
Que pensez-vous de la volonté de Microsoft de sortir un nouvel outil pour la programmation parallèle : bienvenue ou vous avez déjà ce qu'il vous faut ?
Non, c'est simplement une interface qui ne sert à rien.

Dans le désordre de ce que j'ai pu lire :

Citation Envoyé par Firwen Voir le message
Les sections GPU de CUDA sont fortement similaire à celle d'openCL et ont un peu prés les même limitations ( mémoire, typages, non-récursive,..), elles ne sont pas C++, elles se rapprochent du C ou de la synthaxe d'OpenCL.
Les sections de code CUDA (pour le GPU) sont C (objet et metaprogrammation template, ce qui est très savoureux dans le deuxième cas d'ailleurs).

Citation Envoyé par jmnicolas Voir le message
Malgré tout le battage médiatique autour de la parallélisation, je suis pas sûr qu'il y ait beaucoup de développements concernés.
Pour des applications scientifiques, si, énormément même. Je travaille dans un domaine où la FFT est le point névralgique de tous les calculs et ce qu'apporte le GPGPU est tout simplement incroyable.

Citation Envoyé par Freem Voir le message
Et si je pense à compiz-fusion, le fameux bureau 3D qui tourne sous X, il permet de faire faire les calculs relatifs à l'IHM par le GPU.
Enfin ca n'a pas grand-chose à voir avec du GPGPU (pour Genereral Pur pose) car Compiz n'utilise que la partie graphique, pour le rendu.

Citation Envoyé par Jojo K-ri Voir le message
ça servira donc à booster la science.
Malheureusement, si l'on considère cette interface, non je ne pense pas. Tout simplement et de mon expérience, j'ai déjà du mal à faire passer le message de ce que l'on fait vraiment avec GPU (CUDA/GLSL principalement) a mes collègues physiciens, de la façon dont on gère la programmation et pourquoi ça n'est pas un simple "deroulement de boucle" dans la plupart de nos applications. De plus, la majorité d'entre eux ne connaît que le C. Enfin, cet outil ne propose qu'une interface que je trouve pour ma part très obscure quant à la gestion fine de la mémoire, des échanges CPU/GPU, etc. comme certains l'aient déjà dit. Bref, rien de très attrayant pour selon mon point de vue.

Le moment où cela devient comique, c'est de savoir que Microsoft voudrait pousser l'adoption dans le standard.
  1. Adoption d'une interface très jeune par rapport aux autres protagonistes.
  2. Adoption d'une interface qui n'est pas reconnue et utilisee par une seule plateforme et un seul groupe.
  3. Adoption d'une interface spécifique au hardware de certaines machines seulement dans un standard de langage de programmation.

J'ai une très forte envie de citer une accroche de réclame :
...et la marmotte met le petit chocolat dans le papier d'alu...
3  0 
Avatar de dourouc05
Responsable Qt & Livres https://www.developpez.com
Le 16/06/2011 à 14:09
Citation Envoyé par Firwen Voir le message
C++ est un excellent langage, mais j'ai de gros doutes sur son utilité en GPGPU par rapport au C/OpenCL.
C'est pour ça d'ailleurs qu'il a été intégré à CUDA, parce que les développeurs le réclamaient... C'est pour ça d'ailleurs qu'on a vu apparaître assez tôt Thrust, maintenant intégré à CUDA...

Il apporte une autre manière de voir les choses. Ce n'est pas parce que tu vois le monde d'une manière hiérarchique et les indiens plus cyclique que ta vision est la bonne et que toutes les autres sont mauvaises. Ce sont différentes manières de penser, c'est tout.

Ensuite, réduire le C++ à une approche objet... c'est juste dévaloriser complètement ce langage. Depuis quand est-il interdit de faire de la programmation impérative ? On n'est pas du tout dans un langage orienté objet pur et dur comme Java ou C# : en C++, on est libre de ce que l'on fait. On dispose de fonctionnalités objet, mais sans obligation de les utiliser. En C, on dispose de quelques prémices de l'objet, sans plus. Mais on n'a pas de flux, pas de templates et bien d'autres choses qu'il est inutile de lister ici.
3  1 
Avatar de Hinault Romaric
Responsable .NET https://www.developpez.com
Le 07/02/2012 à 12:58
Microsoft ouvre la spécification C++ AMP aux autres compilateurs
pour la conception d'applications parallèles en C++ utilisant la puissance du GPU

Mise à jour du 07/02/2012, par Hinault Romaric

Comme Microsoft l’avait promis lors de la présentation de C++ AMP, l’éditeur a publié le cahier de charge de la spécification afin que les autres éditeurs de compilateur C++ puissent l’utiliser.

Pour rappel, C++ AMP (Accelerated Massive Parallelism) est une nouvelle technologie conçue pour aider les développeurs C++ dans la conception d'applications parallèles utilisant le GPU. C++ AMP s’appuie sur les bibliothèques de programmation d'applications multimédia DirectX et facilite le développement en exploitant la puissance du matériel massivement parallèle (GPU et APU).

C++ AMP permet donc de combler les attentes des développeurs qui ont de plus en plus besoin de tirer parti de la puissance des GPU dans leurs applications. La technologie a été développée tout d’abord pour Visual Studio 2011, et un aperçu est déjà disponible avec la Developper Preview de l’environnement de développement publiée en septembre dernier.

La technologie a été mise au point en partenariat avec NVIDIA et AMD. Les ingénieurs de Microsoft ont réduit au minimum le nombre de changements dans le code. C++ AMP comporte quelques restrictions qui sont nécessaires lors de l’exécution du code sur plusieurs processeurs. Il dispose également d’un certain nombre de fonctionnalités supplémentaires comme les types de tableaux multidimensionnels et le support du transfert de mémoire synchrone.

La spécification publiée sous une licence Open Specification Promise (OPS) par Microsof lors de la conférence GoingNative C++ 2012, peut désormais être utilisée par d’autres responsables de compilateur C++ comme Embarcadero, Intel ou encore la Free Software Foundation, tout en étant à l’abri de toute revendication de droits de brevets par l’éditeur.

L’implémentation de C++ AMP dans Visual Studio 11 utilise DirectCompute pour générer le byte code qui sera interprété par le GPU. Les éditeurs de compilateur C++ pourront utiliser d’autres interfaces comme CUDA de Nvidia.

L’éditeur travaille par ailleurs avec le comité de normalisation du C++, afin de faire adopter les idées derrières C++ AMP dans le noyau du langage.

Source : Microsoft
2  0 
Avatar de Firwen
Membre expérimenté https://www.developpez.com
Le 16/06/2011 à 13:50
Ce qui est bien, c'est qu'on peut toujours compter sur Microsoft pour réinventer une roue sauce-maison incompatible avec un standard qui existe déja : OpenCL

Maintenant qu'Intel, AMD, Nvidia, Apple et Gallium3D supportent OpenCL, ça aurait vraiment été dommage de fournir un support aussi sur Windows
2  1 
Avatar de kain_tn
Expert éminent https://www.developpez.com
Le 16/06/2011 à 14:05
Citation Envoyé par Firwen Voir le message
Ce qui est bien, c'est qu'on peut toujours compter sur Microsoft pour réinventer une roue sauce-maison incompatible avec un standard qui existe déja : OpenCL

Maintenant qu'Intel, AMD, Nvidia, Apple et Gallium3D supportent OpenCL, ça aurait vraiment été dommage de fournir un support aussi sur Windows

Bah c'est un peu comme la raison d'être de directx... Que l'on aime ou pas, ça a été inventé pour s'assurer de garder la main sur le marché des jeux vidéos :/
1  0 
Avatar de Firwen
Membre expérimenté https://www.developpez.com
Le 16/06/2011 à 14:16
C'est pour ça d'ailleurs qu'il a été intégré à CUDA, parce que les développeurs le réclamaient... C'est pour ça d'ailleurs qu'on a vu apparaître assez tôt Thrust, maintenant intégré à CUDA...

Il apporte une autre manière de voir les choses. Ce n'est pas parce que tu vois le monde d'une manière hiérarchique et les indiens plus cyclique que ta vision est la bonne et que toutes les autres sont mauvaises. Ce sont différentes manières de penser, c'est tout.

C'est deux choses différentes, CUDA a choisi d'intégrer C++ pour des raisons d'architecture et de linkage.

Les sections GPU de CUDA sont fortement similaire à celle d'openCL et ont un peu prés les même limitations ( mémoire, typages, non-récursive,..), elles ne sont pas C++, elles se rapprochent du C ou de la synthaxe d'OpenCL.

CUDA a intégré C++ principalement pour les parties non executées sur GPU du code.
D'ailleurs CUDA utilise deux compilateurs :
- son compilateur interne pour les sections GPU
- une version de g++ pour le code C++-like.
( c'était le cas la dernière fois que je l'ai utilisé).

La raison principale à ça, c'est que là où OpenCL se comportent comme une lib C, CUDA se comporte comme un compilateur. Il a donc besoin d'offrir une compat C++ pour être intégré correctement dans un prog C++.

Ensuite, réduire le C++ à une approche objet... c'est juste dévaloriser complètement ce langage. Depuis quand est-il interdit de faire de la programmation impérative ? On n'est pas du tout dans un langage orienté objet pur et dur comme Java ou C# : en C++, on est libre de ce que l'on fait. On dispose de fonctionnalités objet, mais sans obligation de les utiliser. En C, on dispose de quelques prémices de l'objet, sans plus. Mais on n'a pas de flux, pas de templates et bien d'autres choses qu'il est inutile de lister ici.
Tout à fait
Le point que je voulais mettre en évidence, c'est que la puissance C++ n'est pas utilisée dans CUDA/equivalent car elle ne PEUT PAS être utilisée. CUDA C++ sert surtout a "assembler" les bouts de code spécifiques au GPU dans "CUDA".
1  0 
Avatar de dourouc05
Responsable Qt & Livres https://www.developpez.com
Le 16/06/2011 à 13:29
Citation Envoyé par Hinault Romaric Voir le message
Que pensez-vous de la volonté de Microsoft de sortit un nouvel outil pour la programmation parallèle : bienvenue ou vous avez déjà ce qu'il vous faut ?
Je me demande surtout quelles s(er)ont les différences avec DirectCompute, une plateforme déjà prévue pour le GPGPU.
0  0