コード例 #1
0
ファイル: MiBenchTestDriver.py プロジェクト: byuccl/coast
def checkOutputs(fldr):
    # get a list of all of the subfolders
    logName = 'checkOutputs.log'
    lf = open(os.path.join(fldr, logName), 'w')
    sub_dirs = sorted(os.listdir(fldr))
    for sd in sub_dirs:
        # only operate on the directories
        currFldr = os.path.join(fldr, sd)
        if os.path.isdir(currFldr):
            lf.write(centerText(" In folder: {} ".format(sd)) + "\n")
            # get a list of all of the files in there that have "output" in the name
            # in order so can compare two adjacent files
            files = sorted(glob.glob1(currFldr, 'output*'))
            for x in range(0, len(files), 2):
                f1 = files[x]
                f2 = files[x + 1]
                lf.write("Checking similarity of \n\t{} and\n\t{}\n".format(
                    f1, f2))
                # run diff on these
                p0 = sp.Popen([
                    'diff',
                    os.path.join(currFldr, f1),
                    os.path.join(currFldr, f2)
                ],
                              stdout=sp.PIPE)
                rslt = p0.communicate()[0]
                rc = p0.returncode
                if rc:
                    # print(rslt.decode())
                    lf.write("*** Files are not the same! ***\n")
        lf.write('\n')
    lf.close()
    return
コード例 #2
0
ファイル: MiBenchTestDriver.py プロジェクト: byuccl/coast
def printTestResult(results, logFile):
    logFile.write(centerText(" Test " + results["name"] + " ") + "\n")
    logFile.write("\n")
    for x in range(0, 2):
        for k, log in results["test_log" + str(x)].items():
            # print(k + "  " + str(type(log)))
            comp_name = os.path.basename(log["compile_log"][0]).split(".")[0]
            if log["compile_result"] != 0:
                logFile.write("Error compiling " + comp_name)
                logFile.write(", see \n\t" + log["compile_log"][0] + "\n")
            else:
                logFile.write("Passed compilation " + comp_name + "\n")
                # for key, val in log.items():
                #     print("  " + key + "  " + str(type(val)))
                for i in range(len(log["exec_result"])):
                    cmd = results["commands"][x][i]
                    rc = log["exec_result"][i]
                    # print(cmd)
                    # print(rc)
                    if rc == 0:
                        logFile.write("Passed command " + cmd + "\n")
                    else:
                        logFile.write("Failed running command \n\t" + cmd +
                                      "\n")

    logFile.write("\n")
コード例 #3
0
ファイル: MiBenchTestDriver.py プロジェクト: byuccl/coast
def run(fldr, trgts, srcs, auxf, cmds, logFile, nowFolder):
    progFolder = os.getcwd()
    # sometimes there is only one target that takes different parameters
    if len(trgts) == 1:
        trgts.append(trgts[0])
        srcs.append(srcs[0])

    # we are creating a dictionary to track everything
    run_log = {
        "name": os.path.basename(os.path.dirname(fldr)),
        "folder": fldr,
        "targets": trgts,
        "sources": srcs,
        "commands": cmds,
        "dependencies": auxf
    }
    # import any file dependencies
    aux_list = importFileDependencies(auxf, fldr, progFolder)
    # make a folder for this set of files
    subFolder = makeSubFolder(fldr, progFolder, nowFolder)
    # many of the tests need to be linked with the math library
    # this will probably change later to be more versatile
    xcflags = '""'
    xlflags = '"-lm"'
    # these are in quotes so it works for sure on the command line
    passes = ['""', '"-TMR"']

    for i in range(0, 2):  # 0-2, exclusive of 2
        test_name = "test_log" + str(i)
        run_log[test_name] = {}  # need to compare across executions
        # going to have to do some tricky dictionary nesting
        for p in passes:
            # things specific to each run
            run_name = "run_log" + p.strip('"')
            run_log[test_name][run_name] = {}
            runMakeClean()
            command = ("make compile OPT_PASSES=" + p + " SRCFOLDER=\"" +
                       fldr + "\" SRCFILES=\"" + srcs[i] + "\" XCFLAGS=" +
                       xcflags + " XLFLAGS=" + xlflags + " TARGET=" + trgts[i])
            lname = trgts[i] + ".log"
            # check for file existing already; if so, rename
            # TODO: this check is seems to be always returning true
            # also doesn't catch when '-TMR' is appended to the front of the name
            # put the check when moving files
            # if os.path.exists(os.path.join(subFolder, lname)):
            #     lname = trgts[i] + '_2.log'
            with open(lname, 'w') as lf:
                lf.write(command + "\n")
                lf.flush()
                p1 = sp.Popen(shlex.split(command),
                              stdout=lf,
                              stderr=sp.STDOUT)
                p1.wait()
                rc = p1.returncode
                run_log[test_name][run_name]["compile_result"] = rc
                # the following list will be empty if compilation failed
                exec_results = []
                # if success, then rc = 0
                if not rc:
                    # now execute it
                    for cmd in cmds[i]:
                        exec_results.append(os.system(cmd))
                    run_log[test_name][run_name]["exec_result"] = exec_results
                    # move the resulting files
                    # note: these are not always .txt files
                    run_log[test_name][run_name]["files_created"] = moveFiles(
                        subFolder, "output", trgts[i] + p.strip('"'))
                    # delete the executable
                    os.system("rm " + trgts[i])
                else:
                    # make note of error
                    lf.write("\n" +
                             centerText(" compilation error, did not run "))
            # move the log file
            newLogFileName = moveFiles(subFolder, lname, p.strip('"'))
            run_log[test_name][run_name]["compile_log"] = newLogFileName
        # end inner for loop
    # end outer for loop
    # remove any dependencies copied in
    if auxf:
        for aux in aux_list:
            os.system("rm " + aux.split("/")[len(aux.split("/")) - 1])
    return run_log
