Kelp.Net makes heavy usage of the open computing language, or OpenCL. According to Wikipedia:
In OpenCL, tasks are scheduled on command queues. There is at least one command queue for each device. The OpenCL runtime breaks the scheduled data-parallel tasks into pieces and sends the tasks to the device processing element.
OpenCL defines a memory hierarchy:
- Global: Shared by all processing elements, and has high latency
- Read-only: Smaller, of lower latency, and writable by the host CPU but not compute devices
- Local: Shared by a process element group
- Per-element: Private memory
OpenCL also provides an API designed more towards math. This can be seen in the exposure of fixed-length vector types such as float4 (four vector of single-precision floats), available in lengths of 2, 3, 4, 8 and 16. As you gain more exposure to Kelp.Net and start to create your own functions, you will encounter OpenCL programming. For now, it's enough to know that it exists and is being used under the hood extensively.