]> SALOME platform Git repositories - modules/smesh.git/blob - src/SMDS/Notes
Salome HOME
Revert "23418: [OCC] Mesh: Minimization of memory usage of SMESH"
[modules/smesh.git] / src / SMDS / Notes
1 --> Branche V6_main
2
3 Problemes en cours
4 ==================
5 - a faire
6 + en cours, OK mais perfectible
7 * OK
8
9 + visualisation de groupe (type d'element): on voit tout le maillage, mais le groupe est OK
10   creation d'une structure vtkUnstructuredGrid locale : iteration un peu lourde, et pas de partage avec la structure du maillage (pas evident)
11 - inversion d'un volume (tetra): exception
12 - script de creation de noeuds et d'elements: OK, mais pas compatible avec version precedente (numerotation noeuds differente)
13 + affichage numeros noeuds: numeros en trop sur (O,0,0) pas systematique, trouver la condition (enlever dans vtkUnstructuredGrid ?)
14   ==> purge systematique noeuds et cellules en trop dans compactage grid.
15 + gestion du mode embedded mal faite lors d'un script python : journal commandes intempestif
16 - affichage des noeuds apres changement lineaire <--> quadratique à l'IHM : pas pris en compte, alors que maillage OK,
17   mais script OK
18   ==> cassé apres mode embedded ou elimination noeuds en trop ?
19 - extrusion elements 2D along a path : affichage apres calcul pas toujours OK (filaire)
20 - branche git a ouvrir pour merge avec V5_1_4_BR tag V5_1_4rc1
21
22 A tester, non pris en compte
23 ============================
24 - engine standalone
25 - polyedres (attendre vtk)
26
27
28 =============================== Hypothese de refonte de l'API de SMDS
29
30 n'utiliser que vtkUnstructuredGrid, ne pas avor d'objets SMDS_MeshElement mais seulement des index de vtkUnstructuredGrid.
31 2987 usages de SMDS_MeshNodes
32 810            SMDS_MeshElement
33 ...
34 ==> en dernier ressort, lourd
35 ================================================================================
36
37 Essai a API SMDS a peu pres constante
38 =====================================
39
40 SMDS_Mesh
41   static vector<SMDS_Mesh*> _meshList;     --> retrouver un SMDS_Mesh
42   vtkUnstructuredGrid*      myGrid;
43
44   vector<SMDS_MeshNode *>   myNodes;       --> meme index que dans le pointSet de myGrid
45   vector<SMDS_MeshCell *>   myCells;       --> index = ID client, pas le meme index que dans le cellTypes de myGrid (ID vtk)
46
47
48
49 SMDS_MeshElement
50   int myID;                                --> index dans la structure geree par SMDS_Mesh
51   int myMeshId;                            --> pour retrouver SMDS_Mesh* dans _meshList
52   int myShapeId;                           --> pour retrouver la subShape
53                                                          
54
55 SMDS_MeshNode: SMDS_MeshElement
56   SMDS_PositionPtr myPosition;             -->  A REVOIR : objet position dans la shape geom
57   ##vector<int> myInverseElements;         -->  SUPPRIME : pour retrouver les elements, vtkCellLinks
58
59
60 SMDS_MeshCell: SMDS_MeshElement            --> generique pour tous les elements (cells)
61   int myVtkID                              --> A SUPPRIMER
62
63 SMDS_MeshVolume: SMDS_MeshCell
64
65 SMDS_VolumeOfNodes: SMDS_MeshVolume        --> Garder temporairement, utilisation dans StdMesher et SMDS_VolumeTool
66   const SMDS_MeshNode **myNodes;           --> Couteux
67   int                 myNbNodes;           -->  ""
68
69 SMDS_VolumeVtkNodes: SMDS_MeshVolume       --> Utiliser systematiquement dans SMDS,
70                                            --> IMPLEMENTER.
71
72
73 SMDS_MeshElementIDFactory: SMDS_MeshNodeIDFactory
74   vector<int> myIDElements; // index = ID client, value = ID vtk  --> A SUPPRIMER, ne sert que dans SMDS_MeshElementIDFactory
75   vector<int> myVtkIndex;   // index = ID vtk, value = ID client  --> A REPORTER dans SMDS_Mesh
76
77
78
79
80 ========= TODO ============
81
82 enlever vtkId de SMDS_MeshCell, utiliser SMDS_MeshElementIDFactory.
83
84 ajouter ID dans SMDS_Mesh::createTriangle 
85 verifier ID dans SMDS_Mesh::Find*OrCreate
86
87 ===================================================
88 occupation memoire cube 100*100*100 sans affichage
89 NOTES:
90 - sur Debian Sarge 64 bits, les mesures malloc_stat() semblent coherentes
91   avec une mesure externe globale(recherche du passage en swap du process).
92 - sur Ubuntu 9.10 64 bits, les mesures malloc_stat() donnent des resultats bizarres (surestimation ?),
93   mais la mesure avec l'outil KDE de surveillance systeme est OK avec la recherche du swap.
94
95
96 Reference : V513 Debian Sarge 64 bits: --> 463 - 33 = 430 Mo
97 -------------------------------------
98 Total (incl. mmap):
99 system bytes     =   43757568
100 in use bytes     =   32909584 = 33M
101 max mmap regions =         41
102 max mmap bytes   =   16371712
103 ----
104 Total (incl. mmap):
105 system bytes     =  464670720
106 in use bytes     =  463105120 = 463M
107 max mmap regions =         47
108 max mmap bytes   =   28188672
109
110 Debian Sarge 64 bits, vtkUnstructuredGrid nodes et hexa, 4 janvier 2010 --> 512 - 41 = 471M
111 -----------------------------------
112
113 Total (incl. mmap):
114 system bytes     =   52133888
115 in use bytes     =   41340320 : 41M
116 max mmap regions =         72
117 max mmap bytes   =   24625152
118 ----
119 Total (incl. mmap):
120 system bytes     =  520560640
121 in use bytes     =  518735584 : 512M
122 max mmap regions =         88
123 max mmap bytes   =  198385664
124
125 idem avec pool SMDS_MeshNodes --> 483 -33 = 450M
126 -----------------------------
127 Total (incl. mmap):
128 system bytes     =   43696128
129 in use bytes     =   32915184 : 33M 
130 max mmap regions =         41
131 max mmap bytes   =   16371712
132 ----
133 Total (incl. mmap):
134 system bytes     =  484806656
135 in use bytes     =  482980992 : 483M
136 max mmap regions =         58
137 max mmap bytes   =  184557568
138
139 idem ci-dessus + pool SMDS_VolumeVtkNodes --> 475 -33 = 442M (git: add ObjectPool.hxx)
140 -----------------------------------------
141
142 Total (incl. mmap):
143 system bytes     =   43200512
144 in use bytes     =   32908576 : 33M
145 max mmap regions =         41
146 max mmap bytes   =   16371712
147 ----
148 Total (incl. mmap):
149 system bytes     =  478068736
150 in use bytes     =  475144400 : 475M
151 max mmap regions =         59
152 max mmap bytes   =  184692736
153
154 remplacement SMDS_PositionPtr: (boost::shared_ptr<SMDS_Position> --> SMDS_Position*) --> 436 - 35 = 401M (git SMDS_Position)
155 ------------------------------------------------------------------------------------
156 Total (incl. mmap):
157 system bytes     =   45408256
158 in use bytes     =   35097680 : 35M
159 max mmap regions =         47
160 max mmap bytes   =   18116608
161 ----
162 Total (incl. mmap):
163 system bytes     =  438935552
164 in use bytes     =  436116560 : 436M
165 max mmap regions =         65
166 max mmap bytes   =  186437632
167
168 simplification SMDS_SpacePosition (pas de double[3]) --> 418 -33 = 385M (git SMDS_SpacePosition)
169 ----------------------------------------------------
170 Total (incl. mmap):
171 system bytes     =   42582016
172 in use bytes     =   32883552 : 33M
173 max mmap regions =         41
174 max mmap bytes   =   16371712
175 ----
176 Total (incl. mmap):
177 system bytes     =  421728256
178 in use bytes     =  418378000 : 418M
179 max mmap regions =         58
180 max mmap bytes   =  183640064
181
182 sizeof(SMDS_MeshElement) 16
183 sizeof(SMDS_MeshNode) 24
184 sizeof(SMDS_MeshCell) 24
185 sizeof(SMDS_VolumeVtkNodes) 24
186 sizeof(SMDS_Position) 16
187 sizeof(SMDS_SpacePosition) 16
188
189 impact d'un int en plus dans SMDS_MeshElement --> 426 - 33 = 393M
190 ---------------------------------------------
191
192 sizeof(SMDS_MeshElement) 24
193 sizeof(SMDS_MeshNode) 32       --> on retrouve bien les 8M
194 sizeof(SMDS_MeshCell) 24
195 sizeof(SMDS_VolumeVtkNodes) 24
196 sizeof(SMDS_Position) 16
197 sizeof(SMDS_SpacePosition) 16
198
199 Total (incl. mmap):
200 system bytes     =   43192320
201 in use bytes     =   32681088 : 33M
202 max mmap regions =         41
203 max mmap bytes   =   16371712
204 ----
205 Total (incl. mmap):
206 system bytes     =  429334528
207 in use bytes     =  426424576 : 426M
208 max mmap regions =         59
209 max mmap bytes   =  184692736
210
211 remplacement std::set par std::vector dans SMESHDS_SubMesh --> 347 - 35 = 312M
212 ----------------------------------------------------------
213 sizeof(SMDS_MeshElement) 24
214 sizeof(SMDS_MeshNode) 32
215 sizeof(SMDS_MeshCell) 24
216 sizeof(SMDS_VolumeVtkNodes) 24
217 sizeof(SMDS_Position) 16
218 sizeof(SMDS_SpacePosition) 16
219
220 Total (incl. mmap):
221 system bytes     =   45404160
222 in use bytes     =   35132160 --> 35M
223 max mmap regions =         49
224 max mmap bytes   =   17723392
225 ----
226 Total (incl. mmap):
227 system bytes     =  349831168
228 in use bytes     =  346885424 --> 347M
229 max mmap regions =         73
230 max mmap bytes   =  204148736
231
232 Ce resultat est coherent avec une recherche de swap sur une machine a 8Go de memoire:
233 Cube a 270**3 mailles (~20M mailles) --> 6.2 Go (idem Debian Sarge et Ubuntu 9.10, 64 bits)
234 Le meme avec V5.1.3 --> 14 Go (swap)
235