Issues resolved!
My difficulties with storing large arrays and parallelization have been resolved! I’ve also learned a lot more about the GNU Compiler Collection (GCC) and how to pass flags to the compiler using the Make system (this is extremely useful). In the process of reading the GCC documentation, I skimmed through instructions on how to vectorize code using SIMD extensions like 3D-Now!, SSE, and SSE2. That might come in handy some day, so it’s good that I know where to look if I want to learn more.
I’ve also switched from KDE’s IDE to GNOME’s IDE (Anjuta DevStudio) because it turns out to be much more straightforward to use, and thus it makes me more productive. It appears that creating GUI programs wouldn’t be very difficult using Anjuta and Glade along with GTK or wxWidgets. Evidently programs built using these tools can easily be ported to Mac and Windows.
The images below were created on my quad core home workstation. Figure 1 shows 10 orbits calculated with the newly parallelized code. The orbits are color-coded by thread number. Each thread was executed on a different CPU core. Figure 2 shows the CPU and memory utilization for a run consisting of 10,000 orbits with 25,000 steps per orbit. The memory usage increases because the position of each particle and corresponding thread number are saved after every step (I was intentionally trying to stress the memory system). Note that all 4 cores reach 100% CPU utilization and the system runs out of main memory and has to start using the swap partition toward the end of the run.
| Figure 1 | Frigure 2 |
Here is an animation of the orbits rotating so that the 3D effect is more obvious:



August 13th, 2009 at 2:21 am
[...] break to write this entry. A description of what I did earlier today is in my research log here: http://www.idius.net/issues-resolved/ Check out the images! I’m currently working on creating an animation of the orbit plot [...]