• Aucun résultat trouvé

3.3 Augmentation de la bande passante mémoire

3.3.4 Codage des adresses

6 9 3 6 1 2 3 4 5 6 1 2 4 5

Fig. 3.8  Clique en c-8 et 9-coloration associée.

dans les deux cas. Les voisins sont accédés en parallèle. Les tests de propagation (test_2) pour-ront donc être eectués en parallèle en mode SIMD. De plus, la répartition des points dans la mémoire n'est pas redondante. La taille mémoire globale requise n'est pas augmentée. Dans le cas du démonstrateur que nous présenterons plus loin, nous nous limitons à l'implantation de cette technique de mémorisation au cas de la c-4.

Il nous faut, à présent, déterminer l'adressage des pixels dans chacune des banques. Nous avons choisi de le faire de la manière suivante:

 on parcourt les pixels correspondants aux noeuds de la gure 3.7b de droite à gauche puis de haut en bas (mode vidéo);

 lorsqu'on rencontre un point devant être rangé dans la mémoire

k

, on le place à l'adresse courante et on incrémente l'adresse de la mémoire considérée.

Avec l'organisation représentée par la gure 3.7b, le point

p

(0

;

0) sera placé à l'adresse 0 de la banque 1, le point

p

(1

;

0) à l'adresse 1 de la banque 1, le point

p

(4

;

0) à l'adresse 2 de la banque 1, etc. Cette règle de rangement des points nous permettra de décrire les équations du processeur d'adressage en mode voisin ou en mode point.

3.3.4 Codage des adresses

Le système de mémorisation impose que chaque banque dispose de ses propres adresses. Nous allons déterminer si une partie de ces adresses peut être commune aux diérentes banques. Nous montrons ensuite comment les adresses des banques sont déterminées à partir de l'adresse du point central, en mode point et en mode voisinage.

Mise en commun d'une partie du bus d'adresses

Commençons par nous intéresser à la largeur

T

(

Bk) du bus d'adresses

Bk de chaque banque

B

k. La taille des banques étant égale au quart de la taille image, chaque bus devra avoir une largeur donnée par:

T

(

Bk) =

T

(

(

p

c)),2 où

(

p

c) représente le codage binaire de l'adresse du point central

p

c. Le processeur d'adresse aura donc un nombre de ports donné par:

T

(

(

p

c))+ 4(

T

(

(

p

c)),2). Pour réduire ce nombre, nous sommes amenés à nous demander s'il existe une partie commune aux bus d'adresses des banques. Si

C

représente le nombre de bits en commun, les ports du processeur d'adresses se réduisent à:

T

(

(

p

c))+4(

T

(

(

p

c)),2,

C

)+

C

. Il faut revenir au graphe de voisinage pour déterminer

C

. On veut que les points d'un même

voisinage aient

C

bits d'adresse en commun, autrement dit, que les noeuds d'une même clique aient

C

bits en commun. Chacun de ces noeuds fait également partie d'une autre clique et a, avec les noeuds de cette clique, les mêmes

C

bits en commun, etc. Le nombre de bits en commun

C

est donc déterminé par le nombre de sous-graphes disjoints du graphe de voisinage. Dans le cas de la c-4, le graphe d'appartenance à un voisinage se décompose en deux sous-graphes. L'appartenance d'un noeud à l'un des deux sous-graphes se codant sur 1 bit, seul 1 bit pourra être mis en commun. Ce bit sera le bit de poids Fort (pF) de l'adresse des banques. Ainsi, quelle que soit la taille de l'image, la mise en commun d'une partie de l'adressage des banques fera gagner 3 bits. Présentons rapidement le calcul des adresses

Bk dans chaque banque.

Nous allons nous pencher sur le calcul des adresses en mode point et en mode voisinage. Ce calcul se fera à partir de l'adresse du point central (

(

p

c)), décomposée en adresse ligne (

ligne(

p

c)) et colonne (

colonne(

p

c)), et d'une analyse de la topologie de stockage des voisins dans les banques. Nous montrerons que le calcul des adresses dans les banques est réalisé par des opérations logiques très simples.

Calcul des adresses en mode point

Commençons par déterminer le bit commun de codage du sous-graphe. Il sut pour cela de constater que les sous-graphes de la gure 3.7 sont constitués des points:

 dont l'abscisse et l'ordonnée sont toutes deux paires pour le premier sous-graphe;  dont l'abscisse et l'ordonnée sont toutes deux impaires pour le second.

