Do not use OpenCL CPU devices by default to avoid slow GPU synchronization, user needs to explicitly enable them using --opencl-device-type

If a platform like pocl is filtered by any of the filter mechanism do not request the user to use --force
pull/124/head
jsteube 8 years ago
parent d3dc57896e
commit e7e6c4da17

@ -12376,7 +12376,7 @@ int main (int argc, char **argv)
}
/**
* OpenCL platforms: For each platform check if broken or unset features that we can not use, eg: temp_retain
* OpenCL platforms: For each platform check if we need to unset features that we can not use, eg: temp_retain
*/
for (uint i = 0; i < CL_platforms_cnt; i++)
@ -12397,19 +12397,6 @@ int main (int argc, char **argv)
data.gpu_temp_retain = gpu_temp_retain;
}
else if (strcmp (CL_platform_vendor, CL_VENDOR_POCL) == 0)
{
if (force == 0)
{
log_info ("");
log_info ("ATTENTION! All pocl drivers are known to be broken due to broken LLVM <= 3.7");
log_info ("You are STRONGLY encouraged not to use it");
log_info ("You can use --force to override this but do not post error reports if you do so");
log_info ("");
return (-1);
}
}
}
/**
@ -12434,7 +12421,7 @@ int main (int argc, char **argv)
cl_uint devices_platform_cnt = 0;
hc_clGetDeviceIDs (CL_platform, device_types_filter, DEVICES_MAX, devices_platform, &devices_platform_cnt);
hc_clGetDeviceIDs (CL_platform, CL_DEVICE_TYPE_ALL, DEVICES_MAX, devices_platform, &devices_platform_cnt);
for (uint j = 0; j < devices_platform_cnt; j++)
{
@ -12462,6 +12449,10 @@ int main (int argc, char **argv)
* devices mask and properties
*/
uint quiet_sav = quiet;
quiet = 0;
for (uint device_all_id = 0; device_all_id < devices_all_cnt; device_all_id++)
{
// skip the device, if the user did specify a list of GPUs to skip
@ -12472,7 +12463,7 @@ int main (int argc, char **argv)
if ((device_all_id_mask & opencl_devicemask) != device_all_id_mask)
{
if (quiet == 0 && algorithm_pos == 0) log_info ("Device #%d: skipped by user", device_all_id + 1);
if (quiet == 0 && algorithm_pos == 0) log_info ("Device #%d: skipped", device_all_id + 1);
continue;
}
@ -12484,9 +12475,24 @@ int main (int argc, char **argv)
devices_plf[device_id] = devices_plf[device_all_id];
cl_device_type device_type = 0;
hc_clGetDeviceInfo (devices[device_id], CL_DEVICE_TYPE, sizeof (device_type), &device_type, NULL);
device_type &= ~CL_DEVICE_TYPE_DEFAULT;
if ((device_type & device_types_filter) == 0)
{
if (quiet == 0 && algorithm_pos == 0) log_info ("Device #%d: skipped", device_all_id + 1);
continue;
}
char device_name[INFOSZ];
char device_version[INFOSZ];
memset (device_name, 0, sizeof (device_name));
memset (device_name, 0, sizeof (device_name));
memset (device_version, 0, sizeof (device_version));
cl_ulong global_mem_size;
cl_ulong max_mem_alloc_size;
@ -12498,6 +12504,7 @@ int main (int argc, char **argv)
hc_clGetDeviceInfo (devices[device_id], CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof (max_mem_alloc_size), &max_mem_alloc_size, NULL);
hc_clGetDeviceInfo (devices[device_id], CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof (max_clock_frequency), &max_clock_frequency, NULL);
hc_clGetDeviceInfo (devices[device_id], CL_DEVICE_MAX_COMPUTE_UNITS, sizeof (max_compute_units), &max_compute_units, NULL);
hc_clGetDeviceInfo (devices[device_id], CL_DEVICE_VERSION, sizeof (device_version), &device_version, NULL);
if ((benchmark == 1 || quiet == 0) && (algorithm_pos == 0))
{
@ -12510,9 +12517,25 @@ int main (int argc, char **argv)
(unsigned int) max_compute_units);
}
if (strstr (device_version, "pocl"))
{
if (force == 0)
{
log_info ("");
log_info ("ATTENTION! All pocl drivers are known to be broken due to broken LLVM <= 3.7");
log_info ("You are STRONGLY encouraged not to use it");
log_info ("You can use --force to override this but do not post error reports if you do so");
log_info ("");
return (-1);
}
}
devices_cnt++;
}
quiet = quiet_sav;
if (devices_cnt == 0)
{
log_error ("ERROR: No devices left that matches your specification.");

@ -5167,7 +5167,10 @@ cl_device_type setup_device_types_filter (char *opencl_device_types)
}
else
{
device_types_filter = CL_DEVICE_TYPE_ALL;
// Do not use CPU by default, this often reduces GPU performance because
// the CPU is to busy to handle GPU synchronization
device_types_filter = CL_DEVICE_TYPE_ALL & ~CL_DEVICE_TYPE_CPU;
}
return device_types_filter;

Loading…
Cancel
Save