MCPcopy Create free account
hub / github.com/PaddlePaddle/Paddle / split_program_by_device

Method split_program_by_device

python/paddle/base/executor.py:2284–2413  ·  view source on GitHub ↗
(self, program: Program)

Source from the content-addressed store, hash-verified

2282 return pipeline_num
2283
2284 def split_program_by_device(self, program: Program) -> list[int] | None:
2285 ops_list = []
2286 type_list = []
2287 pre = None
2288 type_cpu = "cpu"
2289 for op in program.global_block().ops:
2290 if self._is_optimizer_op(op):
2291 break
2292 if op.has_attr("op_device"):
2293 cur_attr = (
2294 op.attr("op_device")
2295 if op.attr("op_device") != ""
2296 else type_cpu
2297 )
2298 if pre is None or pre != cur_attr:
2299 ops_list.append([])
2300 type_list.append(cur_attr)
2301 ops_list[-1].append(op)
2302 pre = cur_attr
2303 l = len(type_list)
2304 i = 0
2305 type_heter = None
2306 while i < l:
2307 while i < l and type_list[i] == type_cpu:
2308 i += 1
2309 if i == l:
2310 break
2311
2312 type_heter = type_list[i]
2313 i += 1
2314 start = i
2315 valid = True
2316 while i < l and type_list[i] != type_heter:
2317 if type_list[i] != type_cpu:
2318 valid = False
2319 break
2320 i += 1
2321
2322 if i == l:
2323 break
2324 elif not valid:
2325 continue
2326
2327 for j in range(start, i):
2328 for op in ops_list[j]:
2329 op._set_attr("op_device", type_heter)
2330 type_list[j] = type_heter
2331 j += 1
2332
2333 pre = None
2334 merged_ops_list = []
2335 merged_type_list = []
2336 for i in range(l):
2337 if pre is None or pre != type_list[i]:
2338 merged_ops_list.append([])
2339 merged_type_list.append(type_list[i])
2340 merged_ops_list[-1].extend(ops_list[i])
2341 pre = type_list[i]

Callers

nothing calls this directly

Calls 15

_is_optimizer_opMethod · 0.95
rangeFunction · 0.85
setClass · 0.85
listFunction · 0.85
global_blockMethod · 0.80
has_attrMethod · 0.80
_prune_with_inputMethod · 0.80
printFunction · 0.50
attrMethod · 0.45
appendMethod · 0.45
_set_attrMethod · 0.45
extendMethod · 0.45

Tested by

no test coverage detected