Page Tools


    L2C (aka LLCMCPP3)

    Note: LLCMCPP as been renamed as L2C. However, the plugin name has not yet been renamed. So, its name is llcmcpp3.

    L2C a software component model targeting use-cases where overhead matters such as High Performance Computing. The Adage plugin fully supports it.

    • single process assembly
    • multi process assembly
      • MPI-only interactions
      • CORBA-only interactions
      • MPI & CORBA interactions.

    The plugin reads the l2c assembly file to detect MPI groups. Then, it makes use of the mpirun command to launch a L2C component container per MPI group and plain L2C container for non MPI processes. Next, it sets up CORBA configuration before starting the application.

    L2C Control Parameters

    L2C specific parameters have to be declared associated with the llcmcpp3 plugin. As the plugin relies on the MPI plugin, MPI is configured though the MPI plugin.

    <ctrl_params xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ctrl_params.xsd">
    	...
    	<plugins>
    	  <plugin name="llcmcpp3" file="ctrl-params-llcmcpp3.xml"/>
    	  <plugin name="MPI" file="ctrl-params-mpi.xml"/>
    	</plugins>
    </ctrl_params>

    L2C Specific Parameters

    L2C plugin contains two global parameters:

    • installdir (single): declares where L2C has been installed if it is not in the standard path.
    • repository (multiple): declare directory where to look to for component implementation (shared object file).

    Next, each specific kinds of process container (plain, mpi, or corba) may have dedicated parameters.

    PLAIN

    • file enables to declare additional shared object (dedicated to advanced users).

    MPI

    None currently.

    CORBA

    Those parameters should be set automatically but it is not yet the case.

    • master_cad declare where is the internal master assembly (typically it is share/llcmcpp/cad/cppcorbaloader_master.llcmcpp3).
    • slave_cad declares where is the internal worker assembly (typically it is share/llcmcpp/cad/cppcorbaloader_slave.llcmcpp3).

    Complete Example of an L2C (aka LLCMCPP3) Control Parameter File

    <ctrl_params_llcmcpp3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="llcmcpp3_ctrl_params.xsd">
      <installdir>/opt/usr/stow/L2C</installdir>
      <repository>/path1/lib/</repository>
      <repository>/path2/lib/</repository>
     
      <plain>
        <file type="lib">libInstanceHostLibrary.so</file>
        <file type="lib">libLocalNamespaceManager.so</file>
        <file type="lib">libLifecycleManager.so</file>
        <file type="lib">libCppManager.so</file>
        <file type="lib">libTypeInterpreter.so</file>
        <file type="lib">libAssemblyBuilder.so</file>
        <file type="lib">libCad3Handler.so</file>
        <file type="lib">libCad3Handler.so</file>
        <file type="lib">libTinyXmlComponent.so</file>
        <file type="lib">libDriver.so</file>
      </plain>
     
      <mpi>
      </mpi>
     
      <corba>
        <master_cad>share/llcmcpp/cad/cppcorbaloader_master.llcmcpp3</master_cad>
        <slave_cad>share/llcmcpp/cad/cppcorbaloader_slave.llcmcpp3</slave_cad>
      </corba>
     
    </ctrl_params_llcmcpp3>

    L2C Assembly Examples

    Single Process Assembly

    <llcmcpp3_cad xmlns="http://graal.inria.fr/llcmcpp3"> 
    	<process>
    		<instance id="hw" type="HelloWorld"/><!-- a single unconnected component instance -->
    	</process>
    </llcmcpp3_cad>

    MPI only Assembly (2 processes)

    <llcmcpp3_cad xmlns="http://graal.inria.fr/llcmcpp3">
    	<mpi>
    		<process>
    			<instance id="serv" type="Server_HW"/>
    			<instance id="serv_proxy" type="MpiServerProxy">
    				<property id="greetservice"><propref instance="serv" property="greeter"/></property>
    				<start property="go"/>
    			</instance>
    		</process>
    		<process>
    			<instance id="client_proxy" type="MpiClientProxy"/>
    			<instance id="client" type="Client_HW">
    				<property id="greetservice"><propref instance="client_proxy" property="greeter"/></property>
    				<property id="iter"><value type="int16">5</value></property>
    				<start property="go"/>
    			</instance>
    		</process>
    		<communicator>
    			<peer instance="client_proxy" property="comm"/>
    			<peer instance="serv_proxy" property="comm"/>
    		</communicator>
    	</mpi>
    </llcmcpp3_cad>

    CORBA only Assembly (2 processes)

    <llcmcpp3_cad xmlns="http://graal.inria.fr/llcmcpp3">
    	<process id="S" >
    		<instance id="serv" type="Server_HW"/>	
    		<instance id="serv_proxy" type="HWCorbaProxyServer">
    			<property id="greetservice"><propref instance="serv" property="greeter"/></property>
    		</instance>
    	</process>
     
    	<process id="C" >
    		<instance id="client_proxy" type="HWCorbaProxyClient"/>
     
    		<instance id="client" type="Client_HW">
    			<property id="iter"><value type="int16">5</value></property>
    			<property id="greetservice"><propref instance="client_proxy" property="greeter"/></property>
    			<start property="go"/>
    		</instance>
    	</process>
     
    	<corba>
    		<corbaref uid="client_proxy" uport="corba_greetservice" pid="serv_proxy" pport="corba_greeter" />
    	</corba>
    </llcmcpp3_cad>

    MPI+CORBA Assembly (2x2 MPI processes interconnected with CORBA)

    <llcmcpp3_cad xmlns="http://graal.inria.fr/llcmcpp3">
     
    	<mpi id="S" >
    		<process>
    			<instance id="serv" type="Server_HW"/>
     
    			<instance id="serv_serv_proxy" type="MpiServerProxy">
    				<property id="greetservice"><propref instance="serv" property="greeter"/></property>
    				<start property="go"/>
    			</instance>
    		</process>
     
    		<process>
    			<instance id="serv_client_proxy" type="MpiClientProxy"/>
     
    			<instance id="serv_proxy" type="HWCorbaProxyServer">
    				<property id="greetservice"><propref instance="serv_client_proxy" property="greeter"/></property>
    			</instance>
    		</process>
     
    		<communicator>
    			<peer instance="serv_client_proxy" property="comm"/>
    			<peer instance="serv_serv_proxy" property="comm"/>
    		</communicator>
    	</mpi>
     
    	<mpi id="C" >
    		<process>
    			<instance id="client_proxy" type="HWCorbaProxyClient"/>
     
    			<instance id="client_serv_proxy" type="MpiServerProxy">
    				<property id="greetservice"><propref instance="client_proxy" property="greeter"/></property>
    				<start property="go"/>
    			</instance>
    		</process>
     
    		<process>
    			<instance id="client_client_proxy" type="MpiClientProxy"/>
     
    			<instance id="client" type="Client_HW">
    				<property id="iter"><value type="int16">5</value></property>
    				<property id="greetservice"><propref instance="client_client_proxy" property="greeter"/></property>
    				<start property="go"/>
    			</instance>
    		</process>
     
    		<communicator>
    			<peer instance="client_client_proxy" property="comm"/>
    			<peer instance="client_serv_proxy" property="comm"/>
    		</communicator>
    	</mpi>
     
    	<corba>
    		<corbaref uid="client_proxy" uport="corba_greetservice" pid="serv_proxy" pport="corba_greeter" />
    	</corba>
    </llcmcpp3_cad>

    Powered by Heliovista - Création site internet