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>