The Bobox parallelization framework has two primary goals: simplify writing parallel, data-intensive programs and to serve as a testbed for developing generic parallel algorithms and data-oriented parallel algorithms. The main design principles are:
- all synchronization is hidden from the user, most technical details (Non-Uniform Memory Access, cache hierarchy, CPU architecture) are handled by the framework
- high-performance messaging is the only means of communication and synchronization
- utilizes easy to comprehend basic paradigms such as task parallelism and non-linear pipeline
The Bobox provides a run-time environment that is used to execute a generalized (non-linear) pipeline in parallel. The pipeline consists of computational components provided by the user and connecting parts that are part of the framework. The structure of the pipeline is defined by the user but the communication and execution of individual parts is handled by the run-time; a component is ready to be executed when it has data waiting to be processed on its inputs. This simplifies the design of the individual computational components, since communication, synchronization and scheduling are handled by the framework.
Some of the design principles are similar to the TBB library - the Bobox framework also provides task level parallelism, but for a more specialized class of tasks. TBB and Bobox share several design principles, for example fixed number of worker threads or task stealing; however, there are major differences in the organization of the task pool, and in the way data is handled.