This work is concerned with the parallelization of scientific applications using OOPar.
The name OOPar stands for Object Oriented Parallelism, this toolkit is a object oriented toolkit conceived for object oriented parallelization of scientific codes. The toolkit defines its own communication protocol which is implemented on top of any available open source communication library (MPI, PVM and so on). The OOPar kernel is comprised of six base classes which provide the necessary functionalities for the establishment of a parallel environment.
Three of those are management specific classes, namely OOPDataManager, OOPTaskManager and OOPCommManager which are, as the name says, manager of data, manager of tasks and manager of communication respectively. The remaining three classes define abstract entities of the environment, OOPTask, OOPSaveable and OOPMetaData. OOPTask and OOPSaveable implement abstract task and abstract data respectively and are base classes for any of those entities subjected to parallelization. OOPMetaData implements some sort of header on the protocol avoiding overloading the OOPSaveable data structures, very crucial for the OOPar synchronization Scheme.
Two main paradigms drive the parallelization of scientific codes, they are distributed computing (distributed memory) and parallel computing (shared memory). OOPar is unaware of parallelization paradigm, its communication protocol is defined on a superior level. Nevertheless multi-threaded processing nodes can be fully exploited, since the TaskManager can assign two different time consuming tasks to each processor on a processing node.
Also new to the OOPar specification is its synchronization scheme. On regular implementations of a parallel environment there is always the master/slave concept, where most of the synchronization is under the master's node responsibility. OOPar works without the master node concept and all its synchronization is naturally obtained by means of data version control. Further on the data versioning control is the data cardinality concept. This is a mechanism of better defining the scope of data versioning, allowing for a more robust synchronizationcontrol. Some initial implementations on the parallelization of a CFD code is presented.