-
Notifications
You must be signed in to change notification settings - Fork 3
/
EA_finetune.py
66 lines (55 loc) · 2.85 KB
/
EA_finetune.py
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
56
57
58
59
60
61
62
63
64
65
66
from place_db import PlaceDB
from utils import greedy_placer_with_init_coordinate, write_final_placement, rank_macros, read_mask_placement
from common import grid_setting, my_inf
import random
import argparse
import time
import csv
import os
def main():
parser = argparse.ArgumentParser(description='argparse testing')
parser.add_argument('--dataset', required=True)
parser.add_argument('--seed', required=True)
parser.add_argument('--stop_round', default=my_inf)
args = parser.parse_args()
dataset = args.dataset
seed1 = args.seed
stop_round = int(args.stop_round)
random.seed(seed1)
placedb = PlaceDB(dataset)
hpwl_save_dir = "result/finetune_maskplace/curve/"
placement_save_dir = "result/finetune_maskplace/placement/"
node_id_ls = rank_macros(placedb)
if not os.path.exists(hpwl_save_dir):
os.makedirs(hpwl_save_dir)
if not os.path.exists(placement_save_dir):
os.makedirs(placement_save_dir)
hpwl_save_dir += "{}_seed_{}.csv".format(dataset, seed1)
placement_save_dir += "{}_seed_{}.csv".format(dataset, seed1)
hpwl_save_file = open(hpwl_save_dir,"a+")
hpwl_writer = csv.writer(hpwl_save_file)
grid_num = grid_setting[dataset]["grid_num"]
grid_size = grid_setting[dataset]["grid_size"]
best_hpwl = my_inf
place_record = read_mask_placement("/home/shiyq/results_and_eval/our/mask/placement/{}.pl".format(dataset), placedb, grid_size)
placed_macros, hpwl = greedy_placer_with_init_coordinate(node_id_ls, placedb, grid_num, grid_size, place_record)
for _ in range(stop_round):
node_id_ls = list(place_record.keys())
node_a, node_b = random.sample(node_id_ls, 2)
node_a_loc_x, node_a_loc_y = place_record[node_a]["loc_x"], place_record[node_a]["loc_y"]
node_b_loc_x, node_b_loc_y = place_record[node_b]["loc_x"], place_record[node_b]["loc_y"]
place_record[node_a]["loc_x"], place_record[node_a]["loc_y"] = node_b_loc_x, node_b_loc_y
place_record[node_b]["loc_x"], place_record[node_b]["loc_y"] = node_a_loc_x, node_a_loc_y
placed_macro, hpwl = greedy_placer_with_init_coordinate(node_id_ls, placedb, grid_num, grid_size, place_record)
if hpwl >= best_hpwl:
node_a_loc_x, node_a_loc_y = place_record[node_a]["loc_x"], place_record[node_a]["loc_y"]
node_b_loc_x, node_b_loc_y = place_record[node_b]["loc_x"], place_record[node_b]["loc_y"]
place_record[node_a]["loc_x"], place_record[node_a]["loc_y"] = node_b_loc_x, node_b_loc_y
place_record[node_b]["loc_x"], place_record[node_b]["loc_y"] = node_a_loc_x, node_a_loc_y
else:
best_hpwl = hpwl
best_placed_macro = placed_macro
write_final_placement(best_placed_macro, placement_save_dir)
hpwl_writer.writerow([hpwl, time.time()])
hpwl_save_file.flush()
main()