Support for multiple threads

This commit is contained in:
tevador
2018-12-19 21:54:44 +01:00
parent cb12feaf91
commit b9d2d853aa
13 changed files with 436 additions and 304 deletions

View File

@@ -20,43 +20,30 @@ along with RandomX. If not, see<http://www.gnu.org/licenses/>.
#pragma once
#include <cstdint>
#include <array>
#include "intrinPortable.h"
#include "argon2.h"
#include "common.hpp"
#include "softAes.h"
namespace RandomX {
static_assert(ArgonMemorySize % (ArgonLanes * ARGON2_SYNC_POINTS) == 0, "ArgonMemorySize - invalid value");
void initializeCache(const void* input, size_t inputLength, void* memory);
template<bool soft>
void expandAesKeys(const __m128i* seed, __m128i* keys);
template<bool soft>
inline __m128i aesenc(__m128i in, __m128i key) {
return soft ? soft_aesenc(in, key) : _mm_aesenc_si128(in, key);
}
template<bool soft>
inline __m128i aesdec(__m128i in, __m128i key) {
return soft ? soft_aesdec(in, key) : _mm_aesdec_si128(in, key);
}
using KeysContainer = std::array<__m128i, 10>;
template<bool soft, bool enc>
void initBlock(uint8_t* in, uint8_t* out, uint32_t blockNumber, const __m128i keys[10]);
void initBlock(const uint8_t* in, uint8_t* out, uint32_t blockNumber, const KeysContainer& keys);
template<bool softAes>
void initBlock(uint8_t* cache, uint8_t* block, uint32_t blockNumber, const __m128i keys[10]);
void initBlock(const uint8_t* cache, uint8_t* block, uint32_t blockNumber, const KeysContainer& keys);
void datasetAlloc(dataset_t& ds);
template<bool softAes>
void datasetInit(const void* seed, uint8_t*& dataset);
void datasetInit(Cache* cache, dataset_t ds, uint32_t startBlock, uint32_t blockCount);
convertible_t datasetRead(addr_t addr, MemoryRegisters& memory);
template<bool softAes>
void datasetInitLight(const void* seed, LightClientMemory*& lcm);
void datasetInitCache(const void* seed, dataset_t& dataset);
template<bool softAes>
convertible_t datasetReadLight(addr_t addr, MemoryRegisters& memory);