#!/usr/bin/env python3
import os
import re
import statistics
import subprocess
import sys
from importlib import reload
reload(sys)
# 格式化需要执行的命令
limit = "timeout 1h "
t = 'time -f "%e" '
coqQFBV_path = "/home/ctt/Documents/coq-qfbv/src/ocaml/_build/default/coqQFBV.exe"
coqQFBV_mulEx_path = "/home/ctt/Documents/coq-qfbv-mulEx/src/ocaml/_build/default/coqQFBV.exe"
arg = " -no-certify-unsat "
benchmark_path = "/home/ctt/Documents/QF_BV_sub/QF_BV_test/"
# 添加环境变量
my_env = os.environ.copy()
my_env['PATH'] = my_env['PATH'] + ':/home/ctt/Documents/kissat-master/build:/usr/bin'
# 引入测试文件夹
files_list = os.listdir(benchmark_path)
files_list.sort()
# 计算去除最大最小值的10次平均时间
def average_time(cmd, tool):
average_list = list()
satisfiability = ''
for i in range(9):
res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=my_env)
out, err = res.communicate()
# 格式化输出
satisfiability = str(out).lstrip('b\'').rstrip('\\n\'')
time = str(err).lstrip('b\'').rstrip('\\n\'')
if 'Command terminated by signal 9' in time:
time = time[32:]
if time == '':
return -1, "---"
print(tool, "的第", i, "次耗时:", float(time))
average_list.append(float(time))
# average_list.remove(min(average_list))
# average_list.remove(max(average_list))
return round(statistics.mean(average_list), 2), satisfiability
for file_name in files_list:
with open("result.txt", "a+") as fp:
# 格式化命令
# 使用CoqQFBV验证文件
cmd1 = limit + t + coqQFBV_path + arg + benchmark_path + file_name
mean_time1, satisfiability1 = average_time(cmd1, "coqQFBV")
# 使用CoqQFBV_mulEx
cmd2 = limit + t + coqQFBV_mulEx_path + arg + benchmark_path + file_name
mean_time2, satisfiability2 = average_time(cmd2, "coqQFBV_mulEx")
# 性能提升率
improvement = (mean_time1-mean_time2) / mean_time1
improvement = '{:.0%}'.format(improvement)
# 输出到result文件中
print("file =", file_name, " result1 =", satisfiability1, " result2 =", satisfiability2, file=fp)
print("time1 =", mean_time1, " time2 =", mean_time2, " improvement =", improvement, file=fp)
# 输出文件名和结果到窗口
print("file =", file_name, " result1 =", satisfiability1, " result2 =", satisfiability2)
print("time1 =", mean_time1, " time2 =", mean_time2, " improvement =", improvement)
顺序读取文件并执行操作
最新推荐文章于 2024-07-21 22:27:18 发布