Advanced Jobclass for ADE Jobs
In the directory $VOVDIR/etc/jobclass/examples you can find an advanced jobclass for ADE jobs called spectre_ade.tcl. To deploy this jobclass you can do this:
% cd `nc cmd vovserverdir -p jobclass`
% cp $VOVDIR/etc/jobclass/examples/spectre_ade.tcl.
% vi spectre_ade.tcl
File: spectre_ade.tcl
# Original Documentation about MMSIM.
set MMSIMDOC {
Simulator solver RF turbo parasitics level tokens
--------- ----------- ------- ------ --------- ------- ---------
Spectre Spectre N N N spectre L 1
Spectre N Y N spectre XL 2
Spectre N N Y spectre GXL 4
Spectre N Y Y spectre GXL 4
SpectreRF Spectre Y N N spectre XL 2
Spectre Y N Y spectre GXL 4
Spectre Y Y N spectre GXL 4
Spectre Y Y Y spectre GXL 4
Ultrasim Ultrasim N/A N/A N Ultrasim L 4
Ultrasim N/A N/A Y Ultrasim XL 6
AMS Spectre N/A N N AMS+Spectre L 3
Spectre N/A Y N AMS+Spectre XL 4
Spectre N/A N Y AMS+Spectre GXL 6
Spectre N/A Y Y AMS+Spectre GXL 6
Ultrasim N/A N/A N AMS+Ultrasim L 6
Ultrasim N/A N/A Y AMS+Ultrasim XL 8
AMS-APS: 4 tokens + number of tokens in chart below.
Basically the AMS mmsim token # equals 2 + mmsim (spectre L/XL/GXL, or usim L/XL) tokens
In MMSIM 7.2 APS licensing using 90003 is:
1-4 Cores takes 4 tokens.
5-16 Cores take 6 tokens.
APS-RF takes 6 tokens.
APS was released in MMSIM7.1 (and not available in MMSIM7.0).
If you are using MMSIM 7.1, the licensing for APS using 90002 tokens is this:
APS #Elements #Threads #Tokens
<=75K 1-4 4 tokens (see Note 1)
<=75K 5-8 8 tokens (see Note 2)
>75K 1-4 8 tokens (see Note 3)
>75K 5-8 12 tokens (see Note 4)
Note 1: APS L license OR APS XL license OR 4 tokens
Note 2: 2 APS L licenses OR APS XL license OR 8 tokens
Note 3: APS XL license OR 8 tokens(2 APS L licenses not allowed)
Note 4: APS XL+L license OR 2 APS XL licenses OR 12 tokens (2 APS L licenses not allowed)
The APS license process is (MMSIM 7.1):
1. The APS L license or 4 tokens are checked out since circuit size is unknown
2. Once the circuit size is detected, APS L license or 4 tokens are checked in, and the
appropriate license/number of tokens is checked out.
}
proc checkRunCommand {{file "runCommand"}} {
# This procedure examines the runCommand file created by ADE
# and tries to compute the number of license tokens needed.
# It is important to be correct so that we do not
# - reduce throughput by queueing jobs when licenses are available
# - cause license errors by launching jobs when no licenses available
# Examples of what we may expect in the runCommand file.
# The \ indicates that the content is all on one line
# spectre input.ics +iscchars +log ../psf/spectre.out -format sst2 -raw \
# ../psf +turbo +lqtimeout 0 -maxw 5 -maxn 5 +lsuspend +lqt 0 +lqs 30
# spectre input.scs +escchars +log ../psf/spectre.out -format sst2 -raw \
# ../psf +aps +lqtimeout 0 -maxw 5 -maxn 5 +lsuspend
global VOV_JOB_DESC
# Use a variable for the (long) license name
# IMPORTANT: change this if you use a non-default name for MMSIM license
set lictok "License:Virtuoso_Multi_mode_Simulation"
# Initialize flags
set hasRF 0
set hasTurbo 0
set hasAPS 0
set tool ""
set threadNum 1
set hasRunCommand 0
if { [file exists $file] } {
if { [catch {set ifp [open $file "r"] } opnmsg] } {
# complain, but do not return, fall into default case below
VovError "opening run-cmd file '$file' -- $opnmsg"
} else {
set cmd [read $ifp]
catch {close $ifp}
set hasRunCommand 1
set tool [shift cmd] ; # usually 'spectre'
# examine the arguments
while { $cmd != {} } {
set a [shift cmd]
switch -glob -- $a {
"++aps" -
"+aps" { set hasAPS 1 }
"-aps" { set hasAPS 0 }
"+turbo" { set hasTurbo 1 }
"-turbo" { set hasTurbo 0 }
"+multithread=*" { set threadNum [string range $a 13 end] }
"+mt=*" { set threadNum [string range $a 4 end] }
"-multithread" - "-mt" { set threadNum 1 }
}
}
}
} else {
VovMessage "run-cmd file does not exist -- '$file'" 3
}
# For now, we only cover the spectre case (below, handy line for cut/paste)
##### License:Virtuoso_APS_MMSIM_Lk#6
##### License:Virtuoso_Multi_mode_Simulation#6
# Do not print this - confuses the interface code
# puts "$hasRF-$hasTurbo-$hasAPS"
# compute base number of tokens
switch -glob "$hasRF-$hasTurbo-$hasAPS" {
"*-*-1" -
"1-1-0" {
set tok_base 2
}
"1-0-0" -
"0-1-0" {
set tok_base 1
}
"0-0-0" -
default {
set tok_base 1
}
}
if { $threadNum > 16 } {
# We do not have doc about this case. Should check with Cadence
set tok_core 6
} elseif { $threadNum >= 5 } {
set tok_core 6
} elseif { $threadNum >= 2 } {
set tok_core 2
} else {
if { $hasAPS } {
set tok_core 4
} else {
set tok_core 1
}
}
set tok_tot [expr $tok_base + $tok_core]
# license resource
set VOV_JOB_DESC(fstokens) $tok_tot
append VOV_JOB_DESC(resources) " ${lictok}\#$tok_tot "
# CORES resource
append VOV_JOB_DESC(resources) " CORES/$threadNum "
append VOV_JOB_DESC(resources) " Limit:spectre3_ade#$tok_tot" ;# Limit for the whole job class.
append VOV_JOB_DESC(resources) " Limit:spectre3_ade_@USER@#$tok_tot" ;# Limit for each user in this job class.
return $hasRunCommand
}
###
### A jobclass for the jobs generated by Cadence ADE
###
set classDescription "Cadence ADE jobs"
# Use snapshot env for now, but we recommend using composite named environment.
set VOV_JOB_DESC(env) "SNAPSHOT"
set VOV_JOB_DESC(group) "/class/spectre_ade"
set VOV_JOB_DESC(legalExit) "0-137"
set VOV_JOB_DESC(priority,sched) 8
# set VOV_JOB_DESC(env) "BASE+CADENCE"
# following is equivalent to -D on the command line
append VOV_JOB_DESC(check,directory) 0
# check old and new command file names
set cmdfiles {"runSimulation" "runCommand"}
foreach cfn $cmdfiles {
if { [file readable $cfn] } {
break
}
}
set hasRunCommand [checkRunCommand $cfn]
if { $hasRunCommand } {
# nothing
} else {
# This tasker resource is to limit a host to one virtuoso
#01jul2016 abb; comment out for now
#append VOV_JOB_DESC(resources) " virtuoso/1 "
}
##append VOV_JOB_DESC(resources) " x86_64 RAM/200"; ## Other hardware requirements.
# parray VOV_JOB_DESC
proc initJobClass {} {
vtk_resourcemap_set Limit:spectre3_ade 24
vtk_resourcemap_set_limit Limit:spectre3_ade_@USER@ 16
}
/tmp
. To use Altair Accelerator well, the simulation run
directories should be on networkable filesystems.