gpt4 book ai didi

c++ - visual studio 2012 中 Eigen 类型 vector 的自动向量化表现不佳

转载 作者:行者123 更新时间:2023-11-28 05:28:14 27 4
gpt4 key购买 nike

我有 Eigen::vector3d 类型的 std::vector ,当我使用 Microsoft Visual Studio 2012 编译此代码时,带有 /Qvec-report:2 标志以报告矢量化详细信息。它显示由于 msdn 页面上指定的原因 1304(循环包含不同类型的分配)而未矢量化循环 - https://msdn.microsoft.com/en-us/library/jj658585.aspx

我的代码如下:

#include <iostream>
#include <vector>
#include <time.h>
#include<Eigen/StdVector>
int main(char *argv[], int argc)
{
int tempSize=100;
/** I am aligning these vectors as specfied on http://eigen.tuxfamily.org/dox/group__TopicStlContainers.html */
std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d>> eiVec(tempSize);
std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d>> eiVec1(tempSize);
std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d>> eiVec2(tempSize);

for(int i=0;i<100;i++)
{
eiVec1[i] = Eigen::Vector3d::Zero();
eiVec2[i] = Eigen::Vector3d::Zero();
}

Eigen::Vector3d *eV = &eiVec.front();
const Eigen::Vector3d *eV1 = &eiVec1.front();
const Eigen::Vector3d *eV2 = &eiVec2.front();

/** Below loop is not vectorized due to code 1304 */
for(int i=0;i<100;i++)
{
eV[i] = eV1[i] - eV2[i];
}
return 0;
}

所以我无法理解如何告诉编译器,这是固定大小的数据,固定大小的赋值将在这里发生。

最佳答案

来自 the Eigen documentation

In Eigen, arithmetic operators such as operator+ don't perform any computation by themselves, they just return an "expression object" describing the computation to be performed. The actual computation happens later, when the whole expression is evaluated, typically in operator=

所以 eV1[i] - eV2[i] 没有返回 Eigen::Vector3d - 所以原因 1304 适用。你可能能够施放它——但我不会打赌。

关于c++ - visual studio 2012 中 Eigen 类型 vector 的自动向量化表现不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40084969/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com