Pulling a work_thresholds reference through opencl_work class so it doesn't need a static reference.
This commit is contained in:
parent
c3ac780af2
commit
ebcf70e96e
6 changed files with 13 additions and 12 deletions
|
@ -85,7 +85,7 @@ TEST (work, opencl)
|
|||
if (!environment.platforms.empty () && !environment.platforms.begin ()->devices.empty ())
|
||||
{
|
||||
nano::opencl_config config (0, 0, 16 * 1024);
|
||||
auto opencl (nano::opencl_work::create (true, config, logger));
|
||||
auto opencl (nano::opencl_work::create (true, config, logger, nano::dev::network_params.network.publish_thresholds));
|
||||
if (opencl != nullptr)
|
||||
{
|
||||
// 0 threads, should add 1 for managing OpenCL
|
||||
|
|
|
@ -60,7 +60,7 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano::
|
|||
config.node.logging.init (data_path);
|
||||
nano::logger_mt logger{ config.node.logging.min_time_between_log_output };
|
||||
boost::asio::io_context io_ctx;
|
||||
auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger));
|
||||
auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger, config.node.network_params.network.publish_thresholds));
|
||||
nano::work_pool opencl_work (config.node.network_params.network, config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic<int> & ticket_a) {
|
||||
return opencl->generate_work (version_a, root_a, difficulty_a, ticket_a);
|
||||
}
|
||||
|
|
|
@ -610,7 +610,7 @@ int main (int argc, char * const * argv)
|
|||
{
|
||||
nano::logger_mt logger;
|
||||
nano::opencl_config config (platform, device, threads);
|
||||
auto opencl (nano::opencl_work::create (true, config, logger));
|
||||
auto opencl (nano::opencl_work::create (true, config, logger, network_constants.publish_thresholds));
|
||||
nano::work_pool work_pool{ network_constants, 0, std::chrono::nanoseconds (0), opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic<int> &) {
|
||||
return opencl->generate_work (version_a, root_a, difficulty_a);
|
||||
}
|
||||
|
|
|
@ -106,7 +106,7 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost
|
|||
std::shared_ptr<nano::node> node;
|
||||
std::shared_ptr<nano_qt::wallet> gui;
|
||||
nano::set_application_icon (application);
|
||||
auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger));
|
||||
auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger, config.node.network_params.network.publish_thresholds));
|
||||
nano::work_pool work{ config.node.network_params.network, config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic<int> &) {
|
||||
return opencl->generate_work (version_a, root_a, difficulty_a);
|
||||
}
|
||||
|
|
|
@ -250,7 +250,7 @@ void nano::opencl_environment::dump (std::ostream & stream)
|
|||
}
|
||||
}
|
||||
|
||||
nano::opencl_work::opencl_work (bool & error_a, nano::opencl_config const & config_a, nano::opencl_environment & environment_a, nano::logger_mt & logger_a) :
|
||||
nano::opencl_work::opencl_work (bool & error_a, nano::opencl_config const & config_a, nano::opencl_environment & environment_a, nano::logger_mt & logger_a, nano::work_thresholds & work) :
|
||||
config (config_a),
|
||||
context (0),
|
||||
attempt_buffer (0),
|
||||
|
@ -260,7 +260,8 @@ nano::opencl_work::opencl_work (bool & error_a, nano::opencl_config const & conf
|
|||
program (0),
|
||||
kernel (0),
|
||||
queue (0),
|
||||
logger (logger_a)
|
||||
logger (logger_a),
|
||||
work{ work }
|
||||
{
|
||||
error_a |= config.platform >= environment_a.platforms.size ();
|
||||
if (!error_a)
|
||||
|
@ -455,8 +456,7 @@ boost::optional<uint64_t> nano::opencl_work::generate_work (nano::work_version c
|
|||
uint64_t result (0);
|
||||
unsigned thread_count (config.threads);
|
||||
size_t work_size[] = { thread_count, 0, 0 };
|
||||
static nano::network_constants constants;
|
||||
while (constants.publish_thresholds.difficulty (version_a, root_a, result) < difficulty_a && !error && ticket_a == ticket_l)
|
||||
while (work.difficulty (version_a, root_a, result) < difficulty_a && !error && ticket_a == ticket_l)
|
||||
{
|
||||
result = rand.next ();
|
||||
cl_int write_error1 = clEnqueueWriteBuffer (queue, attempt_buffer, false, 0, sizeof (uint64_t), &result, 0, nullptr, nullptr);
|
||||
|
@ -522,7 +522,7 @@ boost::optional<uint64_t> nano::opencl_work::generate_work (nano::work_version c
|
|||
return value;
|
||||
}
|
||||
|
||||
std::unique_ptr<nano::opencl_work> nano::opencl_work::create (bool create_a, nano::opencl_config const & config_a, nano::logger_mt & logger_a)
|
||||
std::unique_ptr<nano::opencl_work> nano::opencl_work::create (bool create_a, nano::opencl_config const & config_a, nano::logger_mt & logger_a, nano::work_thresholds & work)
|
||||
{
|
||||
std::unique_ptr<nano::opencl_work> result;
|
||||
if (create_a)
|
||||
|
@ -534,7 +534,7 @@ std::unique_ptr<nano::opencl_work> nano::opencl_work::create (bool create_a, nan
|
|||
logger_a.always_log (stream.str ());
|
||||
if (!error)
|
||||
{
|
||||
result.reset (new nano::opencl_work (error, config_a, environment, logger_a));
|
||||
result.reset (new nano::opencl_work (error, config_a, environment, logger_a, work));
|
||||
if (error)
|
||||
{
|
||||
result.reset ();
|
||||
|
|
|
@ -40,11 +40,11 @@ class work_pool;
|
|||
class opencl_work
|
||||
{
|
||||
public:
|
||||
opencl_work (bool &, nano::opencl_config const &, nano::opencl_environment &, nano::logger_mt &);
|
||||
opencl_work (bool &, nano::opencl_config const &, nano::opencl_environment &, nano::logger_mt &, nano::work_thresholds & work);
|
||||
~opencl_work ();
|
||||
boost::optional<uint64_t> generate_work (nano::work_version const, nano::root const &, uint64_t const);
|
||||
boost::optional<uint64_t> generate_work (nano::work_version const, nano::root const &, uint64_t const, std::atomic<int> &);
|
||||
static std::unique_ptr<opencl_work> create (bool, nano::opencl_config const &, nano::logger_mt &);
|
||||
static std::unique_ptr<opencl_work> create (bool, nano::opencl_config const &, nano::logger_mt &, nano::work_thresholds & work);
|
||||
nano::opencl_config const & config;
|
||||
nano::mutex mutex;
|
||||
cl_context context;
|
||||
|
@ -57,5 +57,6 @@ public:
|
|||
cl_command_queue queue;
|
||||
nano::xorshift1024star rand;
|
||||
nano::logger_mt & logger;
|
||||
nano::work_thresholds & work;
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue