|
Enzyme main
|
#include "MLIR/Implementations/LoopCheckpointing.h"
Classes | |
| struct | BinomialCacheLayout |
| struct | PeriodicSchedule |
| struct | ScaffoldLoop |
| class | SegmentCacheCreatorGuard |
Public Types | |
| using | CacheCreator = std::function<std::pair<Value, Value>(Type)> |
Static Public Member Functions | |
| static StringRef | enableCheckpointingAttrName () |
| static StringRef | binomialCheckpointingAttrName () |
| static StringRef | checkpointPeriodAttrName () |
| static void | preserveAttributesButCheckpointing (Operation *newOp, Operation *oldOp) |
| static bool | hasBinomialAttr (OpName forOp) |
| static bool | checkpointingEnabled (OpName forOp) |
| static bool | supportsDynamicPeriodic () |
| static bool | needsCheckpointing (OpName forOp) |
| static bool | needsBinomialCheckpointing (OpName forOp) |
| static std::optional< int64_t > | getCheckpointBudget (OpName forOp) |
| static ValueRange | getInits (OpName forOp) |
| static Value | getInductionVar (OpName forOp) |
| static Block * | getBodyBlock (OpName forOp) |
| static void | setInsertionPointToBodyEnd (OpBuilder &builder, Block *block) |
| static size_t | getNumRegionIterArgs (OpName forOp) |
| static OperandRange | getCarriedTerminatorOperands (Operation *term) |
| static ResultRange | getCarriedResults (Operation *loop) |
| static Type | getIndexLikeType (OpBuilder &builder) |
| static Value | emitConst (OpBuilder &b, Location loc, int64_t v) |
| static Value | emitAdd (OpBuilder &b, Location loc, Value l, Value r) |
| static Value | emitSub (OpBuilder &b, Location loc, Value l, Value r) |
| static Value | emitMul (OpBuilder &b, Location loc, Value l, Value r) |
| static Value | emitDivU (OpBuilder &b, Location loc, Value l, Value r) |
| static Value | emitMin (OpBuilder &b, Location loc, Value l, Value r) |
| static Value | getNumIterationsValue (OpBuilder &builder, Location loc, OpName forOp, MGradientUtilsReverse *gutils) |
| static Value | castToType (OpBuilder &builder, Location loc, Value v, Type targetType) |
| static MemRefType | checkpointBufferType (int64_t budget, Type t) |
| static Value | checkpointRow (OpBuilder &b, Location loc, Value buf, Value slot, MemRefType rowTy) |
| static void | storeCheckpoint (OpBuilder &b, Location loc, Value buf, Value slot, Value val) |
| static Value | loadCheckpoint (OpBuilder &b, Location loc, Value buf, Value slot, Type valTy) |
| static bool | publishesCopiedSeeds () |
| static bool | isDefinedInBlock (Block *b, Value v) |
| static void | copyBlockWithoutTerminator (OpBuilder &builder, Block *b, MGradientUtilsReverse *gutils, IRMapping &mapping) |
| static void | splitOutsideRefs (OpName forOp, SmallVectorImpl< Value > &mutableRefs, SmallVectorImpl< Value > &immutableRefs) |
| static bool | storesAreLoopCarried () |
| static Value | createStore (OpBuilder &b, Location loc, int64_t budget, Type valTy) |
| static Value | storeSlot (OpBuilder &b, Location loc, Value store, Value slot, Value val) |
| static Value | loadSlot (OpBuilder &b, Location loc, Value store, Value slot, Type valTy) |
| static void | destroyStore (OpBuilder &b, Location loc, Value store) |
| static ScaffoldLoop | createScaffoldForLoop (OpBuilder &b, Location loc, Value lb, Value ub, Value step, ValueRange inits) |
| static ScaffoldLoop | createScaffoldWhileLoop (OpBuilder &b, Location loc, ValueRange inits, llvm::function_ref< Value(OpBuilder &, Location, ValueRange)> cond) |
| static void | finalizeScaffoldLoop (OpBuilder &b, Location loc, const ScaffoldLoop &loop, ValueRange yields) |
| static Value | emitCmpLT (OpBuilder &b, Location loc, Value l, Value r) |
| static Value | emitCmpEQ (OpBuilder &b, Location loc, Value l, Value r) |
| static Value | emitSelect (OpBuilder &b, Location loc, Value c, Value t, Value f) |
| static SmallVector< Value > | getPrimalResults (OpBuilder &b, Location loc, OpName forOp, ValueRange state, MGradientUtilsReverse *gutils) |
| static Value | cloneSlot (OpBuilder &builder, Location loc, Value base, Value buf, Value slot, int64_t budget) |
| static Value | allocCloneSlots (OpBuilder &b, Location loc, int64_t budget, Value proto, ClonableTypeInterface iface) |
| static void | freeCloneSlots (OpBuilder &builder, Value ref, Value buf, int64_t budget) |
| static SmallVector< Value > | cacheBinomial (OpName forOp, int64_t budget, MGradientUtilsReverse *gutils) |
| static void | hoistPlaceholdersBefore (Operation *root, Operation *before) |
| static LogicalResult | reverseBinomial (OpName forOp, int64_t budget, OpBuilder &builder, MGradientUtilsReverse *gutils, SmallVector< Value > caches, ArrayRef< bool > operandsActive, ArrayRef< Value > incomingGradients) |
| static PeriodicSchedule | getStaticPeriodicSchedule (OpName forOp) |
| static CacheCreator | makeSegmentCacheCreator (MGradientUtilsReverse *gutils, Operation *anchor) |
| static void | primeSegmentGradients (OpBuilder &builder, MGradientUtilsReverse *gutils, Block *origBody, Block *revLoopBody, ArrayRef< bool > operandsActive) |
| static void | primeStepGradients (OpBuilder &builder, MGradientUtilsReverse *gutils, Block *origBody, Block *revOuterBody, ArrayRef< bool > operandsActive) |
| static void | materializeSegmentValues (OpBuilder &builder, Location loc, PeriodicSchedule &sched) |
| static Value | segmentLength (OpBuilder &builder, Location loc, const PeriodicSchedule &sched, Value base) |
| static Value | segmentBase (OpBuilder &builder, Location loc, const PeriodicSchedule &sched, Value index) |
| static void | materializeDynamicSchedule (OpBuilder &builder, Location loc, OpName forOp, MGradientUtilsReverse *gutils, PeriodicSchedule &sched) |
| static SmallVector< Value > | cachePeriodic (OpName forOp, Operation *op, MGradientUtilsReverse *gutils) |
| static LogicalResult | reversePeriodic (OpName forOp, Operation *op, OpBuilder &builder, MGradientUtilsReverse *gutils, SmallVector< Value > caches, ArrayRef< bool > operandsActive, ArrayRef< Value > incomingGradients) |
| static std::optional< SmallVector< Value > > | tryCacheValues (OpName forOp, Operation *op, MGradientUtilsReverse *gutils) |
| static std::optional< LogicalResult > | tryCreateReverseModeAdjoint (OpName forOp, Operation *op, OpBuilder &builder, MGradientUtilsReverse *gutils, SmallVector< Value > caches, ArrayRef< bool > operandsActive, ArrayRef< Value > incomingGradients) |
Definition at line 37 of file LoopCheckpointing.h.
| using mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::CacheCreator = std::function<std::pair<Value, Value>(Type)> |
Definition at line 1374 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 592 of file LoopCheckpointing.h.
References clone().
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::cacheBinomial().
|
inlinestatic |
Definition at line 85 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 656 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::allocCloneSlots(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::cloneSlot(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::copyBlockWithoutTerminator(), mlir::enzyme::MGradientUtils::erase(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::BinomialCacheLayout::get(), mlir::enzyme::MGradientUtils::getNewFromOriginal(), mlir::enzyme::MGradientUtilsReverse::initAndPushCache(), mlir::enzyme::MGradientUtils::invertPointerM(), mlir::enzyme::MGradientUtils::originalToNewFnOps, and mlir::enzyme::MGradientUtils::replaceOrigOpWith().
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::tryCacheValues().
|
inlinestatic |
Definition at line 1525 of file LoopCheckpointing.h.
References clone(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::copyBlockWithoutTerminator(), mlir::enzyme::MGradientUtils::erase(), mlir::enzyme::MGradientUtils::getNewFromOriginal(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::hoistPlaceholdersBefore(), mlir::enzyme::MGradientUtilsReverse::initAndPushCache(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::isDynamic(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::materializeDynamicSchedule(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::numItersV, mlir::enzyme::MGradientUtils::originalToNewFnOps, mlir::enzyme::MGradientUtils::replaceOrigOpWith(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::startV, and mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::stepV.
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::tryCacheValues().
|
inlinestatic |
Definition at line 243 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 251 of file LoopCheckpointing.h.
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::createStore().
|
inlinestatic |
Definition at line 114 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 92 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 262 of file LoopCheckpointing.h.
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::loadCheckpoint(), and mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::storeCheckpoint().
|
inlinestatic |
Definition at line 564 of file LoopCheckpointing.h.
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::cacheBinomial(), and mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::reverseBinomial().
|
inlinestatic |
Definition at line 337 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::isDefinedInBlock(), mlir::enzyme::MGradientUtils::originalToNewFn, and mlir::enzyme::MGradientUtils::originalToNewFnOps.
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::cacheBinomial(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::cachePeriodic(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::reverseBinomial(), and mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::reversePeriodic().
|
inlinestatic |
Definition at line 504 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 518 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 457 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::checkpointBufferType().
|
inlinestatic |
Definition at line 475 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 213 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 545 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 541 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 209 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 225 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 229 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 221 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 549 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 217 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 81 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 535 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 623 of file LoopCheckpointing.h.
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::reverseBinomial().
|
inlinestatic |
Definition at line 169 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 194 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 187 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 146 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 205 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 163 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 161 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 233 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 179 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 558 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 1329 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::nInner, mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::nOuter, and mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::trailingIters.
|
inlinestatic |
Definition at line 110 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 884 of file LoopCheckpointing.h.
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::cachePeriodic().
|
inlinestatic |
Definition at line 326 of file LoopCheckpointing.h.
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::copyBlockWithoutTerminator().
|
inlinestatic |
Definition at line 296 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::checkpointRow().
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::loadSlot().
|
inlinestatic |
Definition at line 470 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::loadCheckpoint().
|
inlinestatic |
Definition at line 1376 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 1511 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::numItersV, mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::startV, and mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::stepV.
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::cachePeriodic().
|
inlinestatic |
Definition at line 1453 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::isDynamic(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::nInner, mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::nInnerV, mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::nOuter, mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::nOuterV, and mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::numItersV.
|
inlinestatic |
Definition at line 141 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 126 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 99 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 1412 of file LoopCheckpointing.h.
References mlir::enzyme::localizeGradients(), and mlir::enzyme::MDiffeGradientUtils::zeroDiffe().
|
inlinestatic |
Definition at line 1431 of file LoopCheckpointing.h.
References mlir::enzyme::localizeGradients(), and mlir::enzyme::MDiffeGradientUtils::zeroDiffe().
|
inlinestatic |
Definition at line 321 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 895 of file LoopCheckpointing.h.
References mlir::enzyme::MGradientUtilsReverse::addToDiffe(), cached, mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::cloneSlot(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::copyBlockWithoutTerminator(), mlir::enzyme::MDiffeGradientUtils::diffe(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::freeCloneSlots(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::BinomialCacheLayout::get(), mlir::enzyme::MGradientUtils::getNewFromOriginal(), mlir::enzyme::MGradientUtils::getShadowType(), mlir::enzyme::MGradientUtils::invertedPointers, mlir::enzyme::MGradientUtils::isConstantValue(), mlir::enzyme::MGradientUtils::Logic, mlir::enzyme::MGradientUtilsReverse::popCache(), mlir::enzyme::MEnzymeLogic::visitChild(), and mlir::enzyme::MDiffeGradientUtils::zeroDiffe().
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::tryCreateReverseModeAdjoint().
|
inlinestatic |
Definition at line 1646 of file LoopCheckpointing.h.
References mlir::enzyme::MGradientUtilsReverse::addToDiffe(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::copyBlockWithoutTerminator(), mlir::enzyme::MDiffeGradientUtils::diffe(), mlir::enzyme::MGradientUtils::isConstantValue(), mlir::enzyme::MGradientUtils::Logic, mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::numItersV, mlir::enzyme::MGradientUtilsReverse::popCache(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::startV, mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::stepV, mlir::enzyme::MEnzymeLogic::visitChild(), and mlir::enzyme::MDiffeGradientUtils::zeroDiffe().
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::tryCreateReverseModeAdjoint().
|
inlinestatic |
Definition at line 1503 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::nInnerV.
|
inlinestatic |
Definition at line 1475 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::hasTrailing(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::isDynamic(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::nInner, mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::nInnerV, mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::nOuter, mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::numItersV, and mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::PeriodicSchedule::trailingIters.
|
inlinestatic |
Definition at line 175 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 365 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 283 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::checkpointRow().
Referenced by mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::storeSlot().
|
inlinestatic |
Definition at line 455 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 464 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::storeCheckpoint().
|
inlinestatic |
Definition at line 124 of file LoopCheckpointing.h.
|
inlinestatic |
Definition at line 1830 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::cacheBinomial(), mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::cachePeriodic(), mlir::enzyme::MGradientUtils::getNewFromOriginal(), and mlir::enzyme::MGradientUtilsReverse::initAndPushCache().
|
inlinestatic |
Definition at line 1882 of file LoopCheckpointing.h.
References mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::reverseBinomial(), and mlir::enzyme::LoopCheckpointing< FinalClass, OpName >::reversePeriodic().