Skip to content
Derek Gerstmann edited this page Mar 1, 2024 · 2 revisions

The following table outlines all the scheduling directives that can be combined and applied to a pipeline stage:

Scheduling Directive Description Typical Usage
compute_root() Compute all of this function once ahead of time. Equivalent to `compute_at(LoopLevel::root())` ...
compute_at() Schedule a function to be computed within the iteration over a given LoopLevel. ...
compute_with() Schedule the iteration over this stage to be fused with another stage 's' from outermost loop to a given LoopLevel. ...
memoize() Cache a computed version of this function across invocations of the Func. ...
async() Produce this Func asynchronously in a separate thread. ...
split() ... ...
fuse() ... ...
serial() ... ...
parallel() ... ...
vectorize() ... ...
unroll() ... ...
partition() ... ...
never_partition() ... ...
always_partition() ... ...
tile() ... ...
reorder() ... ...
rename() ... ...
specialize() ... ...
gpu_threads() ... ...
gpu_lanes() ... ...
gpu_single_thread() ... ...
gpu_blocks() ... ...
gpu() ... ...
gpu_tile() ... ...
allow_race_conditions() ... ...
atomic() ... ...
hexagon() ... ...
prefetch() ... ...

Scheduling Techniques

This is meant to be a set of recipes and approaches to use when scheduling Halide pipelines. Several of these methods are covered in the tutorials.

... TBD ...