Finding a Path Through the Woods: Choosing a Parallelization Technique
It’s Monday morning and you’ve just been awarded a challenging, new assignment; porting 40-year-old legacy code from an obsolete processor that you have never heard of. Fortunately, the code is in C. Unfortunately, the last person that knew anything about it is retired and is fishing off the coast of some tropical island...
Figure 1: Parallel Programming Options
Most of the legacy code that needs porting to newer systems is serial code; meaning that the code runs on a single processor with only one instruction executing at a time. Modern OpenVPX boards incorporate powerful, multi-core processors such as the Intel Xeon-D. The inefficiency of running serial code on these high-performance processors increases the number of boards required in your system; negatively impacting your SWaP-C.
GPGPUs are also becoming more common in OpenVPX systems due to their massively parallel architecture consisting of thousands of cores designed to process multiple tasks simultaneously. To modernize your serial code for parallel execution, you must first identify the individual sections that can be executed concurrently, and then optimize those sections for simultaneous execution on different cores and/or processors. Parallel programs must also employ some type of control mechanism for coordination, synchronization, and data re-alignment. To aid in parallelization, numerous open standard tools are available in the form of language extensions, compiler extensions and libraries.
Download the white paper to learn more.
- C++/Boost Threads
- Open Multi-Processing (OpenMP)
- Open Accelerators (OpenACC)
- Thread Building Blocks (TBB)
- Message Passage Interface (MPI)