Question

I have never had an experience with creating simulations or 3D objects, but I want to start learning them, and create a small application, which will simulate topological objects in 3D. What I mean by "topological object", is mathematical topology (algebraic/general topology), meaning torus, knot, Möbius strip, etc. So, I don't mean anything like network topology.

I have been searching over the Internet for some example codes regarding them, but I wasn't able to find anything useful. If you could offer me some materials, I would be glad. On the other hand, I want to hear your opinion about which programming language/paradigm/extension should I use? I also plan to use CUDA with the project for achieving speed-ups.

Was it helpful?

Solution

I don't think CUDA is really much use for computional algebraic/general topology. Sure, you can use it to mess around with homology groups etc., but that's rather algebra than topology, which itself tends to be too abstract/"dynamic" to really benefit from SIMD. If you don't have a clear idea, I'd first try some CPU implementations and only port to CUDA as a later optimisation.

Anyway, what you describe sounds rather like you're mainly interested in creating visual representations of topological spaces, i.e. in giving concrete embeddings T → ℝ³. That's rather in the realm of differential topology, which I reckon could quite well make use of gpgpu processing. However for the final "visualisation step", you want to use something more specific; openGL + GLUT is fine. You can use that from many languages, I'd recommend Haskell (undisputedly great for everything mathematical), but C or C++ is of course closer to the library, you will find more examples and can easier get CUDA in.

OTHER TIPS

Since you are starting in the subject I recommend that you give a look at the following examples:

Tutorials

The Dr Dobbs Journal series CUDA: Supercomputing for the masses by Rob Farmer is excellent and covers just about everything in its fourteen installments. It also starts rather gently and is therefore fairly beginner-friendly.

and anothers:

Take a look on the last item, you will find many link to learn CUDA.

You make want to look at OpenCL also, so:

OpenCL: OpenCL Tutorials | MacResearch

Determining the need for CUDA to optimize seems to put optimization before profiling. If I were you, I'd use a more simply rendering environment until I understood how to implement the modelling side.

Depending on your preferred implementation language, you might want to look at OpenTk. This provides a very usable C# wrapper to OpenGl. Within that you can use shader language if you find you need to.

In terms of how to represent the topological objects, details would depend on you plan on using descriptions defined in terms of embeddings, or implicit definitions. I should think that the latter might be quite natural in that constituent open sets might be broken into pieces that become polygons in the visualisation.

I may suggest "CUDA in examples", nice Book, good for the start with CUDA. For 3D visualizations I use OpenGL and GLUT (or freeglut). So take a look at NeHe tutorials.

Another nice approach would be to check some available 3D graphic software to get the idea of modeling in 3D space.

Good luck!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top