Initializing help system before first use

Language extensions - Distributed and concurrent models


Type: Distributed computing
Rating: 3 (intermediate)
Description:
  • runprime.mos: Running a submodel (requires prime.mos)
  • runprime2.mos: Submodel handling, compiling to memory (requires prime.mos)
  • runprimedistr.mos: Distributed computing: Running a model on a remote Mosel instance (requires prime.mos or prime3.mos)
  • runprimeio.mos: Data exchange via shared memory, using 'bin' and 'shmem' drivers (requires primeio.mos or prime3io.mos)
  • runprimeior.mos: Data exchange via shared memory, using 'raw' and 'shmem' drivers (requires primeior.mos or prime3ior.mos)
File(s): runprime.mos, prime.mos, runprime2.mos, runprimedistr.mos, prime3.mos, runprimeio.mos, primeio.mos, prime3io.mos, runprimeior.mos, primeior.mos, prime3ior.mos

runprime.mos
(!******************************************************
   Mosel User Guide Example Problems
   ================================= 

   file runprime.mos 
   `````````````````
   Model handling.
 
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, 2005
*******************************************************!)

model "Run model prime"
 uses "mmjobs"

 declarations
  modPrime: Model
  event: Event
 end-declarations
                               ! Compile 'prime.mos'
 if compile("prime.mos")<>0 then exit(1); end-if

 load(modPrime, "prime.bim")   ! Load bim file

 run(modPrime, "LIMIT=50000")  ! Start execution and
 wait(2)                       ! wait 2 seconds for an event

 if isqueueempty then          ! No event has been sent...
  writeln("Model too slow: stopping it!")
  stop(modPrime)               ! ... stop the model, then wait
  wait
 end-if
                               ! An event is available: model finished
 event:=getnextevent
 writeln("Exit status: ", getvalue(event))
 writeln("Exit code  : ", getexitcode(modPrime))

 unload(modPrime)              ! Unload the submodel
end-model 

prime.mos
(!******************************************************
   Mosel User Guide Example Problems
   ================================= 

   file prime.mos 
   `````````````
   Working with sets.
 
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, 2001
*******************************************************!)

model Prime 

 parameters
  LIMIT=100                     ! Search for prime numbers in 2..LIMIT
 end-parameters

 declarations
  SNumbers: set of integer      ! Set of numbers to be checked
  SPrime: set of integer        ! Set of prime numbers
 end-declarations

 SNumbers:={2..LIMIT} 
 
 writeln("Prime numbers between 2 and ", LIMIT, ":")

 n:=2
 repeat
   while (not(n in SNumbers)) n+=1
   SPrime += {n}                ! n is a prime number
   i:=n
   while (i<=LIMIT) do          ! Remove n and all its multiples
     SNumbers-= {i}
     i+=n
   end-do
 until SNumbers={}    
 
 writeln(SPrime)
 writeln(" (", getsize(SPrime), " prime numbers.)")
 
end-model


runprime2.mos
(!******************************************************
   Mosel User Guide Example Problems
   ================================= 

   file runprime2.mos 
   ``````````````````
   Model handling. Compiling to memory.
 
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, 2005
*******************************************************!)

model "Run model prime (2)"
 uses "mmjobs", "mmsystem"

 declarations
  modPrime: Model
  event: Event
 end-declarations

                               ! Compile 'prime.mos' to memory
 if compile("","prime.mos","shmem:bim")<>0 then
  exit(1)
 end-if

 load(modPrime,"shmem:bim")    ! Load bim file from memory...
 fdelete("shmem:bim")          ! ... and release the memory block

 run(modPrime, "LIMIT=50000")  ! Start execution and
 wait(2)                       ! wait 2 seconds for an event

 if isqueueempty then          ! No event has been sent...
  writeln("Model too slow: stopping it!")
  stop(modPrime)               ! ... stop the model, then wait
  wait
 end-if
                               ! An event is available: model finished
 event:=getnextevent
 writeln("Exit status: ", getvalue(event))
 writeln("Exit code  : ", getexitcode(modPrime))

 unload(modPrime)              ! Unload the submodel
end-model 

runprimedistr.mos
(!******************************************************
   Mosel User Guide Example Problems
   ================================= 

   file runprimedistr.mos 
   ``````````````````````
   Distributed computing: 
   Running a model on a remote Mosel instance.

   *** ATTENTION: This model will return an error if ***
   *** no more than one Xpress licence is available. ***
  
   (c) 2010 Fair Isaac Corporation
       author: S. Heipcke, July 2010
*******************************************************!)

model "Run model prime remotely"
 uses "mmjobs"

 declarations
  moselInst: Mosel
  modPrime: Model
  event: Event
 end-declarations
                               ! Compile 'prime.mos' locally
 if compile("prime.mos")<>0 then exit(1); end-if

                               ! Start a remote Mosel instance: 
                               ! "" means the node running this model
 if connect(moselInst, "")<>0 then exit(2); end-if

                               ! Load bim file into remote instance
 load(moselInst, modPrime, "rmt:prime.bim")

 run(modPrime, "LIMIT=50000")  ! Start execution and
 wait(2)                       ! wait 2 seconds for an event

 if isqueueempty then          ! No event has been sent...
  writeln("Model too slow: stopping it!")
  stop(modPrime)               ! ... stop the model, then wait
  wait
 end-if
                               ! An event is available: model finished
 event:=getnextevent
 writeln("Exit status: ", getvalue(event))
 writeln("Exit code  : ", getexitcode(modPrime))

 unload(modPrime)              ! Unload the submodel
