Skip to content

Commit 4b5b8c6

Browse files
committed
Prepare for cn/gpu.
1 parent c27bcab commit 4b5b8c6

18 files changed

+648
-41
lines changed

Diff for: CMakeLists.txt

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ project(xmrig-amd)
44
option(WITH_AEON "CryptoNight-Lite support" ON)
55
option(WITH_SUMO "CryptoNight-Heavy support" ON)
66
option(WITH_CN_PICO "CryptoNight-Pico support" ON)
7+
option(WITH_CN_GPU "CryptoNight-GPU support" ON)
78
option(WITH_HTTPD "HTTP REST API" ON)
89
option(WITH_TLS "Enable OpenSSL support" ON)
910
option(STRICT_CACHE "Enable strict checks for OpenCL cache" ON)
1011
option(BUILD_STATIC "Build static binary" OFF)
12+
option(ARM_TARGET "Force use specific ARM target 8 or 7" 0)
1113

1214
option(WITH_DEBUG_LOG "Enable debug log output, network, etc" OFF)
1315
option(WITH_INTERLEAVE_DEBUG_LOG "Enable debug log for threads interleave" OFF)
@@ -202,6 +204,7 @@ add_definitions(/DCL_USE_DEPRECATED_OPENCL_1_2_APIS)
202204

203205

204206
include(cmake/OpenSSL.cmake)
207+
include(cmake/cn-gpu.cmake)
205208

206209
CHECK_INCLUDE_FILE (syslog.h HAVE_SYSLOG_H)
207210
if (HAVE_SYSLOG_H)
@@ -270,5 +273,5 @@ if (WITH_INTERLEAVE_DEBUG_LOG)
270273
add_definitions(/DAPP_INTERLEAVE_DEBUG)
271274
endif()
272275

273-
add_executable(${CMAKE_PROJECT_NAME} ${HEADERS} ${SOURCES} ${SOURCES_OS} ${HEADERS_CRYPTO} ${SOURCES_CRYPTO} ${SOURCES_SYSLOG} ${HTTPD_SOURCES} ${TLS_SOURCES})
276+
add_executable(${CMAKE_PROJECT_NAME} ${HEADERS} ${SOURCES} ${SOURCES_OS} ${HEADERS_CRYPTO} ${SOURCES_CRYPTO} ${SOURCES_SYSLOG} ${HTTPD_SOURCES} ${TLS_SOURCES} ${CN_GPU_SOURCES})
274277
target_link_libraries(${CMAKE_PROJECT_NAME} ${OPENSSL_LIBRARIES} ${UV_LIBRARIES} ${MHD_LIBRARY} ${EXTRA_LIBS} ${LIBS})

Diff for: cmake/cn-gpu.cmake

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
if (WITH_CN_GPU AND CMAKE_SIZEOF_VOID_P EQUAL 8)
2+
3+
if (XMRIG_ARM)
4+
set(CN_GPU_SOURCES src/crypto/cn_gpu_arm.cpp)
5+
6+
if (CMAKE_CXX_COMPILER_ID MATCHES GNU OR CMAKE_CXX_COMPILER_ID MATCHES Clang)
7+
set_source_files_properties(src/crypto/cn_gpu_arm.cpp PROPERTIES COMPILE_FLAGS "-O3")
8+
endif()
9+
else()
10+
set(CN_GPU_SOURCES src/crypto/cn_gpu_avx.cpp src/crypto/cn_gpu_ssse3.cpp)
11+
12+
if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
13+
set_source_files_properties(src/crypto/cn_gpu_avx.cpp PROPERTIES COMPILE_FLAGS "-O3 -mavx2")
14+
set_source_files_properties(src/crypto/cn_gpu_ssse3.cpp PROPERTIES COMPILE_FLAGS "-O3")
15+
elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang)
16+
set_source_files_properties(src/crypto/cn_gpu_avx.cpp PROPERTIES COMPILE_FLAGS "-mavx2")
17+
elseif (CMAKE_CXX_COMPILER_ID MATCHES MSVC)
18+
set_source_files_properties(src/crypto/cn_gpu_avx.cpp PROPERTIES COMPILE_FLAGS "/arch:AVX")
19+
endif()
20+
endif()
21+
else()
22+
set(CN_GPU_SOURCES "")
23+
24+
add_definitions(/DXMRIG_NO_CN_GPU)
25+
endif()

