From 69f2911e04ffb1b19eef1fafb8c040af271f656e Mon Sep 17 00:00:00 2001 From: Tor Aamodt Date: Thu, 15 Jul 2010 18:09:46 -0800 Subject: creating branch for adding support for CUDA 3.x and Fermi [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 6829] --- benchmarks/CUDA/MUM/mummergpu_exp.py | 202 +++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 benchmarks/CUDA/MUM/mummergpu_exp.py (limited to 'benchmarks/CUDA/MUM/mummergpu_exp.py') diff --git a/benchmarks/CUDA/MUM/mummergpu_exp.py b/benchmarks/CUDA/MUM/mummergpu_exp.py new file mode 100644 index 0000000..6461a65 --- /dev/null +++ b/benchmarks/CUDA/MUM/mummergpu_exp.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python +# encoding: utf-8 +""" +untitled.py + +Created by Cole Trapnell on 2007-05-01. +Copyright (c) 2007 __MyCompanyName__. All rights reserved. +""" + +import sys +import getopt +import os +import time +import timeit +import csv + +help_message = ''' +This script runs the full cmatch experimental suite. +''' + + +class Usage(Exception): + def __init__(self, msg): + self.msg = msg + +#refs = ["NC_005810", "2","NC_003997"] +#qry_lengths = [25, 50, 200, 800] + +refs = ["NC_003997"] +qry_lengths = [25] + +def get_stats(filename): + stats = {} + statfile = open(filename) + stats = dict([(key, float(value)) for (key, value) in csv.reader(statfile)]) + return stats + +def cmatch_query_string(ref, length): + return ref + "_q" + str(length) + "bp.fna" + +def mummer_query_string(ref, length): + return ref + "_q" + str(length) + "bp.fna" + +def runCmatch(ref, query, matchlen, onCPU, outfile): + + if onCPU: + cpuFlag = "-C" + statfile = "%s-%ld.cpustats" % ( query, matchlen ) + else: + cpuFlag = "" + statfile = "%s-%ld.gpustats" % ( query, matchlen ) + + + match_flags = " -l %d " % (matchlen) + + cmd = "mummergpu %s -s %s -M -b %s %s %s > %s" % (cpuFlag, + statfile, + match_flags, + ref, + query, + outfile) + print >> sys.stderr, cmd + t = timeit.Timer("os.system('" + cmd + "')", "import os") + app_times = t.repeat(1, 1) + app_time_avg = sum(app_times)/len(app_times) + stats = get_stats(statfile) + return (app_time_avg, stats) + +def runMUMmer(ref, query, matchlen, outfile): + query_file = query + #for i in range(0,5): + # query_files += query + " " + + cmd = "mummer -maxmatch -b -l %d %s %s 2>/dev/null > %s" % (matchlen, + ref, + query_file, + outfile) + + print >> sys.stderr , cmd + t = timeit.Timer("os.system('" + cmd + "')", "import os") + app_times = t.repeat(1, 1) + app_time_avg = sum(app_times)/len(app_times) + + return app_time_avg + +def get_gpu_time(stats): + return stats["Kernel"] + stats["Copy queries to GPU"] + stats["Copy output from GPU"] + stats["Copy suffix tree to GPU"] + +def execute_synth_trial(fout, directory, ref, querylen, matchlen): + #cmatch_query_file = directory + "/" + ref + query + + query_file = "%s/%s_q%dbp.fna" % (directory, ref, querylen) + ref_file = "%s/%s.fna" % (directory, ref) + cpu_outfile = query_file + "-cpu.out" + gpu_outfile = query_file + "-gpu.out" + mummer_outfile = query_file + "-mummer.out" + + (gpu_app_time_avg, gpu_stats) = runCmatch(ref_file, + query_file, + matchlen, + False, + gpu_outfile) + + (cpu_app_time_avg, cpu_stats) = runCmatch(ref_file, + query_file, + matchlen, + True, + cpu_outfile) + + mummer_app_time_avg = runMUMmer(ref_file, query_file, matchlen == 0 and querylen or matchlen, mummer_outfile) + + + kernel_speedup = cpu_stats["Kernel"] / get_gpu_time(gpu_stats) + + print >>fout, querylen, matchlen, cpu_app_time_avg,gpu_app_time_avg, mummer_app_time_avg, cpu_app_time_avg / gpu_app_time_avg, mummer_app_time_avg / gpu_app_time_avg, kernel_speedup + #print cmd + + + +def execute_real_trial(fout, directory, ref, query, matchlen): + + ref_file = "%s/%s.fna" % (directory, ref) + query_file = "%s/%s.fna" % (directory, query) + cpu_outfile = query_file + "-cpu.out" + gpu_outfile = query_file + "-gpu.out" + mummer_outfile = query_file + "-mummer.out" + + (gpu_app_time_avg, gpu_stats) = runCmatch(ref_file, + query_file, + matchlen, + False, + gpu_outfile) + + (cpu_app_time_avg, cpu_stats) = runCmatch(ref_file, + query_file, + matchlen, + True, + cpu_outfile) + + mummer_app_time_avg = runMUMmer(ref_file, query_file, matchlen, mummer_outfile) + + + + kernel_speedup = cpu_stats["Kernel"] / get_gpu_time(gpu_stats) + + print >> fout, "-", matchlen,cpu_app_time_avg,gpu_app_time_avg, mummer_app_time_avg, cpu_app_time_avg / gpu_app_time_avg, mummer_app_time_avg / gpu_app_time_avg, kernel_speedup + + +def run_different_query_lengths(): + f = open("anthrax/speedup.out", "w") + print >> f, "QUERY,MATCH_LENGTH,CPU,GPU,MUMMER,CPU_SPEEDUP,MUMMER_SPEEDUP,KERNEL_SPEEDUP" + execute_synth_trial(f,"anthrax", "NC_003997", 25, 25) + execute_synth_trial(f,"anthrax", "NC_003997", 50, 50) + execute_synth_trial(f,"anthrax", "NC_003997", 100,100) + execute_synth_trial(f,"anthrax", "NC_003997", 200,200) + execute_synth_trial(f,"anthrax", "NC_003997", 400,400) + execute_synth_trial(f,"anthrax", "NC_003997", 800,800) + +def run_ssuis_solexa(): + f = open("s_suis/speedup.out", "w") + print >> f, "QUERY,MATCH_LENGTH,CPU,GPU,MUMMER,CPU_SPEEDUP,MUMMER_SPEEDUP,KERNEL_SPEEDUP" + execute_real_trial(f,"s_suis", "cleanref", "cleanreads", 20) + +def run_cereus_454(): + f = open("cereus/speedup.out", "w") + print >> f, "QUERY,MATCH_LENGTH,CPU,GPU,MUMMER,CPU_SPEEDUP,MUMMER_SPEEDUP,KERNEL_SPEEDUP" + execute_real_trial(f,"cereus", "cleanref", "cleanreads", 20) + +def run_briggsae_sanger(): + f = open("cbriggsae/speedup.out", "w") + print >> f, "QUERY,MATCH_LENGTH,CPU,GPU,MUMMER,CPU_SPEEDUP,MUMMER_SPEEDUP,KERNEL_SPEEDUP" + execute_real_trial(f,"cbriggsae", "cleanref", "cleanreads", 100) + +def main(argv=None): + if argv is None: + argv = sys.argv + try: + try: + opts, args = getopt.getopt(argv[1:], "hv", ["help"]) + except getopt.error, msg: + raise Usage(msg) + + for option, value in opts: + if option == "-v": + verbose = True + if option in ("-h", "--help"): + raise Usage(help_message) + + run_ssuis_solexa() + run_cereus_454() + run_briggsae_sanger() + + run_different_query_lengths() + + except Usage, err: + print >> sys.stderr, sys.argv[0].split("/")[-1] + ": " + str(err.msg) + print >> sys.stderr, "\t for help use --help" + return 2 + + +if __name__ == "__main__": + sys.exit(main()) -- cgit v1.3