예제 #1
0
def run_net(ifmap_sram_size_first=1,
            filter_sram_size_first=1,
            ofmap_sram_size_first=1,
            ifmap_sram_size_second=1,
            filter_sram_size_second=1,
            ofmap_sram_size_second=1,
            array_h_first=32,
            array_w_first=32,
            array_h_second=32,
            array_w_second=31,
            single_array=1,
            data_flow='os',
            topology_file='./topologies/yolo_v2.csv',
            net_name='yolo_v2',
            offset_list=[0, 10000000, 20000000]):

    ifmap_sram_size_first *= 1024
    filter_sram_size_first *= 1024
    ofmap_sram_size_first *= 1024

    ifmap_sram_size_second *= 1024
    filter_sram_size_second *= 1024
    ofmap_sram_size_second *= 1024

    #fname = net_name + ".csv"
    param_file = open(topology_file, 'r')

    fname = net_name + "_avg_bw.csv"
    bw = open(fname, 'w')

    f2name = net_name + "_max_bw.csv"
    maxbw = open(f2name, 'w')

    f3name = net_name + "_cycles.csv"
    cycl = open(f3name, 'w')

    f4name = net_name + "_detail.csv"
    detail = open(f4name, 'w')

    f5name = net_name + "_power_metric.csv"
    power_metric_file = open(f5name, 'w')

    if single_array == 1:
        bw.write(
            "IFMAP SRAM Size[1],\tFilter SRAM Size[1],\tOFMAP SRAM Size[1],\tConv Layer Num,\tDRAM IFMAP Read BW,\tDRAM Filter Read BW,\tDRAM OFMAP Write BW,\tSRAM [1] Read BW,\tSRAM [1] OFMAP Write BW, \n"
        )
        maxbw.write(
            "IFMAP SRAM Size[1],\tFilter SRAM Size[1],\tOFMAP SRAM Size[1],\tConv Layer Num,\tMax DRAM IFMAP Read BW,\tMax DRAM Filter Read BW,\tMax DRAM OFMAP Write BW,\tMax SRAM Read BW[1],\tMax SRAM OFMAP Write BW[1],\n"
        )
        detailed_log = "Layer," +\
                     "\tDRAM_IFMAP_start,\tDRAM_IFMAP_stop,\tDRAM_IFMAP_bytes," + \
                     "\tDRAM_Filter_start,\tDRAM_Filter_stop,\tDRAM_Filter_bytes," + \
                     "\tDRAM_OFMAP_start,\tDRAM_OFMAP_stop,\tDRAM_OFMAP_bytes," + \
                     "\tSRAM_read_start[1],\tSRAM_read_stop[1],\tSRAM_read_bytes[1]," +\
                     "\tSRAM_write_start[1],\tSRAM_write_stop[1],\tSRAM_write_bytes[1],\n"
    else:
        bw.write(
            "IFMAP SRAM Size[1],\tFilter SRAM Size[1],\tOFMAP SRAM Size[1],IFMAP SRAM Size[2],\tFilter SRAM Size[2],\tOFMAP SRAM Size[2],\tConv Layer Num,\tDRAM IFMAP Read BW,\tDRAM Filter Read BW,\tDRAM OFMAP Write BW,\tSRAM [1] Read BW,\tSRAM [1] OFMAP Write BW,\tSRAM [2] Read BW,\tSRAM [2] OFMAP Write BW, \n"
        )
        maxbw.write(
            "IFMAP SRAM Size[1],\tFilter SRAM Size[1],\tOFMAP SRAM Size[1],\tIFMAP SRAM Size[2],\tFilter SRAM Size[2],\tOFMAP SRAM Size[2],\tConv Layer Num,\tMax DRAM IFMAP Read BW,\tMax DRAM Filter Read BW,\tMax DRAM OFMAP Write BW,\tMax SRAM Read BW[1],\tMax SRAM OFMAP Write BW[1],\tMax SRAM Read BW[2],\tMax SRAM OFMAP Write BW[2],\n"
        )
        detailed_log = "Layer," +\
                     "\tDRAM_IFMAP_start,\tDRAM_IFMAP_stop,\tDRAM_IFMAP_bytes," + \
                     "\tDRAM_Filter_start,\tDRAM_Filter_stop,\tDRAM_Filter_bytes," + \
                     "\tDRAM_OFMAP_start,\tDRAM_OFMAP_stop,\tDRAM_OFMAP_bytes," + \
                     "\tSRAM_write_start[1],\tSRAM_write_stop[1],\tSRAM_write_bytes[1]," +\
                     "\tSRAM_write_start[2],\tSRAM_write_stop[2],\tSRAM_write_bytes[2]," +\
                     "\tSRAM_read_start[1],\tSRAM_read_stop[1],\tSRAM_read_bytes[1]," +\
                     "\tSRAM_read_start[2],\tSRAM_read_stop[2],\tSRAM_read_bytes[2],\n"

    cycl.write("Layer,\tCycles,\t% Utilization,\n")
    detail.write(detailed_log)
    power_metric_file.write("Layer,\tPower metric(Mega units),\n")

    first = True

    for row in param_file:
        if first:
            first = False
            continue

        elems = row.strip().split(',')
        #print(len(elems))

        # Do not continue if incomplete line
        if len(elems) < 9:
            continue

        name = elems[0]
        print("")
        print("Commencing run for " + name)

        ifmap_h = int(elems[1])
        ifmap_w = int(elems[2])

        filt_h = int(elems[3])
        filt_w = int(elems[4])

        num_channels = int(elems[5])
        num_filters = int(elems[6])

        strides = int(elems[7])

        ifmap_base = offset_list[0]
        filter_base = offset_list[1]
        ofmap_base = offset_list[2]

        if single_array == 1:
            bw_log = str(ifmap_sram_size_first) + ",\t" + str(
                filter_sram_size_first) + ",\t" + str(
                    ofmap_sram_size_first) + ",\t" + name + ",\t"
        else:
            bw_log = str(ifmap_sram_size_first) + ",\t" + str(
                filter_sram_size_first) + ",\t" + str(
                    ofmap_sram_size_first) + ",\t" + str(
                        ifmap_sram_size_second) + ",\t" + str(
                            filter_sram_size_second) + ",\t" + str(
                                ofmap_sram_size_second) + ",\t" + name + ",\t"
        max_bw_log = bw_log
        detailed_log = name + ",\t"

        bw_str, detailed_str, util, clk, array_one_used, array_two_used, power_metric =  \
            tg.gen_all_traces(  array_h_first = array_h_first,
                                array_w_first = array_w_first,
                                array_h_second = array_h_second,
                                array_w_second = array_w_second,
                                single_array = single_array,
                                ifmap_h = ifmap_h,
                                ifmap_w = ifmap_w,
                                filt_h = filt_h,
                                filt_w = filt_w,
                                num_channels = num_channels,
                                num_filt = num_filters,
                                strides = strides,
                                data_flow = data_flow,
                                word_size_bytes = 1,
                                filter_sram_size_first = filter_sram_size_first,
                                ifmap_sram_size_first = ifmap_sram_size_first,
                                ofmap_sram_size_first = ofmap_sram_size_first,
                                filter_sram_size_second = filter_sram_size_second,
                                ifmap_sram_size_second = ifmap_sram_size_second,
                                ofmap_sram_size_second = ofmap_sram_size_second,
                                filt_base = filter_base,
                                ifmap_base = ifmap_base,
                                ofmap_base = ofmap_base,
                                sram_read_trace_file_first= net_name + "_" + name + "_sram0_read.csv",
                                sram_read_trace_file_second= net_name + "_" + name + "_sram1_read.csv",
                                sram_write_trace_file_first= net_name + "_" + name + "_sram0_write.csv",
                                sram_write_trace_file_second= net_name + "_" + name + "_sram1_write.csv",
                                dram_filter_trace_file=net_name + "_" + name + "_dram_filter_read.csv",
                                dram_ifmap_trace_file= net_name + "_" + name + "_dram_ifmap_read.csv",
                                dram_ofmap_trace_file= net_name + "_" + name + "_dram_ofmap_write.csv"
                            )

        bw_log += bw_str
        bw.write(bw_log + "\n")

        detailed_log += detailed_str
        detail.write(detailed_log + "\n")

        if single_array == 1:
            both_array_used = 0
            array_two_idle = 0
            array_one_idle = 0
        else:
            both_array_used = 1

            if array_two_used == 1:
                array_two_idle = 0
            else:
                array_two_idle = 1

            if array_one_used == 1:
                array_one_idle = 0
            else:
                array_one_idle = 1

        max_bw_log += tg.gen_max_bw_numbers(
            both_array_used=both_array_used,
            array_one_idle=array_one_idle,
            array_two_idle=array_two_idle,
            sram_read_trace_file_first=net_name + "_" + name +
            "_sram0_read.csv",  #Selvaraj: Need to update this for two SRAM's after DRAM CSV merge
            sram_write_trace_file_first=net_name + "_" + name +
            "_sram0_write.csv",
            sram_read_trace_file_second=net_name + "_" + name +
            "_sram1_read.csv",
            sram_write_trace_file_second=net_name + "_" + name +
            "_sram1_write.csv",
            dram_filter_trace_file=net_name + "_" + name +
            "_dram_filter_read.csv",
            dram_ifmap_trace_file=net_name + "_" + name +
            "_dram_ifmap_read.csv",
            dram_ofmap_trace_file=net_name + "_" + name +
            "_dram_ofmap_write.csv")

        maxbw.write(max_bw_log + "\n")

        # Anand: This is not needed, sram_traffic() returns this
        #last_line = subprocess.check_output(["tail","-1", net_name + "_" + name + "_sram_write.csv"] )
        #clk = str(last_line).split(',')[0]
        #clk = str(clk).split("'")[1]

        util_str = str(util)
        line = name + ",\t" + clk + ",\t" + util_str + ",\n"
        cycl.write(line)

        # Power Metric
        power_metric_line = name + ",\t" + str(power_metric) + ",\n"
        power_metric_file.write(power_metric_line)

    bw.close()
    maxbw.close()
    cycl.close()
    param_file.close()
    power_metric_file.close()
