DiSMEC++
runner.h
Go to the documentation of this file.
1 // Copyright (c) 2021, Aalto University, developed by Erik Schultheis
2 // All rights reserved.
3 //
4 // SPDX-License-Identifier: MIT
5 
6 #ifndef DISMEC_RUNNER_H
7 #define DISMEC_RUNNER_H
8 
9 #include <functional>
10 #include <memory>
11 #include <chrono>
12 #include "spdlog/spdlog.h"
13 
14 namespace dismec::parallel {
15  class TaskGenerator;
16 
17  struct RunResult {
18  bool IsFinished = false;
19  long NextTask = -1;
21  // timing info
22  std::chrono::seconds Duration;
23  };
24 
26  public:
29  explicit ParallelRunner(long num_threads, long chunk_size=1);
30 
31  void set_chunk_size(long chunk_size);
32  void set_time_limit(std::chrono::milliseconds time_limit);
33 
35  void set_logger(std::shared_ptr<spdlog::logger> logger);
36 
42  [[nodiscard]] RunResult run(TaskGenerator& tasks, long start=0);
43 
44  private:
45 
46  // helpers
47  void log_start(long begin, long end);
48  void log_finished(long begin, long end);
49 
51  long m_ChunkSize = 1;
52  std::chrono::milliseconds m_TimeLimit;
53  std::shared_ptr<spdlog::logger> m_Logger;
54 
55  bool m_BindThreads = true;
56  };
57 }
58 
59 #endif //DISMEC_RUNNER_H
void set_logger(std::shared_ptr< spdlog::logger > logger)
sets the logger object that is used for reporting. Set to nullptr for quiet mode.
Definition: runner.cpp:28
std::shared_ptr< spdlog::logger > m_Logger
Definition: runner.h:53
void log_start(long begin, long end)
Definition: runner.cpp:142
void set_time_limit(std::chrono::milliseconds time_limit)
Definition: runner.cpp:160
RunResult run(TaskGenerator &tasks, long start=0)
Definition: runner.cpp:39
void set_chunk_size(long chunk_size)
Definition: runner.cpp:24
ParallelRunner(long num_threads, long chunk_size=1)
Definition: runner.cpp:18
std::chrono::milliseconds m_TimeLimit
Definition: runner.h:52
void log_finished(long begin, long end)
Definition: runner.cpp:151
Base class for all parallelized operations.
Definition: task.h:21
std::chrono::seconds Duration
How long did this run take.
Definition: runner.h:22
long NextTask
with which a subsequent run should start.
Definition: runner.h:19
bool IsFinished
If this is true, then all tasks have been run successfully.
Definition: runner.h:18