Diff for: cmake/cpu.cmake

+28-10
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,37 @@ if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|AMD64)$")
77
add_definitions(/DRAPIDJSON_SSE2)
88
endif()
99

10+
if (NOT ARM_TARGET)
11+
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|armv8-a)$")
12+
set(ARM_TARGET 8)
13+
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv7|armv7f|armv7s|armv7k|armv7-a|armv7l)$")
14+
set(ARM_TARGET 7)
15+
endif()
16+
endif()
1017

11-
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64)$")
18+
if (ARM_TARGET AND ARM_TARGET GREATER 6)
1219
set(XMRIG_ARM ON)
13-
set(XMRIG_ARMv8 ON)
1420
set(WITH_LIBCPUID OFF)
15-
1621
add_definitions(/DXMRIG_ARM)
17-
add_definitions(/DXMRIG_ARMv8)
18-
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv7|armv7f|armv7s|armv7k|armv7-a|armv7l)$")
19-
set(XMRIG_ARM ON)
20-
set(XMRIG_ARMv7 ON)
21-
set(WITH_LIBCPUID OFF)
2222

23-
add_definitions(/DXMRIG_ARM)
24-
add_definitions(/DXMRIG_ARMv7)
23+
message(STATUS "Use ARM_TARGET=${ARM_TARGET} (${CMAKE_SYSTEM_PROCESSOR})")
24+
25+
include(CheckCXXCompilerFlag)
26+
27+
if (ARM_TARGET EQUAL 8)
28+
set(XMRIG_ARMv8 ON)
29+
add_definitions(/DXMRIG_ARMv8)
30+
31+
CHECK_CXX_COMPILER_FLAG(-march=armv8-a+crypto XMRIG_ARM_CRYPTO)
32+
33+
if (XMRIG_ARM_CRYPTO)
34+
add_definitions(/DXMRIG_ARM_CRYPTO)
35+
set(ARM8_CXX_FLAGS "-march=armv8-a+crypto")
36+
else()
37+
set(ARM8_CXX_FLAGS "-march=armv8-a")
38+
endif()
39+
elseif (ARM_TARGET EQUAL 7)
40+
set(XMRIG_ARMv7 ON)
41+
add_definitions(/DXMRIG_ARMv7)
42+
endif()
2543
endif()

Diff for: cmake/flags.cmake

+4-4
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
1919
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast -s")
2020

2121
if (XMRIG_ARMv8)
22-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crypto")
23-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+crypto -flax-vector-conversions")
22+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ARM8_CXX_FLAGS}")
23+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARM8_CXX_FLAGS} -flax-vector-conversions")
2424
elseif (XMRIG_ARMv7)
2525
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon")
2626
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon -flax-vector-conversions")
@@ -60,8 +60,8 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang)
6060
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast")
6161

6262
if (XMRIG_ARMv8)
63-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crypto")
64-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+crypto")
63+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ARM8_CXX_FLAGS}")
64+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARM8_CXX_FLAGS}")
6565
elseif (XMRIG_ARMv7)
6666
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon -march=${CMAKE_SYSTEM_PROCESSOR}")
6767
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon -march=${CMAKE_SYSTEM_PROCESSOR}")

Diff for: src/common/cpu/BasicCpuInfo.cpp

