Releases: FPMAS/FPMAS
Releases · FPMAS/FPMAS
FPMAS 1.6
✨ Features
- CellNetworkBuilder: allows to automatically build graph-based SpatialModels from a DistributedGraphBuilder
- SmallWorldGraphBuilder: a DistributedGraphBuilder to build Small-World graphs
- StaticLoadBalancing: turns a dynamic load balancing algorithm static
- FastProcessMapping: a very efficient GridProcessMapping, now used by default
- Graph analysis methods:
- Model analysis methods:
⚡ Performance improvements
- Various improvements in the following features:
- ObjectPack serialization
- DistributedGraph::distribute()
- GhostMode and HardSyncMode
- getIncomingEdges() and getOutgoingEdges() associated methods
🚑 Critical Bug Fixes
- Fixes an ObjectPack serialization issues (see v1.5.1 and v1.5.2)
- Fixes a ZoltanLoadBalancing issue (see v1.5.3)
🔧 Other improvements
- Improves the DistributedGenerator quality, with a better seed distribution for each process.
FPMAS 1.5.3
🚑 Critical Bug Fix
- Fixes a ZoltanLoadBalancing bug that caused it to never migrate anything when applied with a period of 1.
FPMAS 1.5.2
🚑 Critical Bug Fix
- Fixes a critical
std::deque
ObjectPack serialization issue
FPMAS 1.5.1
🚑 Critical Bug Fix
- Fixes a critical serialization issue, that could make the platform severely crash with some compilers (see 21855a6).
🚨 Warning Fix
- Fixes a clang warning in DEBUG mode.
FPMAS 1.5
✨ Features
HardSyncModeWithGhostLink
: A newSynchronizationMode
that manages data as inHardSyncMode
, but that buffersSyncLinker
operations as inGhostMode
.GlobalGhostMode
: The D-MASON equivalent synchronization mode, where allAgents
(includinglocal
agents) are read from a ghost copy.- Random initialization
GridAgents
andGridCells
now embed their own random number generator, what notably allows reproducibility independly of the agent partitionning when theGlobalGhostMode
is used.- The type of generator used can be controlled with the
FPMAS_AGENT_RNG
compile time parameter. - The
GridBuilder::initSequence()
,GridBuilder::initSample()
,GridAgentBuilder::initSequence()
andGridAgentBuilder::initSample()
methods allows to randomly and deterministically initializeGridAgents
andGridCells
with arbitrary properties. Neighbors::random()
andNeighbors::shuffle()
can now take a custom random number generator as input.GridAgent::rd()
andGridCellBase::rd()
can notably be used to implement reproducible behaviors.
- Random number generator JSON and ObjectPack serialization.
⚡ Performances
- The
GridBuilder
implementation is now based on theTreeProcessMapping
, so that the grid is properly distributed at initialization (before this release, theGridBuilder
produced an initial strip based partitioning) - Sets
FPMAS_ID_TYPE
default value tostd::uint_fast32_t
.
🚑 Critical bug fix
- The
HardSyncMode
was exposed to critical deadlock situations whenMPI_Send
was not buffered by default. Since the MPI implementation decides if MPI_Send buffers or not messages, Agent serialization rules that produced too much data was unexpectedly causing not buffered sends and so deadlocks. This as been solved with the usage of non blockingMPI_Isend
communications.
FPMAS 1.4
This release introduces significant performance improvements.
⚡ Performance
static_cast
-> dynamic_cast
- The
Agent
inheritance scheme as been flatten using templates to remove all virtual inheritances (see theAgentBase
documentation for more details). In consequence,static_cast
fromfpmas::api::model::Agent
can be used instead ofdynamic_cast
.
This is a significant improvement, since application profiling show that dynamic_casts
could be responsible for up to 23% of the total execution time of the PreyPredator model.
Agents and Tasks removal
Agents
removal fromAgentGroups
is now performed in constant time (vs linear time before this release).Tasks
removal fromJobs
is now performed in constant time (vs linear time before this release).
Those two last points are also significant, since Agents
and their associated Tasks
can be removed very often when performing load balancing operations.
💥 Critical Incompatibilities
- User defined
Tasks
should now implement thefpmas::scheduler::Task
class instead offpmas::api::scheduler::Task
.
FPMAS 1.3
✨ Features
RingGraphBuilder
: a distributed graph builder to build ring shaped graphsfpmas::random::local_choices()
andfpmas::random::distributed_choices()
: selection of random items within a vector across processes.- The
ObjectPack
serialization technique now offers a much faster and memory efficient alternative to the JSON serialization.
⚡ Performance
- The load balancing period can now be passed to the
ZoltanLoadBalancing
constructor, for more efficient Zoltan results. - Useless
lockShared()
operations have been removed fromlink()
andremoveNode()
operations. - The FPMAS_TYPE_INDEX parameter specifies the type used to serialize
std::type_index
instances.std::uint_fast8_t
is now used by default to optimize performances, potentially limiting to 256 the count of types that can be serialized, but other types can be specified to raise this limit.
🐛 Bug Fixes
- Fixes uninitialized memory issues, that notably arose in
initLocation()
ormoveTo()
applied to aDISTANT
cell. See release 1.2.3 for more details.
🏗️ Project Structure
- Better test coverage, especially for serialization features.
- new targets
tests/serialization/fpmas_agent_json_test
,tests/serialization/fpmas_agent_datapack_test
andtests/serialization/fpmas_agent_json_datapack_test
) - nodes and edges serialization tests in
fpmas_local_test
- new targets
- Fixes deprecation warnings and other, notably thanks to the Hedley library
- The platform is now compatible with the Clang compiler
FPMAS 1.2.3
🐛 Bug Fix
- The
locationCell()
is nowread
inupdateLocation()
, what solves a bug that might be critical inHardSyncMode
whenmoveTo()
was called on aDISTANT
cell. (see 4fbc4ed) DistributedGraph::balance()
now performs a partial data synchronization on importedDISTANT
nodes, what allows to safely use them in the following time step whenGhostMode
is used. (see 24ce07c)
Both points solve "uninitialized memory" issues that arose when initializing agent locations after a load balancing.
FPMAS 1.2.2
✨ Features
fpmas::random::ConstantDistribution
🐛 Bug fix
- Fixes an
fpmas_local_test
compilation error on systems wherestd::uint_fast32_t
resolves to a 32 bit integer (and not to a 64 bit integer)
💥 Breaking changes
- The support for
FPMAS_JSON_SET_UP()
without arguments has been removed, since it required C++20 features. FPMAS_DEFAULT_JSON_SET_UP()
can be used instead.
FPMAS 1.2.1
🚑 Bug fix
- Fixes parsing issues with
find_zoltan_version
andfind_nlohmann_json_version
(The latest Zoltan 3.90 version was notably not considered as a suitable version)
📝 Documentation
- Improved installation instructions
✨ Features
- Adds a missing
DistributedClusteredGraphBuilder
constructor