public ReadOnlyCollection <ComputeDevice> CreateSubDevices(uint num_devices) { CLDeviceHandle[] handles = new CLDeviceHandle[num_devices]; cl_device_partition_property[] properties = new cl_device_partition_property[] { cl_device_partition_property.CL_DEVICE_PARTITION_EQUALLY, (cl_device_partition_property)(uint)(MaxComputeUnits / num_devices), 0 }; ComputeErrorCode error = CL12.CreateSubDevices(Handle, num_devices, properties, handles, out num_devices); ComputeException.ThrowOnError(error); ComputeDevice[] subDevices = new ComputeDevice[num_devices]; for (int i = 0; i < num_devices; i++) { subDevices[i] = new ComputeDevice(this.Platform, handles[i]); } this.subDevices = subDevices; return(new ReadOnlyCollection <ComputeDevice> (this.subDevices)); }