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

Private GIT Repository
added rectangle generation for initialization
[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 /*
65  * structure pour la smem des kernels cumuls
66  * 
67  */
68 struct tcumuls {
69          t_cumul_x x;
70          t_cumul_x2 x2;
71 };
72
73
74 /*
75  * structure pour le smem des kernels contribs
76  *
77  */
78
79 struct tcontribs {
80   t_sum_1 c1;
81   t_sum_x cx;
82   t_sum_x2 cx2;
83 };
84
85 /** 
86  * \struct snake_node structures.h
87  *
88  * \brief noeud du snake defini par liste chainee
89  *
90  * Cette structure memorise la position du noeud
91  * ET les informations concernant le segment qui
92  * part de ce noeud et va au noeud suivant dans
93  * l'ordre trigo 
94  */
95
96 struct snake_node
97
98   /* contribution du segment allant de ce noeud */
99   /* au noeud suivant, defini dans l'ordre trigo */
100   /* l'union pixel_cumul est definie en premier */
101   /* pour permettre l'alignement memoire */
102   struct pixel_cumul contrib ;
103  
104   int code_segment ; /* signe de la contrib */
105   int freeman_in ;  /* du noeud d'arrivee du segment (ordre trigo) */
106   int freeman_out ; /* du noeud de depart du segment (ordre trigo) */
107   uint32 nb_pixels ;
108
109   uint32 posi ; /* position i du noeud */
110   uint32 posj ; /* position j du noeud */
111   uint32 centre_i ; /* centre i du segment */
112   uint32 centre_j ; /* centre j du segment */
113
114   int last_move ; /* dernier test deplacement accepte */
115  
116   /* lien liste chainee snake2D */
117   struct snake_node *noeud_suiv ; /* dans le sens trigo */
118   struct snake_node *noeud_prec ;
119   
120
121   /* lien liste chainee snake3D */
122 };
123
124
125 struct snake_node_gpu
126 {
127   t_sum_1 sum_1 ;
128   t_sum_x sum_x ;
129   t_sum_x2 sum_x2;
130
131   int code_segment ; /* signe de la contrib */
132   int freeman_in ;  /* du noeud d'arrivee du segment (ordre trigo) */
133   int freeman_out ; /* du noeud de depart du segment (ordre trigo) */
134   uint32 nb_pixels ;
135
136   uint32 posi ; /* position i du noeud */
137   uint32 posj ; /* position j du noeud */
138   uint32 centre_i ; /* centre i du segment */
139   uint32 centre_j ; /* centre j du segment */
140
141   int last_move ; /* dernier test deplacement accepte */
142 };
143
144
145 #endif