Reduced memory for KawPow
This commit is contained in:
parent
ba405d1984
commit
0dbf41f761
6 changed files with 42 additions and 17 deletions
|
@ -26,6 +26,7 @@
|
|||
|
||||
|
||||
#include <cinttypes>
|
||||
#include <algorithm>
|
||||
|
||||
#include "crypto/kawpow/KPCache.h"
|
||||
#include "3rdparty/libethash/data_sizes.h"
|
||||
|
@ -83,8 +84,30 @@ bool KPCache::init(uint32_t epoch)
|
|||
cache.num_parent_nodes = cache.cache_size / sizeof(node);
|
||||
calculate_fast_mod_data(cache.num_parent_nodes, cache.reciprocal, cache.increment, cache.shift);
|
||||
|
||||
for (uint32_t i = 0; i < sizeof(m_l1Cache) / sizeof(node); ++i) {
|
||||
ethash_calculate_dag_item_opt(((node*)m_l1Cache) + i, i, num_dataset_parents, &cache);
|
||||
const uint64_t cache_nodes = (size + sizeof(node) * 4 - 1) / sizeof(node);
|
||||
m_DAGCache.resize(cache_nodes * (sizeof(node) / sizeof(uint32_t)));
|
||||
|
||||
// Init DAG cache
|
||||
{
|
||||
const uint64_t n = std::max(std::thread::hardware_concurrency(), 1U);
|
||||
|
||||
std::vector<std::thread> threads;
|
||||
threads.reserve(n);
|
||||
|
||||
for (uint64_t i = 0; i < n; ++i) {
|
||||
const uint32_t a = (cache_nodes * i) / n;
|
||||
const uint32_t b = (cache_nodes * (i + 1)) / n;
|
||||
|
||||
threads.emplace_back([this, a, b, cache_nodes, &cache]() {
|
||||
for (uint32_t j = a; j < b; ++j) {
|
||||
ethash_calculate_dag_item_opt(((node*)m_DAGCache.data()) + j, j, num_dataset_parents, &cache);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (auto& t : threads) {
|
||||
t.join();
|
||||
}
|
||||
}
|
||||
|
||||
m_size = size;
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
#include "base/tools/Object.h"
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
|
||||
|
||||
namespace xmrig
|
||||
|
@ -57,7 +58,7 @@ public:
|
|||
size_t size() const { return m_size; }
|
||||
uint32_t epoch() const { return m_epoch; }
|
||||
|
||||
const uint32_t* l1_cache() const { return m_l1Cache; }
|
||||
const uint32_t* l1_cache() const { return m_DAGCache.data(); }
|
||||
|
||||
static uint64_t cache_size(uint32_t epoch);
|
||||
static uint64_t dag_size(uint32_t epoch);
|
||||
|
@ -71,7 +72,7 @@ private:
|
|||
VirtualMemory* m_memory = nullptr;
|
||||
size_t m_size = 0;
|
||||
uint32_t m_epoch = 0xFFFFFFFFUL;
|
||||
uint32_t m_l1Cache[l1_cache_num_items] = {};
|
||||
std::vector<uint32_t> m_DAGCache;
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue