def runSim_TileMapping(
        forced_seed=None,
        cmbmppri_type=None,
        wl_config=None,  # we assume 1 vid per wf
):

    seed = forced_seed
    print "SEED === " + str(seed)

    random.seed(seed)
    np.random.seed(seed)

    # get resolution list
    res_list = get_res_list(wl_config)

    # fixed params
    SimParams.SIM_RUNTIME = 10000
    SimParams.HEVC_DUMP_FRAME_DATAFILE = False
    SimParams.HEVC_LOAD_FRAME_DATAFILE = False
    SimParams.HEVC_FRAME_GENRAND_SEED = seed
    SimParams.HEVC_TILELEVEL_SPLITTING_ENABLE = True
    SimParams.LOCAL_SCHEDULER_TYPE = LocalHEVCTilePriorityScheduler_WithDepCheck(
    )
    SimParams.SIM_ENTITY_RESOURCEMANAGER_CLASS = RMTypes.OPENLOOP
    SimParams.SIM_ENTITY_CPUNODE_CLASS = CPUTypes.OPENLOOP_HEVC_TILE_LEVEL
    SimParams.TASK_MODEL = TaskModel.TASK_MODEL_HEVC_TILE_LEVEL
    SimParams.SIM_ENTITY_MAPPER_CLASS = MapperTypes.OPENLOOP_WITH_HEVCTILE
    SimParams.SIM_ENTITY_TASKDISPATCHER_CLASS = TDTypes.OPENLOOP_WITH_HEVCTILE

    SimParams.MS_SIGNALLING_NOTIFY_FLOW_COMPLETE_ENABLE = False
    SimParams.MS_SIGNALLING_NOTIFY_TASK_COMPLETE_ENABLE = False
    SimParams.RESOURCEMANAGER_USE_VOLATILE_TMTBL = True
    SimParams.MAPPING_PREMAPPING_ENABLED = True
    SimParams.MMC_SMART_NODE_SELECTION_ENABLE = True
    SimParams.MMC_SMART_NODE_SELECTION_TYPE = 0  # MMCP-Dist
    SimParams.MMC_ENABLE_DATATRANSMISSION_MODELLING = True
    SimParams.HEVC_GOPGEN_USEPROBABILISTIC_MODEL = True
    SimParams.USE_VIDSTRM_SPECIFIC_FRAMERATE = True

    SimParams.NOC_W = 8
    SimParams.NOC_H = 8
    SimParams.NUM_NODES = (SimParams.NOC_W * SimParams.NOC_H)

    #     SimParams.DVB_RESOLUTIONS_FIXED               = [
    # #                                                      (3840,2160),
    #                                                     (2560,1440),
    # #                                                      (1920,1080),
    # #                                                      (1280,720),
    # #                                                      (854,480),
    # #                                                      (640,360),
    #                                                     (512,288),
    #                                                     ]*1
    # # #

    SimParams.DVB_RESOLUTIONS_FIXED = res_list
    SimParams.NUM_WORKFLOWS = len(SimParams.DVB_RESOLUTIONS_FIXED)
    SimParams.NUM_INPUTBUFFERS = SimParams.NUM_WORKFLOWS
    SimParams.DVB_RESOLUTIONS_SELECTED_RANDOM = False

    SimParams.WFGEN_MIN_GOPS_PER_VID = 5
    SimParams.WFGEN_MAX_GOPS_PER_VID = 5
    SimParams.WFGEN_INITIAL_VID_GAP_MIN = 0.0
    SimParams.WFGEN_INITIAL_VID_GAP_MAX = 0.05

    CCR_TYPE = "lowcc_normal_mem_considered"  # {normal, normal_mem_considered, lowcc_normal_mem_considered}

    ### for normal CC ###
    if CCR_TYPE == "normal":
        cc_scale_down = 1.66  # this makes the CCR go High
        SimParams.CLSTR_TILE_PARAM_CCR_RANGES_LOW = 0.11  # less than this
        SimParams.CLSTR_TILE_PARAM_CCR_RANGES_MED = (0.11, 0.14
                                                     )  # between these values
        SimParams.CLSTR_TILE_PARAM_CCR_RANGES_HIGH = 0.14  # higher than this
        SimParams.CLSTR_TILE_PARAM_KAUSHIKS_ALGO_COMMS_SCALEUP_FACTOR = 1.0  # we use a scale factor because always the (comm. cost < comp. cost)

        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_LOW = 0.11  # less than this
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_MED = (
            0.11, 0.14)  # between these values
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_HIGH = 0.14  # higher than this
        SimParams.CLSTR_TILE_PARAM_BGROUP_NGT_HOPS = (
            4, 1, 1)  # NGT hop count (low, med, high ccr ranges)

    ### for normal low CC - @0.60 ###
    elif CCR_TYPE == "normal_mem_considered":
        cc_scale_down = 1.0  # this makes the CCR go High
        SimParams.CLSTR_TILE_PARAM_CCR_RANGES_LOW = 0.18  # less than this
        SimParams.CLSTR_TILE_PARAM_CCR_RANGES_MED = (0.18, 0.23
                                                     )  # between these values
        SimParams.CLSTR_TILE_PARAM_CCR_RANGES_HIGH = 0.23  # higher than this
        SimParams.CLSTR_TILE_PARAM_KAUSHIKS_ALGO_COMMS_SCALEUP_FACTOR = 1.0  # we use a scale factor because always the (comm. cost < comp. cost)

        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_LOW = 0.18  # less than this
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_MED = (
            0.18, 0.23)  # between these values
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_HIGH = 0.23  # higher than this
        SimParams.CLSTR_TILE_PARAM_BGROUP_NGT_HOPS = (
            4, 1, 1)  # NGT hop count (low, med, high ccr ranges)

    ### for special very low CC - @0.60*0.1 ###
    elif CCR_TYPE == "lowcc_normal_mem_considered":
        cc_scale_down = 0.1  # low values makes the CCR go high
        SimParams.CLSTR_TILE_PARAM_CCR_RANGES_LOW = 1.8  # less than this
        SimParams.CLSTR_TILE_PARAM_CCR_RANGES_MED = (1.8, 2.3
                                                     )  # between these values
        SimParams.CLSTR_TILE_PARAM_CCR_RANGES_HIGH = 2.3  # higher than this
        SimParams.CLSTR_TILE_PARAM_KAUSHIKS_ALGO_COMMS_SCALEUP_FACTOR = 1.0  # we use a scale factor because always the (comm. cost < comp. cost)

        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_LOW = 1.8  # less than this
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_MED = (
            1.8, 2.3)  # between these values
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_HIGH = 2.3  # higher than this
        SimParams.CLSTR_TILE_PARAM_BGROUP_NGT_HOPS = (
            4, 1, 1)  # NGT hop count (low, med, high ccr ranges)

    else:
        sys.exit("Error - CCR_TYPE: " + CCR_TYPE)

    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['ICU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['ICU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['ICU'][1] * float(cc_scale_down))
    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['PCU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['PCU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['PCU'][1] * float(cc_scale_down))
    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['BCU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['BCU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['BCU'][1] * float(cc_scale_down))
    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['SkipCU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['SkipCU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['SkipCU'][1] * float(cc_scale_down))

    print "HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR:: ---"
    pprint.pprint(HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR)
    print "-------------"

    # -- variable params --
    SimParams.COMBINED_MAPPING_AND_PRIASS = cmbmppri_type
    SimParams.DYNAMIC_TASK_MAPPING_SCHEME = TaskMappingSchemes.TASKMAPPINGSCHEMES_NONE  # this will be overridden
    SimParams.DYNAMIC_TASK_PRIASS_SCHEME = TaskSemiDynamicPrioritySchemes.TASKSEMIDYNAMICPRIORITYSCHEMES_NONE

    pprint.pprint(SimParams.DVB_RESOLUTIONS_FIXED)
    pprint.pprint(SimParams.NUM_WORKFLOWS)

    # getting the reporing file name prefix
    exp_key = "ac"+str(SimParams.AC_TEST_OPTION) + \
                            "mp"+str(SimParams.DYNAMIC_TASK_MAPPING_SCHEME)+ \
                            "pr"+str(SimParams.DYNAMIC_TASK_PRIASS_SCHEME)+ \
                            "cmb"+str(SimParams.COMBINED_MAPPING_AND_PRIASS) + \
                            "mmp"+str(SimParams.MMC_SMART_NODE_SELECTION_TYPE)

    subdir1 = EXP_DATADIR + wl_config + "/" + exp_key + "/"
    subdir2 = subdir1 + "seed_" + str(seed) + "/"
    final_subdir = subdir2
    fname_prefix = "HEVCTileSplitTest__" + exp_key + "_"
    final_fname = fname_prefix + str(SimParams.NOC_H) + "_" + str(
        SimParams.NOC_W) + "_"

    check_fname = _get_fname(final_subdir, final_fname)['taskscompleted_fname']

    print "Checking file exists : " + str(check_fname)
    if (_check_file_exists(check_fname) == True):
        print "Simulation already exists.."
    else:

        print "----------------------------------------------------------------------------------------------------------------------------"
        print subdir2
        print "Running HEVCTile_Mapping-runSim_TileMapping-"+ fname_prefix  +": num_wf=" + str(SimParams.NUM_WORKFLOWS) + \
                ", noc_h="+str(SimParams.NOC_H)+","+"noc_w="+str(SimParams.NOC_W) + ", " + \
                exp_key + \
                ", seed="+str(seed)
        print "----------------------------------------------------------------------------------------------------------------------------"

        print "Start-time(actual): ", datetime.datetime.fromtimestamp(
            time.time()).strftime('%Y-%m-%d %H:%M:%S')

        env, last_scheduled_task_time = MMMSim.runMainSimulation(
            initial_rand_seed=seed, dump_workload=False)
        env.run(until=last_scheduled_task_time + SimParams.SIM_RUNTIME)
        print "Simulation Ended at : %.15f" % env.now
        print "End-time: ", datetime.datetime.fromtimestamp(
            time.time()).strftime('%Y-%m-%d %H:%M:%S')

        _makeDir(final_subdir)

        # get filenames
        filenames = _get_fname(final_subdir, final_fname)
        # name the report filenames
        _dump_captured_data(filenames)
def runSim_TileMapping_varBGMappingNHops(
    forced_seed=None,
    cmbmppri_type=None,
    wl_config=None,  # we assume 1 vid per wf
    memp_select=None,
    nhgt_h=None,
    nhgt_m=None,
    nhgt_l=None,
):

    seed = forced_seed
    print "SEED === " + str(seed)

    random.seed(seed)
    np.random.seed(seed)

    # get resolution list
    res_list = get_res_list(wl_config)

    # fixed params
    SimParams.SIM_RUNTIME = 10000
    SimParams.HEVC_DUMP_FRAME_DATAFILE = False
    SimParams.HEVC_LOAD_FRAME_DATAFILE = False
    SimParams.HEVC_FRAME_GENRAND_SEED = seed
    SimParams.HEVC_TILELEVEL_SPLITTING_ENABLE = True
    SimParams.LOCAL_SCHEDULER_TYPE = LocalHEVCTilePriorityScheduler_WithDepCheck(
    )
    SimParams.SIM_ENTITY_RESOURCEMANAGER_CLASS = RMTypes.OPENLOOP
    SimParams.SIM_ENTITY_CPUNODE_CLASS = CPUTypes.OPENLOOP_HEVC_TILE_LEVEL
    SimParams.TASK_MODEL = TaskModel.TASK_MODEL_HEVC_TILE_LEVEL
    SimParams.SIM_ENTITY_MAPPER_CLASS = MapperTypes.OPENLOOP_WITH_HEVCTILE
    SimParams.SIM_ENTITY_TASKDISPATCHER_CLASS = TDTypes.OPENLOOP_WITH_HEVCTILE

    SimParams.MS_SIGNALLING_NOTIFY_FLOW_COMPLETE_ENABLE = False
    SimParams.MS_SIGNALLING_NOTIFY_TASK_COMPLETE_ENABLE = False
    SimParams.RESOURCEMANAGER_USE_VOLATILE_TMTBL = True
    SimParams.MAPPING_PREMAPPING_ENABLED = True
    SimParams.MMC_SMART_NODE_SELECTION_ENABLE = True
    SimParams.MMC_SMART_NODE_SELECTION_TYPE = 0  # MMCP-Dist
    SimParams.MMC_ENABLE_DATATRANSMISSION_MODELLING = True
    SimParams.HEVC_GOPGEN_USEPROBABILISTIC_MODEL = True
    SimParams.USE_VIDSTRM_SPECIFIC_FRAMERATE = True

    SimParams.NOC_W = 8
    SimParams.NOC_H = 8
    SimParams.NUM_NODES = (SimParams.NOC_W * SimParams.NOC_H)

    SimParams.DVB_RESOLUTIONS_FIXED = res_list
    SimParams.NUM_WORKFLOWS = len(SimParams.DVB_RESOLUTIONS_FIXED)
    SimParams.NUM_INPUTBUFFERS = SimParams.NUM_WORKFLOWS
    SimParams.DVB_RESOLUTIONS_SELECTED_RANDOM = False

    SimParams.WFGEN_MIN_GOPS_PER_VID = 3
    SimParams.WFGEN_MAX_GOPS_PER_VID = 3
    SimParams.WFGEN_INITIAL_VID_GAP_MIN = 0.0
    SimParams.WFGEN_INITIAL_VID_GAP_MAX = 0.05

    pprint.pprint(SimParams.DVB_RESOLUTIONS_FIXED)
    pprint.pprint(SimParams.NUM_WORKFLOWS)

    # -- variable params --
    SimParams.COMBINED_MAPPING_AND_PRIASS = cmbmppri_type
    SimParams.DYNAMIC_TASK_MAPPING_SCHEME = TaskMappingSchemes.TASKMAPPINGSCHEMES_NONE  # this will be overridden
    SimParams.DYNAMIC_TASK_PRIASS_SCHEME = TaskSemiDynamicPrioritySchemes.TASKSEMIDYNAMICPRIORITYSCHEMES_NONE

    #### CL-BG params ####
    CCR_TYPE = "normal_mem_considered"  # {normal, normal_mem_considered, lowccr_normal_mem_considered}

    if CCR_TYPE == "normal":
        cc_scale_down = 1.66
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_LOW = 0.11  # less than this
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_MED = (
            0.11, 0.14)  # between these values
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_HIGH = 0.14  # higher than this

    elif CCR_TYPE == "normal_mem_considered":
        cc_scale_down = 1.0
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_LOW = 0.18  # less than this
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_MED = (
            0.18, 0.23)  # between these values
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_HIGH = 0.23  # higher than this

    elif CCR_TYPE == "lowccr_normal_mem_considered":
        cc_scale_down = 0.1
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_LOW = 1.8  # less than this
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_MED = (
            1.8, 2.3)  # between these values
        SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_HIGH = 2.3  # higher than this

    # set the hop variables
    SimParams.CLSTR_TILE_PARAM_BGROUP_NGT_HOPS = [nhgt_h, nhgt_m, nhgt_l]
    print "SimParams.CLSTR_TILE_PARAM_BGROUP_NGT_HOPS : ", SimParams.CLSTR_TILE_PARAM_BGROUP_NGT_HOPS
    print "SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_LOW :", SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_LOW
    print "SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_MED  :", SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_MED
    print "SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_HIGH :", SimParams.CLSTR_TILE_PARAM_BGROUP_CCR_RANGES_HIGH

    #### workload scaling params ####
    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['ICU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['ICU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['ICU'][1] * float(cc_scale_down))
    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['PCU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['PCU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['PCU'][1] * float(cc_scale_down))
    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['BCU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['BCU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['BCU'][1] * float(cc_scale_down))
    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['SkipCU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['SkipCU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['SkipCU'][1] * float(cc_scale_down))

    print "HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR:: ---"
    pprint.pprint(HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR)
    print "-------------"

    # getting the reporing file name prefix
    exp_key = "cmb"+str(SimParams.COMBINED_MAPPING_AND_PRIASS) + \
              "mmp"+str(SimParams.MMC_SMART_NODE_SELECTION_TYPE) + \
              "bghops"+ '_'.join(str(i) for i in SimParams.CLSTR_TILE_PARAM_BGROUP_NGT_HOPS)

    subdir1 = EXP_DATADIR + wl_config + "/" + exp_key + "/"
    subdir2 = subdir1 + "seed_" + str(seed) + "/"
    final_subdir = subdir2
    fname_prefix = "HEVCTileBGMPNHops__" + exp_key + "_"
    final_fname = fname_prefix + str(SimParams.NOC_H) + "_" + str(
        SimParams.NOC_W) + "_"

    check_fname = _get_fname(final_subdir, final_fname)['taskscompleted_fname']

    print "Checking file exists : " + str(check_fname)
    if (_check_file_exists(check_fname) == True):
        print "Simulation already exists.."
    else:
        print "----------------------------------------------------------------------------------------------------------------------------"
        print subdir2
        print "Running HEVCTile_Mapping-runSim_TileMapping-"+ fname_prefix  +": num_wf=" + str(SimParams.NUM_WORKFLOWS) + \
                ", noc_h="+str(SimParams.NOC_H)+","+"noc_w="+str(SimParams.NOC_W) + ", " + \
                exp_key + \
                ", seed="+str(seed)
        print "----------------------------------------------------------------------------------------------------------------------------"

        print ">> Simulation Starting : WallClock DateTime: " + time.strftime(
            "%c")
        env, last_scheduled_task_time = MMMSim.runMainSimulation(
            initial_rand_seed=seed, dump_workload=True)
        env.run(until=last_scheduled_task_time + SimParams.SIM_RUNTIME)
        print "Simulation Ended at : %.15f" % env.now

        _makeDir(final_subdir)

        # get filenames
        filenames = _get_fname(final_subdir, final_fname)
        # name the report filenames
        _dump_captured_data(filenames)

        print ">> Everything Finished : WallClock DateTime: " + time.strftime(
            "%c")
