mirror of
https://github.com/hashcat/hashcat.git
synced 2025-06-17 13:38:50 +00:00
Simple, but effective workaround to solve the 100% CPU burning loop bug in Nvidias OpenCL runtime, works Linux and Windows, 0% cpu (alsmost), 100% performance in comparison to CPU burning loop variant. Replaces old previous try with overwritten clock_gettime() function
This commit is contained in:
parent
217f9e6004
commit
8abc42e346
@ -988,6 +988,7 @@ struct __hc_device_param
|
|||||||
|
|
||||||
uint exec_pos;
|
uint exec_pos;
|
||||||
double exec_ms[EXEC_CACHE];
|
double exec_ms[EXEC_CACHE];
|
||||||
|
double exec_prev;
|
||||||
|
|
||||||
// this is "current" speed
|
// this is "current" speed
|
||||||
|
|
||||||
|
@ -2468,6 +2468,11 @@ static void run_kernel (const uint kern_run, hc_device_param_t *device_param, co
|
|||||||
|
|
||||||
hc_clFlush (data.ocl, device_param->command_queue);
|
hc_clFlush (data.ocl, device_param->command_queue);
|
||||||
|
|
||||||
|
if (data.devices_status == STATUS_RUNNING)
|
||||||
|
{
|
||||||
|
usleep (device_param->exec_prev * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
hc_clWaitForEvents (data.ocl, 1, &event);
|
hc_clWaitForEvents (data.ocl, 1, &event);
|
||||||
|
|
||||||
if (event_update)
|
if (event_update)
|
||||||
@ -2484,6 +2489,8 @@ static void run_kernel (const uint kern_run, hc_device_param_t *device_param, co
|
|||||||
|
|
||||||
device_param->exec_ms[exec_pos] = exec_time;
|
device_param->exec_ms[exec_pos] = exec_time;
|
||||||
|
|
||||||
|
device_param->exec_prev = exec_time;
|
||||||
|
|
||||||
exec_pos++;
|
exec_pos++;
|
||||||
|
|
||||||
if (exec_pos == EXEC_CACHE)
|
if (exec_pos == EXEC_CACHE)
|
||||||
@ -5425,19 +5432,6 @@ static uint generate_bitmaps (const uint digests_cnt, const uint dgst_size, cons
|
|||||||
* main
|
* main
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef LINUX
|
|
||||||
int (*clock_gettime_orig) (clockid_t clk_id, struct timespec *tp);
|
|
||||||
|
|
||||||
int clock_gettime (clockid_t clk_id, struct timespec *tp)
|
|
||||||
{
|
|
||||||
int r = clock_gettime_orig (clk_id, tp);
|
|
||||||
|
|
||||||
usleep (NVIDIA_100PERCENTCPU_WORKAROUND);
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WIN
|
#ifdef WIN
|
||||||
void SetConsoleWindowSize (const int x)
|
void SetConsoleWindowSize (const int x)
|
||||||
{
|
{
|
||||||
@ -5466,10 +5460,6 @@ void SetConsoleWindowSize (const int x)
|
|||||||
|
|
||||||
int main (int argc, char **argv)
|
int main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
#ifdef LINUX
|
|
||||||
clock_gettime_orig = dlsym (RTLD_NEXT, "clock_gettime");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WIN
|
#ifdef WIN
|
||||||
SetConsoleWindowSize (132);
|
SetConsoleWindowSize (132);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user