|
En programmation parallèle, le partitionnement dynamique fait référence à une méthode de division d'une charge de travail entre plusieurs processeurs ou threads *pendant* l'exécution d'un programme, par opposition au partitionnement statique où la division est effectuée au préalable. La taille et l'affectation des partitions ne sont pas fixes au départ mais s'ajustent en fonction des conditions d'exécution et des ressources disponibles.
Voici un aperçu des principales caractéristiques :
* Affectation d'exécution : Les tâches ou les données sont attribuées aux processeurs au fur et à mesure qu'elles deviennent disponibles ou lorsque le besoin s'en fait sentir. Cela contraste avec le partitionnement statique où chaque processeur connaît dès le départ la partie qui lui est attribuée.
* Équilibrage de charge : L'un des principaux objectifs du partitionnement dynamique est d'obtenir un meilleur équilibrage de charge. Si certains processeurs terminent leurs tâches initiales plus rapidement que d'autres, le partitionnement dynamique leur permet de récupérer de nouveaux travaux à partir d'un pool partagé de tâches ou de données, évitant ainsi les temps d'inactivité et améliorant les performances globales.
* Adaptabilité : Le partitionnement dynamique s'adapte bien aux charges de travail imprévisibles. Si certaines parties du calcul prennent plus de temps de manière inattendue, le système peut automatiquement redistribuer la charge de travail pour atténuer les goulots d'étranglement.
* Frais généraux : La flexibilité du partitionnement dynamique se fait au détriment des frais généraux. La gestion du pool de tâches, l'attribution des tâches et la gestion de la synchronisation entre les processeurs nécessitent des calculs et des communications supplémentaires. Ces frais généraux doivent être soigneusement gérés pour garantir que les avantages de l’équilibrage de charge dépassent le coût.
* Mise en œuvre : Le partitionnement dynamique est souvent implémenté à l'aide de techniques telles que :
* Vol de travail : Les processeurs inactifs « volent » les tâches des processeurs occupés.
* Files d'attente de tâches : Une ou plusieurs files d'attente centrales contiennent des tâches en attente de traitement. Les processeurs récupèrent les tâches de ces files d'attente.
* Auto-planification : Les tâches sont attribuées aux processeurs sur la base d'une heuristique simple, souvent sans coordination centrale.
Exemple :
Imaginez traiter une grande image. Dans le partitionnement statique, vous pouvez diviser l'image en blocs de taille égale et attribuer chaque bloc à un processeur différent. Cependant, si une partie de l'image est nettement plus complexe à traiter que d'autres, certains processeurs peuvent terminer beaucoup plus tôt que d'autres, entraînant un temps d'inactivité. Le partitionnement dynamique permettrait aux processeurs les plus rapides de prendre en charge les tâches de traitement des parties des processeurs les plus lents, améliorant ainsi l'efficacité globale.
Quand utiliser le partitionnement dynamique :
Le partitionnement dynamique est avantageux lorsque :
* La charge de travail est imprévisible ou inégalement répartie.
* La taille des tâches varie considérablement.
* Le nombre de processeurs ou de threads n'est pas connu à l'avance.
* L'équilibrage de charge est crucial pour les performances.
Quand éviter le partitionnement dynamique :
* Les frais généraux liés à la gestion de l'affectation dynamique dépassent les avantages de l'équilibrage de charge (par exemple, pour les très petites tâches).
* La charge de travail est hautement prévisible et uniformément répartie, ce qui rend le partitionnement statique suffisant.
* Le coût de la communication entre processeurs est élevé.
Essentiellement, le partitionnement dynamique offre une plus grande flexibilité et adaptabilité que le partitionnement statique, mais nécessite un examen attentif de la surcharge impliquée. Le meilleur choix dépend fortement de l’application spécifique et de ses caractéristiques.
|