예제 #1
0
파일: tuner.py 프로젝트: phrb/legup-tuner
def save_final_configuration(configuration):
    best_config_log.write("]")
    best_config_log.close()

    best_log.close()

    legup_parameters.generate_file(configuration, "./")
예제 #2
0
def save_final_configuration(configuration):
    best_config_log.write("]")
    best_config_log.close()

    best_log.close()

    legup_parameters.generate_file(configuration, "./")
예제 #3
0
파일: tuner.py 프로젝트: phrb/legup-tuner
def save_final_configuration(configuration):
    legup_parameters.generate_file(configuration, ".")

    best_config_log.write("]")
    best_config_log.close()

    best_log.close()
    best_cycles_log.close()
    best_fmax_log.close()
예제 #4
0
def save_final_configuration(configuration):
    legup_parameters.generate_file(configuration, ".")

    best_config_log.write("]")
    best_config_log.close()

    best_log.close()
    best_cycles_log.close()
    best_fmax_log.close()
예제 #5
0
def get_wallclock_time(cfg):
    unique_id = uuid4()

    unique_path = "{0}_{1}".format(application, unique_id)

    copytree(application, unique_path)

    os.remove("{0}/config.tcl".format(unique_path))

    filename = legup_parameters.generate_file(cfg, unique_path)

    cmd = "./{0} {1}".format(script_name, unique_path)

    try:
        output = subprocess.check_output(cmd, shell=True)
        output = output.split()

        fmax = float(output[0])
        combinatorial = float(output[1])
        registers = float(output[2])
        dsp = float(output[3])

        rmtree(unique_path, ignore_errors=True)
        return fmax + combinatorial + registers + dsp
    except:
        rmtree(unique_path, ignore_errors=True)
        return penalty
예제 #6
0
def get_wallclock_time(cfg):
    unique_id        = uuid4()

    unique_path = "{0}_{1}".format(application, unique_id)

    copytree(application, unique_path)

    os.remove("{0}/config.tcl".format(unique_path))

    filename = legup_parameters.generate_file(cfg, unique_path)

    cmd = "./{0} {1}".format(script_name, unique_path)

    try:
        output = subprocess.check_output(cmd, shell = True)
        output = output.split()

        fmax          = float(output[0])
        combinatorial = float(output[1])
        registers     = float(output[2])
        dsp           = float(output[3])

        rmtree(unique_path, ignore_errors = True)
        return fmax + combinatorial + registers + dsp
    except:
        rmtree(unique_path, ignore_errors = True)
        return penalty
예제 #7
0
파일: tuner.py 프로젝트: phrb/legup-tuner
def get_wallclock_time(cfg):
    unique_id        = uuid4()

    unique_host_path = "{0}/{1}".format(host_path, unique_id)

    os.mkdir(unique_host_path)

    copy(script_name, "{0}/{1}".format(unique_host_path, script_name))

    filename = legup_parameters.generate_file(cfg, unique_host_path)

    docker_cmd  = "sudo docker run --rm"
    docker_cmd += " -w {0}".format(container_path)

    docker_cmd += " -v {0}:".format(unique_host_path)
    docker_cmd += "{0} -t -i {1}".format(container_path, image_name)

    docker_cmd += " /bin/bash -c \"./{0} {1} {2}\"".format(script_name,
                                                           unique_id,
                                                           verilog_file)

    print(docker_cmd)

    try:
        output = subprocess.check_output(docker_cmd, shell = True)
        output = output.split()

        print output

        factor = 1000.
        cycles = float(output[0])
        fmax   = float(output[1])

        # Skip output[2,3,4]

        lu     = float(output[5])
        pins   = float(output[6])
        regs   = float(output[7])
        block  = float(output[8])
        ram    = float(output[9])
        dsp    = float(output[10])

        # TODO Improve weights
        # value = (cycles * (factor / fmax)) + lu + pins + regs + block + ram + dsp

        value = relative_improvement_normalization(cycles,
                                                   fmax,
                                                   lu,
                                                   pins,
                                                   regs,
                                                   block,
                                                   ram,
                                                   dsp)

        result = { 'cycles': cycles,
                   'fmax': fmax,
                   'lu': lu,
                   'pins': pins,
                   'regs': regs,
                   'block': block,
                   'ram': ram,
                   'dsp': dsp,
                   'value': value,
                 }

        rmtree(unique_host_path, ignore_errors = True)
        return result
    except:
        # TODO: Discover all parameters that
        #       break compilation
        result = { 'cycles': penalty,
                   'fmax': penalty,
                   'lu': penalty,
                   'pins': penalty,
                   'regs': penalty,
                   'block': penalty,
                   'ram': penalty,
                   'dsp': penalty,
                   'value': penalty,
                 }

        rmtree(unique_host_path, ignore_errors = True)
        return result
예제 #8
0
def get_wallclock_time(cfg):
    unique_id = uuid4()

    unique_host_path = "{0}/{1}".format(host_path, unique_id)

    os.mkdir(unique_host_path)

    copy(script_name, "{0}/{1}".format(unique_host_path, script_name))

    filename = legup_parameters.generate_file(cfg, unique_host_path)

    docker_cmd = "sudo docker run --rm"
    docker_cmd += " -w {0}".format(container_path)

    docker_cmd += " -v {0}:".format(unique_host_path)
    docker_cmd += "{0} -t -i {1}".format(container_path, image_name)

    docker_cmd += " /bin/bash -c \"./{0} {1} {2}\"".format(
        script_name, unique_id, verilog_file)

    print(docker_cmd)

    try:
        output = subprocess.check_output(docker_cmd, shell=True)
        output = output.split()

        print output

        factor = 1000.
        cycles = float(output[0])
        fmax = float(output[1])

        # Skip output[2,3,4]

        lu = float(output[5])
        pins = float(output[6])
        regs = float(output[7])
        block = float(output[8])
        ram = float(output[9])
        dsp = float(output[10])

        # TODO Improve weights
        # value = (cycles * (factor / fmax)) + lu + pins + regs + block + ram + dsp

        value = relative_improvement_normalization(cycles, fmax, lu, pins,
                                                   regs, block, ram, dsp)

        result = {
            'cycles': cycles,
            'fmax': fmax,
            'lu': lu,
            'pins': pins,
            'regs': regs,
            'block': block,
            'ram': ram,
            'dsp': dsp,
            'value': value,
        }

        rmtree(unique_host_path, ignore_errors=True)
        return result
    except:
        # TODO: Discover all parameters that
        #       break compilation
        result = {
            'cycles': penalty,
            'fmax': penalty,
            'lu': penalty,
            'pins': penalty,
            'regs': penalty,
            'block': penalty,
            'ram': penalty,
            'dsp': penalty,
            'value': penalty,
        }

        rmtree(unique_host_path, ignore_errors=True)
        return result