WIP
This commit is contained in:
parent
4de8768137
commit
26741d686c
6 changed files with 46 additions and 17 deletions
41
src/Mem.cpp
41
src/Mem.cpp
|
@ -56,6 +56,9 @@ ScratchPadMem Mem::create(ScratchPad** scratchPads, int threadId)
|
|||
case Options::ALGO_CRYPTONIGHT_HEAVY:
|
||||
scratchPadSize = MEMORY_HEAVY;
|
||||
break;
|
||||
case Options::ALGO_ARGON2_512:
|
||||
scratchPadSize = MEMORY_ARGON2_512;
|
||||
break;
|
||||
case Options::ALGO_CRYPTONIGHT:
|
||||
default:
|
||||
scratchPadSize = MEMORY;
|
||||
|
@ -63,25 +66,29 @@ ScratchPadMem Mem::create(ScratchPad** scratchPads, int threadId)
|
|||
}
|
||||
|
||||
ScratchPadMem scratchPadMem;
|
||||
scratchPadMem.realSize = scratchPadSize * getThreadHashFactor(threadId);
|
||||
scratchPadMem.size = scratchPadSize * getThreadHashFactor(threadId);
|
||||
scratchPadMem.realSize = Options::isCNAlgo(m_algo) ? scratchPadSize * getThreadHashFactor(threadId) : scratchPadSize;
|
||||
scratchPadMem.size = Options::isCNAlgo(m_algo) ? scratchPadSize * getThreadHashFactor(threadId) : scratchPadSize;
|
||||
scratchPadMem.pages = std::max(scratchPadMem.size / MEMORY, static_cast<size_t>(1));
|
||||
|
||||
allocate(scratchPadMem, m_useHugePages);
|
||||
if (Options::isCNAlgo(m_algo)) {
|
||||
allocate(scratchPadMem, m_useHugePages);
|
||||
|
||||
for (size_t i = 0; i < getThreadHashFactor(threadId); ++i) {
|
||||
auto* scratchPad = static_cast<ScratchPad *>(_mm_malloc(sizeof(ScratchPad), 4096));
|
||||
scratchPad->memory = scratchPadMem.memory + (i * scratchPadSize);
|
||||
for (size_t i = 0; i < getThreadHashFactor(threadId); ++i) {
|
||||
auto *scratchPad = static_cast<ScratchPad *>(_mm_malloc(sizeof(ScratchPad), 4096));
|
||||
scratchPad->memory = scratchPadMem.memory + (i * scratchPadSize);
|
||||
|
||||
auto* p = reinterpret_cast<uint8_t*>(allocateExecutableMemory(0x4000));
|
||||
scratchPad->generated_code = reinterpret_cast<cn_mainloop_fun_ms_abi>(p);
|
||||
scratchPad->generated_code_double = reinterpret_cast<cn_mainloop_double_fun_ms_abi>(p + 0x2000);
|
||||
auto *p = reinterpret_cast<uint8_t *>(allocateExecutableMemory(0x4000));
|
||||
scratchPad->generated_code = reinterpret_cast<cn_mainloop_fun_ms_abi>(p);
|
||||
scratchPad->generated_code_double = reinterpret_cast<cn_mainloop_double_fun_ms_abi>(p + 0x2000);
|
||||
|
||||
scratchPad->generated_code_data.variant = PowVariant::LAST_ITEM;
|
||||
scratchPad->generated_code_data.height = (uint64_t)(-1);
|
||||
scratchPad->generated_code_double_data = scratchPad->generated_code_data;
|
||||
scratchPad->generated_code_data.variant = PowVariant::LAST_ITEM;
|
||||
scratchPad->generated_code_data.height = (uint64_t) (-1);
|
||||
scratchPad->generated_code_double_data = scratchPad->generated_code_data;
|
||||
|
||||
scratchPads[i] = scratchPad;
|
||||
scratchPads[i] = scratchPad;
|
||||
}
|
||||
} else {
|
||||
scratchPadMem.hugePages = scratchPadMem.pages;
|
||||
}
|
||||
|
||||
m_totalPages += scratchPadMem.pages;
|
||||
|
@ -95,9 +102,11 @@ void Mem::release(ScratchPad** scratchPads, ScratchPadMem& scratchPadMem, int th
|
|||
m_totalPages -= scratchPadMem.pages;
|
||||
m_totalHugepages -= scratchPadMem.hugePages;
|
||||
|
||||
release(scratchPadMem);
|
||||
if (Options::isCNAlgo(m_algo)) {
|
||||
release(scratchPadMem);
|
||||
|
||||
for (size_t i = 0; i < getThreadHashFactor(threadId); ++i) {
|
||||
_mm_free(scratchPads[i]);
|
||||
for (size_t i = 0; i < getThreadHashFactor(threadId); ++i) {
|
||||
_mm_free(scratchPads[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue