3 #include <WarehouseThreadPool.h>
4 #include <PulseThreadPoolInterface.h>
5 #include <scanner/detector/PulseTaskDropper.h>
6 #include <noise/RandomnessGenerator.h>
7 #include <noise/UniformNoiseSource.h>
11 using std::shared_ptr;
12 using std::make_shared;
61 std::size_t
const _pool_size,
62 double const deviceAccuracy,
63 std::size_t
const maxTasks=256
71 intersectionHandlingNoiseSources =
75 for (std::size_t i = 0; i < this->
pool_size; ++i){
104 std::vector<std::vector<double>>&,
111 "PulseWarehouseThreadPool::run_pulse_task is not supported.\n"
112 "Try using try_run_pulse_task instead"
122 std::vector<std::vector<double>>&,
128 return post(make_shared<PulseTaskDropper>(
151 void doTask(
size_t const tid, shared_ptr<PulseTaskDropper> task)
override {
Base class for Helios exceptions.
Definition: HeliosException.h:12
Class implementing a task dropper to deal with pulse tasks.
Definition: PulseTaskDropper.h:27
Pulse task interface.
Definition: PulseTask.h:13
Interface for thread pools supporting pulse tasks.
Definition: PulseThreadPoolInterface.h:18
Class implementing a warehouse thread pool to deal with pulse tasks.
Definition: PulseWarehouseThreadPool.h:23
RandomnessGenerator< double > * randGens2
Second randomness generators (to substitute old box muller), one per thread.
Definition: PulseWarehouseThreadPool.h:45
void doTask(size_t const tid, shared_ptr< PulseTaskDropper > task) override
Thread execute given task using its associated resources. It is, its apMatrix, its randomness generat...
Definition: PulseWarehouseThreadPool.h:151
UniformNoiseSource< double > * intersectionHandlingNoiseSources
Intersection handling noise sources, one per thread.
Definition: PulseWarehouseThreadPool.h:49
void join() override
Definition: PulseWarehouseThreadPool.h:135
PulseWarehouseThreadPool(std::size_t const _pool_size, double const deviceAccuracy, std::size_t const maxTasks=256)
Pulse warehouse thread pool constructor.
Definition: PulseWarehouseThreadPool.h:60
bool try_run_pulse_task(TaskDropper< PulseTask, PulseThreadPoolInterface, std::vector< std::vector< double >> &, RandomnessGenerator< double > &, RandomnessGenerator< double > &, NoiseSource< double > & > &dropper) override
Definition: PulseWarehouseThreadPool.h:118
std::vector< std::vector< double > > * apMatrices
Definition: PulseWarehouseThreadPool.h:35
RandomnessGenerator< double > * randGens
First randomness generators (general purpose), one per thread.
Definition: PulseWarehouseThreadPool.h:40
void run_pulse_task(TaskDropper< PulseTask, PulseThreadPoolInterface, std::vector< std::vector< double >> &, RandomnessGenerator< double > &, RandomnessGenerator< double > &, NoiseSource< double > & > &dropper) override
Definition: PulseWarehouseThreadPool.h:100
void computeUniformRealDistribution(RealType lowerBound, RealType upperBound)
Compute a uniform real distribution using the specified real data type.
Definition: RandomnessGenerator.h:354
void computeNormalDistribution(RealType mean, RealType stdev)
Compute a normal distribution using the specified real data type.
Definition: RandomnessGenerator.h:400
Class which handles tasks dropping. It is, executing and then removing each task when dropping.
Definition: TaskDropper.h:22
Thread pool which starts thread so they are always waiting for new tasks to be posted to the warehous...
Definition: WarehouseThreadPool.h:18
std::size_t pool_size
Size of thread pool (number of threads)
Definition: ThreadPool.h:47
virtual void join()
Lock until warehouse is empty.
Definition: WarehouseThreadPool.h:151
virtual bool post(shared_ptr< PulseTaskDropper > task)
Expose the warehouse post method.
Definition: WarehouseThreadPool.h:100