Cleanup MoneroOcean patchset
This commit is contained in:
parent
42235a56da
commit
30fdc92884
28 changed files with 6138 additions and 6122 deletions
|
@ -26,9 +26,10 @@
|
|||
#include "net/Network.h"
|
||||
#include "rapidjson/document.h"
|
||||
#include "backend/common/interfaces/IBackend.h"
|
||||
#include "backend/common/Hashrate.h"
|
||||
#include <chrono>
|
||||
|
||||
namespace xmrig {
|
||||
namespace xmrig {
|
||||
|
||||
Benchmark::Benchmark() : m_controller(nullptr), m_isNewBenchRun(true) {
|
||||
for (BenchAlgo bench_algo = static_cast<BenchAlgo>(0); bench_algo != BenchAlgo::MAX; bench_algo = static_cast<BenchAlgo>(bench_algo + 1)) {
|
||||
|
@ -59,6 +60,7 @@ void Benchmark::finish() {
|
|||
}
|
||||
m_bench_algo = BenchAlgo::INVALID;
|
||||
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();
|
||||
}
|
||||
|
@ -104,33 +106,39 @@ void Benchmark::read(const rapidjson::Value &value)
|
|||
}
|
||||
}
|
||||
|
||||
float Benchmark::get_algo_perf(Algorithm::Id algo) const {
|
||||
double Benchmark::get_algo_perf(Algorithm::Id algo) const {
|
||||
switch (algo) {
|
||||
case Algorithm::CN_0: return m_bench_algo_perf[BenchAlgo::CN_R];
|
||||
case Algorithm::CN_CCX: return m_bench_algo_perf[BenchAlgo::CN_CCX];
|
||||
case Algorithm::CN_0: return m_bench_algo_perf[BenchAlgo::CN_CCX] / 2;
|
||||
case Algorithm::CN_1: return m_bench_algo_perf[BenchAlgo::CN_R];
|
||||
case Algorithm::CN_2: return m_bench_algo_perf[BenchAlgo::CN_R];
|
||||
case Algorithm::CN_R: return m_bench_algo_perf[BenchAlgo::CN_R];
|
||||
case Algorithm::CN_RTO: return m_bench_algo_perf[BenchAlgo::CN_R];
|
||||
case Algorithm::CN_XAO: return m_bench_algo_perf[BenchAlgo::CN_R];
|
||||
case Algorithm::CN_FAST: return m_bench_algo_perf[BenchAlgo::CN_R] * 2;
|
||||
case Algorithm::CN_HALF: return m_bench_algo_perf[BenchAlgo::CN_R] * 2;
|
||||
case Algorithm::CN_XAO: return m_bench_algo_perf[BenchAlgo::CN_R];
|
||||
case Algorithm::CN_RTO: return m_bench_algo_perf[BenchAlgo::CN_R];
|
||||
case Algorithm::CN_RWZ: return m_bench_algo_perf[BenchAlgo::CN_R] / 3 * 4;
|
||||
case Algorithm::CN_ZLS: return m_bench_algo_perf[BenchAlgo::CN_R] / 3 * 4;
|
||||
case Algorithm::CN_DOUBLE: return m_bench_algo_perf[BenchAlgo::CN_R] / 2;
|
||||
case Algorithm::CN_GPU: return m_bench_algo_perf[BenchAlgo::CN_GPU];
|
||||
case Algorithm::CN_LITE_0: return m_bench_algo_perf[BenchAlgo::CN_LITE_1];
|
||||
case Algorithm::CN_LITE_1: return m_bench_algo_perf[BenchAlgo::CN_LITE_1];
|
||||
case Algorithm::CN_HEAVY_0: return m_bench_algo_perf[BenchAlgo::CN_HEAVY_TUBE];
|
||||
case Algorithm::CN_HEAVY_TUBE: return m_bench_algo_perf[BenchAlgo::CN_HEAVY_TUBE];
|
||||
case Algorithm::CN_HEAVY_XHV: return m_bench_algo_perf[BenchAlgo::CN_HEAVY_TUBE];
|
||||
case Algorithm::CN_PICO_0: return m_bench_algo_perf[BenchAlgo::CN_PICO_0];
|
||||
case Algorithm::RX_LOKI: return m_bench_algo_perf[BenchAlgo::RX_0];
|
||||
case Algorithm::RX_WOW: return m_bench_algo_perf[BenchAlgo::RX_WOW];
|
||||
case Algorithm::RX_0: return m_bench_algo_perf[BenchAlgo::RX_0];
|
||||
case Algorithm::DEFYX: return m_bench_algo_perf[BenchAlgo::DEFYX];
|
||||
case Algorithm::RX_ARQ: return m_bench_algo_perf[BenchAlgo::RX_ARQ];
|
||||
case Algorithm::CN_PICO_TLO: return m_bench_algo_perf[BenchAlgo::CN_PICO_0];
|
||||
case Algorithm::CN_GPU: return m_bench_algo_perf[BenchAlgo::CN_GPU];
|
||||
case Algorithm::AR2_CHUKWA: return m_bench_algo_perf[BenchAlgo::AR2_CHUKWA];
|
||||
case Algorithm::AR2_WRKZ: return m_bench_algo_perf[BenchAlgo::AR2_WRKZ];
|
||||
case Algorithm::ASTROBWT_DERO: return m_bench_algo_perf[BenchAlgo::ASTROBWT_DERO];
|
||||
case Algorithm::KAWPOW_RVN: return m_bench_algo_perf[BenchAlgo::KAWPOW_RVN];
|
||||
case Algorithm::RX_0: return m_bench_algo_perf[BenchAlgo::RX_0];
|
||||
case Algorithm::RX_LOKI: return m_bench_algo_perf[BenchAlgo::RX_0];
|
||||
case Algorithm::RX_SFX: return m_bench_algo_perf[BenchAlgo::RX_0];
|
||||
case Algorithm::RX_WOW: return m_bench_algo_perf[BenchAlgo::RX_WOW];
|
||||
case Algorithm::RX_ARQ: return m_bench_algo_perf[BenchAlgo::RX_ARQ];
|
||||
case Algorithm::RX_KEVA: return m_bench_algo_perf[BenchAlgo::RX_KEVA];
|
||||
case Algorithm::RX_DEFYX: return m_bench_algo_perf[BenchAlgo::RX_DEFYX];
|
||||
default: return 0.0f;
|
||||
}
|
||||
}
|
||||
|
@ -189,9 +197,23 @@ void Benchmark::onJobResult(const JobResult& result) {
|
|||
LOG_ALERT(" ===> Starting benchmark of %s algo", Algorithm(ba2a[m_bench_algo]).shortName());
|
||||
m_bench_start = now; // time of measurements start (in ms)
|
||||
} else if (now - m_bench_start > static_cast<unsigned>(m_controller->config()->benchAlgoTime()*1000)) { // end of benchmark round for m_bench_algo
|
||||
const float hashrate = static_cast<float>(m_hash_count) * result.diff / (now - m_bench_start) * 1000.0f;
|
||||
double t[3] = { 0.0 };
|
||||
for (auto backend : m_controller->miner()->backends()) {
|
||||
const Hashrate *hr = backend->hashrate();
|
||||
if (!hr) {
|
||||
continue;
|
||||
}
|
||||
t[0] += hr->calc(Hashrate::ShortInterval);
|
||||
t[1] += hr->calc(Hashrate::MediumInterval);
|
||||
t[2] += hr->calc(Hashrate::LargeInterval);
|
||||
}
|
||||
double hashrate = 0.0f;
|
||||
if (!(hashrate = t[2]))
|
||||
if (!(hashrate = t[1]))
|
||||
if (!(hashrate = t[0]))
|
||||
hashrate = static_cast<double>(m_hash_count) * result.diff / (now - m_bench_start) * 1000.0f;
|
||||
m_bench_algo_perf[m_bench_algo] = hashrate; // store hashrate result
|
||||
LOG_ALERT(" ===> %s hasrate: %f", Algorithm(ba2a[m_bench_algo]).shortName(), hashrate);
|
||||
LOG_ALERT(" ===> %s hashrate: %f", Algorithm(ba2a[m_bench_algo]).shortName(), hashrate);
|
||||
run_next_bench_algo(m_bench_algo);
|
||||
}
|
||||
}
|
||||
|
@ -201,4 +223,4 @@ uint64_t Benchmark::get_now() const { // get current time in ms
|
|||
return time_point_cast<milliseconds>(high_resolution_clock::now()).time_since_epoch().count();
|
||||
}
|
||||
|
||||
} // namespace xmrig
|
||||
} // namespace xmrig
|
||||
|
|
|
@ -31,38 +31,46 @@ class Job;
|
|||
class Benchmark : public IJobResultListener {
|
||||
|
||||
enum BenchAlgo : int {
|
||||
AR2_CHUKWA, // "argon2/chukwa"
|
||||
RX_0, // "rx/0" RandomX (Monero).
|
||||
RX_WOW, // "rx/wow" RandomWOW (Wownero).
|
||||
DEFYX, // "defyx DefyX.
|
||||
RX_ARQ, // "rx/arq" RandomARQ (Arqma).
|
||||
CN_R, // "cn/r" CryptoNightR (Monero's variant 4).
|
||||
CN_GPU, // "cn/gpu" CryptoNight-GPU (Ryo).
|
||||
CN_LITE_1, // "cn-lite/1" CryptoNight-Lite variant 1.
|
||||
CN_HEAVY_TUBE, // "cn-heavy/tube" CryptoNight-Heavy (modified, TUBE only).
|
||||
CN_PICO_0, // "cn-pico" CryptoNight Turtle (TRTL)
|
||||
ASTROBWT_DERO, // "astrobwt" AstroBWT (Dero)
|
||||
CN_PICO_0, // "cn-pico" CryptoNight-Pico.
|
||||
CN_CCX, // "cn/ccx" Conceal (CCX).
|
||||
CN_GPU, // "cn/gpu" CryptoNight-GPU (Ryo).
|
||||
AR2_CHUKWA, // "argon2/chukwa" Argon2id (Chukwa).
|
||||
AR2_WRKZ, // "argon2/wrkz" Argon2id (WRKZ).
|
||||
ASTROBWT_DERO, // "astrobwt" AstroBWT (Dero).
|
||||
KAWPOW_RVN, // "kawpow/rvn" KawPow (RVN).
|
||||
RX_0, // "rx/0" RandomX (Monero).
|
||||
RX_WOW, // "rx/wow" RandomWOW (Wownero).
|
||||
RX_ARQ, // "rx/arq" RandomARQ (Arqma).
|
||||
RX_KEVA, // "rx/keva" RandomKEVA (Keva).
|
||||
RX_DEFYX, // "defyx DefyX.
|
||||
MAX,
|
||||
MIN = 0,
|
||||
INVALID = -1,
|
||||
};
|
||||
|
||||
const Algorithm::Id ba2a[BenchAlgo::MAX] = {
|
||||
Algorithm::AR2_CHUKWA,
|
||||
Algorithm::RX_0,
|
||||
Algorithm::RX_WOW,
|
||||
Algorithm::DEFYX,
|
||||
Algorithm::RX_ARQ,
|
||||
Algorithm::CN_R,
|
||||
Algorithm::CN_GPU,
|
||||
Algorithm::CN_LITE_1,
|
||||
Algorithm::CN_HEAVY_TUBE,
|
||||
Algorithm::CN_PICO_0,
|
||||
Algorithm::CN_CCX,
|
||||
Algorithm::CN_GPU,
|
||||
Algorithm::AR2_CHUKWA,
|
||||
Algorithm::AR2_WRKZ,
|
||||
Algorithm::ASTROBWT_DERO,
|
||||
Algorithm::KAWPOW_RVN,
|
||||
Algorithm::RX_0,
|
||||
Algorithm::RX_WOW,
|
||||
Algorithm::RX_ARQ,
|
||||
Algorithm::RX_KEVA,
|
||||
Algorithm::RX_DEFYX,
|
||||
};
|
||||
|
||||
Job* m_bench_job[BenchAlgo::MAX];
|
||||
float m_bench_algo_perf[BenchAlgo::MAX];
|
||||
double m_bench_algo_perf[BenchAlgo::MAX];
|
||||
|
||||
Controller* m_controller; // to get access to config and network
|
||||
bool m_isNewBenchRun; // true if benchmark is need to be executed or was executed
|
||||
|
@ -74,7 +82,7 @@ class Benchmark : public IJobResultListener {
|
|||
std::set<uint32_t> m_backends_started; // id of backend started for benchmark
|
||||
|
||||
uint64_t get_now() const; // get current time in ms
|
||||
float get_algo_perf(Algorithm::Id algo) const; // get algo perf based on m_bench_algo_perf
|
||||
double get_algo_perf(Algorithm::Id algo) const; // get algo perf based on m_bench_algo_perf
|
||||
void start(const Benchmark::BenchAlgo); // start benchmark for specified perf algo
|
||||
void finish(); // end of benchmarks, switch to jobs from the pool (network), fill algo_perf
|
||||
void onJobResult(const JobResult&) override; // onJobResult is called after each computed benchmark hash
|
||||
|
@ -89,7 +97,7 @@ class Benchmark : public IJobResultListener {
|
|||
void start(); // start benchmarks
|
||||
|
||||
bool isNewBenchRun() const { return m_isNewBenchRun; }
|
||||
float algo_perf[Algorithm::MAX];
|
||||
double algo_perf[Algorithm::MAX];
|
||||
|
||||
rapidjson::Value toJSON(rapidjson::Document &doc) const;
|
||||
void read(const rapidjson::Value &value);
|
||||
|
|
|
@ -59,15 +59,20 @@ int xmrig::Controller::init()
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef XMRIG_FEATURE_BENCHMARK
|
||||
void xmrig::Controller::pre_start()
|
||||
{
|
||||
m_miner = new Miner(this);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void xmrig::Controller::start()
|
||||
{
|
||||
Base::start();
|
||||
#ifndef XMRIG_FEATURE_BENCHMARK
|
||||
m_miner = new Miner(this);
|
||||
#endif
|
||||
network()->connect();
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,9 @@ public:
|
|||
~Controller() override;
|
||||
|
||||
int init() override;
|
||||
# ifdef XMRIG_FEATURE_BENCHMARK
|
||||
void pre_start();
|
||||
# endif
|
||||
void start() override;
|
||||
void stop() override;
|
||||
|
||||
|
|
|
@ -166,7 +166,13 @@ bool xmrig::Config::isShouldSave() const
|
|||
}
|
||||
# endif
|
||||
|
||||
return (m_upgrade || cpu().isShouldSave() || m_benchmark.isNewBenchRun());
|
||||
# ifdef XMRIG_FEATURE_BENCHMARK
|
||||
if (m_benchmark.isNewBenchRun()) {
|
||||
return true;
|
||||
}
|
||||
# endif
|
||||
|
||||
return (m_upgrade || cpu().isShouldSave());
|
||||
}
|
||||
|
||||
|
||||
|
@ -177,7 +183,6 @@ bool xmrig::Config::read(const IJsonReader &reader, const char *fileName)
|
|||
}
|
||||
|
||||
d_ptr->cpu.read(reader.getValue(kCPU));
|
||||
m_benchmark.read(reader.getValue("algo-perf"));
|
||||
|
||||
# ifdef XMRIG_ALGO_RANDOMX
|
||||
if (!d_ptr->rx.read(reader.getValue(kRandomX))) {
|
||||
|
@ -197,6 +202,10 @@ bool xmrig::Config::read(const IJsonReader &reader, const char *fileName)
|
|||
d_ptr->healthPrintTime = reader.getUint(kHealthPrintTime, d_ptr->healthPrintTime);
|
||||
# endif
|
||||
|
||||
# ifdef XMRIG_FEATURE_BENCHMARK
|
||||
m_benchmark.read(reader.getValue(kAlgoPerf));
|
||||
# endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -254,7 +263,9 @@ void xmrig::Config::getJSON(rapidjson::Document &doc) const
|
|||
doc.AddMember(StringRef(kVerbose), Log::verbose(), allocator);
|
||||
doc.AddMember(StringRef(kWatch), m_watch, allocator);
|
||||
|
||||
doc.AddMember("algo-perf", m_benchmark.toJSON(doc), allocator);
|
||||
doc.AddMember("rebench-algo", isRebenchAlgo(), allocator);
|
||||
doc.AddMember("bench-algo-time", benchAlgoTime(), allocator);
|
||||
# ifdef XMRIG_FEATURE_BENCHMARK
|
||||
doc.AddMember(StringRef(kRebenchAlgo), isRebenchAlgo(), allocator);
|
||||
doc.AddMember(StringRef(kBenchAlgoTime), benchAlgoTime(), allocator);
|
||||
doc.AddMember(StringRef(kAlgoPerf), m_benchmark.toJSON(doc), allocator);
|
||||
# endif
|
||||
}
|
||||
|
|
|
@ -33,7 +33,9 @@
|
|||
#include "backend/cpu/CpuConfig.h"
|
||||
#include "base/kernel/config/BaseConfig.h"
|
||||
#include "base/tools/Object.h"
|
||||
#ifdef XMRIG_FEATURE_BENCHMARK
|
||||
#include "core/Benchmark.h"
|
||||
#endif
|
||||
|
||||
|
||||
namespace xmrig {
|
||||
|
@ -59,7 +61,6 @@ public:
|
|||
# ifdef XMRIG_FEATURE_OPENCL
|
||||
const OclConfig &cl() const;
|
||||
# endif
|
||||
inline Benchmark &benchmark() { return m_benchmark; }
|
||||
|
||||
# ifdef XMRIG_FEATURE_CUDA
|
||||
const CudaConfig &cuda() const;
|
||||
|
@ -79,9 +80,15 @@ public:
|
|||
bool read(const IJsonReader &reader, const char *fileName) override;
|
||||
void getJSON(rapidjson::Document &doc) const override;
|
||||
|
||||
# ifdef XMRIG_FEATURE_BENCHMARK
|
||||
inline Benchmark &benchmark() { return m_benchmark; }
|
||||
# endif
|
||||
|
||||
private:
|
||||
ConfigPrivate *d_ptr;
|
||||
# ifdef XMRIG_FEATURE_BENCHMARK
|
||||
Benchmark m_benchmark;
|
||||
# endif
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue