source: trunk/platforms/tsar_generic_xbar/scripts/run_simus.py @ 1023

Last change on this file since 1023 was 1023, checked in by meunier, 8 years ago
  • Update the scripts to use a common file hard_params.py in both gen_arch_info and gen_hdd
  • Adding the P_WIDTH parameter in the topcell
  • Property svn:executable set to *
File size: 23.2 KB
Line 
1#!/usr/bin/python
2
3import subprocess
4import os
5import sys
6import shutil
7
8from gen_hdd import *
9from gen_hard_config import *
10from gen_arch_info import *
11
12#TODO (?): recopier les fichiers d'entrees dans le script en fonction de l'appli selectionnee
13# Par exemple, tk14.O pour LU, img.raw pour ep_filter, etc.
14
15
16# User parameters
17bscpu = 0 # bootstrap CPU
18nb_procs = [ 4 ]
19#nb_procs = [ 1, 4, 8, 16, 32, 64, 128, 256 ]
20rerun_stats = False
21use_omp = False
22protocol = 'rwt'
23cpu_per_cluster = 4
24# mode must be one of 'test' and 'simu'
25mode = 'test'
26
27#apps = [ 'cholesky', 'fft', 'fft_ga', 'filter', 'filt_ga', 'histogram', 'kmeans', 'lu', 'mandel', 'mat_mult', 'pca', 'radix_ga' ]
28#apps = [ 'histogram', 'mandel', 'filter', 'radix_ga', 'fft_ga', 'kmeans' ]
29#apps = [ 'blackscholes', 'linear_regression', 'string_match', 'swaptions', 'fluidanimate' ]
30apps = [ 'hello', 'taquin', '2048' ]
31
32
33# Variables which could be changed but ought not to because they are reflected in the create_graphs.py script
34if mode == 'test':
35    data_dir = 'data_test'
36else:
37    data_dir = 'data'
38log_init_name = protocol + '_stdo_'
39log_term_name = protocol + '_term_'
40
41# Global Variables
42
43all_apps = [ '2048', 'blackscholes', 'boot_only', 'cholesky', 'fft', 'fft_ga', 'filter', 'filt_ga', 'fluidanimate', 'hello', 'histogram', 'histo-opt', 'kmeans', 'kmeans-opt', 'linear_regression', 'lu', 'mandel', 'mat_mult', 'mat_mult-opt', 'pca', 'pca-opt', 'radix', 'radix_ga', 'showimg', 'string_match', 'swaptions', 'taquin']
44# to come: 'barnes', 'fmm', 'ocean', 'raytrace', 'radiosity', 'waters', 'watern'
45
46all_protocols = [ 'dhccp', 'rwt', 'hmesi', 'wtidl', 'snoop' ]
47
48top_path = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), ".."))
49config_name = os.path.join(os.path.dirname(os.path.realpath(__file__)), "config.py")
50
51scripts_path          = os.path.join(top_path, 'scripts')
52almos_path            = os.path.join(top_path, 'almos')
53soclib_conf_name      = os.path.join(top_path, "soclib.conf")
54topcell_name          = os.path.join(top_path, "top.cpp")
55partition_root_path   = os.path.join(top_path, "hdd_root")
56arch_info_name        = os.path.join(almos_path, "arch-info.info")
57arch_info_bib_name    = os.path.join(almos_path, 'arch-info.bib')
58hdd_img_file_name     = os.path.join(almos_path, "hdd-img.bin")
59shrc_file_name        = os.path.join(almos_path, "shrc")
60hard_config_name      = os.path.join(almos_path, "hard_config.h")
61bootloader_file_name  = os.path.join(almos_path, "bootloader-tsar-mipsel.bin")
62preloader_file_name   = os.path.join(almos_path, "preloader.elf")
63preloader_build_path  = os.path.join(almos_path, "build_preloader")
64bootloader_build_path = os.path.join(almos_path, "build_bootloader")
65
66
67# Checks
68if mode != 'test' and mode != 'simu':
69    help_str = '''
70*** Error: variable mode must be one either 'test' (testing purpose, small data sets) or 'simu' (performance evaluation, large data sets)
71'''
72    print help_str
73    sys.exit()
74
75if protocol not in all_protocols:
76    help_str = '''
77*** Error: variable protocol has an unsupported value
78'''
79    print help_str
80    sys.exit()
81
82for the_app in apps:
83    if the_app not in all_apps:
84        print "*** Error: application %s is not defined" % (the_app)
85        sys.exit()
86
87if not os.path.isfile(config_name):
88    help_str = '''
89You should create a file named config.py in this directory with the following definitions:
90 - apps_dir:          path to almos-tsar-mipsel/apps directory
91 - almos_src_dir:     path to almos source directory (for kernel and bootloader binaries)
92 - preloader_src_dir: path to the preloader main directory (where to run make)
93 - tsar_dir:          path to tsar repository
94Optional definitions (necessary if you want to use alternative protocols):
95 - rwt_dir:           path to the RWT repository
96 - hmesi_dir:         path to HMESI directory
97 - wtidl_dir:         path to the ideal write-through protocol directory
98*** Stopping execution
99'''
100    print help_str
101    sys.exit()
102
103# Loading config
104exec(file(config_name))
105
106# Check that variables and paths exist
107for var in [ 'apps_dir', 'almos_src_dir', 'tsar_dir' ]:
108    if eval(var) == "":
109        print "*** Error: variable %s not defined in config file" % (var)
110        sys.exit()
111    if not os.path.exists(eval(var)):
112        print "*** Error: variable %s does not define a valid path" % (var)
113        sys.exit()
114
115if protocol == "rwt":
116    if rwt_dir == "":
117        print "*** Error: variable rwt_dir not defined in config file"
118        sys.exit()
119    if not os.path.exists(rwt_dir):
120        print "*** Error: variable rwt_dir does not define a valid path"
121        sys.exit()
122
123if protocol == "hmesi":
124    if hmesi_dir == "":
125        print "*** Error: variable hmesi_dir not defined in config file"
126        sys.exit()
127    if not os.path.exists(hmesi_dir):
128        print "*** Error: variable hmesi_dir does not define a valid path"
129        sys.exit()
130
131if protocol == "wtidl":
132    if wtidl_dir == "":
133        print "*** Error: variable wtidl_dir not defined in config file"
134        sys.exit()
135    if not os.path.exists(wtidl_dir):
136        print "*** Error: variable wtidl_dir does not define a valid path"
137        sys.exit()
138
139
140
141
142#splash_app_dir = {}
143#splash_app_dir['barnes'] = 'apps/barnes'
144#splash_app_dir['fmm'] = 'apps/fmm'
145#splash_app_dir['ocean'] = 'apps/ocean/contiguous_partitions'
146#splash_app_dir['raytrace'] = 'apps/raytrace'
147#splash_app_dir['radiosity'] = 'apps/radiosity'
148#splash_app_dir['volrend'] = 'apps/volrend'
149#splash_app_dir['watern'] = 'apps/water-nsquared'
150#splash_app_dir['waters'] = 'apps/water-spatial'
151
152
153def print_and_call(cmd):
154    print subprocess.list2cmdline(cmd)
155    retval = subprocess.call(cmd)
156    return retval
157
158def print_and_popen(cmd, outfile):
159    print subprocess.list2cmdline(cmd),
160    print " >", outfile
161    output = subprocess.Popen(cmd, stdout = subprocess.PIPE).communicate()[0]
162    return output
163
164
165def get_x_y(nb_procs, cpu_per_cluster):
166    x = 1
167    y = 1
168    to_x = True
169    while (x * y * cpu_per_cluster < nb_procs):
170        if to_x:
171            x = x * 2
172        else:
173            y = y * 2
174        to_x = not to_x
175    return x, y
176
177
178def get_nb_bits(size):
179    i = 0
180    while 2**i < size:
181        i += 1
182    return i
183
184
185
186def gen_soclib_conf():
187    if os.path.isfile(soclib_conf_name):
188        print "# Updating file %s" % (soclib_conf_name)
189        # First, remove lines containing "addDescPath"
190        f = open(soclib_conf_name, "r")
191        lines = f.readlines()
192        f.close()
193
194        f = open(soclib_conf_name, "w")
195
196        for line in lines:
197            if not ("addDescPath" in line):
198                f.write(line)
199        f.close()
200    else:
201        print "# Creating file %s" % (soclib_conf_name)
202        f = open(soclib_conf_name, "w")
203        f.close()
204
205    # Defining common and specific modules
206    common_modules = [
207            'lib/generic_llsc_global_table',
208            'modules/dspin_router_tsar', 
209            'modules/sdmmc',
210            'modules/vci_block_device_tsar',
211            'modules/vci_ethernet_tsar',
212            'modules/vci_io_bridge',
213            'modules/vci_iox_network',
214            'modules/vci_spi',
215            'platforms/tsar_generic_xbar/tsar_xbar_cluster'
216    ]
217
218    specific_modules = [
219            'communication',
220            'lib/generic_cache_tsar',
221            'modules/vci_cc_vcache_wrapper',
222            'modules/vci_mem_cache',
223    ]
224
225    f = open(soclib_conf_name, "a")
226    # Adding common modules
227    for common_module in common_modules:
228        f.write("config.addDescPath(\"%s/%s\")\n" % (tsar_dir, common_module))
229    #f.write("\n")
230
231    if protocol == "dhccp":
232        arch_dir = tsar_dir
233    elif protocol == "rwt":
234        arch_dir = rwt_dir
235    elif protocol == "hmesi":
236        arch_dir = hmesi_dir
237    elif protocol == "wtidl":
238        arch_dir = wtidl_dir
239    else:
240        assert(False)
241
242    for specific_module in specific_modules:
243        f.write("config.addDescPath(\"%s/%s\")\n" % (arch_dir, specific_module))
244
245    #f.write("\n")
246    f.close()
247
248
249
250def gen_arch_info_bib(x, y, x_width, y_width):
251    print "### Generating arch-info files"
252    old_path = os.getcwd()
253
254    print "cd", scripts_path
255    os.chdir(scripts_path)
256    gen_arch_info(x, y, x_width, y_width, cpu_per_cluster, bscpu, arch_info_name)
257    os.chdir(almos_path)
258   
259    cmd = ['./info2bib', '-i', arch_info_name, '-o', arch_info_bib_name]
260    print_and_call(cmd)
261
262    print "cd", old_path
263    os.chdir(old_path)
264
265    print "### End of arch-info files generation"
266   
267
268#def gen_sym_links():
269#    print "### Generating symbolic links"
270#    target = os.path.join(almos_src_dir, 'tools/soclib-bootloader/bootloader-tsar-mipsel.bin')
271#    if not os.path.isfile(bootloader_link_name):
272#        print "ln -s", target, bootloader_link_name
273#        os.symlink(target, bootloader_link_name)
274#
275#    print "### End of symbolic links generation"
276#    #target = os.path.join(almos_src_dir, 'kernel/obj.tsar/almix-tsar-mipsel.bin')
277#    #link_name = 'kernel-soclib.bin'
278#    #if not os.path.isfile(link_name):
279#    #    print "ln -s", target, link_name
280#    #    os.symlink(target, link_name)
281
282
283def compile_almos():
284    print "### Compiling Almos"
285    old_path = os.getcwd()
286
287    print "cd", almos_src_dir
288    os.chdir(almos_src_dir)
289    cmd = ['make']
290    retval = print_and_call(cmd)
291    if retval != 0:
292        sys.exit()
293
294    print "cd", old_path
295    os.chdir(old_path)
296
297    print "### End of Almos compilation"
298 
299
300def compile_bootloader():
301    # This function depends upon the file arch-info.bib and should be called
302    # every time it is modified
303    print "### Compiling Almos bootloader"
304    old_path = os.getcwd()
305
306    bootloader_dir = os.path.join(almos_src_dir, 'tools/soclib-bootloader')
307    print "cd", bootloader_dir
308    os.chdir(bootloader_dir)
309    cmd = ['make', 'ARCH_BIB=%s' % (arch_info_bib_name), 'BUILD_DIR=%s' % (bootloader_build_path), 'TARGET_DIR=%s' % (almos_path)]
310    retval = print_and_call(cmd)
311    if retval != 0:
312        sys.exit()
313
314    print "cd", old_path
315    os.chdir(old_path)
316
317    print "### End of Almos bootloader compilation"
318 
319
320
321def compile_preloader():
322    # This function depends upon the file hard_config.h, and should be called
323    # every time it is modified
324    print "### Compiling preloader"
325    old_path = os.getcwd()
326
327    hard_conf_path_set = "HARD_CONFIG_PATH=" + almos_path
328    bscpu_set = "BS_PROC=%d" % bscpu
329
330    print "cd", preloader_src_dir
331    os.chdir(preloader_src_dir)
332    cmd = ['make', hard_conf_path_set, bscpu_set, 'USE_DT=0', 'BUILD_DIR=%s' % (preloader_build_path)]
333    retval = print_and_call(cmd)
334    if retval != 0:
335        sys.exit()
336
337    print "cd", old_path
338    os.chdir(old_path)
339
340    print "### End of preloader compilation"
341
342
343
344
345def compile_app(app_name):
346    print "### Compiling application %s" % (app_name)
347
348    #if app_name in splash2:
349    #   app_dir_name = os.path.join(splash2_dir, splash_app_dir[app_name])
350    #elif app_name in splash2_ga:
351    #   app_dir_name = os.path.join(splash2_ga_dir, splash_ga_app_dir[app_name])
352    #else:
353    #   app_dir_name = os.path.join(apps_dir, app_name)
354
355     
356    app_dir_name = os.path.join(apps_dir, app_name)
357
358    old_path = os.getcwd()
359    print "cd", app_dir_name
360    os.chdir(app_dir_name)
361
362    # Compilation process is different in splash and other apps
363    #if app_name in splash2:
364    #   print "make clean"
365    #   subprocess.call([ 'make', 'clean' ])
366
367    #   print "rm Makefile"
368    #   subprocess.call([ 'rm', 'Makefile' ])
369
370    #   print "ln -s Makefile.soclib Makefile"
371    #   subprocess.call([ 'ln', '-s', 'Makefile.soclib', 'Makefile' ])
372
373    #   print "make"
374    #   subprocess.call([ 'make' ])
375
376    #else:
377    #   print "make clean"
378    #   subprocess.call([ 'make', 'clean' ])
379 
380    #   print "make TARGET=tsar"
381    #   subprocess.call([ 'make', 'TARGET=tsar' ])
382
383    cmd = ['make', 'clean']
384    print_and_call(cmd)
385 
386    cmd = ['make', 'TARGET=tsar']
387    retval = print_and_call(cmd)
388    if retval != 0:
389        sys.exit()
390
391    print "cd", old_path
392    os.chdir(old_path)
393
394    print "### End of compilation for application %s" % (app_name)
395# end of compile_app
396
397
398
399
400def gen_shrc(app_name, nprocs):
401    # Creation/Modification of almos shrc file
402    print "### Generating shrc for application %s and %d threads" % (app_name, nprocs)
403    if mode == 'test':
404        if (app_name == "blackscholes"):
405            shrc = "exec -p 0 /bin/blacksch -n%(nproc)d /etc/black_16.txt\n" % dict(nproc = nprocs)
406        elif (app_name == "boot_only"):
407            shrc = "exec -p 0 /bin/boot_onl\n"
408        elif (app_name == "filter"):
409            shrc = "exec -p 0 /bin/filter -l 128 -c 128 -n %(nproc)d -i /etc/img128.raw\n" % dict(nproc = nprocs)
410        elif (app_name == "filt_ga"):
411            shrc = "exec -p 0 /bin/filt_ga -l 128 -c 128 -n %(nproc)d -i /etc/img128.raw\n" % dict(nproc = nprocs)
412        elif (app_name == "fft"):
413            shrc = "exec -p 0 /bin/fft -n%(nproc)d -m4\n" % dict(nproc = nprocs)
414        elif (app_name == "fft_ga"):
415            shrc = "exec -p 0 /bin/fft_ga -n%(nproc)d -m4\n" % dict(nproc = nprocs) # m = vector size
416        elif (app_name == "fluidanimate"):
417            shrc = "exec -p 0 /bin/fluidani -n%(nproc)d -i /etc/flui_15K.flu\n" % dict(nproc = nprocs)
418        elif (app_name == "hello"):
419            shrc = "exec -p 0 /bin/hello -n%(nproc)d\n" % dict(nproc = nprocs)
420        elif (app_name == "histogram"):
421            shrc = "exec -p 0 /bin/histogra -n%(nproc)d /etc/histo_s.bmp\n" % dict(nproc = nprocs)
422        elif (app_name == "histo-opt"):
423            shrc = "exec -p 0 /bin/histo-op -n%(nproc)d /etc/histo_s.bmp\n" % dict(nproc = nprocs)
424        elif (app_name == "kmeans"):
425            shrc = "exec -p 0 /bin/kmeans -n %(nproc)d -p %(npoints)d\n" % dict(nproc = nprocs, npoints = 1000)
426        elif (app_name == "kmeans-opt"):
427            shrc = "exec -p 0 /bin/kmeans-o -n %(nproc)d -p %(npoints)d\n" % dict(nproc = nprocs, npoints = 1000)
428        elif (app_name == "linear_regression"):
429            shrc = "exec -p 0 /bin/linear_r -n%(nproc)d /etc/key_1MB.txt\n" % dict(nproc = nprocs)
430        elif (app_name == "lu"):
431            shrc = "exec -p 0 /bin/lu -n%(nproc)d -m16\n" % dict(nproc = nprocs)
432        elif (app_name == "mandel"):
433            shrc = "exec -p 0 /bin/mandel -n%(nproc)d -x 30 -y 20\n" % dict(nproc = nprocs)
434        elif (app_name == "mat_mult"):
435            shrc = "exec -p 0 /bin/mat_mult -n%(nproc)d -s 10\n" % dict(nproc = nprocs) # s = matrix size
436        elif (app_name == "mat_mult-opt"):
437            shrc = "exec -p 0 /bin/mat_mult -n%(nproc)d -s 10\n" % dict(nproc = nprocs)
438        elif (app_name == "pca"):
439            shrc = "exec -p 0 /bin/pca -n%(nproc)d -r 16 -c 8\n" % dict(nproc = nprocs) # r = num rows, c = num cols
440        elif (app_name == "pca-opt"):
441            shrc = "exec -p 0 /bin/pca-opt -n%(nproc)d -r 16 -c 8\n" % dict(nproc = nprocs)
442        elif (app_name == "radix"):
443            shrc = "exec -p 0 /bin/radix -n%(nproc)d -k1024\n" % dict(nproc = nprocs)
444        elif (app_name == "radix_ga"):
445            shrc = "exec -p 0 /bin/radix_ga -n%(nproc)d -k1024\n" % dict(nproc = nprocs) # n = num_keys
446        elif (app_name == "string_match"):
447            shrc = "exec -p 0 /bin/string_m -n%(nproc)d /etc/key_1MB.txt\n" % dict(nproc = nprocs)
448        elif (app_name == "swaptions"):
449            shrc = "exec -p 0 /bin/swaption -n%(nproc)d -s 16 -t 1000\n" % dict(nproc = nprocs) # s = num swaptions (default 16), t = num simus (default 10000)
450        else:
451            print "*** Error: The application %s is not available in test mode", app_name
452            sys.exit()
453    else:
454        if (app_name == "barnes"):
455            shrc = "exec -p 0 /bin/barnes -n%(nproc)d -b%(nbody)d\n" % dict(nproc = nprocs, nbody = 1024)
456        elif (app_name == "blackscholes"):
457            shrc = "exec -p 0 /bin/blacksch -n %(nproc)d /etc/black_4K.txt\n" % dict(nproc = nprocs)
458        elif (app_name == "boot_only"):
459            shrc = "exec -p 0 /bin/boot_onl\n"
460        elif (app_name == "cholesky"):
461            shrc = "exec -p 0 /bin/cholesky -n%(nproc)d /etc/tk14.O\n" % dict(nproc = nprocs)
462        elif (app_name == "fft"):
463            shrc = "exec -p 0 /bin/fft -n%(nproc)d -m18\n" % dict(nproc = nprocs)
464        elif (app_name == "fft_ga"):
465            shrc = "exec -p 0 /bin/fft_ga -n%(nproc)d -m18\n" % dict(nproc = nprocs)
466        elif (app_name == "fluidanimate"):
467            shrc = "exec -p 0 /bin/fluidani -n%(nproc)d -i /etc/flui_35K.flu\n" % dict(nproc = nprocs)
468        elif (app_name == "filter"):
469            shrc = "exec -p 0 /bin/filter -l 1024 -c 1024 -n %(nproc)d -i /etc/img1024.raw\n" % dict(nproc = nprocs)
470        elif (app_name == "filt_ga"):
471            shrc = "exec -p 0 /bin/filt_ga -l 1024 -c 1024 -n %(nproc)d -i /etc/img1024.raw\n" % dict(nproc = nprocs)
472        elif (app_name == "histogram"):
473            shrc = "exec -p 0 /bin/histogra -n%(nproc)d /etc/histo.bmp\n" % dict(nproc = nprocs)
474        elif (app_name == "histo-opt"):
475            shrc = "exec -p 0 /bin/histo-op -n%(nproc)d /etc/histo.bmp\n" % dict(nproc = nprocs)
476        elif (app_name == "kmeans"):
477            shrc = "exec -p 0 /bin/kmeans -n %(nproc)d -p %(npoints)d\n" % dict(nproc = nprocs, npoints = 10000) # default npoints = 100000
478        elif (app_name == "kmeans-opt"):
479            shrc = "exec -p 0 /bin/kmeans-o -n %(nproc)d -p %(npoints)d\n" % dict(nproc = nprocs, npoints = 10000) # default npoints = 100000
480        elif (app_name == "linear_regression"):
481            shrc = "exec -p 0 /bin/linear_r -n%(nproc)d /etc/key_50MB.txt\n" % dict(nproc = nprocs)
482        elif (app_name == "lu"):
483            shrc = "exec -p 0 /bin/lu -n%(nproc)d -m512\n" % dict(nproc = nprocs)
484        elif (app_name == "mandel"):
485            shrc = "exec -p 0 /bin/mandel -n%(nproc)d\n" % dict(nproc = nprocs)
486        elif (app_name == "mat_mult"):
487            shrc = "exec -p 0 /bin/mat_mult -n%(nproc)d\n" % dict(nproc = nprocs)
488        elif (app_name == "mat_mult-opt"):
489            shrc = "exec -p 0 /bin/mat_mult -n%(nproc)d\n" % dict(nproc = nprocs)
490        elif (app_name == "pca"):
491            shrc = "exec -p 0 /bin/pca -n%(nproc)d\n" % dict(nproc = nprocs)
492        elif (app_name == "pca-opt"):
493            shrc = "exec -p 0 /bin/pca-opt -n%(nproc)d\n" % dict(nproc = nprocs)
494        elif (app_name == "fmm"):
495            shrc = "exec -p 0 /bin/fmm -n%(nproc)d -p%(nparticles)d\n" % dict(nproc = nprocs, nparticles = 1024)
496        elif (app_name == "ocean"):
497            shrc = "exec -p 0 /bin/ocean -n%(nproc)d -m%(gridsize)d\n" % dict(nproc = nprocs, gridsize = 66)
498        elif (app_name == "radiosity"):
499            shrc = "exec -p 0 /bin/radiosit -n %(nproc)d -batch\n" % dict(nproc = nprocs)
500        elif (app_name == "radix"):
501            shrc = "exec -p 0 /bin/radix -n%(nproc)d -k2097152\n" % dict(nproc = nprocs)
502        elif (app_name == "radix_ga"):
503            shrc = "exec -p 0 /bin/radix_ga -n%(nproc)d -k2097152\n" % dict(nproc = nprocs) # k = num_keys
504        elif (app_name == "string_match"):
505            shrc = "exec -p 0 /bin/string_m -n%(nproc)d /etc/key_50MB.txt\n" % dict(nproc = nprocs)
506        elif (app_name == "raytrace"):
507            shrc = "exec -p 0 /bin/raytrace -n%(nproc)d /etc/tea.env\n" % dict(nproc = nprocs)
508        elif (app_name == "showimg"):
509            shrc = "exec -p 0 /bin/showimg -i /etc/lena.sgi\n"
510        elif (app_name == "swaptions"):
511            shrc = "exec -p 0 /bin/swaption -n%(nproc)d -s 256 -t 1000\n" % dict(nproc = nprocs) # s = num swaptions (default 16), t = num simus (default 10000)
512        elif (app_name == "watern"):
513            shrc = "exec -p 0 /bin/watern -n%(nproc)d -m512\n" % dict(nproc = nprocs)
514        elif (app_name == "waters"):
515            shrc = "exec -p 0 /bin/waters -n%(nproc)d -m512\n" % dict(nproc = nprocs)
516        else:
517            assert(False)
518   
519    file = open(shrc_file_name, 'w')
520    file.write(shrc)
521    file.close()
522
523    # Copie du shrc dans la future image disque
524    cmd = ['cp', shrc_file_name, os.path.join(partition_root_path, "etc", "shrc")]
525    print_and_call(cmd)
526
527    print "### End of shrc generation for application %s and %d threads" % (app_name, nprocs)
528# end of gen_shrc
529
530
531
532cmd = ['mkdir', '-p', os.path.join(scripts_path, data_dir)]
533print_and_call(cmd)
534
535#gen_sym_links()
536gen_soclib_conf()
537compile_almos()
538# Compile application once at the beginning not to intererfere with
539# other simulations
540for app in apps:
541    compile_app(app)
542    full_app_name = os.path.join(apps_dir, app, app)
543    cmd = ['cp', full_app_name, os.path.join(partition_root_path, "bin", app)]
544    print_and_call(cmd)
545
546 
547print "cd", top_path
548os.chdir(top_path)
549
550for i in nb_procs:
551    x, y = get_x_y(i, cpu_per_cluster)
552    x_width = get_nb_bits(x)
553    y_width = get_nb_bits(y)
554    nthreads = min(4, x * y) # thread number for parallel systemcass
555    hard_config(x, y, x_width, y_width, cpu_per_cluster, hard_config_name, protocol)
556    gen_arch_info_bib(x, y, x_width, y_width)
557    # We must recompile the preloader because we modified the hard_config file
558    # and the bootloader because we modified the arch-info.bib file
559    compile_preloader()
560    compile_bootloader()
561
562    cmd = ['touch', topcell_name]
563    print_and_call(cmd)
564
565    cmd = ['make']
566    retval = print_and_call(cmd)
567    if retval != 0:
568        sys.exit()
569 
570    for app in apps:
571        # Generate shrc
572        gen_shrc(app, i)
573
574        # Regenerate disk image
575        hdd_img(partition_root_path, hdd_img_file_name, "fat32", bootloader_file_name)
576
577        # Launch simulation
578        if use_omp:
579            cmd = ['./simul.x', '-THREADS', str(nthreads)]
580        else:
581            cmd = ['./simul.x']
582        filename = os.path.join(scripts_path, data_dir, app + '_' + log_init_name + str(i))
583        output = print_and_popen(cmd, filename)
584 
585        # Write simulation results to data directory
586        file = open(filename, 'w')
587        file.write(output)
588        file.close()
589 
590        filename = os.path.join(scripts_path, data_dir, app + '_' + log_term_name + str(i))
591       
592        cmd = ['mv', os.path.join(top_path, 'term1'), filename]
593        print_and_call(cmd)
594 
595        if rerun_stats:
596            start2_found = False
597            end_found = False
598            for line in open(filename):
599                if "[THREAD_COMPUTE_START]" in line:
600                    start2 = line.split()[-1]
601                    start2_found = True
602                if "[THREAD_COMPUTE_END]" in line:
603                    end = line.split()[-1]
604                    end_found = True
605            assert(start2_found and end_found)
606         
607            # Regenerate hdd to ensure having the same hdd image
608            hdd_img(partition_root_path, hdd_img_file_name, "fat32", bootloader_file_name)
609 
610            # Relauching simulation with reset and dump of counters
611            if use_omp:
612                cmd = ['./simul.x', '-THREADS', str(nthreads), '--reset-counters', start2, '--dump-counters', end]
613            else:
614                cmd = ['./simul.x', '--reset-counters', start2, '--dump-counters', end]
615            filename = os.path.join(scripts_path, data_dir, app + '_' + log_init_name + str(i))
616            output = print_and_popen(cmd, filename)
617           
618            # Checking that the two terms obtained are identical
619            import filecmp
620            term_orig_file = os.path.join(scripts_path, data_dir, app + '_' + log_term_name + str(i))
621            term_new_file = os.path.join(top_path, 'term1')
622            assert(filecmp.cmp(term_orig_file, term_new_file))
623 
624            # Write simulation results (counters) to data directory
625            file = open(filename, 'w')
626            file.write(output)
627            file.close()
628
629## End of simulations
630
631
632
Note: See TracBrowser for help on using the repository browser.