diff options
author | Keith Rothman <537074+litghost@users.noreply.github.com> | 2021-03-01 09:48:29 -0800 |
---|---|---|
committer | Keith Rothman <537074+litghost@users.noreply.github.com> | 2021-03-01 09:55:54 -0800 |
commit | 0afa0da19f26ccda4172358602bd5ae9cd404f6c (patch) | |
tree | 6b0c7926b30ab971860f439abf40b67e66b1beee | |
parent | 6ff02248a3f625829c9bd041c369247ee926d8d0 (diff) | |
download | nextpnr-0afa0da19f26ccda4172358602bd5ae9cd404f6c.tar.gz nextpnr-0afa0da19f26ccda4172358602bd5ae9cd404f6c.tar.bz2 nextpnr-0afa0da19f26ccda4172358602bd5ae9cd404f6c.zip |
Add absl::flat_hash_map.
This lowers the CPU cost of using the flat wire map in router2, and should
use less memory as well.
Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com>
-rw-r--r-- | .gitmodules | 3 | ||||
m--------- | 3rdparty/abseil-cpp | 0 | ||||
-rw-r--r-- | CMakeLists.txt | 5 | ||||
-rw-r--r-- | common/router2.cc | 3 |
4 files changed, 10 insertions, 1 deletions
diff --git a/.gitmodules b/.gitmodules index a22fbc41..c0c178bf 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "fpga-interchange-schema"] path = 3rdparty/fpga-interchange-schema url = https://github.com/SymbiFlow/fpga-interchange-schema.git +[submodule "3rdparty/abseil-cpp"] + path = 3rdparty/abseil-cpp + url = https://github.com/abseil/abseil-cpp.git diff --git a/3rdparty/abseil-cpp b/3rdparty/abseil-cpp new file mode 160000 +Subproject a76698790753d2ec71f655cdc84d61bcb27780d diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c0537ff..2c8e38a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -171,6 +171,8 @@ if (NOT DEFINED CURRENT_GIT_VERSION) ) endif() +add_subdirectory(3rdparty/abseil-cpp EXCLUDE_FROM_ALL) + if (BUILD_TESTS) add_subdirectory(3rdparty/googletest/googletest ${CMAKE_CURRENT_BINARY_DIR}/generated/3rdparty/googletest EXCLUDE_FROM_ALL) enable_testing() @@ -272,6 +274,9 @@ foreach (family ${ARCH}) # Include the family-specific CMakeFile include(${family}/family.cmake) foreach (target ${family_targets}) + target_link_libraries(${target} PRIVATE absl::flat_hash_map) + target_link_libraries(${target} PRIVATE absl::flat_hash_set) + # Include family-specific source files to all family targets and set defines appropriately target_include_directories(${target} PRIVATE ${family}/ ${CMAKE_CURRENT_BINARY_DIR}/generated/) target_compile_definitions(${target} PRIVATE NEXTPNR_NAMESPACE=nextpnr_${family} ARCH_${ufamily} ARCHNAME=${family}) diff --git a/common/router2.cc b/common/router2.cc index abe5f302..2f9f0ac4 100644 --- a/common/router2.cc +++ b/common/router2.cc @@ -27,6 +27,7 @@ */ #include "router2.h" +#include <absl/container/flat_hash_map.h> #include <algorithm> #include <boost/container/flat_map.hpp> #include <chrono> @@ -191,7 +192,7 @@ struct Router2 } } - std::unordered_map<WireId, int> wire_to_idx; + absl::flat_hash_map<WireId, int> wire_to_idx; std::vector<PerWireData> flat_wires; PerWireData &wire_data(WireId w) { return flat_wires[wire_to_idx.at(w)]; } |