I have read about a number of topics in relation to this project.:
I have had some code working, but I am going to rewrite it as I get a better idea of what I need to make it thread friendly. I am trying to plan out the functionality of my program early so I don't have to rewrite it later.
I am going to use a rigid body simulation to show the benefits of multithreading on a multicore machine. I am going to use a very simple simulation at first, add the threading methods, and then if there is time implement a more complex simulation. I want to spend my time dealing the the problems associated with threading the application and not the problems of physical simulation.
By March 15:
For this project, I will design and implement a physical simulation and add parallelism with the use of threads. The first step will be to design a simulator that is easy to construct and easy to parallelize. This simulator will handle objects that are convex and declared as a set of vertices. The simulator will handle the collision detection and response of these objects.
Next I will add threads to this simulation in a number of ways so I can test the relative performance increase for each style. This will be handled by a simple UI that will let me switch between a number of threading methods. On a machine with multiple-cores I will test the performance of a number of methods for multi-threading the simulation.
Today high performance computers are turning toward multi-processor and multi-core machines to increase performance. This means to get the most out of any application, concurrency must be programmed into it. Using threads to break a simulation down into manageable sized chunks for the processors to execute will allow for more efficient use of these resources. It is important today to see how the effects of multithreading can be utilized to increase performance on today's computers.
I have done some work in physical simulations. However, these simulations were geared hybrid objects that also contained a level set representation. With this added representation, many of the problems of physical simulation were eliminated. I want to learn to build a more general simulation system, and use threads to enhance its performance.
I propose to show by the end of this semester that the use of multithreading will enhance the performance of a physically-based simulation on a multi-core machine. I expect that the performance improvement will only be visible when the load on the system gets to a certain points. Before this, the overhead of creating and managing multiple threads will outweigh their benefit. I want to find how many threads, and how to implement them, to get the optimal performance from a system.
While searching for information on this topic, I never found the answers I was looking for. I wanted to know how to multithread a simulation to enhance its performance. Since I couldn't find this information, I feel it is a topic that has not been explored enough and will be of great value in the future. Adding multithreading to simulations, and graphics in general, will be increasingly important into the future.