使用多线程和其他技巧为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-learn 或 pandas,在大型数组中也将得到加速。
安装
pip install pnumpy
您也可以使用以下命令安装最新开发版本:
pip install https://github.com/Quansight/pnumpy/archive/main.zip
文档
请参阅完整文档
使用项目
import pnumpy as pn
Parallel NumPy 在幕后静默地加速 NumPy。要自己查看一些基准测试,请运行:
pn.benchmark()
要获取加速函数的部分列表,请运行:
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 缓存大小加倍。
要限制额外的 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
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建的分发
哈希值 for pnumpy-2.0.23-cp36-abi3-manylinux2010_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d3530f8083174b07e7342e99e20adeeb2ca5d706c691e7542df2124facd4e375 |
|
MD5 | 58e571808821ce0506527acce47026d8 |
|
BLAKE2b-256 | d20f0cb8a391b7eb0268a8b596fb8bf5559a8d636a9d97da97488fc224301963 |
哈希值 for pnumpy-2.0.23-cp36-abi3-manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | abd6a369d1c580f6aa1cb16a6e67a73bfa9ebe4b2b53457ffa1da76a9b96589d |
|
MD5 | 58b2a96489a20cb8f7c80a4b3cdbaa4d |
|
BLAKE2b-256 | a0fe2dede5d615747b5f1aca6a2deb7dd281db049aaf35e37fc29a2e57ad166d |
哈希值 for pnumpy-2.0.23-cp36-abi3-macosx_10_14_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 29d5e0d5f4c871b173c1a1fab45ae290769455eff9b75e3fb70585a851547b0c |
|
MD5 | feee2f9bc028a8abcacd7f3088969570 |
|
BLAKE2b-256 | bc3bfa8a74add72731a7a2dfe96384fef082e213b133764b4a418393ad276696 |