Le partitionnement logiciel/matériel consiste à diviser les fonctions d'un système informatique entre celles qui seront exécutées par un logiciel classique et celles qui seront réalisées par un matériel spécifique. On parle de co-design, la conception est double, une conception logicielle et une conception matérielle.

Un système informatique est généralement constitué d'un logiciel destiné à la réalisation de différentes tâches. Ce logiciel est exécuté par un matériel généraliste, c'est-à-dire conçu indépendamment de la fonction réalisée. Dans certains cas, par exemple lorsque le système informatique est un téléphone portable, un décodeur numérique ou encore dans une carte à puce, les rôles respectifs du logiciel et du matériel peuvent être redéfinis. Il s'agit alors le plus souvent d'améliorer les performances et la rapidité d'exécution des tâches, en tirant parti de matériels spéciaux.

Dans une démarche de définition du partitionnement logiciel/matériel, l'objectif est de réfléchir aux différentes actions que peut réaliser le matériel afin d'alléger le logiciel tout en tenant compte des contraintes de coût, des bénéfices sur le plan des performances et des limites intrinsèques à toute implémentation matérielle d'un traitement automatique.

Plusieurs méthodologies permettent de raisonner sur le partitionnement logiciel/matériel le plus approprié pour un système informatique.

Parmi elles, certaines reposent sur une analyse du langage source dans lequel une première version, entièrement logicielle, du système informatique a été créée. Le fruit de cette analyse consiste en la synthèse d'un matériel spécial exploitant tout ou partie du système informatique. Ainsi, idéalement, la redéfinition du partitionnement logiciel/matériel est automatique. Certains algorithmes sont alors utilisés pour rechercher un partitionnement optimal.

D'autres familles de méthodologies se proposent de prendre en compte ce partitionnement au plus tôt dans la définition du système informatique, au moment de la conception et de la spécification de celui-ci. Il s'agit d'approches qui raisonnent directement sur les modèles d'applications notamment au niveau des diagrammes uml.

Cibles

Si on parcourt les différents travaux de recherche qui ont déjà été réalisés sur le partitionnement logiciel/matériel, on remarque qu'il traite surtout des systèmes embarqués et aussi des systèmes embarqués en temps réel. Un système embarqué est un système électronique spécifique comme un téléphone mobile ou un lecteur mp3, conçu pour effectuer des tâches spécifiques avec des ressources limitées et des contraintes variées (consommation d'énergie, espace mémoire restreint...)Pele,2009, page 19

Le partitionnement d'un système entre le matériel et le logiciel a une importance critique car il est le premier impact sur le coût et la performance du système applicatif finalYouness,2009, page 71. Le fait de diviser les processus applicatifs entre le matériel et le logiciel surmonte les traditionnels problèmes de temps et de consommation (Cela permet de gagner du temps lors de l'exécution d'un programme et d'économiser les ressources utilisées par un logiciel en effectuant une partie du travail au niveau matériel)Liu,2009, page 4.

Les méthodologies de partitionnement font appel à des systèmes possédant une architecture reconfigurable, CAD, une architecture avec du matériel pouvant être configuré pour qu'il soit plus adapté aux tâches qu'on souhaite lui confier. Dans cette optique, les systèmes les plus utilisés sont ceux qui placent la logique reconfigurable à l'intérieur du cœur de processeurs ou l'inverse, comme les systèmes CSoC (Configurable System on Chip), RSoC (Reconfigurable System on Chip), SoPC (System on Programmable Chip) et SoRC (System on Reconfigurable Chip). Contrairement aux architectures ayant une unité reconfigurable qui est connectée à un processeur hôte, ces systèmes permettent de faire face aux problèmes de performances qui restent souvent limitées par les délais de communication et de reconfigurationBen Chehida, 2004, page 23.

Le partitionnement logiciel/matériel ouvre de nouvelles perspectives pour le développement de produits qui consomment peu d'énergie mais qui sont très rapides comme les applications embarquées (lecture de la puce de carte bancaire avec chiffrement et déchiffrement des informations), la communication, le multimédia (encodage de vidéos, traitement de photos) et les systèmes de transports intelligentsJigang,2010, page 261.

Expression haut niveau La reconfigurabilité