예제 #2
0
def run_net(ifmap_sram_size=1,
            filter_sram_size=1,
            ofmap_sram_size=1,
            array_h=32,
            array_w=32,
            data_flow='os',
            topology_file='./topologies/yolo_v2.csv',
            net_name='yolo_v2',
            offset_list=[0, 10000000, 20000000],
            word_size_bytes=1):

    ifmap_sram_size *= 1024
    filter_sram_size *= 1024
    ofmap_sram_size *= 1024

    #fname = net_name + ".csv"
    param_file = open(topology_file, 'r')

    fname = net_name + "_avg_bw.csv"
    bw = open(fname, 'w')

    f2name = net_name + "_max_bw.csv"
    maxbw = open(f2name, 'w')

    f3name = net_name + "_cycles.csv"
    cycl = open(f3name, 'w')

    f4name = net_name + "_detail.csv"
    detail = open(f4name, 'w')

    bw.write(
        "IFMAP SRAM Size,\tFilter SRAM Size,\tOFMAP SRAM Size,\tConv Layer Num,\tDRAM IFMAP Read BW,\tDRAM Filter Read BW,\tDRAM OFMAP Write BW,\tSRAM Read BW,\tSRAM OFMAP Write BW, \n"
    )
    maxbw.write(
        "IFMAP SRAM Size,\tFilter SRAM Size,\tOFMAP SRAM Size,\tConv Layer Num,\tMax DRAM IFMAP Read BW,\tMax DRAM Filter Read BW,\tMax DRAM OFMAP Write BW,\tMax SRAM Read BW,\tMax SRAM OFMAP Write BW,\n"
    )
    cycl.write("Layer,\tCycles,\t% Utilization,\n")
    detailed_log = "Layer," +\
                 "\tDRAM_IFMAP_start,\tDRAM_IFMAP_stop,\tDRAM_IFMAP_bytes," + \
                 "\tDRAM_Filter_start,\tDRAM_Filter_stop,\tDRAM_Filter_bytes," + \
                 "\tDRAM_OFMAP_start,\tDRAM_OFMAP_stop,\tDRAM_OFMAP_bytes," + \
                 "\tSRAM_read_start,\tSRAM_read_stop,\tSRAM_read_bytes," +\
                 "\tSRAM_write_start,\tSRAM_write_stop,\tSRAM_write_bytes," + \
                 "\tDRAM_IFAMP_acc_times,\tDRAM_FILT_acc_times,\tDRAM_OFAMP_acc_times,\n"

    detail.write(detailed_log)

    first = True

    for row in param_file:
        if first:
            first = False
            continue

        elems = row.strip().split(',')
        #print(len(elems))

        # Do not continue if incomplete line
        if len(elems) < 9:
            continue

        name = elems[0]
        print("")
        print("Commencing run for " + name)

        ifmap_h = int(elems[1])
        ifmap_w = int(elems[2])

        filt_h = int(elems[3])
        filt_w = int(elems[4])

        num_channels = int(elems[5])
        num_filters = int(elems[6])

        strides = int(elems[7])

        ifmap_base = offset_list[0]
        filter_base = offset_list[1]
        ofmap_base = offset_list[2]

        bw_log = str(ifmap_sram_size) + ",\t" + str(
            filter_sram_size) + ",\t" + str(
                ofmap_sram_size) + ",\t" + name + ",\t"
        max_bw_log = bw_log
        detailed_log = name + ",\t"

        bw_str, detailed_str, util, clk =  \
            tg.gen_all_traces(  array_h = array_h,
                                array_w = array_w,
                                ifmap_h = ifmap_h,
                                ifmap_w = ifmap_w,
                                filt_h = filt_h,
                                filt_w = filt_w,
                                num_channels = num_channels,
                                num_filt = num_filters,
                                strides = strides,
                                data_flow = data_flow,
                                word_size_bytes = word_size_bytes,
                                filter_sram_size = filter_sram_size,
                                ifmap_sram_size = ifmap_sram_size,
                                ofmap_sram_size = ofmap_sram_size,
                                filt_base = filter_base,
                                ifmap_base = ifmap_base,
                                ofmap_base = ofmap_base,
                                sram_read_trace_file= net_name + "_" + name + "_sram_read.csv",
                                sram_write_trace_file= net_name + "_" + name + "_sram_write.csv",
                                dram_filter_trace_file=net_name + "_" + name + "_dram_filter_read.csv",
                                dram_ifmap_trace_file= net_name + "_" + name + "_dram_ifmap_read.csv",
                                dram_ofmap_trace_file= net_name + "_" + name + "_dram_ofmap_write.csv"
                            )

        bw_log += bw_str
        bw.write(bw_log + "\n")

        detailed_log += detailed_str
        detail.write(detailed_log + "\n")

        max_bw_log += tg.gen_max_bw_numbers(
            sram_read_trace_file=net_name + "_" + name + "_sram_read.csv",
            sram_write_trace_file=net_name + "_" + name + "_sram_write.csv",
            dram_filter_trace_file=net_name + "_" + name +
            "_dram_filter_read.csv",
            dram_ifmap_trace_file=net_name + "_" + name +
            "_dram_ifmap_read.csv",
            dram_ofmap_trace_file=net_name + "_" + name +
            "_dram_ofmap_write.csv")

        maxbw.write(max_bw_log + "\n")

        # Anand: This is not needed, sram_traffic() returns this
        #last_line = subprocess.check_output(["tail","-1", net_name + "_" + name + "_sram_write.csv"] )
        #clk = str(last_line).split(',')[0]
        #clk = str(clk).split("'")[1]

        util_str = str(util)
        line = name + ",\t" + clk + ",\t" + util_str + ",\n"
        cycl.write(line)

    bw.close()
    maxbw.close()
    cycl.close()
    param_file.close()
