In this project, I aim to create a unified OpenCL abstraction layer for C++ and C#. This project is motivated by the contrast between obvious fact that OpenCL can be far more powerful and is more universal than CUDA, and the second obvious fact that it is less programmer-friendly.
I prefer to work with OpenCL because it gives me a astronomical level of portability. Current features of the library focus on usability issues and error tracing.
List of current features, it may be missing some latest additions:
- default platform and default device
- option to set a default command queue
- finding device by vendor, name, extensions it has, ...
- optional and partial OpenCL API calls validation and diagnostics
- throwing meaningful c++ exceptions on critical OpenCL errors
- simple information query system for platform, device, context, ...
- fast argument setting system for kernel
- simplified OpenCL source code management
- freeing OpenCL-related memory via single Dispose() method
- overloaded std::ostream << operators for most objects
- small set of high quality reusable kernels - but only for simple operations
- easier global and local size setting to max available at runtime
Many more features are added as I go, because I simply do not know in advance all aspects of OpenCL that can be improved.
Currently the project is not released to public - maybe later.