|
@ -32,6 +32,8 @@ |
|
|
#include <vector> |
|
|
#include <vector> |
|
|
#include <random> |
|
|
#include <random> |
|
|
#include <random> |
|
|
#include <random> |
|
|
|
|
|
#include <atomic> |
|
|
|
|
|
#include <sstream> |
|
|
#include <libethash/util.h> |
|
|
#include <libethash/util.h> |
|
|
#include <libethash/ethash.h> |
|
|
#include <libethash/ethash.h> |
|
|
#include <libethash/internal.h> |
|
|
#include <libethash/internal.h> |
|
@ -56,7 +58,22 @@ unsigned const ethash_cl_miner::c_defaultGlobalWorkSizeMultiplier = 4096; // * C |
|
|
unsigned const ethash_cl_miner::c_defaultMSPerBatch = 0; |
|
|
unsigned const ethash_cl_miner::c_defaultMSPerBatch = 0; |
|
|
|
|
|
|
|
|
// TODO: If at any point we can use libdevcore in here then we should switch to using a LogChannel
|
|
|
// TODO: If at any point we can use libdevcore in here then we should switch to using a LogChannel
|
|
|
|
|
|
#if defined(_WIN32) |
|
|
|
|
|
extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA(const char* lpOutputString); |
|
|
|
|
|
static std::atomic_flag s_logSpin = ATOMIC_FLAG_INIT; |
|
|
|
|
|
#define ETHCL_LOG(_contents) \ |
|
|
|
|
|
do \ |
|
|
|
|
|
{ \ |
|
|
|
|
|
std::stringstream ss; \ |
|
|
|
|
|
ss << _contents; \ |
|
|
|
|
|
while (s_logSpin.test_and_set(std::memory_order_acquire)) {} \ |
|
|
|
|
|
OutputDebugStringA(ss.str().c_str()); \ |
|
|
|
|
|
cerr << ss.str() << endl << flush; \ |
|
|
|
|
|
s_logSpin.clear(std::memory_order_release); \ |
|
|
|
|
|
} while (false) |
|
|
|
|
|
#else |
|
|
#define ETHCL_LOG(_contents) cout << "[OPENCL]:" << _contents << endl |
|
|
#define ETHCL_LOG(_contents) cout << "[OPENCL]:" << _contents << endl |
|
|
|
|
|
#endif |
|
|
// Types of OpenCL devices we are interested in
|
|
|
// Types of OpenCL devices we are interested in
|
|
|
#define ETHCL_QUERIED_DEVICE_TYPES (CL_DEVICE_TYPE_GPU | CL_DEVICE_TYPE_ACCELERATOR) |
|
|
#define ETHCL_QUERIED_DEVICE_TYPES (CL_DEVICE_TYPE_GPU | CL_DEVICE_TYPE_ACCELERATOR) |
|
|
|
|
|
|
|
|