diff options
Diffstat (limited to 'xmrstak/backend/cpu/minethd.hpp')
-rw-r--r-- | xmrstak/backend/cpu/minethd.hpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/xmrstak/backend/cpu/minethd.hpp b/xmrstak/backend/cpu/minethd.hpp new file mode 100644 index 0000000..a091ee8 --- /dev/null +++ b/xmrstak/backend/cpu/minethd.hpp @@ -0,0 +1,59 @@ +#pragma once + +#include "crypto/cryptonight.h" +#include "xmrstak/backend/miner_work.hpp" +#include "xmrstak/backend/iBackend.hpp" + +#include <iostream> +#include <thread> +#include <vector> +#include <atomic> +#include <mutex> + +namespace xmrstak +{ +namespace cpu +{ + +class minethd : public iBackend +{ +public: + static std::vector<iBackend*> thread_starter(uint32_t threadOffset, miner_work& pWork); + static bool self_test(); + + typedef void (*cn_hash_fun)(const void*, size_t, void*, cryptonight_ctx*); + + static cn_hash_fun func_selector(bool bHaveAes, bool bNoPrefetch); + static void thd_setaffinity(std::thread::native_handle_type h, uint64_t cpu_id); + + static cryptonight_ctx* minethd_alloc_ctx(); + +private: + + typedef void (*cn_hash_fun_dbl)(const void*, size_t, void*, cryptonight_ctx* __restrict, cryptonight_ctx* __restrict); + static cn_hash_fun_dbl func_dbl_selector(bool bHaveAes, bool bNoPrefetch); + + minethd(miner_work& pWork, size_t iNo, bool double_work, bool no_prefetch, int64_t affinity); + + void work_main(); + void double_work_main(); + void consume_work(); + + uint64_t iJobNo; + + static miner_work oGlobalWork; + miner_work oWork; + + void pin_thd_affinity(); + // Held by the creating context to prevent a race cond with oWorkThd = std::thread(...) + std::mutex work_thd_mtx; + + std::thread oWorkThd; + int64_t affinity; + + bool bQuit; + bool bNoPrefetch; +}; + +} // namespace cpu +} // namepsace xmrstak |