import attr
from plumbum import local
from benchbuild import project
from benchbuild.utils import compiler, download, run, wrapping
from benchbuild.utils.cmd import sh, tar
[docs]@attr.s
@download.with_wget({
'3.1':
'http://www.cs.virginia.edu/'
'~kw5na/lava/Rodinia/Packages/Current/3.1/rodinia_3.1.tar.bz2'})
class RodiniaGroup(project.Project):
"""Generic handling of Rodinia benchmarks."""
DOMAIN = 'rodinia'
GROUP = 'rodinia'
VERSION = '3.1'
SRC_FILE = 'rodinia.tar.bz2'
CONFIG = {}
config = attr.ib(default=attr.Factory(
lambda self: type(self).CONFIG, takes_self=True))
[docs] def compile(self):
self.download()
tar("xf", self.src_file)
unpack_dir = local.path('rodinia_{0}'.format(self.version))
c_compiler = compiler.cc(self)
cxx_compiler = compiler.cxx(self)
config_dir = self.config['dir']
config_src = self.config['src']
config_flags = self.config['flags']
with local.cwd(unpack_dir / config_dir):
for outfile, srcfiles in config_src.items():
cls = type(self)
_cc = cls.select_compiler(c_compiler, cxx_compiler)
if "flags" in self.config:
_cc = _cc[config_flags]
_cc = _cc[srcfiles]
_cc = _cc["-o", outfile]
run.run(_cc)
[docs] @staticmethod
def select_compiler(c_compiler, _):
return c_compiler
[docs] def run_tests(self, runner):
unpack_dir = local.path('rodinia_{0}'.format(self.version))
in_src_dir = unpack_dir / self.config['dir']
for outfile in self.config['src']:
wrapping.wrap(in_src_dir / outfile, self)
with local.cwd(in_src_dir):
runner(sh['./run'])
[docs]class Backprop(RodiniaGroup):
NAME = 'backprop'
CONFIG = {
"dir": "openmp/backprop",
"src": {
NAME: [
"backprop_kernel.c",
"imagenet.c",
"facetrain.c",
"backprop.c"
]
},
"flags": [
"-fopenmp",
"-lm"
]
}
[docs]class BFS(RodiniaGroup):
NAME = 'bfs'
CONFIG = {
"dir": "openmp/bfs",
"src": {
NAME: [
"bfs.cpp"
]
},
"flags": [
"-fopenmp",
"-UOPEN"
]
}
[docs] @staticmethod
def select_compiler(_, cc):
return cc
[docs]class BPlusTree(RodiniaGroup):
NAME = 'b+tree'
CONFIG = {
"dir": "openmp/b+tree",
"src": {
"b+tree.out": [
"./main.c",
"./kernel/kernel_cpu.c",
"./kernel/kernel_cpu_2.c",
"./util/timer/timer.c",
"./util/num/num.c"
]
},
"flags": [
"-fopenmp",
"-lm"
]
}
[docs]class CFD(RodiniaGroup):
NAME = 'cfd'
CONFIG = {
"dir": "openmp/cfd",
"src": {
"euler3d_cpu": [
"euler3d_cpu.cpp"
]
}
}
[docs] @staticmethod
def select_compiler(_, cc):
return cc
[docs]class HeartWall(RodiniaGroup):
NAME = 'heartwall'
CONFIG = {
"dir": "openmp/heartwall",
"src": {
NAME: [
"./AVI/avimod.c",
"./AVI/avilib.c",
"./main.c"
]
},
"flags": [
"-I./AVI",
"-fopenmp",
"-lm"
]
}
[docs]class Hotspot(RodiniaGroup):
NAME = 'hotspot'
CONFIG = {
"dir": "openmp/hotspot",
"src": {
NAME: [
"hotspot_openmp.cpp"
]
},
"flags": [
"-fopenmp"
]
}
[docs] @staticmethod
def select_compiler(_, cc):
return cc
[docs]class Hotspot3D(RodiniaGroup):
NAME = 'hotspot3D'
CONFIG = {
"dir": "openmp/hotspot3D",
"src": {
"3D": [
"./3D.c"
]
},
"flags": [
"-fopenmp",
"-lm"
]
}
[docs]class KMeans(RodiniaGroup):
NAME = 'kmeans'
CONFIG = {
"dir": "openmp/kmeans",
"src": {
"./kmeans_serial/kmeans": [
"./kmeans_serial/kmeans_clustering.c",
"./kmeans_serial/kmeans.c",
"./kmeans_serial/getopt.c",
"./kmeans_serial/cluster.c"
],
"./kmeans_openmp/kmeans": [
"./kmeans_openmp/kmeans_clustering.c",
"./kmeans_openmp/kmeans.c",
"./kmeans_openmp/getopt.c",
"./kmeans_openmp/cluster.c"
]
},
"flags": [
"-lm",
"-fopenmp"
]
}
[docs]class LavaMD(RodiniaGroup):
NAME = 'lavaMD'
CONFIG = {
"dir": "openmp/lavaMD",
"src": {
NAME: [
"./main.c",
"./util/timer/timer.c",
"./util/num/num.c",
"./kernel/kernel_cpu.c"
]
},
"flags": [
"-lm",
"-fopenmp"
]
}
[docs]class Leukocyte(RodiniaGroup):
NAME = 'leukocyte'
CONFIG = {
"dir": "openmp/leukocyte",
"src": {
NAME: [
"./meschach_lib/memstat.c",
"./meschach_lib/meminfo.c",
"./meschach_lib/version.c",
"./meschach_lib/ivecop.c",
"./meschach_lib/matlab.c",
"./meschach_lib/machine.c",
"./meschach_lib/otherio.c",
"./meschach_lib/init.c",
"./meschach_lib/submat.c",
"./meschach_lib/pxop.c",
"./meschach_lib/matop.c",
"./meschach_lib/vecop.c",
"./meschach_lib/memory.c",
"./meschach_lib/matrixio.c",
"./meschach_lib/err.c",
"./meschach_lib/copy.c",
"./meschach_lib/bdfactor.c",
"./meschach_lib/mfunc.c",
"./meschach_lib/fft.c",
"./meschach_lib/svd.c",
"./meschach_lib/schur.c",
"./meschach_lib/symmeig.c",
"./meschach_lib/hessen.c",
"./meschach_lib/norm.c",
"./meschach_lib/update.c",
"./meschach_lib/givens.c",
"./meschach_lib/hsehldr.c",
"./meschach_lib/solve.c",
"./meschach_lib/qrfactor.c",
"./meschach_lib/chfactor.c",
"./meschach_lib/bkpfacto.c",
"./meschach_lib/lufactor.c",
"./meschach_lib/iternsym.c",
"./meschach_lib/itersym.c",
"./meschach_lib/iter0.c",
"./meschach_lib/spswap.c",
"./meschach_lib/spbkp.c",
"./meschach_lib/splufctr.c",
"./meschach_lib/spchfctr.c",
"./meschach_lib/sparseio.c",
"./meschach_lib/sprow.c",
"./meschach_lib/sparse.c",
"./meschach_lib/zfunc.c",
"./meschach_lib/znorm.c",
"./meschach_lib/zmatop.c",
"./meschach_lib/zvecop.c",
"./meschach_lib/zmemory.c",
"./meschach_lib/zmatio.c",
"./meschach_lib/zcopy.c",
"./meschach_lib/zmachine.c",
"./meschach_lib/zschur.c",
"./meschach_lib/zhessen.c",
"./meschach_lib/zgivens.c",
"./meschach_lib/zqrfctr.c",
"./meschach_lib/zhsehldr.c",
"./meschach_lib/zmatlab.c",
"./meschach_lib/zsolve.c",
"./meschach_lib/zlufctr.c",
"./OpenMP/detect_main.c",
"./OpenMP/misc_math.c",
"./OpenMP/track_ellipse.c",
"./OpenMP/find_ellipse.c",
"./OpenMP/avilib.c"
]
},
"flags": [
"-DSPARSE",
"-DCOMPLEX",
"-DREAL_FLT",
"-DREAL_DBL",
"-I./meschach_lib",
"-lm",
"-lpthread",
"-fopenmp"
]
}
[docs]class LUD(RodiniaGroup):
NAME = 'lud'
CONFIG = {
"dir": "openmp/lud",
"src": {
"./omp/lud_omp": [
"./common/common.c",
"./omp/lud_omp.c",
"./omp/lud.c"
]
},
"flags": [
"-I./common",
"-lm",
"-fopenmp"
]
}
[docs]class Myocyte(RodiniaGroup):
NAME = 'myocyte'
CONFIG = {
"dir": "openmp/myocyte",
"src": {
"./myocyte.out": [
"main.c"
]
},
"flags": [
"-lm",
"-fopenmp"
]
}
[docs]class NN(RodiniaGroup):
NAME = 'nn'
CONFIG = {
"dir": "openmp/nn",
"src": {
NAME: [
"./nn_openmp.c"
]
},
"flags": [
"-lm",
"-fopenmp"
]
}
[docs]class NW(RodiniaGroup):
NAME = 'nw'
CONFIG = {
"dir": "openmp/nw",
"src": {
"needle": [
"./needle.cpp"
]
},
"flags": [
"-lm",
"-fopenmp"
]
}
[docs] @staticmethod
def select_compiler(_, cc):
return cc
[docs]class ParticleFilter(RodiniaGroup):
NAME = 'particlefilter'
CONFIG = {
"dir": "openmp/particlefilter",
"src": {
"particle_filter": [
"./ex_particle_OPENMP_seq.c"
]
},
"flags": [
"-lm",
"-fopenmp"
]
}
[docs]class PathFinder(RodiniaGroup):
NAME = 'pathfinder'
CONFIG = {
"dir": "openmp/pathfinder",
"src": {
"pathfinder": [
"./pathfinder.cpp"
]
},
"flags": [
"-fopenmp"
]
}
[docs] @staticmethod
def select_compiler(_, cc):
return cc
[docs]class SRAD1(RodiniaGroup):
NAME = 'srad-1'
CONFIG = {
"dir": "openmp/srad/srad_v1",
"src": {
"srad": [
"./main.c"
]
},
"flags": [
"-I.",
"-lm",
"-fopenmp"
]
}
[docs]class SRAD2(RodiniaGroup):
NAME = 'srad-2'
CONFIG = {
"dir": "openmp/srad/srad_v2",
"src": {
"srad": [
"./srad.cpp"
]
},
"flags": [
"-lm",
"-fopenmp"
]
}
[docs] @staticmethod
def select_compiler(_, cc):
return cc
[docs]class StreamCluster(RodiniaGroup):
NAME = 'streamcluster'
CONFIG = {
"dir": "openmp/streamcluster",
"src": {
"./sc_omp": [
"./streamcluster_omp.cpp"
]
},
"flags": [
"-lpthread",
"-fopenmp"
]
}
[docs] @staticmethod
def select_compiler(_, cc):
return cc