+17-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
55
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
66
* Copyright 2016 Jay D Dee <[email protected]>
7-
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
8-
* Copyright 2016-2018 XMRig <https://github.com/xmrig>, <[email protected]>
7+
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
8+
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
9+
* Copyright 2016-2019 XMRig <[email protected]>
910
*
1011
* This program is free software: you can redistribute it and/or modify
1112
* it under the terms of the GNU General Public License as published by
@@ -35,6 +36,10 @@
3536
# define bit_AES (1 << 25)
3637
#endif
3738

39+
#ifndef bit_AVX2
40+
# define bit_AVX2 (1 << 5)
41+
#endif
42+
3843

3944
#include "common/cpu/BasicCpuInfo.h"
4045

@@ -93,9 +98,19 @@ static inline bool has_aes_ni()
9398
}
9499

95100

101+
static inline bool has_avx2()
102+
{
103+
int32_t cpu_info[4] = { 0 };
104+
cpuid(EXTENDED_FEATURES, cpu_info);
105+
106+
return (cpu_info[EBX_Reg] & bit_AVX2) != 0;
107+
}
108+
109+
96110
xmrig::BasicCpuInfo::BasicCpuInfo() :
97111
m_assembly(ASM_NONE),
98112
m_aes(has_aes_ni()),
113+
m_avx2(has_avx2()),
99114
m_brand(),
100115
m_threads(std::thread::hardware_concurrency())
101116
{

Diff for: src/common/cpu/BasicCpuInfo.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
55
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
66
* Copyright 2016 Jay D Dee <[email protected]>
7-
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
8-
* Copyright 2016-2018 XMRig <https://github.com/xmrig>, <[email protected]>
7+
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
8+
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
9+
* Copyright 2016-2019 XMRig <[email protected]>
910
*
1011
* This program is free software: you can redistribute it and/or modify
1112
* it under the terms of the GNU General Public License as published by
@@ -41,6 +42,7 @@ class BasicCpuInfo : public ICpuInfo
4142

4243
inline Assembly assembly() const override { return m_assembly; }
4344
inline bool hasAES() const override { return m_aes; }
45+
inline bool hasAVX2() const override { return m_avx2; }
4446
inline bool isSupported() const override { return true; }
4547
inline const char *brand() const override { return m_brand; }
4648
inline int32_t cores() const override { return -1; }
@@ -59,6 +61,7 @@ class BasicCpuInfo : public ICpuInfo
5961
private:
6062
Assembly m_assembly;
6163
bool m_aes;
64+
bool m_avx2;
6265
char m_brand[64];
6366
int32_t m_threads;
6467
};

Diff for: src/common/cpu/BasicCpuInfo_arm.cpp

+15-4
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
55
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
66
* Copyright 2016 Jay D Dee <[email protected]>
7-
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
8-
* Copyright 2016-2018 XMRig <https://github.com/xmrig>, <[email protected]>
7+
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
8+
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
9+
* Copyright 2016-2019 XMRig <[email protected]>
910
*
1011
* This program is free software: you can redistribute it and/or modify
1112
* it under the terms of the GNU General Public License as published by
@@ -24,19 +25,29 @@
2425
#include <string.h>
2526
#include <thread>
2627

28+
#if __ARM_FEATURE_CRYPTO
29+
# include <sys/auxv.h>
30+
# include <asm/hwcap.h>
31+
#endif
32+
2733

2834
#include "common/cpu/BasicCpuInfo.h"
2935

3036

3137
xmrig::BasicCpuInfo::BasicCpuInfo() :
3238
m_aes(false),
39+
m_avx2(false),
3340
m_brand(),
3441
m_threads(std::thread::hardware_concurrency())
3542
{
36-
memcpy(m_brand, "Unknown", 7);
43+
# ifdef XMRIG_ARMv8
44+
memcpy(m_brand, "ARMv8", 5);
45+
# else
46+
memcpy(m_brand, "ARMv7", 5);
47+
# endif
3748

3849
# if __ARM_FEATURE_CRYPTO
39-
m_aes = true;
50+
m_aes = getauxval(AT_HWCAP) & HWCAP_AES;
4051
# endif
4152
}
4253

