1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-11-23 00:28:11 +00:00

Move hardware_power_all, kernel_power_all and kernel_power_final to opencl_ctx_t

This commit is contained in:
jsteube 2016-09-28 11:49:08 +02:00
parent 48917b5843
commit 94680cb311
6 changed files with 75 additions and 68 deletions

View File

@ -36,11 +36,12 @@ int run_copy (opencl_ctx_t *opencl_ctx, hc_device_param_t *device_param, hashcon
int run_cracker (opencl_ctx_t *opencl_ctx, hc_device_param_t *device_param, hashconfig_t *hashconfig, hashes_t *hashes, const user_options_t *user_options, const user_options_extra_t *user_options_extra, const straight_ctx_t *straight_ctx, const combinator_ctx_t *combinator_ctx, const mask_ctx_t *mask_ctx, const uint pws_cnt); int run_cracker (opencl_ctx_t *opencl_ctx, hc_device_param_t *device_param, hashconfig_t *hashconfig, hashes_t *hashes, const user_options_t *user_options, const user_options_extra_t *user_options_extra, const straight_ctx_t *straight_ctx, const combinator_ctx_t *combinator_ctx, const mask_ctx_t *mask_ctx, const uint pws_cnt);
int opencl_ctx_init (opencl_ctx_t *opencl_ctx, const user_options_t *user_options); int opencl_ctx_init (opencl_ctx_t *opencl_ctx, const user_options_t *user_options);
void opencl_ctx_destroy (opencl_ctx_t *opencl_ctx); void opencl_ctx_destroy (opencl_ctx_t *opencl_ctx);
int opencl_ctx_devices_init (opencl_ctx_t *opencl_ctx, const user_options_t *user_options); int opencl_ctx_devices_init (opencl_ctx_t *opencl_ctx, const user_options_t *user_options);
void opencl_ctx_devices_destroy (opencl_ctx_t *opencl_ctx); void opencl_ctx_devices_destroy (opencl_ctx_t *opencl_ctx);
void opencl_ctx_devices_update_power (opencl_ctx_t *opencl_ctx, const user_options_t *user_options, const user_options_extra_t *user_options_extra);
int opencl_session_begin (opencl_ctx_t *opencl_ctx, hashconfig_t *hashconfig, const hashes_t *hashes, const straight_ctx_t *straight_ctx, const user_options_t *user_options, const user_options_extra_t *user_options_extra, const folder_config_t *folder_config, const bitmap_ctx_t *bitmap_ctx, const tuning_db_t *tuning_db); int opencl_session_begin (opencl_ctx_t *opencl_ctx, hashconfig_t *hashconfig, const hashes_t *hashes, const straight_ctx_t *straight_ctx, const user_options_t *user_options, const user_options_extra_t *user_options_extra, const folder_config_t *folder_config, const bitmap_ctx_t *bitmap_ctx, const tuning_db_t *tuning_db);
void opencl_session_destroy (opencl_ctx_t *opencl_ctx); void opencl_session_destroy (opencl_ctx_t *opencl_ctx);

View File

@ -701,6 +701,11 @@ typedef struct
hc_device_param_t *devices_param; hc_device_param_t *devices_param;
u32 hardware_power_all;
u32 kernel_power_all;
u64 kernel_power_final; // we save that so that all divisions are done from the same base
bool run_main_level1; bool run_main_level1;
bool run_main_level2; bool run_main_level2;
bool run_main_level3; bool run_main_level3;
@ -1195,14 +1200,6 @@ typedef struct
u32 shutdown_inner; u32 shutdown_inner;
u32 shutdown_outer; u32 shutdown_outer;
/**
* workload specific
*/
u32 hardware_power_all;
u32 kernel_power_all;
u64 kernel_power_final; // we save that so that all divisions are done from the same base
/** /**
* hardware watchdog * hardware watchdog
*/ */

View File

@ -38,7 +38,7 @@
extern hc_global_data_t data; extern hc_global_data_t data;
static void set_kernel_power_final (const user_options_t *user_options, const u64 kernel_power_final) static void set_kernel_power_final (opencl_ctx_t *opencl_ctx, const user_options_t *user_options, const u64 kernel_power_final)
{ {
if (user_options->quiet == false) if (user_options->quiet == false)
{ {
@ -52,16 +52,16 @@ static void set_kernel_power_final (const user_options_t *user_options, const u6
send_prompt (); send_prompt ();
} }
data.kernel_power_final = kernel_power_final; opencl_ctx->kernel_power_final = kernel_power_final;
} }
static u32 get_power (hc_device_param_t *device_param) static u32 get_power (opencl_ctx_t *opencl_ctx, hc_device_param_t *device_param)
{ {
const u64 kernel_power_final = data.kernel_power_final; const u64 kernel_power_final = opencl_ctx->kernel_power_final;
if (kernel_power_final) if (kernel_power_final)
{ {
const double device_factor = (double) device_param->hardware_power / data.hardware_power_all; const double device_factor = (double) device_param->hardware_power / opencl_ctx->hardware_power_all;
const u64 words_left_device = (u64) CEIL (kernel_power_final * device_factor); const u64 words_left_device = (u64) CEIL (kernel_power_final * device_factor);
@ -84,19 +84,19 @@ static uint get_work (opencl_ctx_t *opencl_ctx, const user_options_t *user_optio
device_param->words_off = words_cur; device_param->words_off = words_cur;
const u64 kernel_power_all = data.kernel_power_all; const u64 kernel_power_all = opencl_ctx->kernel_power_all;
const u64 words_left = words_base - words_cur; const u64 words_left = words_base - words_cur;
if (words_left < kernel_power_all) if (words_left < kernel_power_all)
{ {
if (data.kernel_power_final == 0) if (opencl_ctx->kernel_power_final == 0)
{ {
set_kernel_power_final (user_options, words_left); set_kernel_power_final (opencl_ctx, user_options, words_left);
} }
} }
const u32 kernel_power = get_power (device_param); const u32 kernel_power = get_power (opencl_ctx, device_param);
uint work = MIN (words_left, kernel_power); uint work = MIN (words_left, kernel_power);

View File

@ -1008,8 +1008,6 @@ static int inner1_loop (user_options_t *user_options, user_options_extra_t *user
data.ms_paused = 0; data.ms_paused = 0;
data.kernel_power_final = 0;
opencl_session_reset (opencl_ctx); opencl_session_reset (opencl_ctx);
// figure out some workload // figure out some workload
@ -1278,44 +1276,9 @@ static int inner1_loop (user_options_t *user_options, user_options_extra_t *user
hc_thread_wait (opencl_ctx->devices_cnt, c_threads); hc_thread_wait (opencl_ctx->devices_cnt, c_threads);
/* // autotune modified kernel_accel, which modifies opencl_ctx->kernel_power_all
* Inform user about possible slow speeds
*/
uint hardware_power_all = 0; opencl_ctx_devices_update_power (opencl_ctx, user_options, user_options_extra);
uint kernel_power_all = 0;
for (uint device_id = 0; device_id < opencl_ctx->devices_cnt; device_id++)
{
hc_device_param_t *device_param = &opencl_ctx->devices_param[device_id];
hardware_power_all += device_param->hardware_power;
kernel_power_all += device_param->kernel_power;
}
data.hardware_power_all = hardware_power_all; // hardware_power_all is the same as kernel_power_all but without the influence of kernel_accel on the devices
data.kernel_power_all = kernel_power_all;
if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK))
{
if (data.words_base < kernel_power_all)
{
if (user_options->quiet == false)
{
clear_prompt ();
log_info ("ATTENTION!");
log_info (" The wordlist or mask you are using is too small.");
log_info (" Therefore, hashcat is unable to utilize the full parallelization power of your device(s).");
log_info (" The cracking speed will drop.");
log_info (" Workaround: https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#how_to_create_more_work_for_full_speed");
log_info ("");
}
}
}
/** /**
* create cracker threads * create cracker threads

View File

@ -753,7 +753,7 @@ int hm_get_throttle_with_device_id (opencl_ctx_t *opencl_ctx, const uint device_
clocksThrottleReasons &= ~nvmlClocksThrottleReasonApplicationsClocksSetting; clocksThrottleReasons &= ~nvmlClocksThrottleReasonApplicationsClocksSetting;
clocksThrottleReasons &= ~nvmlClocksThrottleReasonUnknown; clocksThrottleReasons &= ~nvmlClocksThrottleReasonUnknown;
if (data.kernel_power_final) if (opencl_ctx->kernel_power_final)
{ {
clocksThrottleReasons &= ~nvmlClocksThrottleReasonHwSlowdown; clocksThrottleReasons &= ~nvmlClocksThrottleReasonHwSlowdown;
} }

View File

@ -36,6 +36,7 @@
#include "convert.h" #include "convert.h"
#include "dictstat.h" #include "dictstat.h"
#include "wordlist.h" #include "wordlist.h"
#include "terminal.h"
extern hc_global_data_t data; extern hc_global_data_t data;
@ -2421,15 +2422,15 @@ int opencl_ctx_devices_init (opencl_ctx_t *opencl_ctx, const user_options_t *use
} }
} }
opencl_ctx->target_ms = TARGET_MS_PROFILE[user_options->workload_profile - 1]; opencl_ctx->target_ms = TARGET_MS_PROFILE[user_options->workload_profile - 1];
opencl_ctx->devices_cnt = devices_cnt; opencl_ctx->devices_cnt = devices_cnt;
opencl_ctx->devices_active = devices_active; opencl_ctx->devices_active = devices_active;
opencl_ctx->need_adl = need_adl; opencl_ctx->need_adl = need_adl;
opencl_ctx->need_nvml = need_nvml; opencl_ctx->need_nvml = need_nvml;
opencl_ctx->need_nvapi = need_nvapi; opencl_ctx->need_nvapi = need_nvapi;
opencl_ctx->need_xnvctrl = need_xnvctrl; opencl_ctx->need_xnvctrl = need_xnvctrl;
return 0; return 0;
} }
@ -2457,6 +2458,42 @@ void opencl_ctx_devices_destroy (opencl_ctx_t *opencl_ctx)
opencl_ctx->need_xnvctrl = 0; opencl_ctx->need_xnvctrl = 0;
} }
void opencl_ctx_devices_update_power (opencl_ctx_t *opencl_ctx, const user_options_t *user_options, const user_options_extra_t *user_options_extra)
{
u32 kernel_power_all = 0;
for (uint device_id = 0; device_id < opencl_ctx->devices_cnt; device_id++)
{
hc_device_param_t *device_param = &opencl_ctx->devices_param[device_id];
kernel_power_all += device_param->kernel_power;
}
opencl_ctx->kernel_power_all = kernel_power_all;
/*
* Inform user about possible slow speeds
*/
if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK))
{
if (data.words_base < kernel_power_all)
{
if (user_options->quiet == false)
{
clear_prompt ();
log_info ("ATTENTION!");
log_info (" The wordlist or mask you are using is too small.");
log_info (" Therefore, hashcat is unable to utilize the full parallelization power of your device(s).");
log_info (" The cracking speed will drop.");
log_info (" Workaround: https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#how_to_create_more_work_for_full_speed");
log_info ("");
}
}
}
}
int opencl_session_begin (opencl_ctx_t *opencl_ctx, hashconfig_t *hashconfig, const hashes_t *hashes, const straight_ctx_t *straight_ctx, const user_options_t *user_options, const user_options_extra_t *user_options_extra, const folder_config_t *folder_config, const bitmap_ctx_t *bitmap_ctx, const tuning_db_t *tuning_db) int opencl_session_begin (opencl_ctx_t *opencl_ctx, hashconfig_t *hashconfig, const hashes_t *hashes, const straight_ctx_t *straight_ctx, const user_options_t *user_options, const user_options_extra_t *user_options_extra, const folder_config_t *folder_config, const bitmap_ctx_t *bitmap_ctx, const tuning_db_t *tuning_db)
{ {
/** /**
@ -2478,6 +2515,8 @@ int opencl_session_begin (opencl_ctx_t *opencl_ctx, hashconfig_t *hashconfig, co
opencl_ctx->force_jit_compilation = 1500; opencl_ctx->force_jit_compilation = 1500;
} }
u32 hardware_power_all = 0;
for (uint device_id = 0; device_id < opencl_ctx->devices_cnt; device_id++) for (uint device_id = 0; device_id < opencl_ctx->devices_cnt; device_id++)
{ {
cl_int CL_err = CL_SUCCESS; cl_int CL_err = CL_SUCCESS;
@ -2647,6 +2686,8 @@ int opencl_session_begin (opencl_ctx_t *opencl_ctx, hashconfig_t *hashconfig, co
device_param->hardware_power = device_processors * kernel_threads; device_param->hardware_power = device_processors * kernel_threads;
hardware_power_all += device_param->hardware_power;
/** /**
* create input buffers on device : calculate size of fixed memory buffers * create input buffers on device : calculate size of fixed memory buffers
*/ */
@ -4403,6 +4444,8 @@ int opencl_session_begin (opencl_ctx_t *opencl_ctx, hashconfig_t *hashconfig, co
} }
} }
opencl_ctx->hardware_power_all = hardware_power_all;
return 0; return 0;
} }
@ -4562,6 +4605,9 @@ void opencl_session_reset (opencl_ctx_t *opencl_ctx)
device_param->words_off = 0; device_param->words_off = 0;
device_param->words_done = 0; device_param->words_done = 0;
} }
opencl_ctx->kernel_power_all = 0;
opencl_ctx->kernel_power_final = 0;
} }
int opencl_session_update_combinator (opencl_ctx_t *opencl_ctx, const hashconfig_t *hashconfig, const combinator_ctx_t *combinator_ctx) int opencl_session_update_combinator (opencl_ctx_t *opencl_ctx, const hashconfig_t *hashconfig, const combinator_ctx_t *combinator_ctx)