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 runsubshmdistr.mos
```````````````````````
Running a model on a remote machine.
Communication of data to/from submodel
using 'shmem' IO driver with 'bin' and 'rmt'.
(c) 2017 Fair Isaac Corporation
author: S. Heipcke, June 2017
*******************************************************!)
model "Run model testsubshm remotely"
uses "mmjobs"
declarations
mosInst: Mosel
modSub: Model
A = 30..40
B: array(A) of real
nd: integer
end-declarations
! Compile the model file
if compile("testsubshm.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
nd:=mosInst.node
! Load the bim file into the remote instance
load(mosInst, modSub, "rmt:[-1]testsubshm.bim")
! Write data onto the instance of the submod.
initializations to "bin:rmt:["+nd+"]shmem:indata"
A
end-initializations
run(modSub) ! Start model execution
wait ! Wait for model termination
dropnextevent ! Ignore termination event message
initializations from "bin:rmt:["+nd+"]shmem:resdata"
B
end-initializations
writeln(B)
end-model