|
|
@ -24,6 +24,7 @@ |
|
|
|
|
|
|
|
#include <cstdio> |
|
|
|
#include <cstdlib> |
|
|
|
#include <iostream> |
|
|
|
#include <assert.h> |
|
|
|
#include <queue> |
|
|
|
#include <vector> |
|
|
@ -43,6 +44,8 @@ |
|
|
|
#undef min |
|
|
|
#undef max |
|
|
|
|
|
|
|
using namespace std; |
|
|
|
|
|
|
|
static void add_definition(std::string& source, char const* id, unsigned value) |
|
|
|
{ |
|
|
|
char buf[256]; |
|
|
@ -63,7 +66,7 @@ std::string ethash_cl_miner::platform_info(unsigned _platformId, unsigned _devic |
|
|
|
cl::Platform::get(&platforms); |
|
|
|
if (platforms.empty()) |
|
|
|
{ |
|
|
|
debugf("No OpenCL platforms found.\n"); |
|
|
|
cout << "No OpenCL platforms found." << endl; |
|
|
|
return std::string(); |
|
|
|
} |
|
|
|
|
|
|
@ -73,7 +76,7 @@ std::string ethash_cl_miner::platform_info(unsigned _platformId, unsigned _devic |
|
|
|
platforms[platform_num].getDevices(CL_DEVICE_TYPE_ALL, &devices); |
|
|
|
if (devices.empty()) |
|
|
|
{ |
|
|
|
debugf("No OpenCL devices found.\n"); |
|
|
|
cout << "No OpenCL devices found." << endl; |
|
|
|
return std::string(); |
|
|
|
} |
|
|
|
|
|
|
@ -91,7 +94,7 @@ unsigned ethash_cl_miner::get_num_devices(unsigned _platformId) |
|
|
|
cl::Platform::get(&platforms); |
|
|
|
if (platforms.empty()) |
|
|
|
{ |
|
|
|
debugf("No OpenCL platforms found.\n"); |
|
|
|
cout << "No OpenCL platforms found." << endl; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
@ -100,7 +103,7 @@ unsigned ethash_cl_miner::get_num_devices(unsigned _platformId) |
|
|
|
platforms[platform_num].getDevices(CL_DEVICE_TYPE_ALL, &devices); |
|
|
|
if (devices.empty()) |
|
|
|
{ |
|
|
|
debugf("No OpenCL devices found.\n"); |
|
|
|
cout << "No OpenCL devices found." << endl; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
return devices.size(); |
|
|
@ -124,7 +127,7 @@ bool ethash_cl_miner::init(ethash_params const& params, std::function<void(void* |
|
|
|
cl::Platform::get(&platforms); |
|
|
|
if (platforms.empty()) |
|
|
|
{ |
|
|
|
debugf("No OpenCL platforms found.\n"); |
|
|
|
cout << "No OpenCL platforms found." << endl; |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
@ -132,31 +135,25 @@ bool ethash_cl_miner::init(ethash_params const& params, std::function<void(void* |
|
|
|
|
|
|
|
_platformId = std::min<unsigned>(_platformId, platforms.size() - 1); |
|
|
|
|
|
|
|
fprintf(stderr, "Using platform: %s\n", platforms[_platformId].getInfo<CL_PLATFORM_NAME>().c_str()); |
|
|
|
cout << "Using platform: " << platforms[_platformId].getInfo<CL_PLATFORM_NAME>().c_str() << endl; |
|
|
|
|
|
|
|
// get GPU device of the default platform
|
|
|
|
std::vector<cl::Device> devices; |
|
|
|
platforms[_platformId].getDevices(CL_DEVICE_TYPE_ALL, &devices); |
|
|
|
if (devices.empty()) |
|
|
|
{ |
|
|
|
debugf("No OpenCL devices found.\n"); |
|
|
|
cout << "No OpenCL devices found." << endl; |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
// use default device
|
|
|
|
// use selected device
|
|
|
|
cl::Device& device = devices[std::min<unsigned>(_deviceId, devices.size() - 1)]; |
|
|
|
for (unsigned n = 0; n < devices.size(); ++n) |
|
|
|
{ |
|
|
|
auto version = devices[n].getInfo<CL_DEVICE_VERSION>(); |
|
|
|
auto name = devices[n].getInfo<CL_DEVICE_NAME>(); |
|
|
|
fprintf(stderr, "%s %d: %s (%s)\n", n == _deviceId ? "USING " : " ", n, name.c_str(), version.c_str()); |
|
|
|
} |
|
|
|
std::string device_version = device.getInfo<CL_DEVICE_VERSION>(); |
|
|
|
fprintf(stderr, "Using device: %s (%s)\n", device.getInfo<CL_DEVICE_NAME>().c_str(),device_version.c_str()); |
|
|
|
cout << "Using device: " << device.getInfo<CL_DEVICE_NAME>().c_str() << "(" << device_version.c_str() << ")" << endl; |
|
|
|
|
|
|
|
if (strncmp("OpenCL 1.0", device_version.c_str(), 10) == 0) |
|
|
|
{ |
|
|
|
debugf("OpenCL 1.0 is not supported.\n"); |
|
|
|
cout << "OpenCL 1.0 is not supported." << endl; |
|
|
|
return false; |
|
|
|
} |
|
|
|
if (strncmp("OpenCL 1.1", device_version.c_str(), 10) == 0) |
|
|
@ -190,7 +187,7 @@ bool ethash_cl_miner::init(ethash_params const& params, std::function<void(void* |
|
|
|
} |
|
|
|
catch (cl::Error err) |
|
|
|
{ |
|
|
|
debugf("%s\n", program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(device).c_str()); |
|
|
|
cout << program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(device).c_str(); |
|
|
|
return false; |
|
|
|
} |
|
|
|
m_hash_kernel = cl::Kernel(program, "ethash_hash"); |
|
|
|