X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/lniv_gpu.git/blobdiff_plain/1a59c41c272e22861e759e660a64578b47147d85..cb7f1415a3a53d241784928e2a5d291f79a8e984:/levelines_common.h?ds=sidebyside diff --git a/levelines_common.h b/levelines_common.h index ddb0ea2..97d9bd7 100644 --- a/levelines_common.h +++ b/levelines_common.h @@ -3,17 +3,171 @@ #ifndef LEVELINES_COMMON_H #define LEVELINES_COMMON_H +#include -#include +/** + * \var Di_Q1 + * \brief table de coordonnees des segments pour le quadrant 1 + * + */ +const int Di_Q1[6][3] = + {{ -1, -1, -1}, /* 0 */ + { -1, -1, -1}, /* 1 */ + { -1, -1, -1}, /* 2 */ + { -1, -1, -1}, /* 3 */ + { -1, 0, -1}, /* 4 */ + { 0, -1, 0}}; /* 5 */ + +/** + * \var Dj_Q1 + * \brief table de coordonnees des segments pour le quadrant 1 + * + */ +const int Dj_Q1[6][3] = + {{ 0, 0, 0}, /* 0 */ + { 0, 1, 0}, /* 1 */ + { 1, 0, 1}, /* 2 */ + { 1, 1, 1}, /* 3 */ + { 1, 1, 1}, /* 4 */ + { 1, 1, 1}}; /* 5 */ //////////////////////////////////////////////////////////////////////////////// // Reference CPU functions //////////////////////////////////////////////////////////////////////////////// -//extern "C" void fonc(...); +extern "C" unsigned int lniv_cpu(unsigned int *image, int i, int j, int idim, int l, int *dout){ + + unsigned int value_c ; + unsigned int value2_c ; + unsigned int d, v, p, d_min, eq_min, eq, sum, sum2 ; + unsigned int sum_eq_min ; + unsigned int it, jt ; + + + /* mem */ + value_c = image[ i*l + j ] ; + value2_c = value_c*value_c ; + + // direction d=0 + sum = value_c ; + sum2 = value2_c ; + it = i ; + jt = j ; + for (p=0; p<3; p++) + { + it += Di_Q1[0][p] ; + jt += Dj_Q1[0][p] ; + v = image[ it*l + jt ] ; + sum += v ; + sum2 += v*v ; + } + eq_min = sum2 - sum*sum/4 ; /* *4 */ + sum_eq_min = sum ; + d_min = 0 ; + + /* direction 1 a 5 */ + for (d=1; d<6; d++) + { + sum = value_c ; + sum2 = value2_c ; + it = i ; + jt = j ; + for (p=0; p<3; p++) + { + it += Di_Q1[d][p] ; + jt += Dj_Q1[d][p] ; + v = image[it*l + jt] ; + sum += v ; + sum2 += v*v ; + } + eq = sum2 - sum*sum/4 ; /* *4 */ + if (eq < eq_min) + { + eq_min = eq ; + sum_eq_min = sum ; + d_min = d ; /* pour info */ + } + } + + /* direction 6 a 11 */ + for (d=0; d<6; d++) + { + sum = value_c ; + sum2 = value2_c ; + it = i ; + jt = j ; + for (p=0; p<3; p++) + { + it += Dj_Q1[d][p] ; + jt -= Di_Q1[d][p] ; + v = image[it*l + jt] ; + sum += v ; + sum2 += v*v ; + } + eq = sum2 - sum*sum/4 ; /* *4 */ + if (eq < eq_min) + { + eq_min = eq ; + sum_eq_min = sum ; + d_min = d+6 ; /* pour info */ + } + } + + /* direction 12 a 17 */ + for (d=0; d<6; d++) + { + sum = value_c ; + sum2 = value2_c ; + it = i ; + jt = j ; + for (p=0; p<3; p++) + { + it -= Di_Q1[d][p] ; + jt -= Dj_Q1[d][p] ; + v = image[it*l + jt] ; + sum += v ; + sum2 += v*v ; + } + eq = sum2 - sum*sum/4 ; /* *4 */ + if (eq < eq_min) + { + eq_min = eq ; + sum_eq_min = sum ; + d_min = d+12 ; /* pour info */ + } + } + + /* direction 18 a 23 */ + for (d=0; d<6; d++) + { + sum = value_c ; + sum2 = value2_c ; + it = i ; + jt = j ; + for (p=0; p<3; p++) + { + it -= Dj_Q1[d][p] ; + jt += Di_Q1[d][p] ; + v = image[it*l + jt] ; + sum += v ; + sum2 += v*v ; + } + eq = sum2 - sum*sum/4 ; /* *4 */ + if (eq < eq_min) + { + eq_min = eq ; + sum_eq_min = sum ; + d_min = d+18 ; /* pour info */ + } + } + + *dout = d_min ; + return sum_eq_min/4 ; + }; + //////////////////////////////////////////////////////////////////////////////// // GPU functions (in file.cu)