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

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

作者: 亦珩 | 来源:发表于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

相关文章

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

    运算的内存开销 在前面的例子中,我们为每个操作新开内存来存储它的结果。举个例子,假设x和y都是NDArray,在执...

  • 线程池

    线程池的定义 减少资源创建 => 减少内存开销,创建线程占用内存 降低系统开销 => 创建线程需要时间,会延迟处理...

  • Android 性能优化笔记

    内存 目的: 无内存泄漏, 降低内存开销, 避免内存抖动; 减少非并发GC的运行次数 工具: LeakCanary...

  • Collections.singletenList(),单元素数

    用于存放一个元素的数组,减少内存开销。多用于测试

  • 9.9数据库缓存

    为了减少IO开销,所以尽量使用内存缓存 不使用缓存的情况下。 json,解析,,序列化解析,,,这就会有开销。。。...

  • 结构型模式-享元模式

    开发时,创建对象池,共享对象,减少系统开销 享元模式: 主要用于减少创建对象的数量,以减少内存占用和提高性能。它提...

  • UITableViewCell复用与高度计算

    UITableViewCell的重用机制   为了减少内存开销,UITableView只会创建一屏幕(或一屏幕多一...

  • 2018-07-23

    spark 概念 spark 特点 DAG引擎,减少过程写入磁盘开销 内存计算引擎,支持cache机制,使得中间过...

  • 5.IOS(swift)-scrollView ·重用

    大部分的 iOS 开发应该都清楚 UITableView 的 cell 重用机制,这种重用机制减少了内存开销也提高...

  • RecyclerView+glide的优化

    优化在了哪里? 只有在Reyclerview停止滑动的时候 再加载图片以此来减少内存和网络的开销

网友评论

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

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