From 1af8e29a4b8863bfdfcc6471e680dae89bca2cc0 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Tue, 13 Feb 2018 13:20:29 +0100 Subject: [PATCH] Add round_up_multiple_32() and round_up_multiple_64() --- include/shared.h | 3 +++ src/opencl.c | 12 ++++++------ src/shared.c | 22 ++++++++++++++++++++++ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/include/shared.h b/include/shared.h index 0f8e38eef..5865565f6 100644 --- a/include/shared.h +++ b/include/shared.h @@ -64,4 +64,7 @@ u64 hc_strtoull (const char *nptr, char **endptr, int base); u32 power_of_two_ceil_32 (const u32 v); u32 power_of_two_floor_32 (const u32 v); +u32 round_up_multiple_32 (const u32 v, const u32 m); +u64 round_up_multiple_64 (const u64 v, const u64 m); + #endif // _SHARED_H diff --git a/src/opencl.c b/src/opencl.c index d3ec3dc8a..e2780ec05 100644 --- a/src/opencl.c +++ b/src/opencl.c @@ -1573,7 +1573,7 @@ int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, con // kernel_threads = power_of_two_floor_32 (kernel_threads); - while (num_elements % kernel_threads) num_elements++; + num_elements = round_up_multiple_64 (num_elements, kernel_threads); int CL_rc; @@ -1762,7 +1762,7 @@ int run_kernel_mp (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, return -1; } - while (num_elements % kernel_threads) num_elements++; + num_elements = round_up_multiple_64 (num_elements, kernel_threads); int CL_rc; @@ -1846,7 +1846,7 @@ int run_kernel_amp (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u64 kernel_threads = device_param->kernel_wgs_amp; - while (num_elements % kernel_threads) num_elements++; + num_elements = round_up_multiple_64 (num_elements, kernel_threads); cl_kernel kernel = device_param->kernel_amp; @@ -1882,7 +1882,7 @@ int run_kernel_atinit (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_par const u64 kernel_threads = device_param->kernel_wgs_atinit; - while (num_elements % kernel_threads) num_elements++; + num_elements = round_up_multiple_64 (num_elements, kernel_threads); cl_kernel kernel = device_param->kernel_atinit; @@ -1928,7 +1928,7 @@ int run_kernel_memset (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_par u64 num_elements = num16d; - while (num_elements % kernel_threads) num_elements++; + num_elements = round_up_multiple_64 (num_elements, kernel_threads); cl_kernel kernel = device_param->kernel_memset; @@ -1981,7 +1981,7 @@ int run_kernel_decompress (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device const u64 kernel_threads = device_param->kernel_wgs_decompress; - while (num_elements % kernel_threads) num_elements++; + num_elements = round_up_multiple_64 (num_elements, kernel_threads); cl_kernel kernel = device_param->kernel_decompress; diff --git a/src/shared.c b/src/shared.c index ece503589..ed3672585 100644 --- a/src/shared.c +++ b/src/shared.c @@ -535,3 +535,25 @@ u32 power_of_two_floor_32 (const u32 v) return r; } + +u32 round_up_multiple_32 (const u32 v, const u32 m) +{ + if (m == 0) return v; + + const u32 r = v % m; + + if (r == 0) return v; + + return v + m - r; +} + +u64 round_up_multiple_64 (const u64 v, const u64 m) +{ + if (m == 0) return v; + + const u64 r = v % m; + + if (r == 0) return v; + + return v + m - r; +}