Version 11 (modified by mmamonski, 12 years ago) (diff)

--

Currently submitting co-allocated MUSCLE application is only possible using the XML JobProfile (compare QCG-SimpleClient). Beside the different job description format you have to suffix the qcg-sub command with the QCG keyword:

$ qcg-sub muscle.xml QCG

Example (Fusion - Transport Turbulence Equilibrium)

  • Install your application on every cluster you wish to use
  • register it on every cluster using  QCG Community Modules (QCE) mechanism:
    qcg-module-create -g plggmuscle Fusion/Turbulence
    

The module must bear the same name on every cluster. Inside the module you can set/prepend any environment variable, add dependencies to other modules, e.g.:

#%Module 1.0


proc ModulesHelp { } {
        puts stderr "\tName: Fusion/Turbulence"
        puts stderr "\tVersion: 0.1"
        puts stderr "\tMaintainer: plgmamonski"
}

module-whatis   "Fusion/Turbulence, 0.1"

#add path to the native MUSCLE kernels
prepend-path PATH /home/plgrid-groups/plggmuscle/fusionkernels/bin/

set curMod [module-info name]

if { [ module-info mode load ] } {
        puts stderr "$curMod load complete."
}

if { [ module-info mode remove ] } {
        puts stderr "$curMod unload complete."
}

You can set there two environment variables interpreted by the MUSCLE framework:

  • MUSCLE_CLASSPATH
  • MUSCLE_LIBPATH

to set Java classpath and the path of dynamically loadable libraries. Thanks to this mechanism you can use single abstract CxA that do not contain any site-specific paths. Also you can load the module in interactive QCG job:

bash-4.1$ module load Fusion/Turbulence
Fusion/Turbulence load complete
  • Prepare XML job description:
    <qcgJob appId="MAPPER" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<task persistent="true" taskId="task">
    		<requirements>
    			<topology>
    				<processes processesId="one" masterGroup="true">
    					<processesCount>
    						<value>1</value>
    					</processesCount>
    	                			<candidateHosts>
                						<hostName>zeus.cyfronet.pl</hostName>
                		    			</candidateHosts>
    				</processes>
    				<processes processesId="two">
    					<processesCount>
    						<value>1</value>
    					</processesCount>
    		               	 		<candidateHosts>
                						<hostName>reef.man.poznan.pl</hostName>
                		    			</candidateHosts>
    				</processes>
    				<processes processesId="three">
    					<processesCount>
    						<value>1</value>
    					</processesCount>
    		               	 		<candidateHosts>
                						<hostName>hydra.icm.edu.pl</hostName>
                		    			</candidateHosts>
    				</processes>
    	
    			</topology>
    		</requirements>
    		<execution type="open_mpi">
    			<executable>
    				<application name="muscle"/>
    			</executable>
    			<arguments>
    				<value>Triangle.cxa.rb</value>
    			</arguments>
    			<stdout>
    				<directory>
    					<location type="URL">gsiftp://qcg.man.poznan.pl/~/output-${JOB_ID}-${TASK_ID}</location>
    				</directory>
    			</stdout>
    			<stderr>
    				<directory>
    					<location type="URL">gsiftp://qcg.man.poznan.pl/~/error-${JOB_ID}-${TASK_ID}</location>
    				</directory>
    			</stderr>
    			<stageInOut>
    				<file name="Triangle.cxa.rb" type="in">
    					<location type="URL">gsiftp://qcg.man.poznan.pl/~/Triangle.cxa.rb</location>
    				</file>
                                    <directory name="outputs" type="out">
    					<location type="URL">gsiftp://qcg.man.poznan.pl/~/results-${JOB_ID}-${TASK_ID}</location>
    				</directory>
    
    		</stageInOut>
    		</execution>
    		<executionTime>
    			<executionDuration>P0Y0M0DT0H10M</executionDuration>
    		</executionTime>
    	</task>
    </qcgJob>