Release Notes

flecsi:: qualification is omitted throughout.

Changes in v2.1.1

Possible incompatibilities

  • Build

    • FLECSI_RUNTIME_MODEL is renamed to FLECSI_BACKEND (it never referred to user-guide/runtime).

  • Utilties

    • util::mdspan::operator() is removed (it had an inconsistent argument order).


  • Build

    • HDF5 is supported by the CMake configuration.

    • Caliper is supported by the MPI backend.

  • Data

    • Mutators support write-only privileges (which, as with accessors, are necessary to properly initialize fields).

  • Topologies

    • Topology accessors that provide metadata for direct access in a toc task work properly when writable (although without such direct access in that case).

    • narray topology accessors work properly when declared const.

  • Legion backend

    • Certain user-level fields are allocated properly.

    • Errors at process termination in certain configurations are avoided.

  • MPI backend

    • exec::fold::min and exec::fold::max work with bool (but may be slower than using another type like int).

    • Index futures work properly when declared const.

  • On-node parallelism

    • Several uses of “iterator” in documentation have been corrected to use “range”.

  • Logging

    • Messages are sorted by timestamp correctly.

  • Testing

    • String-comparison macros (e.g., ASSERT_STREQ) handle runtime values properly.

Changes in v2.1.0 (April 16 2021)

Possible incompatibilities

  • Topologies

    • narray topology accessors provide policy_meta_ rather than meta().

New features

  • Topologies

    • topo::help is a convenient base class for specialization class templates that defines the non-dependent names in specialization.


  • Topologies

    • narray topology accessors handle boundary conditions correctly.

Changes in v2.0.0 (March 30 2021)

The changes between versions 1 and 2 are extensive and so are merely summarized here. The broadest change is that macros are used only for on-node parallelism constructs and for logging and unit tests. Some macro arguments become template arguments.


  • Data

    • flecsi_get_client_handle — use the topology slot directly

    • flecsi_get_handles, flecsi_get_handles_all, flecsi_is_at, flecsi_has_attribute_at, flecsi_has_attribute — will be provided differently by io

  • Execution

    • flecsi_register_task, flecsi_register_task_simple, flecsi_register_mpi_task, flecsi_register_mpi_task_simple — unneeded

    • specialization_tlt_init, specialization_spmd_init, execution::driver — the application provides main

    • flecsi_execute_task_simple — namespaces require no special treatment

    • flecsi_register_program — unneeded

    • flecsi_register_global_object, flecsi_set_global_object, flecsi_initialize_global_object, flecsi_get_global_object — use non-local variables directly, with the same restrictions

    • flecsi_register_reduction_operation — unneeded

  • Topologies

    • Topology element id() — iteration produces indices

    • Automatic dependent connectivity — will be provided as a separate utility

  • I/O — will be reimplemented

Other incompatibilities

  • Data

    • flecsi_register_data_client — now topology slots

    • flecsi_register_field, flecsi_register_global, flecsi_register_color — now field::definition, or a container of same to implement multiple versions

    • flecsi_get_handle, flecsi_get_global, flecsi_get_color, flecsi_get_mutator — now definition::operator()

    • data_client_handle_u<T,P> — now T::accessor<P>

    • dense_accessor, ragged_accessor, ragged_mutator, sparse_accessor, sparse_mutator — now definition::accessor or definition::mutator

      • ragged fields have a std::vector-like interface at each index point

      • sparse fields have a std::map-like interface at each index point

  • Execution

    • flecsi_execute_task — now execute

    • flecsi_execute_mpi_task, flecsi_execute_mpi_task_simple — pass mpi to execute

    • flecsi_execute_reduction_task — now reduce

    • flecsi_color(), flecsi_colors() — now color() and colors()

    • flecsi_register_function, flecsi_execute_function, flecsi_function_handle, flecsi_define_function_type — now exec::make_partial

    • execution::flecsi_future — now future, with a simpler interface

  • Topologies

    • Specializations inherit from topo::specialization rather than from a core topology type directly.

New features

  • Runtime

    • Application command-line options can be specified using the program_option class template and associated helper functions.

    • The control class template is used to define an extensible Control Model for an application.

  • Data

    • The raw and single layouts support special cases of field usage.

  • Execution

    • Tasks can be (specializations of) function templates.

    • Tasks can accept parameters of dynamic size (e.g., std::vector<double>), although passing large objects is inefficient.

    • Index launches can be of any number of point tasks (determined by the task’s arguments, including exec::launch_domain).

    • test conveniently executes tasks for unit testing.

  • Topologies

    • Multiple topology categories are supported: unstructured and narray as well as the special cases of index and global.

    • Multiple user-defined topology instances may exist sequentially or simultaneously.