You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
During a set of benchmarks in the last week I had the following occur
being murdered by the OOM killer
a vector cannot be (re)alloc'ed with exceeding v.max_size()
both happened on current master as of Sept 22 on GPU enabled libarbor.
Example running was ring.cpp from the busyring engine in NSuite
GPU: cuda
2.1 Billion cells of the complex variety
No spikes/samples stored
Investigation
Source Labels
Further experiments needed, but I suspect the spike source label map consolidation
during simulation setup. It relies on mpi::gather_all which builds a vector of all items
on all tasks. Each item is a (gid_t gid, std::string label, lid_t lo, lid_t hi) and in our example
each cell has one detector called 'detector' thus
gid: 8B
label: 8B
lo: 4B
hi: 4B
and in total $24\times 2.1 GB \simeq 48GB$ at the very minimum, ignoring all extra infrastructure
and overhead for
std::string: likely a pointer and capacity size_t, maybe less depending on SSO
Use the simple but well-known FNV-1a hash function to map
`cell_tag_type` aka `std::string` to an `uint64_t`
for label resolution. The former type has a size of 32B or more and the
latter 8B, thus cutting the storage and bandwidth
requirements by 3/4.
The hash function is implemented from the reference given on the
authors' website/wikipedia and is extremely
simple. If we ever experience issues, we might consider switching this
to something of higher quality via an
external library, candidates are `xxHASH` and `Murmur3`.
https://github.com/Cyan4973/xxHash
Note: This should further relieve the memory pressure on larger scale
simulation as formulated in #1969 and make
#2005 less urgent.
There is no performance impact (at laptop scale), but the memory savings
are worth it.
During a set of benchmarks in the last week I had the following occur
exceeding v.max_size()
both happened on current master as of Sept 22 on GPU enabled libarbor.
Example running was
ring.cpp
from thebusyring
engine in NSuitecuda
complex
varietyInvestigation
Source Labels
Further experiments needed, but I suspect the spike source label map consolidation
during simulation setup. It relies on
mpi::gather_all
which builds a vector of all itemson all tasks. Each item is a
(gid_t gid, std::string label, lid_t lo, lid_t hi)
and in our exampleeach cell has one detector called 'detector' thus
and in total$24\times 2.1 GB \simeq 48GB$ at the very minimum, ignoring all extra infrastructure
and overhead for
std::string
: likely a pointer and capacity size_t, maybe less depending on SSOstd::unordered_map<gid, std::unordered_map<std::string, range>>
, pointers, capacities, ...std::vector
up toThe text was updated successfully, but these errors were encountered: