gpt4 book ai didi

python - xtensor 类型的性能与 NumPy 的简单归约

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:54 28 4
gpt4 key购买 nike

我正在尝试 xtensor-python在使用 cookiecutter setup 之后,开始编写一个非常简单的求和函数并使用 xsimd 启用 SIMD 内部函数.

inline double sum_pytensor(xt::pytensor<double, 1> &m)
{
return xt::sum(m)();
}
inline double sum_pyarray(xt::pyarray<double> &m)
{
return xt::sum(m)();
}

使用 setup.py 构建我的 Python 模块,然后在由不同大小的 np.random.randn 构造的 NumPy 数组上测试求和函数,与 np.sum

import timeit

def time_each(func_names, sizes):
setup = f'''
import numpy; import xtensor_basics
arr = numpy.random.randn({sizes})
'''
tim = lambda func: min(timeit.Timer(f'{func}(arr)',
setup=setup).repeat(7, 100))
return [tim(func) for func in func_names]

from functools import partial

sizes = [10 ** i for i in range(9)]
funcs = ['numpy.sum',
'xtensor_basics.sum_pyarray',
'xtensor_basics.sum_pytensor']
sum_timer = partial(time_each, funcs)
times = list(map(sum_timer, sizes))

这个(可能有缺陷的)基准测试似乎表明,与 NumPy 相比,对于更大的数组,xtensor 的这个基本函数的性能下降了。

           numpy.sum  xtensor_basics.sum_pyarray  xtensor_basics.sum_pytensor
1 0.000268 0.000039 0.000039
10 0.000258 0.000040 0.000039
100 0.000247 0.000048 0.000049
1000 0.000288 0.000167 0.000164
10000 0.000568 0.001353 0.001341
100000 0.003087 0.013033 0.013038
1000000 0.045171 0.132150 0.132174
10000000 0.434112 1.313274 1.313434
100000000 4.180580 13.129517 13.129058

benchfig

知道我为什么会看到这个吗?我猜这是 NumPy 利用的东西,而 xtensor(目前)还没有,但我不确定像这样简单的减少会是什么。我翻遍了 xmath.hpp但没有看到任何明显的东西,文档中也没有提到这样的东西。


版本

numpy                          1.13.3
openblas 0.2.20
python 3.6.3
xtensor 0.12.1
xtensor-python 0.14.0

最佳答案

太巧了!我正在研究这个加速!

xtensor 的求和是一个惰性操作——它不使用(自动)矢量化的最高性能迭代顺序。但是,我们刚刚向缩减(以及即将到来的累积)添加了一个evaluation_strategy 参数,它允许您在immediatelazy 缩减之间进行选择。

立即缩减立即执行缩减(而不是惰性),并且可以使用针对向量化缩减优化的迭代顺序。

您可以在此 PR 中找到此功能:https://github.com/QuantStack/xtensor/pull/550

在我的基准测试中,这应该至少与 numpy 一样快或更快。我希望今天能将它合并。

顺便说一句。请不要犹豫,访问我们的 gitter channel 并发布问题链接,我们需要更好地监控 StackOverflow:https://gitter.im/QuantStack/Lobby

关于python - xtensor 类型的性能与 NumPy 的简单归约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47240338/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com