-
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
cba9d458