Dims of size_t potentially problematic in 32-bit systems
Created by: ax3l
As we discussed last Monday, I think that the definition of adios2::Dims
as of
using Dims = std::vector<size_t>;
might be potentially a bit problematic. The problem I am describing here applies to clusters of 32bit systems, such as Raspberry PI clusters, older Nvidia Tegra systems, among others. (Been there with PIConGPU, done that.)
adios2::Dims
are used, inter alia, for (global) shapes
, counts
and start
s (/offsets) in user-control. Since these metadata attributes are somewhat loose in ADIOS, user-level concepts like a moving simulation window can at some point overflow the range of size_t
for e.g. the start
. Similar problems can occur when writing the 1D shape of dataframes/tabular data, such as global particle arrays.
It is therefore probably safer to define this to a fixed integer type, such as
#include <vector>
#include <cstdint>
// ...
using Dims = std::vector< std::uint64_t >;