diff options
-rw-r--r-- | src/core/cpu/device.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/core/cpu/device.cpp b/src/core/cpu/device.cpp index 5f02f4f..a2bc507 100644 --- a/src/core/cpu/device.cpp +++ b/src/core/cpu/device.cpp @@ -339,16 +339,19 @@ cl_int CPUDevice::createSubDevices( if (properties) { // We support CL_DEVICE_PARTITION_EQUALLY and CL_DEVICE_PARTITION_BY_COUNTS if (properties[0] == CL_DEVICE_PARTITION_EQUALLY) { - partition_size = properties[1]; - if (properties[2] != 0) { - retval = CL_INVALID_VALUE; - } + partition_size = properties[1]; + if (properties[2] != 0) { + retval = CL_INVALID_VALUE; + } + else if (numCPUs() == 1) { + retval = CL_DEVICE_PARTITION_FAILED; // cannot partition further. + } else if (partition_size > 0 && partition_size <= numCPUs()) { - num_new_devices = numCPUs() / partition_size; // discards fraction. - } - else { - retval = CL_INVALID_VALUE; - } + num_new_devices = numCPUs() / partition_size; // discards fraction. + } + else { + retval = CL_INVALID_VALUE; + } } else if (properties[0] == CL_DEVICE_PARTITION_BY_COUNTS) { // TODO |