From 0ad34f8746bb227a1856bc3f568b5a31dbbabd36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ben=20Gr=C3=A4f?= Date: Thu, 25 Jul 2019 08:09:23 +0200 Subject: [PATCH] Fixed hf > 1 on Argon2 algos --- src/Mem.cpp | 12 +++++------- src/Mem.h | 8 ++++++-- src/Options.cpp | 4 ++++ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/Mem.cpp b/src/Mem.cpp index cc15fa5c..62ecfc6c 100644 --- a/src/Mem.cpp +++ b/src/Mem.cpp @@ -70,8 +70,8 @@ ScratchPadMem Mem::create(ScratchPad** scratchPads, int threadId) } ScratchPadMem scratchPadMem; - scratchPadMem.realSize = Options::isCNAlgo(m_algo) ? scratchPadSize * getThreadHashFactor(threadId) : scratchPadSize; - scratchPadMem.size = Options::isCNAlgo(m_algo) ? scratchPadSize * getThreadHashFactor(threadId) : scratchPadSize; + scratchPadMem.realSize = scratchPadSize * getThreadHashFactor(threadId); + scratchPadMem.size = scratchPadSize * getThreadHashFactor(threadId); scratchPadMem.pages = std::max(scratchPadMem.size / MEMORY, static_cast(1)); allocate(scratchPadMem, m_useHugePages); @@ -102,11 +102,9 @@ void Mem::release(ScratchPad** scratchPads, ScratchPadMem& scratchPadMem, int th m_totalPages -= scratchPadMem.pages; m_totalHugepages -= scratchPadMem.hugePages; - if (Options::isCNAlgo(m_algo)) { - release(scratchPadMem); + release(scratchPadMem); - for (size_t i = 0; i < getThreadHashFactor(threadId); ++i) { - _mm_free(scratchPads[i]); - } + for (size_t i = 0; i < getThreadHashFactor(threadId); ++i) { + _mm_free(scratchPads[i]); } } diff --git a/src/Mem.h b/src/Mem.h index 94f74b22..4b893d49 100644 --- a/src/Mem.h +++ b/src/Mem.h @@ -81,8 +81,12 @@ public: static inline size_t hashFactor() { return m_hashFactor; } static inline size_t getThreadHashFactor(int threadId) { - return (m_multiHashThreadMask.all() || - m_multiHashThreadMask.test(threadId)) ? m_hashFactor : 1; + size_t threadHashFactor = 1; + if (Options::isCNAlgo(m_algo)) { + threadHashFactor = (m_multiHashThreadMask.all() || m_multiHashThreadMask.test(threadId)) ? m_hashFactor : 1; + } + + return threadHashFactor; } static inline bool isHugepagesAvailable() { return (m_flags & HugepagesAvailable) != 0; } diff --git a/src/Options.cpp b/src/Options.cpp index e07337fa..c8a31f1e 100644 --- a/src/Options.cpp +++ b/src/Options.cpp @@ -1401,6 +1401,10 @@ void Options::optimizeAlgorithmConfiguration() m_hashFactor = 3; } + if (m_algo == Options::ALGO_ARGON2_256 || m_algo == Options::ALGO_ARGON2_512) { + m_hashFactor = 1; + } + Cpu::optimizeParameters(m_threads, m_hashFactor, m_algo, m_powVariant, m_maxCpuUsage, m_safe); }