Skip to content
Snippets Groups Projects
Commit 1b18f598 authored by psychocrypt's avatar psychocrypt
Browse files

refactor scratchpad creation

Use the maximum scratchpad size from before and after the fork.
parent a5797643
No related branches found
No related tags found
No related merge requests found
...@@ -308,9 +308,10 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ ...@@ -308,9 +308,10 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_
return ERR_OCL_API; return ERR_OCL_API;
} }
size_t scratchPadSize = cn_select_memory(::jconf::inst()->GetMiningAlgo()); size_t scratchPadSize = std::max(
int threadMemMask = cn_select_mask(::jconf::inst()->GetMiningAlgo()); cn_select_memory(::jconf::inst()->GetMiningAlgo()),
int hashIterations = cn_select_iter(::jconf::inst()->GetMiningAlgo()); cn_select_memory(::jconf::inst()->GetMiningAlgoRoot())
);
size_t g_thd = ctx->rawIntensity; size_t g_thd = ctx->rawIntensity;
ctx->ExtraBuffers[0] = clCreateBuffer(opencl_ctx, CL_MEM_READ_WRITE, scratchPadSize * g_thd, NULL, &ret); ctx->ExtraBuffers[0] = clCreateBuffer(opencl_ctx, CL_MEM_READ_WRITE, scratchPadSize * g_thd, NULL, &ret);
...@@ -382,6 +383,7 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ ...@@ -382,6 +383,7 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_
for(int ii = 0; ii < num_algos; ++ii) for(int ii = 0; ii < num_algos; ++ii)
{ {
// scratchpad size for the selected mining algorithm
size_t hashMemSize = cn_select_memory(miner_algo[ii]); size_t hashMemSize = cn_select_memory(miner_algo[ii]);
int threadMemMask = cn_select_mask(miner_algo[ii]); int threadMemMask = cn_select_mask(miner_algo[ii]);
int hashIterations = cn_select_iter(miner_algo[ii]); int hashIterations = cn_select_iter(miner_algo[ii]);
...@@ -493,7 +495,7 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_ ...@@ -493,7 +495,7 @@ size_t InitOpenCLGpu(cl_context opencl_ctx, GpuContext* ctx, const char* source_
p_id++; p_id++;
} }
if((ret = clGetProgramInfo(ctx->Program[ii], CL_PROGRAM_BINARIES, num_devices * sizeof(char*), all_programs.data(),NULL)) != CL_SUCCESS) if((ret = clGetProgramInfo(ctx->Program[ii], CL_PROGRAM_BINARIES, num_devices * sizeof(char*), all_programs.data(),NULL)) != CL_SUCCESS)
{ {
printer::inst()->print_msg(L1,"Error %s when calling clGetProgramInfo.", err_to_str(ret)); printer::inst()->print_msg(L1,"Error %s when calling clGetProgramInfo.", err_to_str(ret));
return ERR_OCL_API; return ERR_OCL_API;
......
...@@ -83,7 +83,10 @@ private: ...@@ -83,7 +83,10 @@ private:
constexpr size_t byteToMiB = 1024u * 1024u; constexpr size_t byteToMiB = 1024u * 1024u;
size_t hashMemSize = cn_select_memory(::jconf::inst()->GetMiningAlgo()); size_t hashMemSize = std::max(
cn_select_memory(::jconf::inst()->GetMiningAlgo()),
cn_select_memory(::jconf::inst()->GetMiningAlgoRoot())
);
std::string conf; std::string conf;
for(auto& ctx : devVec) for(auto& ctx : devVec)
......
...@@ -36,7 +36,10 @@ public: ...@@ -36,7 +36,10 @@ public:
bool printConfig() bool printConfig()
{ {
const size_t hashMemSizeKB = cn_select_memory(::jconf::inst()->GetMiningAlgo()) / 1024u; const size_t hashMemSizeKB = std::max(
cn_select_memory(::jconf::inst()->GetMiningAlgo()),
cn_select_memory(::jconf::inst()->GetMiningAlgoRoot())
) / 1024u;
const size_t halfHashMemSizeKB = hashMemSizeKB / 2u; const size_t halfHashMemSizeKB = hashMemSizeKB / 2u;
configEditor configTpl{}; configEditor configTpl{};
......
...@@ -28,7 +28,10 @@ public: ...@@ -28,7 +28,10 @@ public:
autoAdjust() autoAdjust()
{ {
hashMemSize = cn_select_memory(::jconf::inst()->GetMiningAlgo()); hashMemSize = std::max(
cn_select_memory(::jconf::inst()->GetMiningAlgo()),
cn_select_memory(::jconf::inst()->GetMiningAlgoRoot())
);
halfHashMemSize = hashMemSize / 2u; halfHashMemSize = hashMemSize / 2u;
} }
......
...@@ -35,6 +35,7 @@ extern "C" ...@@ -35,6 +35,7 @@ extern "C"
#include "xmrstak/jconf.hpp" #include "xmrstak/jconf.hpp"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <algorithm>
#ifdef __GNUC__ #ifdef __GNUC__
#include <mm_malloc.h> #include <mm_malloc.h>
...@@ -202,7 +203,10 @@ size_t cryptonight_init(size_t use_fast_mem, size_t use_mlock, alloc_msg* msg) ...@@ -202,7 +203,10 @@ size_t cryptonight_init(size_t use_fast_mem, size_t use_mlock, alloc_msg* msg)
cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, alloc_msg* msg) cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, alloc_msg* msg)
{ {
size_t hashMemSize = cn_select_memory(::jconf::inst()->GetMiningAlgo()); size_t hashMemSize = std::max(
cn_select_memory(::jconf::inst()->GetMiningAlgo()),
cn_select_memory(::jconf::inst()->GetMiningAlgoRoot())
);
cryptonight_ctx* ptr = (cryptonight_ctx*)_mm_malloc(sizeof(cryptonight_ctx), 4096); cryptonight_ctx* ptr = (cryptonight_ctx*)_mm_malloc(sizeof(cryptonight_ctx), 4096);
...@@ -278,7 +282,10 @@ cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, al ...@@ -278,7 +282,10 @@ cryptonight_ctx* cryptonight_alloc_ctx(size_t use_fast_mem, size_t use_mlock, al
void cryptonight_free_ctx(cryptonight_ctx* ctx) void cryptonight_free_ctx(cryptonight_ctx* ctx)
{ {
size_t hashMemSize = cn_select_memory(::jconf::inst()->GetMiningAlgo()); size_t hashMemSize = std::max(
cn_select_memory(::jconf::inst()->GetMiningAlgo()),
cn_select_memory(::jconf::inst()->GetMiningAlgoRoot())
);
if(ctx->ctx_info[0] != 0) if(ctx->ctx_info[0] != 0)
{ {
......
...@@ -279,7 +279,10 @@ extern "C" int cryptonight_extra_cpu_init(nvid_ctx* ctx) ...@@ -279,7 +279,10 @@ extern "C" int cryptonight_extra_cpu_init(nvid_ctx* ctx)
if(gpuArch < 70) if(gpuArch < 70)
CUDA_CHECK(ctx->device_id, cudaDeviceSetCacheConfig(cudaFuncCachePreferL1)); CUDA_CHECK(ctx->device_id, cudaDeviceSetCacheConfig(cudaFuncCachePreferL1));
size_t hashMemSize = cn_select_memory(::jconf::inst()->GetMiningAlgo()); size_t hashMemSize = std::max(
cn_select_memory(::jconf::inst()->GetMiningAlgo()),
cn_select_memory(::jconf::inst()->GetMiningAlgoRoot())
);
size_t wsize = ctx->device_blocks * ctx->device_threads; size_t wsize = ctx->device_blocks * ctx->device_threads;
CUDA_CHECK(ctx->device_id, cudaMalloc(&ctx->d_ctx_state, 50 * sizeof(uint32_t) * wsize)); CUDA_CHECK(ctx->device_id, cudaMalloc(&ctx->d_ctx_state, 50 * sizeof(uint32_t) * wsize));
...@@ -576,7 +579,10 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx) ...@@ -576,7 +579,10 @@ extern "C" int cuda_get_deviceinfo(nvid_ctx* ctx)
ctx->total_device_memory = totalMemory; ctx->total_device_memory = totalMemory;
ctx->free_device_memory = freeMemory; ctx->free_device_memory = freeMemory;
size_t hashMemSize = cn_select_memory(::jconf::inst()->GetMiningAlgo()); size_t hashMemSize = std::max(
cn_select_memory(::jconf::inst()->GetMiningAlgo()),
cn_select_memory(::jconf::inst()->GetMiningAlgoRoot())
);
#ifdef WIN32 #ifdef WIN32
/* We use in windows bfactor (split slow kernel into smaller parts) to avoid /* We use in windows bfactor (split slow kernel into smaller parts) to avoid
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment