Numba分析器
项目描述
Profila:Numba分析器
此分析器由我的关于在Python中编写快速底层代码的书籍赞助,其中大部分示例使用Numba。
这是Profila输出的样子
$ python -m profila annotate -- scripts_for_tests/simple.py
# Total samples: 328 (54.9% non-Numba samples, 1.8% bad samples)
## File `/home/itamarst/devel/profila/scripts_for_tests/simple.py`
Lines 10 to 15:
0.3% | for i in range(len(timeseries)):
| # This should be the most expensive line:
38.7% | result[i] = (7 + timeseries[i] / 9 + (timeseries[i] ** 2) / 7) / 5
| for i in range(len(result)):
| # This should be cheaper:
4.3% | result[i] -= 1
您还可以与Jupyter一起使用它!
除了这个README之外,您还可以阅读这篇文章,其中包含更详细的示例和解释。
快速阅读限制: 仅限Linux,目前只能分析单线程Numba,不支持并行函数。
安装
目前Profila仅适用于Linux。
- 在macOS上,您可以使用Docker、Podman或Linux虚拟机。
- 在Windows上,您可以使用Docker、Podman或WSL2。
您需要安装gdb
。在Ubuntu或Debian上,您可以这样做
apt-get install gdb
基于RedHat的系统
dnf install gdb
使用pip
安装此库
pip install profila
用法
Jupyter分析
首先,在您导入numba
之前,您应该
%load_ext profila
然后像平常一样定义您的函数
from numba import njit
@njit
def myfunc(arr):
# ... your code here ...
您可能想至少调用一次您的Numba函数,这样分析就不会测量编译时间
myfunc(DATA)
然后,您可以使用%%profila
魔法来分析特定的单元格,例如
%%profila
# Make sure we run this enough to get good measurements:
for i in range(100):
myfunc(DATA)
命令行分析
如果您通常像这样运行您的脚本
$ python yourscript.py --arg1=200
改为这样运行它
$ python -m profila annotate -- yourscript.py --arg1=200
采样每10毫秒进行一次,所以您需要确保您的Numba代码运行足够长的时间。 例如,您可以在循环中运行您的函数,直到经过一定的时间数
from time import time
@njit
def myfunc():
# ...
start = time()
# Run for 3 seconds:
while (time() - start) < 3:
myfunc()
分析输出限制
- 并行Numba代码无法正确分析;目前仅支持单线程分析。
- GPU(CUDA)代码不支持分析。
除此之外
1. 编译后的代码与输入代码不同
类似于Numba这样的编译语言会进行优化处理,将代码转换以使其更快。这意味着运行代码不一定与原始代码一一对应;例如,不同的行可能会合并。
据我所知,Numba确实提供了合理的映射,但您不能假设源代码与执行代码一一对应。
2. 添加必要的信息可能会改变代码的性能
为了进行分析,需要在编译时添加额外的信息;具体来说,需要设置NUMBA_DEBUGINFO
环境变量。这可能会略微改变运行时的特性,因为它增加了编译代码的内存大小。
3. 编译代码受到分析中不可见的影响CPU效应的影响
指令级并行性、分支预测错误、SIMD和CPU内存缓存都对运行时性能有重大影响,但在分析中不会显示。如果您想了解更多信息,我正在编写关于此内容的书籍。
变更日志
v0.2.1
错误修复
- 使用
sys.executable
运行Python,以便在更多环境中工作。感谢Jeremiah England提供的错误报告。
v0.2.0
添加了对Jupyter分析的支持。
v0.1.0
首次发布。
项目详情
下载文件
下载您平台的文件。如果您不确定要选择哪一个,请了解有关安装包的更多信息。
源代码分发
profila-0.2.1.tar.gz (18.6 kB 查看哈希)
构建分发
profila-0.2.1-py3-none-any.whl (14.2 kB 查看哈希)
关闭
profila-0.2.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b2033d9901ba9d2197bfd36bd18fed0f380c29cdd789d0f62fbaa4e2a24c9a84 |
|
MD5 | fb2e1f20026bab3b6018bc888c2ac252 |
|
BLAKE2b-256 | 9e60cfbf7637a3119007655092a22a12b4cb09d0bb3595ffd513a79f8f95daf2 |
关闭
profila-0.2.1-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5b0d718ad80be309253e138f129885b4e84c0ba7d0f209ea8a5fbee2ef3e9a9b |
|
MD5 | 021dab99869c57a5a3630e5474b6b3ab |
|
BLAKE2b-256 | a68334d4d59822d7f712fbd5fd622219443a1f860c629f0470bab5115bde0a4a |