예제 #3
0
def run_net(ifmap_sram_size=1,
            filter_sram_size=1,
            ofmap_sram_size=1,
            array_h=32,
            array_w=32,
            data_flow='os',
            topology_file='./topologies/yolo_v2.csv',
            net_name='yolo_v2'):

    ifmap_sram_size *= 1024
    filter_sram_size *= 1024
    ofmap_sram_size *= 1024

    #fname = net_name + ".csv"
    param_file = open(topology_file, 'r')

    fname = net_name + "_avg_bw.csv"
    bw = open(fname, 'w')

    f2name = net_name + "_max_bw.csv"
    maxbw = open(f2name, 'w')

    f3name = net_name + "_cycles.csv"
    cycl = open(f3name, 'w')

    bw.write(
        "IFMAP SRAM Size,\tFilter SRAM Size,\tOFMAP SRAM Size,\tConv Layer Num,\tDRAM IFMAP Read BW,\tDRAM Filter Read BW,\tDRAM OFMAP Write BW,\tSRAM Read BW,\tSRAM OFMAP Write BW, \n"
    )
    maxbw.write(
        "IFMAP SRAM Size,\tFilter SRAM Size,\tOFMAP SRAM Size,\tConv Layer Num,\tMax DRAM IFMAP Read BW,\tMax DRAM Filter Read BW,\tMax DRAM OFMAP Write BW,\tMax SRAM Read BW,\tMax SRAM OFMAP Write BW,\n"
    )
    cycl.write("Layer,\tCycles,\n")

    first = True

    for row in param_file:
        if first:
            first = False
            continue

        elems = row.strip().split(',')
        #print(len(elems))

        # Do not continue if incomplete line
        if len(elems) < 9:
            continue

        name = elems[0]
        print("")
        print("Commencing run for " + name)

        ifmap_h = int(elems[1])
        ifmap_w = int(elems[2])

        filt_h = int(elems[3])
        filt_w = int(elems[4])

        num_channels = int(elems[5])
        num_filters = int(elems[6])

        strides = int(elems[7])
        filter_base = 1000000 * 100

        bw_log = str(ifmap_sram_size) + ",\t" + str(
            filter_sram_size) + ",\t" + str(
                ofmap_sram_size) + ",\t" + name + ",\t"
        max_bw_log = bw_log

        bw_log += tg.gen_all_traces(
            array_h=array_h,
            array_w=array_w,
            ifmap_h=ifmap_h,
            ifmap_w=ifmap_w,
            filt_h=filt_h,
            filt_w=filt_w,
            num_channels=num_channels,
            num_filt=num_filters,
            strides=strides,
            data_flow=data_flow,
            word_size_bytes=1,
            filter_sram_size=filter_sram_size,
            ifmap_sram_size=ifmap_sram_size,
            ofmap_sram_size=ofmap_sram_size,
            filt_base=filter_base,
            sram_read_trace_file=net_name + "_" + name + "_sram_read.csv",
            sram_write_trace_file=net_name + "_" + name + "_sram_write.csv",
            dram_filter_trace_file=net_name + "_" + name +
            "_dram_filter_read.csv",
            dram_ifmap_trace_file=net_name + "_" + name +
            "_dram_ifmap_read.csv",
            dram_ofmap_trace_file=net_name + "_" + name +
            "_dram_ofmap_write.csv")

        bw.write(bw_log + "\n")

        max_bw_log += tg.gen_max_bw_numbers(
            sram_read_trace_file=net_name + "_" + name + "_sram_read.csv",
            sram_write_trace_file=net_name + "_" + name + "_sram_write.csv",
            dram_filter_trace_file=net_name + "_" + name +
            "_dram_filter_read.csv",
            dram_ifmap_trace_file=net_name + "_" + name +
            "_dram_ifmap_read.csv",
            dram_ofmap_trace_file=net_name + "_" + name +
            "_dram_ofmap_write.csv")

        maxbw.write(max_bw_log + "\n")

        last_line = subprocess.check_output(
            ["tail", "-1", net_name + "_" + name + "_sram_write.csv"])
        clk = str(last_line).split(',')[0]
        clk = str(clk).split("'")[1]
        line = name + ",\t" + clk + ",\n"
        cycl.write(line)

    bw.close()
    maxbw.close()
    cycl.close()
    param_file.close()