Numba实时变量分析

Numba使用引用计数进行垃圾回收,这是一种需要编译器配合的技术。Numba IR对必须插入decref的位置进行编码。这些位置通过实时变量分析确定。相应的源代码是https://github.com/numba/numba/blob/master/numba/interpreter.py中的_insert_var_dels() 方法。

在Python语义中,一旦在函数内部定义了变量,该变量就一直存在,直到该变量被显式删除或函数作用域结束为止。但是,Numba会分析代码,以根据每个变量在编译期间的定义和用法来确定每个变量生命周期的最小范围。一旦变量不可访问,del就会在最接近的基本块(下一个块的开始或当前块的结尾)处插入一条指令。这意味着可以比常规Python代码更早地释放变量。

活动变量分析的行为会影响已编译代码的内存使用情况。在内部,Numba不会区分临时变量和用户变量。由于每个操作都会生成至少一个临时变量,因此,如果不尽快释放它们,函数可以累积大量的临时变量。我们的生成器实现可受益于早期释放变量,从而减小了在每个屈服点挂起的状态的大小。

有关实时变量分析的行为的注意事项

变量在定义前已删除

(相关问题:https : //github.com/numba/numba/pull/1738

当变量生存期被限制在循环体内时(其定义和用法不会逃避循环体),例如:

def f(arr):
  # BB 0
  res = 0
  # BB 1
  for i in (0, 1):
      # BB 2
      t = arr[i]
      if t[i] > 1:
          # BB 3
          res += t[i]
  # BB 4
  return res

变量t永远不会在循环外部被引用。甲del指令发出用于t在所述环路(BB 1)的头部被定义的变量之前。一旦知道了控制流程图,原因就很明显了:

变量t在BB 1中定义。在BB 2中,uses使用 t的评估t[i] > 1,执行错误分支的最后使用,然后转到BB1。在BB 3中,t is only used in res += t[i],如果执行采用了错误分支,最后使用真正的分支。因为BB 3是BB 2的后续分支使用,所以必须在通用的前身中将其删除。最接近的点是BB 1,尚未从BB 0的输入边t定义。

如果t在BB 4处将其删除,仍将必须在定义变量之前将其删除,可以在不执行定义变量的循环体(BB 2和BB 3)的情况下执行BB4。

Numba实时变量分析的更多相关文章

  1. 布客·ApacheCN 翻译/校对/笔记整理活动进度公告 2020.1

    注意 请贡献者查看参与方式,然后直接在 ISSUE 中认领. 翻译/校对三个文档就可以申请当负责人,我们会把你拉进合伙人群.翻译/校对五个文档的贡献者,可以申请实习证明. 请私聊片刻(52981514 ...

  2. 使用numba加速python程序

    前面说过使用Cython来加速python程序的运行速度,但是相对来说程序改动较大,这次就说一种简单的方式来加速python计算速度的方法,就是使用numba库来进行,numba库可以使用JIT技术即 ...

  3. Numba——python面向数组高性能计算库

    python在计算性能上相对c是比较弱鸡的,有了numpy后计算性能短板是补了一些,而Numba库又给python计算性能加了发动机(忽然想到西虹市首富王多鱼的名言:我再加200万,给冰山提提速.), ...

  4. DataPipeline王睿:业务异常实时自动化检测 — 基于人工智能的系统实战

    大家好,先自我介绍一下,我是王睿.之前在Facebook/Instagram担任AI技术负责人,现在DataPipeline任Head of AI,负责研发企业级业务异常检测产品,旨在帮助企业一站式解 ...

  5. 腾讯云EMR大数据实时OLAP分析案例解析

    OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过QQ音乐与腾 ...

  6. QQ音乐PB级ClickHouse实时数据平台架构演进之路

    导语 | OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过Q ...

  7. jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧

    这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...

  8. ASP.NET_各个币种之间的汇率转换(实时)使用Yahoo汇率。

    近期开发支付平台的时候有运用到各国的实时汇率之间的转换问题,于是在往上找了很多相关资料,以下就是一些参考网址: 1.提供API接口的网站:https://www.showapi.com:这个网站有提供 ...

  9. 【.net 深呼吸】启动一个进程并实时获取状态信息

    地球人和火星人都知道,Process类既可以获取正在运行的进程,也可以启动一个新的进程.在79.77%应用场合,我们只需要让目标进程顺利启动就完事了,至于它执行了啥,有没有出错,啥时候退出就不管了. ...

随机推荐

  1. 【面试题2020-03-30】面试官:对并发熟悉吗?说说Synchronized及实现原理

    一.Synchronized的基本使用 Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法. Synchronized的作用主要有三个: 1.确保线程互斥的访问同 ...

  2. iOS安全些许经验和学习笔记

    http://bbs.pediy.com/showthread.php?t=209014 标题: [原创]iOS安全些许经验和学习笔记作者: MonkeyKey时间: 2016-03-30,16:32 ...

  3. IDAPython类库---idautils.py的源码

    #--------------------------------------------------------------------- # IDAPython - Python plugin f ...

  4. 一种巧妙的使用 CSS 制作波浪效果的思路

    在之前,我介绍过几种使用纯 CSS 实现波浪效果的方式,关于它们有两篇相关的文章: 纯 CSS 实现波浪效果! 巧用 CSS 实现酷炫的充电动画 本文将会再介绍另外一种使用 CSS 实现的波浪效果,思 ...

  5. 【Matlab】BFSK的调制与解调仿真

    写在前面 本篇是[Matlab]BASK的调制与解调仿真的下篇,考虑到阅读体验,故另开一篇分享将BFSK的调制与解调仿真. 索引 写在前面 一.BFSK的调制 1.1 异频载波生成 1.2 信号合并 ...

  6. work2_求交点数

    教学班级:周三上午三四节 项目地址:https://github.com/875571216/- PSP表格 psp2.1 Personal Software Process Stages 预估耗时( ...

  7. Spring Cloud Gateway之动态路由(数据库版)

    1.实现动态路由的关键是RouteDefinitionRepository接口,该接口存在一个默认实现(InMemoryRouteDefinitionRepository) 通过名字我们应该也知道该实 ...

  8. 通过CRM系统实现工作流程自动化

    灵活运用CRM系统所拥有的自动化功能模块,是公司在快速发展和降低成本的关键保障.不管您的公司规模的大小,您企业的工作流程都必须遵照相同的流程反复操作.这种反复的工作是一个效率黑洞,长久以往会导致人力资 ...

  9. [Python] 条件 & 循环

    条件语句 不加 () 结尾加 : elif else 和 if 成对使用 省略判断条件 String:空字符串为False,其余为True int:0为False,其余为True Bool:True为 ...

  10. shell中 -eq,-ne,-gt,-lt,-ge,-le数字比较符

    使用说明:     -eq //equals等于    -ne //no equals不等于    -gt //greater than 大于    -lt //less than小于    -ge ...