From: jsteube Date: Sun, 8 May 2016 11:37:58 +0000 (+0200) Subject: Run a few device compatibility checks on startup X-Git-Tag: v3.00-beta~21 X-Git-Url: https://www.flypig.org.uk/git/?p=hashcat.git;a=commitdiff_plain;h=b877c8448667585a5ba4337bea51fc07dd653f64 Run a few device compatibility checks on startup --- diff --git a/src/oclHashcat.c b/src/oclHashcat.c index b46e38e..6bdc33e 100644 --- a/src/oclHashcat.c +++ b/src/oclHashcat.c @@ -12809,7 +12809,7 @@ int main (int argc, char **argv) device_param->device_maxclock_frequency = device_maxclock_frequency; - // CL_DEVICE_ENDIAN_LITTLE + // device_endian_little cl_bool device_endian_little; @@ -12822,12 +12822,92 @@ int main (int argc, char **argv) device_param->skipped = 1; } + // device_available + + cl_bool device_available; + + hc_clGetDeviceInfo (data.ocl, device_param->device, CL_DEVICE_AVAILABLE, sizeof (device_available), &device_available, NULL); + + if (device_available == CL_FALSE) + { + log_info ("Device #%u: WARNING: device not available", device_id + 1); + + device_param->skipped = 1; + } + + // device_compiler_available + + cl_bool device_compiler_available; + + hc_clGetDeviceInfo (data.ocl, device_param->device, CL_DEVICE_COMPILER_AVAILABLE, sizeof (device_compiler_available), &device_compiler_available, NULL); + + if (device_compiler_available == CL_FALSE) + { + log_info ("Device #%u: WARNING: device no compiler available", device_id + 1); + + device_param->skipped = 1; + } + + // device_execution_capabilities + + cl_device_exec_capabilities device_execution_capabilities; + + hc_clGetDeviceInfo (data.ocl, device_param->device, CL_DEVICE_EXECUTION_CAPABILITIES, sizeof (device_execution_capabilities), &device_execution_capabilities, NULL); + + if ((device_execution_capabilities & CL_EXEC_KERNEL) == 0) + { + log_info ("Device #%u: WARNING: device does not support executing kernels", device_id + 1); + + device_param->skipped = 1; + } + + // device_extensions + + size_t device_extensions_size; + + hc_clGetDeviceInfo (data.ocl, device_param->device, CL_DEVICE_EXTENSIONS, 0, NULL, &device_extensions_size); + + char *device_extensions = mymalloc (device_extensions_size + 1); + + hc_clGetDeviceInfo (data.ocl, device_param->device, CL_DEVICE_EXTENSIONS, device_extensions_size, device_extensions, NULL); + + if (strstr (device_extensions, "base_atomics") == 0) + { + log_info ("Device #%u: WARNING: device does not support base atomics", device_id + 1); + + device_param->skipped = 1; + } + + if (strstr (device_extensions, "byte_addressable_store") == 0) + { + log_info ("Device #%u: WARNING: device does not support byte addressable store", device_id + 1); + + device_param->skipped = 1; + } + + myfree (device_extensions); + + // device_local_mem_size + + cl_ulong device_local_mem_size; + + hc_clGetDeviceInfo (data.ocl, device_param->device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof (device_local_mem_size), &device_local_mem_size, NULL); + + if (device_local_mem_size < 32768) + { + log_info ("Device #%u: WARNING: device local mem size is too small", device_id + 1); + + device_param->skipped = 1; + } + + // skipped device_param->skipped |= ((devices_filter & (1 << device_id)) == 0); device_param->skipped |= ((device_types_filter & (device_type)) == 0); // driver_version + hc_clGetDeviceInfo (data.ocl, device_param->device, CL_DRIVER_VERSION, 0, NULL, ¶m_value_size); char *driver_version = (char *) mymalloc (param_value_size);