提交 e00637b3 authored 作者: Roy Xue's avatar Roy Xue

Merge pull request #2 from nouiz/GSoC2014_part2

Fix algo. I added a todo. I'll make other comments in the PR.
...@@ -717,6 +717,7 @@ class ProfileStats(object): ...@@ -717,6 +717,7 @@ class ProfileStats(object):
inputs = node.inputs inputs = node.inputs
outputs = node.outputs outputs = node.outputs
deps = inputs + node.destroy_dependencies deps = inputs + node.destroy_dependencies
# TODO: Move at compute_map creation to speed things up.
for node in deps: for node in deps:
if isinstance(node, graph.Constant): if isinstance(node, graph.Constant):
compute_map[node][0] = 1 compute_map[node][0] = 1
...@@ -770,7 +771,6 @@ class ProfileStats(object): ...@@ -770,7 +771,6 @@ class ProfileStats(object):
executables_nodes = set() executables_nodes = set()
compute_map = defaultdict(lambda: [0])
# compute_map use to check if a node is valid # compute_map use to check if a node is valid
for var in fgraph.inputs: for var in fgraph.inputs:
compute_map[var][0] = 1 compute_map[var][0] = 1
...@@ -783,25 +783,22 @@ class ProfileStats(object): ...@@ -783,25 +783,22 @@ class ProfileStats(object):
def min_memory_generator(executables_nodes): def min_memory_generator(executables_nodes):
print executables_nodes for node in executables_nodes:
for node in list(executables_nodes): new_exec_nodes = executables_nodes.copy()
executables_nodes.remove(node) new_exec_nodes.remove(node)
for var in node.outputs: for var in node.outputs:
compute_map[var][0] = 1 compute_map[var][0] = 1
for var in node.outputs: for var in node.outputs:
for c, _ in var.clients: for c, _ in var.clients:
if c != "output" and check_node_state(c): if c != "output" and check_node_state(c):
executables_nodes.add(c) new_exec_nodes.add(c)
if not executables_nodes: if not new_exec_nodes:
# executables_nodes.add(node)
yield [node] yield [node]
else: else:
for p in min_memory_generator(executables_nodes): for p in min_memory_generator(new_exec_nodes):
yield [node]+p yield [node]+p
for var in node.outputs: for var in node.outputs:
compute_map[var][0] = 0 compute_map[var][0] = 0
# if check_node_sate(node):
# executables_nodes.add(node)
min_order = [] min_order = []
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论