Numba实时变量分析
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实时变量分析的更多相关文章
- 布客·ApacheCN 翻译/校对/笔记整理活动进度公告 2020.1
注意 请贡献者查看参与方式,然后直接在 ISSUE 中认领. 翻译/校对三个文档就可以申请当负责人,我们会把你拉进合伙人群.翻译/校对五个文档的贡献者,可以申请实习证明. 请私聊片刻(52981514 ...
- 使用numba加速python程序
前面说过使用Cython来加速python程序的运行速度,但是相对来说程序改动较大,这次就说一种简单的方式来加速python计算速度的方法,就是使用numba库来进行,numba库可以使用JIT技术即 ...
- Numba——python面向数组高性能计算库
python在计算性能上相对c是比较弱鸡的,有了numpy后计算性能短板是补了一些,而Numba库又给python计算性能加了发动机(忽然想到西虹市首富王多鱼的名言:我再加200万,给冰山提提速.), ...
- DataPipeline王睿:业务异常实时自动化检测 — 基于人工智能的系统实战
大家好,先自我介绍一下,我是王睿.之前在Facebook/Instagram担任AI技术负责人,现在DataPipeline任Head of AI,负责研发企业级业务异常检测产品,旨在帮助企业一站式解 ...
- 腾讯云EMR大数据实时OLAP分析案例解析
OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过QQ音乐与腾 ...
- QQ音乐PB级ClickHouse实时数据平台架构演进之路
导语 | OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过Q ...
- jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧
这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...
- ASP.NET_各个币种之间的汇率转换(实时)使用Yahoo汇率。
近期开发支付平台的时候有运用到各国的实时汇率之间的转换问题,于是在往上找了很多相关资料,以下就是一些参考网址: 1.提供API接口的网站:https://www.showapi.com:这个网站有提供 ...
- 【.net 深呼吸】启动一个进程并实时获取状态信息
地球人和火星人都知道,Process类既可以获取正在运行的进程,也可以启动一个新的进程.在79.77%应用场合,我们只需要让目标进程顺利启动就完事了,至于它执行了啥,有没有出错,啥时候退出就不管了. ...
随机推荐
- 【转】【linux系统】nacos + confd配置nginx
为什么要支持confd,老的应用配置管理模式是启动时读取配置文件,然后重新读取配置文件需要应用重启.一般的配置管理系统都是代码侵入性的,应用接入配置管理系统都需要使用对应的SDK来查询和监听数据的变更 ...
- POJ3757 01分数规划
题意: 有一个任务,给你提供n太服务器,让你在这n太服务器中选出k台完成这个任务,要求是每台服务器的工作时间相同,总的花费最小. 思路: 题目中给出对于每台服务器有这个式子: To ...
- Intel汇编程序设计-整数算术指令(下)
7.5 扩展加法和减法 扩展精度的假发和减法是指任意尺寸大小数字的加法和减法.例如要求你写一个C++程序,把两个1024位的整数相加,解决方案可不是那么简单!但在汇编语言中,ADC(带进位加)指令和 ...
- HDU - 1789 Doing Homework again(贪心) ~~~学了一波sort对结构体排序
题目中因为天数和分数是对应的,所以我们使用一个结构体来存分数和截止如期. 一开始做这道题的时候,很自然的就想到对天数排序,然后天数一样的分数从大到小排序,最后WA了之后才发现没有做到"舍小取 ...
- C++逆向分析----多重继承和菱形继承
多重继承 多重继承是指C++类同时继承两个类或两个以上的类. class Test { public: int num1; Test() { num1 = 1; } virtual void Proc ...
- readdir_r()读取目录内容
readdir()在多线程操作中不安全,Linux提供了readdir_r()实现多线程读取目录内容操作. #include <stdio.h> #include <stdlib.h ...
- istioctl命令整理
显示配置文件中的差异 istioctl profile diff default demo 显示对应配置的profile istioctl profile dump demo 显示可用的配置 isti ...
- [bug] NameNode无法启动 invalid-uri-for-namenode-address
配置文件core-site.xml中设置有误 <property> <name>fs.defaultFS</name>(NameNode地址) <value& ...
- 用nvm的方式安装node
一.nvm简介 Node Version Manager(Node版本管理工具)由于以后的开发工作可能会在多个Node版本中测试,而且Node的版本也比较多,所以需要这么款工具来管理. nvm的安 ...
- 使用U盘软碟通安装原版Windows10
https://zhuanlan.zhihu.com/p/171534675 使用U盘软碟通安装原版Windows10 一.准备:8G U盘一个,电脑装好UltraISO这个软件下载地址 二.Wind ...