27/08/2024 – Paradigme Entité-Composant-Système

Issu du monde des jeux vidéos, ce paradigme est malgré tout intéressant dans de nombreux domaines et peut rendre bien des services dans l’industrie.

C’est quoi au juste ?

Comme vous le savez les jeux vidéos modernes – et mêmes certains plus anciens – comportent de nombreuses animations simultanées, qui même avec les cartes graphiques et GPU actuels largement optimisés consomment énormément de ressources CPU et peuvent parfois induire des latences qui frustrent le joueur. L’idée de base derrière le paradigme ECS c’est d’utiliser au mieux le cache processeur en ne manipulant que des tableaux d’entiers.

Pour faire l’analogie avec la programmation orientée objet, les entités sont des classes, les composants représenteraient les propriétés des classes et les systèmes sont des ensembles des fonctionnalités métiers qui régissent le tout.

An Entity Component System is a programming paradigm that take composition-over-inheritance to the extreme.

(Erik van Bilsen, développeur)

Contrairement à la programmation objet où une classe est définie par ce qu’elle est et par ce qu’elle hérite, l’entité est définie uniquement par les composants qu’elle possède. Les composants et l’entité ne sont, de plus, que des entiers. L’entier est par nature facilement manipulable par un micro-processeur, beaucoup plus que des valeurs flottantes par exemple et n’exige qu’une très faible charge de travail pour ce dernier.

Comment ça marche ?

Les processeurs actuels disposent d’un cache mémoire (en fait même plusieurs, de 2 à 3 selon le type de processeur), le but de ce cache est de stocker les valeurs, les objets, les codes, fréquemment accédés afin de moins solliciter d’échanges avec la mémoire et ainsi d’optimiser la performance. L’idée derrière la programmation ECS est d’optimiser encore l’utilisation du cache par le processeur. En effet les caches processeurs actuels dispose de plusieurs méga-octets de cache, l’on peut donc y stocker plusieurs milliers d’entiers sans problème.

Il est alors facile de comprendre qu’en stockant nos entités et nos composants dans des tableaux d’entier contigus, l’ensemble pourra facilement être chargé en totalité dans le cache processeur. La suite est logique, les systèmes peuvent accéder à des milliers d’entités et de composants sans que le cache du processeur n’ai jamais besoin d’être rechargé et cela va bien sur nous permettre de sauvegarder du temps processeurs pour d’autres traitements.

Son utilité ?

Ce paradigme est utile dès qu’il s’agit de manipuler de nombreux objets simultanément, par exemple dans le monde industriel, un ensemble important de capteurs et d’actionneurs sur une ou plusieurs machines devant fonctionner de façon très rapide sans latence.

Aller plus loin

Si cela vous intéresse, et si vous souhaitez vous lancer, vous pouvez regarder les explications et la démonstration d’Erik van Bilsen.

Comments

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *