Refactor domain decomposition for arbitrary gid distribution. (#326)
Changes to `domain_decomposition`: * `domain_decomposition` performs two pass load balancing in constructor: 1. first pass performs global load balance, 2. second pass distributes cells locally between cpu and gpu cell_groups. The current logic for this is very simple and naive, and will be replaced with a load balancer which returns a lighter domain decomposition description in a follow up pull request. * Provides a simple `group_description` type that contains gid, `cell_kind` and target backend information for `cell_group_factory`. Changes to `communicator`: * Constructor takes a `domain_decomposition` and recipe. * The interface for adding connections and constructing connection table has been removed, as this is now performed within the constructor. * Construction is more complicated, as connections are partitioned by source gid which requires multiple passes over the connection information in the recipe. * `make_event_queues` updated: spikes and connections are now partitioned by source domain, and an optimization dynamically chooses to iterate over either connection or spike list, whichever is shorter. * The `exchange` method now sorts `local_spikes` before global gather to facilitate the optimized spike/connection searching. Changes to `miniapp`: * Automatically use gpu if available and compiled with gpu support. * Banner prints out useful information about number of cores, gpus and ranks. * Remove -g cell group size flag. Changes to `cell_group`: * `cell_group` interface take a list of gid values instead of a range. * Updated internal `cell_group` logic to convert between gid and local indices: use a vector for local index to gid map, and a hash table for gid to local index in `cell_group` implementations that need this lookup. changes to unit tests * tests for the domain decomposition * tests for the communicator that test ring and all2all networks
Showing
- cmake/CompilerOptions.cmake 14 additions, 4 deletionscmake/CompilerOptions.cmake
- miniapp/io.cpp 0 additions, 11 deletionsminiapp/io.cpp
- miniapp/io.hpp 0 additions, 1 deletionminiapp/io.hpp
- miniapp/miniapp.cpp 19 additions, 15 deletionsminiapp/miniapp.cpp
- miniapp/miniapp_recipes.cpp 8 additions, 1 deletionminiapp/miniapp_recipes.cpp
- src/CMakeLists.txt 1 addition, 0 deletionssrc/CMakeLists.txt
- src/backends.hpp 10 additions, 7 deletionssrc/backends.hpp
- src/cell_group_factory.cpp 17 additions, 12 deletionssrc/cell_group_factory.cpp
- src/cell_group_factory.hpp 3 additions, 5 deletionssrc/cell_group_factory.hpp
- src/communication/communicator.hpp 123 additions, 51 deletionssrc/communication/communicator.hpp
- src/connection.hpp 9 additions, 2 deletionssrc/connection.hpp
- src/domain_decomposition.hpp 89 additions, 99 deletionssrc/domain_decomposition.hpp
- src/dss_cell_group.hpp 21 additions, 31 deletionssrc/dss_cell_group.hpp
- src/event_queue.hpp 9 additions, 6 deletionssrc/event_queue.hpp
- src/hardware/node_info.cpp 22 additions, 0 deletionssrc/hardware/node_info.cpp
- src/hardware/node_info.hpp 24 additions, 0 deletionssrc/hardware/node_info.hpp
- src/hardware/power.cpp 1 addition, 1 deletionsrc/hardware/power.cpp
- src/mc_cell_group.hpp 38 additions, 34 deletionssrc/mc_cell_group.hpp
- src/model.cpp 17 additions, 41 deletionssrc/model.cpp
- src/model.hpp 11 additions, 6 deletionssrc/model.hpp
Please register or sign in to comment