1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-12-26 08:28:20 +00:00

- Fixed PHY memory handling for scrypt based algorithms

- Bring back kernel exec timeout checking for NV
This commit is contained in:
jsteube 2015-12-23 15:51:55 +01:00
parent 19c77034a6
commit c17bf5e865
4 changed files with 60 additions and 59 deletions

View File

@ -49,5 +49,6 @@ void hc_clSetKernelArg (cl_kernel kernel, cl_uint arg_index, size_t arg_size, co
void *hc_clEnqueueMapBuffer (cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_map, cl_map_flags map_flags, size_t offset, size_t cb, cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event);
void hc_clEnqueueUnmapMemObject (cl_command_queue command_queue, cl_mem memobj, void *mapped_ptr, cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event);
void hc_clEnqueueFillBuffer (cl_command_queue command_queue, cl_mem buffer, const void *pattern, size_t pattern_size, size_t offset, size_t size, cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event);
void hc_clGetKernelWorkGroupInfo (cl_kernel kernel, cl_device_id device, cl_kernel_work_group_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret);
#endif

View File

@ -816,8 +816,10 @@ struct __hc_device_param
uint sm_major;
uint sm_minor;
uint kernel_exec_timeout;
uint gpu_processors;
uint gpu_processor_cores;
uint gpu_threads;
uint gpu_accel;
uint64_t gpu_maxmem_alloc;

View File

@ -376,3 +376,15 @@ void hc_clEnqueueFillBuffer (cl_command_queue command_queue, cl_mem buffer, cons
exit (-1);
}
}
void hc_clGetKernelWorkGroupInfo (cl_kernel kernel, cl_device_id device, cl_kernel_work_group_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret)
{
cl_int CL_err = clGetKernelWorkGroupInfo (kernel, device, param_name, param_value_size, param_value, param_value_size_ret);
if (CL_err != CL_SUCCESS)
{
log_error ("ERROR: %s %d\n", "clGetKernelWorkGroupInfo()", CL_err);
exit (-1);
}
}

View File

@ -12636,8 +12636,35 @@ int main (int argc, char **argv)
device_param->driver_version = mystrdup (tmp);
if (vendor_id == VENDOR_ID_AMD)
{
cl_uint gpu_processor_cores = 0;
#define CL_DEVICE_WAVEFRONT_WIDTH_AMD 0x4043
hc_clGetDeviceInfo (device, CL_DEVICE_WAVEFRONT_WIDTH_AMD, sizeof (gpu_processor_cores), &gpu_processor_cores, NULL);
device_param->gpu_processor_cores = gpu_processor_cores;
}
if (vendor_id == VENDOR_ID_NV)
{
cl_uint kernel_exec_timeout = 0;
#define CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV 0x4005
hc_clGetDeviceInfo (device, CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV, sizeof (kernel_exec_timeout), &kernel_exec_timeout, NULL);
device_param->kernel_exec_timeout = kernel_exec_timeout;
cl_uint gpu_processor_cores = 0;
#define CL_DEVICE_WARP_SIZE_NV 0x4003
hc_clGetDeviceInfo (device, CL_DEVICE_WARP_SIZE_NV, sizeof (gpu_processor_cores), &gpu_processor_cores, NULL);
device_param->gpu_processor_cores = gpu_processor_cores;
cl_uint sm_minor = 0;
cl_uint sm_major = 0;
@ -12652,9 +12679,21 @@ int main (int argc, char **argv)
}
/**
* catalyst driver check
* common driver check
*/
if (vendor_id == VENDOR_ID_NV)
{
if (device_param->kernel_exec_timeout != 0)
{
if (data.quiet == 0) log_info ("Device #%u: WARNING! Kernel exec timeout is not disabled, it might cause you errors of code 702", device_id + 1);
#if _WIN
if (data.quiet == 0) log_info (" You can disable it with a regpatch, see here: http://hashcat.net/wiki/doku.php?id=timeout_patch");
#endif
}
}
if (vendor_id == VENDOR_ID_AMD)
{
int catalyst_check = (force == 1) ? 0 : 1;
@ -12674,43 +12713,6 @@ int main (int argc, char **argv)
catalyst_warn = 0;
}
/*
// v14.9
if ((strstr (device_param->device_version, "1573.") != NULL)
&& (strstr (device_param->driver_version, "1573.") != NULL))
{
catalyst_warn = 0;
}
// v14.12 -- version overlaps with v15.4 beta
if ((strstr (device_param->device_version, "1642.") != NULL)
&& (strstr (device_param->driver_version, "1642.") != NULL))
{
catalyst_broken = 1;
}
// v15.4 (Beta, Windows only release)
if ((strstr (device_param->device_version, "1642.") != NULL)
&& (strstr (device_param->driver_version, "1642.") != NULL))
{
catalyst_warn = 0;
}
// v15.5 (Release, Linux)
if ((strstr (device_param->device_version, "1702.") != NULL)
&& (strstr (device_param->driver_version, "1702.") != NULL))
{
catalyst_warn = 0;
}
// v15.3 (Beta, Ubuntu repository release)
if ((strstr (device_param->device_version, "1729.") != NULL)
&& (strstr (device_param->driver_version, "1729.") != NULL))
{
catalyst_warn = 0;
}
*/
catalyst_check = 0;
}
@ -12818,6 +12820,8 @@ int main (int argc, char **argv)
uint gpu_processors = device_param->gpu_processors;
uint gpu_processor_cores = device_param->gpu_processor_cores;
/**
* create context for each device
*/
@ -12839,6 +12843,7 @@ int main (int argc, char **argv)
uint gpu_threads = GPU_THREADS;
// bcrypt
if (hash_mode == 3200) gpu_threads = 8;
if (hash_mode == 9000) gpu_threads = 8;
@ -12960,24 +12965,6 @@ int main (int argc, char **argv)
if ((hash_mode == 8900) || (hash_mode == 9300))
{
uint m = 0;
if (vendor_id == VENDOR_ID_NV)
{
#define NV_SHADER_PER_MP 32
#define NV_WARPS 32
m = NV_SHADER_PER_MP * NV_WARPS;
}
else if (vendor_id == VENDOR_ID_AMD)
{
#define AMD_SHADER_PER_MP 8
#define AMD_WAVEFRONTS 64
m = AMD_SHADER_PER_MP * AMD_WAVEFRONTS;
}
uint tmto_start = 2;
uint tmto_stop = 1024;
@ -12995,15 +12982,14 @@ int main (int argc, char **argv)
size_scryptV /= tmto;
size_scryptV *= gpu_processors * m;
size_scryptV *= gpu_processors * gpu_processor_cores * gpu_threads;
// if (size_scryptV > (device_param->gpu_maxmem_alloc / 2)) continue;
if (size_scryptV > device_param->gpu_maxmem_alloc) continue;
for (uint salts_pos = 0; salts_pos < data.salts_cnt; salts_pos++)
{
data.salts_buf[salts_pos].scrypt_tmto = tmto;
data.salts_buf[salts_pos].scrypt_phy = gpu_processors * m;
data.salts_buf[salts_pos].scrypt_phy = gpu_processors * gpu_processor_cores * gpu_threads;
}
break;