In order to support 64-bit memory buffers and array views, we have introduced the LongIndexX types that represent (multidimensional) 64-bit index value. We have changed the return types of all Length and LengthInBytes properties from int to long. This might affect your code base, if you work with explicit length information from views and buffers. Furthermore, if you are using custom index, view or memory buffer implementations, you have to adapt your code to comply with the latest interface definitions or IArrayView, IGenericIndex and IMemoryBuffer.

It is possible to use 32-bit IndexX values and 64-bit LongIndexX values for accessing generic array views. This allows programmers to decide whether they want to favor performance (fast 32-bit indexing) or large memory views (slower 64-bit indexing that consumes more 64-bit registers). Note that specialized array views working on 32-bit indexes will accept 32-bit IndexX instances only.

In order to provide backwards compatibility, it is possible to implicitly convert a System.Int64 value into an Index1 value. Each conversion operator performs bounds checks that will trigger an assertion in the case on an overflow. This allows you to launch your kernels using accesses to Length and Extent properties working on 64-bit integer values.

Help us make these docs great!

All ILGPU docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

Or, learn how to contribute.