Parallel programming is painful in most modern languages. I will introduce a set of templates and macros that allow simplified parallel programming in C++. This will largely follow the concepts established by RapidMind
in their University of Waterloo presentation
My efforts will center around three separate tasks. The first task will be implementation of parallel execution optimized matrix templates. Though other data structures should eventually be supported, parallel matrix operations are an excellent initial target. The Boost uBLAS library already provides optimized matrix structures/operators and may be able to be reused. The real challenge here will be to create a template intelligent enough to make parallel programming easy.
The second task will be to write the parallel code execution engine. The initial version will assume a static number of parallel execution pipelines and utilize the Boost Threads library. Eventually, it would be nice to support multi-process and RPC type systems. This task relies heavily on the robustness of the templates from task 1. The initial target of matrices will allow for matrix operations to be broken into parts for each thread.
The third task will be to implement an intelligent execution engine controller. Software using this library should not have to be told how many pipelines to use. If we are running on a dual-core machine, let's use two pipelines. As the initial version of this library will use threading, the controller will only consider the number of CPUs. Available special purpose processors is outside the scope of the initial implementation.
The only parallel programming library currently in Boost is the thread library. The parallel programming library will allow programmers to easily take advantage of large computation tasks without having to manage concurrent data access issues. This can benefit a wide field of applications, from stock analysis to video games.
- Create the components above. The library should be able to be easily used without requiring major code changes in an application. Ease of use is key!
- Use existing Boost libraries where possible.
- Publish design goals and thoughts to Boost developers list. Template design needs to rely heavily on community feedback to keep it easy to use and flexible. I will also use this time to familiarize myself with all of the Boost libraries and research what libraries can be reused. (until mid-june)
- Implement features in the order they are listed above. (until beginning of august)
- Optimize library, run performance tests, and debug. (until end of SoC)
I am a computer science student at Humboldt State University
, in California in the US. I started programming in Basic in DOS at the age of 5, taught myself C in Junior High, and taught myself C++ in High School. After high school, I attended Humboldt until I got picked up by a software firm in the Silicon Valley. After working as a software engineer for a few years, the poor US economy finally caught up with me. I've since returned to Humboldt to finish my degree.
My last full-time job involved developing medical imaging applications using C/C++ in Linux and Windows. I was involved with multiple projects to make our image processing technology execute parallel on multiple CPUs and in computing clusters. I believe that my work experience and strong develop skills will make me success in this project.