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.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_28
and 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.so
dependency viapatchelf
when 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_t
type (#1234) - Improved exceptions for invalid character handling in filepaths on MSVC (#1243)
- Test Suite workaround for Swig 4.2.1 errors with
== None
and!= 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.cu
under MSVC (#1247) - Warning fixes (#1209)
- Multiple CI fixes/workarounds (#1225, #1242)
- Workaround for wrapped spatial radius bug in
python_native/boids_spatial3D_wrapped
example 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)
HostAPI
returns config structures and ensemble run index. (#1082)pyflamegpu
installable 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
EnvironmentDirectedGraphDescription
which can then be used withMessageBucket
for on-graph communication. (#1089) - Added optional Distributed Ensemble support (MPI). (#1090)
CUDAEnsemble::getLogs
returnsstd::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_GLM
was 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
/float
casts. (#1143) - Resolved floating point cast to enum error. (#1148)
JitifyCache
is now exposed via the python API. (#1151)- Agent python codegen did not support
ID
toid_t
conversion. (#1153) - Spatial Messaging interaction radius was incorrect when the requested radius was not a factor of the environment width (#1160)
astpretty
no 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
flamegpu
namespace (#1169) - Fix unused result warning(s) issued with clang as the host compiler (1170)
- Include
<cstdint>
inDiscreteColor.h
for 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
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