Le 13 juillet au siège de Microsoft France, un des gourous C++ de l’éditeur, Steve Teixeira, a dévoilé et démontré les prochaines grandes nouveautés C++ dans les outils Microsoft prévus dans les prochains. Et c’est du très costaud : gpgpu, massivement parallèle, C++ AMP, architecture C++ de Visual Studio modifiée, nouveaux outils.
Une des grosses nouveautés est l’arrivée de C++ AMP. AMP signifie massivement parallèle accélérée. C’est à dire comment utiliser les ressources matérielles, particulièrement les GPU, pour accélérer le traitement parallèle. Depuis le mois dernier, quelques articles de développement apparaissent sur MSDN sur l’idée de C++ AMP. Il s’agit d’une technique pour intégrer dans l’architecture parallèle les ressources GPU. AMD avait annoncé courant juin dernier une telle approche. C++ AMP sera intégré à Visual Studio et le compilateur C++. Il s’appuie sur la pile d’exécution DirectX avec un accès matériel et une abstraction de haut niveau. Attention, C++ AMP s’appuie sur la plate-forme DirectX, et même plus précisément DirectCompute, pour utiliser les GPU même si AMP est une spécification ouverte. Ce qui limite donc son usage car il faut des GPU compatibles. Il ressemble à Cuda de AMD et même à OpenCL. L’usage de DirectX / Direct3D comme plate-forme impose des restrictions dans le code qui devra implémenter par conséquent AMP. Ainsi, le développeur n’aura pas accès aux char, long double, des limitations dans les lambdas et encore l’usage uniquement des types supportés par Direct3D.
La chaîne de compilation change aussi. Car, un code AMP passera par un HLSL puis le fx shader compiler pour ensuite reprendre une chaine classique pour générer de l’exécutable. Dans une chaine classique, le code C++ va directement dans le compilateur VC++. Bref, le code AMP ne passe pas dans le compilateur « classique » mais spécifique à la plate-forme GPU. C++ AMP ne sera pas obligatoire dans une application parallélisée. Son usage nécessite une adaptation non négligeable du code mais l’avantage est de pouvoir mixer parallélisme CPU et GPU. Par contre, aucune annonce faite sur une compatibilité avec Cuda et OpenCL. Si nous prenons le cas d’un traitement parallèle de données, les deux canaux (GPU et CPU) sont séparés pour éviter tout débordement et fuite. Et dans ce cas, la CPU est vu comme le hosteur et les GPU comme les accélérateurs. Reste à savoir ce que l’on voudrait garder en CPU et mettre en GPU.
C++ AMP bénéficiera de tous les outils de Visual Studio : debug, intellisense, émulation gpu, nouveaux visualiseurs. Pour le moment, les équipes travaillent sur cette intégration. Aucune date de disponibilité n’a été donnée mais peut être d’ici la fin de l’année ou début 2012, lors de la sortie du prochain Visual Studio.
Steve est aussi revenu sur le prochain PPL (Parallel Patterns Library) de Visual Studio. Là aussi beaucoup de nouveautés, d’améliorations : architecture affinée, nouveaux algorithmes et conteneurs, notion de continuation des tasks. Pour rappel, PPL est le modèle de développement parallèle alors que le concurrency runtime est la partie exécution. On bénéficiera du support du NUMA, d’un nouveau modèle de task (task ).
Il est tout de même regrettable de créer un 3e modèle CPU – GPU après Cuda et OpenCL. Cela ne va finalement pas simplifier la vie du développement. Pourquoi Microsoft n’a pas appuyé son approche sur les deux précédents qui sont matures et commencent à s’établir sur le marché ? Certes, Microsoft voulait sans doute promouvoie sa technologie mais c’est une occasion manquée !
Ne manquez pas la grande conférence C++ du 13 octobre prochain.