Property

Talk abstract

From LRDE

This is a property of type Text.

Showing 20 pages using this property.
S
Dans cet exposé je présenterai la bibliothèque d'algorithmes géometriques CGAL. Cette bibliothèque C++ fournit des algorithmes comme le calcul d'enveloppes convexes, de triangulations, en 2D, 3D... J'illustrerai surtout les problèmes de robustesse numériques que l'on y rencontre, puis je détaillerai les solutions que l'on utilise pour les résoudre de manière efficace. Elles sont basées sur plusieurs types d'arithmétique: arithmétique d'intervalles et multiprécision. Ces différentes techniques sont combinées dans l'implementation grâce à la généricité du code (template C++), ce qui produit à la fois un code efficace, compact, et proche des concepts mathématiques, donc plus facilement prouvable.  +, Dans cet exposé, nous présenterons la bibliothèque d'algorithmes de morphologie mathématique Morph-M. Cette bibliothèque C++ fournit un grand nombre de fonctions en traitement d'image (arithmétiques, colorimétrique...) et en morphologie mathématique (filtrage, segmentation, graphes etc.). Nous discuterons principalement des concepts proposés par la bibliothèque, et leurs utilisations dans la mise en oeuvre de nouveaux algorithmes. Nous illustrerons les potentialités par quelques algorithmes actuellement implémentés dans cette bibliothèque. Enfin nous discuterons des inconvénients de l'approche générique.  +
Dans cet exposé nous verrons l'ensemble des outils de la plate-forme Qgar, avec une attention particulière pour la généricité et les performances du code de la bibliothèque QgarLib. Nous verrons également les autres composants du logiciel, quelques standards de développement Qgar, ainsi que les défis pour l'évolution de la plate-forme.  +
Separation of concerns is the idea of breaking down a program into encapsulated pieces that overlap in functionality as little as possible. Encapsulated entities, such as classes, methods or modules, are more manageable, easier to test and maintain, and may be reused more easily than a large, entangled program. A cross-cutting concern is something that cannot be encapsulated using normal abstraction mechanisms, thus defeating separation of concerns. A classical example of this is logging (e.g., logging calls and returns to a file while the program is running) - the logging code needs to be added to every applicable method in the program. The logging code for each method may be almost identical, creating an undesirable overlap in functionality. Aspects let a programmer implement a cross-cutting concern as a separate entity, through advice (how a concern should be implemented) and join points (where it should be implemented). I will give an introduction to aspect-orientation and aspect languages, and also talk a bit about domain-specific aspect languages.  +, Context-oriented Programming allows one to modularize a software system using partial class and method definitions organized into layers. Layers are composed into or out of the system depending on the context apparent during program execution. The basic concept of layers as partial program definitions has been suggested before, but with our approach we extend this idea by the notion of dynamically scoped layer activation, resulting in a viable approach for expressing context-dependent behavior. We will discuss the basic language constructs for Context-oriented Programming, the development of non-trivial examples, implementation issues, especially with regard to retaining efficient method dispatch, integration with the CLOS Metaobject Protocol, and if time permits, advanced topics like ContextL's reflective facilities for controlling layer activation and deactivation.  +
Mouldable programming is about looking at programs as mouldable fragments of code, not as the static, brittle syntax software often turns out to be. Some simple examples follow. The notation for calling a method "push" which adds an element "E" to a stack "S" can be OO or static method style, it can modify "S" or return the new stack etc. Can we simplify usage to just one form, and mould it to the actual call? A function which breaks down for some input can signal this using return flags, special return values, or exceptions, to name some common ways. Can we abstract over this, and mould to the relevant error handling technique? Often we need to do run-time checking of arguments, e.g., array indexing bounds, forcing us to introduce lots of code to deal with the unwanted cases. Can we use mouldable ideas to simplify the code? In the presentation, we will elaborate on such examples, discussing how we can free us from awkward syntactic constraints.  +, Writing code in an abstract, high-level style can cut development time and make code more maintainable and easier to reason about - but at the cost of lower run-time performance. For performance-critical applications, such as in numerical programming, this can render modern abstraction techniques infeasible. Fortunately, code that is easy for humans to reason about is also easier to reason about automatically. We're studying different abstraction mechanisms and generative programming techniques, as well as optimization techniques to produce efficient code for them. As an example, basic element-wise operations on arrays may be expressed in terms of high-level operations, which may be automatically combined in order to increase performance. I will present some of the things we've been working on so far, and some of the ideas we have for the future.  +
L'algorithmique constructive permet, partant d'une spécification écrite sous forme d'une combinaison non-efficace de fonctions, de dériver, sous certaines conditions, des algorithmes parallèles efficaces. Cette dérivation s'appuie sur des théorèmes d'équivalence de programmes et est formellement correcte. Elle aide le programmeur à concevoir des programmes parallèles. Toutefois les bibliothèques de squelettes proposées ne sont pas certifiées. Dans le cadre d'une collaboration avec l'université de Tokyo, nous proposons de cibler des squelettes algorithmiques développés en BSML et certifiés à l'aide de l'assistant de preuve Coq.  +, Nous présenterons BSML (Bulk Synchronous Parallel ML), un langage de programmation de haut-niveau pour machines parallèles, ainsi que des exemples classiques de parallélisme implémentés dans ce langage. Nous complèterons cette présentation par une étude comparative des coûts théoriques de ces algorithmes réalisée sur la grappe de PC du LACL.  +
Les besoins croissants en puissance de calcul exprimés par de nombreux domaines scientifiques exercent une pression très forte sur les architectures émergentes, les rendant toujours plus performantes mais toujours plus complexes à maîtriser. Dans ce cadre, le développement d'outils tirant parti des spécificités de ces architectures (quadri- et bientôt octo-coeurs, processeurs Cell ou GPU par exemple) devient une gageure car allier expressivité et efficacité est une tâche ardue. Les travaux exposés ici montrent comment l'utilisation de la programmation générative, et en particulier de la méta-programmation template, permet de répondre au problème de performances et d'abstractions. Nous montrerons comment ces techniques ont permis de développer Quaff, un outil de placement automatique d'applications data-flow sur des cibles variées comme les clusters, les multi-coeurs ou le processeur Cell.  +, Dans cet exposé je présenterai le modèle bulk-synchronous parallelism (BSP) des algorithmes et architectures parallèles, ainsi qu'un tour d'horizon des domaines d'application du parallélisme. BSP propose une vue unifiée des principaux paramètres de la performance des algorithmes parallèles et de leur adéquation sur les architectures multi-processeur, multi-coeur et leurs réseaux de communication interne. Il permet une analyse portable et extensible des performances ce qui permet d'éviter les principaux pièges de l'informatique parallèle: mauvaise granularité, réseau mal adapté, déséquilibres.  +
Dans un intergiciel schizophrène, une représentation intermédiaire des interactions entre composants applicatifs est construite et manipulée. Cette représentation est neutre vis-à-vis du choix d'une personnalité application (interface entre les composants et l'intergiciel) et d'une personnalité protocolaire (interface entre intergiciels distants). Elle rend possible le découplage entre ces deux aspects. Cette représentation doit préserver la structure des données associées aux interactions. Cependant, sa construction in extenso s'avère coûteuse dans le cas de données composites complexes. Cette conversion peut être économisée en remplaçant la réplication complète de la structure par la définition d'un emballage « fantôme » autour de celle-ci (et de chacun de ses composants) : il suffit que cet emballage fournisse les accesseurs permettant de parcourir la structure et de construire un message la représentant. Après avoir présenté un exemple concret de représentation neutre des données structurées, nous montrons comment cette optimisation peut être mise en oeuvre pour réaliser de manière efficace la fonction de représentation dans un intergiciel schirophrène. Nous concluons cette discussion par une évaluation du gain de performance ainsi obtenu.  +, Le langage Ada est connu pour sa sûreté intrinsèque : son typage fort, ses mécanismes de contrôle de valeurs et son système d'exceptions notamment permettent d'avoir une grande confiance en les programmes. Comme dit le vieux proverbe, « En Ada, quand ça compile, ça marche ». Cependant, une des puissances d'Ada provient également de ses systèmes de vérification lors de l'exécution du programme. Par exemple, si une valeur se trouve en dehors de l'intervalle qui lui était autorisé, une exception, rattrapable par le langage, sera automatiquement levée. Ce système de vérification dynamique a bien évidemment un coût. Nous verrons comment le système de compilation GNAT mélange analyse statique et vérification lors de l'exécution pour fournir la totalité des garanties définies par le langage tout en minimisant les surcoûts et la perte de performance.  +
L'outil BTL++ (Benchmark Template Library in C++) développé à EDF R&D se fonde sur la programmation générique et permet de mesurer les performances de noyaux de calcul intensif. Il s'agit d'une bibliothèque générique dont la conception vise à faciliter l'extensibilité par l'utilisateur. Récemment, le lien entre les mesures de performance et la génération automatique de bibliothèques optimales à été étudié pour le domaine de l'algèbre linéaire dense. Quelques mesures de performance de noyaux de calcul à base d'"Expression Template" permettront d'illustrer l'usage de l'outil BTL++.  +, La multiplication des architectures HPC (CPU multi-coeurs, GPU, Cell,..) implique autant de spécialisations des codes de calcul intensif. Dans un contexte industriel, les codes de calcul multi-cibles posent alors des problèmes de maintenance et d'évolutivité importants. La génération automatique des spécialisations est une réponse à ces problématiques. Pour le domaine de l'algèbre linéaire, nous étudions les possibilités offertes par la programmation générique. La mise au point d'une bibliothèque générique multi-cible et performante constitue le sujet de départ d'une thèse dédiée aux méthodes de développement HPC qui minimisent l'adhérence aux machines cibles.  +
JoCaml est une extension d'Objective Caml pour la programmation concurrente et distribuée, inspirée par le join-calcul. Nous avons récemment publié une nouvelle version de JoCaml, dont la compatibilité avec OCaml est meilleure que celle de la version initiale de F. Le Fessant. La nouvelle version pourra facilement être mise à jour au rythme d'OCaml et est binaire-compatible avec OCaml. L'exposé s'attachera plus au langage JoCaml qu'au système JoCaml. Il montrera comment, à partir d'un programme potentiellement parallélisable écrit en OCaml (le ray tracer du concours ICFP 2001), on peut facilement produire un programme distribué, dans le cas abordé, très efficace. Ce sera l'occasion d'aborder la programmation en JoCaml de la coordination de multiples agents coopérants, d'une manière simple et concise dans l'esprit de la programmation fonctionnelle. JoCaml est disponible en http://jocaml.inria.fr/.  +, ReactiveML est une extension d'OCaml basée sur le modèle réactif synchrone introduit par F. Boussinot au début des années 90. Il permet la programmation de systèmes tels que les jeux vidéo ou les simulateurs. Dans cet exposé, je présenterai ReactiveML à travers l'utilisation et la programmation de rmltop, le pendant ReactiveML du toplevel d'OCaml. Ce toplevel permet au programmeur d'écrire interactivement des programmes ReactiveML qui sont typés, compilés et exécutés à la volée. Toute expression ReactiveML valide peut être chargée dans le toplevel et a la même sémantique et la même efficacité que sa version compilée.  +
Je présenterai sur la base d'une démo une application des extensions de langages, à savoir une extension Java pour l'optimisation. Cet exemple montre la mise en oeuvre concrète dans Eclipse, les gains de productivité et de qualité obtenus par rapport aux approches classiques Java+DSL, la différence entre cette approche et un générateur de code ou un préprocesseur. Il montre également une utilisation originale d'un compilateur: la génération automatique d'interface graphique. Je parlerai aussi des futurs projets d'Ateji dans le domaine des extensions de langage.  +, Dans cet exposé je présenterai un outil, appelé Tom, qui permet de simplifier la programmation d'outils de manipulation et de transformation de structures arborescentes, telles que les AST (Abstract Syntax Trees) ou les documents XML par exemple. Tom est un langage de programmation qui ajoute à Java des constructions inspirées du calcul de réécriture et des langages à base de règles. On peut, de manière approximative, voir Tom comme une intégration d'un sous-ensemble de Caml dans Java. Le langage repose sur trois notions fondamentales : (i) les termes, qui sont un modèle universel permettant de décrire des structures arborescentes, et en particulier les notions de programmes et de preuves. (ii) les règles, qui permettent de décrire de manière expressive des transformations. (iii) les stratégies, qui permettent de contrôler l'application des règles. La séparation transformation-contrôle est un point essentiel permettant de rendre les règles indépendantes de leur contexte d'utilisation, facilitant ainsi leur écriture, leur réutilisation et l'établissement de propriétés. Le Langage Tom est parfaitement adapté à la réalisation d'outils de transformation et de prouveurs. Son intégration dans Java rend son utilisation facile, aussi bien dans le milieu académique que dans le milieu industriel.  +
Si une fonction φ promet de manipuler une valeur de type α sans l'observer, on peut utiliser son code sans risque pour toutes les affectations possibles de α : que la valeur soit entière (α = int) ou qu'elle soit un arbre (α = tree), la fonction se comportera toujours de façon identique. Cette propriété s'appelle le polymorphisme paramétrique, l'essence de la généricité. Promettre de ne pas observer de trop près son argument est un fardeau parfois insupportable pour une fonction, pour des raisons algorithmiques (comment prendre une décision sans savoir ce que vaut mon argument ?), ou encore pour des raisons de performances de bas-niveau (si je sais que α = int, je peux utiliser une primitive dédiée de mon processeur). Même si le type d'une valeur est caché derrière un type plus abstrait α, on peut fournir des mécanismes pour « le redécouvrir » grâce à des tests dynamiques ou à des raisonnements purement statiques. La propriété qui permet de diriger son calcul par la forme des types est appelée le polymorphisme intentionnel. Dans cet exposé, nous présenterons plusieurs versions du polymorphisme intentionnel offertes par différents systèmes de types et de preuves sûrs (c'est-à-dire garantissant que les programmes ne peuvent pas planter et sont corrects vis-à-vis de leur spécification).  +
SmartEiffel, également connu sous le nom de GNU Eiffel, est à la fois un langage et un ensemble d'outils de compilations, de documentation et de validation. Le langage SmartEiffel vise à favoriser la mise en pratique des principales exigences liées au développement d'un gros logiciel par une grande équipe. En plus d'exigences en terme de qualité, de sécurité et de documentation, la définition de SmartEiffel est également soucieuse de l'efficacité du programme à l'exécution. Ainsi, le modèle des objets qui est à la base du langage intègre également les types les plus élémentaires sans surcoût potentiel à l'exécution. Pour sa part, le mécanisme de programmation par contrats qui est essentiel en matière de documentation est également un bon moyen de rechercher les meilleures performances à l'exécution. Durant cet exposé, la visite guidée du langage présentera le modèle d'objets, la programmation par contrats, la double forme d'héritage multiple ainsi que le mécanisme des agents.  +, Lisaac est un petit langage basé sur la technologie objet à base de prototype. Plus flexible que l'objet à base de classe, elle permet un dynamisme et un degré d'expressivité encore inégalés. Lisaac est inspiré du langage Self pour les concepts d'objets à prototypes et du langage Eiffel, pour les aspects d'ingénierie logicielle et notamment pour la programmation par contrat. Enfin, l'objectif étant de réaliser de la programmation de bas niveau à l'aide d'un langage de haut niveau, un ensemble de concepts utiles à la programmation système a été ajouté. Le langage Lisaac utilise un nombre particulièrement restreint d'idiomes orthogonaux rendant difficile l'élaboration d'un compilateur efficace. Son compilateur en fait aujourd'hui l'unique langage à prototype compilé. Les performances atteintes sont proche des compilateurs C, voire même au-delà... Pour étayer, approfondir et illustrer nos propos, nous ferons un rapide tour d'horizon du développement du système d'exploitation IsaacOS entièrement écrit en Lisaac. Durant cet exposé, nous aborderons les thèmes suivants: concept à prototype versus concept à classe; héritage multiple et dynamique et autres particuliarité du Lisaac; technique de compilation et résultat de performance; validation des concepts avec une brève présentation du système d'exploitation IsaacOS.  +
La Low-Level Virtual Machine (LLVM) est un ensemble de bibliothèques et d'outils qui facilitent le développement et l'optimisation de compilateurs, de générateurs de code et de machines virtuelles. Clang et VMKit utilisent LLVM pour leur générateur de code à différents niveaux: l'un pour la compilation statique de langages de la famille C (C/C++/ObjectiveC), et l'autre pour la compilation dynamique d'applications Java ou .Net. Dans cet exposé, je présenterai ces trois projets, et rentrerai dans les détails de VMKit, que j'ai développée dans le cadre de ma thèse. Je finirai par montrer les exemples de recherche auxquels nous nous adressons avec l'aide de VMKit, au sein de l'équipe de recherche INRIA/Regal.  +, Avec l'avènement du Web et des applications réparties, les machines virtuelles applicatives sont devenues le support d'exécution de choix pour la plupart des applications. Développer et optimiser une machine virtuelle est un travail long et difficile qui requiert plusieurs années. Il s'avère que la plupart des machines virtuelles possèdent des composants communs: compilateur à la volée, ramasse-miettes, vérifieur de type, gestionnaire de threads, gestionnaire d'entrées/sorties, éditeur de liens paresseux, chargeur dynamique de code. AutoVM est une machine virtuelle générique qui factorise ces composants communs et facilite le développement de nouvelles machines virtuelles, ou l'amélioration de machines virtuelles existantes. Dans cet exposé, je présenterai l'architecture logicielle de notre prototype AutoVM et montrerai sa généricité et son extensibilité.  +
Nous décrirons brièvement l'état de l'art de l'utilisation des processeurs graphiques grand public (GPU) pour accélérer le traitement d'image, et nous en discuterons les limites. Puis, nous décrirons GpuCV, une bibliothèque logicielle libre et multi-plateforme pour accélérer par GPU les opérateurs de traitement d'image et de vision artificielle. GpuCV a été conçue pour être compatible avec la bibliothèque OpenCV et permettre d'intégrer facilement des opérateurs accélérés sur GPU dans des applications développées sur CPU. L'environnement GpuCV gère de façon transparente les caractéristiques du matériel, la synchronisation des données, l'activation à bas niveau des procédures GLSL ou CUDA, l'étalonnage et l'aiguillage vers la mise en oeuvre la plus performante et finalement offre un ensemble d'opérateurs de traiement accélérés par GPU.  +
Malgré la grande variété des types de données que l'on rencontre dans le domaine du traitement d'images (1D,2D,3D, scalaires, couleurs, multi-spectrales, séquences, etc...), nous sommes souvent amenés à appliquer des algorithmes très classiques, ou des variations de ces algorithmes, pour le pré-traitement, l'analyse ou la visualisation de ces données images. Par conséquent, les logiciels et les bibliothèques que nous utilisons dans notre recherche quotidienne, devraient également être génériques, afin de s'adapter le mieux possible aux données à traiter. Dans ce séminaire, je présenterai quelques outils développés dans cette optique (au laboratoire GREYC, équipe IMAGE), qui possèdent différents niveaux d'utilisations. Je commencerai tout d'abord par présenter CImg, une bibliothèque C++ "template" (donc générique par nature), qui a pour but de faciliter l'implémentation d'algorithmes de traitements d'images personnalisés. Puis, j'introduirais G'MIC, un langage de script reprenant la plupart des éléments de CImg, qui est dédié au traitement et à l'analyse d'images "de tous les jours". J'essaierai de montrer comment ces différents outils indépendants sont organisés et comment ils cherchent à aider le chercheur ou le programmeur en traitement d'images, autant d'un point de vue programmation pure que d'un point de vue plus haut niveau.  +
Le processeur CELL BE développé par le consortium IBM, Sony et Toshiba a eu un impact important dans le monde du calcul scientifique mais aussi dans le monde du jeu. Il est le processeur de base de la première machine à avoir atteint 1 Pflops et aussi celui de la Play Station 3 de Sony. Pour arriver à ce niveau de performance, il intègre 9 coeurs hétérogènes interconnectés par un bus. Le coeur principal (PPE) appartient à la famille des PowerPC. Les 8 autres coeurs (SPE) sont spécialisés pour le calcul. Après une présentation détaillée de l'architecture du processeur, nous développerons son mode de la programmation : lancement de threads de calcul sur les SPE, échange de données, programmation SIMD.  +, La méthode multipôle rapide (Fast Multipole Method, FMM) permet de résoudre en temps linéaire le problème à N-corps, en astrophysique ou en dynamique moléculaire par exemple. Nous présentons ici l'implémentation sur le processeur Cell du calcul du champ proche de la FMM, ce qui constitue un premier pas vers une implémentation complète de la FMM sur ce processeur. Nous détaillerons les problèmes rencontrés, au niveau de l'architecture comme au niveau de l'algorithmique, ainsi que les diverses optimisations mises en place. Notre implémentation permet de calculer jusqu'à 8,5 milliards d'interactions par seconde (115,8 Gflop/s) sur un processeur Cell, et jusqu'à 17 milliards d'interactions par seconde sur un IBM QS20 (230,4 Gflop/s), pour des distributions uniformes ou non uniformes de particules.  +
Dans cet exposé, nous présenterons Yayi, une bibliothèque générique de traitement morphologique d'image. Cette base logicielle, écrite en C++ et interfacée avec Python, fournit un nombre croissant de fonctions en traitement d'image et en morphologie mathématique (distance, segmentation, etc.). Nous discuterons de la mise en oeuvre générale, des concepts génériques utilisés dans la bibliothèque, et de leurs utilisations dans l'élaboration de nouveaux algorithmes. Enfin, nous présenterons quelques pistes actuellement en développement dans Yayi pour adresser certains des problèmes levés par la programmation générique.  +
Ce séminaire porte sur certains de mes travaux en matière de généricité et réutilisation en traitement d'images. Ces travaux sont présentés à une échelle algorithmique, bas-niveau, et à une échelle logicielle, plutôt haut-niveau. À l'échelle de l'algorithme, nous présentons une technique permettant d'étendre la généricité des algorithmes de traitement d'images par rapport à la région d'intérêt traitée, en complément de la généricité par rapport aux données (1D, 2D, 3D, scalaires, couleurs, multi-spectrales, séquences, etc.) Cette méthode repose sur une adaptation du patron de conception « Iterator » et sur le polymorphisme de compilation en C++. Au niveau logiciel, l'objectif de la généricité et de réutilisation est de faciliter le couplage des algorithmes « purs » avec des fonctionnalités supplémentaires telles que la visualisation, l'interface homme-machine, les entrées-sorties... Dans ce cas, je présente les principes d'une architecture flexible et évolutive implémentée en C++, combinant la notion de (programmation par) rôle et la notion de (programmation par) composants réutilisables. Ces travaux sont illustrés par des applications dans le domaine médical.  +, L'une des caractéristiques de la programmation objet est l'intégration (introduite par Eiffel dans un article de la première conférence OOPSLA en 1986) entre les mécanismes d'héritage, permettant de structurer clairement la description des systèmes, et de généricité, permettant le paramétrage de ces descriptions. La combinaison de ces deux techniques d'architecture est la clé de l'extensibilité et de la réutilisabilité permises par la technologie objets. L'exposé montrera l'interaction entre la généricité et l'héritage en Eiffel et l'application de ces concepts aux tâches d'analyse, de conception et d'implémentation en génie logiciel. De nombreux exemples illustreront l'application de ces idées, et compareront avec les solutions adoptées dans des langages tels que Java et C\#.  +
La plupart des frameworks de traitement d'images ne sont pas assez génériques pour garantir une réutilisabilité effective des structures de données et des algorithmes, tout en préservant performances et facilité d'utilisation, et en restant proche de la théorie. Dans cette présentation, nous proposons un cadre logiciel pour le traitement d'images centré sur le paradigme de programmation générique, cherchant à répondre tant aux besoins pratiques que théoriques des scientifiques et des développeurs : la mise au point de méthodes rapides et réutilisables, un niveau de généricité progressif, la possibilité de traiter des ensembles de données volumineux, une gestion de la mémoire automatique et efficace, la vérification statique des types, l'orthogonalité des structures de données et des algorithmes, etc. Cette approche permet aux utilisateurs de concevoir et d'implémenter de nouvelles méthodes délivrées des contraintes habituellement imposées pas les outils logiciels, de pratiquer des expériences inter-domaines, de généraliser certains résultats et de transformer facilement des prototypes en de vraies applications.  +, Les Diagrammes de Décision (DDs) forment une vaste famille de structures de données, qui permettent de représenter et manipuler très efficacement de grandes quantités d'informations. Cependant, parmi les nombreux types de DDs, l'utilisateur est souvent désemparé pour choisir le bon. Souvent, aucun type ne répondant exactement à ce qu'il cherche, l'utilisateur doit faire adapter ses données au type de DDs choisi. Le problème est que chaque type de DDs possède sa propre définition. Il n'existe aucun socle commun qui permette de définir n'importe quel type de DD. Ce problème se reflète au niveau des opérations manipulant les DDs. Celles-ci sont aussi spécifiques à chaque type. Cet exposé présente les Polymorphic Decision Diagrams, un cadre assez général permettant de spécifier de nombreux types de DDs existants. L'utilisateur peut ainsi décrire simplement les DDs correspondant le mieux aux données qu'il souhaite représenter. Ce cadre permet de plus d'ajouter dans la spécification les informations qui permettront de retrouver les performances des types définis jusqu'à présent. Un exemple concret impliquant des loutres permettra de montrer les possibilités offertes par ce cadre.  +
Le traitement d'images est par nature un procédé discret, au cours duquel un signal continu est décomposé en un ensemble de pixels, ou de voxels pour des images tri-dimensionnelles. Au niveau géométrique, cette nature discrète pose peu de problèmes, car la plupart des opérations géométriques sont indépendantes de la grille sous-jacente ; au niveau topologique, le problème est tout autre. Deux des notions fondamentales de la topologie, le voisinage et la connexité, sont radicalement différentes entre un espace continu et un espace discret : il est entre autres impossible de subdiviser un voisinage discret de façon infinie comme c'est le cas dans un espace euclidien. Bien que certaines bibliothèques de traitement d'images contiennent des algorithmes topologiques, notamment de squelettisation, le type de voisinage utilisé par ces algorithmes est généralement fixé par le code, ce qui empêche une adaptation facile à un autre type de connexité ou à un espace de dimension différente. Ce séminaire présente une méthode générique pour intégrer les notions discrètes de voisinage et de connexité à une bibliothèque de traitement d'images programmée en C++. Je montrerai également comment obtenir de façon simple un algorithme de squelettisation homotopique en utilisant ces notions.  +, Le projet BrainVISA (http://brainvisa.info) est en train de développer, avec le soutien du projet européen HiPiP (http://hipip.eu), une architecture générique pour la parallélisation des applications. Cette architecture fournira un accès à divers moyens de calculs (fermes de stations de travail, clusters, centres de calculs, etc.) en s'appuyant sur des solutions existantes pour la gestion des ressources (Sun Grid Engine, Condor, LSF, etc.) Cette architecture est développée pour répondre aux besoins croissants de moyens de calcul dans le monde de la recherche en neuroimagerie. Au cours de ce séminaire, j'aborderai rapidement le contexte de la recherche en neuroimagerie en me focalisant sur les besoins en parallélisation d'applications. Ensuite, je détaillerai la solution que nous avons choisie pour répondre à ces besoins.  +