Initial RandomX source code prepare and compile.
This commit is contained in:
parent
29790da63d
commit
ff89ec660c
17 changed files with 5481 additions and 57 deletions
|
@ -5,7 +5,7 @@
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { text2h, text2h_bundle, addIncludes } = require('./js/opencl');
|
const { text2h, text2h_bundle, addIncludes } = require('./js/opencl');
|
||||||
// const cwd = process.cwd();
|
const cwd = process.cwd();
|
||||||
|
|
||||||
|
|
||||||
function cn()
|
function cn()
|
||||||
|
@ -51,8 +51,34 @@ function cn_gpu()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function rx()
|
||||||
|
{
|
||||||
|
let rx = addIncludes('randomx.cl', [
|
||||||
|
'../cn/algorithm.cl',
|
||||||
|
'randomx_constants_monero.h',
|
||||||
|
'randomx_constants_wow.h',
|
||||||
|
'randomx_constants_loki.h',
|
||||||
|
'aes.cl',
|
||||||
|
'blake2b.cl',
|
||||||
|
'randomx_vm.cl',
|
||||||
|
'randomx_jit.cl'
|
||||||
|
]);
|
||||||
|
|
||||||
|
rx = rx.replace(/ #include "fillAes1Rx4.cl"/g, fs.readFileSync('fillAes1Rx4.cl', 'utf8'));
|
||||||
|
rx = rx.replace(/ #include "blake2b_double_block.cl"/g, fs.readFileSync('blake2b_double_block.cl', 'utf8'));
|
||||||
|
|
||||||
|
//fs.writeFileSync('randomx_gen.cl', rx);
|
||||||
|
fs.writeFileSync('randomx_cl.h', text2h(rx, 'xmrig', 'randomx_cl'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
process.chdir(path.resolve('src/backend/opencl/cl/cn'));
|
process.chdir(path.resolve('src/backend/opencl/cl/cn'));
|
||||||
|
|
||||||
cn();
|
cn();
|
||||||
cn_r();
|
cn_r();
|
||||||
cn_gpu();
|
cn_gpu();
|
||||||
|
|
||||||
|
process.chdir(cwd);
|
||||||
|
process.chdir(path.resolve('src/backend/opencl/cl/rx'));
|
||||||
|
|
||||||
|
rx();
|
|
@ -33,12 +33,18 @@
|
||||||
# include "backend/opencl/cl/cn/cryptonight_gpu_cl.h"
|
# include "backend/opencl/cl/cn/cryptonight_gpu_cl.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef XMRIG_ALGO_RANDOMX
|
||||||
|
# include "backend/opencl/cl/rx/randomx_cl.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
const char *xmrig::OclSource::get(const Algorithm &algorithm)
|
const char *xmrig::OclSource::get(const Algorithm &algorithm)
|
||||||
{
|
{
|
||||||
|
# ifdef XMRIG_ALGO_RANDOMX
|
||||||
if (algorithm.family() == Algorithm::RANDOM_X) {
|
if (algorithm.family() == Algorithm::RANDOM_X) {
|
||||||
return nullptr; // FIXME
|
return randomx_cl;
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
# ifdef XMRIG_ALGO_CN_GPU
|
# ifdef XMRIG_ALGO_CN_GPU
|
||||||
if (algorithm == Algorithm::CN_GPU) {
|
if (algorithm == Algorithm::CN_GPU) {
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
R"===(
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2019 SChernykh
|
Copyright (c) 2019 SChernykh
|
||||||
|
|
||||||
|
@ -297,8 +296,6 @@ __constant static const uint AES_TABLE[2048] =
|
||||||
0x9d532e34U, 0xa055f3a2U, 0x32e18a05U, 0x75ebf6a4U,
|
0x9d532e34U, 0xa055f3a2U, 0x32e18a05U, 0x75ebf6a4U,
|
||||||
0x39ec830bU, 0xaaef6040U, 0x069f715eU, 0x51106ebdU,
|
0x39ec830bU, 0xaaef6040U, 0x069f715eU, 0x51106ebdU,
|
||||||
0xf98a213eU, 0x3d06dd96U, 0xae053eddU, 0x46bde64dU,
|
0xf98a213eU, 0x3d06dd96U, 0xae053eddU, 0x46bde64dU,
|
||||||
)==="
|
|
||||||
R"===(
|
|
||||||
0xb58d5491U, 0x055dc471U, 0x6fd40604U, 0xff155060U,
|
0xb58d5491U, 0x055dc471U, 0x6fd40604U, 0xff155060U,
|
||||||
0x24fb9819U, 0x97e9bdd6U, 0xcc434089U, 0x779ed967U,
|
0x24fb9819U, 0x97e9bdd6U, 0xcc434089U, 0x779ed967U,
|
||||||
0xbd42e8b0U, 0x888b8907U, 0x385b19e7U, 0xdbeec879U,
|
0xbd42e8b0U, 0x888b8907U, 0x385b19e7U, 0xdbeec879U,
|
||||||
|
@ -536,9 +533,6 @@ R"===(
|
||||||
0x7b6184cbU, 0xd570b632U, 0x48745c6cU, 0xd04257b8U,
|
0x7b6184cbU, 0xd570b632U, 0x48745c6cU, 0xd04257b8U,
|
||||||
};
|
};
|
||||||
|
|
||||||
)==="
|
|
||||||
R"===(
|
|
||||||
|
|
||||||
__constant static const uint AES_KEY_FILL[16] = {
|
__constant static const uint AES_KEY_FILL[16] = {
|
||||||
0x6daca553, 0x62716609, 0xdbb5552b, 0xb4f44917,
|
0x6daca553, 0x62716609, 0xdbb5552b, 0xb4f44917,
|
||||||
0x6d7caf07, 0x846a710d, 0x1725d378, 0x0da1dc4e,
|
0x6d7caf07, 0x846a710d, 0x1725d378, 0x0da1dc4e,
|
||||||
|
@ -639,4 +633,3 @@ __kernel void hashAes1Rx4(__global const void* input, __global void* hash, uint
|
||||||
|
|
||||||
*((__global uint4*)(hash) + idx * (hashStrideBytes / sizeof(uint4)) + sub + (hashOffsetBytes / sizeof(uint4))) = *(uint4*)(x);
|
*((__global uint4*)(hash) + idx * (hashStrideBytes / sizeof(uint4)) + sub + (hashOffsetBytes / sizeof(uint4))) = *(uint4*)(x);
|
||||||
}
|
}
|
||||||
)==="
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
R"===(
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2019 SChernykh
|
Copyright (c) 2019 SChernykh
|
||||||
|
|
||||||
|
@ -156,4 +155,3 @@ __kernel void blake2b_initial_hash(__global void *out, __global const void* bloc
|
||||||
#undef blake2b_hash_registers_name
|
#undef blake2b_hash_registers_name
|
||||||
#undef blake2b_512_process_double_block_name
|
#undef blake2b_512_process_double_block_name
|
||||||
#undef out_len
|
#undef out_len
|
||||||
)==="
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
R"===(
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2019 SChernykh
|
Copyright (c) 2019 SChernykh
|
||||||
|
|
||||||
|
@ -99,4 +98,3 @@ __kernel void blake2b_hash_registers_name(__global void *out, __global const voi
|
||||||
if (out_len > 48) h[6] = hash[6];
|
if (out_len > 48) h[6] = hash[6];
|
||||||
if (out_len > 56) h[7] = hash[7];
|
if (out_len > 56) h[7] = hash[7];
|
||||||
}
|
}
|
||||||
)==="
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
R"===(
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2019 SChernykh
|
Copyright (c) 2019 SChernykh
|
||||||
|
|
||||||
|
@ -117,4 +116,3 @@ __kernel void fillAes_name(__global void* state, __global void* out, uint batch_
|
||||||
|
|
||||||
*(__global uint4*)(s) = *(uint4*)(x);
|
*(__global uint4*)(s) = *(uint4*)(x);
|
||||||
}
|
}
|
||||||
)==="
|
|
||||||
|
|
14
src/backend/opencl/cl/rx/randomx.cl
Normal file
14
src/backend/opencl/cl/rx/randomx.cl
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#include "../cn/algorithm.cl"
|
||||||
|
|
||||||
|
#if (ALGO == ALGO_RX_0)
|
||||||
|
#include "randomx_constants_monero.h"
|
||||||
|
#elif (ALGO == ALGO_RX_WOW)
|
||||||
|
#include "randomx_constants_wow.h"
|
||||||
|
#elif (ALGO == ALGO_RX_LOKI)
|
||||||
|
#include "randomx_constants_loki.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "aes.cl"
|
||||||
|
#include "blake2b.cl"
|
||||||
|
#include "randomx_vm.cl"
|
||||||
|
#include "randomx_jit.cl"
|
5384
src/backend/opencl/cl/rx/randomx_cl.h
Normal file
5384
src/backend/opencl/cl/rx/randomx_cl.h
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,3 @@
|
||||||
R"===(
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2019 SChernykh
|
Copyright (c) 2019 SChernykh
|
||||||
|
|
||||||
|
@ -95,4 +94,3 @@ along with RandomX OpenCL. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define LOC_L1 (32 - 14)
|
#define LOC_L1 (32 - 14)
|
||||||
#define LOC_L2 (32 - 18)
|
#define LOC_L2 (32 - 18)
|
||||||
#define LOC_L3 (32 - 21)
|
#define LOC_L3 (32 - 21)
|
||||||
)==="
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
R"===(
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2019 SChernykh
|
Copyright (c) 2019 SChernykh
|
||||||
|
|
||||||
|
@ -40,7 +39,7 @@ along with RandomX OpenCL. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define RANDOMX_JUMP_OFFSET 8
|
#define RANDOMX_JUMP_OFFSET 8
|
||||||
|
|
||||||
//Integer instructions
|
//Integer instructions
|
||||||
#define RANDOMX_FREQ_IADD_RS 25
|
#define RANDOMX_FREQ_IADD_RS 16
|
||||||
#define RANDOMX_FREQ_IADD_M 7
|
#define RANDOMX_FREQ_IADD_M 7
|
||||||
#define RANDOMX_FREQ_ISUB_R 16
|
#define RANDOMX_FREQ_ISUB_R 16
|
||||||
#define RANDOMX_FREQ_ISUB_M 7
|
#define RANDOMX_FREQ_ISUB_M 7
|
||||||
|
@ -70,7 +69,7 @@ along with RandomX OpenCL. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define RANDOMX_FREQ_FSQRT_R 6
|
#define RANDOMX_FREQ_FSQRT_R 6
|
||||||
|
|
||||||
//Control instructions
|
//Control instructions
|
||||||
#define RANDOMX_FREQ_CBRANCH 16
|
#define RANDOMX_FREQ_CBRANCH 25
|
||||||
#define RANDOMX_FREQ_CFROUND 1
|
#define RANDOMX_FREQ_CFROUND 1
|
||||||
|
|
||||||
//Store instruction
|
//Store instruction
|
||||||
|
@ -95,4 +94,3 @@ along with RandomX OpenCL. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define LOC_L1 (32 - 14)
|
#define LOC_L1 (32 - 14)
|
||||||
#define LOC_L2 (32 - 18)
|
#define LOC_L2 (32 - 18)
|
||||||
#define LOC_L3 (32 - 21)
|
#define LOC_L3 (32 - 21)
|
||||||
)==="
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
R"===(
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2019 SChernykh
|
Copyright (c) 2019 SChernykh
|
||||||
|
|
||||||
|
@ -95,4 +94,3 @@ along with RandomX OpenCL. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define LOC_L1 (32 - 14)
|
#define LOC_L1 (32 - 14)
|
||||||
#define LOC_L2 (32 - 17)
|
#define LOC_L2 (32 - 17)
|
||||||
#define LOC_L3 (32 - 20)
|
#define LOC_L3 (32 - 20)
|
||||||
)==="
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
R"===(
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2019 SChernykh
|
Copyright (c) 2019 SChernykh
|
||||||
Portions Copyright (c) 2018-2019 tevador
|
Portions Copyright (c) 2018-2019 tevador
|
||||||
|
@ -152,9 +151,6 @@ __global uint* jit_scratchpad_load2_fp(__global uint* p, uint vgpr_index, int vm
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
)==="
|
|
||||||
R"===(
|
|
||||||
|
|
||||||
__global uint* jit_emit_instruction(__global uint* p, __global uint* last_branch_target, const uint2 inst, int prefetch_vgpr_index, int vmcnt, uint batch_size)
|
__global uint* jit_emit_instruction(__global uint* p, __global uint* last_branch_target, const uint2 inst, int prefetch_vgpr_index, int vmcnt, uint batch_size)
|
||||||
{
|
{
|
||||||
uint opcode = inst.x & 0xFF;
|
uint opcode = inst.x & 0xFF;
|
||||||
|
@ -670,9 +666,6 @@ __global uint* jit_emit_instruction(__global uint* p, __global uint* last_branch
|
||||||
}
|
}
|
||||||
opcode -= RANDOMX_FREQ_FADD_R;
|
opcode -= RANDOMX_FREQ_FADD_R;
|
||||||
|
|
||||||
)==="
|
|
||||||
R"===(
|
|
||||||
|
|
||||||
if (opcode < RANDOMX_FREQ_FADD_M)
|
if (opcode < RANDOMX_FREQ_FADD_M)
|
||||||
{
|
{
|
||||||
if (prefetch_vgpr_index >= 0)
|
if (prefetch_vgpr_index >= 0)
|
||||||
|
@ -905,9 +898,6 @@ int jit_prefetch_read(
|
||||||
return prefetch_data_count + 1;
|
return prefetch_data_count + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
)==="
|
|
||||||
R"===(
|
|
||||||
|
|
||||||
__global uint* generate_jit_code(__global uint2* e, __global uint2* p0, __global uint* p, uint batch_size)
|
__global uint* generate_jit_code(__global uint2* e, __global uint2* p0, __global uint* p, uint batch_size)
|
||||||
{
|
{
|
||||||
int prefetch_data_count;
|
int prefetch_data_count;
|
||||||
|
@ -1440,9 +1430,6 @@ __global uint* generate_jit_code(__global uint2* e, __global uint2* p0, __global
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
)==="
|
|
||||||
R"===(
|
|
||||||
|
|
||||||
__attribute__((reqd_work_group_size(64, 1, 1)))
|
__attribute__((reqd_work_group_size(64, 1, 1)))
|
||||||
__kernel void randomx_jit(__global ulong* entropy, __global ulong* registers, __global uint2* intermediate_programs, __global uint* programs, uint batch_size, __global uint32_t* rounding, uint32_t iteration)
|
__kernel void randomx_jit(__global ulong* entropy, __global ulong* registers, __global uint2* intermediate_programs, __global uint* programs, uint batch_size, __global uint32_t* rounding, uint32_t iteration)
|
||||||
{
|
{
|
||||||
|
@ -1506,5 +1493,3 @@ __kernel void randomx_jit(__global ulong* entropy, __global ulong* registers, __
|
||||||
R[20] = getFloatMask(entropy[14]);
|
R[20] = getFloatMask(entropy[14]);
|
||||||
R[21] = getFloatMask(entropy[15]);
|
R[21] = getFloatMask(entropy[15]);
|
||||||
}
|
}
|
||||||
|
|
||||||
)==="
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
R"===(
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2019 SChernykh
|
Copyright (c) 2019 SChernykh
|
||||||
Portions Copyright (c) 2018-2019 tevador
|
Portions Copyright (c) 2018-2019 tevador
|
||||||
|
@ -150,9 +149,6 @@ uint64_t imul_rcp_value(uint32_t divisor)
|
||||||
return quotient;
|
return quotient;
|
||||||
}
|
}
|
||||||
|
|
||||||
)==="
|
|
||||||
R"===(
|
|
||||||
|
|
||||||
#define set_byte(a, position, value) do { ((uint8_t*)&(a))[(position)] = (value); } while (0)
|
#define set_byte(a, position, value) do { ((uint8_t*)&(a))[(position)] = (value); } while (0)
|
||||||
uint32_t get_byte(uint64_t a, uint32_t position) { return (a >> (position << 3)) & 0xFF; }
|
uint32_t get_byte(uint64_t a, uint32_t position) { return (a >> (position << 3)) & 0xFF; }
|
||||||
#define update_max(value, next_value) do { if ((value) < (next_value)) (value) = (next_value); } while (0)
|
#define update_max(value, next_value) do { if ((value) < (next_value)) (value) = (next_value); } while (0)
|
||||||
|
@ -343,9 +339,6 @@ __kernel void init_vm(__global const void* entropy_data, __global void* vm_state
|
||||||
// printf("\n");
|
// printf("\n");
|
||||||
//}
|
//}
|
||||||
|
|
||||||
)==="
|
|
||||||
R"===(
|
|
||||||
|
|
||||||
// Schedule instructions
|
// Schedule instructions
|
||||||
bool update_branch_target_mark = false;
|
bool update_branch_target_mark = false;
|
||||||
bool first_available_slot_is_branch_target = false;
|
bool first_available_slot_is_branch_target = false;
|
||||||
|
@ -931,9 +924,6 @@ R"===(
|
||||||
int32_t imm_index_fscal_r = -1;
|
int32_t imm_index_fscal_r = -1;
|
||||||
__global uint32_t* compiled_program = (__global uint32_t*)(R + (REGISTERS_SIZE + IMM_BUF_SIZE) / sizeof(uint64_t));
|
__global uint32_t* compiled_program = (__global uint32_t*)(R + (REGISTERS_SIZE + IMM_BUF_SIZE) / sizeof(uint64_t));
|
||||||
|
|
||||||
)==="
|
|
||||||
R"===(
|
|
||||||
|
|
||||||
// Generate opcodes for execute_vm
|
// Generate opcodes for execute_vm
|
||||||
int32_t branch_target_slot = -1;
|
int32_t branch_target_slot = -1;
|
||||||
int32_t k = -1;
|
int32_t k = -1;
|
||||||
|
@ -1413,9 +1403,6 @@ double load_F_E_groups(int value, uint64_t andMask, uint64_t orMask)
|
||||||
return as_double(x);
|
return as_double(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
)==="
|
|
||||||
R"===(
|
|
||||||
|
|
||||||
// You're one ugly motherfucker!
|
// You're one ugly motherfucker!
|
||||||
double fma_soft(double a, double b, double c, uint32_t rounding_mode)
|
double fma_soft(double a, double b, double c, uint32_t rounding_mode)
|
||||||
{
|
{
|
||||||
|
@ -1881,9 +1868,6 @@ uint32_t inner_loop(
|
||||||
return fprc;
|
return fprc;
|
||||||
}
|
}
|
||||||
|
|
||||||
)==="
|
|
||||||
R"===(
|
|
||||||
|
|
||||||
#if WORKERS_PER_HASH == 16
|
#if WORKERS_PER_HASH == 16
|
||||||
__attribute__((reqd_work_group_size(32, 1, 1)))
|
__attribute__((reqd_work_group_size(32, 1, 1)))
|
||||||
#else
|
#else
|
||||||
|
@ -2066,5 +2050,3 @@ __kernel void find_shares(__global const uint64_t* hashes, uint64_t target, uint
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
)==="
|
|
||||||
|
|
|
@ -43,9 +43,16 @@ class OclLaunchData;
|
||||||
class OclBaseRunner : public IOclRunner
|
class OclBaseRunner : public IOclRunner
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
OclBaseRunner() = delete;
|
||||||
|
OclBaseRunner(const OclBaseRunner &other) = delete;
|
||||||
|
OclBaseRunner(OclBaseRunner &&other) = delete;
|
||||||
OclBaseRunner(size_t id, const OclLaunchData &data);
|
OclBaseRunner(size_t id, const OclLaunchData &data);
|
||||||
|
|
||||||
~OclBaseRunner() override;
|
~OclBaseRunner() override;
|
||||||
|
|
||||||
|
OclBaseRunner &operator=(const OclBaseRunner &other) = delete;
|
||||||
|
OclBaseRunner &operator=(OclBaseRunner &&other) = delete;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
inline cl_context ctx() const override { return m_ctx; }
|
inline cl_context ctx() const override { return m_ctx; }
|
||||||
inline const Algorithm &algorithm() const override { return m_algorithm; }
|
inline const Algorithm &algorithm() const override { return m_algorithm; }
|
||||||
|
|
|
@ -24,9 +24,33 @@
|
||||||
|
|
||||||
#include "backend/opencl/runners/OclRxRunner.h"
|
#include "backend/opencl/runners/OclRxRunner.h"
|
||||||
|
|
||||||
|
#include "backend/opencl/OclLaunchData.h"
|
||||||
|
|
||||||
|
|
||||||
xmrig::OclRxRunner::OclRxRunner(size_t index, const OclLaunchData &data) : OclBaseRunner(index, data)
|
xmrig::OclRxRunner::OclRxRunner(size_t index, const OclLaunchData &data) : OclBaseRunner(index, data)
|
||||||
{
|
{
|
||||||
|
uint32_t worksize = 0;
|
||||||
|
uint32_t gcn_version = 12;
|
||||||
|
|
||||||
|
switch (data.thread.worksize()) {
|
||||||
|
case 2:
|
||||||
|
case 4:
|
||||||
|
case 8:
|
||||||
|
case 16:
|
||||||
|
worksize = data.thread.worksize();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
worksize = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.device.type() == OclDevice::Vega_10 || data.device.type() == OclDevice::Vega_20) {
|
||||||
|
gcn_version = 14;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_options += " -DALGO=" + std::to_string(m_algorithm.id());
|
||||||
|
m_options += " -DWORKERS_PER_HASH=" + std::to_string(worksize);
|
||||||
|
m_options += " -DGCN_VERSION=" + std::to_string(gcn_version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,3 +70,13 @@ bool xmrig::OclRxRunner::set(const Job &job, uint8_t *blob)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void xmrig::OclRxRunner::build()
|
||||||
|
{
|
||||||
|
OclBaseRunner::build();
|
||||||
|
|
||||||
|
if (!m_program) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ protected:
|
||||||
bool run(uint32_t nonce, uint32_t *hashOutput) override;
|
bool run(uint32_t nonce, uint32_t *hashOutput) override;
|
||||||
bool selfTest() const override;
|
bool selfTest() const override;
|
||||||
bool set(const Job &job, uint8_t *blob) override;
|
bool set(const Job &job, uint8_t *blob) override;
|
||||||
|
void build() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,10 @@ namespace xmrig {
|
||||||
class Algorithm
|
class Algorithm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
// Changes in following file is required if this enum changed:
|
||||||
|
//
|
||||||
|
// src/backend/opencl/cl/cn/algorithm.cl
|
||||||
|
//
|
||||||
enum Id : int {
|
enum Id : int {
|
||||||
INVALID = -1,
|
INVALID = -1,
|
||||||
CN_0, // "cn/0" CryptoNight (original).
|
CN_0, // "cn/0" CryptoNight (original).
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue