Beispiel #1
0
def conflict(entry_point_function,
             tcfg_map,
             conflict_files,
             old_ilp,
             new_ilp,
             dir_name,
             sol_file,
             emit_conflicts=False,
             do_cplex=False,
             interactive=False,
             silent_cplex=False,
             preempt_limit=None,
             default_phantom_preempt=False):
    if preempt_limit == None:
        preempt_limit = 5
    if default_phantom_preempt:
        conflict_files.append(
            convert_loop_bounds.phantomPreemptsAnnoFileName(dir_name))
    #initialise graph_to_graph so we get immFunc
    #load the loop_counts
    print 'conflict.conflict: sol_file %s' % sol_file
    bench.bench(dir_name,
                entry_point_function,
                False,
                True,
                False,
                parse_only=True)
    #we need the loop data
    immFunc().process()
    global bbAddr
    bbAddr = immFunc().bbAddr
    read_tcfg_map(tcfg_map)
    if interactive:
        assert False, 'Halt'
    if emit_conflicts:
        print 'new_ilp:%s' % new_ilp
        print_constraints(conflict_files, old_ilp, new_ilp, sol_file,
                          preempt_limit)
        if do_cplex:
            cplex_ret = cplex.cplexSolve(new_ilp,
                                         silent=silent_cplex,
                                         sol_file=sol_file)
            print 'cplex_ret: %s' % cplex_ret
            return cplex_ret
Beispiel #2
0
def conflict(entry_point_function, tcfg_map, conflict_files, old_ilp, new_ilp, dir_name, sol_file, emit_conflicts=False, do_cplex=False, interactive=False, silent_cplex=False, preempt_limit= None, default_phantom_preempt=False):
        if preempt_limit == None:
            preempt_limit = 5
        if default_phantom_preempt:
            conflict_files.append(convert_loop_bounds.phantomPreemptsAnnoFileName(dir_name))
        #initialise graph_to_graph so we get immFunc
        #load the loop_counts
        print 'conflict.conflict: sol_file %s' % sol_file
        bench.bench(dir_name, [entry_point_function],False,True,False,parse_only=True )
        #we need the loop data
        immFunc().process()
        global bbAddr
        bbAddr = immFunc().bbAddr
        read_tcfg_map(tcfg_map)
        if interactive:
          assert False, 'Halt'
        if emit_conflicts:
          print 'new_ilp:%s' % new_ilp
          print_constraints(conflict_files, old_ilp, new_ilp, sol_file, preempt_limit)
          if do_cplex:
            cplex_ret = cplex.cplexSolve(new_ilp,silent=silent_cplex,sol_file=sol_file)
            print 'cplex_ret: %s' % cplex_ret
            return cplex_ret
Beispiel #3
0
        results_f.write('   this took %f seconds\n' % (c2-c1))

        if not new_refutes:
            print 'At case %d, trace_refute cannot find any more refutations' % case_i
            results_f.write('terminated normally: trace_refute cannot find any more refutations\n')
            break

#cp the auto_refutes_file to keep a copy
        p = Popen(['cp', auto_refutes_file, results_dir+'/refutes_%d.txt'% case_i])
        p.communicate()
        assert not p.returncode
        case_i += 1

    results_f.close()

if __name__ == '__main__':    
    if len(sys.argv) != 5:
        print 'Usage: python auto_infea.py <dir_name> <entry point function> <results directory> <initial i>'
        print 'results direcotry should already exists and be empty'
        print 'initial i determine which iterations to start at, use 0 for fresh runs'
        print len(sys.argv)
        sys.exit(0)
    dir_name = sys.argv[1]
    entry_point_function = sys.argv[2]
    from convert_loop_bounds import phantomPreemptsAnnoFileName
    preempt_conflicts_file = phantomPreemptsAnnoFileName(dir_name)
    results_dir = sys.argv[3]
    initial_i = int(sys.argv[4])
    auto_infea(dir_name, entry_point_function,preempt_conflicts_file, results_dir, initial_i, preemption_limit = 5)

Beispiel #4
0
        results_f.write('   this took %f seconds\n' % (c2-c1))

        if not new_refutes:
            print 'At case %d, trace_refute cannot find any more refutations' % case_i
            results_f.write('terminated normally: trace_refute cannot find any more refutations\n')
            break

#cp the auto_refutes_file to keep a copy
        p = Popen(['cp', auto_refutes_file, results_dir+'/refutes_%d.txt'% case_i])
        p.communicate()
        assert not p.returncode
        case_i += 1

    results_f.close()

if __name__ == '__main__':
    if len(sys.argv) != 5:
        print 'Usage: python auto_infea.py <dir_name> <entry point function> <results directory> <initial i>'
        print 'results direcotry should already exists and be empty'
        print 'initial i determine which iterations to start at, use 0 for fresh runs'
        print len(sys.argv)
        sys.exit(0)
    dir_name = sys.argv[1]
    entry_point_function = sys.argv[2]
    from convert_loop_bounds import phantomPreemptsAnnoFileName
    preempt_conflicts_file = phantomPreemptsAnnoFileName(dir_name)
    results_dir = sys.argv[3]
    initial_i = int(sys.argv[4])
    auto_infea(dir_name, entry_point_function,preempt_conflicts_file, results_dir, initial_i, preemption_limit = 5)