REDACTED-rig/src/crypto/rx/RxConfig.h

129 lines
3.4 KiB
C++

/* XMRig
* Copyright (c) 2018-2023 SChernykh <https://github.com/SChernykh>
* Copyright (c) 2016-2023 XMRig <https://github.com/xmrig>, <support@xmrig.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef XMRIG_RXCONFIG_H
#define XMRIG_RXCONFIG_H
#include "3rdparty/rapidjson/fwd.h"
#ifdef XMRIG_FEATURE_MSR
# include "hw/msr/MsrItem.h"
#endif
#include <vector>
namespace xmrig {
class RxConfig
{
public:
enum Mode : uint32_t {
AutoMode,
FastMode,
LightMode,
ModeMax
};
enum ScratchpadPrefetchMode : uint32_t {
ScratchpadPrefetchOff,
ScratchpadPrefetchT0,
ScratchpadPrefetchNTA,
ScratchpadPrefetchMov,
ScratchpadPrefetchMax,
};
static const char *kCacheQoS;
static const char *kField;
static const char *kInit;
static const char *kInitAVX2;
static const char *kMode;
static const char *kOneGbPages;
static const char *kRdmsr;
static const char *kScratchpadPrefetchMode;
static const char *kWrmsr;
# ifdef XMRIG_FEATURE_HWLOC
static const char *kNUMA;
# endif
bool read(const rapidjson::Value &value);
rapidjson::Value toJSON(rapidjson::Document &doc) const;
# ifdef XMRIG_FEATURE_HWLOC
std::vector<uint32_t> nodeset() const;
# else
inline std::vector<uint32_t> nodeset() const { return std::vector<uint32_t>(); }
# endif
const char *modeName() const;
uint32_t threads(uint32_t limit = 100) const;
inline int initDatasetAVX2() const { return m_initDatasetAVX2; }
inline bool isOneGbPages() const { return m_oneGbPages; }
inline bool rdmsr() const { return m_rdmsr; }
inline bool wrmsr() const { return m_wrmsr; }
inline bool cacheQoS() const { return m_cacheQoS; }
inline Mode mode() const { return m_mode; }
inline ScratchpadPrefetchMode scratchpadPrefetchMode() const { return m_scratchpadPrefetchMode; }
# ifdef XMRIG_FEATURE_MSR
const char *msrPresetName() const;
const MsrItems &msrPreset() const;
# endif
private:
# ifdef XMRIG_FEATURE_MSR
uint32_t msrMod() const;
void readMSR(const rapidjson::Value &value);
bool m_wrmsr = true;
MsrItems m_msrPreset;
# else
bool m_wrmsr = false;
# endif
bool m_cacheQoS = false;
static Mode readMode(const rapidjson::Value &value);
bool m_oneGbPages = false;
bool m_rdmsr = true;
int m_threads = -1;
int m_initDatasetAVX2 = -1;
Mode m_mode = AutoMode;
ScratchpadPrefetchMode m_scratchpadPrefetchMode = ScratchpadPrefetchT0;
# ifdef XMRIG_FEATURE_HWLOC
bool m_numa = true;
std::vector<uint32_t> m_nodeset;
# endif
};
} // namespace xmrig
#endif // XMRIG_RXCONFIG_H