codeplaysoftware / standards-proposals

Repository for publicly sharing proposals in various standards groups
Apache License 2.0
27 stars 17 forks source link

Accessor aliases #100

Open ProGTX opened 4 years ago

ProGTX commented 4 years ago

In order to reduce the verbosity of programming with SYCL accessors, this proposal aims to reduce the number of template parameters to just 2 from the current 5. It achieves this by slightly revising how to treat read-only data and adding alias templates based on the access target.

  1. Main changes
    • Default accessor template parameters
    • Simplify access modes
    • Alias templates based on access target
    • Extend the handler class
  2. Accessor alias templates
    • `constant_buffer_accessor
    • host_accessor
  3. Treat const T the same as access::mode::read
    • Simplifies a lot of code
  4. Define implicit conversions for equivalent types
  5. Implicit conversions that add const
  6. Overload for handler::require that also takes an access mode
    • To weaken the access mode
  7. Default all accessor template parameters
    • Expect the data type
    • Default to an accessor to global buffer with read-write access
    • Assumes accessors can be a placeholder without template parameter
  8. Discussed some considerations and alternatives
  9. Examples of reduced verbosity
ProGTX commented 4 years ago

That looks like a good simplification. You could also add some CTAD if compiled with C++17 or higher.

@keryell I've greatly simplified the proposal, and I've added a section on CTAD. I think I would need to add deduction guides to the accessor class, I might still add that. There's also the problem that CTAD doesn't work on alias templates in C++17, so maybe I should add something for C++20 as well?

keryell commented 4 years ago

That looks good. Probably you need to coordinate with Intel to unify the simplifications they are pushing for too.

ProGTX commented 4 years ago

I've pushed revision 0.3, which focuses a lot more on CTAD and makes host_accessor a separate type