#include <collection.h>
Classes | |
| class | Iterator |
Public Member Functions | |
| LoadUnordered (std::shared_ptr< LoadUnorderedImpl > load_unordered_impl) | |
| Iterator | begin () const |
| Iterator | end () const |
Protected Attributes | |
| std::shared_ptr< LoadUnorderedImpl > | _load_unordered_impl |
An iterable of loop index and morphologies.
When reading from containers, the order in which morphologies are read can have a large impact on the overall time to load those morphologies.
This iterator provides means of reordering loops to optimize the access pattern. Loops such as the following
for(size_t k = 0; k < morphology_names.size; ++k) {
auto morph = collection.load<M>(morphology_names[k]);
f(k, morph);
}
can be replaced with
for(auto [k, morph] : collection.load_unordered<M>(morphology_names)) {
assert(collection.load<M>(morphology_names[k]) == morph);
f(k, morph);
}
The order in which the morphologies are returned in unspecified, but the loop index k can be used to retrieve the correct state corresponding to iteration k of the original loop.
Note, that it is safe for an LoadUnordered object to outlive its collection. Internally a shallow copy of the original collection is stored inside of and kept alive for the life time of the LoadUnordered object.
Note: This API is 'experimental', meaning it might change in the future.