Merge xmrig v6.6.1 into master

This commit is contained in:
MoneroOcean 2020-11-26 03:57:41 +00:00
commit 821c04ed0e
15 changed files with 139 additions and 83 deletions

View file

@ -62,20 +62,6 @@ namespace xmrig {
static constexpr uint32_t kReserveCount = 32768;
template<size_t N>
inline bool nextRound(WorkerJob<N> &job, uint32_t benchSize)
{
if (!job.nextRound(benchSize ? 1 : kReserveCount, 1)) {
JobResults::done(job.currentJob());
return false;
}
return true;
}
} // namespace xmrig
@ -92,7 +78,6 @@ xmrig::CpuWorker<N>::CpuWorker(size_t id, const CpuLaunchData &data) :
m_astrobwtMaxSize(data.astrobwtMaxSize * 1000),
m_miner(data.miner),
m_threads(data.threads),
m_benchSize(data.benchSize),
m_ctx()
{
m_memory = new VirtualMemory(m_algorithm.l3() * N, data.hugePages, false, true, m_node);
@ -252,12 +237,12 @@ void xmrig::CpuWorker<N>::start()
# ifdef XMRIG_FEATURE_BENCHMARK
if (m_benchSize) {
if (current_job_nonces[0] >= m_benchSize) {
return BenchState::done(m_benchData, m_benchDiff, Chrono::steadyMSecs());;
return BenchState::done();
}
// Make each hash dependent on the previous one in single thread benchmark to prevent cheating with multiple threads
if (m_threads == 1) {
*(uint64_t*)(m_job.blob()) ^= m_benchData;
*(uint64_t*)(m_job.blob()) ^= BenchState::data();
}
}
# endif
@ -272,7 +257,7 @@ void xmrig::CpuWorker<N>::start()
randomx_calculate_hash_first(m_vm, tempHash, m_job.blob(), job.size(), job.algorithm());
}
if (!nextRound(m_job, m_benchSize)) {
if (!nextRound()) {
break;
}
@ -292,7 +277,7 @@ void xmrig::CpuWorker<N>::start()
fn(job.algorithm())(m_job.blob(), job.size(), m_hash, m_ctx, job.height());
}
if (!nextRound(m_job, m_benchSize)) {
if (!nextRound()) {
break;
};
}
@ -304,8 +289,7 @@ void xmrig::CpuWorker<N>::start()
# ifdef XMRIG_FEATURE_BENCHMARK
if (m_benchSize) {
if (current_job_nonces[i] < m_benchSize) {
m_benchData ^= value;
m_benchDiff = std::max(m_benchDiff, Job::toDiff(value));
BenchState::add(value);
}
}
else
@ -327,6 +311,25 @@ void xmrig::CpuWorker<N>::start()
}
template<size_t N>
bool xmrig::CpuWorker<N>::nextRound()
{
# ifdef XMRIG_FEATURE_BENCHMARK
const uint32_t count = m_benchSize ? 1U : kReserveCount;
# else
constexpr uint32_t count = kReserveCount;
# endif
if (!m_job.nextRound(count, 1)) {
JobResults::done(m_job.currentJob());
return false;
}
return true;
}
template<size_t N>
bool xmrig::CpuWorker<N>::verify(const Algorithm &algorithm, const uint8_t *referenceValue)
{
@ -407,12 +410,17 @@ void xmrig::CpuWorker<N>::consumeJob()
return;
}
m_job.add(m_miner->job(), m_benchSize ? 1 : kReserveCount, Nonce::CPU);
auto job = m_miner->job();
# ifdef XMRIG_FEATURE_BENCHMARK
m_benchData = 0;
m_benchSize = job.benchSize();
const uint32_t count = m_benchSize ? 1U : kReserveCount;
# else
constexpr uint32_t count = kReserveCount;
# endif
m_job.add(job, count, Nonce::CPU);
# ifdef XMRIG_ALGO_RANDOMX
if (m_job.currentJob().algorithm().family() == Algorithm::RANDOM_X) {
allocateRandomX_VM();