Procédé et dispositif de codage ou décodage d'image avec parallélisation du traitement sur une pluralité de processeurs, programme d'ordinateur et signal de synchronisation correspondants.
Le domaine de l'invention est celui du codage/décodage d'images numériques. Typiquement, une image numérique comprend des macro-blocs répartis en lignes et en colonnes. Chaque ligne (ou rangée horizontale) de l'image comprend par exemple des macro-blocs de 16x16 pixels. Classiquement, un macro-bloc est organisé en quatre blocs de luminance et en deux, quatre ou huit blocs de chrominance selon le type d'échantillonnage. Traditionnellement, le codage ou décodage d'une image consiste à traiter l'ensemble de ses macro-blocs, séquentiellement ligne par ligne, de gauche à droite sur une même ligne, et de haut en bas d'une ligne à l'autre.
L'invention s'applique notamment, mais non exclusivement, au codage ou décodage d'une séquence vidéo formée d'images successives. Dans ce cas, la technique de codage ou décodage est mise en œuvre dans un algorithme de compression ou décompression vidéo. Elle est alors conforme à une norme de compression/décompression telle que (cette liste n'est pas exhaustive) : la norme H.263, définie dans le document de normalisation « ITU-T H.263 » ; - la norme H.263+, définie dans le document de normalisation « ITU-T
H.263+ » ; la norme H.264 (aussi appelé H.26L ou MPEG-4 AVC) : définie dans le document de normalisation « ISO MPEG-4 Part 10 » ; la norme MPEG-4 Video : définie dans le document de normalisation « ISO MPEG-4 Part 2 ».
Il est clair cependant que l'invention s'applique également au codage ou décodage d'une image fixe.
D'une façon générale, la présente invention peut s'appliquer dans tous les cas où il existe un contexte de dépendance spatiale pour le traitement des macro-blocs d'une image. En d'autres termes, on suppose que pour traiter chaque macro-bloc de l'image,
on doit connaître le résultat du traitement préalable d'autres macro-blocs de la même image.
Un tel contexte de dépendance spatiale existe notamment, mais non exclusivement, dans les procédés de codage ou décodage conformes aux normes de compression/décompression précités et basés sur une estimation de mouvement. La figure 1 illustre le contexte de dépendance spatiale tel que défini dans ces normes. Pour traiter un macro-bloc donné MB, on doit connaître le résultat du traitement du macrobloc de gauche (MBG), de celui du dessus (MBH) et de celui du dessus à droite (MBD).
Il apparaît que le traitement de l'ensemble des macro-blocs d'une image par un unique processeur n'est pas optimale en temps de calcul.
On connaît par ailleurs la technique de parallélisation (ou « multithreading » en anglais) qui consiste à répartir de façon optimale (c'est-à-dire paralléliser) les charges de calcul d'un traitement sur une pluralité de processeurs disponibles.
Cette technique connue est utilisée dans le domaine de la compression vidéo, soit selon une approche globale, soit selon une approche fine.
L'approche globale consiste à répartir des macro-tâches sur chacun des processeurs. Par exemple, on suppose que le codage d'une image nécessite l'exécution de trois tâches A, B et C qui doivent impérativement être ordonnées comme suit : A puis B puis C. On peut alors imaginer que pour répartir au mieux les tâches A, B et C sur deux processeurs, on crée deux unités d'exécution (ou « thread » en anglais) Tl et T2,
Tl gérant uniquement les tâches A et B, T2 gérant uniquement la tâche C. Cette parallélisation ne peut donc être faite que si Tl peut travailler sur l'image N alors que T2 travaille sur l'image N-l, N étant le numéro de l'image d'une séquence vidéo. On voit que cette répartition n'est optimale que si la charge utilisée par les tâches A et B est sensiblement équivalente à celle utilisée par la tâche C (iso-répartition des charges entre processeurs).
Un inconvénient de la technique de parallélisation selon l'approche globale est que l'iso-répartition des charges entre processeurs n'est quasiment jamais vérifiée dans la pratique. En d'autres termes, il est très difficile, voire impossible dans certains cas, de trouver un équilibre parfait en séparant des tâches entières les unes des autres.
Un autre inconvénient de la technique de parallélisation selon l'approche globale est qu'elle nécessite une implémentation particulière du programme appelant, avec mise en œuvre d'un mécanisme d'empilage.
Encore un autre inconvénient de la technique de parallélisation selon l'approche globale est qu'elle n'est pas applicable dans le cas d'un contexte de dépendance spatiale tel que discuté ci-dessus.
L'approche fine consiste à séparer chaque tâche en autant de tâches élémentaires qui peuvent être exécutées en parallèle par plusieurs processeurs, lorsque cela est possible. Par exemple, dans le domaine de la compression vidéo ou de la compression d'image (avec l'ordre de traitement séquentiel classique précité : ligne par ligne, de gauche à droite sur une même ligne, et de haut en bas d'une ligne à l'autre), on peut séparer l'image en N bandes horizontales et faire traiter chacune d'entre elles par l'un de N processeurs. Dans ce cas, il n'est pas nécessaire que les différentes unités d'exécution (« thread ») soient synchronisées entre elles. Elles doivent simplement informer une unité d'exécution principale lorsqu'elles ont terminé leur traitement. On obtient ainsi une répartition très équitable des charges entre processeurs.
Toutefois, un inconvénient majeur de la technique de parallélisation selon l'approche fine est qu'elle n'est pas applicable dans le cas d'un contexte de dépendance spatiale tel que discuté ci-dessus. En effet, dans ce contexte, chaque première ligne d'une bande horizontale donnée (bande inférieure) de l'image ne peut pas être traitée tant que la dernière ligne de la bande horizontale située au-dessus (bande supérieure) n'a pas été traitée. Les processeurs ne pourraient donc agir que successivement, et non pas simultanément, ce qui ôte tout intérêt à l'utilisation de cette technique dans ce contexte.
L'invention a notamment pour objectif de pallier ces différents inconvénients de l'état de la technique.
Plus précisément, l'un des objectifs de la présente invention est de fournir un procédé et un dispositif de codage ou décodage permettant d'optimiser les temps de calcul, tout en pouvant être mis en œuvre dans un contexte de dépendance spatiale tel que discuté ci-dessus.
L'invention a également pour objectif de fournir de tels procédé et dispositif dont l' implémentation est indépendante de toute architecture matérielle ainsi que logicielle.
Ces différents objectifs, ainsi que d'autres qui apparaîtront par la suite, sont atteints selon l'invention à l'aide d'un procédé de codage ou décodage d'une image comprenant des macro-blocs répartis en lignes et en colonnes, le traitement d'au moins un macro-bloc donné, dit macro-bloc dépendant, nécessitant le traitement préalable d'au moins un autre macro-bloc dont dépend ledit macro-bloc dépendant, le traitement des macro-blocs étant effectué séquentiellement ligne par ligne, ou colonne par colonne. Selon l'invention, le procédé comprend une étape de parallélisation du traitement des macro-blocs sur N processeurs, N > 2, comprenant les étapes suivantes : séparation de l'image :
* en N bandes verticales comprenant chacune une pluralité de lignes et au moins une colonne de macro-blocs, si le traitement des macro-blocs est effectué séquentiellement ligne par ligne ;
* en N bandes horizontales comprenant chacune une pluralité de colonnes et au moins une ligne de macro-blocs, si le traitement des macro-blocs est effectué séquentiellement colonne par colonne ; traitement par chaque processeur de l'une des N bandes ; - synchronisation des traitements effectués par les N processeurs.
Le principe général de l'invention consiste donc à effectuer une parallélisation selon l'approche fine, mais en séparant l'image en bandes perpendiculaires (et non pas parallèles) à la direction de traitement séquentiel des macro-blocs. Ceci permet d'obtenir une répartition optimale des charges entre processeurs. En d'autres termes, si le traitement des macro-blocs est effectué séquentiellement ligne par ligne (cas classique d'une direction de traitement séquentiel qui est horizontale, selon une ligne), on sépare l'image en bandes verticales. En revanche, si le traitement des macro-blocs est effectué séquentiellement colonne par colonne (cas non classique aujourd'hui mais possible dans le futur d'une direction de traitement séquentiel qui est verticale, selon une colonne), on sépare l'image en bandes horizontales.
La synchronisation des traitements effectués par les N processeurs permet la mise en œuvre du principe général précité dans un contexte de dépendance spatiale. En effet, cette synchronisation permet d'éviter qu'un processeur tente de traiter un macrobloc donné alors que d'autres macro-blocs dont dépend ce macro-bloc donné n'ont pas encore été traités.
Il est à noter que la présente invention peut être mise en œuvre avec un nombre quelconque de processeurs (par exemple deux, quatre, huit, ...).
Préférentiellement, la synchronisation des traitements effectués par les N processeurs consiste, pour chaque processeur de chaque paire de processeurs qui traitent deux bandes adjacentes, à : informer l'autre processeur de ladite paire de chaque fin de traitement d'un macro-bloc dont dépend un macro-bloc dépendant compris dans la bande traitée par ledit autre processeur ; vérifier, avant de traiter un macro-bloc dépendant, que ledit au moins un autre macro-bloc dont dépend le macro-bloc dépendant a préalablement été traité par ledit processeur ou ledit autre processeur.
Ainsi, les processeurs échangent des signaux de synchronisation (messages système) par l'intermédiaire desquels ils s'informent mutuellement des macro-blocs qu'ils ont traités. De façon avantageuse, ladite image appartient au groupe comprenant : des images de séquences vidéo formées d'images successives ; des images fixes.
Dans un mode de réalisation avantageux de l'invention, le traitement des macroblocs est effectué séquentiellement ligne par ligne, de gauche à droite sur une même ligne et de haut en bas d'une ligne à l'autre. Avantageusement, le traitement de chaque macro-bloc dépendant nécessite le traitement préalable, quand il existe, d'au moins le macro-bloc situé à gauche dudit macro-bloc dépendant. En outre, dans chaque paire de processeurs qui traitent deux bandes verticales adjacentes, le processeur qui traite la bande verticale de gauche informe l'autre processeur de chaque fin de traitement du macro-bloc de l'extrémité droite d'une des lignes de macro-blocs de ladite bande verticale de gauche.
Selon une caractéristique avantageuse, le traitement de chaque macro-bloc dépendant nécessite le traitement préalable, quand il existe, d'au moins le macro-bloc situé au-dessus et à droite dudit macro-bloc dépendant. En outre, dans chaque paire de processeurs qui traitent deux bandes verticales adjacentes, le processeur qui traite la bande verticale de droite informe l'autre processeur de chaque fin de traitement du macro-bloc de l'extrémité gauche d'une des lignes de macro-blocs de ladite bande verticale de droite.
Il est à noter que cette caractéristique (information sur la fin du traitement du macro-bloc de gauche (MBG) d'une ligne de la bande verticale de droite) peut être combinée à la précédente (information sur la fin du traitement du macro-bloc de droite
(MBD) d'une ligne de la bande verticale de gauche). L'invention offre alors une solution optimale au contexte classique de dépendance spatiale (voir discussion ci-dessus, en relation avec la figure 1). On notera que la fin du traitement du macro-bloc de dessus (MBH) ne nécessite aucune information de synchronisation puisqu'il est compris dans la même bande verticale que le macro-bloc (MB) qui dépend de lui (et des macro-blocs de gauche et de droite (MBG, MBD)).
De façon avantageuse, le codage ou décodage est conforme à une norme appartenant au groupe comprenant : H.263, H.263+, H264 et MPEG-4 Video. Cette liste n'est pas exhaustive. L'invention concerne également un programme d'ordinateur comprenant des instructions de code de programme pour l'exécution des étapes du procédé précité, lorsque ledit programme est exécuté sur un ordinateur.
L'invention concerne aussi un dispositif de codage ou décodage d'une image comprenant des macro-blocs répartis en lignes et en colonnes, le traitement d'au moins un macro-bloc donné, dit macro-bloc dépendant, nécessitant le traitement préalable d'au moins un autre macro-bloc dont dépend ledit macro-bloc dépendant, le traitement des macro-blocs étant effectué séquentiellement ligne par ligne, ou colonne par colonne, ledit dispositif comprenant N processeurs, N > 2, et des moyens de parallélisation du traitement des macro-blocs sur lesdits N processeurs, lesdits moyens de parallélisation du traitement comprenant : des moyens de séparation de l'image :
* en N bandes verticales comprenant chacune une pluralité de lignes et au moins une colonne de macro-blocs, si le traitement des macro-blocs est effectué séquentiellement ligne par ligne ;
* en N bandes horizontales comprenant chacune une pluralité de colonnes et au moins une ligne de macro-blocs, si le traitement des macro-blocs est effectué séquentiellement colonne par colonne ; dans chaque processeur, des moyens de traitement d'une des N bandes ; des moyens de synchronisation des traitements effectués par les N processeurs. L'invention concerne encore un signal de synchronisation transmis depuis un premier vers un second processeur d'une paire de processeurs qui traitent deux bandes adjacentes d'une image, ladite image comprenant des macro-blocs répartis en lignes et en colonnes et étant séparée : en N bandes verticales comprenant chacune une pluralité de lignes et au moins une colonne de macro-blocs, si le traitement des macro-blocs est effectué séquentiellement ligne par ligne ; en N bandes horizontales comprenant chacune une pluralité de colonnes et au moins une ligne de macro-blocs, si le traitement des macro-blocs est effectué séquentiellement colonne par colonne, le traitement d'au moins un macro-bloc donné, dit macro-bloc dépendant, nécessitant le traitement préalable d'au moins un autre macro-bloc dont dépend ledit macro-bloc dépendant, lesdits premier et second processeurs appartenant à un ensemble de N processeurs traitant chacun en parallèle une des bandes de l'image, en vue du codage ou décodage de l'image, ledit signal de synchronisation comprenant des informations par lesquelles ledit premier processeur indique au second processeur une fin de traitement par le premier processeur d'un macro-bloc dont dépend un macro-bloc dépendant compris dans la bande traitée par le second processeur, de façon que le second processeur puisse vérifier, avant de traiter ledit macro- bloc dépendant, que ledit au moins un autre macro-bloc dont dépend le macro-bloc dépendant a préalablement été traité par le premier processeur.
D'autres caractéristiques et avantages de l'invention apparaîtront à la lecture de la description suivante d'un mode de réalisation préférentiel de l'invention, donné à titre d'exemple indicatif et non limitatif, et des dessins annexés, dans lesquels : la figure 1 illustre le contexte classique de dépendance spatiale pour le traitement d'un macro-bloc d'une image ; la figure 2 présente un exemple d'image séparée en bandes verticales, permettant d'expliciter un mode de réalisation particulier du procédé selon l'invention. L'invention concerne donc un procédé de codage ou décodage d'une image comprenant une étape de parallélisation du traitement des macro-blocs sur N processeurs.
Dans la suite de la description, on suppose que, de façon classique, le traitement des macro-blocs est effectué séquentiellement ligne par ligne, de gauche à droite sur une même ligne et de haut en bas d'une ligne à l'autre. Il est clair cependant, comme déjà indiqué ci-dessus, que la présente invention peut également s'appliquer dans le cas (inhabituel aujourd'hui) où le traitement des macro-blocs est effectué séquentiellement colonne par colonne.
On suppose également que l'image à laquelle est appliquée le procédé selon l'invention est comprise dans une séquence vidéo et que le procédé selon l'invention est conforme à l'une des norme de compression/décompression suivantes : H.263, H.263+, H.264, MPEG-4 Vidéo, ... On suppose donc que le traitement des macro-blocs d'une image s'effectue dans le contexte de dépendance spatiale illustré sur la figure 1 et déjà discuté ci-dessus. Pour mémoire, le traitement d'un macro-bloc donné MB nécessite la connaissance du résultat du traitement du macro-bloc situé sur sa gauche (MBG), de celui situé au-dessus (MBH) et de celui situé au-dessus à droite (MBD). Le procédé selon l'invention, au vu des hypothèses précitées, consiste à : séparer l'image en N bandes verticales comprenant chacune une pluralité de lignes et au moins une colonne de macro-blocs ; confier le traitement de chacune de ces N bandes à un processeur distinct ; synchroniser les traitements effectués par les N processeurs, pour éviter qu'un processeur tente d'accéder (pour le besoin du traitement d'un macrobloc de la bande verticale qu'il traite) à un autre macro-bloc (d'une autre
bande verticale traitée par un autre processeur) qui n'aurait pas encore été traité. On présente maintenant en détail, en relation avec la figure 2, un mode de réalisation particulier du procédé selon l'invention. Comme illustré sur la figure 2, on considère à titre d'exemple une image 20 comprenant 6 lignes et 16 colonnes. Chaque ligne comprend donc 16 macro-blocs. Pour les seules trois premières lignes (dans un souci de simplification), on a inséré dans chaque case représentant un macro-bloc le numéro de ce macro-bloc. La première ligne comprend les macro-blocs MB0 à MB15, la seconde les macro-blocs MB16 à MB31, etc.
Dans cet exemple, l'image est séparée en quatre bandes verticales (N = 4) d'égale largeur (quatre macro-blocs) et appelées ci-après bandes Bl à B4 (les bandes étant numérotées de gauche à droite). On utilise donc quatre processeurs traitant chacun l'une de ces quatre bandes verticales. Ces quatre processeurs sont appelés ci-après processeurs PI à P4 (la numérotation des processeurs correspondant à la numérotation des bandes qu'ils traitent).
Le fonctionnement du procédé selon l'invention peut être résumé comme suit : le processeur PI démarre et traite (c'est-à-dire calcule les informations sur) les macro-blocs MB0, MB1, MB2 et MB3 ; - quand le macro-bloc MB3 a été traité, le processeur PI en informe le processeur P2 par un message de synchronisation, c'est-à-dire signale au processeur P2 que celui-ci peut démarrer et traiter le macro-bloc MB4. En effet, le macro-bloc MB 3 est le macro-bloc de gauche MBG par rapport au macro-bloc MB4 ; - parallèlement, les processeurs PI et P2 effectuent des traitements : le processeur PI traite les macro-blocs MB16, MB17 et MB18, et le processeur P2 traite les macro-blocs MB4, MB5, MB6 et MB7 ; quand le macro-bloc MB4 a été traité, le processeur P2 en informe le processeur PI, par un message de synchronisation ; - lorsque le processeur PI s'apprête à traiter le macro-bloc MB 19, il vérifie que le macro-bloc MB4 a été traité par le processeur P2. En effet, le macro-
bloc MB4 est le macro-bloc de dessus à droite MBD par rapport au macrobloc MB 19. Par ailleurs, le processeur PI a lui-même déjà traité le macrobloc de gauche MBG (ici MB 18) et le macro-bloc de dessus MBH (ici MB3) par rapport au macro-bloc MB4. Si le macro-bloc MB4 a été traité par le processeur P2, le processeur PI traite le macro-bloc MB 19 ; quand le macro-bloc MB 19 a été traité, le processeur PI en informe le processeur P2 par un message de synchronisation, c'est-à-dire signale au processeur P2 que celui-ci peut démarrer la deuxième ligne de la bande verticale B2 et traiter le macro-bloc MB 20. En effet, le macro-bloc MB 19 est le macro-bloc de gauche MBG par rapport au macro-bloc MB20. Par ailleurs, le processeur P2 a lui-même déjà traité le macro-bloc de dessus MBH (ici MB4) et le macro-bloc de dessus à droite MBD (ici MB5) par rapport au macro-bloc MB 20 ; quand le macro-bloc MB7 a été traité, le processeur P2 en informe le processeur P3 par un message de synchronisation, c'est-à-dire signale au processeur P3 que celui-ci peut démarrer et traiter le macro-bloc MB 8. En effet, le macro-bloc MB7 est le macro-bloc de gauche MBG par rapport au macro-bloc MB 8 ; parallèlement, les processeurs PI, P2 et P3 effectuent des traitements : le processeur PI traite les macro-blocs MB31, MB32 et MB33, le processeur
P2 traite les macro-blocs MB20, MB21 et MB22, et le processeur P3 traite les macro-blocs MB8, MB9, MB 10 et MB 11 ; et ainsi de suite jusqu'à ce que tous les macro-blocs de toutes les bandes verticales Bl à B4 aient été traités par les processeurs PI à P4. D'une façon générale, le principe de synchronisation des traitements effectués par les processeurs repose sur une utilisation de messages de synchronisation (messages système). Dans l'exemple ci-dessus, il y a trois points de synchronisation (un entre chaque paire de processeurs (Pk, Pk+1) traitant deux bandes verticales adjacentes) : un entre les processeurs PI et P2, un entre les processeurs P2 et P3 et un entre les processeurs P3 et P4. A chaque point de synchronisation correspond deux types de conditions :
à chaque fin de ligne de rang i+1 de la bande Bk (qui correspond à un quart de ligne d'image), le processeur Pk doit s'assurer que la condition « premier macro-bloc de la ligne de rang i de la bande Bk+1 (qui correspond aussi à un quart de ligne d'image) a été traité » a été remplie par le processeur Pk+1. Par exemple, à la fin de la deuxième ligne de la bande Bl (pour le traitement du macro-bloc MB 19), le processeur PI doit s'assurer que la condition « premier macro-bloc MB4 de la première ligne de la bande B2 a été traité » a été remplie par le processeur P2 ; à chaque début de ligne de rang i de la bande Bk+1, le processeur Pk+1 doit s'assurer que la condition « dernier macro-bloc de la ligne de rang i de la bande Bk a été traité » a été remplie par le processeur Pk. Par exemple, au début de la première ligne de la bande B2 (pour le traitement du macrobloc MB4), le processeur P2 doit s'assurer que la condition « dernier macro-bloc MB3 de la première ligne de la bande Bl a été traité » a été remplie par le processeur PI .