| Abstract: |
| The forward mapping for an inverse problem is often best understood in terms of mathematical transformations between certain function spaces.
The inversion meanwhile is typically performed with iterative algorithms, looping over calls through a pipeline of operators.
This involves arrays as the interchange data type. While arrays are structurally simple, they lack mathematical context and can be ambiguous.
Furthermore, one operator may prefer to store its arrays on a GPU, another may only have a CPU implementation, or there may not be enough memory on a single GPU for the entire data size.
Working around such limitations requires conversion and copying, which remains bug-prone and detrimental to performance even with help from utilities like DLPack and the Python Array API.
The ODL framework wraps arrays into more informative abstractions.
This makes it easier to organize code and get it to work correctly.
In recent work, we have made these abstractions also capable of tracking different Python libraries for array storage and processing.
This gives better control over if and where transfer between backends happens, as well as allowing multiple different devices to simultaneously store parts of the data. |
|