All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.0.0-rc - 2022-12-13
CUDASimulation::simulate()
can now be passed a RunPlan. (#678)- CUDA 11.7 is now included in CI builds (#761, #856)
CUDASimulation::setEnvironmentProperty()
,CUDASimulation::getEnvironmentProperty()
(#760)- Added
HostAgentAPI
mean and standard deviation operators. (#764, #766) - Added file IO support for all config struct members. (#768)
- Added uniform random range support for floating-point types. (#776)
- Added getOffsetX/Y/Z() to the iterated message for array message types. (#781)
- Added VonNeumann neighbourhood iteration to
MessageArray2D
andMessageArray3D
. (#783) - Added wrapped iteration access to
MessageSpatial2D
andMessageSpatial3D
. (#185) - Log files can now be configured to include timing data. (#799)
- RTC users may now specify include paths. (#801)
- Added annotations to CI (#480)
- Added three levels of error-reporting to choose from when using
CUDAEnsemble
. (#839) - Added
VERBOSE_PTXAS
CMake option. (#851) - Visual Studio 2022 is now included in CI builds (#866)
- Visualiser: Agent array variables can now be used to control agent color. (#876, FLAMEGPU/FLAMEGPU2-visualiser#90)
- Visualiser: Added two low-poly stock models (
PYRAMID
,ARROWHEAD
). (FLAMEGPU/FLAMEGPU2-visualiser#91) - Visualiser: Agents can now be represented by Keyframe pair animated models. (#904, FLAMEGPU/FLAMEGPU2-visualiser#16)
- Added Pedestrian Navigation example in a standalone repository (from FLAME GPU 1). (Example)
- Added support for agent functions and function conditions to be written in a "pure python" syntax. (#882, #910, #917)
- Added "pure python" wrapped boids example. (#882, #940, #958)
- Visualiser: User interfaces can now be defined to control environment properties via visualisations. (#911, FLAMEGPU/FLAMEGPU2-visualiser#100)
- A warning is now emitted when configuring CMake for Visual Studio 2022 if the build path contains a space. (#934)
- Python 3.11 is now included in CI builds and wheel generation. (#944)
- Сompute Capability 90 (Hopper) has been added to the list of default CUDA architectures. (#954)
- CUDAEnsemble now prevents standby during execution (on Windows), this can be disabled. (#930)
- Added
util::cleanup()
for triggeringcudaDeviceReset()
. (974, also see #950) - Message list persistence can now be configured per message type. (#973)
pyflamegpu_swig
build target now depends onflamegpu
headers. (#981)- Added
RunPlan::operator==()
,RunPlanVector::operator==()
andRunPlanVector::at()
. (#983) - Added
--truncate
argument to CUDASimulation and CUDAEnsemble, allowing output files to truncate (defaults to off) (#992) - Added CTest support for test suite execution (#285)
- Added
util::clearRTCDiskCache()
for clearing JitifyCache on-disk (#999) - Added Telemetry allowing the collection of usage metrics, this can be disabled via several methods (#987, #991), (#1013)
- Removed redundant length argument from many Python methods. (#831, #872)
- Replaced default random engine with
std::mt19937_64
. (#754) CUDASimulation::initialise()
now allows you set defaults, matching the behaviour ofCUDAEnsemble
. (#755)- Renamed
ModelVis::addStaticModel()
toModelVis::newStaticModel()
. (#911) - Default CUDA random engine changed to PHILOX (from XORWOW). (#873)
- Renamed
DeviceAPI::getThreadIndex()
toDeviceAPI::getIndex()
. (#943) - Missing pip packages are nolonger automatically installed during CMake configure. (#935)
cudaDeviceReset()
is nolonger automatically triggered atCUDASimulation
/CUDAEnsemble
exit. (#950)- Unrecognised runtime args will nolonger cause program exit. (#967)
- JSON output now outputs NaN/Inf values as string. (#969)
- Removed references from return values throughout model description API. (#952, #978, #980, #1004)
- Message lists nolonger persist (by default) between iterations. (#973)
- Renamed
RunPlanVector::setPropertyUniformDistibution()
toRunPlanVector::setPropertyLerpRange()
(#983) - Replaced NVTX macros with constexpr + namespaced methods (#990)
- CUDAEnsemble now raises an exception of log files already exist (previous behaviour would append) (#818, #992)
- Removed 'Callback' from Python API host function method/class names #997
- Renamed
CUDAMessage::getMessageDescription()
togetMessageData()
#996 - CMake variables were updated to begin
FLAMEGPU_
(#991) - Removed
cuda_arch
CMake variable,CMAKE_CUDA_ARCHITECTURES
should now be used instead (#991) - Improved organisation of files within include/src/tests (#1007, #1012)
- Removed
CUDASimulation::getAgent()
,getCUDAAgent()
,getCUDAMessage()
from the public API. (#1007) - Improved organisation/naming of examples (#1010)
- Thrust/CUB minimum supported version increased to 1.16.0, from 1.14.0 due for improved windows support and bugfixes. 1.17.2 is fetched via CMake if a compatible thrust/cub is not found. (#1008)
- Suppress note emitted by GCC >= 10 on ppc64le about changes since GCC 5. (#757)
- Improved how input file loading errors and warnings are handled. (#752, #759, #810)
- Visualiser: Updated FreeType dependency, hopefully improving download stability. (FLAMEGPU/FLAMEGPU2-visualiser#86)
- Improve API docs for FLAMEGPU macros. (#787)
- Agent sorting has been extended to submodels and agents with coordinates in array variables. (#805, #854)
USE_GLM
type checking is now able to convert GLM types to base type/length. (#809)- Greatly reduced default stream usage, improving
CUDAEnsemble
performance. (#838, #843) - NVRTC is now passed the maximum supports GPU architecture flag. (#844)
- Curve is now stored in shared_memory, improving register usage in CUDA 11.3+. (#560, #571)
- NVRTC is now passed the maximum supports GPU architecture flag. (#844)
-lineinfo
is now passed to theMinSizeRel
andRelWithDebInfo
build configurations. (#798)- Various test improvements. (#860, #902, #908, #1002, #1000)
- Improved how
CUDAEnsemble
reports failure to find CUDA device to matchCUDASimulation
. (#858) - Ubuntu CI has been updated to use Ubuntu 22.04 / GCC 11 (#877)
- Improved granularity of pyflamegpu incremental builds. (#887)
- Improved error message when multiple agents write to the same array message element. (#895)
- CI now uses CUDA 11.8 as "latest" (#924)
- Visualisation headers are now always linted, regardless of whether enabled at CMake type. (#919)
- Boids examples were updated to demonstrate visualisation UIs. (#911)
- CUDA random engine may now be selected during CMake configuration. (#873)
- Updated pinned versions of external GitHub Actions. (#945)
- Renamed Python boids examples. (#940)
- Removed redundant references from function argument throughout API. (#946)
- Unified generic
size_type
to a library-wide version. (#948) - Improved granularity of verbosity levels. (960)
- Added
silence_unknown_args
to runtime arg parsing so that users are nolonger required to filter out bespoke args. (#967) - Removed resolved issues from README.md. (#994)
- Removed outdated comment from version.h. (#985)
- Removed redundant mutexes around RTC kernel launches. (#469)
- CUDA 10.x is nolonger supported (#611, FLAMEGPU/FLAMEGPU2-visualiser#89)
- C++ 14 is nolonger supported (#611, FLAMEGPU/FLAMEGPU2-visualiser#89)
- Remove unused RTCSafeCudaMemcpyToSymbol/Address methods. (#878)
- Python 3.6 wheels are nolonger generated by Release CI. (#925)
- Removed boids_bruteforce_dependency_graph example. (#937)
- Python interface support for
CUDAEnsembleConfig::devices
. (#682) CUDAFatAgent
supports agents with no variables. (#492)DeviceAgentVector
can nolonger be passed out of scope. (#522)EnvironmentManager::setProperty()
,EnvironmentManager::getProperty()
did not check length. (#760)- Logging could divide by zero when calculating standard deviation on empty agent population. (#763)
- Updated Jitify dependency (fixes memory leak, improves GLM support). (#756, #813)
- Corrected a sugar growback bug within the SugarScape example. (#784)
MessageArray3D
Moore iterator could lead to compilation failure. (#785)- Visualiser: Did not account for agent populations shrinking. (FLAMEGPU/FLAMEGPU2-visualiser#785)
EnvironmentManager::setProperty()
had length check misplaced underUSE_GLM
. (#791)CUDAEnsemble
logs did not includeRunPlan
details as intended. (#799)- XML exit log contained redundant block. (#799)
- Final step log is nolonger double logged. (#799)
- Greatly improve RTC compile times by specifying known headers (#811)
RunPlan::setProperty()
would fail silently. (#814)- Internal environment property used for tracking steps was being mapped to submodels. (#815)
RunPlanVector::setPropertyUniformDistribution()
was rounding floating-point values. (#823)cbrt()
was incorrectly used in place ofsqrtf()
in Circles example. (#829)- Visualiser:
AgentStateVis::setColour()
did not supportStaticColor
. (#830) - Various CMake improvements (#804, #836, #897, FLAMEGPU/FLAMEGPU2-visualiser#95, #914, #921, #991, #1014)
- Updated CI to support new CUDA repository GPG keys. (#841)
DeviceMacroProperty::operator+=(double)
did not support SM < 60. (#847)- Spatial agent sorting did not support agents outside the default state. (#861)
AgentStateVis::setColor()
did not validate suitability of agent variable. (#875)- Improved how NVRTC's dll is located by pyflamegpu on Windows. (#450)
CUDAEnsemble
progress printing nolonger goes backwards. (#901)visualiser::DiscreteColor
was not support by the Python API. (#922)- Corrected typographic error inside
CITATION.cff
. (#929) - Python API did not correctly support
CUDASimulation::setEnvironmentProperty()
. (#915, #912) - A warning is nolonger emit by
CUDAEnsemble
if the default config is not updated. (#949) - Replaced occurrences of
CUDAAgentModel
withCUDASimulation
in comments and NVTX ranges. (#951) - Corrected issues with Python packaging. (#962, #964)
- Messaging internal data structures are now correctly reset at
CUDASimulation
reset. (#972) - Removed redundant code from
CUDAFatAgent::addSubAgent()
, which could lead to spurious device initialisation. (#968) - Improve precision of included headers to fix GCC11 builds. (#988)
__disown__()
is now automatically triggered when Python Host functions/conditions are attached to a model. (#975, #997)
2.0.0-alpha.2 - 2021-12-09
- Environment macro properties, designed to hold large amount of data (e.g. 4 dimensional arrays) which agents can mutate via atomic operations. (#643, #738)
- Support for using CUDA (11.3+) provided Thrust/CUB, if available. (#657, #692)
- Agents can now be automatically sorted according to message order. (#723)
- Added Python 3.10 to CI release build matrix. (#706)
- Added contact links to new issue template (#722)
- Added a manual Windows test build CI action (#741)
- Simulation times are now output in seconds and stored as double (previously millisecond, float). (#691)
- Update Ubuntu CI to build SWIG 4.0.2 from source. (#705)
- Re-enable CMake targets MinSizeRel, RelWithDebingo. (#698, #704)
- Update CMake target_link_libraries to have explicit visibility. (#701, #703)
- Reduce the context creation threshold used inside test suite. (#691)
- Host functions are now stored internally with a
std::vector
to preserve order (previously order was undefined). (#707, #708) - Improve guidance in README for new visual studio/CUDA users. (#702)
- Update CI to support CUDA 11.5, and use this for 'latest' builds. (#716)
- Updated uses of diag_ pragma to nv_diag_, to be CUDA 11.5+ compatible. (#716)
- Various improvements to the Boids example models (#739)
- Python example no longer mutates constant accessor to simulation config. (#694)
- Array message test suite would fail to build with
NO_SEATBELTS
enabled. (#695) - Add missing
SEATBELTS
checks for reserved names within variousDeviceAPI
classes. (#700) - Add missing
MessageBruteForce::getVariableLength()
method. (#709) - Fixed cases where throwing of a DeviceException was not followed by a safe return. (#718)
SubModelDescription::(get)SubEnvironment(true)
now also automatically maps macro properties. (#724)CUDAMessage
no longer loses data if a resize is performed before an append. (#725, #726)- Logging the mean of an agent variable for an empty pop, would return NaN, producing an invalid Log file. 0 is now returned. (#734)
CUDAEnsemble
no longer always logs both step and exit files to disk, if either is required. (#730)- Corrected memory allocation calculations within
CUDAScatter::arrayMessageReorder()
. (#736) - Explicitly flush CUDAEnsemble progress print statements, so they always display as expected.
- Minor corrections to the handling of
Simulation
logging configs. (#742) - DeviceError no longer handles %s formatter wrong in Release builds. (#744, #746, #743)
2.0.0-alpha.1 - 2021-09-03
- Optional support for vector types via GLM (#217)
- This is currently behind a CMake option due to significant RTC compilation time increases
- Created
CHANGELOG.md
(#618, #630) - Release process documentation (#622)
- Thorough testing of
flamegpu::CUDAEnsemble
,flamegpu::RunPlan
andflamegpu::RunPlanVector
(#656, #665) - Added
uint64_t flamegpu::RunPlanVector::getRandomPropertySeed()
(#656, #665)
- Use
IntT
inMessageBucketDevice
to resolve clang sign comparison warnings (#554) - Default value of
-s/--steps
set to1
rather than0
(#634) - All RNG seeds are now
uint64_t
(#656, #665) - Assorted bugfixes for
RunPlan
,RunPlanVector
andCUDAEnsemble
(#656, #665) - Linux python binary wheel generation now produces wheels supporting
glibc >= 2.17
(#632) - CI configuration changes (#641)
- CMake modernisation, including use of target properties, in-source build prevention, support for patched GCC
10.3.0
and11.1.0
(#586) include/flamegpu/version.h
is no longer generated by CMake, allowing true out-of-source builds (#600)- Performance improvements (#564)
- Compiler warning fixes and suppression (#554, #638, #671)
- Do not use
cudaEvent_t
based timers when usingWDDM
GPUs (#640) - Visualiser: GLU no longer required as a dependency of the visualisation (FLAMEGPU/FLAMEGPU2-visualiser#79)
- Visualiser: CMake improvements (FLAMEGPU/FLAMEGPU2-visualiser #77, #80, #81)
- CMake versions <= 3.18 are no longer supported (#661)
- Do not suggest that Clang is a working/valid host C++ compiler at this time (#633)
pyflamegpu
no longer exposespyflamegpu.sys
andpyflamegpu.os
(#654)CUDAEnsemble::CUDAEnsemble
/CUDAEnsemble::initialise
no longer output the FLAMEGPU version number (#656, #665)pyflamegpu.CUDAEnsemble().getConfig()
removed, usepyflamegpu.CUDAEnsemble.Config()
(#656, #665)
- Improved RTC compilation errors using
#line
directives (#608)
2.0.0-alpha - 2021-08-10
Initial alpha release of FLAME GPU 2.0.0, a CUDA C++ / python3 library for agent based simulations