accelerate icon indicating copy to clipboard operation
accelerate copied to clipboard

[WIP] Efficient storage of sum data types

Open Riscky opened this issue 3 years ago • 0 comments

Description

This PR contains the Accelerate side of my thesis work. It integrates the POSable library, which generically transforms Haskell 98 data types in the recursive tagged union layout. This memory layout, specifically geared to sum types, is quite memory efficient.

The work is not finished (in fact, it doesn't even compile yet).

Before merging this, we should decide what to do with pure product types (tuples). Do we represent those with a unified tag or with the tags inside the product? I think the latter might be preferable, because this keeps zipWith a no-op.

An (incomplete) list of things that should be done before that this can be merged:

  • [ ] Finish the generic implementation of the Matchable class (based on the current implementation for polymorphic Either)
  • [ ] Generate pattern synonyms with some Template Haskell (based on the current implementations for Bool, Maybe and Either)
  • [ ] Make POSable and Elt instances for newtypes
  • [ ] Make Elt instances for tuples (where the implementation depends on the answer to the question above)

Backends also have to be updated with the new AST constructors. No interesting code has to be generated for the union constructors (just type casts). It is important however that we keep padding equal between execution environments (CPU/GPU). The updated Case constructors have to be implemented as ranged case statements instead of comparisons.

There is also a whole slew of possible improvements that are discussed in my thesis reports, which are probably out of scope for this PR.

How has this been tested? Not yet, as this does not compile yet.

Types of changes

  • [ ] Bug fix (non-breaking change which fixes an issue)
  • [ ] New feature (non-breaking change which adds functionality)
  • [x] Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • [ ] My code follows the code style of this project
  • [x] My change requires a change to the documentation
  • [ ] I have updated the documentation accordingly
  • [ ] I have added tests to cover my changes
  • [ ] All new and existing tests passed

Note

The commit history of this PR is quite terrible and should definitely be cleaned up. I don't think this should be just a single commit, but I'm also not sure how I'd split this up in nicely defined commits.

Riscky avatar Jun 30 '22 10:06 Riscky