Skip to content

Commit f7f2ee2

Browse files
authored
Merge pull request coredac#268 from ShangkunLi/memory-fusion
Memory Access Streaming Fusion Pass
2 parents 1ac92f7 + e32bc6d commit f7f2ee2

6 files changed

Lines changed: 1326 additions & 0 deletions

File tree

include/TaskflowDialect/TaskflowPasses.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ std::unique_ptr<mlir::Pass> createMapTaskOnCgraPass();
2828
//=========================================================//
2929
std::unique_ptr<mlir::Pass> createAffineLoopTreeSerializationPass();
3030
std::unique_ptr<mlir::Pass> createAffineLoopPerfectionPass();
31+
std::unique_ptr<mlir::Pass> createMemoryAccessStreamingFusionPass();
3132

3233
#define GEN_PASS_REGISTRATION
3334
#include "TaskflowDialect/TaskflowPasses.h.inc"

include/TaskflowDialect/TaskflowPasses.td

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,18 @@ def MapTaskOnCgra : Pass<"map-task-on-cgra", "func::FuncOp"> {
7272
}];
7373
let constructor = "taskflow::createMapTaskOnCgraPass()";
7474
}
75+
76+
def MemoryAccessStreamingFusion : Pass<"memory-access-streaming-fusion", "func::FuncOp"> {
77+
let summary = "Fuses tasks connected by memory dependencies for streaming execution";
78+
let description = [{
79+
Identifies and fuses taskflow.task operations that have memory access
80+
dependencies (one task writes a memref, another task reads it).
81+
Eliminates intermediate memref allocations and converts memory access
82+
dependencies into direct SSA value dependencies.
83+
84+
Uses greedy fusion strategy to iteratively fuse the most beneficial
85+
task pairs until no more fusion opportunities exist.
86+
}];
87+
let constructor = "taskflow::createMemoryAccessStreamingFusionPass()";
88+
}
7589
#endif // TASKFLOW_PASSES_TD

lib/TaskflowDialect/Transforms/Optimizations/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR})
33
add_mlir_conversion_library(MLIRTaskflowOptimization
44
AffineLoopTreeSerializationPass.cpp
55
AffineLoopPerfectionPass.cpp
6+
MemoryAccessStreamingFusion.cpp
67

78
DEPENDS
89
MLIRTaskflowTransformsIncGen

0 commit comments

Comments
 (0)