Un algorithme peut être implémenté en matériel (utilisant un Application-specific integrated circuit (ASIC)) ou en logiciel en utilisant un micro-processeur. Un ASIC est très rapide et efficace mais il n'est pas destiné à un usage général. Une fois, un ASIC optimisé pour un travail donné, il ne peut plus être reconfiguré. Une solution plus flexible est d'implémenter l'algorithme comme un ensemble d'instructions qui peut être exécuté par un micro-processeur. Sans altérer le matériel, le micro-processeur peut être reprogrammé en changeant l'ensemble d'instructions. Cependant le micro -processeurs doit lire et décoder chaque instruction ce qui induit une surcharge significative. Le matériel reconfigurable combine la flexibilité des micro-processeurs avec la vitesse des ASICs. Le matériel reconfigurable le plus utilisé est FPGA dont la propriété la plus importante est qu'un tel matériel peut être utilisé pour créer des circuits spécifique à l'application qui peuvent accroitre les performances des CPU habituels. De plus cela permet de gagner en vitesse d'exécution. Le matériel reconfigurable est utilisé comme base pour construire des ordinateurs reconfigurables. Les ordinateurs reconfigurables font référence à la possibilité de reconfiguré à la demande un matériel qui avait été auparavant configuré pour une tâche spécifique. Avec ce concept vient l'idée d'augmenter le but général d'un processeur avec des matériaux reconfigurables. De cette manière, des parties logiciels peuvent être accélérées en matérielBaranga,2009, page 252. Finalement, il est possible de distinguer deux types de reconfigurabilité : La reconfigurabilité statique (ou compile-time reconfiguration, noté CTR) : selon ce mode de reconfiguration, chaque application consiste en une configuration (ou un contexte) unique. Pour reconfigurer un tel système, on doit l’interrompre pour procéder à la reconfiguration et le redémarrer avec la nouvelle configuration ; La reconfigurabilité dynamique (ou run-time reconfiguration, notée RTR) : Il y a deux modes de reconfiguration dynamique selon la manière de construire des contextes ; La reconfiguration dynamique totale (ou global RTR) : chaque application est divisée en un ensemble de configurations temporelles distinctes dont chacune occupe la totalité des ressources matérielles du composant. On distingue deux types de composants reconfigurables dynamiquement et totalement selon la structure de leurs mémoires de configuration : Les unités reconfigurables à contexte unique. Elles possèdent un plan de configuration unique (plan de mémoire Static Random Access Memory (SRAM) contenant les données de configuration). Tout changement de contexte implique la reconfiguration totale du composant qui nécessite un temps de l’ordre de quelques millisecondes dans de nombreuses architectures de ce type. Ceci limite l’utilisation de ce genre de composants à des applications où la fréquence de changements au niveau matériel est relativement faible : de l’ordre de quelques heures, jours ou semaines ; Les unités reconfigurables multi-contextes : elles possèdent plusieurs plans de configuration. Un plan de configuration unique peut être actif à un certain moment sur le reconfigurable mais le passage à un autre plan peut être très rapide (de l’ordre de quelques nanosecondes). Dans le même sens, il y a aussi des architectures qui ont opté pour l’utilisation de la notion de cache de reconfiguration. Elle consiste à stocker un nombre de configurations dans des buffers (généralement en mémoire locale du composant) et de changer de contexte pendant l’exécution en un temps comparativement très faible par rapport à un chargement de contexte à partir d’une mémoire externe; La reconfiguration dynamique partielle (ou local RTR) : dans ce mode reconfiguration, on reconfigure sélectivement une zone du composant, ce qui réduit considérablement le temps de reconfiguration. On distingue deux principaux types de reconfiguration dynamique partielle : Les unités reconfigurables partiellement : Ces composants permettent de reconfigurer sélectivement une zone du composant alors que le reste du système reste inactif tout en conservant ses informations de configuration. Le temps de reconfiguration dans ce cas dépend de la surface en ce qui concerne les éléments logiques du contexte à reconfigurer ; Les unités à reconfiguration partielle à chaud ou active : permet de reconfigurer sélectivement une zone de l’architecture pendant que le reste du composant poursuit son fonctionnement. Elle est basée sur le concept de ’matériel virtuel’ qui est similaire à l’idée de mémoire virtuelle. Plusieurs contextes peuvent être actifs à la fois sur le composant selon le nombre de zones actives. Le temps de reconfiguration d’un contexte sur une zone de ce composant est masqué par l’exécution d’un autre contexte sur une autre zoneBen Chehida, 2004, page 26-27.

La reconfiguration en général offre d’énormes opportunités, sur le plan des performances, du fait qu’elle permet d’adapter plus étroitement le composant matériel à la nature du traitement, et sur le plan de l'adaptabilité (flexibilité) du fait qu’elle permet de réagir à des stimuli venant : de l’environnement (une Qualité de service (QoS) donnée par l’utilisateur utilisant la reconfiguration partielle) ; du système lui-même (des résultats intermédiaires de calcul, des valeurs de capteurs...) en changeant de mode (mode basse consommation, mode dégradé, mode haute résolution...).

Le couplage

Dans le cadre du partitionnement logiciel/matériel, l’architecture peut contenir plusieurs cœurs basés sur différents modèles de traitement et qui participent à l’exécution de l'application. Les parties critiques d’une application sont identifiées puis affectées à un cœur de traitement spécial ou reconfigurable, afin d’en accélérer le traitement.

En tirant parti des propriétés respectives des systèmes programmables et des systèmes reconfigurables il est possible d’améliorer l’adéquation du système global avec l’application développée. C'est l'un des principes de l'approche "plateforme" qui privilégie la généricité et la flexibilité. Dans une approche mixte, le partitionnement de l’application influence le niveau de couplage entre le processeur et le coprocesseur.

La finesse du partitionnement fixe le degré de communication nécessaire entre chaque partieGhaffari, 2006, page 31.

Il existe trois modes de couplage d’une ressource reconfigurable avec un processeur. Le premier mode consiste à coupler la partie reconfigurable avec le processeur comme un périphérique. Les échanges s’effectuent par l’intermédiaire du bus d’entrées/sorties à l’aide, par exemple, d’accès DMA (Direct Memory Access). Le temps de latence est élevé, mais la bande passante disponible assure une alimentation efficace de la ressource reconfigurable. Les traitements peuvent s’effectuer en recouvrement avec ceux du processeur.

Il est possible aussi de coupler directement le processeur et l’accélérateur matériel reconfigurable via un bus local, c’est le second mode. Après reconfiguration, le reconfigurable manipule les données stockées dans la mémoire du processeur, sans intervention du processeur.

Le troisième mode de couplage est direct : le processeur et l’accélérateur sont intégrés sur la même puce de silicium. La ressource reconfigurable est placée dans les chemins de données internes du processeur ce qui minimise le temps de latence.