65 : fraction_done(0), msg(
"<unknown>")
68 : fraction_done(fraction_done_), msg(
std::move(msg_))
80 template<
typename TaskStatusReportType>
123 namespace Sequential {
145 template<
typename TaskType_,
typename TaskCData_,
typename ResultsCollector_,
146 typename LoggerType_,
typename CountIntType_ =
int>
150 typedef TaskType_ TaskType;
151 typedef typename TaskType::StatusReportType TaskStatusReportType;
152 typedef TaskCData_ TaskCData;
153 typedef ResultsCollector_ ResultsCollector;
154 typedef LoggerType_ LoggerType;
155 typedef CountIntType_ CountIntType;
159 typedef typename TaskType::ResultType TaskResultType;
167 const TaskCData * pcdata;
168 ResultsCollector * results;
171 CountIntType num_total_runs;
178 struct TaskMgrIface {
180 : dispatcher(dispatcher_),
181 status_report_requested(
false),
182 status_report_user_fn()
189 FullStatusReportCallbackType status_report_user_fn;
191 inline void _request_status_report() { status_report_requested = 1; }
193 inline bool statusReportRequested()
const 195 return status_report_requested;
198 inline void submitStatusReport(
const TaskStatusReportType &statreport)
216 status_report_user_fn(fullstatus);
218 status_report_requested =
false;
223 TaskMgrIface mgriface;
226 TaskDispatcher(TaskCData * pcdata_, ResultsCollector * results_, LoggerType & logger_,
227 CountIntType num_total_runs_)
228 : pcdata(pcdata_), results(results_), logger(logger_), num_total_runs(num_total_runs_),
235 results->init(num_total_runs, CountIntType(1), pcdata);
237 logger.debug(
"MultiProc::Sequential::TaskDispatcher::run()",
"preparing for sequential runs");
239 for (task_k = 0; task_k < num_total_runs; ++task_k) {
241 logger.debug(
"Tomographer::MultiProc::Sequential::TaskDispatcher::run()",
242 [&](
std::ostream & stream) { stream <<
"Running task #" << task_k <<
" ..."; });
244 auto input = pcdata->getTaskInput(task_k);
247 TaskType t(input, pcdata, logger);
250 t.run(pcdata, logger, &mgriface);
253 results->collectResult(task_k, t.getResult(), pcdata);
256 results->runsFinished(num_total_runs, pcdata);
270 template<
typename Fn>
273 mgriface.status_report_user_fn = fnstatus;
289 mgriface._request_status_report();
void setStatusReportHandler(Fn fnstatus)
assign a callable to be called whenever a status report is requested
Base namespace for the Tomographer project.
void requestStatusReport()
Request a status report.
std::vector< TaskStatusReportType, typename Tools::NeedOwnOperatorNew< TaskStatusReportType >::AllocatorType > workers_reports
List with the raw report submitted from each individual thread.
int num_total_runs
Total number of tasks to perform.
std::vector< bool > workers_running
List specifying for each worker (e.g. a spawned thread) whether it is active or not.
Basic status report class.
Managing the need for specific overrides to operator new() for some types (especially Eigen types) ...
Executes multiple tasks sequentially.
int num_completed
Number of completed tasks.
A complete status report, abstract version.