Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
'''
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]