end-model 

prime3.mos
(!******************************************************
   Mosel User Guide Example Problems
   ================================= 

   file prime3.mos 
   ```````````````
   Prime number algorithm for large values of LIMIT.
 
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, 2006
*******************************************************!)

model "Prime (array)"

 parameters
  LIMIT=20000                   ! Search for prime numbers in 2..LIMIT
 end-parameters

 declarations
  INumbers = 2..LIMIT           ! Set of numbers to be checked
  SNumbers: array(INumbers) of boolean   
  SPrime: set of integer        ! Set of prime numbers
 end-declarations

 writeln("Prime numbers between 2 and ", LIMIT, ":")

 n:=2
 repeat
   SPrime += {n}                ! n is a prime number
   i:=n
   while (i<=LIMIT) do          ! Remove n and all its multiples
     SNumbers(i):= true
     i+=n
   end-do
   while (n <= LIMIT and SNumbers(n)) n+=1
 until (n>LIMIT)   
 
 writeln(SPrime)
 writeln(" (", getsize(SPrime), " prime numbers.)")
 
end-model

runprimeio.mos
(!******************************************************
   Mosel User Guide Example Problems
   ================================= 

   file runprimeio.mos 
   ```````````````````
   Data exchange via shared memory.
 
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, 2005, rev. Apr. 2011
*******************************************************!)

model "Run model primeio"
 uses "mmjobs"

 declarations
  modPrime: Model
  NumP: integer                ! Number of prime numbers found
  SetP: set of integer         ! Set of prime numbers
  STOPMOD = 2                  ! "Stop submodel" user event
  MODREADY = 3                 ! "Submodel ready" user event
 end-declarations

                               ! Compile 'prime.mos'
 if compile("primeio.mos")<>0 then exit(1); end-if

 load(modPrime, "primeio.bim") ! Load bim file

                               ! Disable submodel output
 setdefstream(modPrime,"","null:","null:")
 run(modPrime, "LIMIT=35000")  ! Start execution and
 wait                          ! ... wait for an event
 if getclass(getnextevent) <> MODREADY then
  writeln("Problem with submodel run")
  exit(1)
 end-if 

 wait(2)                       ! Let the submodel run for 2 seconds

 if isqueueempty then          ! No event has been sent...
  writeln("Model too slow: stopping it!")
  send(modPrime, STOPMOD, 0)   ! ... stop the model, then wait
  wait
 end-if
 
 initializations from "bin:shmem:resdata"
  NumP  SetP as "SPrime"
 end-initializations
 
 writeln(SetP)                 ! Output the result
 writeln(" (", NumP, " prime numbers.)")

 unload(modPrime)
end-model 

primeio.mos
(!******************************************************
   Mosel User Guide Example Problems
   ================================= 

   file primeio.mos 
   ```````````````
   Data exchange via memory.
 
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, 2005, rev. Jan. 2013
*******************************************************!)

model "Prime IO" 
 uses "mmjobs"

 parameters
  LIMIT=100                     ! Search for prime numbers in 2..LIMIT
  OUTPUTFILE = "bin:shmem:resdata"
 end-parameters

 declarations
  SNumbers: set of integer      ! Set of numbers to be checked
  SPrime: set of integer        ! Set of prime numbers
  STOPMOD = 2                   ! "Stop submodel" user event
  MODREADY = 3                  ! "Submodel ready" user event
 end-declarations

 send(MODREADY,0)               ! Send "model ready" event 

 SNumbers:={2..LIMIT} 
 
 writeln("Prime numbers between 2 and ", LIMIT, ":")

 n:=2
 repeat
   while (not(n in SNumbers)) n+=1
   SPrime += {n}                ! n is a prime number
   i:=n
   while (i<=LIMIT) do          ! Remove n and all its multiples
     SNumbers-= {i}
     i+=n
   end-do
 until (SNumbers={} or not isqueueempty)     
 
 NumP:= getsize(SPrime)
 
 initializations to OUTPUTFILE
  NumP  SPrime 
 end-initializations
 
end-model

prime3io.mos
(!******************************************************
   Mosel User Guide Example Problems
   ================================= 

   file prime3io.mos 
   `````````````````
   Prime number algorithm for large values of LIMIT.
 
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, 2006, rev. Apr. 2011
*******************************************************!)

