Merge xmrig v6.16.3 into master

This commit is contained in:
MoneroOcean 2022-01-25 18:56:52 +00:00
commit 2a53e73ed5
18 changed files with 159 additions and 48 deletions

View file

@ -76,12 +76,13 @@ public:
{
m_workersMemory.clear();
m_hugePages.reset();
m_memory = memory;
m_started = 0;
m_errors = 0;
m_threads = threads.size();
m_ways = 0;
m_ts = Chrono::steadyMSecs();
m_memory = memory;
m_started = 0;
m_totalStarted = 0;
m_errors = 0;
m_threads = threads.size();
m_ways = 0;
m_ts = Chrono::steadyMSecs();
}
inline bool started(IWorker *worker, bool ready)

View file

@ -100,7 +100,7 @@ xmrig::CpuWorker<N>::CpuWorker(size_t id, const CpuLaunchData &data) :
}
# ifdef XMRIG_ALGO_GHOSTRIDER
m_ghHelper = ghostrider::create_helper_thread(affinity(), data.affinities);
m_ghHelper = ghostrider::create_helper_thread(affinity(), data.priority, data.affinities);
# endif
}
@ -134,7 +134,7 @@ void xmrig::CpuWorker<N>::allocateRandomX_VM()
RxDataset *dataset = Rx::dataset(m_job.currentJob(), node());
while (dataset == nullptr) {
std::this_thread::sleep_for(std::chrono::milliseconds(200));
std::this_thread::sleep_for(std::chrono::milliseconds(20));
if (Nonce::sequence(Nonce::CPU) == 0) {
return;
@ -256,7 +256,7 @@ void xmrig::CpuWorker<N>::start()
while (Nonce::sequence(Nonce::CPU) > 0) {
if (Nonce::isPaused()) {
do {
std::this_thread::sleep_for(std::chrono::milliseconds(200));
std::this_thread::sleep_for(std::chrono::milliseconds(20));
}
while (Nonce::isPaused() && Nonce::sequence(Nonce::CPU) > 0);

View file

@ -153,9 +153,35 @@ static KawPowCache cache;
#define mix_dst() ("mix[" + std::to_string(mix_seq_dst[(mix_seq_dst_cnt++) % KPHash::REGS]) + "]")
#define mix_cache() ("mix[" + std::to_string(mix_seq_cache[(mix_seq_cache_cnt++) % KPHash::REGS]) + "]")
class KawPowBaton : public Baton<uv_work_t>
{
public:
inline KawPowBaton(const IOclRunner& runner, uint64_t period, uint32_t worksize) :
runner(runner),
period(period),
worksize(worksize)
{}
const IOclRunner& runner;
const uint64_t period;
const uint32_t worksize;
};
class KawPowBuilder
{
public:
~KawPowBuilder()
{
if (m_loop) {
uv_async_send(&m_shutdownAsync);
uv_thread_join(&m_loopThread);
delete m_loop;
}
}
void build_async(const IOclRunner& runner, uint64_t period, uint32_t worksize);
cl_kernel build(const IOclRunner &runner, uint64_t period, uint32_t worksize)
{
std::lock_guard<std::mutex> lock(m_mutex);
@ -368,40 +394,54 @@ private:
st.jcong = 69069 * st.jcong + 1234567;
return ((MWC ^ st.jcong) + st.jsr);
}
};
private:
uv_loop_t* m_loop = nullptr;
uv_thread_t m_loopThread = {};
uv_async_t m_shutdownAsync = {};
class KawPowBaton : public Baton<uv_work_t>
{
public:
inline KawPowBaton(const IOclRunner &runner, uint64_t period, uint32_t worksize) :
runner(runner),
period(period),
worksize(worksize)
{}
const IOclRunner &runner;
const uint64_t period;
const uint32_t worksize;
static void loop(void* data)
{
KawPowBuilder* builder = static_cast<KawPowBuilder*>(data);
uv_run(builder->m_loop, UV_RUN_DEFAULT);
uv_loop_close(builder->m_loop);
}
};
static KawPowBuilder builder;
void KawPowBuilder::build_async(const IOclRunner& runner, uint64_t period, uint32_t worksize)
{
std::lock_guard<std::mutex> lock(m_mutex);
if (!m_loop) {
m_loop = new uv_loop_t{};
uv_loop_init(m_loop);
uv_async_init(m_loop, &m_shutdownAsync, [](uv_async_t* handle) { uv_close(reinterpret_cast<uv_handle_t*>(handle), nullptr); });
uv_thread_create(&m_loopThread, loop, this);
}
KawPowBaton* baton = new KawPowBaton(runner, period, worksize);
uv_queue_work(m_loop, &baton->req,
[](uv_work_t* req) {
KawPowBaton* baton = static_cast<KawPowBaton*>(req->data);
builder.build(baton->runner, baton->period, baton->worksize);
},
[](uv_work_t* req, int) { delete static_cast<KawPowBaton*>(req->data); }
);
}
cl_kernel OclKawPow::get(const IOclRunner &runner, uint64_t height, uint32_t worksize)
{
const uint64_t period = height / KPHash::PERIOD_LENGTH;
KawPowBaton* baton = new KawPowBaton(runner, period + 1, worksize);
uv_queue_work(uv_default_loop(), &baton->req,
[](uv_work_t *req) {
KawPowBaton* baton = static_cast<KawPowBaton*>(req->data);
builder.build(baton->runner, baton->period, baton->worksize);
},
[](uv_work_t *req, int) { delete static_cast<KawPowBaton*>(req->data); }
);
if (!cache.search(runner, period + 1, worksize)) {
builder.build_async(runner, period + 1, worksize);
}
cl_kernel kernel = cache.search(runner, period, worksize);
if (kernel) {