Merge branch 'master' of git@github.com:tevador/RandomX.git

This commit is contained in:
tevador 2019-10-04 08:35:00 +02:00
commit 89721f1778
4 changed files with 20 additions and 5 deletions

View file

@ -50,6 +50,7 @@ struct randomx_cache {
randomx::DatasetInitFunc* datasetInit; randomx::DatasetInitFunc* datasetInit;
randomx::SuperscalarProgram programs[RANDOMX_CACHE_ACCESSES]; randomx::SuperscalarProgram programs[RANDOMX_CACHE_ACCESSES];
std::vector<uint64_t> reciprocalCache; std::vector<uint64_t> reciprocalCache;
std::string cacheKey;
bool isInitialized() { bool isInitialized() {
return programs[0].getSize() != 0; return programs[0].getSize() != 0;

View file

@ -93,7 +93,12 @@ extern "C" {
void randomx_init_cache(randomx_cache *cache, const void *key, size_t keySize) { void randomx_init_cache(randomx_cache *cache, const void *key, size_t keySize) {
assert(cache != nullptr); assert(cache != nullptr);
assert(keySize == 0 || key != nullptr); assert(keySize == 0 || key != nullptr);
cache->initialize(cache, key, keySize); std::string cacheKey;
cacheKey.assign((const char *)key, keySize);
if (cache->cacheKey != cacheKey || !cache->isInitialized()) {
cache->initialize(cache, key, keySize);
cache->cacheKey = cacheKey;
}
} }
void randomx_release_cache(randomx_cache* cache) { void randomx_release_cache(randomx_cache* cache) {
@ -274,8 +279,10 @@ extern "C" {
UNREACHABLE; UNREACHABLE;
} }
if(cache != nullptr) if(cache != nullptr) {
vm->setCache(cache); vm->setCache(cache);
vm->cacheKey = cache->cacheKey;
}
if(dataset != nullptr) if(dataset != nullptr)
vm->setDataset(dataset); vm->setDataset(dataset);
@ -293,7 +300,10 @@ extern "C" {
void randomx_vm_set_cache(randomx_vm *machine, randomx_cache* cache) { void randomx_vm_set_cache(randomx_vm *machine, randomx_cache* cache) {
assert(machine != nullptr); assert(machine != nullptr);
assert(cache != nullptr && cache->isInitialized()); assert(cache != nullptr && cache->isInitialized());
machine->setCache(cache); if (machine->cacheKey != cache->cacheKey) {
machine->setCache(cache);
machine->cacheKey = cache->cacheKey;
}
} }
void randomx_vm_set_dataset(randomx_vm *machine, randomx_dataset *dataset) { void randomx_vm_set_dataset(randomx_vm *machine, randomx_dataset *dataset) {

View file

@ -71,6 +71,7 @@ RANDOMX_EXPORT randomx_cache *randomx_alloc_cache(randomx_flags flags);
/** /**
* Initializes the cache memory and SuperscalarHash using the provided key value. * Initializes the cache memory and SuperscalarHash using the provided key value.
* Does nothing if called again with the same key value.
* *
* @param cache is a pointer to a previously allocated randomx_cache structure. Must not be NULL. * @param cache is a pointer to a previously allocated randomx_cache structure. Must not be NULL.
* @param key is a pointer to memory which contains the key value. Must not be NULL. * @param key is a pointer to memory which contains the key value. Must not be NULL.
@ -162,7 +163,8 @@ RANDOMX_EXPORT randomx_vm *randomx_create_vm(randomx_flags flags, randomx_cache
/** /**
* Reinitializes a virtual machine with a new Cache. This function should be called anytime * Reinitializes a virtual machine with a new Cache. This function should be called anytime
* the Cache is reinitialized with a new key. * the Cache is reinitialized with a new key. Does nothing if called with a Cache containing
* the same key value as already set.
* *
* @param machine is a pointer to a randomx_vm structure that was initialized * @param machine is a pointer to a randomx_vm structure that was initialized
* without RANDOMX_FLAG_FULL_MEM. Must not be NULL. * without RANDOMX_FLAG_FULL_MEM. Must not be NULL.

View file

@ -65,6 +65,8 @@ protected:
randomx_dataset* datasetPtr; randomx_dataset* datasetPtr;
}; };
uint64_t datasetOffset; uint64_t datasetOffset;
public:
std::string cacheKey;
}; };
namespace randomx { namespace randomx {