source: branches/reconfiguration/platforms/tsar_generic_iob/scripts/onerun.py @ 807

Last change on this file since 807 was 807, checked in by cfuguet, 10 years ago

reconf/tsar_generic_iob: add script to launch one simulations

  • It is adapted to execute the distributed reconfiguration boot procedure
  • Property svn:executable set to *
File size: 3.3 KB
Line 
1#!/usr/bin/python
2# @date   22 September, 2014
3# @author cfuguet <cesar.fuguet-tortolero@lip6.fr>
4
5import os
6import subprocess
7import arch
8import faultyprocs
9import argparse
10
11# get command-line arguments
12parser = argparse.ArgumentParser(description = 'Run simulation')
13
14parser.add_argument(
15    type = str, dest = 'path',
16    help = 'relative or absolute path to the platform')
17
18parser.add_argument(
19    '--output', '-o', type = str, dest = 'outpath', default = './output',
20    help = 'relative or absolute path to the output directory')
21
22parser.add_argument(
23    '--xsize', '-x', type = int, dest = 'x', default = 2,
24    help = '# of clusters in a row')
25
26parser.add_argument(
27    '--ysize', '-y', type = int, dest = 'y', default = 2,
28    help = '# of clusters in a column')
29
30parser.add_argument(
31    '--nprocs', '-n', type = int, dest = 'nprocs', default = 4,
32    help = '# of processors per cluster')
33
34parser.add_argument(
35    '--quiet', '-q', type = bool, dest = 'quiet', default = False,
36    help = 'be quiet!!!' )
37
38args = parser.parse_args()
39
40# faulty processor list
41faultylist = [(0,0,1), (0,0,2), (0,1,2)]
42
43# translate the relative path (if needed) into an absolute path
44basedir = os.path.abspath(args.path)
45outdir = os.path.abspath(args.outpath)
46print "[ run.py ] platform base directory: {0}".format(basedir)
47print "[ run.py ] output directory: {0}".format(outdir)
48
49# 1. generate configuration and ouput directories
50try:
51    os.makedirs(os.path.join(outdir, "config"), 0755)
52except OSError:
53    pass # directory already exists => do nothing
54
55# 2. generate hard_config.h and fault_config.h files
56faultpath = os.path.join(outdir, "config/fault_config.h")
57hardpath = os.path.join(outdir, "config/hard_config.h")
58xmlpath = os.path.join(outdir, "config/map.xml")
59arch.main(args.x, args.y, args.nprocs, hardpath, xmlpath)
60faultyprocs.generate(faultylist, faultpath)
61
62# create a log file
63logfile = open(os.path.join(outdir, "log"), "w")
64
65# 3. compile simulator executable
66dst = os.path.join(basedir, "hard_config.h")
67if os.path.lexists(dst): os.unlink(dst)
68os.symlink(hardpath, dst)
69
70command = []
71command.extend(['make'])
72command.extend(['-C', basedir])
73subprocess.call(command, stdout=logfile, stderr=logfile)
74
75# 4. compile distributed boot executable
76dst = os.path.join(outdir, "config/boot_config.h")
77if os.path.lexists(dst): os.unlink(dst)
78os.symlink(os.path.join(basedir, "soft/config/boot_config.h"), dst)
79
80command = []
81command.extend(['make'])
82command.extend(['-C', os.path.join(basedir, "soft")])
83command.extend(["CONFDIR=" + outdir])
84subprocess.call(command, stdout=logfile, stderr=logfile)
85
86# 5. execute simulator
87os.environ["DISTRIBUTED_BOOT"] = "1"
88if args.quiet: os.environ["SOCLIB_TTY"] = "FILES"
89
90if (args.x * args.y) <= 4:
91    ompthreads = args.x * args.y
92elif (args.x * args.y) <= 16:
93    ompthreads = 4
94else:
95    ompthreads = 8
96
97print "executing simul.x"
98command = []
99command.extend([os.path.join(basedir, "simul.x")])
100command.extend(["-SOFT", os.path.join(basedir, "soft/build/soft.elf")])
101command.extend(["-DISK", "/dev/null"])
102command.extend(["-THREADS", str(ompthreads)])
103command.extend(["-NCYCLES", "1000000"])
104subprocess.call(command, stdout=logfile, stderr=logfile)
105
106logfile.close()
107
108# 6. move simulation terminal output into the target config dir
109os.rename("term0", os.path.join(outdir, "term"))
110
111# vim: tabstop=4 : softtabstop=4 : shiftwidth=4 : expandtab
Note: See TracBrowser for help on using the repository browser.