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

Private GIT Repository
generation de chemins de taille parametrable
[lniv_gpu.git] / lib_alloc.c
1 /**
2  * \file lib_alloc.c
3  * \brief routines d'allocation des differentes datas du snake2D3D
4  * \author NB - PhyTI 
5  * \version x.x
6  * \date 20 decembre 2009
7  *
8  */
9
10 #include <malloc.h>
11 #include <mm_malloc.h>
12
13 #include "lib_alloc.h"
14
15 /**
16  * \brief allocation d'un tableau 2D (tab[i][j]) avec data en ligne (tab[0][n])
17  *
18  * \param[in]  i_dim dimension verticale du tableau
19  * \param[in]  j_dim dimension horizontale du tableau 
20  *
21  * \return pointeur sur le tableau
22  *
23  */
24 void ***new_matrix_ptr(int i_dim, int j_dim)
25 {
26   /* allocation en ligne */
27   void ***matrice ;
28   void **vecteur ATT_ALIGN_SSE ;
29   int i ;
30   
31   vecteur = (void**)malloc(sizeof(void*)*i_dim*j_dim) ;
32   matrice = (void***)malloc(sizeof(void**)*i_dim) ;
33   for (i=0;i<i_dim;i++)
34     matrice[i] = &(vecteur[i*j_dim]) ;
35   return matrice;
36 }
37
38 /**
39  * \brief deallocation d'un tableau 2D (tab[i][j]) avec data en ligne (tab[0][n])
40  *
41  * \param[in]  image tableau int 2D avec allocation en ligne 
42  * \param[in]  i_dim dimension horizontale du tableau 
43  *
44  *
45  */
46 void del_matrix_ptr(void ***image, int i_dim)
47 {
48   /* allocation en ligne */
49   free(image[0]) ;
50   free(image) ;
51 }
52
53
54
55 /**
56  * \brief allocation d'un tableau 2D (tab[i][j]) avec data en ligne (tab[0][n])
57  *
58  * \param[in]  i_dim dimension verticale du tableau
59  * \param[in]  j_dim dimension horizontale du tableau 
60  *
61  * \return pointeur sur le tableau
62  *
63  */
64 int **new_matrix_int(int i_dim, int j_dim)
65 {
66   /* allocation en ligne */
67   int **matrice ;
68   int *vecteur ATT_ALIGN_SSE ;
69   int i ;
70   
71   vecteur = (int*)_mm_malloc(sizeof(int)*i_dim*j_dim, ALIGN_SSE) ;
72   matrice = (int**)malloc(sizeof(int*)*i_dim) ;
73   for (i=0;i<i_dim;i++)
74     matrice[i] = &(vecteur[i*j_dim]) ;
75   return matrice;
76 }
77
78
79 /**
80  * \fn void del_matrix_int(int **image, int i_dim)
81  * \brief deallocation d'un tableau 2D (tab[i][j]) avec data en ligne (tab[0][n])
82  *
83  * \param[in]  image tableau int 2D avec allocation en ligne 
84  * \param[in]  i_dim dimension horizontale du tableau 
85  *
86  *
87  */
88 void del_matrix_int(int **image, int i_dim)
89 {
90   /* allocation en ligne */
91   _mm_free(image[0]) ;
92   free(image) ;
93 }
94
95
96
97 /**
98  * \fn int **new_matrix_pixel_cumul_sse(int i_dim, int j_dim)
99  * \brief allocation d'un tableau 2D (tab[i][j]) avec data en ligne (tab[0][n])n et aligne(16)
100  *
101  * \param[in]  i_dim dimension verticale du tableau
102  * \param[in]  j_dim dimension horizontale du tableau 
103  *
104  * \return pointeur sur le tableau
105  *
106  */
107 union pixel_cumul_sse **new_matrix_pixel_cumul_sse(int i_dim, int j_dim)
108 {
109   /* allocation en ligne */
110   union pixel_cumul_sse **matrice ;
111   union pixel_cumul_sse *vecteur ATT_ALIGN_SSE ;
112   int i ;
113   
114   vecteur = (union pixel_cumul_sse *)_mm_malloc(sizeof(union pixel_cumul_sse)*i_dim*j_dim, ALIGN_SSE) ;
115   matrice = (union pixel_cumul_sse **)malloc(sizeof(union pixel_cumul_sse*)*i_dim) ;
116   for (i=0;i<i_dim;i++)
117     matrice[i] = &(vecteur[i*j_dim]) ;
118   return matrice;
119 }
120
121
122 /**
123  * \fn void del_matrix_pixel_cumul_sse(union pixel_cumul_sse **image, int i_dim)
124  * \brief deallocation d'un tableau 2D (tab[i][j]) avec data en ligne (tab[0][n])
125  *
126  * \param[in]  image tableau int 2D avec allocation en ligne 
127  * \param[in]  i_dim dimension horizontale du tableau 
128  *
129  *
130  */
131 void del_matrix_pixel_cumul_sse(union pixel_cumul_sse **image, int i_dim)
132 {
133   /* allocation en ligne */
134   _mm_free(image[0]) ;
135   free(image) ;
136 }