summaryrefslogtreecommitdiff
path: root/benchmarks/CUDA/MUM/mummergpu_exp.py
diff options
context:
space:
mode:
authorTor Aamodt <[email protected]>2010-07-15 18:09:46 -0800
committerTor Aamodt <[email protected]>2010-07-15 18:09:46 -0800
commit69f2911e04ffb1b19eef1fafb8c040af271f656e (patch)
tree231d3b6bdc3a202f7c255bfcf7bf2c36e32cee9e /benchmarks/CUDA/MUM/mummergpu_exp.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/MUM/mummergpu_exp.py')
-rw-r--r--benchmarks/CUDA/MUM/mummergpu_exp.py202
1 files changed, 202 insertions, 0 deletions
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())