Nous pouvons représenter la répartition des données par une décomposition des banques en pages. Les points d'un sous-graphe seront mémorisés dans la même page, que ce soit dans la banque 1, 2, 3 ou 4. Ainsi, le point

p

(0

;

0) sera mémorisé à l'adresse 0 de la page 0 de la banque 1, le point

p

(0

;

1) à l'adresse 0 de la page 1 de la banque 1, le point

p

(0

;

4) à l'adresse 1 de la page 0 de la banque 1, etc. Le bit de poids fort de l'adresse de la banque

B

k est déni par le numéro de la page, c'est-à-dire par l'appartenance du point central à l'un des deux sous-graphes. Nous avons alors:

pF(

B

k) = (

0

ligne(

p

c)

0

colonne(

p

c)) où représente le ou exclusif. Dans chaque page de chacune des banques, l'adresse est incrémentée toutes les 4 colonnes. De plus, une banque donnée n'est considérée que toutes les 2 lignes. Les adresses des banques (

(

B

k)) seront donc constituées par les modulos (mod) 4 et les modulos 2 des adresses colonne et ligne de

p

c:

pF(

B

k)

ligne(

p

c) mod 2

colonne(

p

c) mod4

| {z } | {z } | {z }

page(

B

k)

ligne(

B

k)

colonne(

B

k)

Les modulos s'obtiennent très facilement puisqu'il sut d'enlever le (resp. les deux) bit(s) de poids faible (pf) pour obtenir le modulo 2 (resp. 4). La taille de l'adresse obtenue est:

T

(

(

B

k)) = 1 +

T

(

ligne(

p

c)),1

+

T

(

colonne(

p

c)),2

=

T

(

(

p

c)),2 (3.3) Ce nombre est conforme au résultat attendu. L'adresse que nous venons de dénir est envoyée à toutes les banques. Lors d'une demande d'accès à la mémoire image (resp. label), le bit de validation

cs

i (resp.

cs

l) est actif. Seule la banque qui nous intéresse doit être validée. Le choix d'une banque parmi les quatre est déni en constatant, une fois de plus, que la répartition dans les banques est périodique de période 4. Le bit de validation

cs

k de la banque

B

k est activé, lors

3.3. Augmentation de la bande passante mémoire 109 d'une demande d'accès, en fonction de la valeur des bits de poids faible des adresses de ligne et de colonne du point selon:

cs

1=

1,0 colonne(

p

c) = (0

;X

)et

1,0 ligne(

p

c) = (0

;

0)ou

1,0 colonne(

p

c) = (0

;X

) et

1,0 ligne(

p

c) = (0

;

0)

cs

2=

1,0 colonne(

p

c) = (0

;X

)et

1,0 ligne(

p

c) = (0

;

1)ou

1,0 colonne(

p

c) = (1

;X

) et

1,0 ligne(

p

c) = (1

;

1)

cs

3=

1,0 colonne(

p

c) = (1

;X

)et

1,0 ligne(

p

c) = (0

;

0)ou

1,0 colonne(

p

c) = (0

;X

) et

1,0 ligne(

p

c) = (1

;

0)

cs

4=

1,0 colonne(

p

c) = (1

;X

)et

1,0 ligne(

p

c) = (0

;

1)ou

1,0 colonne(

p

c) = (0

;X

) et

1,0 ligne(

p

c) = (1

;

1)

Calcul des adresses en mode voisinage

Contrairement au mode point, les pixels à adresser en mode voisinage font tous partie du sous-graphe ne contenant pas le point central. On a pour toutes les banques:

pF(

B

k) =

0

ligne(

p

c)

0

colonne(

p

c) (3.4) Les adresses ligne modulo 4 et colonne modulo 4 nous indiqueront le bloc de 16 points dans lequel se trouve le point central.

L'analyse de la position du point central à l'intérieur du bloc à l'aide des pf indiquera comment calculer les adresses de chaque banque pour les voisins concernés. Dans le sens vertical, les mêmes banques sont utilisées toutes les deux lignes. L'indice ligne d'une banque n'est donc incrémenté que toutes les deux lignes.

Les données des lignes 2

k

et 2

k

+ 1 ont les mêmes positions de ligne dans leurs banques respectives. Par contre, les points de la ligne 2

k

,1 sont sur la ligne qui précède ceux de la ligne 2

k

. Ainsi, lorsque

p

c se trouve sur une ligne paire, son voisin sud aura la même adresse ligne que

p

c. Par contre, son voisin nord sera sur la ligne précédente et son adresse de ligne sera

