【发布时间】:2018-04-24 17:15:32
【问题描述】:
在使用cookiecutter setup 并使用xsimd 启用SIMD 内在函数之后,我正在尝试xtensor-python 并开始编写一个非常简单的求和函数。
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
知道为什么我会看到这个吗?我猜这是 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
【问题讨论】:
标签: python c++ performance numpy xtensor