跳转到主要内容

使用多线程和其他技巧为NumPy提供更快的循环

项目描述

PNumPy

PNumPy 可以无缝加速大型数组(64K+元素)的 NumPy,无需对现有的 NumPy 代码进行任何修改。

PNumPy 支持 Linux、Windows 和 MacOS,对于 Python 3.6、3.7、3.8 和 3.9 的 NumPy >= 1.18。

本版本首先加速了 NumPy 的二元和一元 ufunc,如 add、multiply、isnan、abs、sin、log、sum、min 等等。加速的函数还包括:sort、argsort、lexsort、arange、布尔索引和花式索引。在不久的将来,我们还将加速 astype、where、putmask 和 searchsorted

使用 numpy 的其他包,如 scikit-learnpandas,在大型数组中也将得到加速。

CI Status

License: MIT

安装

pip install pnumpy

您也可以使用以下命令安装最新开发版本:

pip install https://github.com/Quansight/pnumpy/archive/main.zip

文档

请参阅完整文档

使用项目

import pnumpy as pn

Parallel NumPy 在幕后静默地加速 NumPy。要自己查看一些基准测试,请运行:

pn.benchmark()

plot plot

要获取加速函数的部分列表,请运行:

pn.atop_info()

要禁用或启用 pnumpy,请运行:

pn.disable()
pn.enable()

附加功能

PNumPy 提供了额外的例程,例如将 NumPy 记录数组并行转换为列主序数组(pn.recarray_to_colmajor),这对于 DataFrame 非常有用。其他例程包括 pn.lexsort32,它使用 np.int32 而不是 np.int64 进行间接排序,消耗一半的内存并运行更快。

多线程

PNumPy 使用线程和 256 位向量内嵌指令的组合来加速计算。默认情况下,大多数操作将只使用 3 个额外的工作线程,与主 Python 线程结合使用,总共 4 个。大型数组被分成 16K 块,线程被分配以保持缓存一致性。对于更密集的 CPU 问题(如 np.sin),会动态部署更多线程。用户可以自定义多线程。下面的示例显示了如何使用 4 个线程将有效的 L2 缓存大小加倍。

plot

要限制额外的 worker 线程数为 3,请运行:

pn.thread_setworkers(3)

要禁用或重新启用线程,请运行:

pn.thread_disable()
pn.thread_enable()

要禁用或重新启用 atop 引擎,请运行:

pn.atop_disable()
pn.atop_enable()

常见问题解答

问题:如果我在数组 a 上输入 np.sort(a),它会被加速吗?

答案:如果 len(a) > 65536 且已导入 pnumpy,它将自动加速。

问题:sort 是如何加速的?

答案:PNumPy 使用额外的线程将排序任务分割。例如,它可能执行 8 路快速排序,然后是 4 路归并排序。

问题:scikit 或 pandas 是如何加速的?

答案:PNumPy 的向量循环和线程将加速任何使用大型 NumPy 数组的包。

开发

要运行所有测试,请运行:

python -m pip install pytest
python -m pytest tests

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

本版本没有可用的源分发文件。请参阅有关生成分发存档的教程。

构建的分发

pnumpy-2.0.23-cp36-abi3-win_amd64.whl (415.0 kB 查看哈希值)

上传时间: CPython 3.6+ Windows x86-64

pnumpy-2.0.23-cp36-abi3-manylinux2010_x86_64.whl (1.8 MB 查看哈希值)

上传时间: CPython 3.6+ manylinux: glibc 2.12+ x86-64

pnumpy-2.0.23-cp36-abi3-manylinux1_x86_64.whl (1.8 MB 查看哈希值)

上传时间: CPython 3.6+

pnumpy-2.0.23-cp36-abi3-macosx_10_14_x86_64.whl (363.9 kB 查看哈希值)

上传时间: CPython 3.6+ macOS 10.14+ x86-64

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面