From 8c88ada9eada11f9cfb3ec9233726e398a39736f Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Wed, 29 May 2024 07:45:22 -0600 Subject: [PATCH 1/7] MoBenchmark: use ifdefs to avoid bugs when algos are compiled out --- src/core/MoBenchmark.cpp | 17 ++++++++++++++++- src/core/MoBenchmark.h | 16 ++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/core/MoBenchmark.cpp b/src/core/MoBenchmark.cpp index 471b754a..23da0afe 100644 --- a/src/core/MoBenchmark.cpp +++ b/src/core/MoBenchmark.cpp @@ -118,10 +118,16 @@ double MoBenchmark::get_algo_perf(Algorithm::Id algo) const { case Algorithm::CN_RWZ: return algo_perf[Algorithm::CN_R] / 3 * 4; case Algorithm::CN_ZLS: return algo_perf[Algorithm::CN_R] / 3 * 4; case Algorithm::CN_DOUBLE: return algo_perf[Algorithm::CN_R] / 2; +# ifdef XMRIG_ALGO_CN_LITE case Algorithm::CN_LITE_0: return algo_perf[Algorithm::CN_LITE_1]; +# endif +# ifdef XMRIG_ALGO_CN_PICO case Algorithm::CN_PICO_TLO: return algo_perf[Algorithm::CN_PICO_0]; +# endif +# ifdef XMRIG_ALGO_RANDOMX case Algorithm::RX_SFX: return algo_perf[Algorithm::RX_0]; case Algorithm::RX_XEQ: return algo_perf[Algorithm::RX_ARQ]; +# endif default: return algo_perf[algo]; } } @@ -147,17 +153,21 @@ void MoBenchmark::start() { m_bench_job = Job(false, Algorithm(bench_algos[m_bench_algo]), "benchmark"); m_bench_job.setId(algo.name()); // need to set different id so that workers will see job change switch (algo.id()) { +# ifdef XMRIG_ALGO_KAWPOW case Algorithm::KAWPOW_RVN: m_bench_job.setBlob("4c38e8a5f7b2944d1e4274635d828519b97bc64a1f1c7896ecdbb139989aa0e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); m_bench_job.setDiff(Job::toDiff(strtoull("000000639c000000", nullptr, 16))); m_bench_job.setHeight(1500000); break; +# endif +# ifdef XMRIG_ALGO_GHOSTRIDER case Algorithm::GHOSTRIDER_RTM: case Algorithm::FLEX_KCN: m_bench_job.setBlob("000000208c246d0b90c3b389c4086e8b672ee040d64db5b9648527133e217fbfa48da64c0f3c0a0b0e8350800568b40fbb323ac3ccdf2965de51b9aaeb939b4f11ff81c49b74a16156ff251c00000000"); m_bench_job.setDiff(1000); break; +# endif default: // 99 here to trigger all future bench_algo versions for auto veriant detection based on block version @@ -215,11 +225,15 @@ void MoBenchmark::onJobResult(const JobResult& result) { if (!(hashrate = t[1])) if (!(hashrate = t[0])) hashrate = static_cast(m_hash_count) * result.diff / (now - m_bench_start) * 1000.0f; +# ifdef XMRIG_ALGO_KAWPOW if (algo.id() == Algorithm::KAWPOW_RVN) hashrate /= ((double)0xFFFFFFFFFFFFFFFF) / 0xFF000000; +# endif algo_perf[algo.id()] = hashrate; // store hashrate result LOG_INFO("%s " BRIGHT_BLACK_BG(WHITE_BOLD_S " Algo " MAGENTA_BOLD_S "%s" WHITE_BOLD_S " hashrate: " CYAN_BOLD_S "%f "), Tags::benchmark(), algo.name(), hashrate); run_next_bench_algo(); - } else switch (algo.id()) { // Update GhostRider algo job to produce more accurate perf results + } +# ifdef XMRIG_ALGO_GHOSTRIDER + else switch (algo.id()) { // Update GhostRider algo job to produce more accurate perf results case Algorithm::GHOSTRIDER_RTM: { uint8_t* blob = m_bench_job.blob(); ++ *reinterpret_cast(blob+4); @@ -228,6 +242,7 @@ void MoBenchmark::onJobResult(const JobResult& result) { } default:; } +# endif } uint64_t MoBenchmark::get_now() const { // get current time in ms diff --git a/src/core/MoBenchmark.h b/src/core/MoBenchmark.h index 5398bf4e..65d4df6e 100644 --- a/src/core/MoBenchmark.h +++ b/src/core/MoBenchmark.h @@ -35,20 +35,36 @@ class Job; class MoBenchmark : public IJobResultListener { const Algorithm::Id bench_algos[15] = { +# ifdef XMRIG_ALGO_GHOSTRIDER Algorithm::FLEX_KCN, Algorithm::GHOSTRIDER_RTM, +# endif Algorithm::CN_R, +# ifdef XMRIG_ALGO_CN_LITE Algorithm::CN_LITE_1, +# endif +# ifdef XMRIG_ALGO_CN_HEAVY Algorithm::CN_HEAVY_XHV, +# endif +# ifdef XMRIG_ALGO_CN_PICO Algorithm::CN_PICO_0, +# endif Algorithm::CN_CCX, +# ifdef XMRIG_ALGO_CN_GPU Algorithm::CN_GPU, +# endif +# ifdef XMRIG_ALGO_ARGON2 Algorithm::AR2_CHUKWA_V2, +# endif +# ifdef XMRIG_ALGO_KAWPOW Algorithm::KAWPOW_RVN, +# endif +# ifdef XMRIG_ALGO_RANDOMX Algorithm::RX_0, Algorithm::RX_GRAFT, Algorithm::RX_ARQ, Algorithm::RX_XLA, +# endif Algorithm::INVALID }; From 976c3c2e76cc671488e33ba882ce63b301b50eff Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Wed, 29 May 2024 08:05:09 -0600 Subject: [PATCH 2/7] MoBenchmark: restore listener at the end of finish() --- src/core/MoBenchmark.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/MoBenchmark.cpp b/src/core/MoBenchmark.cpp index 471b754a..cbb1e493 100644 --- a/src/core/MoBenchmark.cpp +++ b/src/core/MoBenchmark.cpp @@ -56,6 +56,7 @@ void MoBenchmark::finish() { LOG_INFO("%s " BRIGHT_BLACK_BG(CYAN_BOLD_S " ALGO PERFORMANCE CALIBRATION COMPLETE "), Tags::benchmark()); m_controller->miner()->pause(); // do not compute anything before job from the pool JobResults::stop(); + JobResults::setListener(m_controller->network(), m_controller->config()->cpu().isHwAES()); m_controller->start(); } From 85aca86d7905a7e03042c61ea96b735e75543a94 Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Wed, 29 May 2024 08:16:23 -0600 Subject: [PATCH 3/7] flex: fix various warnings --- src/crypto/flex/flex.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/crypto/flex/flex.cpp b/src/crypto/flex/flex.cpp index d6f2d1a3..2fdc56a1 100644 --- a/src/crypto/flex/flex.cpp +++ b/src/crypto/flex/flex.cpp @@ -74,16 +74,14 @@ static void selectAlgo(unsigned char nibble, bool* selectedAlgos, uint8_t* selec } static void getAlgoString(void *mem, unsigned int size, uint8_t* selectedAlgoOutput, int algoCount) { - int i; unsigned char *p = (unsigned char *)mem; unsigned int len = size/2; - unsigned char j = 0; bool selectedAlgo[algoCount]; for(int z=0; z < algoCount; z++) { selectedAlgo[z] = false; } int selectedCount = 0; - for (i=0;i Date: Wed, 29 May 2024 09:01:24 -0600 Subject: [PATCH 4/7] MoBenchmark: don't write algo_perf==0.0 items to config --- src/core/MoBenchmark.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/MoBenchmark.cpp b/src/core/MoBenchmark.cpp index 471b754a..9b0c6433 100644 --- a/src/core/MoBenchmark.cpp +++ b/src/core/MoBenchmark.cpp @@ -67,6 +67,7 @@ rapidjson::Value MoBenchmark::toJSON(rapidjson::Document &doc) const Value obj(kObjectType); for (const Algorithm a : Algorithm::all()) { + if (algo_perf[a.id()] == 0.0f) continue; obj.AddMember(StringRef(a.name()), algo_perf[a.id()], allocator); } From 525530b01293d29ebc14b566ca039dff09a90c3f Mon Sep 17 00:00:00 2001 From: MoneroOcean Date: Wed, 29 May 2024 18:51:21 +0300 Subject: [PATCH 5/7] Fixed issue with mining not working after brnchmark --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 35837551..611e1c6f 100644 --- a/src/version.h +++ b/src/version.h @@ -22,7 +22,7 @@ #define APP_ID "xmrig" #define APP_NAME "XMRig" #define APP_DESC "XMRig miner" -#define APP_VERSION "6.21.3-mo8" +#define APP_VERSION "6.21.3-mo9" #define APP_DOMAIN "xmrig.com" #define APP_SITE "www.xmrig.com" #define APP_COPYRIGHT "Copyright (C) 2016-2024 xmrig.com" From 92f27606dfc0721c0e624ab771dddc3f07f1d56c Mon Sep 17 00:00:00 2001 From: MoneroOcean Date: Wed, 29 May 2024 19:13:43 +0300 Subject: [PATCH 6/7] Flex algo ARM fix --- src/crypto/cn/CryptoNight_arm.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/crypto/cn/CryptoNight_arm.h b/src/crypto/cn/CryptoNight_arm.h index aa1eac1f..1402e2bf 100644 --- a/src/crypto/cn/CryptoNight_arm.h +++ b/src/crypto/cn/CryptoNight_arm.h @@ -63,8 +63,13 @@ static inline void do_skein_hash(const uint8_t *input, size_t len, uint8_t *outp xmr_skein(input, output); } +static inline void do_flex_skein_hash(const uint8_t* input, size_t len, uint8_t* output) { + int r = skein_hash(512, input, 8 * len, (uint8_t*)output); + assert(SKEIN_SUCCESS == r); +} void (* const extra_hashes[4])(const uint8_t *, size_t, uint8_t *) = {do_blake_hash, do_groestl_hash, do_jh_hash, do_skein_hash}; +void (* const extra_hashes_flex[3])(const uint8_t *, size_t, uint8_t *) = {do_blake_hash, do_groestl_hash, do_flex_skein_hash}; // This will shift and xor tmp1 into itself as 4 32-bit vals such as @@ -543,7 +548,10 @@ inline void cryptonight_single_hash(const uint8_t *__restrict__ input, size_t si cn_implode_scratchpad(reinterpret_cast(ctx[0]->memory), reinterpret_cast<__m128i *>(ctx[0]->state)); keccakf(h0, 24); - extra_hashes[ctx[0]->state[0] & 3](ctx[0]->state, 200, output); + if (height == 101) // Flex algo ugly hack + extra_hashes_flex[ctx[0]->state[0] & 2](ctx[0]->state, 200, output); + else + extra_hashes[ctx[0]->state[0] & 3](ctx[0]->state, 200, output); } From 4499c943bebe81e8291ed0014637c9638bab19fc Mon Sep 17 00:00:00 2001 From: MoneroOcean Date: Wed, 29 May 2024 19:17:58 +0300 Subject: [PATCH 7/7] Flex algo ARM fix --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 611e1c6f..55f4ad38 100644 --- a/src/version.h +++ b/src/version.h @@ -22,7 +22,7 @@ #define APP_ID "xmrig" #define APP_NAME "XMRig" #define APP_DESC "XMRig miner" -#define APP_VERSION "6.21.3-mo9" +#define APP_VERSION "6.21.3-mo10" #define APP_DOMAIN "xmrig.com" #define APP_SITE "www.xmrig.com" #define APP_COPYRIGHT "Copyright (C) 2016-2024 xmrig.com"