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)
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)
set(CMAKE_EXE_LINKER_FLAGS " -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})
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)
target_link_libraries(xmrigMiner xmrig_cc_common)

View file

@ -6,6 +6,8 @@ if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE Release)
endif()
include(CheckSymbolExists)
if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-strict-aliasing")
@ -23,6 +25,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -maes")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maes")
add_definitions(/DHAVE_ROTR)
endif()
if (WIN32)
@ -46,6 +49,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES MSVC)
add_definitions(/D_CRT_SECURE_NO_WARNINGS)
add_definitions(/D_CRT_NONSTDC_NO_WARNINGS)
add_definitions(/DNOMINMAX)
add_definitions(/DHAVE_ROTR)
elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang)
@ -64,6 +68,11 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang)
else()
set(CMAKE_C_FLAGS "${CMAKE_C_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()

View file

@ -56,6 +56,9 @@ ScratchPadMem Mem::create(ScratchPad** scratchPads, int threadId)
case Options::ALGO_CRYPTONIGHT_HEAVY:
scratchPadSize = MEMORY_HEAVY;
break;
case Options::ALGO_ARGON2_512:
scratchPadSize = MEMORY_ARGON2_512;
break;
case Options::ALGO_CRYPTONIGHT:
default:
scratchPadSize = MEMORY;
@ -63,26 +66,30 @@ ScratchPadMem Mem::create(ScratchPad** scratchPads, int threadId)
}
ScratchPadMem scratchPadMem;
scratchPadMem.realSize = scratchPadSize * getThreadHashFactor(threadId);
scratchPadMem.size = scratchPadSize * getThreadHashFactor(threadId);
scratchPadMem.realSize = Options::isCNAlgo(m_algo) ? scratchPadSize * getThreadHashFactor(threadId) : scratchPadSize;
scratchPadMem.size = Options::isCNAlgo(m_algo) ? scratchPadSize * getThreadHashFactor(threadId) : scratchPadSize;
scratchPadMem.pages = std::max(scratchPadMem.size / MEMORY, static_cast<size_t>(1));
if (Options::isCNAlgo(m_algo)) {
allocate(scratchPadMem, m_useHugePages);
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);
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_double = reinterpret_cast<cn_mainloop_double_fun_ms_abi>(p + 0x2000);
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;
scratchPads[i] = scratchPad;
}
} else {
scratchPadMem.hugePages = scratchPadMem.pages;
}
m_totalPages += scratchPadMem.pages;
m_totalHugepages += scratchPadMem.hugePages;
@ -95,9 +102,11 @@ void Mem::release(ScratchPad** scratchPads, ScratchPadMem& scratchPadMem, int th
m_totalPages -= scratchPadMem.pages;
m_totalHugepages -= scratchPadMem.hugePages;
if (Options::isCNAlgo(m_algo)) {
release(scratchPadMem);
for (size_t i = 0; i < getThreadHashFactor(threadId); ++i) {
_mm_free(scratchPads[i]);
}
}
}

View file

@ -52,6 +52,7 @@ public:
ALGO_CRYPTONIGHT_ULTRALITE, /* CryptoNight-Ultralite (256KB ScratchPad) */
ALGO_CRYPTONIGHT_EXTREMELITE, /* CryptoNight-Verylite (128KB ScratchPad) */
ALGO_CRYPTONIGHT_HEAVY, /* CryptoNight-Heavy (4MB ScratchPad) */
ALGO_ARGON2_512, /* Argon2-Chuckwa (No pre allocated ScratchPad) */
};
enum AlgoVariant {
@ -126,6 +127,7 @@ public:
inline int64_t multiHashThreadMask() const { return m_multiHashThreadMask; }
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; }
const char *algoName() const;

View file

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

View file

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