]> AND Private Git Repository - snake_gpu.git/blob - src/structures.h~
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
test tex
[snake_gpu.git] / src / structures.h~
1 /**
2  * \file structures.h
3  * \author NB - PhyTI 
4  * \version x.x
5  * \date 20 decembre 2009
6  *
7  *
8  */
9
10 #ifndef _STRUCTURES_H
11 #define _STRUCTURES_H
12
13
14 /**
15  * \def uint64 entier non signe 64 bits
16  * \def int64 entier signe 64 bits
17  * \def uint32 entier non signe 32 bits
18  */
19 typedef unsigned long long int uint64 ; 
20 typedef unsigned int uint32;
21 typedef long long int int64 ; 
22 typedef long int int32 ;
23
24 typedef unsigned short t_cumul_1 ;
25 typedef unsigned int t_cumul_x ;
26 typedef unsigned long long t_cumul_x2 ;
27
28 typedef unsigned int t_sum_1 ;
29 typedef unsigned long long t_sum_x ;
30 typedef unsigned long long t_sum_x2 ;
31
32
33 /** 
34  * \struct pixel_cumul structures.h
35  *
36  * \brief structure des images cumulees
37  *
38  * Version d'algorithme sans SSE2 \n
39  * les images cumulees correspondent a \n
40  * [sum 1, sum x, sum x^2] \n
41  * 
42  * Trois donnees a stocker de dynamique differente \n
43  *
44  * cas d'images en profondeur 16 bits \n 
45  * avec xum_x2 sur 64 bits => taill image sur 14 bits soit 16000 x 16000 \n
46  * longueur des segments sur 15 bits
47  * \verbatim
48   sum_1  : 0/1 + 14b + 15b = 29b => unsigned int 
49   sum_x  : 16b + 14b + 15b = 45b => unsigned long int
50   sum_x2 : 32b + 14b + 15b = 61b => unsigned long int
51   \endverbatim
52  * 
53  * Avec la definition suivante, les contributions des segments
54  * ne pourrons etre que positives. Le signe associe au segment devra
55  * etre memorise par une autre variable (code_segment)
56  */
57 struct pixel_cumul
58
59   uint32 sum_1;
60   uint64 sum_x;
61   uint64 sum_x2; 
62  } ;
63
64 struct tcumuls {
65          t_cumul_x x;
66          t_cumul_x2 x2;
67 };
68
69 /** 
70  * \struct snake_node structures.h
71  *
72  * \brief noeud du snake defini par liste chainee
73  *
74  * Cette structure memorise la position du noeud
75  * ET les informations concernant le segment qui
76  * part de ce noeud et va au noeud suivant dans
77  * l'ordre trigo 
78  */
79
80 struct snake_node
81
82   /* contribution du segment allant de ce noeud */
83   /* au noeud suivant, defini dans l'ordre trigo */
84   /* l'union pixel_cumul est definie en premier */
85   /* pour permettre l'alignement memoire */
86   struct pixel_cumul contrib ;
87  
88   int code_segment ; /* signe de la contrib */
89   int freeman_in ;  /* du noeud d'arrivee du segment (ordre trigo) */
90   int freeman_out ; /* du noeud de depart du segment (ordre trigo) */
91   uint32 nb_pixels ;
92
93   uint32 posi ; /* position i du noeud */
94   uint32 posj ; /* position j du noeud */
95   uint32 centre_i ; /* centre i du segment */
96   uint32 centre_j ; /* centre j du segment */
97
98   int last_move ; /* dernier test deplacement accepte */
99  
100   /* lien liste chainee snake2D */
101   struct snake_node *noeud_suiv ; /* dans le sens trigo */
102   struct snake_node *noeud_prec ;
103   
104
105   /* lien liste chainee snake3D */
106 };
107
108
109 struct snake_node_gpu
110 {
111   t_sum_1 sum_1 ;
112   t_sum_x sum_x ;
113   t_sum_x2 sum_x2;
114
115   int code_segment ; /* signe de la contrib */
116   int freeman_in ;  /* du noeud d'arrivee du segment (ordre trigo) */
117   int freeman_out ; /* du noeud de depart du segment (ordre trigo) */
118   uint32 nb_pixels ;
119
120   uint32 posi ; /* position i du noeud */
121   uint32 posj ; /* position j du noeud */
122   uint32 centre_i ; /* centre i du segment */
123   uint32 centre_j ; /* centre j du segment */
124
125   int last_move ; /* dernier test deplacement accepte */
126 };
127
128
129 #endif