Skip to content

Commit 4dc0fe4

Browse files
committed
Added command line option to turn attraction groups on or off
1 parent f262a97 commit 4dc0fe4

File tree

7 files changed

+32
-22
lines changed

7 files changed

+32
-22
lines changed

vpr/src/base/SetupVPR.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,7 @@ void SetupPackerOpts(const t_options& Options,
495495
PackerOpts->high_fanout_threshold = Options.pack_high_fanout_threshold;
496496
PackerOpts->transitive_fanout_threshold = Options.pack_transitive_fanout_threshold;
497497
PackerOpts->feasible_block_array_size = Options.pack_feasible_block_array_size;
498+
PackerOpts->use_attraction_groups = Options.use_attraction_groups;
498499

499500
//TODO: document?
500501
PackerOpts->inter_cluster_net_delay = 1.0; /* DEFAULT */

vpr/src/base/read_options.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1638,6 +1638,11 @@ argparse::ArgumentParser create_arg_parser(std::string prog_name, t_options& arg
16381638
.default_value("2")
16391639
.show_in(argparse::ShowIn::HELP_ONLY);
16401640

1641+
pack_grp.add_argument<bool, ParseOnOff>(args.use_attraction_groups, "--use_attraction_groups")
1642+
.help("Whether attraction groups are used to make it easier to pack primitives in the same floorplan region together.")
1643+
.default_value("on")
1644+
.show_in(argparse::ShowIn::HELP_ONLY);
1645+
16411646
auto& place_grp = parser.add_argument_group("placement options");
16421647

16431648
place_grp.add_argument(args.Seed, "--seed")

vpr/src/base/read_options.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ struct t_options {
9191
argparse::ArgValue<int> pack_feasible_block_array_size;
9292
argparse::ArgValue<std::vector<std::string>> pack_high_fanout_threshold;
9393
argparse::ArgValue<int> pack_verbosity;
94+
argparse::ArgValue<bool> use_attraction_groups;
9495

9596
/* Placement options */
9697
argparse::ArgValue<int> Seed;

vpr/src/base/vpr_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,7 @@ struct t_packer_opts {
814814
enum e_packer_algorithm packer_algorithm;
815815
std::string device_layout;
816816
e_timing_update_type timing_update_type;
817+
bool use_attraction_groups;
817818
};
818819

819820
/**

vpr/src/pack/attraction_groups.cpp

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,39 @@
11
#include "attraction_groups.h"
22

3-
AttractionInfo::AttractionInfo() {
3+
AttractionInfo::AttractionInfo(bool attraction_groups_on) {
44
auto& floorplanning_ctx = g_vpr_ctx.mutable_floorplanning();
55
auto& atom_ctx = g_vpr_ctx.atom();
66
int num_parts = floorplanning_ctx.constraints.get_num_partitions();
77

8-
//Create an attraction group for each partition in the floorplanning constraints
9-
for (int ipart = 0; ipart < num_parts; ipart++) {
10-
PartitionId partid(ipart);
11-
Partition part = floorplanning_ctx.constraints.get_partition(partid);
12-
13-
AttractionGroup group_info;
14-
group_info.group_atoms = floorplanning_ctx.constraints.get_part_atoms(partid);
15-
16-
attraction_groups.push_back(group_info);
17-
}
18-
198
//Initialize every atom to have no attraction group id
209
int num_atoms = atom_ctx.nlist.blocks().size();
2110

2211
atom_attraction_group.resize(num_atoms);
2312
fill(atom_attraction_group.begin(), atom_attraction_group.end(), AttractGroupId::INVALID());
2413

25-
//Then, fill in the group id for the atoms that do have an attraction group
26-
int num_att_grps = attraction_groups.size();
14+
//Create an attraction group for each partition in the floorplanning constraints
15+
if (attraction_groups_on) {
16+
for (int ipart = 0; ipart < num_parts; ipart++) {
17+
PartitionId partid(ipart);
18+
Partition part = floorplanning_ctx.constraints.get_partition(partid);
19+
20+
AttractionGroup group_info;
21+
group_info.group_atoms = floorplanning_ctx.constraints.get_part_atoms(partid);
22+
23+
attraction_groups.push_back(group_info);
24+
}
25+
26+
//Then, fill in the group id for the atoms that do have an attraction group
27+
int num_att_grps = attraction_groups.size();
2728

28-
for (int igroup = 0; igroup < num_att_grps; igroup++) {
29-
AttractGroupId group_id(igroup);
29+
for (int igroup = 0; igroup < num_att_grps; igroup++) {
30+
AttractGroupId group_id(igroup);
3031

31-
AttractionGroup att_group = attraction_groups[group_id];
32+
AttractionGroup att_group = attraction_groups[group_id];
3233

33-
for (unsigned int iatom = 0; iatom < att_group.group_atoms.size(); iatom++) {
34-
atom_attraction_group[att_group.group_atoms[iatom]] = group_id;
34+
for (unsigned int iatom = 0; iatom < att_group.group_atoms.size(); iatom++) {
35+
atom_attraction_group[att_group.group_atoms[iatom]] = group_id;
36+
}
3537
}
3638
}
3739
}

vpr/src/pack/attraction_groups.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ struct AttractionGroup {
4141
* Atoms belonging to this attraction group will receive this gain if they
4242
* are potential candidates to be put in a cluster with the same attraction group.
4343
*/
44-
float gain = 3;
44+
float gain = 7;
4545

4646
/*
4747
* If the group is made up from a partition of atoms that are confined to a size one spot
@@ -56,7 +56,7 @@ class AttractionInfo {
5656
public:
5757
//Constructor that fills in the attraction groups based on vpr's floorplan constraints.
5858
//If no constraints were specified, then no attraction groups will be created.
59-
AttractionInfo();
59+
AttractionInfo(bool attraction_groups_on);
6060

6161
//Setters and getters for the class
6262
AttractGroupId get_atom_attraction_group(const AtomBlockId atom_id);

vpr/src/pack/pack.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ bool try_pack(t_packer_opts* packer_opts,
100100
expected_lowest_cost_pb_gnode,
101101
list_of_packing_patterns.size()));
102102

103-
AttractionInfo attraction_groups;
103+
AttractionInfo attraction_groups(packer_opts->use_attraction_groups);
104104
VTR_LOG("%d attraction groups were created during prepacking.\n", attraction_groups.num_attraction_groups());
105105
VTR_LOG("Finish prepacking.\n");
106106

0 commit comments

Comments
 (0)