提交 f9db2ea1 authored 作者: Pascal Lamblin's avatar Pascal Lamblin

Update comments

上级 9f361a06
...@@ -282,6 +282,11 @@ def get_nothing(r, name, sub): ...@@ -282,6 +282,11 @@ def get_nothing(r, name, sub):
def get_c_declare(r, name, sub): def get_c_declare(r, name, sub):
"""Wrapper around c_declare that declares py_name""" """Wrapper around c_declare that declares py_name"""
# The declaration will be used by the Apply node that
# is computing it (`r.owner`), and by each of the clients.
# If some of these have `check_input=True` in their `.op`,
# it means they need `r`'s dtype to be declared, so
# we have to pass `check_input=True` to `c_declare`.
if ((any([getattr(c.op, 'check_input', config.check_input) if ((any([getattr(c.op, 'check_input', config.check_input)
for (c, _) in r.clients for (c, _) in r.clients
if not isinstance(c, string_types)]) or if not isinstance(c, string_types)]) or
...@@ -307,6 +312,12 @@ def get_c_init(r, name, sub): ...@@ -307,6 +312,12 @@ def get_c_init(r, name, sub):
def get_c_extract(r, name, sub): def get_c_extract(r, name, sub):
"""Wrapper around c_extract that initializes py_name from storage.""" """Wrapper around c_extract that initializes py_name from storage."""
# `c_extract` is called when getting the value of an apply node's
# input from the compute map, before being used by its clients.
# If one of the clients has `check_input=True`, we need to perform
# checks on the variable.
# However that code is not used by C code of the apply node creating
# this variable, so there is no need to check `r.owner.op.check_input`.
if any([getattr(c.op, 'check_input', config.check_input) if any([getattr(c.op, 'check_input', config.check_input)
for (c, _) in r.clients for (c, _) in r.clients
if not isinstance(c, string_types)]): if not isinstance(c, string_types)]):
...@@ -336,10 +347,18 @@ def get_c_extract(r, name, sub): ...@@ -336,10 +347,18 @@ def get_c_extract(r, name, sub):
def get_c_extract_out(r, name, sub): def get_c_extract_out(r, name, sub):
"""Wrapper around c_extract_out that initializes py_name from storage.""" """Wrapper around c_extract_out that initializes py_name from storage."""
# `c_extract_out` is used to extract an output variable from
# the compute map, to be used as pre-allocated memory for `r`
# before its value gets computed.
# If the node producing `r` has `check_inputs=True`, it may
# also perform type checks on the initial value of the output,
# so we need to pass `check_input=True` to `c_extract_out`.
# However, that code is not used by potential clients of `r`,
# so we do not need to check them.
check_input = getattr(r.owner.op, 'check_input', config.check_input)
# check_broadcast is just an hack to easily remove just the # check_broadcast is just an hack to easily remove just the
# broadcast check on the old GPU back-end. This check isn't # broadcast check on the old GPU back-end. This check isn't
# done in the new GPU back-end or on the CPU. # done in the new GPU back-end or on the CPU.
check_input = getattr(r.owner.op, 'check_input', config.check_input)
if getattr(r.owner.op, 'check_broadcast', True): if getattr(r.owner.op, 'check_broadcast', True):
c_extract = r.type.c_extract_out(name, sub, check_input) c_extract = r.type.c_extract_out(name, sub, check_input)
else: else:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论