From 78ee811fa96c5d432b34e70307fcdfcf7f519fdf Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Fri, 12 Aug 2022 16:20:14 +0200 Subject: [PATCH] Use -flegacy-pass-manager for -m 501, -m 1600 and -m 6300 on AMD HIP for massive speed improvement --- src/backend.c | 2 +- src/modules/module_00501.c | 15 ++++++++++++++- src/modules/module_01600.c | 15 ++++++++++++++- src/modules/module_06300.c | 15 ++++++++++++++- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/backend.c b/src/backend.c index 9b801c7d1..6bb5e7825 100644 --- a/src/backend.c +++ b/src/backend.c @@ -8389,7 +8389,7 @@ static bool load_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_p hiprtc_options[1] = "-nocudainc"; hiprtc_options[2] = "-nocudalib"; - hiprtc_options[3] = ""; + hiprtc_options[3] = "-flegacy-pass-manager"; hiprtc_options[4] = ""; // untested but it should work diff --git a/src/modules/module_00501.c b/src/modules/module_00501.c index b22c8f80d..22b28e385 100644 --- a/src/modules/module_00501.c +++ b/src/modules/module_00501.c @@ -59,6 +59,19 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + // AMD HIP + if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP) + { + hc_asprintf (&jit_build_options, "-flegacy-pass-manager"); + } + + return jit_build_options; +} + static void AES128_decrypt_cbc (const u32 key[4], const u32 iv[4], const u32 in[16], u32 out[16]) { AES_KEY skey; @@ -370,7 +383,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_01600.c b/src/modules/module_01600.c index 5c62252b1..63f6038a6 100644 --- a/src/modules/module_01600.c +++ b/src/modules/module_01600.c @@ -57,6 +57,19 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + // AMD HIP + if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP) + { + hc_asprintf (&jit_build_options, "-flegacy-pass-manager"); + } + + return jit_build_options; +} + static void md5crypt_decode (u8 digest[16], const u8 buf[22]) { int l; @@ -291,7 +304,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_06300.c b/src/modules/module_06300.c index 02fc4d051..34dbb7a74 100644 --- a/src/modules/module_06300.c +++ b/src/modules/module_06300.c @@ -57,6 +57,19 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + // AMD HIP + if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP) + { + hc_asprintf (&jit_build_options, "-flegacy-pass-manager"); + } + + return jit_build_options; +} + static void md5crypt_decode (u8 digest[16], const u8 buf[22]) { int l; @@ -282,7 +295,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT;