Skip to content
Snippets Groups Projects
optimizer.py 2.08 KiB
Newer Older
'''
Top level function of optimization framework
'''
from . import mapping_point_generator
from . import cost_model

from . import loop_enum as le
from . import buffer_enum as be 

def opt_optimizer(resource, layer, hint=None, verbose=False):
    '''
    Evaluate the cost of each mapping point,
    record the mapping_point with the smallest cost
    '''

    smallest_cost, perf, best_mapping_point = mapping_point_generator.opt_mapping_point_generator_function(resource, layer, hint, verbose)
    access_list, array_cost  = cost_model.get_access(best_mapping_point, layer, resource)

    # total_cost = cost_model.get_cost(resource, best_mapping_point, layer, verbose)
    # assert total_cost == smallest_cost

    if verbose:
        print("Optimal_Energy_(pJ): ", smallest_cost)
        print("Runtime_(cycles):", perf)
        #print("Best mapping_point: ", best_mapping_point.loop_blockings, best_mapping_point.loop_partitionings, best_mapping_point.loop_orders)
    return [smallest_cost, best_mapping_point, perf]
 
def optimizer(resource, layer, hint=None, verbose=False):
     
    smallest_cost = float("inf")
    mp_generator = mapping_point_generator.mapping_point_generator_function(resource, layer, hint, verbose)

    
    #counter = 0
    for mapping_point in mp_generator:
        #counter += 1
        cost = cost_model.get_cost(resource, mapping_point, layer, verbose)
        #if verbose:
        #    print "Current cost: ", cost
        #     print "Current mapping_point: ", mapping_point.loop_blockings, mapping_point.loop_orders

        if cost < smallest_cost:
            smallest_cost = cost
            best_mapping_point = mapping_point
            if verbose:
                print("Current smallest cost: ", smallest_cost)
                print("Current best mapping_point: ", mapping_point.loop_blockings, mapping_point.loop_orders)
    #print counter
    
    if verbose:
        print(smallest_cost)
        #print("Best mapping_point: ", best_mapping_point.loop_blockings, mapping_point.loop_partitionings, best_mapping_point.loop_orders)

    return [smallest_cost, best_mapping_point]