首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在visual studio 2012中对本征型向量的自动矢量化效果不佳。

在visual studio 2012中对本征型向量的自动矢量化效果不佳。
EN

Stack Overflow用户
提问于 2016-10-17 11:14:46
回答 2查看 233关注 0票数 0

我有std::Vector3d类型,当我使用Microsoft 2012编译这段代码时,它有/Qvec-report:2标志,用于报告矢量化细节。它显示的循环由于第1304原因没有向量化(循环包含不同类型的赋值),这是在msdn页面-https://msdn.microsoft.com/en-us/library/jj658585.aspx上指定的。

我的代码如下:

代码语言:javascript
复制
#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;
}

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

EN

回答 2

Stack Overflow用户

发布于 2016-10-17 11:59:08

来自特征文献

在本征中,像operator+这样的算术运算符本身不执行任何计算,它们只是返回一个描述要执行的计算的“表达式对象”。当计算整个表达式时(通常是在operator=中),实际的计算将在以后进行。

因此,eV1[i] - eV2[i]没有返回一个Eigen::Vector3d -所以理由1304适用。你也许能投-但我不赌。

票数 1
EN

Stack Overflow用户

发布于 2017-06-26 00:08:36

考虑将eiVec1eiVec12改为matrix<double, 3, 100>,并将减法改为eiVec = eiVec1 - eiVec2

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

https://stackoverflow.com/questions/40084969

复制
相关文章

相似问题

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