Added support for multi-algorithm CPU threads settings.

This commit is contained in:
XMRig 2019-07-02 22:56:28 +07:00
parent 83fdbbf29c
commit b92807e8d8
24 changed files with 595 additions and 109 deletions

View file

@ -31,14 +31,14 @@
#include "crypto/common/VirtualMemory.h"
#include "Mem.h"
#include "rapidjson/document.h"
#include "workers/CpuThread.h"
#include "workers/CpuThreadLegacy.h"
static const xmrig::CnHash cnHash;
xmrig::CpuThread::CpuThread(size_t index, Algorithm algorithm, AlgoVariant av, Multiway multiway, int64_t affinity, int priority, bool softAES, bool prefetch, Assembly assembly) :
xmrig::CpuThreadLegacy::CpuThreadLegacy(size_t index, Algorithm algorithm, AlgoVariant av, Multiway multiway, int64_t affinity, int priority, bool softAES, bool prefetch, Assembly assembly) :
m_algorithm(algorithm),
m_av(av),
m_assembly(assembly),
@ -52,20 +52,20 @@ xmrig::CpuThread::CpuThread(size_t index, Algorithm algorithm, AlgoVariant av, M
}
xmrig::cn_hash_fun xmrig::CpuThread::fn(const Algorithm &algorithm) const
xmrig::cn_hash_fun xmrig::CpuThreadLegacy::fn(const Algorithm &algorithm) const
{
return cnHash.fn(algorithm, m_av, m_assembly);
}
bool xmrig::CpuThread::isSoftAES(AlgoVariant av)
bool xmrig::CpuThreadLegacy::isSoftAES(AlgoVariant av)
{
return av == AV_SINGLE_SOFT || av == AV_DOUBLE_SOFT || av > AV_PENTA;
}
xmrig::CpuThread *xmrig::CpuThread::createFromAV(size_t index, const Algorithm &algorithm, AlgoVariant av, int64_t affinity, int priority, Assembly assembly)
xmrig::CpuThreadLegacy *xmrig::CpuThreadLegacy::createFromAV(size_t index, const Algorithm &algorithm, AlgoVariant av, int64_t affinity, int priority, Assembly assembly)
{
assert(av > AV_AUTO && av < AV_MAX);
@ -88,11 +88,11 @@ xmrig::CpuThread *xmrig::CpuThread::createFromAV(size_t index, const Algorithm &
}
}
return new CpuThread(index, algorithm, av, multiway(av), cpuId, priority, isSoftAES(av), false, assembly);
return new CpuThreadLegacy(index, algorithm, av, multiway(av), cpuId, priority, isSoftAES(av), false, assembly);
}
xmrig::CpuThread *xmrig::CpuThread::createFromData(size_t index, const Algorithm &algorithm, const CpuThread::Data &data, int priority, bool softAES)
xmrig::CpuThreadLegacy *xmrig::CpuThreadLegacy::createFromData(size_t index, const Algorithm &algorithm, const CpuThreadLegacy::Data &data, int priority, bool softAES)
{
int av = AV_AUTO;
const Multiway multiway = data.multiway;
@ -106,11 +106,11 @@ xmrig::CpuThread *xmrig::CpuThread::createFromData(size_t index, const Algorithm
assert(av > AV_AUTO && av < AV_MAX);
return new CpuThread(index, algorithm, static_cast<AlgoVariant>(av), multiway, data.affinity, priority, softAES, false, data.assembly);
return new CpuThreadLegacy(index, algorithm, static_cast<AlgoVariant>(av), multiway, data.affinity, priority, softAES, false, data.assembly);
}
xmrig::CpuThread::Data xmrig::CpuThread::parse(const rapidjson::Value &object)
xmrig::CpuThreadLegacy::Data xmrig::CpuThreadLegacy::parse(const rapidjson::Value &object)
{
Data data;
@ -140,7 +140,7 @@ xmrig::CpuThread::Data xmrig::CpuThread::parse(const rapidjson::Value &object)
}
xmrig::IThread::Multiway xmrig::CpuThread::multiway(AlgoVariant av)
xmrig::IThread::Multiway xmrig::CpuThreadLegacy::multiway(AlgoVariant av)
{
switch (av) {
case AV_SINGLE:
@ -172,7 +172,7 @@ xmrig::IThread::Multiway xmrig::CpuThread::multiway(AlgoVariant av)
#ifdef APP_DEBUG
void xmrig::CpuThread::print() const
void xmrig::CpuThreadLegacy::print() const
{
LOG_DEBUG(GREEN_BOLD("CPU thread: ") " index " WHITE_BOLD("%zu") ", multiway " WHITE_BOLD("%d") ", av " WHITE_BOLD("%d") ",",
index(), static_cast<int>(multiway()), static_cast<int>(m_av));
@ -187,7 +187,7 @@ void xmrig::CpuThread::print() const
#ifdef XMRIG_FEATURE_API
rapidjson::Value xmrig::CpuThread::toAPI(rapidjson::Document &doc) const
rapidjson::Value xmrig::CpuThreadLegacy::toAPI(rapidjson::Document &doc) const
{
using namespace rapidjson;
@ -206,7 +206,7 @@ rapidjson::Value xmrig::CpuThread::toAPI(rapidjson::Document &doc) const
#endif
rapidjson::Value xmrig::CpuThread::toConfig(rapidjson::Document &doc) const
rapidjson::Value xmrig::CpuThreadLegacy::toConfig(rapidjson::Document &doc) const
{
using namespace rapidjson;

View file

@ -22,8 +22,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef XMRIG_CPUTHREAD_H
#define XMRIG_CPUTHREAD_H
#ifndef XMRIG_CPUTHREADLEGACY_H
#define XMRIG_CPUTHREADLEGACY_H
#include "common/xmrig.h"
@ -37,7 +37,7 @@ struct cryptonight_ctx;
namespace xmrig {
class CpuThread : public IThread
class CpuThreadLegacy : public IThread
{
public:
struct Data
@ -59,13 +59,13 @@ public:
};
CpuThread(size_t index, Algorithm algorithm, AlgoVariant av, Multiway multiway, int64_t affinity, int priority, bool softAES, bool prefetch, Assembly assembly);
CpuThreadLegacy(size_t index, Algorithm algorithm, AlgoVariant av, Multiway multiway, int64_t affinity, int priority, bool softAES, bool prefetch, Assembly assembly);
cn_hash_fun fn(const Algorithm &algorithm) const;
static bool isSoftAES(AlgoVariant av);
static CpuThread *createFromAV(size_t index, const Algorithm &algorithm, AlgoVariant av, int64_t affinity, int priority, Assembly assembly);
static CpuThread *createFromData(size_t index, const Algorithm &algorithm, const CpuThread::Data &data, int priority, bool softAES);
static CpuThreadLegacy *createFromAV(size_t index, const Algorithm &algorithm, AlgoVariant av, int64_t affinity, int priority, Assembly assembly);
static CpuThreadLegacy *createFromData(size_t index, const Algorithm &algorithm, const CpuThreadLegacy::Data &data, int priority, bool softAES);
static Data parse(const rapidjson::Value &object);
static Multiway multiway(AlgoVariant av);
@ -106,4 +106,4 @@ private:
} /* namespace xmrig */
#endif /* XMRIG_CPUTHREAD_H */
#endif /* XMRIG_CPUTHREADLEGACY_H */

View file

@ -28,7 +28,7 @@
#include "crypto/cn/CryptoNight_test.h"
#include "workers/CpuThread.h"
#include "workers/CpuThreadLegacy.h"
#include "workers/MultiWorker.h"
#include "workers/Workers.h"

View file

@ -26,7 +26,7 @@
#include "backend/cpu/Cpu.h"
#include "common/Platform.h"
#include "workers/CpuThread.h"
#include "workers/CpuThreadLegacy.h"
#include "workers/ThreadHandle.h"
#include "workers/Worker.h"
@ -39,7 +39,7 @@ Worker::Worker(ThreadHandle *handle) :
m_timestamp(0),
m_count(0),
m_sequence(0),
m_thread(static_cast<xmrig::CpuThread *>(handle->config()))
m_thread(static_cast<xmrig::CpuThreadLegacy *>(handle->config()))
{
if (xmrig::Cpu::info()->threads() > 1 && m_thread->affinity() != -1L) {
Platform::setThreadAffinity(m_thread->affinity());

View file

@ -37,7 +37,7 @@ class ThreadHandle;
namespace xmrig {
class CpuThread;
class CpuThreadLegacy;
}
@ -62,7 +62,7 @@ protected:
std::atomic<uint64_t> m_timestamp;
uint64_t m_count;
uint64_t m_sequence;
xmrig::CpuThread *m_thread;
xmrig::CpuThreadLegacy *m_thread;
};