コード例 #4
0
ファイル: MiBenchTestDriver.py プロジェクト: byuccl/coast
def printTestHead(f, t, s, c, x, logFile):
    logFile.write(centerText(" Test # " + str(x)) + "\n")
    str1 = "Testing in\n\t{}\nMaking targets\n{}From source\n{}Running Commands\n{}".format(
        f, listAsString(t), listAsString(s), listAsString(c))
    logFile.write(str1)
コード例 #5
0
def main():
    # command line processing
    parser = setUpArgs()
    args = parser.parse_args()

    # set up folder references
    progFolder = os.getcwd()
    fldr = os.path.join(progFolder,"stressTests")
    # print("tests go in " + fldr)
    if args.clean:
        print("Removing old log files...")
        os.system("rm " + fldr + "/*.log")
        print("Removing old .bc files...")
        os.system("rm " + fldr + "/*.bc")
        print("Removing old .ll files...")
        os.system("rm " + fldr + "/*.ll")
        sys.exit(0)

    passes = ['"-DWC"', '"-TMR"']
    numRuns = args.tests[0]

    # header
    logFileName = "rand_log_" + getDateString() + ".log"
    printIntro(logFileName, numRuns)

    # keep track of everything
    overall_summary = []
    with open(os.path.join(fldr,logFileName), 'w') as lf:
        # do this 'n' number of times
        for x in range(0,numRuns):
            title = ' Test #{} '.format(x)
            lf.write(centerText(title) + '\n')
            lf.flush()
            # file name definitions
            target = "stress_random_" + str(x)
            rand_file = target + ".clang.ll"
            output_file = rand_file.replace("ll", "bc")
            opt_file = output_file.replace("clang", "opt")
            opt_dis_file = opt_file.replace("bc", "ll")
            run_summary = {"header" : title, "target" : target}

            updateConsoleDisplay(target, args.tests[0], x)
            # create random .ll files
            rc0 = createRandomIRFile(fldr, rand_file)
            # stuff = input("enter anything to continue")
            # convert to .bc files
            rc1 = llvmAsseble(progFolder, fldr, rand_file, output_file)
            # stuff2 = input("enter anything to continue")
            # run through opt
            p = sample(passes, 1)[0]
            rc2 = llvmOptimizer(fldr, output_file, opt_file, target, p, lf)
            run_summary["passes"] = p
            run_summary["opt_rc"] = rc2

            # move .ll files to test folder
            newLLfiles = moveFiles(fldr, opt_dis_file, "")
            if rc2 == 0:
                # print("moved files: \n\t" + str(newLLfiles))
                # os.system("rm " + fldr + "/*.bc")
                if newLLfiles:
                    # remove .ll files because passed test
                    os.system("rm " + newLLfiles[0])
            else:
                lf.write(centerText(' failed compilation! ') + "\n")
                lf.write('\tsee file ' + rand_file + '\n')
                lf.flush()
            # get rid of .bc files in the top folder
            runMakeClean()
            lf.write("\n")
            overall_summary.append(run_summary)

        # print the summary at the end
        lf.flush()
        print("Summarizing data....                         ")
        print("Complete! (" + str(numRuns) + "/" + str(numRuns) + ")              " )
        sum_head = centerText('') + '\n' + centerText(' Summary: ') + '\n' + centerText('') + '\n\n'
        lf.write(sum_head)
        successes = 0
        for summary in overall_summary:
            lf.write('----' + summary["header"] + '----\n')
            lf.write('Target: \t\t' + summary["target"] + '\n')
            lf.write('Running pass: \t' + summary["passes"] + '\n')
            if summary["opt_rc"] == 0:
                lf.write('Result: \t\tSuccess\n\n')
                successes += 1
            else:
                lf.write('Result: \t\tFailure\n\n')
        lf.write("---- Overall ----\n")
        lf.write("Successes: {}/{}\n".format(successes, numRuns))

    return