From 7fc7b976bfd8f72620983bf7cb59d11177a50d30 Mon Sep 17 00:00:00 2001 From: XMRig <support@xmrig.com> Date: Fri, 16 Oct 2020 20:29:11 +0700 Subject: [PATCH] Removed m_bench field from Job class. --- src/backend/common/Workers.cpp | 2 +- src/backend/cpu/CpuBackend.cpp | 2 +- src/backend/cpu/CpuConfig.cpp | 4 ++-- src/backend/cpu/CpuConfig.h | 2 +- src/backend/cpu/CpuLaunchData.cpp | 3 ++- src/backend/cpu/CpuLaunchData.h | 3 ++- src/backend/cpu/CpuWorker.cpp | 33 ++++++++--------------------- src/backend/cpu/CpuWorker.h | 3 ++- src/backend/cuda/CudaLaunchData.cpp | 4 ++-- src/backend/cuda/CudaLaunchData.h | 3 ++- src/backend/opencl/OclLaunchData.h | 1 + src/base/net/stratum/Job.cpp | 8 ------- src/base/net/stratum/Job.h | 9 -------- src/base/net/stratum/NullClient.cpp | 1 - src/base/net/stratum/Pool.h | 2 +- src/base/net/stratum/Pools.cpp | 24 ++++++++++----------- src/base/net/stratum/Pools.h | 3 ++- src/net/Network.cpp | 4 +++- src/net/Network.h | 1 + 19 files changed, 44 insertions(+), 68 deletions(-) diff --git a/src/backend/common/Workers.cpp b/src/backend/common/Workers.cpp index 3b56e5fef..1659d7302 100644 --- a/src/backend/common/Workers.cpp +++ b/src/backend/common/Workers.cpp @@ -112,7 +112,7 @@ void xmrig::Workers<T>::start(const std::vector<T> &data) { # ifdef XMRIG_FEATURE_BENCHMARK if (!data.empty()) { - d_ptr->bench = data.front().miner->job().bench(); + d_ptr->bench = data.front().benchSize; d_ptr->benchAlgo = data.front().algorithm; } # endif diff --git a/src/backend/cpu/CpuBackend.cpp b/src/backend/cpu/CpuBackend.cpp index c3267d17f..cac4f85c1 100644 --- a/src/backend/cpu/CpuBackend.cpp +++ b/src/backend/cpu/CpuBackend.cpp @@ -335,7 +335,7 @@ void xmrig::CpuBackend::setJob(const Job &job) const CpuConfig &cpu = d_ptr->controller->config()->cpu(); - std::vector<CpuLaunchData> threads = cpu.get(d_ptr->controller->miner(), job.algorithm()); + std::vector<CpuLaunchData> threads = cpu.get(d_ptr->controller->miner(), job.algorithm(), d_ptr->controller->config()->pools().benchSize()); if (!d_ptr->threads.empty() && d_ptr->threads.size() == threads.size() && std::equal(d_ptr->threads.begin(), d_ptr->threads.end(), threads.begin())) { return; } diff --git a/src/backend/cpu/CpuConfig.cpp b/src/backend/cpu/CpuConfig.cpp index 5c70795de..619813d27 100644 --- a/src/backend/cpu/CpuConfig.cpp +++ b/src/backend/cpu/CpuConfig.cpp @@ -113,7 +113,7 @@ size_t xmrig::CpuConfig::memPoolSize() const } -std::vector<xmrig::CpuLaunchData> xmrig::CpuConfig::get(const Miner *miner, const Algorithm &algorithm) const +std::vector<xmrig::CpuLaunchData> xmrig::CpuConfig::get(const Miner *miner, const Algorithm &algorithm, uint32_t benchSize) const { std::vector<CpuLaunchData> out; const CpuThreads &threads = m_threads.get(algorithm); @@ -125,7 +125,7 @@ std::vector<xmrig::CpuLaunchData> xmrig::CpuConfig::get(const Miner *miner, cons out.reserve(threads.count()); for (const CpuThread &thread : threads.data()) { - out.emplace_back(miner, algorithm, *this, thread); + out.emplace_back(miner, algorithm, *this, thread, benchSize); } return out; diff --git a/src/backend/cpu/CpuConfig.h b/src/backend/cpu/CpuConfig.h index 95defa67b..4add65531 100644 --- a/src/backend/cpu/CpuConfig.h +++ b/src/backend/cpu/CpuConfig.h @@ -72,7 +72,7 @@ public: bool isHwAES() const; rapidjson::Value toJSON(rapidjson::Document &doc) const; size_t memPoolSize() const; - std::vector<CpuLaunchData> get(const Miner *miner, const Algorithm &algorithm) const; + std::vector<CpuLaunchData> get(const Miner *miner, const Algorithm &algorithm, uint32_t benchSize) const; void read(const rapidjson::Value &value); inline bool isEnabled() const { return m_enabled; } diff --git a/src/backend/cpu/CpuLaunchData.cpp b/src/backend/cpu/CpuLaunchData.cpp index b0090a212..369288418 100644 --- a/src/backend/cpu/CpuLaunchData.cpp +++ b/src/backend/cpu/CpuLaunchData.cpp @@ -32,7 +32,7 @@ #include <algorithm> -xmrig::CpuLaunchData::CpuLaunchData(const Miner *miner, const Algorithm &algorithm, const CpuConfig &config, const CpuThread &thread) : +xmrig::CpuLaunchData::CpuLaunchData(const Miner *miner, const Algorithm &algorithm, const CpuConfig &config, const CpuThread &thread, uint32_t benchSize) : algorithm(algorithm), assembly(config.assembly()), astrobwtAVX2(config.astrobwtAVX2()), @@ -43,6 +43,7 @@ xmrig::CpuLaunchData::CpuLaunchData(const Miner *miner, const Algorithm &algorit priority(config.priority()), affinity(thread.affinity()), miner(miner), + benchSize(benchSize), intensity(std::min<uint32_t>(thread.intensity(), algorithm.maxIntensity())) { } diff --git a/src/backend/cpu/CpuLaunchData.h b/src/backend/cpu/CpuLaunchData.h index 86a8f97eb..1bc9a7fde 100644 --- a/src/backend/cpu/CpuLaunchData.h +++ b/src/backend/cpu/CpuLaunchData.h @@ -44,7 +44,7 @@ class Miner; class CpuLaunchData { public: - CpuLaunchData(const Miner *miner, const Algorithm &algorithm, const CpuConfig &config, const CpuThread &thread); + CpuLaunchData(const Miner *miner, const Algorithm &algorithm, const CpuConfig &config, const CpuThread &thread, uint32_t benchSize); bool isEqual(const CpuLaunchData &other) const; CnHash::AlgoVariant av() const; @@ -66,6 +66,7 @@ public: const int priority; const int64_t affinity; const Miner *miner; + const uint32_t benchSize; const uint32_t intensity; }; diff --git a/src/backend/cpu/CpuWorker.cpp b/src/backend/cpu/CpuWorker.cpp index 4be13fba0..fd1a5932b 100644 --- a/src/backend/cpu/CpuWorker.cpp +++ b/src/backend/cpu/CpuWorker.cpp @@ -58,18 +58,10 @@ static constexpr uint32_t kReserveCount = 32768; template<size_t N> -inline bool nextRound(WorkerJob<N> &job) +inline bool nextRound(WorkerJob<N> &job, uint32_t benchSize) { - const auto ¤tJob = job.currentJob(); - -# ifdef XMRIG_FEATURE_BENCHMARK - const uint32_t rounds = currentJob.bench() ? 1 : kReserveCount; -# else - constexpr uint32_t rounds = kReserveCount; -# endif - - if (!job.nextRound(rounds, 1)) { - JobResults::done(currentJob); + if (!job.nextRound(benchSize ? 1 : kReserveCount, 1)) { + JobResults::done(job.currentJob()); return false; } @@ -93,6 +85,7 @@ xmrig::CpuWorker<N>::CpuWorker(size_t id, const CpuLaunchData &data) : m_av(data.av()), m_astrobwtMaxSize(data.astrobwtMaxSize * 1000), m_miner(data.miner), + m_benchSize(data.benchSize), m_ctx() { m_memory = new VirtualMemory(m_algorithm.l3() * N, data.hugePages, false, true, m_node); @@ -247,7 +240,7 @@ void xmrig::CpuWorker<N>::start() randomx_calculate_hash_first(m_vm, tempHash, m_job.blob(), job.size()); } - if (!nextRound(m_job)) { + if (!nextRound(m_job, m_benchSize)) { break; } @@ -267,7 +260,7 @@ void xmrig::CpuWorker<N>::start() fn(job.algorithm())(m_job.blob(), job.size(), m_hash, m_ctx, job.height()); } - if (!nextRound(m_job)) { + if (!nextRound(m_job, m_benchSize)) { break; }; } @@ -277,8 +270,8 @@ void xmrig::CpuWorker<N>::start() const uint64_t value = *reinterpret_cast<uint64_t*>(m_hash + (i * 32) + 24); # ifdef XMRIG_FEATURE_BENCHMARK - if (job.bench()) { - if (current_job_nonces[i] < job.bench()) { + if (m_benchSize) { + if (current_job_nonces[i] < m_benchSize) { m_benchData ^= value; } else { @@ -385,15 +378,7 @@ void xmrig::CpuWorker<N>::consumeJob() return; } - auto job = m_miner->job(); - -# ifdef XMRIG_FEATURE_BENCHMARK - const uint32_t rounds = job.bench() ? 1 : kReserveCount; -# else - constexpr uint32_t rounds = kReserveCount; -# endif - - m_job.add(job, rounds, Nonce::CPU); + m_job.add(m_miner->job(), m_benchSize ? 1 : kReserveCount, Nonce::CPU); # ifdef XMRIG_ALGO_RANDOMX if (m_job.currentJob().algorithm().family() == Algorithm::RANDOM_X) { diff --git a/src/backend/cpu/CpuWorker.h b/src/backend/cpu/CpuWorker.h index 4f96d7e2a..087156c24 100644 --- a/src/backend/cpu/CpuWorker.h +++ b/src/backend/cpu/CpuWorker.h @@ -73,6 +73,7 @@ private: void allocateCnCtx(); void consumeJob(); + alignas(16) uint8_t m_hash[N * 32]{ 0 }; const Algorithm m_algorithm; const Assembly m_assembly; const bool m_astrobwtAVX2; @@ -81,8 +82,8 @@ private: const CnHash::AlgoVariant m_av; const int m_astrobwtMaxSize; const Miner *m_miner; + const uint32_t m_benchSize; cryptonight_ctx *m_ctx[N]; - alignas(16) uint8_t m_hash[N * 32]{ 0 }; VirtualMemory *m_memory = nullptr; WorkerJob<N> m_job; diff --git a/src/backend/cuda/CudaLaunchData.cpp b/src/backend/cuda/CudaLaunchData.cpp index 11cf70c89..8a066c32a 100644 --- a/src/backend/cuda/CudaLaunchData.cpp +++ b/src/backend/cuda/CudaLaunchData.cpp @@ -30,9 +30,9 @@ xmrig::CudaLaunchData::CudaLaunchData(const Miner *miner, const Algorithm &algorithm, const CudaThread &thread, const CudaDevice &device) : algorithm(algorithm), - miner(miner), device(device), - thread(thread) + thread(thread), + miner(miner) { } diff --git a/src/backend/cuda/CudaLaunchData.h b/src/backend/cuda/CudaLaunchData.h index 8bf2dbeba..bb8b0fb24 100644 --- a/src/backend/cuda/CudaLaunchData.h +++ b/src/backend/cuda/CudaLaunchData.h @@ -54,9 +54,10 @@ public: static const char *tag(); const Algorithm algorithm; - const Miner *miner; const CudaDevice &device; const CudaThread thread; + const Miner *miner; + const uint32_t benchSize = 0; }; diff --git a/src/backend/opencl/OclLaunchData.h b/src/backend/opencl/OclLaunchData.h index 73716b840..7cfd5d58f 100644 --- a/src/backend/opencl/OclLaunchData.h +++ b/src/backend/opencl/OclLaunchData.h @@ -67,6 +67,7 @@ public: const OclDevice device; const OclPlatform platform; const OclThread thread; + const uint32_t benchSize = 0; }; diff --git a/src/base/net/stratum/Job.cpp b/src/base/net/stratum/Job.cpp index e826b8b89..fc17b5102 100644 --- a/src/base/net/stratum/Job.cpp +++ b/src/base/net/stratum/Job.cpp @@ -174,10 +174,6 @@ void xmrig::Job::copy(const Job &other) memcpy(m_rawBlob, other.m_rawBlob, sizeof(m_rawBlob)); memcpy(m_rawTarget, other.m_rawTarget, sizeof(m_rawTarget)); # endif - -# ifdef XMRIG_FEATURE_BENCHMARK - m_bench = other.m_bench; -# endif } @@ -209,8 +205,4 @@ void xmrig::Job::move(Job &&other) memcpy(m_rawBlob, other.m_rawBlob, sizeof(m_rawBlob)); memcpy(m_rawTarget, other.m_rawTarget, sizeof(m_rawTarget)); # endif - -# ifdef XMRIG_FEATURE_BENCHMARK - m_bench = other.m_bench; -# endif } diff --git a/src/base/net/stratum/Job.h b/src/base/net/stratum/Job.h index 4507f67c7..ba5a0aa2e 100644 --- a/src/base/net/stratum/Job.h +++ b/src/base/net/stratum/Job.h @@ -111,11 +111,6 @@ public: inline Job &operator=(const Job &other) { copy(other); return *this; } inline Job &operator=(Job &&other) noexcept { move(std::move(other)); return *this; } -# ifdef XMRIG_FEATURE_BENCHMARK - inline uint32_t bench() const { return m_bench; } - inline void setBench(uint32_t bench) { m_bench = bench; } -# endif - private: void copy(const Job &other); void move(Job &&other); @@ -140,10 +135,6 @@ private: char m_rawTarget[24]{}; String m_rawSeedHash; # endif - -# ifdef XMRIG_FEATURE_BENCHMARK - uint32_t m_bench = 0; -# endif }; diff --git a/src/base/net/stratum/NullClient.cpp b/src/base/net/stratum/NullClient.cpp index a93588810..5655ff207 100644 --- a/src/base/net/stratum/NullClient.cpp +++ b/src/base/net/stratum/NullClient.cpp @@ -59,5 +59,4 @@ void xmrig::NullClient::setPool(const Pool& pool) } m_job.setAlgorithm(m_pool.algorithm().id()); - m_job.setBench(m_pool.benchSize()); } diff --git a/src/base/net/stratum/Pool.h b/src/base/net/stratum/Pool.h index 271e91068..5dd749568 100644 --- a/src/base/net/stratum/Pool.h +++ b/src/base/net/stratum/Pool.h @@ -113,7 +113,7 @@ public: inline void setUser(const String &user) { m_user = user; } # ifdef XMRIG_FEATURE_BENCHMARK - inline uint64_t benchSize() const { return m_benchSize; } + inline uint32_t benchSize() const { return m_benchSize; } # endif inline bool operator!=(const Pool &other) const { return !isEqual(other); } diff --git a/src/base/net/stratum/Pools.cpp b/src/base/net/stratum/Pools.cpp index b765a9ef6..5dd233522 100644 --- a/src/base/net/stratum/Pools.cpp +++ b/src/base/net/stratum/Pools.cpp @@ -65,18 +65,6 @@ bool xmrig::Pools::isEqual(const Pools &other) const } -int xmrig::Pools::donateLevel() const -{ -# ifdef XMRIG_FEATURE_BENCHMARK - if (m_data.size() == 1 && m_data.front().mode() == Pool::MODE_BENCHMARK) { - return 0; - } -# endif - - return m_donateLevel; -} - - xmrig::IStrategy *xmrig::Pools::createStrategy(IStrategyListener *listener) const { if (active() == 1) { @@ -153,6 +141,18 @@ void xmrig::Pools::load(const IJsonReader &reader) } +uint32_t xmrig::Pools::benchSize() const +{ +# ifdef XMRIG_FEATURE_BENCHMARK + if (m_data.size() == 1 && m_data.front().mode() == Pool::MODE_BENCHMARK) { + return m_data.front().benchSize(); + } +# endif + + return 0; +} + + void xmrig::Pools::print() const { size_t i = 1; diff --git a/src/base/net/stratum/Pools.h b/src/base/net/stratum/Pools.h index 9c7bda671..fb92f13fc 100644 --- a/src/base/net/stratum/Pools.h +++ b/src/base/net/stratum/Pools.h @@ -58,6 +58,7 @@ public: Pools(); inline const std::vector<Pool> &data() const { return m_data; } + inline int donateLevel() const { return benchSize() ? 0 : m_donateLevel; } inline int retries() const { return m_retries; } inline int retryPause() const { return m_retryPause; } inline ProxyDonate proxyDonate() const { return m_proxyDonate; } @@ -66,10 +67,10 @@ public: inline bool operator==(const Pools &other) const { return isEqual(other); } bool isEqual(const Pools &other) const; - int donateLevel() const; IStrategy *createStrategy(IStrategyListener *listener) const; rapidjson::Value toJSON(rapidjson::Document &doc) const; size_t active() const; + uint32_t benchSize() const; void load(const IJsonReader &reader); void print() const; diff --git a/src/net/Network.cpp b/src/net/Network.cpp index d22e793f0..6432db6e9 100644 --- a/src/net/Network.cpp +++ b/src/net/Network.cpp @@ -128,6 +128,8 @@ void xmrig::Network::onActive(IStrategy *strategy, IClient *client) # ifdef XMRIG_FEATURE_BENCHMARK if (pool.mode() == Pool::MODE_BENCHMARK) { + m_benchSize = pool.benchSize(); + LOG_NOTICE("%s " MAGENTA_BOLD("start benchmark ") "hashes " CYAN_BOLD("%" PRIu64 "M") " algo " WHITE_BOLD("%s") " print_time " CYAN_BOLD("%us"), Tags::bench(), pool.benchSize() / 1000000, @@ -270,7 +272,7 @@ void xmrig::Network::setJob(IClient *client, const Job &job, bool donate) const char *scale = NetworkState::scaleDiff(diff); # ifdef XMRIG_FEATURE_BENCHMARK - if (!job.bench()) + if (!m_benchSize) # endif { if (job.height()) { diff --git a/src/net/Network.h b/src/net/Network.h index 94d546572..0289b2d25 100644 --- a/src/net/Network.h +++ b/src/net/Network.h @@ -92,6 +92,7 @@ private: IStrategy *m_strategy = nullptr; NetworkState *m_state = nullptr; Timer *m_timer = nullptr; + uint32_t m_benchSize = 0; };