Skip to content

Commit fbfe638

Browse files
[AP] Updated CI to Support Eigen
1 parent 2bb707c commit fbfe638

File tree

20 files changed

+83
-30
lines changed

20 files changed

+83
-30
lines changed

.github/workflows/test.yml

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -139,57 +139,68 @@ jobs:
139139
{
140140
name: 'Basic',
141141
params: '-DCMAKE_COMPILE_WARNING_AS_ERROR=on -DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on',
142-
suite: 'vtr_reg_basic'
142+
suite: 'vtr_reg_basic',
143+
extra_pkgs: ""
143144
},
144145
{
145146
name: 'Basic with highest assertion level',
146147
params: '-DCMAKE_COMPILE_WARNING_AS_ERROR=on -DVTR_ASSERT_LEVEL=4 -DWITH_BLIFEXPLORER=on',
147-
suite: 'vtr_reg_basic'
148+
suite: 'vtr_reg_basic',
149+
extra_pkgs: ""
148150
},
149151
{
150152
name: 'Basic_odin',
151153
params: '-DCMAKE_COMPILE_WARNING_AS_ERROR=on -DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on -DWITH_PARMYS=OFF -DWITH_ODIN=on',
152-
suite: 'vtr_reg_basic_odin'
154+
suite: 'vtr_reg_basic_odin',
155+
extra_pkgs: ""
153156
},
154157
{
155158
name: 'Basic with NO_GRAPHICS',
156159
params: '-DCMAKE_COMPILE_WARNING_AS_ERROR=on -DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on -DVPR_USE_EZGL=off',
157-
suite: 'vtr_reg_basic'
160+
suite: 'vtr_reg_basic',
161+
extra_pkgs: ""
158162
},
159163
{
160164
name: 'Basic with NO_SERVER',
161165
params: '-DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on -DVPR_USE_EZGL=on -DVPR_USE_SERVER=off',
162-
suite: 'vtr_reg_basic'
166+
suite: 'vtr_reg_basic',
167+
extra_pkgs: ""
163168
},
164169
{
165170
name: 'Basic with CAPNPROTO disabled',
166171
params: '-DCMAKE_COMPILE_WARNING_AS_ERROR=on -DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on -DVTR_ENABLE_CAPNPROTO=off',
167-
suite: 'vtr_reg_basic'
172+
suite: 'vtr_reg_basic',
173+
extra_pkgs: ""
168174
},
169175
{
170176
name: 'Basic with VTR_ENABLE_DEBUG_LOGGING',
171177
params: '-DCMAKE_COMPILE_WARNING_AS_ERROR=on -DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on -DVTR_ENABLE_DEBUG_LOGGING=on',
172-
suite: 'vtr_reg_basic'
178+
suite: 'vtr_reg_basic',
179+
extra_pkgs: ""
173180
},
174181
{
175182
name: 'Basic_odin with VTR_ENABLE_DEBUG_LOGGING',
176183
params: '-DCMAKE_COMPILE_WARNING_AS_ERROR=on -DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on -DVTR_ENABLE_DEBUG_LOGGING=on -DWITH_PARMYS=OFF -DWITH_ODIN=on',
177-
suite: 'vtr_reg_basic_odin'
184+
suite: 'vtr_reg_basic_odin',
185+
extra_pkgs: ""
178186
},
179187
{
180188
name: 'Strong',
181189
params: '-DCMAKE_COMPILE_WARNING_AS_ERROR=on -DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on',
182-
suite: 'vtr_reg_strong'
190+
suite: 'vtr_reg_strong',
191+
extra_pkgs: "libeigen3-dev"
183192
},
184193
{
185194
name: 'Strong_odin',
186195
params: '-DCMAKE_COMPILE_WARNING_AS_ERROR=on -DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on -DWITH_PARMYS=OFF -DWITH_ODIN=on',
187-
suite: 'vtr_reg_strong_odin'
196+
suite: 'vtr_reg_strong_odin',
197+
extra_pkgs: ""
188198
},
189199
{
190200
name: 'Valgrind Memory',
191201
params: '-DCMAKE_COMPILE_WARNING_AS_ERROR=on -DVTR_ASSERT_LEVEL=3 -DWITH_BLIFEXPLORER=on -DWITH_ODIN=on',
192-
suite: 'vtr_reg_valgrind_small'
202+
suite: 'vtr_reg_valgrind_small',
203+
extra_pkgs: ""
193204
}
194205
]
195206
name: 'R: ${{ matrix.name }}'
@@ -198,10 +209,17 @@ jobs:
198209
- uses: actions/setup-python@v5
199210
with:
200211
python-version: 3.10.10
212+
201213
- uses: actions/checkout@v4
202214
with:
203215
submodules: 'true'
204-
- run: ./.github/scripts/install_dependencies.sh
216+
217+
- name: Install dependencies
218+
run: ./.github/scripts/install_dependencies.sh
219+
220+
- name: Install external libraries
221+
run: sudo apt install -y ${{ matrix.extra_pkgs }}
222+
if: ${{ matrix.extra_pkgs }}
205223

206224
- uses: hendrikmuhs/[email protected]
207225

vpr/CMakeLists.txt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,27 @@ add_library(libvpr STATIC
7676

7777
target_include_directories(libvpr PUBLIC ${LIB_INCLUDE_DIRS})
7878

79+
80+
# Find if Eigen is installed. Eigen is used within the Analytical Solver of the
81+
# Analytical Placement flow. If Eigen is not installed, certain solvers cannot
82+
# be used.
83+
find_package(Eigen3 3.3 NO_MODULE)
84+
if (TARGET Eigen3::Eigen)
85+
target_link_libraries (libvpr Eigen3::Eigen)
86+
target_compile_definitions(libvpr PUBLIC -DEIGEN_INSTALLED)
87+
message(STATUS "Eigen3: Found")
88+
else ()
89+
message(STATUS "Eigen3: Not Found. Some features may be disabled.")
90+
endif (TARGET Eigen3::Eigen)
91+
7992
#VPR_ANALYTIC_PLACE is initialized in the root CMakeLists
80-
#Check Eigen dependency
93+
# NOTE: This is the cluster-level Analytical Placement which existed before the
94+
# flat Analytical Placement flow.
8195
if(${VPR_ANALYTIC_PLACE})
8296
message(STATUS "VPR Analytic Placement: Requested")
83-
find_package(Eigen3 3.3 NO_MODULE)
8497
if (TARGET Eigen3::Eigen)
8598
message(STATUS "VPR Analytic Placement dependency (Eigen3): Found")
8699
message(STATUS "VPR Analytic Placement: Enabled")
87-
target_link_libraries (libvpr Eigen3::Eigen)
88100
target_compile_definitions(libvpr PUBLIC -DENABLE_ANALYTIC_PLACE)
89101
else ()
90102
message(STATUS "VPR Analytic Placement dependency (Eigen3): Not Found (Download manually with sudo apt install libeigen3-dev, and rebuild)")

vpr/src/analytical_place/analytical_solver.cpp

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,6 @@
77
*/
88

99
#include "analytical_solver.h"
10-
#include <Eigen/src/SparseCore/SparseMatrix.h>
11-
#include <Eigen/SVD>
12-
#include <Eigen/Sparse>
13-
#include <Eigen/Eigenvalues>
14-
#include <Eigen/IterativeLinearSolvers>
1510
#include <cstddef>
1611
#include <cstdio>
1712
#include <memory>
@@ -23,12 +18,27 @@
2318
#include "vtr_assert.h"
2419
#include "vtr_vector.h"
2520

21+
#ifdef EIGEN_INSTALLED
22+
#include <Eigen/src/SparseCore/SparseMatrix.h>
23+
#include <Eigen/SVD>
24+
#include <Eigen/Sparse>
25+
#include <Eigen/Eigenvalues>
26+
#include <Eigen/IterativeLinearSolvers>
27+
#endif // EIGEN_INSTALLED
28+
2629
std::unique_ptr<AnalyticalSolver> make_analytical_solver(e_analytical_solver solver_type,
2730
const APNetlist& netlist) {
2831
// Based on the solver type passed in, build the solver.
2932
switch (solver_type) {
3033
case e_analytical_solver::QP_HYBRID:
34+
#ifdef EIGEN_INSTALLED
3135
return std::make_unique<QPHybridSolver>(netlist);
36+
#else
37+
(void)netlist;
38+
VPR_FATAL_ERROR(VPR_ERROR_AP,
39+
"QP Hybrid Solver requires the Eigen library");
40+
break;
41+
#endif // EIGEN_INSTALLED
3242
default:
3343
VPR_FATAL_ERROR(VPR_ERROR_AP,
3444
"Unrecognized analytical solver type");
@@ -57,6 +67,8 @@ AnalyticalSolver::AnalyticalSolver(const APNetlist& netlist)
5767
}
5868
}
5969

70+
#ifdef EIGEN_INSTALLED
71+
6072
void QPHybridSolver::init_linear_system() {
6173
// Count the number of star nodes that the netlist will have.
6274
size_t num_star_nodes = 0;
@@ -248,3 +260,5 @@ void QPHybridSolver::solve(unsigned iteration, PartialPlacement &p_placement) {
248260
}
249261
}
250262

263+
#endif // EIGEN_INSTALLED
264+

vpr/src/analytical_place/analytical_solver.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@
99
#pragma once
1010

1111
#include <memory>
12-
#include "Eigen/Sparse"
1312
#include "ap_netlist_fwd.h"
1413
#include "vtr_strong_id.h"
1514
#include "vtr_vector.h"
1615

16+
#ifdef EIGEN_INSTALLED
17+
#include "Eigen/Sparse"
18+
#endif // EIGEN_INSTALLED
19+
1720
// Forward declarations
1821
class PartialPlacement;
1922
class APNetlist;
@@ -105,6 +108,10 @@ class AnalyticalSolver {
105108
std::unique_ptr<AnalyticalSolver> make_analytical_solver(e_analytical_solver solver_type,
106109
const APNetlist &netlist);
107110

111+
// The Eigen library is used to solve matrix equations in the following solvers.
112+
// The solver cannot be built if Eigen is not installed.
113+
#ifdef EIGEN_INSTALLED
114+
108115
/**
109116
* @brief An Analytical Solver which tries to minimize the quadratic HPWL
110117
* objective:
@@ -203,3 +210,5 @@ class QPHybridSolver : public AnalyticalSolver {
203210
void solve(unsigned iteration, PartialPlacement &p_placement) final;
204211
};
205212

213+
#endif // EIGEN_INSTALLED
214+

vtr_flow/tasks/regression_tests/vtr_reg_basic/basic_ap/task_list.txt

Lines changed: 0 additions & 5 deletions
This file was deleted.

vtr_flow/tasks/regression_tests/vtr_reg_basic/task_list.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
regression_tests/vtr_reg_basic/basic_ap/single_wire
2-
regression_tests/vtr_reg_basic/basic_ap/single_ff
3-
regression_tests/vtr_reg_basic/basic_ap/ch_intrinsics
4-
regression_tests/vtr_reg_basic/basic_ap/diffeq1
51
regression_tests/vtr_reg_basic/basic_no_timing
62
regression_tests/vtr_reg_basic/basic_timing
73
regression_tests/vtr_reg_basic/basic_timing_no_sdc
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# This extra task list is for running just the basic_ap tasks in isolation.
2+
regression_tests/vtr_reg_strong/basic_ap/single_wire
3+
regression_tests/vtr_reg_strong/basic_ap/single_ff
4+
regression_tests/vtr_reg_strong/basic_ap/ch_intrinsics
5+
regression_tests/vtr_reg_strong/basic_ap/diffeq1

vtr_flow/tasks/regression_tests/vtr_reg_strong/task_list.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
regression_tests/vtr_reg_strong/basic_ap/single_wire
2+
regression_tests/vtr_reg_strong/basic_ap/single_ff
3+
regression_tests/vtr_reg_strong/basic_ap/ch_intrinsics
4+
regression_tests/vtr_reg_strong/basic_ap/diffeq1
15
regression_tests/vtr_reg_strong/strong_absorb_buffers
26
regression_tests/vtr_reg_strong/strong_analysis_only
37
regression_tests/vtr_reg_strong/strong_analytic_placer

0 commit comments

Comments
 (0)