@brief A wraper for all data tensors on device for building ops
| 78 | |
| 79 | |
| 80 | class PlaceDataCollection(object): |
| 81 | """ |
| 82 | @brief A wraper for all data tensors on device for building ops |
| 83 | """ |
| 84 | |
| 85 | def __init__(self, pos, params, placedb, device): |
| 86 | """ |
| 87 | @brief initialization |
| 88 | @param pos locations of cells |
| 89 | @param params parameters |
| 90 | @param placedb placement database |
| 91 | @param device cpu or cuda |
| 92 | """ |
| 93 | self.device = device |
| 94 | # position should be parameter |
| 95 | self.pos = pos |
| 96 | |
| 97 | with torch.no_grad(): |
| 98 | # other tensors required to build ops |
| 99 | |
| 100 | self.node_size_x = torch.from_numpy(placedb.node_size_x).to(device) |
| 101 | self.node_size_y = torch.from_numpy(placedb.node_size_y).to(device) |
| 102 | # original node size for legalization, since they will be adjusted in global placement |
| 103 | if params.routability_opt_flag: |
| 104 | self.original_node_size_x = self.node_size_x.clone() |
| 105 | self.original_node_size_y = self.node_size_y.clone() |
| 106 | |
| 107 | self.pin_offset_x = torch.tensor( |
| 108 | placedb.pin_offset_x, dtype=self.pos[0].dtype, device=device |
| 109 | ) |
| 110 | self.pin_offset_y = torch.tensor( |
| 111 | placedb.pin_offset_y, dtype=self.pos[0].dtype, device=device |
| 112 | ) |
| 113 | # original pin offset for legalization, since they will be adjusted in global placement |
| 114 | if params.routability_opt_flag: |
| 115 | self.original_pin_offset_x = self.pin_offset_x.clone() |
| 116 | self.original_pin_offset_y = self.pin_offset_y.clone() |
| 117 | |
| 118 | self.target_density = torch.empty(1, dtype=self.pos[0].dtype, device=device) |
| 119 | self.target_density.data.fill_(params.target_density) |
| 120 | |
| 121 | self.node_areas = self.node_size_x * self.node_size_y |
| 122 | self.movable_macro_mask = torch.from_numpy(placedb.movable_macro_mask).to( |
| 123 | device |
| 124 | ) |
| 125 | self.fixed_macro_mask = torch.from_numpy(placedb.fixed_macro_mask).to( |
| 126 | device |
| 127 | ) |
| 128 | |
| 129 | self.pin2node_map = torch.from_numpy(placedb.pin2node_map).to(device) |
| 130 | self.flat_node2pin_map = torch.from_numpy(placedb.flat_node2pin_map).to( |
| 131 | device |
| 132 | ) |
| 133 | self.flat_node2pin_start_map = torch.from_numpy( |
| 134 | placedb.flat_node2pin_start_map |
| 135 | ).to(device) |
| 136 | # number of pins for each cell |
| 137 | self.pin_weights = ( |