首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xtensor和xsimd:提高约简性能

xtensor和xsimd:提高约简性能
EN

Stack Overflow用户
提问于 2019-08-10 12:42:12
回答 1查看 750关注 0票数 3

我试图在精简操作(例如元素和)上获得与X张量相同的性能,就像在NumPy中一样。

我为并行计算启用了西姆,但没有任何效果。

以下是基准代码:

代码语言:javascript
复制
#include <iostream>

#include "xtensor/xreducer.hpp"
#include "xtensor/xrandom.hpp"
#include <ctime>

using namespace std;


pair<double, double> timeit(int size, int n=30){
    double total_clocks = 0;
    double total_sum = 0;
    for (int i=0;i<n;i++){
        xt::xtensor<double, 1> a = xt::random::rand({size}, 0., 1.);
        int start = clock();

        double s = xt::sum(a, xt::evaluation_strategy::immediate)();

        int end = clock();
        total_sum += s; total_clocks += end-start;
    }
    return pair<double, double>(total_clocks/CLOCKS_PER_SEC/n, total_sum); 
}

int main(int argc, char *argv[])
{
    for (int i=5;i<8;i++){
        int size = pow(10, i);
        pair<double, double> ret = timeit(size);
        cout<<"size: "<<size<< " \t " <<ret.first<<" sec\t"<<ret.second<<endl;

    }
    return 0;
}

并在启用和不启用xsimd和所有已启用优化(-O3)的情况下编译它:

代码语言:javascript
复制
$ g++ -DXTENSOR_USE_XSIMD -O3  -march=native -I/home/--user--/install_path/include "./18. test speed 2.cpp" -o a && ./a
size: 100000     0.0001456 sec     1.49984e+06
size: 1000000    0.0013149 sec     1.50002e+07
size: 10000000   0.0125417 sec     1.49995e+08
代码语言:javascript
复制
$ g++ -O3  -march=native -I/home/--user--/install_path/include "./18. test speed 2.cpp" -o a && ./a 
size: 100000     0.0001433 sec     1.49984e+06
size: 1000000    0.0012621 sec     1.50002e+07
size: 10000000   0.0124868 sec     1.49995e+08

顺便说一句,使用numpy的相同操作:

代码语言:javascript
复制
$ python bench.py
size: 100000     0.000030 sec
size: 1000000    0.000430 sec
size: 10000000   0.005144 sec

大约快4倍!

设置

  • Ubuntu 18.04
  • 核心i7 CPU
  • 包的最新版本

如何提高xtensor性能?)))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-11 17:07:24

根据我打开的这个github问题

应该启用-mavx2-ffast-math标志!

代码语言:javascript
复制
$ g++ -mavx2 -ffast-math -DXTENSOR_USE_XSIMD -O3 -I/home/--user--/install_path/include ./bench.cpp -o a && ./a
size: 100000        3.489e-05 sec   4.99932e+06
size: 1000000       0.00050792 sec  4.99989e+07
size: 10000000      0.00544542 sec  4.99997e+08

多亏了邓邦杰

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57442255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档