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.4 - 2025-11-18
- Fix an unintended breaking change to agent variable and environment property logging was introduced in
v2.0.0-rc.3. In JSON agent and environment output files, individual scalar values were output as lists containing a single element, rather than the single scalar value. The behaviour now matches the older beahaviour (#1340)
- Fixes incorrect
InvalidCUDAComputeCapabilityexception when compiling withall-major(default) orall(#1339, #1342) - Fixes custom handling of
CMAKE_CUDA_ARCHITECTURESto supportaandfpost-fixed compute capabilities such as90a(#1284, #1342) - Addresses GCC 15
-Wmaybe-uninitialisedwarning in the test suite (#1343)
2.0.0-rc.3 - 2025-11-05
- Added CMake 4 support (#1315)
- CUDA 13 Support added (#1302)
- Migration to Jitify2 adding significant RTC kernel compilation speed-ups (using patch until #146 is merged) (#1150)
- Added CUDA 12.8 and 12.9 to known CUDA downloads for windows (#1296)
- Added HostEnvironmentDirectedGraph::Iterator to allow vertex and edge iteration (#183)
- Added
nlohmann::json(replacing RapidJSON) with some breaking changes for nan/inf (#1277). Any special limit values (e.g. +/- nan/inf) are written to JSON asNULLand read from JSON asNaN. - The latest version change in licensing terms from MIT to a dual license model of AGPL 3.0 and commercial. This requires user contributions to sign our CLA (#1313)
- Removed CUDA 11 support which removes support for Kepler (
sm_35) hardware. I.e. CUDA Supported versions are now 12.x to 13.x (Windows requires >= 12.4) (#1302) - Switch from c++17 to c++20, CMake >= 3.25.2 is now required (#1302)
- Windows Visual Studio 2019 support is removed (#1302)
- Removed support for Python < 3.10 and added 3.13 and 3.14. Supported Python versions are now 3.10-3.14 (#1320,#1318, #1320 respectively)
- Produce Python wheels on CI using ManyLinux_2_28 instead of ManyLinux2014. Python wheels will now require
glibc>= 2.28 unless built from source. (#1228)
- CI Windows CUDA install method updated to use faster redist packages (#1314)
- CI Windows builds now have a timeout to catch occasional hanging of workflow (#1305)
- CI Draft release workflow installs
setuptoolsandwheelfor all Python versions (1306) - Circles example logging has been updated to truncate log files (#1301)
- Switched to TelemetryDeck v2.0 API (#1300)
- Improved CMake warnings for unsupported CUDA versions (#1296)
- Changed default use of
patchelfon linux toOFF(#1299) - Improved device exception message for bucket messaging (#1298)
- Upgrade to CCCL 2.3.2 support (#1155)
- CI updated GitHub actions to Ubuntu 24.04 Workflows (#1295)
- Improved README.md guidance on selecting CUDA versions for CMake (#1272)
- Correction to error message for conflicting agent functions (#1267)
- Removed Windows 2019 from GitHub action workflows (#1293)
- Fix for module annotations within Python 3.14 for agent Python functions (1324)
- Fix for wrapped spatial messages where there is a non matching environment and radius configuration (#1182)
- Fix to multi-arch system test failures (#1297)
- Fix to AgentID to prevent issues with regeneration and syncing (#1270)
- Fix to Test
DependencyGraphTest.UnattachedFunctionWarningwhich was broke by previous change in #0a7456e (#1268) - Fix to DeviceAgentVector::setVariable which was not syncing correctly (#1266)
- Fix telemetry suppression notice option to be available when telemetry is disabled (#1262)
2.0.0-rc.2 - 2024-11-22
- Emit CMake warnings for MSVC + CUDA incompatibilities introduced by MSVC 1940 & 1941 (#1225)
- Add visualisation support for Environment Directed Graphs (#1239)
- Add visualisation support for setting the initial camera roll angle (#1239)
- Add cpplint 2 support, with lint fixes and suppressions (#1245)
- Add CMake options & cache variables to allow per-build SWIG version requirements / selection (#1247)
- Add CMake warnings for SWIG 4.2.0 and 4.2.1 issues (#1247)
- Telemetry accuracy improved using a per-user random id rather than a per build directory configuration file (#1252)
- Update CITATION.cff and README.md with preferred citation (#1198)
- Updates visualisation dependency to tag
flamegpu-2.0.0-rc.2
- Binary wheel artifacts produced via CI will not be compatible with glibc < 2.28 from the next release, due to a changes in GitHub Actions forcing a switch to
Manylinux_2_28and the EoL forManylinux2014's base distribution (CentOS 7) - Python 3.8 binary wheel artifacts will not be produced from the next release, as it is EoL
- Support for CUDA 11.0 and CUDA 11.1 will be dropped from a future release due to nvidia/CCCL support (#1155)
- Fix CMake patching of RapidJSON for windows (#1181)
- Suppress platform specific ABI warnings from GCC >= 10.1 on Aarch64 (#1185)
- Add missing
#include <cstdint>impliclty included from older CUDA toolkits (#1197) - Optionally remove versioned
libnvrtc-builtins.sodependency viapatchelfwhen compiling on ManyLinux for wider wheel compatibility (#1201) - Short-term fix for CMake 3.30 deprecating some use of
FetchContent_Populate(#1225) - Fix pretty-printed JSON output from
JSONStateWriter(#1232) - Fix Swig 4.2.1 not wrapping methods for the
flamegpu::id_ttype (#1234) - Improved exceptions for invalid character handling in filepaths on MSVC (#1243)
- Test Suite workaround for Swig 4.2.1 errors with
== Noneand!= None(#1244) - Updated NVIDIA/Jitify dependency version to resolve RTC warnings with recent CUDA/Thrust/CUB/CCCL versions (#1255)
- Resolve sign comparison warnings in
test_transform_reduce.cuunder MSVC (#1247) - Warning fixes (#1209)
- Multiple CI fixes/workarounds (#1225, #1242)
- Workaround for wrapped spatial radius bug in
python_native/boids_spatial3D_wrappedexample by changing interaction radius to0.04(see #1177).
2.0.0-rc.1 - 2024-01-12
- Support for CUDA 12.0-12.3. (#1015, #1056, #1097, #1130)
- CUDA 12.2+ currently suffers from poor RTC compilation times due to changes in the CUDA headers (#1118). This will be fixed in a future release.
- Support for Python 3.12. (#1117)
- Visualiser: Add support for orthographic projection. (FLAMEGPU/FLAMEGPU2-visualiser#114, FLAMEGPU/FLAMEGPU2-visualiser#121 #1040)
- Visualiser: Agents can be hidden according to their state. (#1041)
- Declare/define Agent and Host function shims. (#1049)
- Poisson distribution support for random APIs. (#1060)
HostAPIreturns config structures and ensemble run index. (#1082)pyflamegpuinstallable from custom pip wheelhouse whl.flamegpu.com . (#645)- Environment macro properties can now be imported/exported. (#1087)
- Readme within
examples/documenting the available examples. DeviceAPI::isAgent(),DeviceAPI::isState(). (#1116, #1139)- Agent python codegen will now capture external variables with corresponding attribute. (#1147)
- Added
RunPlanVector::setPropertyStep()(#1152) - Added directed grraph support, via
EnvironmentDirectedGraphDescriptionwhich can then be used withMessageBucketfor on-graph communication. (#1089) - Added optional Distributed Ensemble support (MPI). (#1090)
CUDAEnsemble::getLogsreturnsstd::map<unsigned int, RunLog>rather thanstd::vector<RunLog>, required for distributed ensemble support. (#1090)
- Improved dependency find logic. (#1015)
- Improved telemetry message when configuring CMake. (#1030)
- Improved robustness of context creation testing. (#1096)
- Improved (experimental) GLM support within python API. (#1074)
- Various CI changes. (#1015, #1036, #1044, #1062, #1090, #1097, #1100, #1102, #1117, #1130, #1138, #1140)
FLAMEGPU_ENABLE_GLMwas incorrectly documented in README. (#1033)- ManyLinux wheels did not have BuildNumber set. (#1036)
- arm/Tegra compilation errors. (#1039, FLAMEGPU/FLAMEGPU2-visualiser#119)
AgentRandom::uniform<int>()would never return max bound. (#411)AgentRandom::uniform<float>()would return range(0, 1]. (#411)AgentRandom::uniform<double>()would return range(0, 1]. (#411)- Visualiser: Draw would lose data when resizing large line art. (FLAMEGPU/FLAMEGPU2-visualiser#118)
- Visualiser: Begin paused now pauses at the first frame with agents. (FLAMEGPU/FLAMEGPU2-visualiser#120, #1046)
- Resolved crash where no optional messages were output first step. (#1054)
- Old version of Curl would write to stdout during telemetry. (#1027)
- Agent python codegen would fail to translate math functions inside message loops. (#1077)
- Resolved missing messages from python host function exceptions thrown during ensembles. (#1067)
- Various Telemetry fixes. (#1035, #1098, #1099, #1079)
- Various CMake fixes. (#1071, #1092, #1062, #1113)
- Resolved nested venvs within Windows Python Wheels. (#998)
- Agent states loaded from file could be ignored. (#1093)
- Agent python codegen did not support standalone message variables. (#1110, #1143)
- Agent python codegen did not support
int/floatcasts. (#1143) - Resolved floating point cast to enum error. (#1148)
JitifyCacheis now exposed via the python API. (#1151)- Agent python codegen did not support
IDtoid_tconversion. (#1153) - Spatial Messaging interaction radius was incorrect when the requested radius was not a factor of the environment width (#1160)
astprettyno longer a dependency ofpyflamegpu(#1166)- Agent python codegen did not correctly account for variable scope (#1125, #1127)
- Resolve cmake_minimum_version deprecations by updating and patching dependencies (GoogleTest, RapidJSON and CMakeRC) (1168)
- Fix docstrings associated with the
flamegpunamespace (#1169) - Fix unused result warning(s) issued with clang as the host compiler (1170)
- Include
<cstdint>inDiscreteColor.hfor gcc 12.3 (#1171). Thanks to Daniele Baccege
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
HostAgentAPImean 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
MessageArray2DandMessageArray3D. (#783) - Added wrapped iteration access to
MessageSpatial2DandMessageSpatial3D. (#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_PTXASCMake 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_swigbuild target now depends onflamegpuheaders. (#981)- Added
RunPlan::operator==(),RunPlanVector::operator==()andRunPlanVector::at(). (#983) - Added
--truncateargument 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/CUDAEnsembleexit. (#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_archCMake variable,CMAKE_CUDA_ARCHITECTURESshould 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_GLMtype checking is now able to convert GLM types to base type/length. (#809)- Greatly reduced default stream usage, improving
CUDAEnsembleperformance. (#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)
-lineinfois now passed to theMinSizeRelandRelWithDebInfobuild configurations. (#798)- Various test improvements. (#860, #902, #908, #1002, #1000)
- Improved how
CUDAEnsemblereports 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_typeto a library-wide version. (#948) - Improved granularity of verbosity levels. (960)
- Added
silence_unknown_argsto 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) CUDAFatAgentsupports agents with no variables. (#492)DeviceAgentVectorcan 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)
MessageArray3DMoore 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)CUDAEnsemblelogs did not includeRunPlandetails 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)
CUDAEnsembleprogress printing nolonger goes backwards. (#901)visualiser::DiscreteColorwas 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
CUDAEnsembleif the default config is not updated. (#949) - Replaced occurrences of
CUDAAgentModelwithCUDASimulationin comments and NVTX ranges. (#951) - Corrected issues with Python packaging. (#962, #964)
- Messaging internal data structures are now correctly reset at
CUDASimulationreset. (#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::vectorto 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_SEATBELTSenabled. (#695) - Add missing
SEATBELTSchecks for reserved names within variousDeviceAPIclasses. (#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)CUDAMessageno 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)
CUDAEnsembleno 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
Simulationlogging 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::RunPlanandflamegpu::RunPlanVector(#656, #665) - Added
uint64_t flamegpu::RunPlanVector::getRandomPropertySeed()(#656, #665)
- Use
IntTinMessageBucketDeviceto resolve clang sign comparison warnings (#554) - Default value of
-s/--stepsset to1rather than0(#634) - All RNG seeds are now
uint64_t(#656, #665) - Assorted bugfixes for
RunPlan,RunPlanVectorandCUDAEnsemble(#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.0and11.1.0(#586) include/flamegpu/version.his 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_tbased timers when usingWDDMGPUs (#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)
pyflamegpuno longer exposespyflamegpu.sysandpyflamegpu.os(#654)CUDAEnsemble::CUDAEnsemble/CUDAEnsemble::initialiseno longer output the FLAMEGPU version number (#656, #665)pyflamegpu.CUDAEnsemble().getConfig()removed, usepyflamegpu.CUDAEnsemble.Config()(#656, #665)
- Improved RTC compilation errors using
#linedirectives (#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