Integrated RandomX, added RandomXL (Loki)

This commit is contained in:
SChernykh 2019-07-01 20:11:51 +02:00
parent 0aaf2d38d4
commit 6eb9d0963b
78 changed files with 9870 additions and 36 deletions

View file

@ -65,6 +65,7 @@ uv_rwlock_t Workers::m_rx_dataset_lock;
randomx_cache *Workers::m_rx_cache = nullptr;
randomx_dataset *Workers::m_rx_dataset = nullptr;
uint8_t Workers::m_rx_seed_hash[32] = {};
xmrig::Variant Workers::m_rx_variant = xmrig::VARIANT_MAX;
std::atomic<uint32_t> Workers::m_rx_dataset_init_thread_counter = {};
#endif
@ -380,10 +381,10 @@ void Workers::start(IWorker *worker)
#ifdef XMRIG_ALGO_RANDOMX
void Workers::updateDataset(const uint8_t* seed_hash, const uint32_t num_threads)
void Workers::updateDataset(const uint8_t* seed_hash, xmrig::Variant variant, const uint32_t num_threads)
{
// Check if we need to update cache and dataset
if (memcmp(m_rx_seed_hash, seed_hash, sizeof(m_rx_seed_hash)) == 0)
if ((memcmp(m_rx_seed_hash, seed_hash, sizeof(m_rx_seed_hash)) == 0) && (m_rx_variant == variant))
return;
const uint32_t thread_id = m_rx_dataset_init_thread_counter++;
@ -400,10 +401,24 @@ void Workers::updateDataset(const uint8_t* seed_hash, const uint32_t num_threads
// One of the threads updates cache
uv_rwlock_wrlock(&m_rx_dataset_lock);
if (m_rx_variant != variant) {
switch (variant) {
case xmrig::VARIANT_RX_WOW:
randomx_apply_config(RandomX_WowneroConfig);
break;
case xmrig::VARIANT_RX_LOKI:
randomx_apply_config(RandomX_LokiConfig);
break;
}
m_rx_variant = variant;
}
if (memcmp(m_rx_seed_hash, seed_hash, sizeof(m_rx_seed_hash)) != 0) {
memcpy(m_rx_seed_hash, seed_hash, sizeof(m_rx_seed_hash));
randomx_init_cache(m_rx_cache, m_rx_seed_hash, sizeof(m_rx_seed_hash));
}
uv_rwlock_wrunlock(&m_rx_dataset_lock);
// All threads update dataset