The Mosel module
mmjobs enables the user to
work with several models concurrently. We show here
a series of examples of basic tasks that typically need
to be performed when working with several models in Mosel:
Parallel computing:
- Running a submodel from another Mosel model: runtestsub.mos (main model
executing testsub.mos)
- Retrieving termination status from submodels (means of coordination of different models):
runsubevnt.mos (main model executing testsub.mos)
- Retrieving user event sent by the submodel:
runsubevnt2.mos (main model executing testsubev.mos)
- Stopping a submodel: runsubwait.mos (main model
executing testsub.mos)
- Compiling to memory: runsubmem.mos (main model
executing testsub.mos)
- Setting runtime parameters: runrtparam.mos (main model
executing rtparams.mos)
- Sequential execution of submodels: runrtparseq.mos
(main model executing rtparams.mos)
- Parallel execution of submodels: runrtparprl.mos
(main model executing rtparams.mos)
- Parallel execution with cloning of submodels: runrtparclone.mos
(main model executing rtparams.mos)
- Job queue for parallel execution of submodels: runrtparqueue.mos
(main model executing rtparams.mos)
- Using the shmem (shared memory) I/O driver for data exchange (bin format): runsubshm.mos
(main model executing testsubshm.mos)
- Using the shmem (shared memory) I/O driver for data exchange (raw format): runsubshmr.mos
(main model executing testsubshmr.mos)
- Using the mempipe (memory pipe) I/O driver for data exchange:
runsubpip.mos (main model executing testsubpip.mos)
- Sharing data between cloned models:
runsubclone.mos (main model executing a copy of itself)
Distributed computing:
- Check for available remote Mosel servers: findservers.mos
- Run a single model on a remote machine: runrtdistr.mos (main model
executing rtparams.mos)
- Run a single model on a remote machine with
configuration options: runrtdistrconf.mos (main model
executing rtparams.mos)
- Running parallel submodels in a distributed architecture: runrtpardistr.mos (main model
executing rtparams3.mos)
- Queuing submodels for parallel execution in a distributed
architecture with one or several models per node: runrtparqueued.mos (main model
executing rtparams3.mos)
- 3-level tree of (parallel) submodels: runrtpartree.mos (main model
executing rtparams2.mos)
- Running a submodel that detaches itself from its parent: runrtdetach.mos (main model
executing rtparams4.mos)
- Using the shmem (shared memory) I/O driver for data exchange (bin format): runsubshmdistr.mos
(main model executing testsubshm.mos)
Further explanation of this example:
Xpress Whitepaper 'Multiple models and parallel
solving with Mosel', Section 'Basic tasks'.
(!*******************************************************
Mosel Example Problems
======================
file runrtdistr.mos
```````````````````
Running a model on a remote machine,
passing runtime parameters to the submodel.
Before running this model, you need to set up the
NODENAME with a machine name/address of your local network.
The node that is used needs to have the same version of
Xpress installed and suitably licensed, and the server
"xprmsrv" must have been started on this machine.
(c) 2010 Fair Isaac Corporation
author: S. Heipcke, May 2010
*******************************************************!)
model "Run model rtparams remotely"
uses "mmjobs"
declarations
modPar: Model
mosInst: Mosel
end-declarations
! Compile the model file
if compile("rtparams.mos")<>0 then exit(1); end-if
!!! Use the name or IP address of a machine in
!!! your local network, or "" for current node
NODENAME:= ""
! Open connection to a remote node:
if connect(mosInst, NODENAME)<>0 then exit(2); end-if
! Load the bim file into the remote instance
load(mosInst, modPar, "rmt:[-1]rtparams.bim")
! Start model execution
run(modPar, "PARAM1=" + 2 + ",PARAM2=" + 3.4 +
",PARAM3='a string'" + ",PARAM4=" + true)
wait ! Wait for model termination
dropnextevent ! Ignore termination event message
end-model