ligne(

p

c),1. Nous pouvons tenir un raisonnement analogue lorsque

p

c se trouve sur une ligne impaire. Nous avons donc les deux règles suivantes:

ligne(

p

c) = 2

k

) 

ligne(

v

nord) =

ligne(

p

c)mod 2,1

ligne(

v

sud) =

ligne(

p

c)mod 2 (3.5)

ligne(

p

c) = 2

k

+ 1) 

ligne(

v

nord) =

ligne(

p

c)mod 2

ligne(

v

sud) =

ligne(

p

c)mod 2 + 1 (3.6) Les banques 1 et 3 étant placées sur les lignes vériant

ligne(

p

c) = 2

k

, toutes les modications verticales concernant ces banques seront du type 8

k

2 f1

;

3g

;

ligne(

B

k) =

ligne(

p

c) + 1. Les modications interviennent dans quatre cas par bloc, puisque chaque banque est utilisée deux fois par ligne de bloc toutes les deux lignes de bloc. Avec un raisonnement analogue, les quatre modications dans le sens vertical des adresses des banques 2 et 4 sont8

k

2f2

;

4g

;

ligne(

B

k) =

ligne(

p

c),1.

Dans le sens horizontal, l'indice de colonne ne varie que lorsqu'on passe d'un bloc à l'autre. Les adresses colonne des voisins ne seront modiées que lorsque

colonne(

p

c) = 4

k

ou

colonne = 4

k

+3. Les règles de calcul sont alors:

colonne(

p

c) = 4

k

) 

colonne(

v

ouest) =

colonne(

p

c) mod4,1

colonne(

v

est) =

colonne(

p

c) mod4 (3.7)

colonne(

p

c) = 4

k

+ 3) 

colonne(

v

ouest) =

colonne(

p

c) mod4

Comme ces quatre banques sont représentées dans chaque colonne de bloc, elles le sont en particulier pour les colonnes 4

k

et 4

k

+ 3. Ainsi, parmi les seize positions de

p

c dans le bloc, il y aura nécessairement pour chaque

k

,

k

2 f1

;

2

;

3

;

4g, un et un seul cas où

colonne(

B

k) =

colonne(

p

c),1 et un et un seul cas où

colonne(

B

k) =

colonne(

p

c) + 1.

Ces règles de calcul, basées sur le choix du coloriage, nous conduisent à dresser le tableau 3.4 représentant les coecients à ajouter à (

ligne(

p

c) mod 2) et à (

colonne(

p

c) mod 4) (notés respectivement

c

l et

c

c dans le tableau) selon les seize cas dictés par les valeurs de

1,0

ligne(

p

c) et de

1,0

colonne(

p

c). Les cases laissées vide indiquent que le coecient est nul.

Bilan

Ainsi, que ce soit en mode point ou voisinage, les adresses sont toujours de la forme:

pF(

B

k) (

ligne(

p

c) mod2) +

c

l (

colonne(

p

c)mod 4) +

c

c

| {z } | {z } | {z }

page(

B

k)

ligne(

B

k)

colonne(

B

k) avec

c

l2f,1

;

0

;

+1get

c

c 2f,1

;

0

;

+1get:

pF(

B

k) =

(

0

ligne(

p

c) 

0

colonne(

p

c) en mode point

0

ligne(

p

c) 

0

colonne(

p

c) en mode voisinage (3.9) Les additions peuvent être rapides car elles sont eectuées sur des portions d'adresses. De plus, la complexité de ces calculs est bien équilibrée entre calcul ligne et calcul colonne, les adresses correspondantes étant généralement de tailles similaires (cas des images carrées).

Tab. 3.4  Calcul des adresses en mode voisinage.

Banque 1 Banque 2 Banque 3 Banque 4

1,0 ligne(

p

c)

1,0 colonne(

p

c)

c

l

c

c

c

l

c

c

c

l

c

c

c

l

c

c 0 0 0 0 - 1 - 1 0 0 0 1 - 1 0 0 1 0 - 1 0 0 1 1 + 1 - 1 0 1 0 0 + 1 - 1 0 1 0 1 + 1 0 1 1 0 + 1 0 1 1 1 + 1 + 1 1 0 0 0 - 1 - 1 1 0 0 1 - 1 1 0 1 0 - 1 1 0 1 1 + 1 - 1 1 1 0 0 + 1 - 1 1 1 0 1 + 1 1 1 1 0 + 1 1 1 1 1 + 1 + 1

3.3. Augmentation de la bande passante mémoire 111