In a university project my group's task is to implement Mesh Based Surface Tracking on CUDA.
For that, we need a topological data structure for triangular meshes.
In a CPU implementation I would use something like the half-edge or winged-edge data structure, but on CUDA this leads to randomly jumping through global memory, which is very slow.
The Topology of the mesh will be changing very often, so the data structure needs to be able to change dynamically as well.
Is there a data structure for CUDA that fulfills these requirements?
Not specifically for CUDA, but this blog post talks about how you can implement a 'vector hosted' half-edge data structure. This is essentially just a half edge data structure implemented with vectors, but with unused elements in the vector buffers marked as 'dead', and these dead entries linked with free lists in such a way that it's trivial to find and reuse dead entries when needed. The free lists enable you to avoid general memory allocation for element nodes, and the fact that it is all 'hosted' in vectors ensures that stuff is kept nearby in memory.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With