示例#1
0
def main1():
    # Create the SimPy environment. This is the thing that runs the simulation.
    env = simpy.Environment()

    # parse input files
    input_files = os.popen("ls input").read().split('\n')
    del input_files[-1]

    # CLI Argument parsing
    level = 0
    try:
        options, args = getopt.getopt(sys.argv[1:], 'dimu:')
    except getopt.error as msg:
        sys.stdout = sys.stderr
        print(msg)
        print("""usage: %s [-d|-i] [-u|-m|-]
                -d, -i: DEBUG / INFO """ % sys.argv[0])
        sys.exit()

    for opt, value in options:
        if opt in '-d':
            level = logging.DEBUG
        if opt in '-i':
            level = logging.INFO

    # file parsing loop
    for file in input_files:
        # NoC Settings
        generation = Generation()
        generation.config('input/' + file + '/config.yml')

        square_size = generation.square_size()
        nbvc = generation.nbvc()
        vc_size = generation.vc_size()
        vc_quantum = generation.vc_quantum()
        arbitration = generation.arbitration()

        noc = NoC(env, 'Network-On-Chip', square_size, nbvc, vc_size, vc_quantum)

        generation.set_noc(noc)

        # Messages generation
        messages = generation.scenario('input/' + file + '/scenario.yml')
        print("Taskset : %d" % len(messages))
        print("HP : %d" % generation.hyperperiod())
        # set logging level + log file
        logging.basicConfig(level=level,
                            handlers=[
                                # logging.FileHandler('input/' + file + '/output.log'),
                                logging.StreamHandler()
                            ])

        logging.info('###################################################################')
        logging.info('### ReTiNAS - Real-Time Network-on-chip Analysis and Simulation ###')
        logging.info('------ NoC Configuration ------')
        logging.info('\tDimension : %d x %d' % (square_size, square_size))
        logging.info('\tVC Number per Input : %d' % nbvc)
        logging.info('\tVC Buffer size : %d' % vc_size)
        logging.info('\tVC Quantum setting : %s' % vc_quantum)
        logging.info('\tArbitration Policy : %s' % arbitration)
        logging.info('-------------------------------')

        """
        Analysis : Begin
        """
        csv = CSVWriter(messages, arbitration, noc)
        csv.analysis_trace_csv('input/' + file + '/result_analysis.csv', messages)
        """
        Analysis : End
        """

        """
        Simulation : Begin
        """
        # Simulator Settings
        noc.messages = messages
        noc.arbitration = arbitration

        for msg in messages:
            print(msg)
        # Starting Simulation
        logging.info('### Simulation --> START - hyperperiod : %d ###' % generation.hyperperiod())
        env.run(until=generation.hyperperiod())
        # env.run(until=20)
        logging.info('### Simulation --> END ###')

        # printing
        messages_i = noc.messages_instance
        csv = CSVWriter(messages_i, 0, noc)

        """
        Simulation : End
        """

        # Trace generation : Latency
        # for msgi in messages_i:
        #     print("%s ---> Sched :: %s" % (msgi, msgi.is_deadline_met()))

        csv.simulation_trace_csv('input/' + file + '/result_sim.csv')
示例#2
0
def main_resource_augmentation():
    # parse input files
    input_files = os.popen("ls input").read().split('\n')
    del input_files[-1]

    # CLI Argument parsing
    level = 0
    try:
        options, args = getopt.getopt(sys.argv[1:], 'dimu:')
    except getopt.error as msg:
        sys.stdout = sys.stderr
        print(msg)
        print("""usage: %s [-d|-i] [-u|-m|-]
                -d, -i: DEBUG / INFO """ % sys.argv[0])
        sys.exit()

    for opt, value in options:
        if opt in '-d':
            level = logging.DEBUG
        if opt in '-i':
            level = logging.INFO

    # file parsing loop
    for file in input_files:
        # NoC Settings
        generation = Generation()
        generation.config('input/' + file + '/config.yml')

        square_size = generation.square_size()
        nbvc = generation.nbvc() - 1
        vc_size = generation.vc_size()
        vc_quantum = generation.vc_quantum()
        arbitration = generation.arbitration()

        # Messages generation
        # messages = generation.scenario('input/' + file + '/scenario.yml')
        # print("Taskset : %d" % len(messages))
        # print("HP : %d" % generation.hyperperiod())
        # set logging level + log file
        logging.basicConfig(level=level,
                            handlers=[
                                # logging.FileHandler('input/' + file + '/output.log'),
                                logging.StreamHandler()
                            ])

        logging.info('###################################################################')
        logging.info('### ReTiNAS - Real-Time Network-on-chip Analysis and Simulation ###')
        logging.info('------ NoC Configuration ------')
        logging.info('\tDimension : %d x %d' % (square_size, square_size))
        logging.info('\tVC Number per Input : %d' % nbvc)
        logging.info('\tVC Buffer size : %d' % vc_size)
        logging.info('\tVC Quantum setting : %s' % vc_quantum)
        logging.info('\tArbitration Policy : %s' % arbitration)
        logging.info('-------------------------------')

        # Starting Simulation
        tab = []
        for count in range(5):
            messages = None
            nbvc = generation.nbvc() - 1
            vc_quantum = generation.vc_quantum()
            vc_quantum.pop()
            while True:
                # Create the SimPy environment. This is the thing that runs the simulation.
                env = simpy.Environment()

                nbvc += 1
                vc_quantum.append(1)
                noc = NoC(env, 'Network-On-Chip', square_size, nbvc, vc_size, vc_quantum)
                generation.set_noc(noc)

                # Messages generation
                if messages is None:
                    print("GENERATION ----------------------------------")
                    messages = generation.scenario('input/' + file + '/scenario.yml')
                # Simulator Settings
                noc.messages = messages

                ##################  1 - RR  ##################
                noc.arbitration = arbitration

                logging.info('### Simulation --> START - hyperperiod : %d ###' % generation.hyperperiod())
                env.run(until=generation.hyperperiod())
                # env.run(until=20)
                logging.info('### Simulation --> END ###')

                # printing
                messages_i = noc.messages_instance
                csv = CSVWriter(messages_i, 0, noc)

                """
                Simulation : End
                """
                if is_taskset_deadline_meeting(messages_i):
                    print(">>>>>>>>>>>>>>>>> FINAL :: NUMBER OF VCS : %d" % len(noc.router_matrix[0][0].inNorth.vcs))
                    tab.append(len(noc.router_matrix[0][0].inNorth.vcs))
                    break
                else:
                    # TODO : RA
                    print(">>>>>>>>>>>>>>>>> NUMBER OF VCS : %d" % len(noc.router_matrix[0][0].inNorth.vcs))
                    continue

        CSVWriter.resource_augmentation_trace_csv('input/' + file + '/resource_augmentation.csv', tab)