model "Prime (array)"
 uses "mmjobs"

 parameters
  LIMIT=20000                   ! Search for prime numbers in 2..LIMIT
 end-parameters

 declarations
  INumbers = 2..LIMIT           ! Set of numbers to be checked
  SNumbers: array(INumbers) of boolean   
  SPrime: set of integer        ! Set of prime numbers
  STOPMOD = 2                   ! "Stop submodel" user event
  MODREADY = 3                  ! "Submodel ready" user event
 end-declarations

 send(MODREADY,0)               ! Send "model ready" event 

 writeln("Prime numbers between 2 and ", LIMIT, ":")

 n:=2
 repeat
   SPrime += {n}                ! n is a prime number
   i:=n
   while (i<=LIMIT) do          ! Remove n and all its multiples
     SNumbers(i):= true
     i+=n
   end-do
   while (n <= LIMIT and SNumbers(n)) n+=1
 until (n>LIMIT or not isqueueempty)   
 
 NumP:= getsize(SPrime)
 
 initializations to "bin:shmem:resdata"
  NumP  SPrime
 end-initializations
 
end-model

runprimeior.mos
(!******************************************************
   Mosel User Guide Example Problems
   ================================= 

   file runprimeior.mos 
   ````````````````````
   Data exchange via shared memory.
   - Using 'raw' driver -
 
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, 2005, rev. Apr. 2011
*******************************************************!)

model "Run model primeior"
 uses "mmjobs"

 declarations
  modPrime: Model
  NumP: integer                ! Number of prime numbers found
  SetP: set of integer         ! Set of prime numbers
  STOPMOD = 2                  ! "Stop submodel" user event
  MODREADY = 3                 ! "Submodel ready" user event
 end-declarations

                                ! Compile 'prime.mos'
 if compile("primeior.mos")<>0 then exit(1); end-if

 load(modPrime, "primeior.bim") ! Load bim file

                                ! Disable model output
 setdefstream(modPrime,"","null:","null:")
 run(modPrime, "LIMIT=35000")   ! Start execution and
 wait                           ! ... wait for an event
 if getclass(getnextevent) <> MODREADY then
  writeln("Problem with submodel run")
  exit(1)
 end-if 

 wait(2)                        ! Let the submodel run for 2 seconds

 if isqueueempty then           ! No event has been sent...
  writeln("Model too slow: stopping it!")
  send(modPrime, STOPMOD, 0)    ! ... stop the model, then wait
  wait
 end-if
 
 initializations from "raw:"
  NumP as "shmem:NumP" SetP as "shmem:SPrime"
 end-initializations
 
 writeln(SetP)                  ! Output the result
 writeln(" (", NumP, " prime numbers.)")

 unload(modPrime)
end-model 

primeior.mos
(!******************************************************
   Mosel User Guide Example Problems
   ================================= 

   file primeior.mos 
   `````````````````
   Data exchange via memory.
   - Using 'raw' driver -
 
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, 2005, rev. Apr. 2011
*******************************************************!)

model "Prime IO" 
 uses "mmjobs"

 parameters
  LIMIT=100                     ! Search for prime numbers in 2..LIMIT
 end-parameters

 declarations
  SNumbers: set of integer      ! Set of numbers to be checked
  SPrime: set of integer        ! Set of prime numbers
  STOPMOD = 2                   ! "Stop submodel" user event
  MODREADY = 3                  ! "Submodel ready" user event
 end-declarations

 send(MODREADY,0)               ! Send "model ready" event 

 SNumbers:={2..LIMIT} 
 
 writeln("Prime numbers between 2 and ", LIMIT, ":")

 n:=2
 repeat
   while (not(n in SNumbers)) n+=1
   SPrime += {n}                ! n is a prime number
   i:=n
   while (i<=LIMIT) do          ! Remove n and all its multiples
     SNumbers-= {i}
     i+=n
   end-do
 until (SNumbers={} or not isqueueempty)     
 
 NumP:= getsize(SPrime)
 
 initializations to "raw:"
  NumP as "shmem:NumP" SPrime as "shmem:SPrime"
 end-initializations
 
end-model

prime3ior.mos
(!******************************************************
   Mosel User Guide Example Problems
   ================================= 

   file prime3ior.mos 
   ``````````````````
   Prime number algorithm for large values of LIMIT.
   - Using 'raw' driver -
 
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, 2006
*******************************************************!)

model "Prime (array)"
 uses "mmjobs"

 parameters
  LIMIT=20000                   ! Search for prime numbers in 2..LIMIT
 end-parameters

 declarations
  INumbers = 2..LIMIT           ! Set of numbers to be checked
  SNumbers: array(INumbers) of boolean   
  SPrime: set of integer        ! Set of prime numbers
  STOPMOD = 2                   ! "Stop submodel" user event
  MODREADY = 3                  ! "Submodel ready" user event
 end-declarations

 send(MODREADY,0)               ! Send "model ready" event 

 writeln("Prime numbers between 2 and ", LIMIT, ":")

 n:=2
 repeat
   SPrime += {n}                ! n is a prime number
   i:=n
   while (i<=LIMIT) do          ! Remove n and all its multiples
     SNumbers(i):= true
     i+=n
   end-do
   while (n <= LIMIT and SNumbers(n)) n+=1
 until (n>LIMIT or not isqueueempty)   
 
 NumP:= getsize(SPrime)
 
 initializations to "raw:"
  NumP as "shmem:NumP" SPrime as "shmem:SPrime"
 end-initializations
 
end-model

© 2001-2019 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation (“FICO”). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.