Skip to content
Snippets Groups Projects
Commit b7486fe2 authored by Alexander Hück's avatar Alexander Hück
Browse files

PARCOACH add RMA coverage

parent f299e727
No related branches found
No related tags found
No related merge requests found
......@@ -13,9 +13,6 @@ class Tool(AbstractTool):
pass
def build(self, rootdir, cached=True):
self.setup()
def setup(self):
# os.environ['PATH'] = os.environ['PATH'] + f":/tmp/build-parcoach/parcoach-2.4.0-shared-Linux/bin"
os.environ['OMPI_CC'] = "clang-15"
result_parcoach = subprocess.run(
......@@ -37,6 +34,7 @@ class Tool(AbstractTool):
self.coverage_source = os.path.dirname(self.parcoach_exe)+"/../src/"
self.so_files = [str(p) for p in list(Path(os.path.dirname(self.parcoach_exe)).rglob("*.so"))]
print(self.so_files)
def run(self, execcmd, filename, binary, id, number, timeout, batchinfo, loglevel=logging.INFO):
# os.environ['PATH'] = os.environ['PATH'] + f":/tmp/build-parcoach/parcoach-2.4.0-shared-Linux/bin"
......@@ -47,29 +45,31 @@ class Tool(AbstractTool):
cachefile = f'{binary}_{id}'
current_env = os.environ.copy()
base_file = os.path.basename(filename)
current_env["LLVM_PROFILE_FILE"] = f"{self.llvm_profile_folder}/{base_file}-mbb{number}.profraw"
current_env["LLVM_PROFILE_FILE"] = f"{self.llvm_profile_folder}/{base_file}-mbb{number}-%p.profraw"
execcmd = re.sub('\${EXE}', f'./{binary}', execcmd)
if filename.find('lock') >= 0 or filename.find('fence') >= 0:
self.run_cmd(
# buildcmd=f"parcoachcc -check=rma --args mpicc {filename} -c -o {binary}.o",
# buildcmd=f"parcoachcc -check=rma --args mpicc {filename} -c -o {binary}.o \n mpicc {binary}.o -o {binary} -L/tmp/build-parcoach/parcoach-2.4.0-shared-Linux/lib/ -lParcoachRMADynamic_MPI_C",
# execcmd=f"mpicc {binary}.o -lParcoachRMADynamic_MPI_C -L/tmp/build-parcoach/parcoach-2.4.0-shared-Linux/lib/",
buildcmd=f"mpicc {command_suffix} {filename} -S -emit-llvm -o {binary}.ir",
execcmd=f"{self.parcoach_exe} --check=rma {binary}.ir ",
# execcmd=execcmd,
cachefile=cachefile,
filename=filename,
number=number,
binary=binary,
timeout=timeout,
batchinfo=batchinfo,
loglevel=loglevel,
current_env=current_env, )
else:
# if filename.find('lock') >= 0 or filename.find('fence') >= 0:
# self.run_cmd(
# # buildcmd=f"parcoachcc -check=rma --args mpicc {filename} -c -o {binary}.o",
# # buildcmd=f"parcoachcc -check=rma --args mpicc {filename} -c -o {binary}.o \n mpicc {binary}.o -o {binary} -L/tmp/build-parcoach/parcoach-2.4.0-shared-Linux/lib/ -lParcoachRMADynamic_MPI_C",
# # execcmd=f"mpicc {binary}.o -lParcoachRMADynamic_MPI_C -L/tmp/build-parcoach/parcoach-2.4.0-shared-Linux/lib/",
# buildcmd=f"mpicc {command_suffix} {filename} -S -emit-llvm -o {binary}.ir",
# execcmd=f"{self.parcoach_exe} --check=rma {binary}.ir ",
# # execcmd=execcmd,
# cachefile=cachefile,
# filename=filename,
# number=number,
# binary=binary,
# timeout=timeout,
# batchinfo=batchinfo,
# loglevel=loglevel,
# current_env=current_env, )
# else:
# WARNING: we create 2 calls to parcoach every time, and also 2 profile files!
self.run_cmd(
# buildcmd=f"parcoachcc -instrum-inter --args mpicc {filename} -c -o {binary}.o",
# buildcmd=f"parcoachcc -instrum-inter --args mpicc {filename} -c -o {binary}.o \n mpicc {binary}.o -o {binary} -L/tmp/build-parcoach/parcoach-2.4.0-shared-Linux/lib/ -lParcoachCollDynamic_MPI_C",
buildcmd=f"mpicc {command_suffix} {filename} -S -emit-llvm -o {binary}.ir",
buildcmd=f"mpicc {command_suffix} {filename} -S -emit-llvm -o {binary}.ir \n LLVM_PROFILE_FILE={self.llvm_profile_folder}/{base_file}-mbb{number}-%p.profraw {self.parcoach_exe} --check=rma {binary}.ir",
execcmd=f"{self.parcoach_exe} --check=mpi {binary}.ir",
# execcmd=f"mpicc {binary}.o -lParcoachCollDynamic_MPI_C -L/tmp/build-parcoach/parcoach-2.4.0-shared-Linux/lib/",
# execcmd=execcmd,
......@@ -83,7 +83,7 @@ class Tool(AbstractTool):
current_env=current_env, )
self.merge_coverage_single(filename=filename,
profile=f"{self.llvm_profile_folder}/{base_file}-mbb{number}.profraw", number=number)
profile=f"{self.llvm_profile_folder}/{base_file}-mbb{number}-*.profraw", number=number)
subprocess.run("rm -f *.bc core", shell=True, check=True)
def merge_coverage_single(self, filename, profile, number):
......@@ -91,7 +91,7 @@ class Tool(AbstractTool):
os.chdir(self.llvm_profile_folder)
# print(f"We are here: {profile}")
try:
if os.path.isfile(profile):
# if os.path.isfile(profile):
command = f"-o {os.path.basename(filename)}-mbb{number}.pro"
subprocess.run(
f"{self.llvm_profdata} merge -sparse {profile} {command}",
......@@ -118,11 +118,15 @@ class Tool(AbstractTool):
check=True,
)
if os.path.exists(self.coverage_profile):
# ignore_filename_regexes = " ".join('--ignore-filename-regex=' + str(regex) for regex in ["'.*plugin/Register.cpp'", "'.*tools/launcher/Parcoacht.cpp'", "'.*instrumentation.*'"])
sources = " ".join('--sources ' + str(source) for source in [f"{self.coverage_source}aSSA/", f"{self.coverage_source}rma/", f"{self.coverage_source}include/"])
subprocess.run(
f"{self.llvm_cov} show -format=html {' '.join(self.so_files)} {self.parcoach_exe} "
f"{self.llvm_cov} show -format=html {' -object '.join(self.so_files)} -object {self.parcoach_exe} "
f"--instr-profile={self.coverage_profile} "
f"--show-directory-coverage --output-dir {self.coverage_report_html} "
f"--sources {self.coverage_source}",
f"{sources} ",
# f"{ignore_filename_regexes}"
# f"--sources {self.coverage_source}",
shell=True,
check=True,
)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment