美文网首页
减少运算过程中的内存开销

减少运算过程中的内存开销

作者: 亦珩 | 来源:发表于2018-07-12 15:40 被阅读16次

    运算的内存开销

    在前面的例子中,我们为每个操作新开内存来存储它的结果。举个例子,假设x和y都是NDArray,在执行y = x + y操作后, y所对应的内存地址将变成为存储x + y计算结果而新开内存的地址。为了展示这一点,我们可以使用Python自带的id函数:如果两个实例的ID一致,它们所对应的内存地址相同;反之则不同。

    In [20]:

    x=nd.ones((3,4))y=nd.ones((3,4))before=id(y)y=y+xid(y)==before

    Out[20]:

    False

    在下面的例子中,我们先通过nd.zeros_like(y)创建和y形状相同且元素为0的NDArray,记为z。接下来,我们把x + y的结果通过[:]写进z所对应的内存中。

    In [21]:

    z=nd.zeros_like(y)before=id(z)z[:]=x+yid(z)==before

    Out[21]:

    True

    然而,这里我们还是为x + y创建了临时内存来存储计算结果,再复制到z所对应的内存。为了避免这个内存开销,我们可以使用运算符的全名函数中的out参数。

    In [22]:

    nd.elemwise_add(x,y,out=z)id(z)==before

    Out[22]:

    True

    如果现有的NDArray的值在之后的程序中不会复用,我们也可以用 x[:] = x + y 或者 x += y来减少运算的内存开销。

    In [23]:

    before=id(x)x+=yid(x)==before

    Out[23]:

    True

    相关文章

      网友评论

          本文标题:减少运算过程中的内存开销

          本文链接:https://www.haomeiwen.com/subject/wheryftx.html