Halide 22.0.0 Halide compiler and libraries

PrefetchDirective.h
Go to the documentation of this file.
1#ifndef HALIDE_PREFETCH_DIRECTIVE_H
2#define HALIDE_PREFETCH_DIRECTIVE_H
3
4/** \file
5 * Defines the PrefetchDirective struct
6 */
7
8#include <string>
9
10#include "Expr.h"
11#include "Parameter.h"
12
13namespace Halide {
14
15/** Different ways to handle accesses outside the original extents in a prefetch. */
16 enum class PrefetchBoundStrategy {
17 /** Clamp the prefetched exprs by intersecting the prefetched region with
18 * the original extents. This may make the exprs of the prefetched region
19 * more complicated. */
20 Clamp,
21
22 /** Guard the prefetch with if-guards that ignores the prefetch if
23 * any of the prefetched region ever goes beyond the original extents
24 * (i.e. all or nothing). */
25 GuardWithIf,
26
27 /** Leave the prefetched exprs as-is (no if-guards around the prefetch
28 * and no intersecting with the original extents). This makes the prefetch
29 * exprs simpler but this may cause prefetching of the region outside the original
30 * extents. This is good if prefetch won't fault when accessing region
31 * outside the original extents. */
32 NonFaulting
33};
34
35namespace Internal {
36
37 struct PrefetchDirective {
38 std::string name;
39 std::string at; // the loop in which to do the prefetch
40 std::string from; // the loop-var to use as the base for prefetching. It must be nested outside loop_var (or be equal to loop_var).
41 Expr offset; // 'from + offset' will determine the bounds being prefetched.
42 PrefetchBoundStrategy strategy;
43 // If it's a prefetch load from an image parameter, this points to that.
44 Parameter param;
45};
46
47} // namespace Internal
48
49} // namespace Halide
50
51#endif // HALIDE_PREFETCH_DIRECTIVE_H
Expr.h
Base classes for Halide expressions (Halide::Expr) and statements (Halide::Internal::Stmt)
Parameter.h
Defines the internal representation of parameters to halide piplines.
Halide::Parameter
A reference-counted handle to a parameter to a halide pipeline.
Definition: Parameter.h:40
Halide
This file defines the class FunctionDAG, which is our representation of a Halide pipeline,...
Definition: AbstractGenerator.h:19
Halide::PrefetchBoundStrategy
PrefetchBoundStrategy
Different ways to handle accesses outside the original extents in a prefetch.
Definition: PrefetchDirective.h:16
Halide::PrefetchBoundStrategy::Clamp
@ Clamp
Clamp the prefetched exprs by intersecting the prefetched region with the original extents.
Halide::PrefetchBoundStrategy::GuardWithIf
@ GuardWithIf
Guard the prefetch with if-guards that ignores the prefetch if any of the prefetched region ever goes...
Halide::PrefetchBoundStrategy::NonFaulting
@ NonFaulting
Leave the prefetched exprs as-is (no if-guards around the prefetch and no intersecting with the origi...
Halide::Expr
A fragment of Halide syntax.
Definition: Expr.h:258
Halide::Internal::PrefetchDirective
Definition: PrefetchDirective.h:37
Halide::Internal::PrefetchDirective::at
std::string at
Definition: PrefetchDirective.h:39
Halide::Internal::PrefetchDirective::name
std::string name
Definition: PrefetchDirective.h:38
Halide::Internal::PrefetchDirective::from
std::string from
Definition: PrefetchDirective.h:40
Halide::Internal::PrefetchDirective::offset
Expr offset
Definition: PrefetchDirective.h:41
Halide::Internal::PrefetchDirective::param
Parameter param
Definition: PrefetchDirective.h:44
Halide::Internal::PrefetchDirective::strategy
PrefetchBoundStrategy strategy
Definition: PrefetchDirective.h:42