memset明显快于Eigen :: Tensor SetZero()

时间:2017-11-27 12:08:40

标签: c++ visual-c++ eigen eigen3

我已将我的代码中的Eigen :: Tensor SetZero()调用更改为对张量数据的memset调用,并观察到更好的性能。在VS 2016中构建(默认情况下应启用SSE2支持)。为什么会这样?我原以为Eigen :: Tensor是高度优化的。

#include <unsupported/Eigen/CXX11/Tensor>
#include <iostream>
#include <ctime>

#define MyLayoutType Eigen::RowMajor
#define Tf3 Eigen::Tensor<float, 3, MyLayoutType>
clock_t begin = clock();

Tf3 tensor(1000, 500, 20);

for (size_t i = 0; i < 100; i++)
{
    tensor.setRandom();
    memset(tensor.data(), 0, tensor.size() * sizeof(float));
    // VS:
    //tensor.setZero();
}

clock_t end = clock();

double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
cout << "-----------------------" << endl;
cout << "Total time elapsed: " << elapsed_secs << " 
secs" << endl;
cout << tensor(0, 0, 0);

在我的环境中,我在avg上获得了2.1的memset,在setZero上获得了2.3。并且setRandom操作比memset要多得多。如果我注释掉tensor.setRandom()我得到0.4的memset和0.5得到setZero.IN真正的代码性能差异更大。

0 个答案:

没有答案