mirror of
https://github.com/hashcat/hashcat.git
synced 2025-07-29 18:08:46 +00:00
Add runtime OpenCL version detection and discrete Intel GPU tuning
Detect the highest supported OpenCL version at runtime and use the appropriate -cl-std= flag when compiling kernels. This improves compatibility with the Intel NEO driver. Note: behavior is untested on other platforms (NVIDIA, AMD, Apple, etc.). Feedback will be monitored. Add tuningdb entries for discrete Intel GPUs. Copy over hash-mode patterns that benefit from vectorizing on scalar compute units, based on existing AMD and NVIDIA entries. This change also removes the artificial thread limit previously enforced for discrete Intel GPUs. Disable automatic vector width detection from the OpenCL runtime except on CPU, where it remains in use.
This commit is contained in:
parent
3344558396
commit
b2c308d403
@ -1518,9 +1518,10 @@ typedef struct hc_device_param
|
||||
|
||||
// Some more attributes
|
||||
|
||||
bool use_opencl11;
|
||||
bool use_opencl12;
|
||||
bool use_opencl20;
|
||||
bool use_opencl21;
|
||||
bool use_opencl30;
|
||||
|
||||
// AMD
|
||||
bool has_vadd;
|
||||
|
@ -5634,9 +5634,10 @@ static void backend_ctx_devices_init_cuda (hashcat_ctx_t *hashcat_ctx, int *virt
|
||||
device_param->is_metal = false;
|
||||
device_param->is_opencl = false;
|
||||
|
||||
device_param->use_opencl11 = false;
|
||||
device_param->use_opencl12 = false;
|
||||
device_param->use_opencl20 = false;
|
||||
device_param->use_opencl21 = false;
|
||||
device_param->use_opencl30 = false;
|
||||
|
||||
// device_name
|
||||
|
||||
@ -6111,9 +6112,10 @@ static void backend_ctx_devices_init_hip (hashcat_ctx_t *hashcat_ctx, int *virth
|
||||
device_param->is_metal = false;
|
||||
device_param->is_opencl = false;
|
||||
|
||||
device_param->use_opencl11 = false;
|
||||
device_param->use_opencl12 = false;
|
||||
device_param->use_opencl20 = false;
|
||||
device_param->use_opencl21 = false;
|
||||
device_param->use_opencl30 = false;
|
||||
|
||||
// device_name
|
||||
|
||||
@ -6621,9 +6623,10 @@ static void backend_ctx_devices_init_metal (hashcat_ctx_t *hashcat_ctx, MAYBE_UN
|
||||
device_param->is_metal = true;
|
||||
device_param->is_opencl = false;
|
||||
|
||||
device_param->use_opencl11 = false;
|
||||
device_param->use_opencl12 = false;
|
||||
device_param->use_opencl20 = false;
|
||||
device_param->use_opencl21 = false;
|
||||
device_param->use_opencl30 = false;
|
||||
|
||||
device_param->is_apple_silicon = is_apple_silicon ();
|
||||
|
||||
@ -7029,16 +7032,21 @@ static void backend_ctx_devices_init_opencl (hashcat_ctx_t *hashcat_ctx, int *vi
|
||||
|
||||
// check OpenCL version
|
||||
|
||||
device_param->use_opencl11 = false;
|
||||
device_param->use_opencl12 = false;
|
||||
device_param->use_opencl20 = false;
|
||||
device_param->use_opencl21 = false;
|
||||
device_param->use_opencl30 = false;
|
||||
|
||||
int opencl_version_min = 0;
|
||||
int opencl_version_maj = 0;
|
||||
|
||||
if (sscanf (opencl_platform_version, "OpenCL %d.%d", &opencl_version_min, &opencl_version_maj) == 2)
|
||||
{
|
||||
if ((opencl_version_min == 1) && (opencl_version_maj == 2))
|
||||
if ((opencl_version_min == 1) && (opencl_version_maj == 1))
|
||||
{
|
||||
device_param->use_opencl11 = true;
|
||||
}
|
||||
else if ((opencl_version_min == 1) && (opencl_version_maj == 2))
|
||||
{
|
||||
device_param->use_opencl12 = true;
|
||||
}
|
||||
@ -7046,9 +7054,9 @@ static void backend_ctx_devices_init_opencl (hashcat_ctx_t *hashcat_ctx, int *vi
|
||||
{
|
||||
device_param->use_opencl20 = true;
|
||||
}
|
||||
else if ((opencl_version_min == 2) && (opencl_version_maj == 1))
|
||||
else if ((opencl_version_min == 3) && (opencl_version_maj == 0))
|
||||
{
|
||||
device_param->use_opencl21 = true;
|
||||
device_param->use_opencl30 = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -10433,10 +10441,19 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (device_param->is_opencl == true)
|
||||
{
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, sizeof (vector_width), &vector_width, NULL) == -1)
|
||||
// For CPU we can ask the runtime
|
||||
// For GPUs we want to be more selective and we will use the tuning db
|
||||
|
||||
vector_width = 1;
|
||||
|
||||
if (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
continue;
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, sizeof (vector_width), &vector_width, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -10467,11 +10484,19 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
if (device_param->is_opencl == true)
|
||||
{
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, sizeof (vector_width), &vector_width, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
// For CPU we can ask the runtime
|
||||
// For GPUs we want to be more selective and we will use the tuning db
|
||||
|
||||
continue;
|
||||
vector_width = 1;
|
||||
|
||||
if (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU)
|
||||
{
|
||||
if (hc_clGetDeviceInfo (hashcat_ctx, device_param->opencl_device, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, sizeof (vector_width), &vector_width, NULL) == -1)
|
||||
{
|
||||
device_param->skipped = true;
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -11124,10 +11149,16 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
/* currently disabled, hangs NEO drivers since 20.09.
|
||||
was required for NEO driver 20.08 to workaround the same issue!
|
||||
we go with the latest version
|
||||
v7 re-enabled
|
||||
*/
|
||||
|
||||
if (device_param->is_opencl == true)
|
||||
{
|
||||
if (device_param->use_opencl12 == true)
|
||||
if (device_param->use_opencl11 == true)
|
||||
{
|
||||
build_options_len += snprintf (build_options_buf + build_options_len, build_options_sz - build_options_len, "-cl-std=CL1.1 ");
|
||||
}
|
||||
else if (device_param->use_opencl12 == true)
|
||||
{
|
||||
build_options_len += snprintf (build_options_buf + build_options_len, build_options_sz - build_options_len, "-cl-std=CL1.2 ");
|
||||
}
|
||||
@ -11135,12 +11166,11 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
{
|
||||
build_options_len += snprintf (build_options_buf + build_options_len, build_options_sz - build_options_len, "-cl-std=CL2.0 ");
|
||||
}
|
||||
else if (device_param->use_opencl21 == true)
|
||||
else if (device_param->use_opencl30 == true)
|
||||
{
|
||||
build_options_len += snprintf (build_options_buf + build_options_len, build_options_sz - build_options_len, "-cl-std=CL2.1 ");
|
||||
build_options_len += snprintf (build_options_buf + build_options_len, build_options_sz - build_options_len, "-cl-std=CL3.0 ");
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// we don't have sm_* on vendors not NV but it doesn't matter
|
||||
|
||||
@ -16200,13 +16230,6 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx)
|
||||
|
||||
threads_per_block = opencl_query_threads_per_block (hashcat_ctx, device_param, kernel);
|
||||
|
||||
if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && (device_param->device_host_unified_memory == 0) && (device_param->opencl_device_vendor_id == VENDOR_ID_INTEL_SDK))
|
||||
{
|
||||
// Intel is highly inaccurate here: https://github.com/hashcat/hashcat/issues/4356
|
||||
|
||||
threads_per_block = MIN (threads_per_block, device_param->kernel_preferred_wgs_multiple);
|
||||
}
|
||||
|
||||
// num_regs check should be included in opencl's CL_KERNEL_WORK_GROUP_SIZE
|
||||
}
|
||||
else if (device_param->is_metal == true)
|
||||
|
@ -321,3 +321,23 @@ AMD_Instinct_MI300X ALIAS_AMD
|
||||
AMD_Instinct_MI325X ALIAS_AMD
|
||||
AMD_Instinct_MI350X ALIAS_AMD
|
||||
AMD_Instinct_MI355X ALIAS_AMD
|
||||
|
||||
Intel(R)_Arc(TM)_A310_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_A380_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_A580_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_A750_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_A770_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_B570_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_B580_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_B770_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_Cxxx_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_Dxxx_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_Pro_A30M_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_Pro_A40_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_Pro_A50_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_Pro_A60_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_Pro_A60M_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_Pro_B50_Graphics ALIAS_INTEL
|
||||
Intel(R)_Arc(TM)_Pro_B60_Graphics ALIAS_INTEL
|
||||
|
||||
Intel(R)_Data_Center_GPU_Max_1100 ALIAS_INTEL
|
||||
|
@ -147,6 +147,49 @@ ALIAS_AMD 3 23700 2 A
|
||||
ALIAS_AMD 3 24700 2 A A
|
||||
ALIAS_AMD 3 99999 8 A A
|
||||
|
||||
ALIAS_INTEL 3 0 4 A A
|
||||
ALIAS_INTEL 3 10 4 A A
|
||||
ALIAS_INTEL 3 11 4 A A
|
||||
ALIAS_INTEL 3 12 4 A A
|
||||
ALIAS_INTEL 3 20 4 A A
|
||||
ALIAS_INTEL 3 21 4 A A
|
||||
ALIAS_INTEL 3 22 4 A A
|
||||
ALIAS_INTEL 3 23 4 A A
|
||||
ALIAS_INTEL 3 24 4 A A
|
||||
ALIAS_INTEL 3 200 4 A A
|
||||
ALIAS_INTEL 3 500 2 A A
|
||||
ALIAS_INTEL 3 900 4 A A
|
||||
ALIAS_INTEL 3 1000 4 A A
|
||||
ALIAS_INTEL 3 1100 4 A A
|
||||
ALIAS_INTEL 3 1600 2 A A
|
||||
ALIAS_INTEL 3 2400 4 A A
|
||||
ALIAS_INTEL 3 2410 4 A A
|
||||
ALIAS_INTEL 3 2611 2 A A
|
||||
ALIAS_INTEL 3 2711 2 A A
|
||||
ALIAS_INTEL 3 2811 2 A A
|
||||
ALIAS_INTEL 3 3710 4 A A
|
||||
ALIAS_INTEL 3 3711 4 A A
|
||||
ALIAS_INTEL 3 3800 2 A A
|
||||
ALIAS_INTEL 3 4010 4 A A
|
||||
ALIAS_INTEL 3 4110 2 A A
|
||||
ALIAS_INTEL 3 4300 2 A A
|
||||
ALIAS_INTEL 3 4800 4 A A
|
||||
ALIAS_INTEL 3 4900 2 A A
|
||||
ALIAS_INTEL 3 5300 2 A A
|
||||
ALIAS_INTEL 3 5400 2 A A
|
||||
ALIAS_INTEL 3 5500 4 A A
|
||||
ALIAS_INTEL 3 9900 4 A A
|
||||
ALIAS_INTEL 3 11100 2 A A
|
||||
ALIAS_INTEL 3 13200 2 A A
|
||||
ALIAS_INTEL 3 16400 4 A A
|
||||
ALIAS_INTEL 3 18700 4 A A
|
||||
ALIAS_INTEL 3 21200 4 A A
|
||||
ALIAS_INTEL 3 21700 2 A A
|
||||
ALIAS_INTEL 3 23600 2 A A
|
||||
ALIAS_INTEL 3 23700 2 A A
|
||||
ALIAS_INTEL 3 24700 2 A A
|
||||
ALIAS_INTEL 3 99999 4 A A
|
||||
|
||||
##
|
||||
## CryptoAPI
|
||||
##
|
||||
|
Loading…
Reference in New Issue
Block a user