1
0
mirror of https://github.com/xmrig/xmrig.git synced 2026-01-22 14:32:54 -05:00

Revert "Merge branch 'pr3764' into dev"

This reverts commit 0d9a372e49, reversing
changes made to 1a04bf2904.
This commit is contained in:
XMRig
2026-01-21 21:32:51 +07:00
parent 0d9a372e49
commit db24bf5154
22 changed files with 70 additions and 241 deletions

View File

@@ -1,3 +0,0 @@
[codespell]
skip = ./src/3rdparty,./src/crypto/ghostrider,./src/crypto/randomx/blake2,./src/crypto/cn/sse2neon.h,./src/backend/opencl/cl/cn/groestl256.cl,./src/backend/opencl/cl/cn/jh.cl
ignore-words-list = Carmel,vor

View File

@@ -160,7 +160,7 @@
# v6.16.2
- [#2751](https://github.com/xmrig/xmrig/pull/2751) Fixed crash on CPUs supporting VAES and running GCC-compiled xmrig.
- [#2761](https://github.com/xmrig/xmrig/pull/2761) Fixed broken auto-tuning in GCC Windows build.
- [#2771](https://github.com/xmrig/xmrig/issues/2771) Fixed environment variables support for GhostRider and KawPow.
- [#2771](https://github.com/xmrig/xmrig/issues/2771) Fixed environment variables support for GhostRider and KawPow.
- [#2769](https://github.com/xmrig/xmrig/pull/2769) Performance fixes:
- Fixed several performance bottlenecks introduced in v6.16.1.
- Fixed overall GCC-compiled build performance, it's the same speed as MSVC build now.
@@ -468,7 +468,7 @@
- Compiler for Windows gcc builds updated to v10.1.
# v5.11.1
- [#1652](https://github.com/xmrig/xmrig/pull/1652) Up to 1% RandomX performance improvement on recent AMD CPUs.
- [#1652](https://github.com/xmrig/xmrig/pull/1652) Up to 1% RandomX perfomance improvement on recent AMD CPUs.
- [#1306](https://github.com/xmrig/xmrig/issues/1306) Fixed possible double connection to a pool.
- [#1654](https://github.com/xmrig/xmrig/issues/1654) Fixed build with LibreSSL.
@@ -574,9 +574,9 @@
- Added automatic huge pages configuration on Linux if use the miner with root privileges.
- **Added [automatic Intel prefetchers configuration](https://xmrig.com/docs/miner/randomx-optimization-guide#intel-specific-optimizations) on Linux.**
- Added new option `wrmsr` in `randomx` object with command line equivalent `--randomx-wrmsr=6`.
- [#1396](https://github.com/xmrig/xmrig/pull/1396) [#1401](https://github.com/xmrig/xmrig/pull/1401) New performance optimizations for Ryzen CPUs.
- [#1385](https://github.com/xmrig/xmrig/issues/1385) Added `max-threads-hint` option support for RandomX dataset initialization threads.
- [#1386](https://github.com/xmrig/xmrig/issues/1386) Added `priority` option support for RandomX dataset initialization threads.
- [#1396](https://github.com/xmrig/xmrig/pull/1396) [#1401](https://github.com/xmrig/xmrig/pull/1401) New performance optimizations for Ryzen CPUs.
- [#1385](https://github.com/xmrig/xmrig/issues/1385) Added `max-threads-hint` option support for RandomX dataset initialization threads.
- [#1386](https://github.com/xmrig/xmrig/issues/1386) Added `priority` option support for RandomX dataset initialization threads.
- For official builds all dependencies (libuv, hwloc, openssl) updated to recent versions.
- Windows `msvc` builds now use Visual Studio 2019 instead of 2017.
@@ -622,7 +622,7 @@ This release based on 4.x.x series and include all features from v4.6.2-beta, ch
- Removed command line option `--http-enabled`, HTTP API enabled automatically if any other `--http-*` option provided.
- [#1172](https://github.com/xmrig/xmrig/issues/1172) **Added OpenCL mining backend.**
- [#268](https://github.com/xmrig/xmrig-amd/pull/268) [#270](https://github.com/xmrig/xmrig-amd/pull/270) [#271](https://github.com/xmrig/xmrig-amd/pull/271) [#273](https://github.com/xmrig/xmrig-amd/pull/273) [#274](https://github.com/xmrig/xmrig-amd/pull/274) [#1171](https://github.com/xmrig/xmrig/pull/1171) Added RandomX support for OpenCL, thanks [@SChernykh](https://github.com/SChernykh).
- Algorithm `cn/wow` removed, as no longer alive.
- Algorithm `cn/wow` removed, as no longer alive.
# Previous versions
[doc/CHANGELOG_OLD.md](doc/CHANGELOG_OLD.md)

View File

@@ -1,8 +1,8 @@
# HTTP API
If you want use HTTP API you need enable it (`"enabled": true,`) then choice `port` and optionally `host`. API not available if miner built without HTTP support (`-DWITH_HTTP=OFF`).
If you want use HTTP API you need enable it (`"enabled": true,`) then choice `port` and optionaly `host`. API not available if miner built without HTTP support (`-DWITH_HTTP=OFF`).
Official HTTP client for API: http://workers.xmrig.info/
Offical HTTP client for API: http://workers.xmrig.info/
Example configuration:

View File

@@ -17,7 +17,7 @@ Double check that you see `Huge pages 100%` both for dataset and for all threads
### Benchmark with custom config
You can run benchmark with any configuration you want. Just start without command line parameters, use regular config.json and add `"benchmark":"1M",` on the next line after pool url.
You can run benchmark with any configuration you want. Just start without command line parameteres, use regular config.json and add `"benchmark":"1M",` on the next line after pool url.
# Stress test
@@ -26,4 +26,4 @@ You can also run continuous stress-test that is as close to the real RandomX min
xmrig --stress
xmrig --stress -a rx/wow
```
This will require Internet connection and will run indefinitely.
This will require Internet connection and will run indefinitely.

View File

@@ -57,7 +57,7 @@
# v4.0.0-beta
- [#1172](https://github.com/xmrig/xmrig/issues/1172) **Added OpenCL mining backend.**
- [#268](https://github.com/xmrig/xmrig-amd/pull/268) [#270](https://github.com/xmrig/xmrig-amd/pull/270) [#271](https://github.com/xmrig/xmrig-amd/pull/271) [#273](https://github.com/xmrig/xmrig-amd/pull/273) [#274](https://github.com/xmrig/xmrig-amd/pull/274) [#1171](https://github.com/xmrig/xmrig/pull/1171) Added RandomX support for OpenCL, thanks [@SChernykh](https://github.com/SChernykh).
- Algorithm `cn/wow` removed, as no longer alive.
- Algorithm `cn/wow` removed, as no longer alive.
# v3.2.0
- Added per pool option `coin` with single possible value `monero` for pools without algorithm negotiation, for upcoming Monero fork.
@@ -103,7 +103,7 @@
- [#1105](https://github.com/xmrig/xmrig/issues/1105) Improved auto configuration for `cn-pico` algorithm.
- Added commands `pause` and `resume` via JSON RPC 2.0 API (`POST /json_rpc`).
- Added command line option `--export-topology` for export hwloc topology to a XML file.
- Broken backward compatibility with previous configs and command line, `variant` option replaced to `algo`, global option `algo` removed, all CPU related settings moved to `cpu` object.
- Breaked backward compatibility with previous configs and command line, `variant` option replaced to `algo`, global option `algo` removed, all CPU related settings moved to `cpu` object.
- Options `av`, `safe` and `max-cpu-usage` removed.
- Algorithm `cn/msr` renamed to `cn/fast`.
- Algorithm `cn/xtl` removed.
@@ -122,7 +122,7 @@
- [#1092](https://github.com/xmrig/xmrig/issues/1092) Fixed crash if wrong CPU affinity used.
- [#1103](https://github.com/xmrig/xmrig/issues/1103) Improved auto configuration for RandomX for CPUs where L2 cache is limiting factor.
- [#1105](https://github.com/xmrig/xmrig/issues/1105) Improved auto configuration for `cn-pico` algorithm.
- [#1106](https://github.com/xmrig/xmrig/issues/1106) Fixed `hugepages` field in summary API.
- [#1106](https://github.com/xmrig/xmrig/issues/1106) Fixed `hugepages` field in summary API.
- Added alternative short format for CPU threads.
- Changed format for CPU threads with intensity above 1.
- Name for reference RandomX configuration changed to `rx/test` to avoid potential conflicts in future.
@@ -150,7 +150,7 @@
- [#1050](https://github.com/xmrig/xmrig/pull/1050) Added RandomXL algorithm for [Loki](https://loki.network/), algorithm name used by miner is `randomx/loki` or `rx/loki`.
- Added [flexible](https://github.com/xmrig/xmrig/blob/evo/doc/CPU.md) multi algorithm configuration.
- Added unlimited switching between incompatible algorithms, all mining options can be changed in runtime.
- Broken backward compatibility with previous configs and command line, `variant` option replaced to `algo`, global option `algo` removed, all CPU related settings moved to `cpu` object.
- Breaked backward compatibility with previous configs and command line, `variant` option replaced to `algo`, global option `algo` removed, all CPU related settings moved to `cpu` object.
- Options `av`, `safe` and `max-cpu-usage` removed.
- Algorithm `cn/msr` renamed to `cn/fast`.
- Algorithm `cn/xtl` removed.
@@ -183,7 +183,7 @@
- [#314](https://github.com/xmrig/xmrig-proxy/issues/314) Added donate over proxy feature.
- Added new option `donate-over-proxy`.
- Added real graceful exit.
# v2.14.4
- [#992](https://github.com/xmrig/xmrig/pull/992) Fixed compilation with Clang 3.5.
- [#1012](https://github.com/xmrig/xmrig/pull/1012) Fixed compilation with Clang 9.0.
@@ -250,7 +250,7 @@
# v2.8.1
- [#768](https://github.com/xmrig/xmrig/issues/768) Fixed build with Visual Studio 2015.
- [#769](https://github.com/xmrig/xmrig/issues/769) Fixed regression, some ANSI escape sequences was in log with disabled colors.
- [#777](https://github.com/xmrig/xmrig/issues/777) Better report about pool connection issues.
- [#777](https://github.com/xmrig/xmrig/issues/777) Better report about pool connection issues.
- Simplified checks for ASM auto detection, only AES support necessary.
- Added missing options to `--help` output.
@@ -259,7 +259,7 @@
- Added global and per thread option `"asm"` and command line equivalent.
- **[#758](https://github.com/xmrig/xmrig/issues/758) Added SSL/TLS support for secure connections to pools.**
- Added per pool options `"tls"` and `"tls-fingerprint"` and command line equivalents.
- [#767](https://github.com/xmrig/xmrig/issues/767) Added config autosave feature, same with GPU miners.
- [#767](https://github.com/xmrig/xmrig/issues/767) Added config autosave feature, same with GPU miners.
- [#245](https://github.com/xmrig/xmrig-proxy/issues/245) Fixed API ID collision when run multiple miners on same machine.
- [#757](https://github.com/xmrig/xmrig/issues/757) Fixed send buffer overflow.
@@ -346,7 +346,7 @@
# v2.4.4
- Added libmicrohttpd version to --version output.
- Fixed bug in signal handler, in some cases miner wasn't shutdown properly.
- Fixed bug in singal handler, in some cases miner wasn't shutdown properly.
- Fixed recent MSVC 2017 version detection.
- [#279](https://github.com/xmrig/xmrig/pull/279) Fixed build on some macOS versions.
@@ -359,7 +359,7 @@
# v2.4.2
- [#60](https://github.com/xmrig/xmrig/issues/60) Added FreeBSD support, thanks [vcambur](https://github.com/vcambur).
- [#153](https://github.com/xmrig/xmrig/issues/153) Fixed issues with dwarfpool.com.
# v2.4.1
- [#147](https://github.com/xmrig/xmrig/issues/147) Fixed comparability with monero-stratum.
@@ -371,7 +371,7 @@
- [#101](https://github.com/xmrig/xmrig/issues/101) Fixed MSVC 2017 (15.3) compile time version detection.
- [#108](https://github.com/xmrig/xmrig/issues/108) Silently ignore invalid values for `donate-level` option.
- [#111](https://github.com/xmrig/xmrig/issues/111) Fixed build without AEON support.
# v2.3.1
- [#68](https://github.com/xmrig/xmrig/issues/68) Fixed compatibility with Docker containers, was nothing print on console.
@@ -398,7 +398,7 @@
# v2.1.0
- [#40](https://github.com/xmrig/xmrig/issues/40)
Improved miner shutdown, fixed crash on exit for Linux and OS X.
- Fixed, login request was contain malformed JSON if username or password has some special characters for example `\`.
- Fixed, login request was contain malformed JSON if username or password has some special characters for example `\`.
- [#220](https://github.com/fireice-uk/xmr-stak-cpu/pull/220) Better support for Round Robin DNS, IP address now always chosen randomly instead of stuck on first one.
- Changed donation address, new [xmrig-proxy](https://github.com/xmrig/xmrig-proxy) is coming soon.
@@ -418,16 +418,16 @@ Improved miner shutdown, fixed crash on exit for Linux and OS X.
- Fixed Windows XP support.
- Fixed regression, option `--no-color` was not fully disable colored output.
- Show resolved pool IP address in miner output.
# v1.0.1
- Fix broken software AES implementation, app has crashed if CPU not support AES-NI, only version 1.0.0 affected.
# v1.0.0
- Miner complete rewritten in C++ with libuv.
- This version should be fully compatible (except config file) with previous versions, many new nice features will come in next versions.
- This is still beta. If you found regression, stability or performance issues or have an idea for new feature please fell free to open new [issue](https://github.com/xmrig/xmrig/issues/new).
- This version should be fully compatible (except config file) with previos versions, many new nice features will come in next versions.
- This is still beta. If you found regression, stability or perfomance issues or have an idea for new feature please fell free to open new [issue](https://github.com/xmrig/xmrig/issues/new).
- Added new option `--print-time=N`, print hashrate report every N seconds.
- New hashrate reports, by default every 60 seconds.
- New hashrate reports, by default every 60 secons.
- Added Microsoft Visual C++ 2015 and 2017 support.
- Removed dependency on libcurl.
- To compile this version from source please switch to [dev](https://github.com/xmrig/xmrig/tree/dev) branch.
@@ -440,7 +440,7 @@ Improved miner shutdown, fixed crash on exit for Linux and OS X.
- Fixed gcc 7.1 support.
# v0.8.1
- Added nicehash support, detects automatically by pool URL, for example `cryptonight.eu.nicehash.com:3355` or manually via option `--nicehash`.
- Added nicehash support, detects automaticaly by pool URL, for example `cryptonight.eu.nicehash.com:3355` or manually via option `--nicehash`.
# v0.8.0
- Added double hash mode, also known as lower power mode. `--av=2` and `--av=4`.

View File

@@ -124,7 +124,7 @@ Force enable (`true`) or disable (`false`) hardware AES support. Default value `
Mining threads priority, value from `1` (lowest priority) to `5` (highest possible priority). Default value `null` means miner don't change threads priority at all. Setting priority higher than 2 can make your PC unresponsive.
#### `memory-pool` (since v4.3.0)
Use continuous, persistent memory block for mining threads, useful for preserve huge pages allocation while algorithm switching. Possible values `false` (feature disabled, by default) or `true` or specific count of 2 MB huge pages. It helps to avoid losing huge pages for scratchpads when RandomX dataset is updated and mining threads restart after a 2-3 days of mining.
Use continuous, persistent memory block for mining threads, useful for preserve huge pages allocation while algorithm switching. Possible values `false` (feature disabled, by default) or `true` or specific count of 2 MB huge pages. It helps to avoid loosing huge pages for scratchpads when RandomX dataset is updated and mining threads restart after a 2-3 days of mining.
#### `yield` (since v5.1.1)
Prefer system better system response/stability `true` (default value) or maximum hashrate `false`.
@@ -133,7 +133,7 @@ Prefer system better system response/stability `true` (default value) or maximum
Enable/configure or disable ASM optimizations. Possible values: `true`, `false`, `"intel"`, `"ryzen"`, `"bulldozer"`.
#### `argon2-impl` (since v3.1.0)
Allow override automatically detected Argon2 implementation, this option added mostly for debug purposes, default value `null` means autodetect. This is used in RandomX dataset initialization and also in some other mining algorithms. Other possible values: `"x86_64"`, `"SSE2"`, `"SSSE3"`, `"XOP"`, `"AVX2"`, `"AVX-512F"`. Manual selection has no safe guards - if your CPU doesn't support required instructions, miner will crash.
Allow override automatically detected Argon2 implementation, this option added mostly for debug purposes, default value `null` means autodetect. This is used in RandomX dataset initialization and also in some other mining algorithms. Other possible values: `"x86_64"`, `"SSE2"`, `"SSSE3"`, `"XOP"`, `"AVX2"`, `"AVX-512F"`. Manual selection has no safe guards - if your CPU doesn't support required instuctions, miner will crash.
#### `astrobwt-max-size`
AstroBWT algorithm: skip hashes with large stage 2 size, default: `550`, min: `400`, max: `1200`. Optimal value depends on your CPU/GPU

View File

@@ -65,7 +65,7 @@ public:
}
}
# else
inline ~Thread() { if (m_thread.joinable()) { m_thread.join(); } delete m_worker; }
inline ~Thread() { m_thread.join(); delete m_worker; }
inline void start(void *(*callback)(void *)) { m_thread = std::thread(callback, this); }
# endif

View File

@@ -706,7 +706,7 @@ __kernel void cn2(__global uint4 *Scratchpad, __global ulong *states, __global u
}
# if (ALGO_FAMILY == FAMILY_CN_HEAVY)
/* Also left over threads perform this loop.
/* Also left over threads performe this loop.
* The left over thread results will be ignored
*/
#pragma unroll 16
@@ -1005,7 +1005,7 @@ __kernel void Groestl(__global ulong *states, __global uint *BranchBuf, __global
ulong State[8] = { 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0x0001000000000000UL };
ulong H[8], M[8];
// BUG: AMD driver 19.7.X crashes if this is written as loop
// BUG: AMD driver 19.7.X crashs if this is written as loop
// Thx AMD for so bad software
{
((ulong8 *)M)[0] = vload8(0, states);

View File

@@ -10,7 +10,7 @@
#else
# define STATIC
/* taken from https://www.khronos.org/registry/OpenCL/extensions/amd/cl_amd_media_ops.txt
* Built-in Function
* Build-in Function
* uintn amd_bitalign (uintn src0, uintn src1, uintn src2)
* Description
* dst.s0 = (uint) (((((long)src0.s0) << 32) | (long)src1.s0) >> (src2.s0 & 31))

View File

@@ -77,7 +77,7 @@ void keccak_f800_round(uint32_t st[25], const int r)
void keccak_f800(uint32_t* st)
{
// Complete all 22 rounds as a separate impl to
// evaluate only first 8 words is wasteful of registers
// evaluate only first 8 words is wasteful of regsters
for (int r = 0; r < 22; r++) {
keccak_f800_round(st, r);
}
@@ -181,7 +181,7 @@ __kernel void progpow_search(__global dag_t const* g_dag, __global uint* job_blo
for (int i = 10; i < 25; i++)
state[i] = ravencoin_rndc[i-10];
// Run initial keccak round
// Run intial keccak round
keccak_f800(state);
for (int i = 0; i < 8; i++)

View File

@@ -48,7 +48,7 @@
#define KECCAK_ROUNDS 24
/* *************************** Public Interface ************************ */
/* *************************** Public Inteface ************************ */
/* For Init or Reset call these: */
sha3_return_t

View File

@@ -210,7 +210,7 @@ void xmrig::NetworkState::printResults() const
printHashes(m_accepted, m_hashes);
printDiff(m_diff);
if (m_active && m_latencyCount > 0) {
if (m_active && !m_latency.empty()) {
printAvgTime(avgTime());
}
@@ -298,19 +298,13 @@ void xmrig::NetworkState::onResultAccepted(IStrategy *strategy, IClient *client,
uint32_t xmrig::NetworkState::latency() const
{
const size_t calls = m_latencyCount;
const size_t calls = m_latency.size();
if (calls == 0) {
return 0;
}
std::array<uint16_t, kLatencyWindow> v;
const size_t start = (m_latencyPos + kLatencyWindow - calls) % kLatencyWindow;
for (size_t i = 0; i < calls; ++i) {
v[i] = m_latency[(start + i) % kLatencyWindow];
}
std::nth_element(v.begin(), v.begin() + calls / 2, v.begin() + calls);
auto v = m_latency;
std::nth_element(v.begin(), v.begin() + calls / 2, v.end());
return v[calls / 2];
}
@@ -318,11 +312,11 @@ uint32_t xmrig::NetworkState::latency() const
uint64_t xmrig::NetworkState::avgTime() const
{
if (m_latencyCount == 0) {
if (m_latency.empty()) {
return 0;
}
return connectionTime() / m_latencyCount;
return connectionTime() / m_latency.size();
}
@@ -348,12 +342,7 @@ void xmrig::NetworkState::add(const SubmitResult &result, const char *error)
std::sort(m_topDiff.rbegin(), m_topDiff.rend());
}
m_latency[m_latencyPos] = result.elapsed > 0xFFFF ? 0xFFFF : static_cast<uint16_t>(result.elapsed);
m_latencyPos = (m_latencyPos + 1) % kLatencyWindow;
if (m_latencyCount < kLatencyWindow) {
m_latencyCount++;
}
m_latency.push_back(result.elapsed > 0xFFFF ? 0xFFFF : static_cast<uint16_t>(result.elapsed));
}
@@ -366,6 +355,5 @@ void xmrig::NetworkState::stop()
m_fingerprint = nullptr;
m_failures++;
m_latencyCount = 0;
m_latencyPos = 0;
m_latency.clear();
}

View File

@@ -27,6 +27,7 @@
#include <array>
#include <string>
#include <vector>
namespace xmrig {
@@ -59,8 +60,6 @@ protected:
void onResultAccepted(IStrategy *strategy, IClient *client, const SubmitResult &result, const char *error) override;
private:
constexpr static size_t kLatencyWindow = 1024;
uint32_t latency() const;
uint64_t avgTime() const;
uint64_t connectionTime() const;
@@ -71,9 +70,7 @@ private:
bool m_active = false;
char m_pool[256]{};
std::array<uint64_t, 10> m_topDiff { { } };
std::array<uint16_t, kLatencyWindow> m_latency { { } };
size_t m_latencyCount = 0;
size_t m_latencyPos = 0;
std::vector<uint16_t> m_latency;
String m_fingerprint;
String m_ip;
String m_tls;

View File

@@ -76,12 +76,10 @@ void xmrig::Controller::stop()
{
Base::stop();
if (m_miner) {
m_miner->stop();
m_miner.reset();
}
m_network.reset();
m_miner->stop();
m_miner.reset();
}

View File

@@ -49,15 +49,6 @@ void xmrig::CnCtx::release(cryptonight_ctx **ctx, size_t count)
}
for (size_t i = 0; i < count; ++i) {
if (ctx[i] && ctx[i]->generated_code) {
# ifdef XMRIG_OS_WIN
VirtualMemory::freeLargePagesMemory(reinterpret_cast<void *>(ctx[i]->generated_code), 0);
# else
VirtualMemory::freeLargePagesMemory(reinterpret_cast<void *>(ctx[i]->generated_code), 0x4000);
# endif
ctx[i]->generated_code = nullptr;
}
_mm_free(ctx[i]);
}
}

View File

@@ -235,7 +235,7 @@ static HashReturn Init(hashState *state, int hashbitlen)
/*initialize the initial hash value of JH*/
state->hashbitlen = hashbitlen;
/*load the initial hash value into state*/
/*load the intital hash value into state*/
switch (hashbitlen)
{
case 224: memcpy(state->x,JH224_H0,128); break;

View File

@@ -48,7 +48,7 @@
multiple of size / 8)
ptr_cast(x,size) casts a pointer to a pointer to a
variable of length 'size' bits
varaiable of length 'size' bits
*/
#define ui_type(size) uint##size##_t

View File

@@ -124,7 +124,6 @@ uint32_t xmrig::VirtualMemory::bindToNUMANode(int64_t)
void xmrig::VirtualMemory::destroy()
{
delete pool;
pool = nullptr;
}

View File

@@ -86,7 +86,7 @@ void hashAes1Rx4(const void *input, size_t inputSize, void *hash)
rx_vec_i128 state0, state1, state2, state3;
rx_vec_i128 in0, in1, in2, in3;
//initial state
//intial state
state0 = rx_set_int_vec_i128(AES_HASH_1R_STATE0);
state1 = rx_set_int_vec_i128(AES_HASH_1R_STATE1);
state2 = rx_set_int_vec_i128(AES_HASH_1R_STATE2);

View File

@@ -174,7 +174,7 @@ FORCE_INLINE void rx_set_rounding_mode(uint32_t mode) {
_mm_setcsr(rx_mxcsr_default | (mode << 13));
}
#elif defined(__PPC64__) && defined(__ALTIVEC__) && defined(__VSX__) //sadly only POWER7 and newer will be able to use SIMD acceleration. Earlier processors can't use doubles or 64 bit integers with SIMD
#elif defined(__PPC64__) && defined(__ALTIVEC__) && defined(__VSX__) //sadly only POWER7 and newer will be able to use SIMD acceleration. Earlier processors cant use doubles or 64 bit integers with SIMD
#include <cstdint>
#include <stdexcept>
#include <cstdlib>

View File

@@ -231,7 +231,7 @@ RANDOMX_EXPORT unsigned long randomx_dataset_item_count(void);
*
* @param dataset is a pointer to a previously allocated randomx_dataset structure. Must not be NULL.
* @param cache is a pointer to a previously allocated and initialized randomx_cache structure. Must not be NULL.
* @param startItem is the item number where initialization should start.
* @param startItem is the item number where intialization should start.
* @param itemCount is the number of items that should be initialized.
*/
RANDOMX_EXPORT void randomx_init_dataset(randomx_dataset *dataset, randomx_cache *cache, unsigned long startItem, unsigned long itemCount);

View File

@@ -56,7 +56,6 @@
#include <cassert>
#include <atomic>
#include <list>
#include <memory>
#include <mutex>
@@ -67,9 +66,6 @@ namespace xmrig {
#if defined(XMRIG_FEATURE_OPENCL) || defined(XMRIG_FEATURE_CUDA)
class JobResultsPrivate;
class JobBundle
{
public:
@@ -90,14 +86,14 @@ public:
class JobBaton : public Baton<uv_work_t>
{
public:
inline JobBaton(std::list<JobBundle> &&bundles, JobResultsPrivate *owner, bool hwAES) :
inline JobBaton(std::list<JobBundle> &&bundles, IJobResultListener *listener, bool hwAES) :
hwAES(hwAES),
owner(owner),
listener(listener),
bundles(std::move(bundles))
{}
const bool hwAES;
JobResultsPrivate *owner;
IJobResultListener *listener;
std::list<JobBundle> bundles;
std::vector<JobResult> results;
uint32_t errors = 0;
@@ -192,8 +188,6 @@ static void getResults(JobBundle &bundle, std::vector<JobResult> &results, uint3
checkHash(bundle, results, nonce, hash, errors);
}
CnCtx::release(ctx, 1);
}
delete memory;
@@ -206,11 +200,6 @@ class JobResultsPrivate : public IAsyncListener
public:
XMRIG_DISABLE_COPY_MOVE_DEFAULT(JobResultsPrivate)
constexpr static size_t kMaxQueuedResults = 4096;
# if defined(XMRIG_FEATURE_OPENCL) || defined(XMRIG_FEATURE_CUDA)
constexpr static size_t kMaxQueuedBundles = 256;
# endif
inline JobResultsPrivate(IJobResultListener *listener, bool hwAES) :
m_hwAES(hwAES),
m_listener(listener)
@@ -225,20 +214,9 @@ public:
inline void submit(const JobResult &result)
{
std::lock_guard<std::mutex> lock(m_mutex);
if (m_stopping) {
return;
}
if (m_results.size() >= kMaxQueuedResults) {
return;
}
m_results.push_back(result);
if (m_async && !m_pendingAsync.exchange(true)) {
m_async->send();
}
m_async->send();
}
@@ -246,55 +224,13 @@ public:
inline void submit(const Job &job, uint32_t *results, size_t count, uint32_t device_index)
{
std::lock_guard<std::mutex> lock(m_mutex);
if (count > 0xFF) {
count = 0xFF;
}
if (m_stopping) {
return;
}
if (m_bundles.size() >= kMaxQueuedBundles) {
return;
}
m_bundles.emplace_back(job, results, count, device_index);
if (m_async && !m_pendingAsync.exchange(true)) {
m_async->send();
}
m_async->send();
}
# endif
inline void stop()
{
bool deleteNow = false;
{
std::lock_guard<std::mutex> lock(m_mutex);
m_stopping = true;
m_listener = nullptr;
m_results.clear();
# if defined(XMRIG_FEATURE_OPENCL) || defined(XMRIG_FEATURE_CUDA)
m_bundles.clear();
m_workScheduled = false;
m_deleteWhenDone = true;
deleteNow = (m_pendingWork == 0);
# else
deleteNow = true;
# endif
}
if (deleteNow) {
m_async.reset();
delete this;
}
}
protected:
inline void onAsync() override { submit(); }
@@ -303,33 +239,23 @@ private:
# if defined(XMRIG_FEATURE_OPENCL) || defined(XMRIG_FEATURE_CUDA)
inline void submit()
{
m_pendingAsync.store(false);
std::list<JobBundle> bundles;
std::list<JobResult> results;
m_mutex.lock();
m_bundles.swap(bundles);
m_results.swap(results);
const bool canScheduleWork = !m_workScheduled && !m_stopping && !m_bundles.empty();
if (canScheduleWork) {
m_bundles.swap(bundles);
m_workScheduled = true;
m_pendingWork++;
}
m_mutex.unlock();
for (const auto &result : results) {
if (m_listener) {
m_listener->onJobResult(result);
}
m_listener->onJobResult(result);
}
if (bundles.empty()) {
return;
}
auto baton = new JobBaton(std::move(bundles), this, m_hwAES);
auto baton = new JobBaton(std::move(bundles), m_listener, m_hwAES);
uv_queue_work(uv_default_loop(), &baton->req,
[](uv_work_t *req) {
@@ -342,67 +268,8 @@ private:
[](uv_work_t *req, int) {
auto baton = static_cast<JobBaton*>(req->data);
if (baton->owner) {
baton->owner->onBatonDone(std::move(baton->results));
}
delete baton;
}
);
}
inline void onBatonDone(std::vector<JobResult> &&results)
{
for (const auto &result : results) {
if (m_listener) {
m_listener->onJobResult(result);
}
}
std::list<JobBundle> bundles;
m_mutex.lock();
m_pendingWork--;
const bool canScheduleWork = !m_stopping && !m_bundles.empty();
if (canScheduleWork) {
m_bundles.swap(bundles);
m_pendingWork++;
}
else {
m_workScheduled = false;
}
const bool canDelete = m_deleteWhenDone && m_pendingWork == 0;
m_mutex.unlock();
if (canDelete) {
m_async.reset();
delete this;
return;
}
if (bundles.empty()) {
return;
}
auto baton = new JobBaton(std::move(bundles), this, m_hwAES);
uv_queue_work(uv_default_loop(), &baton->req,
[](uv_work_t *req) {
auto baton = static_cast<JobBaton*>(req->data);
for (JobBundle &bundle : baton->bundles) {
getResults(bundle, baton->results, baton->errors, baton->hwAES);
}
},
[](uv_work_t *req, int) {
auto baton = static_cast<JobBaton*>(req->data);
if (baton->owner) {
baton->owner->onBatonDone(std::move(baton->results));
for (const auto &result : baton->results) {
baton->listener->onJobResult(result);
}
delete baton;
@@ -412,8 +279,6 @@ private:
# else
inline void submit()
{
m_pendingAsync.store(false);
std::list<JobResult> results;
m_mutex.lock();
@@ -421,9 +286,7 @@ private:
m_mutex.unlock();
for (const auto &result : results) {
if (m_listener) {
m_listener->onJobResult(result);
}
m_listener->onJobResult(result);
}
}
# endif
@@ -433,14 +296,9 @@ private:
std::list<JobResult> m_results;
std::mutex m_mutex;
std::shared_ptr<Async> m_async;
std::atomic<bool> m_pendingAsync{ false };
bool m_stopping = false;
# if defined(XMRIG_FEATURE_OPENCL) || defined(XMRIG_FEATURE_CUDA)
std::list<JobBundle> m_bundles;
bool m_workScheduled = false;
uint32_t m_pendingWork = 0;
bool m_deleteWhenDone = false;
# endif
};
@@ -467,12 +325,11 @@ void xmrig::JobResults::setListener(IJobResultListener *listener, bool hwAES)
void xmrig::JobResults::stop()
{
auto h = handler;
handler = nullptr;
assert(handler != nullptr);
if (h) {
h->stop();
}
delete handler;
handler = nullptr;
}
@@ -490,6 +347,8 @@ void xmrig::JobResults::submit(const Job& job, uint32_t nonce, const uint8_t* re
void xmrig::JobResults::submit(const JobResult &result)
{
assert(handler != nullptr);
if (handler) {
handler->submit(result);
}