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

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

reconf/tsar_generic_iob: improving info messages in simulation script

  • Property svn:executable set to *
File size: 3.4 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
70print "[ run.py ] compiling simulator"
71command = []
72command.extend(['make'])
73command.extend(['-C', basedir])
74subprocess.call(command, stdout=logfile, stderr=logfile)
75
76# 4. compile distributed boot executable
77dst = os.path.join(outdir, "config/boot_config.h")
78if os.path.lexists(dst): os.unlink(dst)
79os.symlink(os.path.join(basedir, "soft/config/boot_config.h"), dst)
80
81print "[ run.py ] compiling distributed boot procedure"
82command = []
83command.extend(['make'])
84command.extend(['-C', os.path.join(basedir, "soft")])
85command.extend(["CONFDIR=" + outdir])
86subprocess.call(command, stdout=logfile, stderr=logfile)
87
88# 5. execute simulator
89os.environ["DISTRIBUTED_BOOT"] = "1"
90if args.quiet: os.environ["SOCLIB_TTY"] = "FILES"
91
92if (args.x * args.y) <= 4:
93    ompthreads = args.x * args.y
94elif (args.x * args.y) <= 16:
95    ompthreads = 4
96else:
97    ompthreads = 8
98
99print "[ run.py ] starting simulation"
100command = []
101command.extend([os.path.join(basedir, "simul.x")])
102command.extend(["-SOFT", os.path.join(basedir, "soft/build/soft.elf")])
103command.extend(["-DISK", "/dev/null"])
104command.extend(["-THREADS", str(ompthreads)])
105command.extend(["-NCYCLES", "1000000"])
106subprocess.call(command, stdout=logfile, stderr=logfile)
107
108logfile.close()
109
110# 6. move simulation terminal output into the target config dir
111os.rename("term0", os.path.join(outdir, "term"))
112
113# vim: tabstop=4 : softtabstop=4 : shiftwidth=4 : expandtab
Note: See TracBrowser for help on using the repository browser.