def runSim_TileMapping_KaushikTuner(
        forced_seed=None,
        cmbmppri_type=None,
        wl_config=None,  # we assume 1 vid per wf
        memp_select=None,
        k_com_sf=None):

    if k_com_sf == None or k_com_sf < 0:
        sys.exit("k_com_sf Error")

    seed = forced_seed
    print "SEED === " + str(seed)

    random.seed(seed)
    np.random.seed(seed)

    # get resolution list
    res_list = get_res_list(wl_config)

    # fixed params
    SimParams.SIM_RUNTIME = 10000
    SimParams.HEVC_DUMP_FRAME_DATAFILE = False
    SimParams.HEVC_LOAD_FRAME_DATAFILE = False
    SimParams.HEVC_FRAME_GENRAND_SEED = seed
    SimParams.HEVC_TILELEVEL_SPLITTING_ENABLE = True
    SimParams.LOCAL_SCHEDULER_TYPE = LocalHEVCTilePriorityScheduler_WithDepCheck(
    )
    SimParams.SIM_ENTITY_RESOURCEMANAGER_CLASS = RMTypes.OPENLOOP
    SimParams.SIM_ENTITY_CPUNODE_CLASS = CPUTypes.OPENLOOP_HEVC_TILE_LEVEL
    SimParams.TASK_MODEL = TaskModel.TASK_MODEL_HEVC_TILE_LEVEL
    SimParams.SIM_ENTITY_MAPPER_CLASS = MapperTypes.OPENLOOP_WITH_HEVCTILE
    SimParams.SIM_ENTITY_TASKDISPATCHER_CLASS = TDTypes.OPENLOOP_WITH_HEVCTILE

    #SimParams.MS_SIGNALLING_NOTIFY_TASK_COMPLETE_ENABLE = _get_feedback_status(cmbmppri_type)
    SimParams.MS_SIGNALLING_NOTIFY_TASK_COMPLETE_ENABLE = False
    print "SimParams.MS_SIGNALLING_NOTIFY_TASK_COMPLETE_ENABLE :: ", SimParams.MS_SIGNALLING_NOTIFY_TASK_COMPLETE_ENABLE
    SimParams.MS_SIGNALLING_NOTIFY_FLOW_COMPLETE_ENABLE = False
    SimParams.RESOURCEMANAGER_USE_VOLATILE_TMTBL = True
    SimParams.MAPPING_PREMAPPING_ENABLED = True
    SimParams.COMBINED_MAPPING_AND_PRIASS = cmbmppri_type
    SimParams.DYNAMIC_TASK_MAPPING_SCHEME = TaskMappingSchemes.TASKMAPPINGSCHEMES_NONE  # this will be overridden
    SimParams.DYNAMIC_TASK_PRIASS_SCHEME = TaskSemiDynamicPrioritySchemes.TASKSEMIDYNAMICPRIORITYSCHEMES_NONE
    SimParams.MMC_SMART_NODE_SELECTION_ENABLE = True
    SimParams.MMC_SMART_NODE_SELECTION_TYPE = memp_select
    SimParams.MMC_ENABLE_DATATRANSMISSION_MODELLING = True
    SimParams.HEVC_GOPGEN_USEPROBABILISTIC_MODEL = True

    SimParams.NOC_W = 8
    SimParams.NOC_H = 8
    SimParams.NUM_NODES = (SimParams.NOC_W * SimParams.NOC_H)

    SimParams.NUM_WORKFLOWS = len(res_list)
    SimParams.DVB_RESOLUTIONS_FIXED = res_list

    #     SimParams.DVB_RESOLUTIONS_FIXED               = [
    #                                                     (3840,2160),
    #                                                     (2560,1440),
    #                                                     (1920,1080),
    #                                                     (1280,720),
    #                                                     (854,480),
    #                                                     (640,360),
    #                                                     (512,288),
    #                                                     #(426,240), <-- not a multiple of 8
    #                                                       ]
    #    SimParams.NUM_WORKFLOWS                       = len(SimParams.DVB_RESOLUTIONS_FIXED)

    SimParams.DVB_RESOLUTIONS_SELECTED_RANDOM = False
    SimParams.NUM_INPUTBUFFERS = SimParams.NUM_WORKFLOWS

    SimParams.WFGEN_MIN_GOPS_PER_VID = 3
    SimParams.WFGEN_MAX_GOPS_PER_VID = 3
    SimParams.WFGEN_INITIAL_VID_GAP_MIN = 0.0
    SimParams.WFGEN_INITIAL_VID_GAP_MAX = 0.1

    SimParams.CLSTR_TILE_PARAM_KAUSHIKS_ALGO_COMMS_SCALEUP_FACTOR = k_com_sf
    print "SimParams.CLSTR_TILE_PARAM_KAUSHIKS_ALGO_COMMS_SCALEUP_FACTOR : ", SimParams.CLSTR_TILE_PARAM_KAUSHIKS_ALGO_COMMS_SCALEUP_FACTOR

    pprint.pprint(SimParams.DVB_RESOLUTIONS_FIXED)
    pprint.pprint(SimParams.NUM_WORKFLOWS)

    # getting the reporing file name prefix
    exp_key = "cmb"+str(SimParams.COMBINED_MAPPING_AND_PRIASS) + \
              "mmp"+str(SimParams.MMC_SMART_NODE_SELECTION_TYPE) + \
              "ksf"+str(SimParams.CLSTR_TILE_PARAM_KAUSHIKS_ALGO_COMMS_SCALEUP_FACTOR)

    subdir1 = EXP_DATADIR + wl_config + "/" + exp_key + "/"
    subdir2 = subdir1 + "seed_" + str(seed) + "/"
    final_subdir = subdir2
    fname_prefix = "HEVCTileSplitTest__" + exp_key + "_"
    final_fname = fname_prefix + str(SimParams.NOC_H) + "_" + str(
        SimParams.NOC_W) + "_"

    check_fname = _get_fname(final_subdir, final_fname)['taskscompleted_fname']

    print "Checking file exists : " + str(check_fname)
    if (_check_file_exists(check_fname) == True):
        print "Simulation already exists.."
    else:
        print "----------------------------------------------------------------------------------------------------------------------------"
        print subdir2
        print "Running HEVCTile_Mapping-runSim_TileMapping-"+ fname_prefix  +": num_wf=" + str(SimParams.NUM_WORKFLOWS) + \
                ", noc_h="+str(SimParams.NOC_H)+","+"noc_w="+str(SimParams.NOC_W) + ", " + \
                exp_key + \
                ", seed="+str(seed)
        print "----------------------------------------------------------------------------------------------------------------------------"

        print ">> Simulation Starting : WallClock DateTime: " + time.strftime(
            "%c")
        env, last_scheduled_task_time = MMMSim.runMainSimulation(
            initial_rand_seed=seed, dump_workload=True)
        env.run(until=last_scheduled_task_time + SimParams.SIM_RUNTIME)
        print "Simulation Ended at : %.15f" % env.now

        _makeDir(final_subdir)

        # get filenames
        filenames = _get_fname(final_subdir, final_fname)
        # name the report filenames
        _dump_captured_data(filenames)

        print ">> Everything Finished : WallClock DateTime: " + time.strftime(
            "%c")
