1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-11-22 08:08:10 +00:00

Do not set -cl-std=XXX to workaround NEO driver bug causing to hang while compiling -m 22000

This commit is contained in:
Jens Steube 2020-03-13 09:43:41 +01:00
parent 2b2a7ede66
commit ba7163062d
3 changed files with 34 additions and 20 deletions

View File

@ -116,7 +116,6 @@
- OpenCL Runtime: Do not run shared- and constant-memory size checks if their memory type is of type global memory (typically CPU)
- OpenCL Runtime: Improve ROCm detection and make sure to not confuse with recent AMDGPU drivers
- OpenCL Runtime: Not using amd_bytealign (amd_bitalign is fine) on AMDGPU driver drastically reduces JiT segfaults
- OpenCL Runtime: Reenabled support for Intel GPU OpenCL runtime (Beignet and NEO) because a workaround was found (force -cl-std=CL2.0)
- OpenCL Runtime: Unlocked maximum thread count for NVIDIA GPU
- OpenCL Runtime: Update unstable mode warnings for Apple and AMDGPU drivers
- OpenCL Runtime: Workaround JiT compiler error on AMDGPU driver compiling WPA-EAPOL-PBKDF2 OpenCL kernel

View File

@ -1280,6 +1280,7 @@ typedef struct hc_device_param
bool use_opencl12;
bool use_opencl20;
bool use_opencl21;
// AMD
bool has_vadd;

View File

@ -5364,6 +5364,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
device_param->use_opencl12 = false;
device_param->use_opencl20 = false;
device_param->use_opencl21 = false;
// device_name
@ -5648,12 +5649,14 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
cl_device_id **opencl_platforms_devices = backend_ctx->opencl_platforms_devices;
cl_uint *opencl_platforms_devices_cnt = backend_ctx->opencl_platforms_devices_cnt;
cl_uint *opencl_platforms_vendor_id = backend_ctx->opencl_platforms_vendor_id;
char **opencl_platforms_version = backend_ctx->opencl_platforms_version;
for (u32 opencl_platforms_idx = 0; opencl_platforms_idx < opencl_platforms_cnt; opencl_platforms_idx++)
{
cl_device_id *opencl_platform_devices = opencl_platforms_devices[opencl_platforms_idx];
cl_uint opencl_platform_devices_cnt = opencl_platforms_devices_cnt[opencl_platforms_idx];
cl_uint opencl_platform_vendor_id = opencl_platforms_vendor_id[opencl_platforms_idx];
char *opencl_platform_version = opencl_platforms_version[opencl_platforms_idx];
for (u32 opencl_platform_devices_idx = 0; opencl_platform_devices_idx < opencl_platform_devices_cnt; opencl_platform_devices_idx++, backend_devices_idx++, opencl_devices_cnt++)
{
@ -5677,8 +5680,30 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
device_param->is_opencl = true;
// check OpenCL version
device_param->use_opencl12 = false;
device_param->use_opencl20 = false;
device_param->use_opencl21 = 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))
{
device_param->use_opencl12 = true;
}
else if ((opencl_version_min == 2) && (opencl_version_maj == 0))
{
device_param->use_opencl20 = true;
}
else if ((opencl_version_min == 2) && (opencl_version_maj == 1))
{
device_param->use_opencl21 = true;
}
}
size_t param_value_size = 0;
@ -5793,23 +5818,6 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime)
device_param->opencl_device_c_version = opencl_device_c_version;
// check OpenCL version
int opencl_version_min = 0;
int opencl_version_maj = 0;
if (sscanf (opencl_device_c_version, "OpenCL C %d.%d", &opencl_version_min, &opencl_version_maj) == 2)
{
if ((opencl_version_min == 1) && (opencl_version_maj == 2))
{
device_param->use_opencl12 = true;
}
else if ((opencl_version_min == 2) && (opencl_version_maj == 0))
{
device_param->use_opencl20 = true;
}
}
// max_compute_units
cl_uint device_processors = 0;
@ -7740,8 +7748,9 @@ 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, "-D KERNEL_STATIC -I OpenCL -I %s ", folder_config->cpath_real);
#endif
// workarounds reproduceable bugs on some OpenCL runtimes (Beignet and NEO)
// ex: remove empty code in m04, m08 and m16 in OpenCL/m05600_a3-optimized.cl will break s04 kernel (not cracking anymore)
/* 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
if (device_param->is_opencl == true)
{
@ -7753,7 +7762,12 @@ 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)
{
build_options_len += snprintf (build_options_buf + build_options_len, build_options_sz - build_options_len, "-cl-std=CL2.1 ");
}
}
*/
// we don't have sm_* on vendors not NV but it doesn't matter