From 424777ae28cb605e9997d890e3efef813b2f5fa0 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Tue, 19 Nov 2019 17:59:50 +0100 Subject: [PATCH] Add kernel accel limiter based on kernel threads to reduce host memory requirements --- src/backend.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/backend.c b/src/backend.c index 2236c5a11..66cb6a640 100644 --- a/src/backend.c +++ b/src/backend.c @@ -9405,6 +9405,17 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) u32 kernel_accel_min = device_param->kernel_accel_min; u32 kernel_accel_max = device_param->kernel_accel_max; + /** + * We need a kernel accel limiter otherwise we will allocate too much memory (Example 4* GTX1080): + * 4 (gpus) * 260 (sizeof pw_t) * 3 (pws, pws_comp, pw_pre) * 20 (MCU) * 1024 (threads) * 1024 (accel) = 65,431,142,400 bytes RAM!! + */ + + const u32 accel_limit = CEILDIV ((64 * 1024), kernel_threads); // this should result in less than 4GB per GPU, but allow higher accel in case user reduces the threads manually using -T + + kernel_accel_max = MIN (kernel_accel_max, accel_limit); + + kernel_accel_min = MIN (kernel_accel_min, kernel_accel_max); + // find out if we would request too much memory on memory blocks which are based on kernel_accel u64 size_pws = 4;