如何解决为什么使用 Eigen::DenseIndex 或 int 索引 Eigen 时的性能会有所不同?
使用 int 或 Eigen::DenseIndex 索引 Eigen:Tensor 时,性能似乎存在显着差异。有人知道提高 Eigen::DenseIndex 结构性能的原因和解决方案吗?在以下示例中,第一次计算大约需要 50 秒,而第二次计算需要 25 秒。
{// Test eigen with Eigen::DenseIndex as indexing
Eigen::Tensor<float,4,Eigen::DenseIndex> input(100,100,25,25);
input.setRandom();
Eigen::array<Eigen::DenseIndex,4> tensorOffset;
Eigen::array<Eigen::DenseIndex,4> tensorExtent = { 1,25 };
Eigen::array<Eigen::DenseIndex,1> one_dims{ {100 * 25 * 25} };
std::chrono::time_point<std::chrono::steady_clock> m_StartTime = std::chrono::high_resolution_clock::now();
for (Eigen::DenseIndex ii = 0; ii < 50000; ii++)
{
tensorOffset = { 5,0 };
Eigen::Tensor<float,1,Eigen::DenseIndex> temp = input.slice(tensorOffset,tensorExtent).reshape(one_dims);
}
std::chrono::duration<float> duration = std::chrono::high_resolution_clock::now() - m_StartTime;
std::cout << "Time with eigen::denseIndex: " << duration.count() << std::endl;
}
{// Test eigen with int as indexing
Eigen::Tensor<float,int> input(100,25);
input.setRandom();
Eigen::array<int,4> tensorOffset;
Eigen::array<int,25 };
Eigen::array<int,1> one_dims{ 100 * 25 * 25 };
std::chrono::time_point<std::chrono::steady_clock> m_StartTime = std::chrono::high_resolution_clock::now();
for (int ii = 0; ii < 50000; ii++)
{
tensorOffset = { 5,int> temp = input.slice(tensorOffset,tensorExtent).reshape(one_dims);
}
std::chrono::duration<float> duration = std::chrono::high_resolution_clock::now() - m_StartTime;
std::cout << "Time with int: " << duration.count() << std::endl;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。