def runSim_TileMapping_varCCR(
        forced_seed=None,
        cmbmppri_type=None,
        wl_config=None,  # we assume 1 vid per wf
        memp_select=None,
        cc_scale_down=None):

    seed = forced_seed
    print "SEED === " + str(seed)

    random.seed(seed)
    np.random.seed(seed)

    # get resolution list
    res_list = get_res_list(wl_config)

    # fixed params
    SimParams.SIM_RUNTIME = 10000
    SimParams.HEVC_DUMP_FRAME_DATAFILE = False
    SimParams.HEVC_LOAD_FRAME_DATAFILE = False
    SimParams.HEVC_FRAME_GENRAND_SEED = seed
    SimParams.HEVC_TILELEVEL_SPLITTING_ENABLE = True
    SimParams.LOCAL_SCHEDULER_TYPE = LocalHEVCTilePriorityScheduler_WithDepCheck(
    )
    SimParams.SIM_ENTITY_RESOURCEMANAGER_CLASS = RMTypes.OPENLOOP
    SimParams.SIM_ENTITY_CPUNODE_CLASS = CPUTypes.OPENLOOP_HEVC_TILE_LEVEL
    SimParams.TASK_MODEL = TaskModel.TASK_MODEL_HEVC_TILE_LEVEL
    SimParams.SIM_ENTITY_MAPPER_CLASS = MapperTypes.OPENLOOP_WITH_HEVCTILE
    SimParams.SIM_ENTITY_TASKDISPATCHER_CLASS = TDTypes.OPENLOOP_WITH_HEVCTILE

    #SimParams.MS_SIGNALLING_NOTIFY_TASK_COMPLETE_ENABLE = _get_feedback_status(cmbmppri_type)
    SimParams.MS_SIGNALLING_NOTIFY_TASK_COMPLETE_ENABLE = False
    print "SimParams.MS_SIGNALLING_NOTIFY_TASK_COMPLETE_ENABLE :: ", SimParams.MS_SIGNALLING_NOTIFY_TASK_COMPLETE_ENABLE
    SimParams.MS_SIGNALLING_NOTIFY_FLOW_COMPLETE_ENABLE = False
    SimParams.RESOURCEMANAGER_USE_VOLATILE_TMTBL = True
    SimParams.MAPPING_PREMAPPING_ENABLED = True
    SimParams.COMBINED_MAPPING_AND_PRIASS = cmbmppri_type
    SimParams.DYNAMIC_TASK_MAPPING_SCHEME = TaskMappingSchemes.TASKMAPPINGSCHEMES_NONE  # this will be overridden
    SimParams.DYNAMIC_TASK_PRIASS_SCHEME = TaskSemiDynamicPrioritySchemes.TASKSEMIDYNAMICPRIORITYSCHEMES_NONE
    SimParams.MMC_SMART_NODE_SELECTION_ENABLE = True
    SimParams.MMC_SMART_NODE_SELECTION_TYPE = memp_select
    SimParams.MMC_ENABLE_DATATRANSMISSION_MODELLING = True
    SimParams.HEVC_GOPGEN_USEPROBABILISTIC_MODEL = True

    SimParams.NOC_W = 6
    SimParams.NOC_H = 6
    SimParams.NUM_NODES = (SimParams.NOC_W * SimParams.NOC_H)

    SimParams.NUM_WORKFLOWS = len(res_list)
    SimParams.DVB_RESOLUTIONS_FIXED = res_list

    #     SimParams.NUM_WORKFLOWS                       = 1
    #     SimParams.DVB_RESOLUTIONS_FIXED               = [#(3840,2160),
    #                                                     #(2560,1440),
    #                                                     #(1920,1080),
    #                                                     #(1280,720),
    #                                                     #(854,480),
    #                                                     (640,360),
    #                                                     #(512,288),
    #                                                     #(426,240), <-- not a multiple of 8
    #                                                       ]

    SimParams.DVB_RESOLUTIONS_SELECTED_RANDOM = False
    SimParams.NUM_INPUTBUFFERS = SimParams.NUM_WORKFLOWS

    SimParams.WFGEN_MIN_GOPS_PER_VID = 5
    SimParams.WFGEN_MAX_GOPS_PER_VID = 5
    SimParams.WFGEN_INITIAL_VID_GAP_MIN = 0.0
    SimParams.WFGEN_INITIAL_VID_GAP_MAX = 0.1

    pprint.pprint(SimParams.DVB_RESOLUTIONS_FIXED)
    pprint.pprint(SimParams.NUM_WORKFLOWS)

    # scale down the computation cost of CU decoding
    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['ICU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['ICU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['ICU'][1] * float(cc_scale_down))
    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['PCU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['PCU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['PCU'][1] * float(cc_scale_down))
    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['BCU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['BCU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['BCU'][1] * float(cc_scale_down))
    HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['SkipCU'] = (
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['SkipCU'][0] * float(cc_scale_down),
        HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR['SkipCU'][1] * float(cc_scale_down))

    print "------"
    print "new HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR ::"
    pprint.pprint(HEVCWLP.HEVCWLPARAMS_SCALE_FACTOR)
    print "------"

    cc_scale_down_str_rep_withoutdot = str(cc_scale_down).replace(".", "")

    # getting the reporing file name prefix
    exp_key = "ac"+str(SimParams.AC_TEST_OPTION) + \
                            "mp"+str(SimParams.DYNAMIC_TASK_MAPPING_SCHEME)+ \
                            "pr"+str(SimParams.DYNAMIC_TASK_PRIASS_SCHEME)+ \
                            "cmb"+str(SimParams.COMBINED_MAPPING_AND_PRIASS) + \
                            "mmp"+str(SimParams.MMC_SMART_NODE_SELECTION_TYPE) +\
                            "ccrs"+str(cc_scale_down_str_rep_withoutdot)

    subdir1 = EXP_DATADIR + wl_config + "/" + exp_key + "/"
    subdir2 = subdir1 + "seed_" + str(seed) + "/"
    final_subdir = subdir2
    fname_prefix = "HEVCTileSplitTest__" + exp_key + "_"
    final_fname = fname_prefix + str(SimParams.NOC_H) + "_" + str(
        SimParams.NOC_W) + "_"

    check_fname = _get_fname(final_subdir, final_fname)['taskscompleted_fname']

    print "Checking file exists : " + str(check_fname)
    if (_check_file_exists(check_fname) == True):
        print "Simulation already exists.."
    else:
        print "----------------------------------------------------------------------------------------------------------------------------"
        print subdir2
        print "Running HEVCTile_Mapping-runSim_TileMapping-"+ fname_prefix  +": num_wf=" + str(SimParams.NUM_WORKFLOWS) + \
                ", noc_h="+str(SimParams.NOC_H)+","+"noc_w="+str(SimParams.NOC_W) + ", " + \
                exp_key + \
                ", seed="+str(seed)
        print "----------------------------------------------------------------------------------------------------------------------------"

        env, last_scheduled_task_time = MMMSim.runMainSimulation(
            initial_rand_seed=seed, dump_workload=True)
        env.run(until=last_scheduled_task_time + SimParams.SIM_RUNTIME)
        print "Simulation Ended at : %.15f" % env.now

        _makeDir(final_subdir)

        # get filenames
        filenames = _get_fname(final_subdir, final_fname)
        # name the report filenames
        _dump_captured_data(filenames)