WIP
This commit is contained in:
parent
4de8768137
commit
26741d686c
6 changed files with 46 additions and 17 deletions
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
19
src/Mem.cpp
19
src/Mem.cpp
|
@ -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,26 +66,30 @@ 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));
|
||||||
|
|
||||||
|
if (Options::isCNAlgo(m_algo)) {
|
||||||
allocate(scratchPadMem, m_useHugePages);
|
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;
|
||||||
m_totalHugepages += scratchPadMem.hugePages;
|
m_totalHugepages += scratchPadMem.hugePages;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
if (Options::isCNAlgo(m_algo)) {
|
||||||
release(scratchPadMem);
|
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]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue