abc-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
place_gordian.h
Go to the documentation of this file.
1 /*===================================================================*/
2 //
3 // place_gordian.h
4 //
5 // Aaron P. Hurst, 2003-2007
6 // ahurst@eecs.berkeley.edu
7 //
8 /*===================================================================*/
9 
10 #if !defined(PLACE_GORDIAN_H_)
11 #define ABC__phys__place__place_gordian_h
12 
13 
14 #include "place_base.h"
15 #include "place_qpsolver.h"
16 
18 
19 
20 // Parameters for analytic placement
21 #define CLIQUE_PENALTY 1.0
22 #define IGNORE_NETSIZE 20
23 
24 // Parameters for partitioning
25 #define LARGEST_FINAL_SIZE 20
26 #define PARTITION_AREA_ONLY true
27 #define REALLOCATE_PARTITIONS false
28 #define FINAL_REALLOCATE_PARTITIONS false
29 #define IGNORE_COG false
30 #define MAX_PARTITION_NONSYMMETRY 0.30
31 
32 // Parameters for re-partitioning
33 #define REPARTITION_LEVEL_DEPTH 4
34 #define REPARTITION_TARGET_FRACTION 0.15
35 #define REPARTITION_FM false
36 #define REPARTITION_HMETIS true
37 
38 // Parameters for F-M re-partitioning
39 #define FM_MAX_BIN 10
40 #define FM_MAX_PASSES 10
41 
42 extern int g_place_numPartitions;
43 
45 
46 typedef struct Partition {
47 
51  bool m_done,
52  m_leaf,
53  m_vertical;
54  float m_area;
55  int m_level;
56  struct Partition *m_sub1, *m_sub2;
57 } Partition;
58 
60 
61 void initPartitioning();
62 
64 
65 bool refinePartitions();
66 void reallocPartitions();
70 
71 void repartitionHMetis(Partition *parent);
72 void repartitionFM(Partition *parent);
73 
75 void partitionEqualArea(Partition *parent);
76 
77 void sanitizePlacement();
78 
80 void solveQuadraticProblem(bool useCOG);
81 
82 
83 
85 
86 #endif
struct Partition * m_sub1
Definition: place_gordian.h:56
static Llb_Mgr_t * p
Definition: llb3Image.c:950
Partition * g_place_rootPartition
void partitionEqualArea(Partition *parent)
Splits a partition into two halves of equal area.
void solveQuadraticProblem(bool useCOG)
Calls quadratic solver.
Definition: place_genqp.c:275
void reallocPartition(Partition *p)
Reallocates a partition and all of its children.
void partitionScanlineMincut(Partition *parent)
Scans the cells within a partition from left to right and chooses the min-cut.
void repartitionHMetis(Partition *parent)
Repartitions the two subpartitions using the hMetis min-cut library.
struct Partition * m_sub2
Definition: place_gordian.h:56
int g_place_numPartitions
Definition: place_gordian.c:28
bool m_vertical
Definition: place_gordian.h:51
void repartitionFM(Partition *parent)
Fiduccia-Matheyses mincut partitioning algorithm.
bool refinePartitions()
Splits large leaf partitions.
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
Definition: abc_global.h:105
ConcreteCell ** m_members
Definition: place_gordian.h:49
#define ABC_NAMESPACE_HEADER_END
Definition: abc_global.h:106
void incrementalPartition()
Adds new cells to an existing partition. Partition sizes/locations are unchanged. ...
bool refinePartition(Partition *p)
Splits any large leaves within a partition.
Rect m_bounds
Definition: place_gordian.h:50
void resizePartition(Partition *p)
Recomputes the bounding boxes of the child partitions based on their relative areas.
struct Partition Partition
int m_numMembers
Definition: place_gordian.h:48
void constructQuadraticProblem()
Constructs the matrices necessary to do analytical placement.
Definition: place_genqp.c:53
void reallocPartitions()
Reallocates the partitions based on placement information.
qps_problem_t * g_place_qpProb
Definition: place_genqp.c:28
void sanitizePlacement()
Moves any cells that are outside of the core bounds to the nearest location within.
float m_area
Definition: place_gordian.h:54
void initPartitioning()
Initializes data structures necessary for partitioning.