1import tests, debug 2from common import TestCommon 3from results import PassFailResult, RowResults 4import sys, re, numpy, os, datetime 5 6 7class AppelLiBench(TestCommon): 8 '''Benchmark GC primitives with Appel Li benchmark''' 9 10 bench_core = 4 11 12 def setup(self, build, machine, testdir): 13 # gracefully handle machines with < 5 cores 14 if machine.get_ncores() < self.bench_core: 15 self.bench_core = machine.get_ncores() - 1 16 17 def get_finish_string(self): 18 return "appel_li: done" 19 20 def process_data(self, testdir, rawiter): 21 debug.verbose(">> processing data") 22 # the test passed if we can produce results 23 results = RowResults(['op', 'cycles/iter', '#iters']) 24 # and assertions are disabled 25 valid = False 26 for line in rawiter: 27 if line.startswith('Operating system bug'): 28 valid = False 29 break 30 if 'ASSERTIONS DISABLED' in line: 31 valid = True 32 #if line.startswith(self.get_finish_string()): 33 # break 34 if line.startswith("appel_li:"): 35 # found data line: <op cycles/iter #iters> 36 elems = line.strip().split(':') 37 if len(elems) < 3: 38 continue 39 _, op, data = elems 40 if ' ' not in data: 41 continue 42 cyc, _, count, _ = data.strip().split(' ') 43 results.add_row([op.strip(), cyc, count]) 44 if not valid: 45 return PassFailResult(False) 46 return results 47 48@tests.add_test 49class AppelLiDefault(AppelLiBench): 50 name = "appel_li_bench_default" 51 52 def get_modules(self, build, machine): 53 modules = super(AppelLiDefault, self).get_modules(build, machine) 54 modules.add_module("benchmarks/mem_appel", ["core=%d" % self.bench_core]) 55 return modules 56 57@tests.add_test 58class AppelLiDefaultDI(AppelLiBench): 59 name = "appel_li_bench_default_di" 60 61 def get_modules(self, build, machine): 62 modules = super(AppelLiDefaultDI, self).get_modules(build, machine) 63 modules.add_module("benchmarks/mem_appel_di", [["core=%d" % self.bench_core]]) 64 return modules 65 66@tests.add_test 67class AppelLiFull(AppelLiBench): 68 name = "appel_li_bench_full" 69 70 def get_modules(self, build, machine): 71 modules = super(AppelLiFull, self).get_modules(build, machine) 72 modules.add_module("benchmarks/mem_appel_ff", ["core=%d" % self.bench_core]) 73 return modules 74 75@tests.add_test 76class AppelLiFullDI(AppelLiBench): 77 name = "appel_li_bench_full_di" 78 79 def get_modules(self, build, machine): 80 modules = super(AppelLiFullDI, self).get_modules(build, machine) 81 modules.add_module("benchmarks/mem_appel_di_ff", ["core=%d" % self.bench_core]) 82 return modules 83 84@tests.add_test 85class AppelLiSelective(AppelLiBench): 86 name = "appel_li_bench_selective" 87 88 def get_modules(self, build, machine): 89 modules = super(AppelLiSelective, self).get_modules(build, machine) 90 modules.add_module("benchmarks/mem_appel_sf", ["core=%d" % self.bench_core]) 91 return modules 92 93@tests.add_test 94class AppelLiSelectiveDI(AppelLiBench): 95 name = "appel_li_bench_selective_di" 96 97 def get_modules(self, build, machine): 98 modules = super(AppelLiSelectiveDI, self).get_modules(build, machine) 99 modules.add_module("benchmarks/mem_appel_di_sf", ["core=%d" % self.bench_core]) 100 return modules 101 102@tests.add_test 103class AppelLiSelectiveHint(AppelLiBench): 104 name = "appel_li_bench_selective_hint" 105 106 def get_modules(self, build, machine): 107 modules = super(AppelLiSelectiveHint, self).get_modules(build, machine) 108 modules.add_module("benchmarks/mem_appel_sfh", ["core=%d" % self.bench_core]) 109 return modules 110 111@tests.add_test 112class AppelLiSelectiveHintDI(AppelLiBench): 113 name = "appel_li_bench_selective_hint_di" 114 115 def get_modules(self, build, machine): 116 modules = super(AppelLiSelectiveHintDI, self).get_modules(build, machine) 117 modules.add_module("benchmarks/mem_appel_di_sfh", ["core=%d" % self.bench_core]) 118 return modules 119