私はxtensor-pythonを試していましたが、cookiecutter setupを使用し、xsimdでSIMD組み込み関数を有効にした後、非常に単純な合計関数を書いて始めました。私のPythonモジュールをビルドするsetup.py
を使用しxtensorタイプのパフォーマンスと単純な縮小のNumPy
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)();
}
、その後、np.sum
と比較し、異なるサイズのnp.random.randn
から構築numpyのアレイに加算機能をテストしました。
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
非常にクール、情報とプロジェクトのあなたの仕事のおかげで!それ以上の質問があれば、私はそこに尋ねます。 –