docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
sdfg::passes::scheduler::LoopScheduler Class Referenceabstract

#include <sdfg/passes/scheduler/loop_scheduler.h>

Inheritance diagram for sdfg::passes::scheduler::LoopScheduler:
[legend]

Public Member Functions

virtual ~LoopScheduler ()=default
virtual SchedulerAction find (builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager, structured_control_flow::StructuredLoop &loop, bool offload_unknown_sizes=false)=0
 Phase 1: Determine the action for a loop during loop discovery.
virtual SchedulerAction find (builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager, structured_control_flow::While &loop, bool offload_unknown_sizes=false)=0
virtual void pre_schedule (builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager, std::vector< structured_control_flow::StructuredLoop * > &applicable_loops)
 Pre-scheduling phase: collapse and cleanup on the applicable loops.
virtual bool can_apply_schedule (builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager, structured_control_flow::StructuredLoop &loop, bool offload_unknown_sizes=false)=0
 Check if the scheduling transform can be applied to a loop.
virtual void apply_schedule (builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager, structured_control_flow::StructuredLoop &loop, bool offload_unknown_sizes=false)=0
 Apply the scheduling transform to a single loop.
virtual bool post_schedule (builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager, std::vector< structured_control_flow::StructuredLoop * > &scheduled_loops)
 Post-scheduling phase: additional transforms on the scheduled loops.
virtual void set_report (PassReportConsumer *report)
virtual void set_recorder (transformations::Recorder *recorder)
 Attach an optional Recorder that captures each scheduling transform applied via apply_schedule as a replayable descriptor.
virtual std::unordered_set< ScheduleTypeCategory > compatible_types ()=0

Protected Attributes

PassReportConsumer * report_ = nullptr
transformations::Recorder * recorder_ = nullptr

Constructor & Destructor Documentation

◆ ~LoopScheduler()

virtual sdfg::passes::scheduler::LoopScheduler::~LoopScheduler ( )
virtualdefault

Member Function Documentation

◆ apply_schedule()

virtual void sdfg::passes::scheduler::LoopScheduler::apply_schedule ( builder::StructuredSDFGBuilder & builder,
analysis::AnalysisManager & analysis_manager,
structured_control_flow::StructuredLoop & loop,
bool offload_unknown_sizes = false )
pure virtual

◆ can_apply_schedule()

virtual bool sdfg::passes::scheduler::LoopScheduler::can_apply_schedule ( builder::StructuredSDFGBuilder & builder,
analysis::AnalysisManager & analysis_manager,
structured_control_flow::StructuredLoop & loop,
bool offload_unknown_sizes = false )
pure virtual

Check if the scheduling transform can be applied to a loop.

Called after pre_schedule. Used to filter the applicable loops before applying.

Implemented in sdfg::passes::scheduler::CUDAOffloadScheduler, sdfg::passes::scheduler::CUDAScheduler, sdfg::passes::scheduler::OMPScheduler, sdfg::passes::scheduler::ROCMOffloadScheduler, sdfg::passes::scheduler::ROCMScheduler, and sdfg::passes::scheduler::VectorizeScheduler.

◆ compatible_types()

◆ find() [1/2]

virtual SchedulerAction sdfg::passes::scheduler::LoopScheduler::find ( builder::StructuredSDFGBuilder & builder,
analysis::AnalysisManager & analysis_manager,
structured_control_flow::StructuredLoop & loop,
bool offload_unknown_sizes = false )
pure virtual

Phase 1: Determine the action for a loop during loop discovery.

Returns NEXT if the loop should be scheduled (added to the applicable set), CHILDREN if the scheduler should descend into child loops instead, or SKIP if the loop already carries a non-None schedule and must be left untouched (neither scheduled nor traversed into).

Implemented in sdfg::passes::scheduler::CUDAOffloadScheduler, sdfg::passes::scheduler::CUDAScheduler, sdfg::passes::scheduler::OMPScheduler, sdfg::passes::scheduler::ROCMOffloadScheduler, sdfg::passes::scheduler::ROCMScheduler, and sdfg::passes::scheduler::VectorizeScheduler.

◆ find() [2/2]

◆ post_schedule()

virtual bool sdfg::passes::scheduler::LoopScheduler::post_schedule ( builder::StructuredSDFGBuilder & builder,
analysis::AnalysisManager & analysis_manager,
std::vector< structured_control_flow::StructuredLoop * > & scheduled_loops )
inlinevirtual

Post-scheduling phase: additional transforms on the scheduled loops.

Called once per target after apply_schedule, even if no loops were scheduled (scheduled_loops may be empty). GPU schedulers use this for loop reordering, nested parallelization, and library node transfer extraction.

Default implementation is a no-op.

Returns
true if the SDFG was modified

Reimplemented in sdfg::passes::scheduler::CUDAOffloadScheduler, sdfg::passes::scheduler::CUDAScheduler, sdfg::passes::scheduler::ROCMOffloadScheduler, and sdfg::passes::scheduler::ROCMScheduler.

◆ pre_schedule()

virtual void sdfg::passes::scheduler::LoopScheduler::pre_schedule ( builder::StructuredSDFGBuilder & builder,
analysis::AnalysisManager & analysis_manager,
std::vector< structured_control_flow::StructuredLoop * > & applicable_loops )
inlinevirtual

Pre-scheduling phase: collapse and cleanup on the applicable loops.

Called after loop discovery and before can_apply_schedule/apply_schedule. Implementations may collapse loop nests, run symbol propagation, dead data/CFG elimination, etc. The vector is modified in-place to reflect any pointer changes (e.g. after collapse).

Default implementation is a no-op.

Reimplemented in sdfg::passes::scheduler::CUDAOffloadScheduler, sdfg::passes::scheduler::CUDAScheduler, sdfg::passes::scheduler::OMPScheduler, sdfg::passes::scheduler::ROCMOffloadScheduler, and sdfg::passes::scheduler::ROCMScheduler.

◆ set_recorder()

virtual void sdfg::passes::scheduler::LoopScheduler::set_recorder ( transformations::Recorder * recorder)
inlinevirtual

Attach an optional Recorder that captures each scheduling transform applied via apply_schedule as a replayable descriptor.

◆ set_report()

virtual void sdfg::passes::scheduler::LoopScheduler::set_report ( PassReportConsumer * report)
inlinevirtual

Member Data Documentation

◆ recorder_

transformations::Recorder* sdfg::passes::scheduler::LoopScheduler::recorder_ = nullptr
protected

◆ report_

PassReportConsumer* sdfg::passes::scheduler::LoopScheduler::report_ = nullptr
protected

The documentation for this class was generated from the following file: