提交 0d06246c authored 作者: Frederic's avatar Frederic

Check the view_map for all type of variable.

finish fix gh-842
上级 ddcd96d0
...@@ -780,13 +780,6 @@ def _check_viewmap(node, storage_map): ...@@ -780,13 +780,6 @@ def _check_viewmap(node, storage_map):
outstorage = storage_map[onode][0] outstorage = storage_map[onode][0]
instorage_id = [id(storage_map[i][0]) for i in node.inputs] instorage_id = [id(storage_map[i][0]) for i in node.inputs]
# TODO: investigate ways in which other Types may be aliased
# TODO: consider adding a function to Type to detect aliasing
danger_flag = id(outstorage) in instorage_id or\
(type(outstorage)==numpy.ndarray and
outstorage.flags['OWNDATA']==False)
if danger_flag:
# first find out which input it aliases # first find out which input it aliases
view_map = getattr(node.op, 'view_map', {}) view_map = getattr(node.op, 'view_map', {})
destroy_map = getattr(node.op, 'destroy_map', {}) destroy_map = getattr(node.op, 'destroy_map', {})
...@@ -803,8 +796,8 @@ def _check_viewmap(node, storage_map): ...@@ -803,8 +796,8 @@ def _check_viewmap(node, storage_map):
bad_alias[nodeid] = ii bad_alias[nodeid] = ii
# check that the aliasing was declared in [view|destroy]_map # check that the aliasing was declared in [view|destroy]_map
if ([ii]==view_map.get(oi,None) or\ if ([ii] == view_map.get(oi, None) or
[ii]==destroy_map.get(oi,None)): [ii] == destroy_map.get(oi, None)):
good_alias[nodeid] = bad_alias.pop(nodeid) good_alias[nodeid] = bad_alias.pop(nodeid)
...@@ -819,7 +812,8 @@ def _check_viewmap(node, storage_map): ...@@ -819,7 +812,8 @@ def _check_viewmap(node, storage_map):
#if its not aliased to input, check output->output aliasing #if its not aliased to input, check output->output aliasing
if not good_alias and _is_used_in_graph(onode): if not good_alias and _is_used_in_graph(onode):
for other_oi, other_onode in enumerate(node.outputs): for other_oi, other_onode in enumerate(node.outputs):
if other_oi == oi: continue if other_oi == oi:
continue
other_storage = storage_map[other_onode][0] other_storage = storage_map[other_onode][0]
# check to see if we share memory with this other output # check to see if we share memory with this other output
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论