diff options
| author | Tor Aamodt <[email protected]> | 2010-07-15 18:09:46 -0800 |
|---|---|---|
| committer | Tor Aamodt <[email protected]> | 2010-07-15 18:09:46 -0800 |
| commit | 69f2911e04ffb1b19eef1fafb8c040af271f656e (patch) | |
| tree | 231d3b6bdc3a202f7c255bfcf7bf2c36e32cee9e /benchmarks/CUDA/CP/driver/process.py | |
creating branch for adding support for CUDA 3.x and Fermi
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 6829]
Diffstat (limited to 'benchmarks/CUDA/CP/driver/process.py')
| -rw-r--r-- | benchmarks/CUDA/CP/driver/process.py | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/benchmarks/CUDA/CP/driver/process.py b/benchmarks/CUDA/CP/driver/process.py new file mode 100644 index 0000000..56e7e98 --- /dev/null +++ b/benchmarks/CUDA/CP/driver/process.py @@ -0,0 +1,181 @@ +# (c) 2007 The Board of Trustees of the University of Illinois. + +# Process-management and directory management routines are collected here. + +import os +import os.path as path +import stat +from itertools import imap, ifilter, chain + +import globals + +def scan_for_files(topdir, directory=False, boring=[]): + """Scan the contents of the directory 'topdir'. If 'directory' is + True, return a sequence of all directories found in that directory; + otherwise, return a sequence of all files found in that directory. + Directories whose names are found in the 'boring' list are excluded.""" + + # Look for directories or regular files, depending on the 'directory' + # parameter + if directory: valid_test = path.isdir + else: valid_test = path.isfile + + def interesting(fname): + # True if 'dirname' is not a boring name, and it is a directory + if fname in boring: return False + + fpath = path.join(topdir, fname) + try: return valid_test(fpath) + except OSError: return False # Ignore file-not-found errors + + if not path.isdir(topdir): + raise OSError, "Cannot access '" + str(topdir) + "' as a directory" + + # Return names of all directories found + return ifilter(interesting, os.listdir(topdir)) + +def scan_for_benchmarks(topdir): + """Scan subdirectories of the benchmark repository to find + benchmarks. Return a sequence containing all benchmark + directory names.""" + + return scan_for_files(path.join(topdir, "benchmarks"), True, boring=['_darcs','.svn']) + +def scan_for_benchmark_versions(bmkdir): + """Scan subdirectories of a benchmark directory 'bmkdir' to find + benchmark versions. Return a sequence containing all benchmark + version names.""" + + return scan_for_files(path.join(bmkdir, "src"), True, boring=['.svn']) + +def scan_for_benchmark_datasets(bmkdir): + """Scan subdirectories of a benchmark directory 'bmkdir' to find + data sets. Return a sequence containing all data set names.""" + + # Get input and output subdirectories + inp_dir = path.join(bmkdir, "input") + if path.exists(inp_dir): + inp_dirs = scan_for_files(path.join(bmkdir, "input"), True, boring=['.svn']) + else: + # Assume no input files are found because the benchmark + # doesn't need input + inp_dirs = [] + + out_dirs = scan_for_files(path.join(bmkdir, "output"), True, boring=['.svn']) + + # Return the union of the dataset directories + return dict(imap(lambda x: (x, None), chain(inp_dirs, out_dirs))).keys() + +def read_description_file(dirpath): + """Read the contents of a file in 'dirpath' called DESCRIPTION, + if one exists. This returns the file text as a string, or None + if no description was found.""" + + descr_path = os.path.join(dirpath, 'DESCRIPTION') + if os.access(descr_path, os.R_OK): + descr_file = file(descr_path, 'r') + descr = descr_file.read() + descr_file.close() + return descr + + # else, return None + +def touch_directory(dirpath): + """Ensures that the directory 'dirpath' and its parent directories + exist. If they do not exist, they will be created. It is an + error if the path exists but is not a directory.""" + if path.isdir(dirpath): + return + elif path.exists(dirpath): + raise OSError, "Path exists but is not a directory" + else: + (head, tail) = path.split(dirpath) + if head: touch_directory(head) + os.mkdir(dirpath) + +def with_path(wd, action): + """Executes an action in a separate working directory. The action + should be a callable object.""" + cwd = os.getcwd() + os.chdir(wd) + try: result = action() + finally: os.chdir(cwd) + return result + +def makefile(target=None, action=None, filepath=None, env={}): + """Run a makefile. An optional command, makefile path, and dictionary of + variables to define on the command line may be defined. The return code + value is the return code returned by the makefile. + + If no action is given, 'make' is invoked. Returns True if make was + successful and False otherwise. + + A 'q' action queries whether the target needs to be rebuilt. True is + returned if the target is up to date.""" + + args = ["make"] + + if action is None: + def run(): + rc = os.spawnvp(os.P_WAIT, "make", args) + return rc == 0 + elif action in ['q']: + args.append('-q') + + def run(): + rc = os.spawnvp(os.P_WAIT, "make", args) + if rc == 0: + # Up-to-date + return True + elif rc == 1: + # Needs remake + return False + else: + # Error + return False + else: + raise ValueError, "invalid action" + + # Pass the target as the second argument + if target: args.append(target) + + # Pass the path the the makefile + if filepath: + args.append('-f') + args.append(filepath) + + # Pass variables + for (k,v) in env.iteritems(): + args.append(k + "=" + v) + + # Print a status message, if running in verbose mode + if globals.verbose: + + print "Running '" + " ".join(args) + "' in " + os.getcwd() + + # Run the makefile and return result info + return run() + +def spawnwaitv(prog, args): + """Spawn a program and wait for it to complete. The program is + spawned in a modified environment.""" + + env = dict(os.environ) + env.update(globals.program_env) + + # Print a status message if running in verbose mode + if globals.verbose: + print "Running '" + " ".join(args) + "' in " + os.getcwd() + + # Check that the program is runnable + if not os.access(prog, os.X_OK): + raise OSError, "Cannot execute '" + prog + "'" + + # Run the program + return os.spawnve(os.P_WAIT, prog, args, env) + +def spawnwaitl(prog, *argl): + """Spawn a program and wait for it to complete. The program is + spawned in a modified environment.""" + + return spawnwaitv(prog, argl) |
