MCPcopy Create free account
hub / github.com/pytorch/executorch / MemoryPlanningAlgorithmSuite

Class MemoryPlanningAlgorithmSuite

exir/memory_planning.py:1031–1108  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1029
1030
1031class MemoryPlanningAlgorithmSuite:
1032 def __init__(
1033 self,
1034 algo_list: Optional[List[Callable[..., MemoryAlgoResult]]] = None,
1035 ) -> None:
1036 if algo_list is None:
1037 algo_list = [greedy]
1038 self.algo_list: List[Callable[..., MemoryAlgoResult]] = algo_list
1039
1040 def __call__(
1041 self,
1042 alignment: int,
1043 specs: Set[TensorSpec],
1044 graph_module: torch.fx.GraphModule,
1045 graph_signature: ExportGraphSignature,
1046 extra_padding: int,
1047 ) -> List[int]:
1048 r"""
1049 Memory planning algorithm suite that runs a list of memory planning algorithms
1050 and returns the result of the algorithm that minimizes the total memory usage.
1051
1052 Args:
1053 graph_module: The graph module to allocate memory for
1054 alignment: Memory alignment requirement
1055 graph_signature: Optional graph signature
1056 alloc_graph_input: Whether to allocate memory for graph input
1057 alloc_graph_output: Whether to allocate memory for graph output
1058 allow_overlapping_allocations: Whether to allow overlapping allocations
1059 algo_list: List of memory planning algorithms to run
1060 specs: Optional set of TensorSpec objects with updated lifetimes. If None, they will be
1061 calculated from the graph_module.
1062
1063 Returns:
1064 List of buffer sizes for each memory hierarchy
1065 """
1066
1067 mem_algo_results = {}
1068 for algo in self.algo_list:
1069 if isinstance(algo, functools.partial):
1070 name = algo.func.__name__
1071 else:
1072 name = getattr(algo, "__name__", None)
1073
1074 mem_algo_results[name] = algo(
1075 alignment,
1076 specs,
1077 graph_module,
1078 graph_signature,
1079 extra_padding,
1080 )
1081
1082 # All the algorithms should have the same number of buffers allocated.
1083 assert (
1084 len(
1085 {
1086 len(mem_algo_result.bufsizes)
1087 for mem_algo_result in mem_algo_results.values()
1088 }

Calls

no outgoing calls