From d0a632f557fed7d73c188e2867fa1977f81db567 Mon Sep 17 00:00:00 2001 From: XMRig Date: Tue, 10 Aug 2021 14:54:35 +0700 Subject: [PATCH] Optimize CnHash storage. --- src/crypto/cn/CnHash.cpp | 29 +++++++++++++---------------- src/crypto/cn/CnHash.h | 13 ++++--------- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/crypto/cn/CnHash.cpp b/src/crypto/cn/CnHash.cpp index 2d24886a3..e7493aec4 100644 --- a/src/crypto/cn/CnHash.cpp +++ b/src/crypto/cn/CnHash.cpp @@ -1,13 +1,7 @@ /* XMRig - * Copyright 2010 Jeff Garzik - * Copyright 2012-2014 pooler - * Copyright 2014 Lucas Jones - * Copyright 2014-2016 Wolf9466 - * Copyright 2016 Jay D Dee - * Copyright 2017-2019 XMR-Stak , * Copyright 2018 Lee Clagett - * Copyright 2018-2020 SChernykh - * Copyright 2016-2020 XMRig , + * Copyright 2018-2021 SChernykh + * Copyright 2016-2021 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,16 +17,12 @@ * along with this program. If not, see . */ -#include - - -#include "backend/cpu/Cpu.h" #include "crypto/cn/CnHash.h" +#include "backend/cpu/Cpu.h" +#include "base/tools/cryptonote/umul128.h" #include "crypto/common/VirtualMemory.h" -#include "base/tools/cryptonote/umul128.h" - #if defined(XMRIG_ARM) # include "crypto/cn/CryptoNight_arm.h" #else @@ -319,10 +309,17 @@ xmrig::CnHash::CnHash() xmrig::cn_hash_fun xmrig::CnHash::fn(const Algorithm &algorithm, AlgoVariant av, Assembly::Id assembly) { + assert(cnHash.m_map.count(algorithm)); + if (!algorithm.isValid()) { return nullptr; } + const auto it = cnHash.m_map.find(algorithm); + if (it == cnHash.m_map.end()) { + return nullptr; + } + # ifdef XMRIG_ALGO_CN_HEAVY // cn-heavy optimization for Zen3 CPUs if ((av == AV_SINGLE) && (assembly != Assembly::NONE) && (Cpu::info()->arch() == ICpuInfo::ARCH_ZEN3)) { @@ -343,11 +340,11 @@ xmrig::cn_hash_fun xmrig::CnHash::fn(const Algorithm &algorithm, AlgoVariant av, # endif # ifdef XMRIG_FEATURE_ASM - cn_hash_fun fun = cnHash.m_map[algorithm][av][Cpu::assembly(assembly)]; + cn_hash_fun fun = it->second[av][Cpu::assembly(assembly)]; if (fun) { return fun; } # endif - return cnHash.m_map[algorithm][av][Assembly::NONE]; + return it->second[av][Assembly::NONE]; } diff --git a/src/crypto/cn/CnHash.h b/src/crypto/cn/CnHash.h index 9c8986193..04ac43485 100644 --- a/src/crypto/cn/CnHash.h +++ b/src/crypto/cn/CnHash.h @@ -1,13 +1,7 @@ /* XMRig - * Copyright 2010 Jeff Garzik - * Copyright 2012-2014 pooler - * Copyright 2014 Lucas Jones - * Copyright 2014-2016 Wolf9466 - * Copyright 2016 Jay D Dee - * Copyright 2017-2019 XMR-Stak , * Copyright 2018 Lee Clagett - * Copyright 2018-2020 SChernykh - * Copyright 2016-2020 XMRig , + * Copyright 2018-2021 SChernykh + * Copyright 2016-2021 XMRig , * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,6 +23,7 @@ #include #include +#include #include "crypto/cn/CnAlgo.h" @@ -68,7 +63,7 @@ public: static cn_hash_fun fn(const Algorithm &algorithm, AlgoVariant av, Assembly::Id assembly); private: - cn_hash_fun m_map[Algorithm::MAX][AV_MAX][Assembly::MAX] = {}; + std::map m_map; };