Fixing potential issues with automatic splitting of accelerators for NUMA.
This commit is contained in:
@ -482,6 +482,7 @@ int UCL_Device::set_platform(int pid) {
|
||||
_num_devices = 0;
|
||||
for (int i=0; i<num_unpart; i++) {
|
||||
cl_uint num_subdevices = 1;
|
||||
cl_device_id *subdevice_list = device_list + i;
|
||||
|
||||
#ifdef CL_VERSION_1_2
|
||||
cl_device_affinity_domain adomain;
|
||||
@ -494,25 +495,29 @@ int UCL_Device::set_platform(int pid) {
|
||||
props[0]=CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN;
|
||||
props[1]=CL_DEVICE_AFFINITY_DOMAIN_NUMA;
|
||||
props[2]=0;
|
||||
|
||||
cl_int err = CL_SUCCESS;
|
||||
if (adomain & CL_DEVICE_AFFINITY_DOMAIN_NUMA)
|
||||
CL_SAFE_CALL(clCreateSubDevices(device_list[i], props, 0, NULL,
|
||||
&num_subdevices));
|
||||
if (num_subdevices > 1) {
|
||||
cl_device_id *subdevice_list = new cl_device_id[num_subdevices];
|
||||
CL_SAFE_CALL(clCreateSubDevices(device_list[i], props, num_subdevices,
|
||||
subdevice_list, &num_subdevices));
|
||||
for (cl_uint j=0; j<num_subdevices; j++) {
|
||||
_cl_devices.push_back(device_list[i]);
|
||||
add_properties(device_list[i]);
|
||||
_num_devices++;
|
||||
err = clCreateSubDevices(device_list[i], props, 0, NULL,
|
||||
&num_subdevices);
|
||||
if (err == CL_SUCCESS && num_subdevices > 1) {
|
||||
subdevice_list = new cl_device_id[num_subdevices];
|
||||
err = clCreateSubDevices(device_list[i], props, num_subdevices,
|
||||
subdevice_list, &num_subdevices);
|
||||
if (err != CL_SUCCESS) {
|
||||
delete[] subdevice_list;
|
||||
num_subdevices = 1;
|
||||
subdevice_list = device_list + i;
|
||||
}
|
||||
delete[] subdevice_list;
|
||||
} else {
|
||||
_cl_devices.push_back(device_list[i]);
|
||||
add_properties(device_list[i]);
|
||||
_num_devices++;
|
||||
}
|
||||
#endif
|
||||
|
||||
for (cl_uint j=0; j<num_subdevices; j++) {
|
||||
_num_devices++;
|
||||
_cl_devices.push_back(subdevice_list[j]);
|
||||
add_properties(subdevice_list[j]);
|
||||
}
|
||||
if (num_subdevices > 1) delete[] subdevice_list;
|
||||
} // for i
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user