This page contains the new features of each version of Arcane v3.X.X.
The successive new features brought by versions of Arcane prior to version 3 are listed here: Changelog Arcane v2.X.X
Arcane Version 4.1+ (March 2026)
New Features/Improvements
- Adds support for backward-cpp for displaying the stack in case of an error. This allows for line numbers and file names in addition to the function name (PR #2248, PR #2333, PR #2484)
- Moves the accelerator API from Arcane to Arccore. All classes involved in the API are moved. The files in arcane/accelerator/core are moved to arccore/common/accelerator and those in arcane/accelerator are moved to arccore/accelerator. The header files in Arcane are kept to ensure compatibility with existing code (PR #2245, PR #2246, PR #2249, PR #2254, PR #2256, PR #2257, PR #2258, PR #2259, PR #2263, PR #2263,PR #2265, PR #2266, PR #2269, PR #2270, PR #2271, PR #2272, PR #2273, PR #2274, PR #2275, PR #2276, PR #2277, PR #2319, PR #2321, PR #2322, PR #2323, PR #2324, PR #2325, PR #2326, PR #2328, PR #2329, PR #2330, PR #2332, PR #2334, PR #2335, PR #2337, PR #2342, PR #2343, PR #2344, PR #2347, PR #2356, PR #2358, PR #2359, PR #2360, PR #2361, PR #2368, PR #2371, PR #2372, PR #2374, PR #2378, PR #2381, PR #2382, PR #2383, PR #2384, PR #2385, PR #2386, PR #2392, PR #2396, PR #2401, PR #2402, PR #2425, PR #2427, PR #2430, PR #2472)
- Adds support for __float128 for Linux operating systems (PR #2284, PR #2399)
- Adds the possibility to create an intra-node communicator in IParallelMng (PR #2290, PR #2292)
- Adds macros ARCCORE_FATAL_IF() and ARCCORE_FATAL_IF() to raise an exception if an assertion is not met (PR #2303)
- Always creates boundary groups (XMIN, XMAX, ...) when using the Cartesian mesh generator (PR #2312)
- Adds support for Triangle10 type cells (PR #2318)
- Optimizes and improves AMR patch management for Cartesian meshes (PR #2338, PR #2366, PR #2370, PR #2440, PR #2456, PR #2459, PR #2476, PR #2494)
- Adds experimental geometric partitioner for initial partitioning (PR #2340, PR #2345, PR #2346, PR #2349, PR #2352, PR #2355)
- Improves the numbering of new cells in the mesh subdivider. The new numbering respects the topological locality of the initial mesh (pr{2408})
- Optimizes Ensight outputs for polyhedral meshes (PR #2415)
- Adds functions math::normalizeL2() for Real2 and Real3 (PR #2455)
- Adds support for using MPI windows as allocators for variables (PR #2482)
- Adds experimental support for changing the allocator of an Array (PR #2493)
Accelerator API
- Adds support for block-local memory (equivalent to the __shared__ keyword in CUDA or HIP) (PR #2281)
- Adds support for hierarchical parallelism (PR #2287,PR #2291, PR #2293, PR #2295, PR #2296, PR #2297, PR #2298, PR #2299, PR #2313, PR #2316, PR #2317, PR #2438, PR #2442, PR #2444, PR #2447, PR #2451, PR #2486)
- Adds support for cooperative kernel launching (via cudaLaunchCooperativeKernel or hipLaunchCooperativeKernel). This support is not available with the Sycl back-end (PR #2282, PR #2439, PR #2441,PR #2452, PR #2461, PR #2469, PR #2475, PR #2479, PR #2481)
- Adds support for using a grid step for RUNCOMMAND_LOOP() and RUNCOMMAND_ENUMERATE() (PR #2414, PR #2419)
- Simplifies and redesigns the internal implementation of accelerator mechanisms (PR #2285, PR #2286, PR #2288, PR #2302)
- Adds support for memory pooling with HIP (PR #2289,PR #2307, PR #2310)
- Adds support for GenericSorter for the Sycl back-end (PR #2306)
- Automatically adds a barrier after GenericScanner and GenericSorter when using an asynchronous RunQueue (PR #2308)
- Enables memory pooling by default (PR #2320)
- Adds public interface IMemoryPool to manage the memory pool (PR #2376)
- Adds support for the Int64 type in ForLoopRange loops (PR #2364)
- Adds additional information in DeviceInfo (PR #2367, PR #2375, PR #2377)
- Adds NCCL support for variable synchronizations (PR #2373)
- Optimizes reduction management by removing the use of explicit memory copies. These copies are replaced by using pinned memory (PR #2389, PR #2393, PR #2492)
- With ROCM 7, uses a warp size fixed at compilation (PR #2445, PR #2446)
- No longer uses fastmod for calculating indices in 2D and 3D loops. This allows tests to be removed and calculation to be accelerated (PR #2450)
- Adds support for constructing NumArray<T,MDDim1> from an Span whose memory may be on CPU or GPU (PR #2491)
Changes
- Removes the template parameter MinValue in SpanImpl. This parameter was not used (PR #2255)
- Makes certain methods of Item and derived classes constexpr (PR #2261, PR #2264)
- Uses the STL thread implementation by default for IThreadImplementation instead of the TBB implementation PR #2379
- Removes support for compilation without enabling threads (PR #2380)
- Uses HIP instead of ROCM for the CMake variable ARCCORE_ACCELERATOR_MODE. The old name is still available for compatibility (PR #2457).
Corrections
Internal
- Removes historical implementation of ItemInternalMap (PR #2247)
- Moves type-based subgroup management to an internal class (PR #2353)
- Adds accelerator tests in Arccore (PR #2388, PR #2395, PR #2398, PR #2404, PR #2411, PR #2412, PR #2462, PR #2480)
- Renames the namespace Arcane::Accelerator::impl to Arcane::Accelerator::Impl (PR #2394, PR #2420)
- Various improvements in the Neo implementation (PR #2464, PR #2465, PR #2466, PR #2467, PR #2468, PR #2474, PR #2477)
Compilation and Continuous Integration (CI)
- Removes support for old versions of TBB (before OneTBB 2021) : PR #2267
- Adds support for "self-hosted" runners (PR #2279)
- Removes the CMake option ARCANE_ADD_RPATH_TO_LIBS (PR #2304)
- Replaces the CMake option ARCCORE_USE_MPI with ARCCORE_ENABLE_MPI (PR #2305)
- Replaces the CMake option ARCCORE_WANT_TESTS with ARCCORE_ENABLE_TESTS (PR #2471)
- Adds CMake properties INSTALL_RPATH_USE_LINK_PATH and BUILD_RPATH_USE_ORIGIN for Arccore libraries (PR #2331)
- Updates IFPEN workflows (PR #2422, PR #2432, PR #2433)
- Updates the codecov workflow (PR #2431)
- Prevents merging in a Pull Request without performing a "rebase" (PR #2436, PR #2437)
- Adds workflow for ROCM 7.2 (PR #2448)
- Cleans up the compilation system for alien/ArcaneInterface (PR #2487, PR #2490)
- By default, disables the display of deprecated methods during compilation (PR #2488)
Arccore
- Adds new common component containing the collections and classes needed for the accelerator API (PR #2268)
- In ITraceMng, uses std::mutex instead of Mutex (PR #2253)
- Optimizes the construction/destruction of the SmallArray class (PR #2242)
- Removes the retention of the number of elements of an SpanImpl when using a static dimension (PR #2241)
- Moves JSON handling classes from arcane_utils to arccore_common (PR #2391)
Alien
- Updates default values with GMRES for PETSc (PR #2251)
- Updates default values for BoomerAMG for Hypre (PR #2365)
- Adds support for using CUDA in the Hypre and PETSc GAMG solver (PR #2369, PR #2403)
- Cleans up PETScPrecomp.h to accelerate compilation (PR #2405)
- Improves GPU support for multiple back-ends (PR #2409, PR #2410, PR #2413, PR #2426, PR #2428, PR #2435, PR #2443, PR #2449, PR #2453, PR #2458, PR #2473, PR #2485)
Arcane Version 4.0.0 (October 15, 2025)
Version 4.0.0 is identical to version 3.16.12 and only removes C++17 support.
Arcane Version 3.16.12 (October 14, 2025)
- Note
- This version is the last to support the C++17 standard. Later versions (4+) require C++20 support.
New Features/Improvements
- Adds the possibility to modify dataset values from the command line (PR #1988, PR #1994)
- Adds the ItemLocalIdToItemConverter class to obtain an Item from an ItemLocalId. This class is similar to ItemInfoListView but can be preserved throughout the calculation and remains valid after modification of the associated entity family (PR #1971, PR #2122)
- Adds ItemTypeId type constants for base entity types. These constants are prefixed by ITI (e.g., ITI_Quad4 for the IT_Quad4 type) (PR #1972)
- Adds methods in ParallelMngUtils to create Ref<ISerializeMessage> instead of ISerializeMessage* (PR #1999)
- Adds various improvements to the mesh subdivision service (PR #2005)
- Adds support to be notified of entity additions or deletions (PR #2013)
- Adds mesh writer in MSH 4.1 format (PR #2020, PR #2026,PR #2027, PR #2028, PR #2033, PR #2034, PR #2039, PR #2042, PR #2045, PR #2045,PR #2049, PR #2053, PR #2054, PR #2065, PR #2076, PR #2077, PR #2078)
- Adds support for the MSH mesh format in the external partitioner (PR #2029)
- Adds support for the external partitioner in ArcaneCaseMeshService. This allows it to be used in cell tags (PR #2040)
- Adds support for multi-dimensional meshes in the external partitioner (PR #2048)
- Improves support for order 2 meshes (PR #2056, PR #2060, PR #2062, PR #2063)
- Adds support for using the max norm in bit-by-bit comparisons of variables (PR #2068, PR #2069, PR #2070, PR #2071, PR #2090, PR #2091)
- Adds methods to create and use Ref<ISerializeMessage> instead of an ISerializeMessage pointer. This will allow for cleaner management of the lifetime of these instances (PR #2108)
- Makes buffer management thread-safe in VariableSynchronizerMng (PR #2109)
- Adds a tag to variables that will be post-processed in the current iteration. This only works for the default Arcane post-processing module (ArcanePostProcessingModule) (PR #2145, PR #2148)
- Adds support for MacOS 14 and 15 (PR #2151, PR #2155, PR #2157, PR #2164)
- Adds an API for managing windows in shared memory via MPI. This API also works in shared memory and hybrid modes. The page Shared Memory Windows in Multi-Process indicates how to use these features (PR #2158, PR #2170, PR #2179)
- Adds support for zstd as an implementation of IDataCompressor (PR #2160)
- Adds the method MeshUtils::computeNodeNodeViaEdgeConnectivity() to calculate nodes connected by edges (PR #2176)
- Adds the possibility of using a class instance as a parameter of Parallel::BitonicSort (PR #2198)
- Adds constructors for MeshMaterialVariableRef from an IMeshMaterialMng (PR #2200)
- Adds experimental support for Quad9, Hexaedron27, and Pyramid13 types (PR #2205, PR #2206)
- Adds methods in MeshUtils to directly calculate the owners of nodes, edges, and faces when there are no ghost cells (PR #2230, PR #2236, PR #2237, PR #2238)
- Adds the possibility of disabling the entity owner verification test (PR #2239)
Accelerator API
Changes
Corrections
- Does not disable the update of ghost cells if ItemFamilyNetwork is used (PR #1998)
- Corrects potential 'Read after free' in ParallelMngDispatcher::setDefaultRunner() (PR #2021)
- Corrects the management of TimeHistoryMngInternal when replication is active (PR #2035)
- Increments the timestamp of ItemGroup after reading a protection (PR #2072)
- Corrects the historical writing of curves when the call to ITimeHistoryMng::addValue() was not made by all ranks of an IParallelMng. This resulted in a deadlock (PR #2118)
- Corrects various issues under Win32 (PR #2134, PR #2141, PR #2142, PR #2143,PR #2146, PR #2147, PR #2161, PR #2163, PR #2165, PR #2168, PR #2172)
- Corrects the extra written terminal \0 in protections/recoveries in HDF5 format (PR #2144)
- Ensures that data padding is correct when using multiple accelerator synchronizations (PR #2193)
Internal
- Moves the mesh::FaceReorienter class to arcane/core (PR #1969)
- Adds the mesh::ItemsOwnerBuilder class to calculate entity owners without needing a ghost cell layer. This ensures owner consistency after mesh modifications (PR #2008,PR #2016, PR #2019)
- Cleanup and various improvements in patch Cartesian mesh support (PR #2031)
- Ensures that the type of elements used in NumArray satisfies the std::is_trivially_copyable criterion (PR #2032)
- Cleanup of mesh utility script management (PR #2043)
- Uses cell services for the direct execution mechanism (PR #2046)
- Uses one ItemTypeMng instance per mesh (PR #2079)
- Improves the management of multi-dimensional or non-manifold meshes (PR #2080, PR #2081, PR #2083, PR #2085, PR #2086, PR #2089)
- Adds Item::hasFlags() and ItemBase::hasFlags() methods (PR #2087)
- Adds support to make the method ItemGroupImpl::_checkNeedUpdate() thread-safe. This mechanism is experimental and is activated by setting the environment variable ARCANE_USE_LOCK_FOR_ITEMGROUP_UPDATE to 1 (PR #2110)
- Cleanup and removal of compilation warnings in several files of the arcane_core component (PR #2112, PR #2114, PR #2115, PR #2116)
- Various improvements in the python wrapper (PR #2153, PR #2154, PR #2156, PR #2159, PR #2181)
- Moves the copy and fill methods of ConstMemoryView, MutableMemoryView, ConstMultiMemoryView, and MutableMultiMemoryView to the MemoryUtils.h file (PR #2169, PR #2171)
- Updates the RapidJSON version on commit '24b5e7a8' (PR #2180)
- Uses arcane/core instead of arcane for header file paths in Arcane (PR #2187)
- Various improvements in the Neo library (PR #2210, PR #2233, PR #2234, PR #2235)
- Optimizes the search for existing faces and edges when using a node hash for uniqueId() (PR #2218, PR #2219)
- Adds support for Hypre 3.0 (PR #2228)
Compilation and Continuous Integration (CI)
- Improves compatibility with Doxygen version 1.10.0 (PR #2001, PR #2003, PR #2014)
- Adds a necessary workflow to apply 'Merge Requests' (PR #2004)
- Removes workflows using ubuntu-20.04 because this operating system is no longer available on GitHub (PR #2023)
- Corrects compilation error with oneTBB 2022 (PR #2050)
- Adds support for .Net 9 (PR #2059)
- Adds CMake option ARCANE_ENABLE_ALEPH to disable Aleph (PR #2075)
- Adds IFPEN workflows using C++20 (PR #2027)
- Removes the workflow using windows-2019 because it is no longer supported by github (PR #2117)
- Adds the possibility to compile only Arccore from framework (PR #2125)
- Adds preliminary support for compiling with Guix (PR #2128)
- Adds Win32 workflow in debug mode (PR #2135)
- Updates the compile-all-vcpkg workflow with vcpkg version 2025.06 (PR #2140)
- Increases the number of tests in the Win32 workflow (PR #2162)
- Adds workflow for MacOS 15 and MacOS 26 (PR #2166, PR #2167, PR #2188, PR #2192, PR #2208)
- Adds Arcane installation in the compile-all-vcpkg workflow (PR #2182)
- Switches to version 5 of actions/checkout (PR #2186)
- Adds option --parallel 4 for ctest in IFPEN 2021 workflows (PR #2189, PR #2201)
- Updates docker images to add CUDA 13 and CLANG 21 (PR #2190, PR #2191)
- Removes vtu tests in the ARM64 workflow for CircleCI because the system VTK version contains a bug when reading XML (PR #2195)
Arccore
- Moves certain classes from message_passing_mpi to the private API of Arccore (PR #1992)
- Removes the MpiSerializeMessageList class which has not been used for a long time (PR #2000)
Alien
Arcane Version 3.15.3 (February 4, 2025)
New Features/Improvements
- Adds service to subdivide an initial mesh (PR #1937, PR #1938)
- Starts support for cells with multiple dimensions and non-manifold meshes (PR #1922, PR #1923, PR #1931, PR #1932, PR #1934, PR #1935, PR #1936, PR #1943, PR #1944, PR #1945, PR #1948)
- Adds experimental support for generating the uniqueId() of faces and edges from the uniqueId() of the nodes they comprise (PR #1851, PR #1920)
- Improves support for polyhedral meshes (PR #1846, PR #1847, PR #1925)
- Adds the compact-after-allocate property to disable mesh compaction upon allocation (PR #1857)
Accelerator API
Changes
- Various refactoring in `arcane{builtInGetValue()}` to avoid certain copies and use std::from_chars() for the double type (PR #1903, PR #1909, PR #1910, PR #1911, PR #1918, PR #1919, PR #1949, PR #1956)
- Moves the methods isNearlyZero(), normL2(), and squareNormL2() from the numerical classes Real2, Real3, Real2x2, and Real3x3 to the namespace Arcane::math (PR #1871).
- Renames ComponentItemLocalId to ConstituentItemLocalId and adds two classes MatItemLocalId and EnvItemLocalId to strongly type access to material variables (PR #1862)
- By default, uses the mli2 extension instead of mli for files generated by Lima. The mli format is obsolete and should no longer be used (PR #1849, PR #1850)
Fixes
- Fixes compilation with ROCM version 5 (PR #1852)
- Fixes the number of the first uniqueId() generated after a restart when the mesh is empty, setting it to 0 instead of 1. This allows for the same numbering whether or not a restart occurs in this specific case (PR #1924)
- Fixes memory leak for RunCommand created by RunQueue with a priority other than the default priority (PR #1927)
- Fixes incorrect return values in GenericFilterer and GenericPartitioner when input arrays have a zero size (PR #1929)
- Fixes missing call to MPI_Group_free when creating an IParallelMng from an IParallelMng (PR #1933)
- Correctly recalculates synchronization information after the creation of an AMR patch (PR #1946)
- Fixes memory leak in Aleph when creating Hypre, PETSc, or Epetra matrices (PR #1947)
- Fixes array overflow if multi-threading is used with a single thread (PR #1954)
- Fixes memory leaks in certain operations on the DOM (PR #1965)
Internal
- Adds class mesh::ItemsOnwerBuilder to calculate the owners of faces from the owners of cells (PR #1861, PR #2082)
- Uses IMesh instead of mesh::DynamicMesh in mesh::MeshExchangeMng (PR #1841)
- Adds specific float type for HDF5 utilities (PR #1837)
- Separates the explicit instantiation of certain classes into multiple files to speed up compilation (PR #1836, PR #1873)
- Starts support for the types Float128, Int128, Float16, Float32, BFloat16, and Int8 (PR #1835, PR #1863, PR #1864, PR #1866, PR #1867, PR #1868, PR #1869, PR #1870, PR #1914)
- Uniformizes multi-threaded profiling management (PR #1877)
- Implements IMemoryAllocator3 instead of IMemoryAllocator for SmallArray (PR #1889)
- Uses dependency injection to create the services managing threads in Application (PR #1900, PR #1902)
- Removes the obsolete method mesh::DynamicMesh::addFace() (PR #1930)
- Adds observables to ensure that views on internal variables in mesh::ItemFamily are always valid following an external change (PR #1953)
Build and Continuous Integration (CI)
- Removes the possibility of installing Arccore separately from Arcane. This ensures that Arccore and Arcane will always be consistent (PR #1865).
- Simplifies component dependency management to speed up compilation (PR #1874).
- Updates the compile-all-vcpkg workflow with version 2024.12 (PR #1894).
- Adds compile-all-vcpkg workflow with ubuntu 24.04 (PR #1896)
- Uses .Net 8 for certain compile-all-vcpkg workflows and adds C# wrapper tests (PR #1897)
- Adds workflow for ROCM version 6.3.1 and 5.7.1 (PR #1899)
- Uses .mli2 instead of .mli for Lima mesh files (PR #1904)
- Updates CI images (PR #1905, PR #1915)
- Adds workflow with -fsanitize=address (PR #1940, PR #1955)
Arccore
Alien
- Removes use of boost::remove_reference and replaces it with std::remove_reference (PR #1844)
- Fixes compilation when PETSc is compiled with MUMPS support (PR #1917)
Arcane Version 3.14.15 (December 11, 2024)
New Features/Improvements
- Adds the possibility of choosing the version used for calculating face IDs in the dataset (PR #1826)
- Adds experimental support for reading MSH files version 4.1 in binary format (PR #1824)
- Adds a mechanism to delete ghost cells from refined meshes (PR #1716, PR #1785, PR #1818)
- Adds methods ICartesianMesh::coarseZone2D() and ICartesianMesh::coarseZone3D() to define a block of an AMR patch (PR #1697)
- Adds support in patch-based AMR to define the initial mesh (PR #1678, PR #1774)
- Adds the possibility of choosing the face numbering version in the dataset (PR #1674)
- Adds a new implementation of the associative array impl::HashTableMap2. This implementation is currently internal to Arcane. The new implementation is faster and consumes less memory than the old (HashTableMapT). It also has an API compatible with std::unordered_map (PR #1638, PR #1639, PR #1640, PR #1650)
- Adds support for MPI/IO block writing in the writer VtkHdfV2PostProcessor (PR #1648, PR #1649)
- Adds support for polyhedral meshes (PR #1619, PR #1620, PR #1496, PR #1746, PR #1747, PR #1748, PR #1761, PR #1762, PR #1795, PR #1816, PR #1829)
- Adds utility method MeshUtils::computeNodeNodeViaEdgeConnectivity() to create node-to-node connectivities via edges (PR #1614)
- Adds a mechanism to verify that all ranks synchronize the same variable. This is done by setting the environment variable ARCANE_CHECK_SYNCHRONIZE_COHERENCE (PR #1604)
- Adds support for setting the debug name for NumArray (PR #1590)
- Adds the possibility of displaying the call stack via the debugger when a signal (SIGSEGV, SIGBUS, ...) is received (PR #1573)
- Adds a new version of initial coarsening that preserves the initial numbering and guarantees the same numbering regardless of the decomposition (PR #1557)
- Adds implementation of IParallelMng::scan() for shared memory and hybrid mode (PR #1548)
Accelerator API
- Adds method Runner::deviceMemoryInfo() to retrieve free memory and total memory of an accelerator (PR #1821)
- Displays more properties when describing the used accelerator (PR #1819)
- Adds the possibility of changing the memory resource associated with MemoryUtils::getDefaultDataAllocator() (PR #1808)
- Uses const RunQueue& or const RunQueue* instead of RunQueue& and RunQueue* for certain method arguments that use RunQueue (PR #1798)
- Prohibits using the same RunCommand instance twice. It is temporarily possible to allow this by setting the environment variable ARCANE_ACCELERATOR_ALLOW_REUSE_COMMAND to 1 (PR #1790)
- Adds class RegisterRuntimeInfo to pass arguments for accelerator runtime initialization (PR #1766)
- Adds methods to cleanly retrieve the native implementation corresponding to RunQueue and deprecates RunQueue::platformStream() (PR #1763)
- Adds header files for advanced algorithms whose name is identical to the class name (PR #1757)
- Adds implementation of RUNCOMMAND_MAT_ENUMERATE() for AllEnvCell (PR #1754)
- Adds methods IAcceleratorMng::runner() and IAcceleratorMng::queue() which return instances instead of pointers to Runner and RunQueue (PR #1752)
- Makes the construction methods of RunQueue and RunCommand private. Instances of these classes must be created via makeQueue or makeCommand (PR #1752)
- Various optimizations in the update of constituents (MeshMaterialModifier) (PR #1559, PR #1562, PR #1679, PR #1681, PR #1682, PR #1683, PR #1687, PR #1689, PR #1690, PR #1691, PR #1704, PR #1720, PR #1729, PR #1731, PR #1733, PR #1738, PR #1739, PR #1741, PR #1742, PR #1831)
- Adds class ProfileRegion to specify a region for profiling on the accelerator (PR #1695, PR #1734, PR #1768)
- Adds an internal class impl::MemoryPool to keep a list of allocated blocks. This mechanism currently only works with the CUDA implementation. It is not active by default (see Memory Pool) (PR #1684, PR #1685, PR #1686, PR #1699, PR #1703, PR #1724, PR #1725, PR #1726, PR #1776)
- Adds partitioning algorithm GenericPartitioner (PR #1713, PR #1717, PR #1718, PR #1721, PR #1722)
- Uniformizes accelerator algorithm constructors to take an RunQueue as an argument (PR #1714
- Uses the accelerator API for the creation of EnvCellVector and MatCellVector (PR #1710, PR #1711)
- Allocates the memory of ItemVector via UVM. This allows elements of this class to be accessible on accelerators (PR #1709)
- Adds sorting algorithm GenericSorter (PR #1705, PR #1706)
- Adds the possibility of using host memory for the return value of GenericFilterer (PR #1701)
- Adds explicit synchronization for DualUniqueArray (PR #1688)
- Adds the possibility of retrieving the backCell() and frontCell() of a face on the accelerator (PR #1607)
- Adds accelerator implementation of IMeshMaterialMng::synchronizeMaterialsInCells(). This implementation is activated if the environment variable ARCANE_ACC_MAT_SYNCHRONIZER is set to 1 (PR #1584)
- Adds the possibility of using the ATS mechanism with CUDA for allocation (PR #1576)
- Ensures that messages displayed by the CUPTI integration are not split in multi-threading (PR #1571)
- Adds the possibility of displaying and interrupting profiling (PR #1561, PR #1569)
- Adds macro RUNCOMMAND_SINGLE() to execute an accelerator command for a single iteration (PR #1565)
- By default, allocates managed memory (UVM) on a multiple of the system page size (PR #1564)
- Adds detection and display of 'Page Faults' in the CUPTI integration (PR #1563)
- Automatically chooses the device associated with an MPI rank on a node according to a round-robin mechanism (PR #1558)
- Adds support for compiling for CUDA with the Clang compiler (PR #1552)
Changes
Fixes
- Uses the same values for ISerializer::eDataType and eDataType (PR #1827, PR #1828)
- Fixes compilation error with CRAY MPICH (PR #1778)
- Fixes compilation with libxml2 versions 2.13+ (PR #1715)
- Correctly positions the communicator of MessagePassing::MessagePassingMng associated with the sequential implementation SequentialParallelMng. Previously, this was only done for the MPI implementation (PR #1661)
- In the VTK reader, keeps the variables read from the file after the reader is destroyed (PR #1655)
- Does not destroy the instance used in ArcaneLauncher::setDefaultMainFactory() at the end of execution. This instance is not necessarily allocated via new (PR #1643)
- Fixes incorrect behavior in subdomain management with new connectivities (PR #1636)
- Fixes non-consideration of the environment variable ARCANE_DOTNET_USE_LEGACY_DESTROY (PR #1570)
- Adds missing call to ArcaneMain::arcaneFinalize() when using .Net (PR #1567)
- Fixes incorrect handling of options for the tool arcane_partition_mesh (PR #1555)
Internal
- Adds environment variable ARCANE_CUDA_MEMORY_HINT_ON_DEVICE to automatically call cudaMemAdvise() on unified memory to force it to use a specific allocator (PR #1833)
- Calls Array::resizeNoInit() instead of Array::resize() when resizing material variables. Initialization is done later, which prevents double initialization (PR #1832)
- Renames Adjency to Adjacency in certain classes and methods (PR #1823)
- Adds command line option -A,UseAccelerator=1 to specify that accelerator execution is desired. The backend used will be automatically chosen based on the compilation configuration (PR #1815)
- Adds typedef AlephInt which is used to specify the indices of rows and columns of matrices and vectors. Currently, this type is int, but when 64-bit support is active, it will be long int or long long int (PR #1770)
- Frees serialization buffers as soon as possible during load balancing (PR #1744, PR #1756)
- Adds an experimental service allowing mesh subdivision during initialization (PR #1606, PR #1728)
- Makes the classes ItemBase and MutableItemBase public PR #1740
- Adds an internal finalization method for the accelerator API. This allows statistics to be displayed and associated resources to be freed (PR #1727)
- Adds tests for using multiple criteria with multi-mesh partitioning (PR #1719, PR #1772)
- In BitonicSort, does not allocate arrays for ranks and indices if they are not used (PR #1680)
- Uses a new hashing implementation for ItemInternalMap. This implementation is active by default, but the old one can be used by setting the option ARCANE_USE_HASHTABLEMAP2_FOR_ITEMINTERNALMAP to OFF during configuration (PR #1611, PR #1617, PR #1622, PR #1624, PR #1625, PR #1628, PR #1629, PR #1631, PR #1677, PR #1745)
- Cleanup and refactoring of partitioning with ParMetis to use IParallelMng instead of calling MPI directly (PR #1662, PR #1665, PR #1667, PR #1671)
- Adds support for creating a sub-communicator in the style of MPI_Comm_Split (PR #1669, PR #1672)
- Cleanup and refactoring of classes managing the numbering of uniqueId() for edges (PR #1658)
- Uses a pointer to mesh::DynamicMeshKindInfos instead of an instance in mesh::ItemFamily (PR #1646)
- Adds to ICaseMeshService the possibility of performing operations after partitioning (PR #1637)
- Adds internal API for IIncrementalItemConnectivity (PR #1615, PR #1618, PR #1626)
- Adds a build type entry point for the unit test service (PR #1613)
- Adds the possibility in IIncrementalItemConnectivity to notify of the addition of multiple entities at once (PR #1610)
- Adds a method to retrieve the call stack via LLVM or GDB. This allows, in particular, obtaining line numbers in the call stack (PR #1572, PR #1597, PR #1616) TODO INDICATE METHOD
- Adds experimental support for KDI (PR #1594, PR #1595, PR #1599)
- Various optimizations in the VtkHdfV2PostProcessor service (PR #1575, PR #1600)
- [EXPERIMENTAL] Adds a new version of face uniqueId() calculation based on the uniqueId() of the nodes that compose it. This only works in sequential mode for now (PR #1550)
- Adds function to generate a uniqueId() from a list of uniqueId() (PR #1549)
- Optimizes the calculation of the version 3 of ghost cells (PR #1547)
Build and Continuous Integration (CI)
- Uses a dotnet wrapper for compilation. This wrapper ensures that the user's HOME is not modified, which could cause locking issues when multiple instances of dotnet run simultaneously (PR #1789, PR #1791, PR #1792, PR #1830)
- Adds the possibility of adding libraries during the linking of arccore_message_passing_mpi. This ensures that certain libraries are properly added to the link and is notably used for MPI 'GPU-Aware' support with CRAY MPICH (PR #1786)
- Adds 'ubuntu 22.04' workflow for IFPEN dockers (PR #1781)
- Adds CMake variable ARCCON_NO_TBB_CONFIG to force not to use the CMake configuration file for TBB (PR #1779)
- Adds protection/restart tests for coarsening (PR #1707)
- Fixes compilation error when PETSc is not compiled with MUMPS (PR #1694)
- Adds VTK reader test with properties (PR #1656, PR #1659)
- Adds support for a connectivity checksum in mesh tests (PR #1654)
- Writes test output files to the test directory to allow them to be run in parallel (PR #1541, PR #1653)
- Updates IFPEN images 2021 (PR #1542, PR #1579, PR #1587, PR #1588, PR #1592, PR #1593, PR #1598)
- Removes internal versions of hostfxr.h and coreclr_delegates.h. These files are now in the dotnet SDK (PR #1591)
- Fixes FlexLM detection and configuration (PR #1602, PR #1630)
- Removes test output directories after execution to reduce storage footprint (PR #1581)
- Runs CI tests in parallel for multiple workflows (PR #1553)
- Refactors the CI action system and images to make it more flexible (PR #1545)
Arccore
Axlstar
- Replaces std::move() with std::forward() in the generation of certain methods (PR #1773)
- Generates the methods to retrieve the functions associated with dataset options via the specified interface (PR #1601)
- Removes the date from generated files so they are not modified if regenerated identically (PR #1797
Alien
Arcane Version 3.13.08 (July 19, 2024)
New Features/Improvements
- Adds experimental support to create a mesh variable without reference. This requires initializing it with an instance of NullVariableBuildInfo (PR #1510).
- Adds support for dynamic load balancing with multiple meshes (PR #1505, PR #1515).
- Adds support for synchronizations on a subset of ghost entities (PR #1468, PR #1484, PR #1486).
- README improvement and translation to English (PR #1466).
- Adds experimental patch AMR support (PR #1413).
- Starts support for integrating Python code during execution. This support is considered experimental (PR #1447, PR #1449, PR #1454, PR #1456,PR #1461, PR #1462, PR #1471, PR #1479, PR #1493, PR #1494, PR #1499, PR #1501, PR #1502, PR #1513, PR #1522, PR #1525).
Accelerator API
- Adds accelerator access to certain methods (PR #1539)
- Optimizes calculation kernels for material update management (PR #1421, PR #1422, PR #1424, PR #1426, PR #1431, PR #1432, PR #1434, PR #1437, PR #1440, PR #1441, PR #1443, PR #1458, PR #1472, PR #1473, PR #1474, PR #1488, PR #1489)
- Documentation update (PR #1483, PR #1492, PR #1508)
- Adds template arguments to specify the size of integers used for indexing (Int32 or Int64) (PR #1398).
- Adds support for version 2 reductions in RUNCOMMAND_MAT_ENUMERATE() (PR #1390).
- Continues SYCL porting work (PR #1389, PR #1391, PR #1393, PR #1396).
- Improves SIMD padding management for ItemGroup to only do it on demand and do it on the accelerator if possible (PR #1405, PR #1523, PR #1524).
Changes
- Removes the component managing vector expressions on variables as it has not been used for a long time (PR #1537)
- Uses clock_gettime() instead of clock() to measure CPU time used (PR #1532)
- By default, uses the parallel version of the MSH reader. It is always possible to use the sequential version by setting the environment variable ARCANE_USE_PARALLEL_MSH_READER to 0 ( PR #1528).
- Removes support for C# compilation with mono. dotnet (version 6 or higher) must now be used (PR #1470).
- Renames ArrayIndex to MDIndex (PR #1397).
- Adds the possibility of retrieving an ComponentCell from an ComponentItemVectorView (PR #1478)
Fixes
- Fixes various bugs in mesh graph management (PR #1536, PR #1535)
- Fixes potential concurrency issues in multi-threaded mode (PR #1467, PR #1534, PR #1533, PR #1529)
- Adds support for 1D meshes in the VtkHdfV2 format (PR #1519)
- Re-enables signal sending in a signal handler. This had been implicitly disabled when using sigaction instead of sigset to position signals (PR #1518)
- Fixes reading groups in the MSH format when there are multiple groups per physical entity (PR #1507, PR #1509).
- Adds verification tests in the use of partial variables (PR #1485)
- Explicitly indicates the underlying type for eDataType (PR #1418)
- Fixes memory reuse issue for reductions introduced during the creation of version 2 of reductions (PR #1439).
- Fixes potential incorrect calculation of the number of entities to serialize, which could result in an array overflow (PR #1423).
- Does not keep behavioral change properties in MeshMaterialModifier to avoid inconsistencies (PR #1453).
Internal
- Uses a single instance of DofManager (PR #1538)
- Removes multiple uses of Glib (PR #1531)
- Removes certain obsolete uses of ItemInternal in the C# wrapper (PR #1517, PR #1520)
- Improves C# compilation and SWIG dependencies management by using a single project and fixes various dependency issues in CMake management (PR #1433, PR #1407, PR #1410, PR #1411, PR #1412, PR #1414, PR #1425, PR #1427, PR #1428, PR #1429, PR #1455, PR #1480, PR #1487, PR #1495, PR #1497, PR #1498)
- Various improvements in polyhedral mesh management (PR #1435, PR #1436, PR #1438, PR #1463)
Continuous Integration (CI)
- Adds Python tests in certain workflows (PR #1448, PR #1526).
- Updates Ubuntu images (PR #1417, PR #1442, PR #1503).
- Activates ccache for the codecov workflow (PR #1464).
- Switches to vcpkg version 2024.04 for the compile-all-vcpkg workflow (PR #1450).
- Uses a specific CMake variable to enable test coverage (PR #1444, PR #1445).
- Updates CI to no longer use obsolete GitHub actions (PR #1416).
- Updates CI for IFPEN dockers (PR #1402, PR #1409)
- Adds the possibility of using accelerator tests via googletest (PR #1401, PR #1403).
- Explicitly uses the sequential message exchange service for sequential tests (PR #1430).
Arccore
Axlstar
- Improvement of documentation generated from AXL files (PR #1452)
Alien
Arcane Version 3.12.18 (May 02, 2024)
- Note
- With this version, it is necessary to enable C++20 to use the accelerator API. To do this, you must set the CMake variable ARCCORE_CXX_STANDARD=20 during configuration. You must then have at least GCC 11, Clang 16, or Visual Studio 2022, as well as CMake version 3.26.
New Features/Improvements
- Adds the possibility to sort connected faces and edges to nodes by increasing uniqueId() (PR #990). This is not active by default for compatibility with existing code. Sorting allows for the same traversal order for faces and node edges, which can help ensure reproducible calculations. To activate it, set the environment variable ARCANE_SORT_FACE_AND_EDGE_OF_NODE to 1 or use the following code:
virtual Properties * properties()=0
Properties associated with this family.
virtual IItemFamily * nodeFamily()=0
Returns the node family.
virtual void endUpdate()=0
Notifies the instance that mesh modification is finished.
virtual IMeshModifier * modifier()=0
Associated modifier interface.
void setBool(const String &name, bool value)
Sets a boolean property of name name and value value.
- Allows modifying the parent patch number during renumbering via CartesianMeshRenumberingInfo::setParentPatch() (PR #986).
- Adds support for incremental hash function calculation (PR #983, PR #984).
- Adds implementation of the SHA1 hash algorithm (PR #982).
- Adds data initialization policy to have the same behavior as previous Arcane versions before version 3 (PR #1017).
- Adds Vector2 and Vector3 classes to manage pairs and triplets of arbitrary types (PR #1066, PR #1075)
- Adds FixedArray class for fixed-size arrays. This class is similar to std::array but initializes its values by default and allows for array overflow detection (PR #1063)
- Adds support for 3D de-refinement and renumbering of mesh entities during subsequent refinement (PR #1061, PR #1062)
- Adds conversion of ComponentCell to MatCell, EnvCell, and AllEnvCell (PR #1051).
- Adds support for saving variable 'hashes' to quickly compare if values are different (PR #1142, PR #1143, PR #1145, PR #1147, PR #1150, PR #1152, PR #1155, PR #1156, PR #1158, PR #1159, PR #1160)
- Adds parallel reading of MSH format files (PR #1126, PR #1136, PR #1137, PR #1138, PR #1139)
- Refactoring of ITimeHistoryMng management to easily handle multiple meshes (PR #1203, PR #1249, PR #1256, PR #1260, PR #1369)
- Adds experimental support for Cartesian patch AMR by duplicating nodes and faces (PR #1167, PR #1337, PR #1350, PR #1351, PR #1353)
- Adds a new method (method 4) for AMR patch renumbering to maintain the same numbering between a refined mesh, a de-refined mesh, and then a refined mesh again (PR #1108, PR #1109)
- Activates 3D node merging (PR #1361)
- Adds support for XML file indentation via LibXml2 during outputs (PR #1379)
Accelerator API
- Requires C++20 for the accelerator API (PR #1020, PR #1026, PR #1030, PR #1050).
- INCOMPATIBILITY: Adds a template argument in ExtentsV, ArrayIndex allowing specification of the index type. Currently, only Int32 is supported, but Int64 and Int16 will be available later. This change prevents compiling code that uses the old class value of ExtentsV. Since this class is normally internal to Arcane, this should not affect many usages (PR #1383)
- Adds an asynchronous fill() method for mesh variables (ItemVariableArrayRefT and ItemVariableScalarRefT) (PR #991)
- Adds RunQueue::ScopedAsync class to temporarily make an execution queue asynchronous (PR #978).
- Optimizes memory management of the Filterer class and adds overloads (PR #1022, PR #1023, PR #1034, PR #1043, PR #1210, PR #1225, PR #1271)
- Adds support for atomic operations (PR #1028, PR #1032, PR #1033)
- Adds support in Aleph for Hypre versions compiled with accelerator support (PR #1125)
- Adds experimental support for automatic pre-fetching of view values (PR #1179, PR #1180, PR #1304)
- Adds direct reduction algorithm via the GenericReducer class (PR #1306, PR #1307)
- Adds list partitioning algorithm via the GenericPartitioner class (PR #1217)
- Makes certain mathematical operations accessible on accelerators (PR #1294)
- Adds overloads for the PrefixSum algorithm ( PR #1253, PR #1254)
- Adds views on partial variables (PR #1299, PR #1308, PR #1311, PR #1313)
- Uses the accelerator API when updating materials via MeshMaterialModifier (PR #1182, PR #1183, PR #1185, PR #1186, PR #1196, PR #1204, PR #1205,PR #1211, PR #1219, PR #1223, PR #1224, PR #1226, PR #1227, PR #1230, PR #1233, PR #1235, PR #1238, PR #1239, PR #1241, PR #1243, PR #1247, PR #1257, PR #1258, PR #1263, PR #1268, PR #1283, PR #1284, PR #1285, PR #1287, PR #1292, PR #1295, PR #1312, PR #1347)
- Uses the accelerator API for adding and removing entities in an ItemGroup (PR #1288,PR #1289, PR #1293).
- Adds a default constructor for RunQueue. In this case, the instance is not usable until it has been assigned (PR #1282)
- Adds the possibility of copying RunQueue with a reference semantics (PR #1221)
- Adds support for choosing a default memory resource for an RunQueue (PR #1278)
- Adds mechanisms to facilitate memory management (PR #1273, PR #1274)
- Adds the possibility of creating a view on data by specifying an instance of RunQueue (PR #1269).
- Adds conversion methods from NumArray and MDSpan to SmallSpan (PR #1262)
- Adds support for retrieving the iterator index for RUNCOMMAND_ENUMERATE() and RUNCOMMAND_MAT_ENUMERATE() (PR #1270, PR #1272)
- Adds support in RUNCOMMAND_MAT_ENUMERATE() for MatCell (PR #1184)
- Adds the function VariableUtils::markVariableAsMostlyReadOnly() to mark variables as primarily read-only (PR #1206)
- Allows the use of eMemoryRessource::HostPinned memory when the accelerator runtime is not defined. In this case, eMemoryRessource::Host is used (PR #1315)
- Adds the method MemoryUtils::getDeviceOrHostAllocator() to retrieve an allocator on the accelerator if an accelerator runtime is available, and on the host otherwise (PR #1364)
- Starts support for a backend with the SYCL API. This backend is not yet functional and is only available for internal tests (PR #1318, PR #1319, PR #1320, PR #1323, PR #1324, PR #1330,PR #1334, PR #1345, PR #1355, PR #1363, PR #1365, PR #1373, PR #1374, PR #1380, PR #1381)
- Starts a new implementation of reductions that allow supporting the SYCL API (PR #1366, PR #1368, PR #1371, PR #1372, PR #1377)
Changes
- INCOMPATIBILITY: Removes most using statements for mathematical functions in the StdHeader.h file (PR #1370, PR #1384).
- Removes the internal class ComponentItemInternal, which is replaced by ComponentItemBase (PR #1039, PR #1053, PR #1059, PR #1172, PR #1181, PR #1187, PR #1190, PR #1191, PR #1192, PR #1193, PR #1194, PR #1195, PR #1197, PR #1199, PR #1200, PR #1335)
- Always activates incremental connectivities (PR #1166)
- Deprecates NumArray::s(). Use operator() or operator[] instead (PR #1035)
- Does not initialize the MPI runtime if the message exchange service (MessagePassingService) is Sequential (PR #1029).
- Does not set the CMake variable ARCANE_BUILD_TYPE by default during configuration (PR #1004).
- No longer filters signed assemblies when loading C# plugins (PR #1114)
- Uses String instead of const String& for return values of IVariable and VariableRef (PR #1134)
- By default, uses the new version of serialization message list management (PR #1113)
- Uses Int16 instead of Int8 for the accelerator ID (DeviceId) (PR #1276)
- By default, uses version 2 of entity list management by type in groups (ItemGroup. This is used, for example, in ItemGroup::applyOperation(). The new version no longer uses subgroups but only lists and does not duplicate memory if all entities in the group are of the same type (PR #1174)
- In views, replaces ViewSetter with DataViewSetter and ViewGetterSetter with DataViewGetterSetter (PR #1040)
Fixes
- Fixes memory leak with asynchronous commands when RunQueue::barrier() is not called. This should normally not happen because barrier() must always be called after an asynchronous command. Now, if commands are active when the \arcanacc{RunQueue} is destroyed, an implicit barrier is performed (PR #995)
- Fixes incorrect return type of MatItemVariableScalarOutViewT::operator[]() which did not allow modifying the value (PR #981).
- Fixes incorrect property consideration when creating material variables in certain cases (PR #1012).
- Fixes incorrect value for the Z dimension for 3D de-refinement (PR #1074)
- Fixes renumbering of new entities in Cartesian meshes after 2D de-refinement (PR #1055).
- Fixes various issues in the management of the AllCellToAllEnvCellAccessor class (PR #1071, PR #1133, PR #1188)
- Ensures that the associated global variable is properly allocated when constructing a material variable (PR #1056)
- Fixes incorrect return value of ItemInternal.Cell() in the C# wrapper (PR #1131)
- Fixes version 2 serialization when using MPI_ANY_SOURCE (PR #1116)
- Fixes missing synchronization update when de-refining but not refining afterward (PR #1266)
- Fixes various compilation issues (PR #1044, PR #1047, PR #1280, PR #1309)
- Fixes potential incorrect SIMD padding update in the update of ItemGroup (PR #1165)
- Uses the CMake variable CMAKE_CUDA_HOST_COMPILER to specify the host compiler associated with CUDA instead of enforcing the NVIDIA compiler option -ccbin (PR #1386)
- Fixes compilation with ROCM 6.0 (PR #1170)
- Fixes compilation with Swig 4.2 (PR #1098)
- Fixes compilation with LibXml2 versions 2.12.0 and later (PR #1019).
Internal
- Uses a reference counter for RunQueueImpl (PR #996)
- Adds experimental support for changing data values from the command line (PR #1038).
- Adds a new hash calculation mechanism for IData implementations (PR #1036).
- Uses a new Hash mechanism for detecting variable value validity during recovery (PR #1037).
- Simplifies the MDSpan implementation using C++20 (PR #1027)
- Moves Aleph implementation files into the source code instead of having them in header files and fixes the build system when using Trilinos (PR #1002, PR #1003)
- Adds classes to specify additional arguments for the methods IMeshModifier::addCells() and IMeshModifier::addFaces() (PR #1077)
- Removes the old Cartesian mesh generator implementation (PR #1069)
- Uses Int64x2, Int64x3, Int32x2, and Int32x3 instead of std::array to manage Cartesian mesh build information (PR #1067)
- Removes coverity warnings (PR #1060, PR #1065, PR #1333, PR #1336, PR #1378)
- Refactoring of the internal mechanism for managing material entity information to make properties accessible on the accelerator (PR #1057, PR #1058, PR #1086)
- Adds support for JSON format for VariableDataInfo (PR #1148)
- Uses ReferenceCounterImpl for the implementation of IThreadImplementation and IParallelDispatchT (PR #1132, PR #1127)
- Fixes various compilation warnings (PR #1130, PR #1163, PR #1164, PR #1042, PR #1118, PR #1346)
- Improves Windows porting (PR #1154, PR #1157, PR #1246)
- Adds the method IMesh::computeSynchronizeInfos() to force recalculation of synchronization information ( PR #1124)
- Disables floating-point exceptions at the end of calculation. This prevents floating-point exceptions (FPE) due to speculative executions (PR #1232)
- Adds experimental class DualUniqueArray to manage a dual view on CPU and accelerator (PR #1215)
- Uses the correct page size value for the internal allocator linked to CUDA (PR #1198)
- Adds detection of MPI GPU Aware mode for ROCM (PR #1209)
- Adds the method ITimeStats::resetStats() to reset the temporal statistics of the instance (PR #1122, PR #1128)
- Adds implementation of IThreadImplementation and AtomicInt32 using the standard C++ library ( PR #1339, PR #1340, PR #1342, PR #1343)
- Fixes possible duplication of uniqueId() in the boundary merging test (PR #1362)
Continuous Integration (CI)
- Updates the U22_G12_C15_CU122 image (PR #1031)
- Removes the use of targets using CUDA 11.8 ( PR #1078)
- Updates the vcpkg workflow to version 2023-12-12 (PR #1076)
- Uses C++20 for the compile-all-vcpkg workflow (PR #1048)
- By default, sets CMAKE_BUILD_TYPE to Release if this variable is not specified during configuration (PR #1149)
- Adds the macro ARCANE_HAS_ACCELERATOR if Arcane is compiled with accelerator support (PR #1123)
- Adds support for using 'googletest' with MPI cases (PR #1092)
- Removes the use of Clang13 in CI (PR #1083)
- Modifies the IFPEN workflow to compile all framework components directly (PR #1214, PR #1281)
- Deactivates ongoing tests if a modification is published in the 'pull-request' branch (PR #1250)
- Adds workflow for IFPEN 2021 with RHEL versions 7, 8, and 9 (PR #1255)
- Updates certain obsolete actions (PR #1218,PR #1222)
- Uses C++20 for certain workflows (PR #1189)
Arccore
- Adds support for specific destructors in ReferenceCounterImpl (PR #1068)
- Adds a new implementation of ReferenceCounterImpl that does not directly call the operator delete. This allows the instance to be destroyed externally (PR #989, PR #1080, PR #1081, PR #1120, PR #1161, PR #1162).
- Allows the use of ReferenceCounterImpl without needing an interface class (PR #1121)
- Uses std::atomic_flag instead of glib for the SpinLock class (PR #1110)
- Starts support for Float16, Float32, and BFloat16 types (PR #1087, PR #1088, PR #1089, PR #1095, PR #1099, PR #1101, PR #1102, PR #1106)
- Makes the StringImpl class private (PR #1096, PR #1097)
- Various improvements in ISerializer (PR #1090, PR #1093, PR #1112)
- Makes the method Array::resizeNoInit() public (PR #1220, PR #1297)
- Adds a template argument in Span, SmallSpan, and SpanImpl to indicate the minimum index value (0 by default) (PR #1296).
- Adds implicit and explicit conversions between Array and SmallSpan (PR #1277, PR #1279)
- Fixes multiple conversions between UTF-8 and UTF-16 for String (PR #1251).
- Adds a utility function to fill an Span with random values (PR #1103)
- Adds the method arccoreCheckRange() to check if a value is within a range (PR #1091).
- Adds BuiltInDataTypeContainer class to generalize operations on basic data types PR #1105
- Adds the possibility of retrieving the MPI communicator in MessagePassing::IMessagePassingMng (PR #1248)
- Starts internal re-organization to make the use of 'Glib' optional (PR #1328).
Axlstar
Alien
Arcane Version 3.11.15 (November 23, 2023)
New Features/Improvements
- Internal reorganization of synchronizations to use a single memory buffer for all synchronizations of the same mesh (PR #861, PR #862, PR #863, PR #866, PR #867, PR #871, PR #872, PR #873, PR #874, PR #878, PR #880)
- Adds interface IVariableSynchronizerMng to manage all instances of IVariableSynchronizer for a given mesh (PR #869, PR #879).
- Adds automatic mode to check if a synchronization had an effect. This mode is activated if the environment variable ARCANE_AUTO_COMPARE_SYNCHRONIZE is set. When this mode is active, statistics at the end of the calculation allow knowing the number of synchronizations for which ghost cells were modified. The page Synchronization Comparison indicates how to use this mechanism (PR #897, PR #898, PR #900, PR #902, PR #910, PR #926).
- Adds two experimental classes CartesianMeshCoarsening and CartesianMeshCoarsening2 to coarsen the initial Cartesian mesh. This currently works only in 2D (PR #912, PR #913, PR #917, PR #918, PR #937, PR #942, PR #944, PR #945).
- Adds iterator (ICartesianMesh::patches()) over the patches of Cartesian meshes (PR #948).
- Adds class CartesianPatch to encapsulate the ICartesianMeshPatch (PR #971).
- Adds cumulative values for message exchange statistics across all executions (PR #852, PR #853).
- Adds C# support for data set functions (PR #797, PR #800, PR #801, PR #803, PR #804).
- Adds support for ILU and IC preconditioners in parallel in the Aleph PETSc component (PR #789, PR #799).
Accelerator API
- In Reducer, uses HostPinned memory instead of standard host memory to retain the reduced value. This allows for faster memory copying between GPUs (PR #782)
- Adds missing ARCCORE_HOST_DEVICE macros for array size checking methods (PR #785).
- Adds method RunQueue::platformStream() to retrieve a pointer to the associated native instance (cudaStream or hipStream, for example) (PR #796).
- Adds accelerator support for version 6 and version 8 of material synchronizations (PR #855).
- Adds support to retrieve the number of environment in a mesh (PR #860)
- Adds views on the environment variable (PR #904).
- Adds support for inclusive and exclusive Scan algorithms via the Scanner class (PR #921, PR #923).
- Adds accelerator access to certain methods of AllEnvCell and EnvCell (PR #925).
- Adds support for array filtering (PR #954, PR #955).
- Adds asynchronous copy method for NumArray and variables on the mesh (PR #961, PR #962)
- Adds asynchronous fill method NumArrayBase::fill() (PR #963, PR #964).
Changes
Corrections
- In the MSH format, corrects incorrect reading of node groups when there is only one element in that group (PR #784).
- Corrects compilation of ArrayExtentsValue for dimension 2 with Clang and NVCC compilers (PR #786).
- Corrects compilation of C# examples if the environment is not available. Also sets the environment variable LD_LIBRARY_PATH if necessary (PR #811).
- Corrects the optimization mode eModificationFlags::OptimizeMultiMaterialPerEnvironment to behave the same as other value update optimization modes when transitioning from a partial cell to a pure cell. The expected behavior is to take the partial material value and the partial environment value. To maintain backward compatibility, this mode is not active by default. The method IMeshMaterialMng::setUseMaterialValueWhenRemovingPartialValue() allows it to be activated (PR #844, PR #957).
- Corrects a bug in DoF synchronization under certain conditions (PR #920).
- Corrects memory leak in the accelerator management of AllEnvCell (PR #931).
- Corrects incorrect accounting of additional meshes for complex options with multiple occurrences (PR #941).
Internal
- Starting support for Cartesian meshes with structured block patches (PR #946).
- Starting refactoring of material connectivity management. The goal of this refactoring is to optimize this connectivity management to avoid having to call IMeshMaterialMng::forceRecompute() after a modification. These mechanisms are not active by default (PR #783, PR #787, PR #792, PR #794, PR #795, PR #825, PR #826, PR #828, PR #829, PR #831, PR #832, PR #835, PR #836, PR #838, PR #839, PR #840, PR #841, PR #842, PR #843, PR #847).
- Cleanup and internal reorganizations (PR #781, PR #810, PR #813, PR #822, PR #830, PR #834, PR #846, PR #856, PR #857, PR #868, PR #908, PR #914, PR #952)
- Adds a test service to connect to a Redis database for the BasicReaderWriter service (PR #780)
- Adds JSON format saving of metadata for protections/restorations. This format is not used yet but will eventually replace the XML format (PR #779, PR #865).
- Created two classes VariableIOReaderMng and VariableIOWriterMng to manage the input/output part of VariableMng (PR #777).
- Adds method JSON::value() to return an String (PR #778)
- Adds a new test module for materials (MaterialHeatModule). This module allows better testing of material cell addition and removal methods (PR #788, PR #790, PR #824, PR #848).
- Improves the usage of IProfilingService (PR #791)
- Integrates Alien sources into the same repository as Arcane (the framework repository) (PR #798, PR #812, PR #816, PR #817, PR #819, PR #820, PR #883, PR #890, PR #891, PR #892).
- Integrates the Neo mesh manager into the repository (PR #802, PR #805, PR #807, PR #808, PR #814, PR #815, PR #854, PR #881, PR #882, PR #888).
- Separates the IIncrementalItemConnectivity interface into two interfaces, IIncrementalItemSourceConnectivity and IIncrementalItemTargetConnectivity, to allow for connectivities that do not have targets (PR #846).
- Adds tests for version 3 of FaceUniqueidBuilder (PR #850)
- Starts MacOS porting (PR #884, PR #885)
- Optimizes EnsightGold output when the number of cell types is very large (polyhedral meshes) (PR #911).
- Adds internal API to Arcane for ICartesianMesh (PR #943).
- Creates the MeshHandle for additional meshes before calling the Build entry points (PR #947).
- Uses std::atomic_ref instead of std::atomic for accelerator reduction management (PR #1352)
Continuous Integration (CI) and Compilation
- Adds example compilation in CI (PR #809).
- Updates docker images in CI (PR #818)
- For Arccore, compiles with the Z7 option under Windows and adds debug symbols. The Z7 option allows the use of the ccache tool (PR #821)
- Uses 'GitHub actions' to simplify CI. This allows for composable high-level actions rather than duplicating code in every workflow (PR #849).
- Uses a docker image for CI with 'Circle-CI' and adds an execution for ARM64 platforms (PR #887).
- Adds CMake variable ARCANEFRAMEWORK_BUILD_COMPONENTS allowing specification of components to compile. This variable is a list that can contain Arcane and Alien. By default, both components are compiled (PR #877)
- Deletes artifacts after retrieval to save disk space (PR #915).
- Removes default activation of the CMake variable ARCANE_ADD_RPATH_TO_LIBS. This variable is obsolete and will be removed later (PR #919).
- Removes the test output directory in CI to save disk space (PR #924).
Arccore
Axlstar
- Improves support for old versions of Doxygen (PR #823).
Arcane Version 3.10.11 (June 30, 2023)
Starting with version 3.10, internal connectivity management modifications are planned to reduce memory consumption for Cartesian or structured meshes. The page Entity Connectivity Optimizations describes the planned evolutions and potential modifications required in Arcane user codes.
Deprecated Elements
New Features/Improvements
- Creation of a SmallArray class to manage small-sized arrays with stack-allocated memory (PR #615, PR #732).
- Adds the possibility in the Aleph PETSc implementation to pass arguments that will be used to initialize PETSc via the call to PetscInitialize() (PR #621).
- Adds a post-processing writer in VTK HDF V2 format. This format allows multiple post-processing runs to be placed in the same HDF5 file (PR #637, PR #638, PR #639).
- Improves memory management of connectivities during mesh creation. Arrays are pre-allocated to avoid successive copies when adding entities one by one (PR #689, PR #763).
- Adds method MDSpan::slice() to return a view on a sub-part of the initial view (PR #690).
- Possibility to dynamically calculate the output directory name in SimpleTableWriterHelper (PR #607).
- Adds SHA3 hash calculation functions (PR #695, PR #697, PR #705).
- Adds ItemGenericInfoListView class to make generic entity information accessible on the accelerator (such as Item::owner(), Item::uniqueId(), ...) (PR #727).
- Optimizes ItemGroup::applyOperation() to avoid going through sub-groups and to directly use the base group if all entities are of the same type. This mechanism is not active by default. The environment variable ARCANE_APPLYOPERATION_VERSION must be set to 2 to use it (PR #728).
- Adds operators -=, *= and /= for views (via DataSetter) {PR #733).
- Adds Vector3 class to generalize Real3 for other types (PR #750).
- Adds events for IMesh to be notified of calls to IMesh::prepareForDump() PR #771.
Accelerator API
- Support for memory copies with indexing on the accelerator (PR #617, PR #625, PR #658, PR #773)
- Partial integration of CUPTI (CUDA Profiling Tools Interface) allowing automatic retrieval of profiling information on NVIDIA cards. For example, this allows retrieving information on memory transfers between the CPU and the GPU (PR #627, PR #632, PR #642).
- CUDA support for tracing managed memory allocations/deallocations and for allocating multiple page-sized blocks (PR #641, PR #672, PR #685, PR #693).
- Support for synchronizations with MPI's 'Accelerator Aware' mode. This allows synchronizations without memory copying between the CPU and the accelerator. This mechanism is also available in shared memory message exchange mode and hybrid mode (PR #631, PR #644, PR #645, PR #646, PR #654, PR #661, PR #680, PR #681, PR #765).
- Accelerator support to determine if a given memory address is accessible on the accelerator, on the CPU, or both. Also adds two macros ARCANE_CHECK_ACCESSIBLE_POINTER() and ARCANE_CHECK_ACCESSIBLE_POINTER_ALWAYS() to verify that a memory region is to be used in a RunQueue (PR #660).
- Accelerator support to specify information about variable memory allocation (IVariable::setAllocationInfo()). This allows, for example, indicating whether a variable will be accessed on the accelerator or on the CPU (PR #684).
- Adds method MeshUtils::markMeshConnectivitiesAsMostlyReadOnly() to indicate that the variables managing connectivity will not be frequently modified. This allows optimizing memory management between the accelerator and CPU to avoid copies. By default, entity groups (ItemGroup) use this attribute (PR #691, PR #714).
- Makes information stored in AllEnvCell accessible on the accelerator (PR #742).
- Adds views based on Span to the accelerator API. This allows having views on containers other than those of Arcane (for example std::vector) as soon as the data is contiguous in memory (PR #770).
- Allows copying NumArray from different memory regions (PR #651).
- Support for the new interface IMemoryAllocator3 in accelerator allocators (PR #671, PR #674).
Changes
- Allows copying an instance of Runner using reference semantics (PR #623).
- On the accelerator, a specific kernel is used by default across the entire grid for reductions. Previously, a kernel was used that mixed atomic operations and calculation on blocks (PR #640).
- Uses accelerator memory for reduction operations. Previously, managed memory was used (PR #643, PR #683).
- Changes the node numbering of hexagonal cells for HoneyCombMeshGenerator (PR #657).
- Groups the functions of mesh_utils and meshvisitor into the MeshUtils namespace (PR #725).
- Moves internal Arcane methods from IMesh and IItemFamily into an internal interface (PR #726, PR #738, PR #752, PR #768).
- In bit-by-bit comparisons, differences are not considered if both values being compared are NaN.
- Adds display of time spent in MPI initialization and accelerator runtime (PR #760).
- Automatically calls ICartesianMesh::computeDirections() after a call to IMesh::prepareForDump(). This ensures that Cartesian information is consistent after potential compaction (PR #772).
Corrections
- Correctly handles the destruction of StandaloneSubDomain singleton instances. Previously, the instance was destroyed in global destructors after main() finished, which could cause problems in some cases (PR #619).
- Corrects errors in the copy constructor of NumArray (PR #717).
- In FloatingPointExceptionSentry, the exception handling flag is set unconditionally. Previously, it was tested whether exceptions were active, and if not, nothing was done. Since this detection mechanism is not always reliable, it is removed (PR #720).
- Saves the mesh modification timestamp (IMesh::timestamp()) and the need-compact attribute in protections to ensure the same behavior with or without restoration. Notably, need-compact was always set to true during restoration, causing compaction to always occur at least once after restoration. Since the entities were compacted, this did not change the results, but it could cause reallocations that invalidated calculated structures such as Cartesian mesh information (PR #739, PR #756)
- Corrects the use of MeshReaderMng::setUseMeshUnit() which was not taken into account when the data set language is French (PR #754).
- Removes unnecessary reallocation in AbstractArray when the new capacity is identical to the old one (commit cac7fae3c471f6).
Internal
- Starting support for dynamically creating services containing data set options (PR #613).
- Removes use of ISubDomain in certain parts (PR #620).
- Adds function to retrieve command line arguments (PR #624).
- Removes coverity warnings (PR #626, PR #692).
- Makes certain methods of Materials::IMeshComponent const (PR #630).
- Various improvements to accelerator management (PR #647).
- Corrects compilation with PAPI 7.0 and PETSc 3.19 (PR #648).
- Adds a field of type Int32 in different classes managing connectivities to handle an offset on the localId(). Currently, this is not used and the offset is always 0 (PR #649, PR #712, PR #723, PR #736, PR #737, PR #744)
- Support for using a specific parallel driver to run tests (PR #663).
- Replaces the use of ENUMERATE_* to access connectivities with for-range (PR #666, PR #759).
- Adds a specific interface to create Cartesian meshes. This will eventually allow specialized methods for these meshes to be provided so that generation is faster and directly uses the correct numbering (PR #694, PR #749, PR #751).
- Adds typedefs in MDSpan to retrieve the type of the element and the Layout (PR #699).
- Adds support for using common hashes in BasicReaderWriter, which can be used for bit-by-bit comparisons and generalizes the mechanism for accessing this hash base (PR #698, PR #700, PR #701).
- Adds adapter for the Redis database {PR #702).
- Internal refactoring of the synchronization mechanism to make it independent of the data type (PR #704, PR #708, PR #709, PR #711)
- Uses a single buffer for multiple variable synchronization instead of going through serialization (PR #710).
- Adds MeshKind class to manage properties on the mesh structure (Cartesian, unstructured, AMR, ...) (PR #718).
- Adds a specific macro for obsolete methods, which will not be immediately removed, in order to disable compilation warnings for these methods. This allows user code to suppress compilation warnings for these methods if the macro ARCANE_NO_DEPRECATED_LONG_TERM is defined during compilation (PR #722).
- Adds the possibility to display the CPU affinity of all ranks (PR #729).
- For VTK HDF formats, adds information on the Item::uniqueId() of nodes and cells (PR #741).
- Improves continuous integration to avoid running tests if only certain files are modified (for example, only .md) and adds date and license verification (PR #743, PR #745).
- Makes the methods of ItemInternalConnectivityList internal to Arcane and simplifies class management by grouping connectivity information into a substructure (PR #640).
- Moves the ItemGroupImplPrivate class into its own file (PR #730).
- Makes the function Arcane::arcaneCheckAt() constexpr (PR #746).
Arccore (2.5.0)
- Propagates the source allocator in the constructor and copy constructor of UniqueArray and UniqueArray2 (PR #635, PR #656).
- Uses Span instead of ConstArrayView for certain arguments to allow views whose size exceeds 2Go (PR #635).
- Avoids the construction of default elements that will subsequently be overwritten in AbstractArray::_resizeAndCopyView(). This also allows this method to be used with data types that do not have a default constructor (PR #635).
- No longer performs minimal allocation even if an allocator other than the default allocator is used. Previously, at least 4 elements were always allocated (PR #635).
- Corrects unnecessary double allocation in Array::operator=() if the two arrays do not have the same allocator (PR #655).
- Allows displaying the exception message in the Exception constructor. This is useful for debugging exceptions outside of try{ ... } catch or exceptions that throw other exceptions (PR #659).
- Adds IMemoryAllocator3 interface which enriches IMemoryAllocator to pass more information to the allocator. This allows, for example, adding the allocated size or the array name (PR #662, PR #673, PR #677, PR #713, PR #719).
- Adds Int8 and BFloat16 types to Arccore::eBasicDataType (PR #669)
- Adds various conversion functions between Span and std::array. Also adds the subPart and subPartInterval methods common to ArrayView, ConstArrayView and Span (PR #670).
- Removes coverity warnings (PR #675).
- Support for naming Array arrays. This is used in IMemoryAllocator3 to display allocation information (PR #676, PR #682).
- Moves operators such as '==', '!=', '<<' and '<' into the corresponding classes as a friend function (PR #703).
- Deprecates the methods ArrayView::range(), Span::range() and AbstractArray::range(). These methods generate temporary objects, which can cause problems when used in for-range loops. You can directly use the begin() or end() methods instead (PR #757).
Axlstar (2.2.0)
- Adds, for experimentation, the possibility of specifying multiple types (caseoption, subdomain, ...) for services (PR #715).
Arcane Version 3.9.5 (April 4, 2023)
New Features/Improvements
Changes
Fixes
- Fixes data set group retrieval in the case of multiple meshes. It always took the default mesh to search for groups even if the option was associated with another mesh (PR #604).
- Fixes incorrect search bar dimension in the documentation in certain cases (PR #597).
- Fixes incorrect usage of the initial partitioner when multiple meshes are present in the data set. The partitioner only defined variables on the first mesh, which introduced inconsistencies (PR #592).
- Fixes incorrect detection of Cartesian connectivities in the Y direction in 3D (PR #590).
- Fixes parallel blocking in the VTK reader if there are only connectivities in the mesh (PR #589).
- Fixes incorrect mesh type when using sub-meshes ranging from a 2D mesh to a 1D mesh (PR #587).
- Fixes possible ambiguity when constructing classes derived from Arcane::Item (PR #579).
Internal
Arccore (version 2.2.0)
Arcane Version 3.8.15 (February 22, 2023)
New Features/Improvements
- Support for specifying default values of Arcane::ParallelLoopOptions on the command line in multi-thread mode (PR #420).
- Support for Lima files, MED files, and msh format files with mesh services (PR #435, PR #439, PR #449).
- Adds Arcane::NumArrayUtils::readFromText() function to fill an Arcane::NumArray instance from an ASCII file (PR #444).
- Support for reading parallel data from MED format files (PR #449).
- Support for reading node groups (Arcane::NodeGroup) in MSH format meshes (PR #475).
- Support for renumbering 3D AMR meshes. This allows the same 3D numbering regardless of the decomposition (PR #495, PR #514, PR #523).
- Adds access to Arcane::IMeshMng in Arcane::ICaseMng and Arcane::IPhysicalUnitSystem (PR #461).
- Accelerator support for classes managing Cartesian meshes (Arcane::CellDirectionMng, Arcane::FaceDirectionMng, and Arcane::NodeDirectionMng) (PR #474)
- Adds Arcane::impl::MutableItemBase class to replace the use of Arcane::ItemInternal (PR #499).
- Adds the possibility to index components of Arcane::Real2, Arcane::Real3, Arcane::Real2x2, and Arcane::Real3x3 using the operator() (PR #485).
- Preliminary developments for multi-dimensional mesh variables (PR #459, PR #463, PR #464, PR #466, PR #471).
- Adds Arcane::IDoFFamily interface to manage Arcane::DoF. Previously, the Arcane::mesh::DoFFamily implementation had to be used directly (PR #480)
- Support in Aleph for variables that do not have default families (such as Arcane::DoF) (PR #468).
- Support for compressing Arcane::IData data via an instance of Arcane::IDataCompressor. This mechanism is available for materials by calling the method Arcane::Materials::IMeshMaterialMng::setDataCompressorServiceName(). It is used when calling Arcane::Materials::IMeshMaterialMng::forceRecompute() or using the Arcane::Materials::MeshMaterialBackup class (PR #531, PR #532).
- Support for multiple meshes in data set options (PR #453, PR #548).
- Adds Arcane::MeshHandleOrMesh class to facilitate the transition between Arcane::IMesh and Arcane::MeshHandle during initialization (PR #549).
Changes
- Always uses a class instead of an integer to specify dimensions (extents) in the Arcane::NumArray and Arcane::MDSpan classes. This allows getting closer to the implementation planned in the C++23 standard and having static (compile-time known) dimensions (PR #419, PR #425, PR #428).
- Removes timers that use CPU time instead of elapsed time. The Arcane::Timer::TimerVirtual type still exists but now behaves like the Arcane::Timer::TimerReal type (PR #421).
- Removes the template parameter with the array rank in the Arcane::DefaultLayout, Arcane::RightLayout, and Arcane::LefLayout classes (PR #436).
- Deprecates methods in Arcane::ModuleBuildInfo that use Arcane::IMesh. Methods that use Arcane::MeshHandle must be used instead. (PR #460).
- Changes the return type of Arcane::IMeshBase::handle() so that it does not return a reference but a value (PR #489).
- Uses specific base classes by service type when generating axl files (PR #472).
- Uses a new class Arcane::ItemConnectedListView (instead of Arcane::ItemVectorView) to manage connectivities on entities. Methods such as Arcane::Cell::nodes() now return an object of this type. The purpose of this new class is to be able to propose a data structure specific to connectivities and another specific to entity lists (such as Arcane::ItemGroup groups). Conversion operators have been added to ensure compatibility with existing source code (PR #534,PR #535, PR #537, PR #539)
- New VTK HDF format dump service. This format is only supported by Paraview versions 5.11+. The current implementation is experimental (PR #510, PR #525, PR #527, PR #528 PR #554, PR #546).
- Moves header files of the arcane_core component, which were in the root of arcane, to a subdirectory arcane/core. To remain compatible with existing header files referencing these new files, they are generated during installation.
- Adds an arcane_hdf5 component containing utility classes (such as Arcane::Hdf5::HFile, ...). The corresponding header files are now in the arcane/hdf5 directory (PR #505).
- Cleanup of HDF5 managing classes: deprecates the copy constructor of classes in Hdf5Utils.h and removes support for HDF5 versions older than 1.10 (PR #526).
- Allows the creation of null instances of Arcane::ItemGroup before the initialization of Arcane. This allows, for example, having global Arcane::ItemGroup variables or derived classes (PR #544).
- Modifies the behavior of the ENUMERATE_COMPONENTITEM macro to use a type instead of a character string in the enumerator name. This allows it to be used with a template parameter (PR #540).
Fixes
Internal
- Removes obsolete internal classes Arcane::IAllocator, Arcane::DefaultAllocator, Arcane::DataVector1D, Arcane::DataVectorCommond1D, and Arcane::Dictionary. These classes have not been used for a long time (PR #422).
- Adds Arcane::TestLogger class to compare test results against a reference listing file (PR #418).
- Adds the possibility to keep instances of Arcane::ItemSharedInfo' in Arcane::ItemInternalConnectivityList'. This will allow removing an indirection when accessing connectivities. This option is currently only used in testing (PR #371)
- Adds support for calling Arccore::MessagePassing::mpLegacyProbe() for the different available message exchange modes (PR #431)
- Refactoring of Arcane::NumArray, Arcane::MDSpan, Arcane::ArrayExtents, and Arcane::ArrayBounds classes to unify the code and support both static and dynamic dimensions. The page Usage of the NumArray class explains the use of these classes (PR #426, PR #428, PR #433, PR #437, PR #440).
- By default, uses Version 2 of synchronizations with MPI. This version is the same as version 1 used previously but without support for derived types (PR #434).
- [accelerator] Unifies the launching of calculation kernels created by the macros RUNCOMMAND_LOOP and RUNCOMMAND_ENUMERATE (PR #438).
- Unifies the profiling API between commands (Arcane::Accelerator::RunCommand) and classic enumerators (via Arcane::IItemEnumeratorTracer). At the end of the calculation, the display is sorted by decreasing time spent in each loop (PR #442, PR #443).
- Starts development of the Arcane::NumVector and Arcane::NumMatrix classes to generalize the Arcane::Real2, Arcane::Real3, Arcane::Real2x2, and Arcane::Real3x3 types. These classes are currently for internal use of Arcane (PR #441).
- Various optimizations in internal classes managing connectivities and iterators to reduce their size (PR #479, PR #482, PR #483, PR #484)
- Removes the use of Arcane::ItemInternalList in Arcane::ItemVector and Arcane::ItemVectorView (PR #486, PR #487).
- Removes the use of Arcane::ItemInternalVectorView (PR #498)
- Removes the use of Arcane::ItemInternal in many internal classes (PR #488, PR #492, PR #500, PR #501, PR #502)
- Removes additional indexers in Arcane::MDSpan and Arcane::NumArray for the Arcane::Real2, Arcane::Real3, Arcane::Real2x2, and Arcane::Real3x3 classes. These indexers were added for testing purposes but were not used (PR #490).
- Allows copying instances of Arcane::StandaloneAcceleratorMng and uses a reference semantics (PR #509).
- Allows instances of Arcane::NumVector and Arcane::NumMatrix with arbitrary values (previously only values 2 or 3 were allowed) (PR #521)
- Moves the implementation of Aleph-related classes to source files instead of header files (PR #504).
- Provides an empty implementation for methods using Arcane::IMultiArray2Data. This interface is no longer used, and this will allow user code to remove visitors associated with this type (PR #529).
Arccore
Axlstar
- Add support for using a specific mesh in service instance (PR #451)
- Remove support to build with mono (PR #465).
- Remove support for 'DualNode' and 'Link' items (PR #524).
- Various improvements in documentation (PR #530).
- Add preliminary support for multi-dimension variables (PR #520).
- Fix: Add support of Doxygen commands in AXL descriptions (PR #538)
- Fix: error with complex options containing more than 30 suboptions (PR #533)
Arcane Version 3.7.23 (November 17, 2022)
New Features/Improvements:
- Complete refactoring of the documentation to make it more consistent and visually appealing (PR #378, PR #380, PR #382, PR #384, PR #388, PR #390, PR #393, PR #396)
- Adds a CSV format output management service (see Service SimpleCsvOutput) (PR #277, PR #362)
- Adds the possibility to specify the keyword Auto for the CMake variable ARCANE_DEFAULT_PARTITIONER. This allows automatically choosing the partitioner used during configuration based on those available (PR #279).
- Adds implementation of synchronizations that use the MPI_Neighbor_alltoallv function (PR #281).
- Reduction of memory footprint used for connectivity management following various internal changes.
- Optimizations during initialization (PR #302):
- Uses std::unordered_set instead of std::set for checking uniqueId() duplication.
- When creating a mesh, non-duplication of uniqueId() is only checked in check mode.
- Creates an Arcane::ItemInfoListView class to eventually replace Arcane::ItemInternalList and access entity information from their localId() (PR #305).
- [accelerator] Adds support for atomic Min/Max/Sum reductions for Int32, Int64, and double types (PR #353).
- [accelerator] Adds a new reduction algorithm without going through atomic operations. This algorithm is not used by default. It must be activated by calling Arcane::Accelerator::Runner::setDeviceReducePolicy() (PR #365, PR #379)
- [accelerator] Adds the possibility to change the number of threads per block when launching a command via Arcane::Accelerator::RunCommand::addNbThreadPerBlock() (PR #374)
- [accelerator] Adds support for pre-loading (prefetching) advice for memory zones (PR #381)
- [accelerator] Adds support for retrieving information about available accelerators and associating an accelerator with an instance of Arcane::Accelerator::Runner (PR #399).
- Start of development to be able to view an array variable on entities as a multi-dimensional variable (PR #335).
- Adds an Arcane::MeshHandle::onDestroyObservable() observable to be notified upon destruction of an Arcane::IMesh instance (PR #336).
- Adds the Arcane::mesh_utils::dumpSynchronizerTopologyJSON() method to save the communication topology for synchronizations in JSON format (PR #360).
- Adds the Arcane::ICartesianMesh::refinePatch3D() method to refine a 3D mesh into several AMR patches (PR #386).
- Adds implementation of reading hardware counters via the Linux perf API (PR #391).
- Adds support for automatically profiling commands launched via RUNCOMMAND_ENUMERATE (PR #392, PR #394, PR #395)
Changes:
- Modifies the classes associated with Arcane::NumArray (Arcane::MDSpan, Arcane::ArrayBounds, ...) so that the template parameter managing the rank is a class and not an integer. The ultimate goal is to have the same template parameters as the std::mdspan and std::mdarray classes planned for the C++ 2023 and 2026 standards. Dimensions must now be replaced by the keywords Arcane::MDDim1, Arcane::MDDim2, Arcane::MDDim3, or Arcane::MDDim4 (PR #333)
- The Arcane::NumArray::resize() method no longer calls the default constructor for array elements. This was already the case for simple types (Arcane::Real, Arcane::Real3, ...) but now it is also the case for user types. This allows this method to be called when memory is allocated on the accelerator.
- Adds Arcane::ItemTypeId class to manage the entity type (PR #294)
- The entity type is now stored as an Arcane::Int16 instead of an Arcane::Int32 (PR #294)
- Removes obsolete methods from Arcane::ItemVector, MathUtils.h, Arcane::IApplication, Arcane::Properties, and Arcane::IItemFamily (PR #304).
- Refactoring of classes managing entity enumeration (PR #308, PR #364, PR #366).
- Refactoring of the configuration file ArcaneConfig.cmake generated (PR #318):
- No longer exports external packages by default in ArcaneTargets.cmake. The ArcaneConfig.cmake file now calls the CMake command find_dependency. The CMake variable FRAMEWORK_NO_EXPORT_PACKAGES is therefore no longer used by default.
- Adds the variable ARCANE_USE_CONFIGURATION_PATH to ArcaneConfig.cmake to allow loading package paths from Arcane configuration. This variable is set to TRUE by default.
- Modifies the prototype of certain methods in classes implementing Arcane::IItemFamily to use Arcane::Item instead of Arcane::ItemInternal (PR #311)
- Creates an Arcane::ItemFlags class to manage flags concerning object properties that were previously in Arcane::ItemInternal (PR #312)
- Deprecates the operator-> for the Arcane::Item class and derived classes (PR #313)
- Changes the default value of face numbering in the Cartesian generation service to use Cartesian numbering (PR #315)
- Modification of the signature of the methods in Arcane::IItemFamilyModifier and Arcane::mesh::OneMeshItemAdder to use Arcane::ItemTypeId instead of Arcane::ItemTypeInfo and Arcane::Item instead of Arcane::ItemInternal (PR #322)
- Removes Arcane::Item::activeFaces() and Arcane::Item::activeEdges() methods which are no longer used (PR #351).
- [C#] Adds the possibility at the end of calculation to destroy instances of different managers, even when .Net support is not enabled. Previously, these managers were never destroyed to prevent potential crashes when the .Net environment's 'garbage collector' triggers. This destruction can be enabled by setting the environment variable ARCANE_DOTNET_USE_LEGACY_DESTROY to the value 0. This is not active by default because there may still be issues with certain user services (PR #337).
- [configuration] It is now necessary to use at least CMake version 3.21 to compile or use Arcane (PR #367).
- Adds a move constructor (std::move) for Arcane::NumArray (PR #372).
- [accelerator] Removes obsolete methods for creating Arcane::Accelerator::RunQueue and Arcane::Accelerator::Runner (PR #397).
- Deprecates the Arcane::AtomicInt32 class. The std::atomic<Int32> class must be used instead (PR #408).
Fixes:
- Fixes bug when reading information with the BasicReaderwriter service when compression is active (PR #299)
- Fixes bug introduced in version 3.6 that changed the output directory name for bit-by-bit comparisons with the ArcaneCeaVerifier service (PR #300).
- Fixes incorrect recalculation of the maximum number of entities connected to an entity in the case of particles (PR #301)
Internal:
- Simplifies the implementation of synchronizations providing a data-type-independent mechanism (PR #282).
- Uses variables to manage certain data on entities such as Arcane::Item::owner(), Arcane::Item::itemTypeId(). This will eventually allow this information to be accessed on accelerators (PR #284, PR #285, PR #292, PR #295)
- Adds an Arcane::ItemBase class serving as a base class for Arcane::Item and Arcane::ItemInternal (PR #298, PR #363).
- Removes an indirection when accessing connectivity information from an entity (for example Arcane::Cell::node()) (PR #298).
- Simplifies the management of common information for entities in a family so that there is now only one common instance of Arcane::ItemSharedInfo (PR #290, PR #292, PR #297).
- Removes certain uses of Arcane::ISubDomain (PR #327)
- Optimizes the structures managing the Cartesian mesh so that instances of Arcane::ItemInternal* no longer need to be stored. This reduces memory consumption and potentially improves performance (PR #345).
- Uses views instead of Arccore::SharedArray for classes managing Cartesian directions (Arcane::CellDirectionMng, Arcane::FaceDirectionMng, and Arcane::NodeDirectionMng) (PR #347).
- Uses a reference counter to manage Arccore::Ref<Arcane::ICaseFunction> (PR #329, PR #356).
- Adds a constructor for the Arcane::Item class and its derived classes from a localId() and an Arcane::ItemSharedInfo (PR #357).
- Updates C# project references to use the latest package versions (PR #359).
- Cleanup of Arcane::Real2, Arcane::Real3, Arcane::Real2x2, and Arcane::Real3x3 classes and adds constructors from an Arcane::Real (PR #370, PR #373).
- Partial refactoring of concurrency management to pool certain functionalities (PR #389).
- Uses an Arccore::UniqueArray for the container of Arcane::ListImplT. Previously, the container was a simple C array (PR #407).
- In Arcane::ItemGroupImpl, uses Arcane::AutoRefT to keep references to sub-groups instead of a simple pointer. This ensures that the sub-groups will not be destroyed as long as the associated parent exists.
- Fixes various warnings reported by coverity (PR #402, PR #403, PR #405, PR #409, PR #410 )
- [C#] Indicates that at least language version 8.0 is required.
Arccon:
Uses version 1.5.0:
- Add CMake functions to unify handling of packages arccon Arccon componentbuildBuild configuration (PR #342).
Arccore:
Uses version 2.0.12.0:
- Remove some coverity warnings (PR #400)
- Use a reference counter for IMessagePassingMng (PR #400)
- Fix method asBytes() with non-const types (PR #400)
- Add a method in AbstractArray to resize without initializing (PR #400)
- Make class ThreadPrivateStorage deprecated (PR #400)
Arcane Version 3.6.13 (July 06, 2022)
New Features/Improvements:
- Addition of an Arcane::IRandomNumberGenerator interface for a random number generation service (PR #266)
- Adds support for material variables in axl files for the C# generator (PR #273)
- Removes node connectivity allocation in old connectivities. This reduces the memory footprint (PR #231).
- Adds to the classes Arccore::Span, Arccore::ArrayView, Arccore::ConstArrayView, as well as views on variables, the ' operator()' which behaves like the 'operator[]'. This allows uniform writing across different containers and associated views (PR #223, PR #222, PR #205).
- Adds information about the origin and dimension of the Cartesian mesh to Arcane::ICartesianMeshGenerationInfo (PR #221).
- Adds collective statistics at runtime on the time spent in message exchange operations. These statistics include the minimum, maximum, and average time for all ranges passed in these calls (PR #220)
- Adds two additional implementations for material synchronization. Version 7 allows for a single allocation during this synchronization, and version 8 allows this allocation to be maintained from one synchronization to the next (PR #219).
- Adds implementation of multi-phase synchronizations, allowing the use of fixed-size arrays and/or processing a subset of neighbors (PR #214).
- Adds access for accelerators to certain Arcane::MDSpan methods (PR #217).
- Adds access to edge connectivities in Arcane::UnstructuredMeshConnectivityView (PR #216)
- Adds an interface accessible via 'Arcane::IMesh::indexedConnectivityMng()' that allows for easily adding new connectivities (PR #201).
- Adds a new algorithm for calculating the uniqueId() of edges (Edge) for Cartesian meshes
- Adds support for Arccore classes for the operator operator[] with multiple arguments (PR #241).
- Makes calls to Arcane::Accelerator::makeQueue() thread-safe by calling the method Arcane::Accelerator::Runner::setConcurrentQueueCreation() (PR #242)
Changes:
- The classes managing materials are split into two components. One part is now in the arcane_core component. This change is normally transparent to Arcane users and requires no modification of the sources (PR #264,PR #270,PR #274)
- References are compacted after calling Arcane::IItemFamily::compactItems(). This prevents the array containing internal entity information from unnecessarily growing. Since this change can introduce a difference in the order of certain operations, it is possible to disable it by setting the environment variable ARCANE_USE_LEGACY_COMPACT_ITEMS to the value 1 (PR #225).
- The types managing the localId() associated with entities (Arcane::NodeLocalId, Arcane::CellLocalId, ...) are now typedefs of a template class Arcane::ItemLocalIdT.
- The different overloads in the variable access operators (operator[]) are removed. You must now use an 'Arcane::ItemLocalIdT' as the indexer. Conversion operators to this type have been added to keep the source code compatible.
- Variables that were still allocated when calling Arcane::IVariableMng::removeAllVariables() are automatically unregistered. This prevents crashes when references to variables still existed after this call. This can notably happen with C# extensions because the associated services and modules are managed by a 'Garbage Collector' (PR #200).
- The use of Arcane::Timer::TimerVirtual is deprecated. Timers that use this property behave as if they had the Arcane::Timer::TimerReal attribute.
Corrections:
Internal:
Axlstar version 2.0.3.0 update:
Arccore version 2.0.11.0 update:
- Adds function mpDelete() to destroy IMessagePassingMng instances (PR #258)
- Optimizations in class String(PR #256,PR #247)
- Add move constructor String(String&&) and move copy operator operator=(String&&)
- Make String destructor inline
- Make method String::utf16() deprecated (replaced by StringUtils::asUtf16BE())
- Methods String::bytes() and String::format no longer throws exceptions
- Add a namespace StringUtils to contain utilitarian functions.
- Add support for multisubscript operator[] from C++23 (PR #241)
- Add operator() to access values of ArrayView, ArrayView2, ArrayView3, ArrayView4, Span, Span2 and const versions of these views (PR #223).
- Add SmallSpan2 implementation for 2D arrays whose size_type is an Int32 (PR #223).
- Add SpanImpl::findFirst() method (PR #211)
- Fix build on Ubuntu 22.04
Arcane Version 3.5.7 (April 7, 2022)
New Features/Improvements:
- Adds class Arcane::SimdReal3x3 and Arcane::SimdReal2x2, which are the vector equivalents of Arcane::Real3x3 and Arcane::Real2x2
- Support for version 4.2 of VTK format mesh files
- Adds a new synchronization implementation that uses the MPI_Sendrecv call.
- Adds the possibility of using collective messages (MPI_AllToAllv) instead of point-to-point messages when exchanging entities following a load balance. This mechanism is temporarily accessible by specifying the environment variable ARCANE_MESH_EXCHANGE_USE_COLLECTIVE (PR #138,PR #154).
- In bit-by-bit comparison, adds the possibility of only performing the comparison at the end of execution instead of doing it at every time step. This is done by specifying the environment variable STDENV_VERIF_ONLY_AT_EXIT.
- Adds a 3D honeycomb mesh generator (PR #149).
- Adds support for specifying the element layout in the Arcane::NumArray class. Two layouts are currently implemented: LeftLayout and RightLayout (PR #151)
- Adds method Arcane::Accelerator::RunQueue::copyMemory() to perform asynchronous memory copies (PR #152).
- Improves ROCM/HIP support. AMD GPU support is now functionally equivalent to NVIDIA GPU support via Cuda (PR #158, PR #159).
- Adds support for pinned memory (Host Pinned Memory) for CUDA and ROCM (PR #147).
- Adds class 'Arcane::Accelerator::RunQueueEvent' to support events on 'Arcane::Accelerator::RunQueue' and thus allow synchronization between different queues (PR #161).
Changes:
- Removes the more used macros ARCANE_PROXY and ARCANE_TRACE (PR #145)
Corrections:
- Fixes incorrect detection of OneTBB version 2021.5 following the removal of the 'tbb_thread.h' file (PR #146)
- Fixes certain missing Cartesian information when there is only one cell layer in Y or Z (PR #162).
- Fixes missing implementation of 'Arccore::Span<T>::operator==' when the type T is not constant (PR #163).
- Removes some overly numerous listing messages.
Internal:
Arcane Version 3.4.5 (February 10, 2022)
New Features/Improvements:
- In the accelerator API, Arcane::NumArray now supports directly allocating memory on the accelerator. Previously, only unified memory was available. The enumeration Arcane::eMemoryRessource and the type Arcane::IMemoryRessourceMng allow this to be managed (PR #111, PR #113).
- Minor improvements to documentation (PR #117):
- Added relative paths for header files.
- Added classes and types from Arccore
- Adds a new method for calculating the uniqueId() of faces in the Cartesian case. This new method allows for a Cartesian numbering of faces that is consistent with those of nodes and cells. To use it, you must specify the option <face-numbering-version>4</face-numbering-version> in the data set within the mesh generator tag (PR #104).
- Adds an option in the Arcane post-processor to suppress dump output at the end of the calculation.
- Adds implementation of Arcane::IParallelMng::gather() and Arcane::IParallelMng::gatherVariable() for shared memory mode and hybrid mode
- Adds the list of environment in which the material is present to Arcane::Materials::MeshMaterialInfo
- Supports compilation with the NVIDIA HPC SDK.
- Supports (partially) deallocating the mesh (Arcane::IPrimaryMesh::deallocate()), which allows it to be reallocated later.
- Adds a 2D honeycomb mesh generator.
Changes:
- Adds the 'Arcane::' namespace to the CMake targets provided by Arcane. For example, the 'arcane_core' target becomes 'Arcane::arcane_core'. Old names remain valid (PR #120).
- Deprecates the conversion of Arcane::ItemEnumerator to Arcane::ItemEnumeratorT. This prevents accidentally indexing a mesh variable with an enumerator of the wrong type (for example, indexing a variable in cells with a node enumerator).
Corrections:
- Fixes the 'operator=' for the 'Arcane::CellDirectionMng' class (PR #109)
- Fixes unnecessary Int64 to Int32 conversion in the construction of Cartesian meshes, which prevented exceeding 2^31 cells (PR #98)
- Fixes incorrect calculation of time spent in synchronizations. Only the time of the last wait was used instead of the cumulative time (commit cf2cade961)
- Fixes name collision for the 'MessagePassingService' option on the command line (commit 15670db4)
Internal:
- Cleanup of the Accelerator API
Arccore version 2.0.8.1 update:
- Improve doxygen documentation for types and classes in message_passing component.
- Add functions in message_passing component to handle non blocking collectives (PR #116, PR #118)
- Add some '#defines' to compile with hipSYCL.
- Update '_clang-format' file for version 13 of LLVM/Clang.
Arcane Version 3.3.0 (December 16, 2021)
New Features/Improvements:
Changes:
Corrections:
Internal:
- Cleanup of synchronization message management
- Begins accelerator support for ROCM/HIP (AMD) version
- Support for glibc version 2.34, which no longer contains memory management 'hooks' (this mechanism has been obsolete for years).
- Adds the possibility of compiling with the C++20 standard.
Arccore version 2.0.6.0 update:
- Update Array views (PR #76)
- Separate metadata from data in 'Arccore::AbstractArray' (PR #72)
- Deprecate Arccore::Array::clone(), Arccore::Array2::clone() and make Arccore::Array2 constructors protected (PR #71)
- Add support for compilation with AMD ROCM HIP (e5d008b1b79b59)
- Add method Arccore::ITraceMng::fatalMessage() to throw an Arccore::FatalErrorException in a method marked [[noreturn]]
- Add support to compile with C++20 with ARCCORE_CXX_STANDARD optional CMake variable (665292fce)
- [INTERNAL] Add support to change return type of IMpiProfiling methods. These methods should return int instead of void
- [INTERNAL] Add methods in MpiAdapter to send and receive messages without gathering statistics
- [INTERNAL] Add methods in MpiAdapter to disable checking of requests. These checks are disabled by default if CMake variable ARCCORE_BUILD_MODE is Release
Arcane Version 3.2.0 (November 15, 2021)
New Features/Improvements:
Changes:
- CMake version 3.18 on Unix machines and CMake 3.21 on Windows.
- Deprecates the singleton() method in Arcane::ItemTypeMng. Instances of this class are attached to the mesh and can be retrieved via Arcane::IMesh::itemTypeMng().
- Moves the classes managing the Cartesian mesh to the arcane/cartesianmesh directory. Old paths in arcane/cea remain valid.
- By default, uses version 3 (instead of 2) of the ghost cell creation service. This version is more efficient when using a large number of subdomains because it uses collective communications.
- Removes memory preallocation for old connectivities.
- Makes the constructors of Arcane::ItemSharedInfo private to Arcane
- Raises a fatal exception if task support is requested but no implementation is available. Previously, there was only a warning message.
Corrections:
- Fixes crash (SEGV) when using tasks and subtasks sequentially.
Arcane Version 3.1.2 (October 21, 2021)
New Features/Improvements:
Changes:
- The mesh reader for the GMSH format is now in the arcane_std library instead of arcane_ios. Therefore, there is no longer a need to perform linking with the latter to be able to read meshes of this format.
- Removal of old entity types Link and DualNode and associated enumerations and classes
- Removal of certain classes associated with old connectivities
- Removes support for the RedHat 6 operating system.
Corrections:
- Fixes crash when updating materials if the global variable associated with a material is deallocated (Arcane::IVariable::isUsed()==false)
- Fixes floating point exception (FPE) with versions 2.9.9+ of libxml2. This library explicitly performs division by 0 during initialization.
Arcane Version 3.0.5 (September 30, 2021)
New Features/Improvements:
Changes:
Corrections:
Arcane Version 3.0.3 (Not released)
New Features/Improvements:
- Support for parallel AMR by patch
- Adds an Arcane::SimpleSVGMeshExporter class to export a set of meshes in SVG format
- Support for patch AMR in the Arcane::DirNode class for neighboring cells by direction.
- During group synchronization, ensures that all subdomains have the same groups and that synchronization occurs in the same order.
Changes:
Corrections:
- In patch AMR, ensures that neighboring entities by direction are always in the same patch level.
- Fixes some missing dependencies during compilation that could cause compilation errors in certain cases.
- Fixes compilation errors in examples outside the source directory.
Arcane Version 3.0.1 (May 27, 2021)
This version is the first 'open source' version of Arcane.
New Features/Improvements:
- New version of the Arcane::BasicReaderWriter read/write service to generate fewer files and support compression. This service can be used for both backups/restorations and bit-by-bit comparison of variables. The C# variable comparison utility has been updated to support this new version.
- Support for 'msh' format mesh files version 4.1. This version allows specifying groups of faces or cells in the mesh file.
- Internally, uses a single executable for all C# utilities.
Changes:
- Adds the possibility during Arcane compilation to specify required packages and not search for default packages.