| 428 | } |
| 429 | |
| 430 | std::shared_ptr<OptimizeRule> Optimizer::ProduceRule( |
| 431 | DAGDef* dag) { |
| 432 | std::vector<std::string> adj_info; |
| 433 | std::vector<int32_t> subset = ProduceFusionAdj(dag, &adj_info); |
| 434 | if (subset.empty()) return nullptr; |
| 435 | |
| 436 | std::vector<std::vector<std::string>> fusion_output_map = |
| 437 | ProduceFusionOutputMap(subset, dag); |
| 438 | |
| 439 | std::unordered_map<std::string, int32_t> |
| 440 | op_key_input2split_info_idx; |
| 441 | std::vector<std::vector<std::string>> split_op_info = |
| 442 | ProduceSplitOpInfo(subset, dag, |
| 443 | &op_key_input2split_info_idx); |
| 444 | |
| 445 | std::vector<std::vector<std::string>> merge_op_info = |
| 446 | ProduceMergeOpInfo( |
| 447 | subset, op_key_input2split_info_idx, dag); |
| 448 | |
| 449 | std::shared_ptr<OptimizeRule> optmz_rule = |
| 450 | std::make_shared<FusionAndShardRule>( |
| 451 | graph_partition, adj_info, "REMOTE", fusion_output_map, |
| 452 | split_op_info, merge_op_info, shard_num_); |
| 453 | return optmz_rule; |
| 454 | } |
| 455 | |
| 456 | } // namespace euler |