Diff for: src/common/crypto/Algorithm.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ static AlgoData const algorithms[] = {
8686
{ "cryptonight-ultralite", "cn-ultralite", xmrig::CRYPTONIGHT_PICO, xmrig::VARIANT_TRTL },
8787
{ "cryptonight_turtle", "cn_turtle", xmrig::CRYPTONIGHT_PICO, xmrig::VARIANT_TRTL },
8888
# endif
89+
90+
# ifndef XMRIG_NO_CN_GPU
91+
{ "cryptonight/gpu", "cn/gpu", xmrig::CRYPTONIGHT, xmrig::VARIANT_GPU },
92+
# endif
8993
};
9094

9195

@@ -105,6 +109,8 @@ static AlgoData const xmrStakAlgorithms[] = {
105109
{ "cryptonight_masari", nullptr, xmrig::CRYPTONIGHT, xmrig::VARIANT_MSR },
106110
{ "cryptonight-bittube2", nullptr, xmrig::CRYPTONIGHT_HEAVY, xmrig::VARIANT_TUBE }, // bittube-miner
107111
{ "cryptonight_alloy", nullptr, xmrig::CRYPTONIGHT, xmrig::VARIANT_XAO }, // xmr-stak-alloy
112+
{ "cryptonight_turtle", nullptr, xmrig::CRYPTONIGHT_PICO, xmrig::VARIANT_TRTL },
113+
{ "cryptonight_gpu", nullptr, xmrig::CRYPTONIGHT, xmrig::VARIANT_GPU },
108114
};
109115
#endif
110116

@@ -120,7 +126,8 @@ static const char *variants[] = {
120126
"rto",
121127
"2",
122128
"half",
123-
"trtl"
129+
"trtl",
130+
"gpu"
124131
};
125132

126133

Diff for: src/common/interfaces/ICpuInfo.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
55
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
66
* Copyright 2016 Jay D Dee <[email protected]>
7-
* Copyright 2016-2018 XMRig <[email protected]>
7+
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
8+
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
9+
* Copyright 2016-2019 XMRig <[email protected]>
810
*
911
* This program is free software: you can redistribute it and/or modify
1012
* it under the terms of the GNU General Public License as published by
@@ -40,6 +42,7 @@ class ICpuInfo
4042
virtual ~ICpuInfo() {}
4143

4244
virtual bool hasAES() const = 0;
45+
virtual bool hasAVX2() const = 0;
4346
virtual bool isSupported() const = 0;
4447
virtual bool isX64() const = 0;
4548
virtual const char *brand() const = 0;

Diff for: src/common/net/Pool.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
55
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
66
* Copyright 2016 Jay D Dee <[email protected]>
7-
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
7+
* Copyright 2017-2019 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
88
* Copyright 2018-2019 SChernykh <https://github.com/SChernykh>
99
* Copyright 2016-2019 XMRig <https://github.com/xmrig>, <[email protected]>
1010
*
@@ -419,6 +419,7 @@ void Pool::rebuild()
419419
addVariant(xmrig::VARIANT_XHV);
420420
addVariant(xmrig::VARIANT_XAO);
421421
addVariant(xmrig::VARIANT_RTO);
422+
addVariant(xmrig::VARIANT_GPU);
422423
addVariant(xmrig::VARIANT_AUTO);
423424
# endif
424425
}

Diff for: src/common/xmrig.h

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ enum Variant {
7373
VARIANT_2 = 8, // CryptoNight variant 2
7474
VARIANT_HALF = 9, // CryptoNight variant 2 with half iterations (Masari/Stellite)
7575
VARIANT_TRTL = 10, // CryptoNight Turtle (TRTL)
76+
VARIANT_GPU = 11, // CryptoNight-GPU (Ryo)
7677
VARIANT_MAX
7778
};
7879

0 commit comments

Comments
 (0)