This commit is contained in:
Ben Gräf 2019-07-04 21:35:32 +02:00
parent 4de8768137
commit 26741d686c
6 changed files with 46 additions and 17 deletions

View file

@ -225,6 +225,9 @@ else()
add_definitions(/DXMRIG_NO_ASM) add_definitions(/DXMRIG_NO_ASM)
endif(WITH_ASM AND NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8) endif(WITH_ASM AND NOT XMRIG_ARM AND CMAKE_SIZEOF_VOID_P EQUAL 8)
add_subdirectory(src/3rdparty/argon2)
set(ARGON2_LIBRARY argon2)
if (BUILD_STATIC) if (BUILD_STATIC)
set(CMAKE_EXE_LINKER_FLAGS " -static") set(CMAKE_EXE_LINKER_FLAGS " -static")
endif(BUILD_STATIC) endif(BUILD_STATIC)
@ -250,7 +253,7 @@ add_executable(xmrigMiner ${SOURCES} ${SOURCES_CRYPTO} ${HTTPD_SOURCES} ${SOURCE
set_target_properties(xmrigMiner PROPERTIES OUTPUT_NAME ${MINER_EXECUTABLE_NAME}) set_target_properties(xmrigMiner PROPERTIES OUTPUT_NAME ${MINER_EXECUTABLE_NAME})
target_link_libraries(xmrigMiner xmrig_common xmrig_os_dependencies xmrig_cpuid ${Boost_LIBRARIES} target_link_libraries(xmrigMiner xmrig_common xmrig_os_dependencies xmrig_cpuid ${Boost_LIBRARIES}
${UV_LIBRARIES} ${MHD_LIBRARY} ${EXTRA_LIBS} ${CPUID_LIB}) ${UV_LIBRARIES} ${MHD_LIBRARY} ${EXTRA_LIBS} ${CPUID_LIB} argon2)
if (WITH_CC_CLIENT) if (WITH_CC_CLIENT)
target_link_libraries(xmrigMiner xmrig_cc_common) target_link_libraries(xmrigMiner xmrig_cc_common)

View file

@ -6,6 +6,8 @@ if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE Release) set(CMAKE_BUILD_TYPE Release)
endif() endif()
include(CheckSymbolExists)
if (CMAKE_CXX_COMPILER_ID MATCHES GNU) if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-strict-aliasing") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-strict-aliasing")
@ -23,6 +25,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
else() else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes")
add_definitions(/DHAVE_ROTR)
endif() endif()
if (WIN32) if (WIN32)
@ -46,6 +49,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES MSVC)
add_definitions(/D_CRT_SECURE_NO_WARNINGS) add_definitions(/D_CRT_SECURE_NO_WARNINGS)
add_definitions(/D_CRT_NONSTDC_NO_WARNINGS) add_definitions(/D_CRT_NONSTDC_NO_WARNINGS)
add_definitions(/DNOMINMAX) add_definitions(/DNOMINMAX)
add_definitions(/DHAVE_ROTR)
elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang) elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang)
@ -64,6 +68,11 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang)
else() else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes")
check_symbol_exists("_rotr" "x86intrin.h" HAVE_ROTR)
if (HAVE_ROTR)
add_definitions(/DHAVE_ROTR)
endif()
endif() endif()
endif() endif()

View file

@ -56,6 +56,9 @@ ScratchPadMem Mem::create(ScratchPad** scratchPads, int threadId)
case Options::ALGO_CRYPTONIGHT_HEAVY: case Options::ALGO_CRYPTONIGHT_HEAVY:
scratchPadSize = MEMORY_HEAVY; scratchPadSize = MEMORY_HEAVY;
break; break;
case Options::ALGO_ARGON2_512:
scratchPadSize = MEMORY_ARGON2_512;
break;
case Options::ALGO_CRYPTONIGHT: case Options::ALGO_CRYPTONIGHT:
default: default:
scratchPadSize = MEMORY; scratchPadSize = MEMORY;
@ -63,25 +66,29 @@ ScratchPadMem Mem::create(ScratchPad** scratchPads, int threadId)
} }
ScratchPadMem scratchPadMem; ScratchPadMem scratchPadMem;
scratchPadMem.realSize = scratchPadSize * getThreadHashFactor(threadId); scratchPadMem.realSize = Options::isCNAlgo(m_algo) ? scratchPadSize * getThreadHashFactor(threadId) : scratchPadSize;
scratchPadMem.size = scratchPadSize * getThreadHashFactor(threadId); scratchPadMem.size = Options::isCNAlgo(m_algo) ? scratchPadSize * getThreadHashFactor(threadId) : scratchPadSize;
scratchPadMem.pages = std::max(scratchPadMem.size / MEMORY, static_cast<size_t>(1)); scratchPadMem.pages = std::max(scratchPadMem.size / MEMORY, static_cast<size_t>(1));
allocate(scratchPadMem, m_useHugePages); if (Options::isCNAlgo(m_algo)) {
allocate(scratchPadMem, m_useHugePages);
for (size_t i = 0; i < getThreadHashFactor(threadId); ++i) { for (size_t i = 0; i < getThreadHashFactor(threadId); ++i) {
auto* scratchPad = static_cast<ScratchPad *>(_mm_malloc(sizeof(ScratchPad), 4096)); auto *scratchPad = static_cast<ScratchPad *>(_mm_malloc(sizeof(ScratchPad), 4096));
scratchPad->memory = scratchPadMem.memory + (i * scratchPadSize); scratchPad->memory = scratchPadMem.memory + (i * scratchPadSize);
auto* p = reinterpret_cast<uint8_t*>(allocateExecutableMemory(0x4000)); auto *p = reinterpret_cast<uint8_t *>(allocateExecutableMemory(0x4000));
scratchPad->generated_code = reinterpret_cast<cn_mainloop_fun_ms_abi>(p); scratchPad->generated_code = reinterpret_cast<cn_mainloop_fun_ms_abi>(p);
scratchPad->generated_code_double = reinterpret_cast<cn_mainloop_double_fun_ms_abi>(p + 0x2000); scratchPad->generated_code_double = reinterpret_cast<cn_mainloop_double_fun_ms_abi>(p + 0x2000);
scratchPad->generated_code_data.variant = PowVariant::LAST_ITEM; scratchPad->generated_code_data.variant = PowVariant::LAST_ITEM;
scratchPad->generated_code_data.height = (uint64_t)(-1); scratchPad->generated_code_data.height = (uint64_t) (-1);
scratchPad->generated_code_double_data = scratchPad->generated_code_data; scratchPad->generated_code_double_data = scratchPad->generated_code_data;
scratchPads[i] = scratchPad; scratchPads[i] = scratchPad;
}
} else {
scratchPadMem.hugePages = scratchPadMem.pages;
} }
m_totalPages += scratchPadMem.pages; m_totalPages += scratchPadMem.pages;
@ -95,9 +102,11 @@ void Mem::release(ScratchPad** scratchPads, ScratchPadMem& scratchPadMem, int th
m_totalPages -= scratchPadMem.pages; m_totalPages -= scratchPadMem.pages;
m_totalHugepages -= scratchPadMem.hugePages; m_totalHugepages -= scratchPadMem.hugePages;
release(scratchPadMem); if (Options::isCNAlgo(m_algo)) {
release(scratchPadMem);
for (size_t i = 0; i < getThreadHashFactor(threadId); ++i) { for (size_t i = 0; i < getThreadHashFactor(threadId); ++i) {
_mm_free(scratchPads[i]); _mm_free(scratchPads[i]);
}
} }
} }

