From d38608b9bc259a7ca28119f42384acb4f5aca7ed Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sun, 11 Feb 2018 16:22:24 +0100 Subject: [PATCH] Add get_kernel_preferred_wgs_multiple() for future use --- include/types.h | 17 ++++++++ src/opencl.c | 113 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 128 insertions(+), 2 deletions(-) diff --git a/include/types.h b/include/types.h index 21985bf93..9490b85c1 100644 --- a/include/types.h +++ b/include/types.h @@ -951,6 +951,23 @@ typedef struct hc_device_param u32 kernel_threads_by_wgs_kernel_atinit; u32 kernel_threads_by_wgs_kernel_decompress; + u32 kernel_preferred_wgs_multiple1; + u32 kernel_preferred_wgs_multiple12; + u32 kernel_preferred_wgs_multiple2; + u32 kernel_preferred_wgs_multiple23; + u32 kernel_preferred_wgs_multiple3; + u32 kernel_preferred_wgs_multiple4; + u32 kernel_preferred_wgs_multiple_init2; + u32 kernel_preferred_wgs_multiple_loop2; + u32 kernel_preferred_wgs_multiple_mp; + u32 kernel_preferred_wgs_multiple_mp_l; + u32 kernel_preferred_wgs_multiple_mp_r; + u32 kernel_preferred_wgs_multiple_amp; + u32 kernel_preferred_wgs_multiple_tm; + u32 kernel_preferred_wgs_multiple_memset; + u32 kernel_preferred_wgs_multiple_atinit; + u32 kernel_preferred_wgs_multiple_decompress; + u64 kernel_local_mem_size1; u64 kernel_local_mem_size12; u64 kernel_local_mem_size2; diff --git a/src/opencl.c b/src/opencl.c index 3dd276618..9210b990e 100644 --- a/src/opencl.c +++ b/src/opencl.c @@ -3864,6 +3864,21 @@ void opencl_ctx_devices_kernel_loops (hashcat_ctx_t *hashcat_ctx) } } +static int get_kernel_preferred_wgs_multiple (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, cl_kernel kernel, u32 *result) +{ + int CL_rc; + + size_t preferred_work_group_size_multiple; + + CL_rc = hc_clGetKernelWorkGroupInfo (hashcat_ctx, kernel, device_param->device, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, sizeof (preferred_work_group_size_multiple), &preferred_work_group_size_multiple, NULL); + + if (CL_rc == -1) return -1; + + *result = (u32) preferred_work_group_size_multiple; + + return 0; +} + static int get_kernel_local_mem_size (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, cl_kernel kernel, u64 *result) { int CL_rc; @@ -3874,8 +3889,6 @@ static int get_kernel_local_mem_size (hashcat_ctx_t *hashcat_ctx, hc_device_para if (CL_rc == -1) return -1; -printf ("%zu\n", local_mem_size); - *result = local_mem_size; return 0; @@ -5466,6 +5479,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel1, &device_param->kernel_preferred_wgs_multiple1); + + if (CL_rc == -1) return -1; + // kernel2 snprintf (kernel_name, sizeof (kernel_name) - 1, "m%05u_s%02d", hashconfig->kern_type, 8); @@ -5482,6 +5499,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel2, &device_param->kernel_preferred_wgs_multiple2); + + if (CL_rc == -1) return -1; + // kernel3 snprintf (kernel_name, sizeof (kernel_name) - 1, "m%05u_s%02d", hashconfig->kern_type, 16); @@ -5497,6 +5518,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel3, &device_param->kernel_local_mem_size3); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel3, &device_param->kernel_preferred_wgs_multiple3); + + if (CL_rc == -1) return -1; } else { @@ -5513,6 +5538,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel4, &device_param->kernel_local_mem_size4); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel4, &device_param->kernel_preferred_wgs_multiple4); + + if (CL_rc == -1) return -1; } } else @@ -5535,6 +5564,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel1, &device_param->kernel_preferred_wgs_multiple1); + + if (CL_rc == -1) return -1; + // kernel2 snprintf (kernel_name, sizeof (kernel_name) - 1, "m%05u_m%02d", hashconfig->kern_type, 8); @@ -5551,6 +5584,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel2, &device_param->kernel_preferred_wgs_multiple2); + + if (CL_rc == -1) return -1; + // kernel3 snprintf (kernel_name, sizeof (kernel_name) - 1, "m%05u_m%02d", hashconfig->kern_type, 16); @@ -5566,6 +5603,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel3, &device_param->kernel_local_mem_size3); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel3, &device_param->kernel_preferred_wgs_multiple3); + + if (CL_rc == -1) return -1; } else { @@ -5582,6 +5623,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel4, &device_param->kernel_local_mem_size4); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel4, &device_param->kernel_preferred_wgs_multiple4); + + if (CL_rc == -1) return -1; } } @@ -5602,6 +5647,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel_tm, &device_param->kernel_local_mem_size_tm); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel_tm, &device_param->kernel_preferred_wgs_multiple_tm); + + if (CL_rc == -1) return -1; } } } @@ -5623,6 +5672,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel1, &device_param->kernel_preferred_wgs_multiple1); + + if (CL_rc == -1) return -1; + // kernel2 snprintf (kernel_name, sizeof (kernel_name) - 1, "m%05u_loop", hashconfig->kern_type); @@ -5639,6 +5692,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel2, &device_param->kernel_preferred_wgs_multiple2); + + if (CL_rc == -1) return -1; + // kernel3 snprintf (kernel_name, sizeof (kernel_name) - 1, "m%05u_comp", hashconfig->kern_type); @@ -5655,6 +5712,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel3, &device_param->kernel_preferred_wgs_multiple3); + + if (CL_rc == -1) return -1; + // kernel12 if (hashconfig->opts_type & OPTS_TYPE_HOOK12) @@ -5672,6 +5733,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel12, &device_param->kernel_local_mem_size12); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel12, &device_param->kernel_preferred_wgs_multiple12); + + if (CL_rc == -1) return -1; } // kernel23 @@ -5691,6 +5756,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel23, &device_param->kernel_local_mem_size23); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel23, &device_param->kernel_preferred_wgs_multiple23); + + if (CL_rc == -1) return -1; } // init2 @@ -5710,6 +5779,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel_init2, &device_param->kernel_local_mem_size_init2); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel_init2, &device_param->kernel_preferred_wgs_multiple_init2); + + if (CL_rc == -1) return -1; } // loop2 @@ -5729,6 +5802,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel_loop2, &device_param->kernel_local_mem_size_loop2); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel_loop2, &device_param->kernel_preferred_wgs_multiple_loop2); + + if (CL_rc == -1) return -1; } } @@ -5746,6 +5823,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel_memset, &device_param->kernel_preferred_wgs_multiple_memset); + + if (CL_rc == -1) return -1; + CL_rc = hc_clSetKernelArg (hashcat_ctx, device_param->kernel_memset, 0, sizeof (cl_mem), device_param->kernel_params_memset[0]); if (CL_rc == -1) return -1; CL_rc = hc_clSetKernelArg (hashcat_ctx, device_param->kernel_memset, 1, sizeof (cl_uint), device_param->kernel_params_memset[1]); if (CL_rc == -1) return -1; CL_rc = hc_clSetKernelArg (hashcat_ctx, device_param->kernel_memset, 2, sizeof (cl_ulong), device_param->kernel_params_memset[2]); if (CL_rc == -1) return -1; @@ -5764,6 +5845,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel_atinit, &device_param->kernel_preferred_wgs_multiple_atinit); + + if (CL_rc == -1) return -1; + CL_rc = hc_clSetKernelArg (hashcat_ctx, device_param->kernel_atinit, 0, sizeof (cl_mem), device_param->kernel_params_atinit[0]); if (CL_rc == -1) return -1; CL_rc = hc_clSetKernelArg (hashcat_ctx, device_param->kernel_atinit, 1, sizeof (cl_ulong), device_param->kernel_params_atinit[1]); if (CL_rc == -1) return -1; @@ -5781,6 +5866,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel_decompress, &device_param->kernel_preferred_wgs_multiple_decompress); + + if (CL_rc == -1) return -1; + CL_rc = hc_clSetKernelArg (hashcat_ctx, device_param->kernel_decompress, 0, sizeof (cl_mem), device_param->kernel_params_decompress[0]); if (CL_rc == -1) return -1; CL_rc = hc_clSetKernelArg (hashcat_ctx, device_param->kernel_decompress, 1, sizeof (cl_mem), device_param->kernel_params_decompress[1]); if (CL_rc == -1) return -1; CL_rc = hc_clSetKernelArg (hashcat_ctx, device_param->kernel_decompress, 2, sizeof (cl_mem), device_param->kernel_params_decompress[2]); if (CL_rc == -1) return -1; @@ -5804,6 +5893,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel_mp_l, &device_param->kernel_preferred_wgs_multiple_mp_l); + + if (CL_rc == -1) return -1; + // mp_r CL_rc = hc_clCreateKernel (hashcat_ctx, device_param->program_mp, "r_markov", &device_param->kernel_mp_r); @@ -5818,6 +5911,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) if (CL_rc == -1) return -1; + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel_mp_r, &device_param->kernel_preferred_wgs_multiple_mp_r); + + if (CL_rc == -1) return -1; + if (hashconfig->opts_type & OPTS_TYPE_PT_BITSLICE) { CL_rc = hc_clSetKernelArg (hashcat_ctx, device_param->kernel_tm, 0, sizeof (cl_mem), device_param->kernel_params_tm[0]); if (CL_rc == -1) return -1; @@ -5837,6 +5934,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel_mp, &device_param->kernel_local_mem_size_mp); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel_mp, &device_param->kernel_preferred_wgs_multiple_mp); + + if (CL_rc == -1) return -1; } else if (user_options->attack_mode == ATTACK_MODE_HYBRID2) { @@ -5851,6 +5952,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel_mp, &device_param->kernel_local_mem_size_mp); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel_mp, &device_param->kernel_preferred_wgs_multiple_mp); + + if (CL_rc == -1) return -1; } if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL) @@ -5870,6 +5975,10 @@ int opencl_session_begin (hashcat_ctx_t *hashcat_ctx) CL_rc = get_kernel_local_mem_size (hashcat_ctx, device_param, device_param->kernel_amp, &device_param->kernel_local_mem_size_amp); if (CL_rc == -1) return -1; + + CL_rc = get_kernel_preferred_wgs_multiple (hashcat_ctx, device_param, device_param->kernel_amp, &device_param->kernel_preferred_wgs_multiple_amp); + + if (CL_rc == -1) return -1; } if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL)