L’effet “Flow” est un peu plus rapide, juste un peu. J’ai commencé à pousser l’exécution du code vers le GPU (accélération matérielle). Pour l’instant et encore pour un bon bout de temps, tout le code de “Flow” ne peut être facilement accéléré parce toutes les opérations ne sont pas parallélisables, c’est-à-dire exécutées en même temps, puisqu’il y a de nombreuses dépendances sur les résultats des opérations : telle couleur doit être calculée avant de procéder au calcul du vecteur de déplacement, etc. J’ai à repenser mon algorithme. Cependant, dans l’état actuel de la version 0.0.13.0 c’est quand même un peu plus rapide que la version précédente.

Plusieurs, peut-être trop ? d’options s’offrent à nous lorsque vient le temps de travailler avec le GPU ; chacune a ses qualités, ses limitations. J’ai opté pour une option “morte” de Microsoft : AMP (Accelerated Massive Parallelism) ; morte parce qu’elle ne semble plus être en développement actif. Mais pour ce dont j’ai besoin en ce moment c’est amplement suffisant (effectuer des centaines de calculs simples en parallèle). Il fallait cependant communiquer avec C++ (mon projet est en C#). Pas simple, mais pas si mal.

Ensuite, il a fallu corriger un fichier de Microsoft (amp.h) selon les instructions ici pour que ça fonctionne avec Visual Studio 2017.

Il existe quantité de pages web dédiées à C++ AMP, sans compter les vidéos : une simple recherche Google vous mettra sur la voie.

Pourquoi ai-je choisi cette option plutôt qu’une autre ? Simplement parce qu’elle était déjà disponible sur mon ordi, que j’avais en main un bout de code qui indiquait la marche à suivre avec AMP et que ça correspondait exactement à mon besoin immédiat. Finalement, AMP est censé rouler sur toutes les cartes graphiques (à tout le moins ça fonctionne avec NVIDIA Quadro K2200 et AMD Radeon Vega 8). Pour l’instant c’est aussi la simplicité (relative) d’utilisation qui prime bien davantage que la pleine prise en charge de la puissance de la carte graphique.

Plus tard, évidemment, je me tournerai vers une option plus standard mais je n’ai pas encore fixé mon choix. CUDA est exclu parce que cela restreint mon application à ne rouler que sur un ordi qui a une carte NVIDIA, alors que mon laptop et mon Microsoft Surface sont équipés différemment. Je prévois créer un contrôleur “touch base” sur Surface pour changer les paramètres de l’application en cours d’utilisation (couleurs, traits, effets, etc.) et un ou + ordis pour permettre à plus d’une personne de pouvoir travailler sur la même image en même temps. C’est encore très loin mais c’est dans les plans.

En attendant, on a la version 0.0.13.0 code source et la version installable sous Windows.

geographie nouvelle