Overall Objectives
Scientific Foundations
Application Domains
New Results
Contracts and Grants with Industry
Other Grants and Activities

Section: Software

Keywords : Grid, middleware system, CORBA, data parallelism.


Participants : Raúl López Lozano, Christian Pérez, Thierry Priol.


Christian Pérez,



Registered at APP, under Reference IDDN.FR.001.450014.000.S.P.2004.000.10400 .


GNU General Public License version 2 and GNU Lesser General Public License version 2.1.


The PaCO++ objectives are to allow a simple and efficient embedding of a SPMD code into a parallel CORBA object and to allow parallel communication flows and data redistribution during an operation invocation on such a parallel CORBA object.

PaCO++ provides an implementation of the concept of parallel object applied to CORBA. A parallel object is an object whose execution model is parallel. It is externally accessible through an object reference, whose interpretation is identical to a standard CORBA object.

PaCO++ extends CORBA, but does not modify the underlying model. It is meant to be a portable extension to CORBA, so that it can be added to any CORBA implementation. The parallelism of an object is in fact considered to be an implementation feature of this object, and the OMG IDL is not dependent on it.

PaCO++ is made of two components: a compiler and a runtime library.

The compiler generates parallel CORBA stub and skeleton from an IDL file which describes the CORBA interface, and from an XML file which describes the parallelism of the interface. The compilation is done in two steps. The first step involves a Java IDL-to-IDL compiler based on SableCC , a compiler of compiler, and Xerces for the XML parser. The second part, written in Python, generates the stubs files from templates configured with inputs generated during the first step.

The runtime, currently written in C++, deals with the parallelism of the parallel CORBA object. It is very portable thanks to the utilization of abstract APIs for communications, threads and redistribution libraries.

Current status:

The development of PaCO++ started at the end of 2002. It involved 60 persons-months. The first public version, referenced as PaCO++  0.1 has been released in November 2004. The second version (0.2) has been released in March 2005. It has been successfully tested on top of three CORBA implementations: Mico , omniORB3 and omniORB4 . Moreover, it supports PadicoTM .

The version 0.2 of PaCO++ includes 7,000 lines of Java (around 250 kB), 5,000 lines of Python (around 390 kB), 14,000 lines of C++ (around 390 kB) and 2,000 lines of shell , make and configure scripts (60 kB).

PaCO++ has been supported by the RMI Project of the French ACI GRID program. It has been used or it is used by several other French projects: ACI GRID HydroGrid, ACI GRID EPSN, RNTL VTHD ++ and Inria ARC RedGrid. It is currently used within two French ANR CI projects: DISC and NUMASIS.


Logo Inria