Separate MSR mod for Zen/Zen2 and Zen3

Another +0.5% speedup for Zen2
This commit is contained in:
SChernykh 2020-11-08 19:40:44 +01:00
parent 0a183a59c0
commit c8c0abdb00
3 changed files with 20 additions and 5 deletions

View file

@ -48,7 +48,8 @@ public:
enum MsrMod : uint32_t { enum MsrMod : uint32_t {
MSR_MOD_NONE, MSR_MOD_NONE,
MSR_MOD_RYZEN, MSR_MOD_RYZEN_17H,
MSR_MOD_RYZEN_19H,
MSR_MOD_INTEL, MSR_MOD_INTEL,
MSR_MOD_CUSTOM, MSR_MOD_CUSTOM,
MSR_MOD_MAX MSR_MOD_MAX

View file

@ -195,9 +195,22 @@ xmrig::BasicCpuInfo::BasicCpuInfo() :
cpuid(PROCESSOR_INFO, data); cpuid(PROCESSOR_INFO, data);
const int32_t family = get_masked(data[EAX_Reg], 12, 8) + get_masked(data[EAX_Reg], 28, 20); const int32_t family = get_masked(data[EAX_Reg], 12, 8) + get_masked(data[EAX_Reg], 28, 20);
if (family >= 23) { if (family >= 0x17) {
m_assembly = Assembly::RYZEN; m_assembly = Assembly::RYZEN;
m_msrMod = MSR_MOD_RYZEN;
switch (family) {
case 0x17:
m_msrMod = MSR_MOD_RYZEN_17H;
break;
case 0x19:
m_msrMod = MSR_MOD_RYZEN_19H;
break;
default:
m_msrMod = MSR_MOD_NONE;
break;
}
} }
else { else {
m_assembly = Assembly::BULLDOZER; m_assembly = Assembly::BULLDOZER;

View file

@ -64,16 +64,17 @@ static const std::array<const char *, RxConfig::ModeMax> modeNames = { "auto", "
#ifdef XMRIG_FEATURE_MSR #ifdef XMRIG_FEATURE_MSR
constexpr size_t kMsrArraySize = 4; constexpr size_t kMsrArraySize = 5;
static const std::array<MsrItems, kMsrArraySize> msrPresets = { static const std::array<MsrItems, kMsrArraySize> msrPresets = {
MsrItems(), MsrItems(),
MsrItems{{ 0xC0011020, 0ULL }, { 0xC0011021, 0x40ULL, ~0x20ULL }, { 0xC0011022, 0x1510000ULL }, { 0xC001102b, 0x2000cc16ULL }},
MsrItems{{ 0xC0011020, 0x0004480000000000ULL }, { 0xC0011021, 0x001c000200000040ULL, ~0x20ULL }, { 0xC0011022, 0xc000000401500000ULL }, { 0xC001102b, 0x2000cc14ULL }}, MsrItems{{ 0xC0011020, 0x0004480000000000ULL }, { 0xC0011021, 0x001c000200000040ULL, ~0x20ULL }, { 0xC0011022, 0xc000000401500000ULL }, { 0xC001102b, 0x2000cc14ULL }},
MsrItems{{ 0x1a4, 0xf }}, MsrItems{{ 0x1a4, 0xf }},
MsrItems() MsrItems()
}; };
static const std::array<const char *, kMsrArraySize> modNames = { "none", "ryzen", "intel", "custom" }; static const std::array<const char *, kMsrArraySize> modNames = { "none", "ryzen_17h", "ryzen_19h", "intel", "custom" };
static_assert (kMsrArraySize == ICpuInfo::MSR_MOD_MAX, "kMsrArraySize and MSR_MOD_MAX mismatch"); static_assert (kMsrArraySize == ICpuInfo::MSR_MOD_MAX, "kMsrArraySize and MSR_MOD_MAX mismatch");
#endif #endif