]> AND Private Git Repository - lniv_gpu.git/blob - levelines_common.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
generation de chemins de taille parametrable
[lniv_gpu.git] / levelines_common.h
1
2
3 #ifndef LEVELINES_COMMON_H
4 #define LEVELINES_COMMON_H
5
6 #include <cuda_runtime.h>
7
8
9 /**
10  * \var Di_Q1
11  * \brief  table de coordonnees des segments pour le quadrant 1
12  *
13  */
14 const int Di_Q1[6][3] = 
15   {{ -1, -1, -1},  /* 0 */
16    { -1, -1, -1},  /* 1 */
17    { -1, -1, -1},  /* 2 */
18    { -1, -1, -1},  /* 3 */
19    { -1,  0, -1},  /* 4 */
20    {  0, -1,  0}}; /* 5 */
21
22
23 /**
24  * \var Dj_Q1
25  * \brief  table de coordonnees des segments pour le quadrant 1
26  *
27  */
28 const int Dj_Q1[6][3] = 
29   {{  0,  0,  0},  /* 0 */
30    {  0,  1,  0},  /* 1 */
31    {  1,  0,  1},  /* 2 */
32    {  1,  1,  1},  /* 3 */
33    {  1,  1,  1},  /* 4 */
34    {  1,  1,  1}}; /* 5 */
35
36
37
38 ////////////////////////////////////////////////////////////////////////////////
39 // Reference CPU functions
40 ////////////////////////////////////////////////////////////////////////////////
41 extern "C" unsigned int lniv_cpu(unsigned int *image, int i, int j, int idim, int l, int *dout){
42
43   unsigned int value_c ;
44   unsigned int value2_c ;
45   unsigned int d, v, p, d_min, eq_min, eq, sum, sum2 ;
46   unsigned int sum_eq_min ;
47   unsigned int it, jt ;
48
49
50   /* mem */
51   value_c = image[ i*l + j ] ;
52   value2_c = value_c*value_c ;
53
54   // direction d=0
55   sum = value_c ;
56   sum2 = value2_c ;
57   it = i ;
58   jt = j ;
59   for (p=0; p<3; p++)
60     {
61       it += Di_Q1[0][p] ;
62       jt += Dj_Q1[0][p] ;
63       v = image[ it*l + jt ] ;
64       sum += v ;
65       sum2 += v*v ;
66     }
67   eq_min = sum2 - sum*sum/4 ; /* *4 */
68   sum_eq_min = sum ;
69   d_min = 0 ;
70
71   /* direction 1 a 5 */
72   for (d=1; d<6; d++)
73     {
74       sum = value_c ;
75       sum2 = value2_c ;
76       it = i ;
77       jt = j ;
78       for (p=0; p<3; p++)
79         {
80           it += Di_Q1[d][p] ;
81           jt += Dj_Q1[d][p] ;
82           v = image[it*l + jt] ;
83           sum += v ;
84           sum2 += v*v ;
85         }
86       eq = sum2 - sum*sum/4 ; /* *4 */
87       if (eq < eq_min)
88         {
89           eq_min = eq ;
90           sum_eq_min = sum ;
91           d_min = d ; /* pour info */    
92         }
93     }
94
95   /* direction 6 a 11 */
96   for (d=0; d<6; d++)
97     {
98       sum = value_c ;
99       sum2 = value2_c ;
100       it = i ;
101       jt = j ;
102       for (p=0; p<3; p++)
103         {
104           it += Dj_Q1[d][p] ;
105           jt -= Di_Q1[d][p] ;
106           v = image[it*l + jt] ;
107           sum += v ;
108           sum2 += v*v ;
109         }
110       eq = sum2 - sum*sum/4 ; /* *4 */
111       if (eq < eq_min)
112         {
113           eq_min = eq ;
114           sum_eq_min = sum ;
115           d_min = d+6 ; /* pour info */  
116         }
117     }
118
119   /* direction 12 a 17 */
120   for (d=0; d<6; d++)
121     {
122       sum = value_c ;
123       sum2 = value2_c ;
124       it = i ;
125       jt = j ;
126       for (p=0; p<3; p++)
127         {
128           it -= Di_Q1[d][p] ;
129           jt -= Dj_Q1[d][p] ;
130           v = image[it*l + jt] ;
131           sum += v ;
132           sum2 += v*v ;
133         }
134       eq = sum2 - sum*sum/4 ; /* *4 */
135       if (eq < eq_min)
136         {
137           eq_min = eq ;
138           sum_eq_min = sum ;
139           d_min = d+12 ; /* pour info */         
140         }
141     }
142   
143   /* direction 18 a 23 */
144   for (d=0; d<6; d++)
145     {
146       sum = value_c ;
147       sum2 = value2_c ;
148       it = i ;
149       jt = j ;
150       for (p=0; p<3; p++)
151         {
152           it -= Dj_Q1[d][p] ;
153           jt += Di_Q1[d][p] ;
154           v = image[it*l + jt] ;
155           sum += v ;
156           sum2 += v*v ;
157         }
158       eq = sum2 - sum*sum/4 ; /* *4 */
159       if (eq < eq_min)
160         {
161              eq_min = eq ;
162              sum_eq_min = sum ;
163              d_min = d+18 ; /* pour info */      
164         }
165     }
166   
167   *dout = d_min ;
168   return sum_eq_min/4 ;
169  };
170
171
172 ////////////////////////////////////////////////////////////////////////////////
173 // GPU functions (in file.cu)
174 ////////////////////////////////////////////////////////////////////////////////
175 //extern "C" void fonc(float *h_Kernel);
176
177
178 #endif