#ifndef __SD_CORE_LAYER_SPLIT_PARTITION_H__ #define __SD_CORE_LAYER_SPLIT_PARTITION_H__ #include #include #include #include #include #include "ggml-backend.h" #include "ggml.h" #include "core/ggml_graph_cut.h" namespace sd { struct GraphCutLayerSplitAssignment { std::vector> tensors_by_backend; std::vector bytes_by_backend; std::vector first_segment_by_backend; std::vector last_segment_by_backend; std::unordered_map node_assignments; size_t segment_count = 0; bool has_new_param_assignment = false; }; std::string layer_split_backend_device_display_name(ggml_backend_t backend); int layer_split_tensor_block_index(const std::string& name); bool partition_graph_cut_layer_split(const char* desc, ggml_cgraph* gf, const sd::ggml_graph_cut::Plan& plan, const std::vector& split_backends, const std::vector& backend_vram_limits, size_t primary_backend_vram_limit, std::unordered_map& param_assignments, const std::function& canonical_param_tensor, GraphCutLayerSplitAssignment* assignment_out); void log_graph_cut_layer_split_assignment(const char* desc, const std::vector& split_backends, const GraphCutLayerSplitAssignment& assignment); } // namespace sd #endif // __SD_CORE_LAYER_SPLIT_PARTITION_H__