Multi-device OpenCL kernel load balancer and pipeliner API for C#. Uses shared-distributed memory model to keep GPUs updated fast while using same kernel on all devices(for simplicity).
Can be useful when developer doesn't need all GPUs at once in OpenCL. Maybe something like a device list in different categories:
ClDevice.getGpuList()
ClDevice.getAccList() // random order with device name so user can choose
ClDevice.getDeviceWithMaxComputeUnit() // 20 thread CPU is not same as a 20CU - HD7870 !!!
ClDevice.getDeviceWithBenchmark("nbody"); // gets top point awarded device
ClDevice.activateDynamicDeviceSwitching() // switches to another device when performance becomes too much oscillated (GTX_titan 1ms 3ms 2ms 3ms 1ms then switches to gtx_950 10ms 11ms 10ms 9ms)
Also a device duplication feature can be equivalent to implicit pipelining, CPU-thread controlled instead of event or driver. 3rd type pipelining. Needs more threads.
Can be useful when developer doesn't need all GPUs at once in OpenCL. Maybe something like a device list in different categories: