Vikunja is a performance portable algorithm library that defines functions operating on ranges of elements for a variety of purposes . It supports the execution on multi-core CPUs and various GPUs. Vikunja uses alpaka to implement platform-independent primitives such as reduce or transform.
Using alpaka::Buf and alpaka::View native instead raw pointers
reduce the number of arguments of algorithm (instead begin pointer and size only use a input memObj, which contains the size, dimension ...)
Allow to implement only one function definition for an algorithm and support different types for the input and output memory, such alpaka::Buf, alpaka::View, raw pointer, std::Iterator ...
Allow to add extra type information, such the memory visibility
allows to implement a static compile time check, if the used accelerator can access the memory, e.g. if the memory is on the GPU, if you want to use the GPU for calculation
improve interface of algorithm through type deduction
The
vikunja::memObj
should allow:alpaka::Buf
andalpaka::View
native instead raw pointersalpaka::Buf
,alpaka::View
, raw pointer,std::Iterator
...