View file

@ -52,6 +52,7 @@ public:
ALGO_CRYPTONIGHT_ULTRALITE, /* CryptoNight-Ultralite (256KB ScratchPad) */ ALGO_CRYPTONIGHT_ULTRALITE, /* CryptoNight-Ultralite (256KB ScratchPad) */
ALGO_CRYPTONIGHT_EXTREMELITE, /* CryptoNight-Verylite (128KB ScratchPad) */ ALGO_CRYPTONIGHT_EXTREMELITE, /* CryptoNight-Verylite (128KB ScratchPad) */
ALGO_CRYPTONIGHT_HEAVY, /* CryptoNight-Heavy (4MB ScratchPad) */ ALGO_CRYPTONIGHT_HEAVY, /* CryptoNight-Heavy (4MB ScratchPad) */
ALGO_ARGON2_512, /* Argon2-Chuckwa (No pre allocated ScratchPad) */
}; };
enum AlgoVariant { enum AlgoVariant {
@ -126,6 +127,7 @@ public:
inline int64_t multiHashThreadMask() const { return m_multiHashThreadMask; } inline int64_t multiHashThreadMask() const { return m_multiHashThreadMask; }
inline void setColors(bool colors) { m_colors = colors; } inline void setColors(bool colors) { m_colors = colors; }
inline static bool isCNAlgo(Algo algo) { return algo != Options::ALGO_ARGON2_512; }
inline static void release() { delete m_self; } inline static void release() { delete m_self; }
const char *algoName() const; const char *algoName() const;

View file

@ -45,6 +45,7 @@ enum PowVariant
POW_ZELERIUS, POW_ZELERIUS,
POW_RWZ, POW_RWZ,
POW_UPX2, POW_UPX2,
POW_ARGON2_CHUKWA,
LAST_ITEM LAST_ITEM
}; };
@ -92,6 +93,8 @@ inline std::string getPowVariantName(PowVariant powVariant)
return "rwz"; return "rwz";
case POW_UPX2: case POW_UPX2:
return "upx2"; return "upx2";
case POW_ARGON2_CHUKWA:
return "chuckwa";
case POW_AUTODETECT: case POW_AUTODETECT:
default: default:
return "-1"; return "-1";
@ -179,6 +182,8 @@ inline PowVariant parseVariant(const std::string variant)
powVariant = PowVariant::POW_RWZ; powVariant = PowVariant::POW_RWZ;
} else if (variant == "upx2") { } else if (variant == "upx2") {
powVariant = PowVariant::POW_UPX2; powVariant = PowVariant::POW_UPX2;
} else if (variant == "chukwa" || variant == "trtl-chukwa" || variant == "argon2-chukwa") {
powVariant = PowVariant::POW_ARGON2_CHUKWA;
} }
return powVariant; return powVariant;

View file

@ -39,6 +39,7 @@
#define MEMORY_ULTRA_LITE 262144 /* 256 KiB */ #define MEMORY_ULTRA_LITE 262144 /* 256 KiB */
#define MEMORY_EXTREME_LITE 131072 /* 128 KiB */ #define MEMORY_EXTREME_LITE 131072 /* 128 KiB */
#define MEMORY_HEAVY 4194304 /* 4 MiB */ #define MEMORY_HEAVY 4194304 /* 4 MiB */
#define MEMORY_ARGON2_512 524288 /* 512 KiB */
#define POW_DEFAULT_INDEX_SHIFT 3 #define POW_DEFAULT_INDEX_SHIFT 3
#define POW_XLT_V4_INDEX_SHIFT 4 #define POW_XLT_V4_INDEX_SHIFT 4