26 août 2016

Cpp FRench User Group : le feedback d'Armand sur la Cppfrug #16

Design & Code

Grow

Together

26 août 2016

Cpp FRench User Group : le feedback d'Armand sur la Cppfrug #16

Design & Code

Grow

Together

26 août 2016

Cpp FRench User Group : le feedback d'Armand sur la Cppfrug #16

Design & Code

Grow

Together

Cpp FRench User Group gagne à être connu. J'ai été jeudi 13 avril 2017 aux présentations de cppfrug qui se tenaient au sein de SoftBanks Robotics, anciennement Aldebaran Robotics, à Paris.

Pour ceux ne connaissent pas, c'est la société créatrice de Nao, le petit robot humanoïde (60 cm) qui a déjà eu tant de succès, et de Pepper qui a récemment fait son apparition sur le petit écran dans les publicités pour une voiture.

TL;DR

Les conférences sont intéressantes, les gens sont cool, passionnés, passionnant, il y a à boire et à manger, allez-y Seul pré-requis, parler C++, sinon l'intérêt décroît amplement.

Concurrence

Si j'ai bien compris leur problématique, le besoin est de gérer une multitude d'objets et de valeurs différentes sans que cette gestion n'influe sur la manière de développer ni sur la bonne construction du programme. Afin d'augmenter le nombre de composants indépendants tournant en parallèle sur la même machine, il faut avoir des mécanismes de parallélisation du flux d'exécution ingénieux afin d'avoir un code qui semble séquentiel et qui en fait est totalement asynchrone.

Pour ce faire, Joël nous présente une gestion de la concurrence à travers le constructeur, destructeur et appel asynchrone de toutes les méthodes, en s'assurant juste que la partie métier des méthodes soient éventuellement exécutés. Tout le problème étant alors d'avoir une exécution concurrente avec le moins de mécanismes de synchronisation possible, à travers une file d'attente de tâches et un potentiel lot de travailleurs.

Au long de ses diapositives, Joël nous expose donc différentes techniques afin de maximiser le parallélisme du code, soulevant à chaque fois les problèmes de synchronisation et de gestion des tâches.

Pour aller plus loin, les documentations que je souhaiterai lire sont sur les futures, continuations, strands, executionneurs et les bibliothèques telles que TBB, Cilk+, Boost asio, openMP et j'en oublie certainement.

Et voici certains frameworks dont j'ai entendu parler et que j'aimerai être amené à tester, Hpx et thrift.

Move it, move it

Fred nous refait faire le tour d'horizon de la (plus si) nouvelle Move semantic.

Lvalue, Rvalue sont au programme. Références, références constantes, références sur rvalue et la très étrange et visuellement douloureuse forward référence.

L'intérêt de cette conférence est surtout de revoir que les bases, et bien il faut les travailler encore et encore.

Avec Fred c'est une révision interactive qui nous a été proposé, et il apparaît que certains comportements ne me sont pas encore naturels, même si j'ai bien saisi l'intérêt du nouveau paradigme où on évite au maximum de copier des éléments; d'autant plus que nous avons maintenant la standardisation de la RVO (return value optimization).

FFT SIMD

Quesaquo ?

Fast Fourier Transform Single Instruction Multiple Data. Pour faire simple c'est l'unrolling des boucles au niveau du processeur.

On va s'attaquer à quelque chose de plus bas niveau cette fois. L'idée est d'utiliser les instructions assembleur que nous mettent à disposition les fondeurs de processeurs afin d'effectuer plus de tâches avec moins d'instructions.

Appliquer cette technique de parallélisation n'est pas évident pour tous les cas. Par exemple, les accès concurrents ne sont pas possible, tout simplement car nous sommes au niveau atomique des opérations. Le processeur peut bien entendu effectuer plusieurs étapes du pipeline simultanément, mais nous ne pourrons pas appliquer l'instruction partiellement.

De plus, pour avoir un contrôle sur ce qui est fait, il faut parler directement au processeur. Du coup, bye-bye langages de haut niveau et bonjour asm.

Une technique de méta-programmation nous est présenté dans cette élocution afin de sélectionner sur quelle plateforme nous sommes compilés, quel unrolling peut être fait (manuellement) et quelles instructions utiliser pour le SIMD. En effet le même processeur possède plusieurs instructions SIMD avec chacune leur nombre et leur taille de registre.

Ce sur quoi je dois me renseigner suite à cette présentation est où en sont les compilateurs en matière de SIMD automatique et de loop unrolling.

Conclusion de la CPPFRUG

Je surveillerai l'agenda des conférences suivantes pour ne pas en louper, et apprendre de mes pairs.