Generalization of a task that can be run in parallel.
More...
Inherits ReportingTask.
Inherited by Smoother1D< float >, Stats::ParallelCalc< float >, AGC< T >, Array1DStacker< fT, ArrT >, Array2DConverter, Array2DCopier< T >, Array2DInterpol, Array2DReSampler< T, TT >, Array3DCopier< T >, Array3DFloodfill< T >, Array3DUdfTrcRestorer< T >, ArrayMath::ArrOperExec< OperType, ArrType >, ArrayMath::CumArrOperExec< RT, AT >, ArrayMath::CumSumExec< T >, ArrayNDDataExtracter< T >, ArrayUdfValReplacer< T >, ArrayUdfValRestorer< T >, BendPointFinderBase, BodyVolumeCalculator, ColTab::MapperTask< T >, Convolver2D< T >, Convolver3D< T >, DPSDensityCalcND, DPSFromVolumeFiller, DataDistributionExtracter< vT >, DelaunayTriangulator, Density2RGBArray, DensityCalc, EM::EMObjectPosSelector, EM::EMObjectRowColSelRemoval, EM::Expl2ImplBodyExtracter, EM::HorizonMerger, FaultTraceExtractor, Fourier::CC::CC1D, FourierInterpol1D, FourierInterpol2D, FourierInterpol3D, Geometry::ArrayTesselator, ImageResizer, Implicit2MarchingCubes, Line2DInterSectionFinder, LogCubeCreator, MarchingCubes2Implicit, MarchingCubesSurfaceEditor, MemCopier< T >, MemSetter< T >, MemValReplacer< T >, MuteArrayExtracter< T >, NearestCoordFinder, ParallelDTetrahedralator, ParallelSorter< T >, PreStack::AngleMuteComputer, PreStack::Processor, RayTracer1D, RayTracerRunner, ReflCalc1D, ReflCalcRunner, ReflectivitySampler, SampledExtremeFinderND< T >, Seis::MultiTraceSynthGenerator, Seis::ParallelReader, Seis::ParallelReader2D, Seis::RaySynthGenerator, SeisDataPackFromDPS, SeisDataPackZAxisTransformer, SeisZAxisStretcher, SeisZAxisStretcherNew, Smoother1D< T >, Stats::ParallelCalc< T >, VDA2DBitMapGenerator [private]
, ValueSeriesGetAll< T >, Vel::VolumeConverter, Vel::VolumeConverterNew, VolProc::StatsCalculatorTask, VolProc::TutOpCalculatorTask, Well::LogSampler, ZAxisTransformPointGenerator, ZAxisTransformer, visBase::HorizonSectionTilePosSetup, visBase::HorizonTileRenderPreparer, and visBase::HorizonTileResolutionTesselator.
|
virtual bool | doFinish (bool success) |
|
virtual bool | doPrepare (int nrthreads) |
|
virtual bool | doWork (std::int64_t start, std::int64_t stop, int threadidx)=0 |
|
Generalization of a task that can be run in parallel.
Any task that has a fixed number of computations that are independent (i.e. they don't need to be done in a certain order) can inherit ParallelTask and be executed in parallel by calling the ParallelTask::execute().
Example of usage:
float result[N];
for ( int idx=0; idx<N; idx++ )
result[idx] = input1[idx]* function( idx, other, variables );
Could be made parallel by adding the class:
{
public:
int doWork( od_int64 start, od_int64 stop,
int threadid )
{
{
result[idx] = input1[idx] *
function( idx, other, variables );
}
return true;
}
};
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:63
virtual std::int64_t nrIterations() const =0
void addToNrDone(std::int64_t increment)
virtual bool doWork(std::int64_t start, std::int64_t stop, int threadidx)=0
virtual bool shouldContinue()
and in use that instead of the for-loop:
CalcClass myclass( N, my, parameters );
myclass.exectute();
<>
◆ ~ParallelTask()
virtual ParallelTask::~ParallelTask |
( |
| ) |
|
|
virtual |
◆ ParallelTask() [1/2]
ParallelTask::ParallelTask |
( |
const char * |
nm = 0 | ) |
|
|
protected |
◆ ParallelTask() [2/2]
◆ addToNrDone()
void ParallelTask::addToNrDone |
( |
std::int64_t |
increment | ) |
|
|
protected |
Call this from within your thread to say that you have done something. Do NOT call in very fast loops at every idx since it can impact negatively performance
◆ calculateThreadSize()
std::int64_t ParallelTask::calculateThreadSize |
( |
std::int64_t |
totalnr, |
|
|
int |
nrthreads, |
|
|
int |
thread |
|
) |
| const |
|
protected |
◆ doFinish()
virtual bool ParallelTask::doFinish |
( |
bool |
success | ) |
|
|
inlineprivatevirtual |
Called after all doWork have finished.
- Parameters
-
success | indicates whether all doWork returned true. |
Reimplemented in GMTArray2DInterpol, LogCubeCreator, visBase::HorizonSectionTilePosSetup, Vel::VolumeConverter, Vel::VolumeConverterNew, Seis::RaySynthGenerator, Seis::MultiTraceSynthGenerator, SeisZAxisStretcher, SeisZAxisStretcherNew, Seis::ParallelReader2D, Seis::ParallelReader, MarchingCubesSurfaceEditor, ReflCalcRunner, RayTracerRunner, FaultTraceExtractor2D, FaultTraceExtractor, Stats::ParallelCalc< T >, Stats::ParallelCalc< float >, ImageResizer, ReflectivitySampler, ReflCalc1D, RayTracer1D, FourierInterpol3D, FourierInterpol2D, FourierInterpol1D, BendPointFinderBase, Stats::ParallelCalc< T >, Stats::ParallelCalc< float >, ParallelSorter< T >, SeisDataPackZAxisTransformer, PreStack::AngleMuteComputer, Line2DInterSectionFinder, ZAxisTransformPointGenerator, EM::Horizon3DMerger, NearestCoordFinder, ArrayMath::CumSumExec< T >, and ArrayMath::CumArrOperExec< RT, AT >.
◆ doParallel()
void ParallelTask::doParallel |
( |
bool |
yn | ) |
|
|
inline |
◆ doPrepare()
virtual bool ParallelTask::doPrepare |
( |
int |
nrthreads | ) |
|
|
inlineprivatevirtual |
Called once, before any doWork is called.
Reimplemented in Density2RGBArray, GMTArray2DInterpol, LogCubeCreator, Well::LogSampler, visBase::HorizonTileRenderPreparer, visBase::HorizonTileResolutionTesselator, Vel::VolumeConverter, Vel::VolumeConverterNew, Seis::RaySynthGenerator, Seis::MultiTraceSynthGenerator, SeisZAxisStretcher, SeisZAxisStretcherNew, PreStack::AngleMuteComputer, MarchingCubesSurfaceEditor, MarchingCubes2Implicit, ReflCalcRunner, RayTracerRunner, FaultTraceExtractor2D, FaultTraceExtractor3D, FaultTraceExtractor, EM::EMObjectPosSelector, MemValReplacer< T >, MemCopier< T >, MemSetter< T >, ZAxisTransformer, Stats::ParallelCalc< T >, Stats::ParallelCalc< float >, Smoother1D< T >, Smoother1D< float >, ImageResizer, ReflectivitySampler, ReflCalc1D, RayTracer1D, FourierInterpol3D, FourierInterpol2D, FourierInterpol1D, Fourier::CC::CC1D, ParallelDTetrahedralator, DelaunayTriangulator, DataDistributionExtracter< vT >, Convolver2D< T >, ContinuousCurvatureArray2DInterpol, BendPointFinderBase, MuteArrayExtracter< T >, ArrayUdfValReplacer< T >, ArrayMath::ArrOperExec< OperType, ArrType >, Array3DCopier< T >, Array2DCopier< T >, TriangulationArray2DInterpol, InverseDistanceArray2DInterpol, Array2DInterpol, EM::EMObjectRowColSelRemoval, ParallelSorter< T >, Seis::ParallelReader2D, Seis::ParallelReader, SeisDataPackZAxisTransformer, SeisDataPackFromDPS, PreStack::AngleMute, ZAxisTransformPointGenerator, EM::Expl2ImplBodyExtracter, NearestCoordFinder, Array1DStacker< fT, ArrT >, ArrayMath::CumSumExec< T >, ArrayMath::CumArrOperExec< RT, AT >, Array2DFromXYConverter, and AGC< T >.
◆ doWork()
virtual bool ParallelTask::doWork |
( |
std::int64_t |
start, |
|
|
std::int64_t |
stop, |
|
|
int |
threadidx |
|
) |
| |
|
privatepure virtual |
◆ execute()
bool ParallelTask::execute |
( |
| ) |
|
|
inlineoverridevirtual |
Runs the process the desired number of times.
- Note
- that the function has static threads (normally the same number as there are processors on the machine), and these static threads will be shared by all instances of ParallelTask::execute.
Implements Task.
◆ executeParallel()
virtual bool ParallelTask::executeParallel |
( |
bool |
parallel | ) |
|
|
virtual |
Runs the process the desired number of times.
- Note
- that the function has static threads (normally the same number as there are processors on the machine), and these static threads will be shared by all instances of ParallelTask::execute.
Reimplemented in Convolver3D< T >.
◆ maxNrThreads()
virtual int ParallelTask::maxNrThreads |
( |
| ) |
const |
|
protectedvirtual |
◆ minThreadSize()
virtual int ParallelTask::minThreadSize |
( |
| ) |
const |
|
inlineprotectedvirtual |
◆ nrDone()
std::int64_t ParallelTask::nrDone |
( |
| ) |
const |
|
overridevirtual |
◆ nrIterations()
virtual std::int64_t ParallelTask::nrIterations |
( |
| ) |
const |
|
protectedpure virtual |
- Returns
- the number of times the process should be run.
Implemented in Density2RGBArray, DensityCalc, VolProc::TutOpCalculatorTask, GMTArray2DInterpol, LogCubeCreator, Well::LogSampler, VolProc::StatsCalculatorTask, visBase::HorizonSectionTilePosSetup, visBase::HorizonTileRenderPreparer, visBase::HorizonTileResolutionTesselator, Vel::VolumeConverter, Vel::VolumeConverterNew, DPSDensityCalcND, Seis::RaySynthGenerator, Seis::MultiTraceSynthGenerator, SeisZAxisStretcher, SeisZAxisStretcherNew, Seis::ParallelReader2D, Seis::ParallelReader, SeisDataPackZAxisTransformer, SeisDataPackFromDPS, PreStack::TrimStatics, PreStack::Stack, PreStack::Processor, PreStack::Mute, PreStack::LateralStack, PreStack::AngleMuteComputer, PreStack::AngleMute, MarchingCubesSurfaceEditor, MarchingCubes2Implicit, Implicit2MarchingCubes, Line2DInterSectionFinder, Geometry::ArrayTesselator, ZAxisTransformPointGenerator, ReflCalcRunner, RayTracerRunner, DPSFromVolumeFiller, ColTab::MapperTask< T >, Array2DReSampler< T, TT >, VDA2DBitMapGenerator, EM::Horizon3DMerger, FaultTraceExtractor, EM::EMObjectPosSelector, EM::Expl2ImplBodyExtracter, ValueSeriesGetAll< T >, MemValReplacer< T >, MemCopier< T >, MemSetter< T >, ArrayNDDataExtracter< T >, ZAxisTransformer, NearestCoordFinder, Stats::ParallelCalc< T >, Stats::ParallelCalc< float >, Smoother1D< T >, Smoother1D< float >, ImageResizer, ReflectivitySampler, ReflCalc1D, RayTracer1D, FourierInterpol3D, FourierInterpol2D, FourierInterpol1D, Fourier::CC::CC1D, ParallelDTetrahedralator, DelaunayTriangulator, DataDistributionExtracter< vT >, Convolver3D< T >, Convolver2D< T >, ContinuousCurvatureArray2DInterpol, BodyVolumeCalculator, BendPointFinderBase, Array1DStacker< fT, ArrT >, MuteArrayExtracter< T >, Array3DUdfTrcRestorer< T >, ArrayUdfValRestorer< T >, ArrayUdfValReplacer< T >, ArrayMath::CumSumExec< T >, ArrayMath::ArrOperExec< OperType, ArrType >, ArrayMath::CumArrOperExec< RT, AT >, Array3DCopier< T >, Array2DCopier< T >, Array3DFloodfill< T >, ExtensionArray2DInterpol, TriangulationArray2DInterpol, InverseDistanceArray2DInterpol, Array2DFromXYConverter, AGC< T >, EM::EMObjectRowColSelRemoval, ParallelSorter< T >, SampledExtremeFinderND< T >, and Convolver2D< T >.
◆ quickAddToNrDone()
void ParallelTask::quickAddToNrDone |
( |
std::int64_t |
loopidx | ) |
|
|
protected |
Call this from within your thread to say that you have done something, but not very often
◆ resetNrDone()
void ParallelTask::resetNrDone |
( |
| ) |
|
|
protected |
◆ sPosFinished()
static uiString ParallelTask::sPosFinished |
( |
| ) |
|
|
inlinestatic |
◆ stopAllOnFailure()
virtual bool ParallelTask::stopAllOnFailure |
( |
| ) |
const |
|
inlineprotectedvirtual |
If one thread fails, should an attempt be made to stop the others? If true, enableWorkControl will be enabled, and threads should call shouldContinue() regularly.
Reimplemented in LogCubeCreator.
◆ sTrcFinished()
static uiString ParallelTask::sTrcFinished |
( |
| ) |
|
|
inlinestatic |
◆ totalNr()
std::int64_t ParallelTask::totalNr |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ ParallelTaskRunner
friend class ParallelTaskRunner |
|
friend |
◆ nrdone_
◆ nrdonebigchunksz_
std::int64_t ParallelTask::nrdonebigchunksz_ |
|
private |
◆ parallel_
bool ParallelTask::parallel_ = true |
|
private |
◆ totalnrcache_
std::int64_t ParallelTask::totalnrcache_ |
|
private |