我有一个简单的程序,其中我有 3 个 std::vector 并在 for 循环中使用它们。在启用编译标志后,我正在测试这些循环是否被优化。但是 Visual Studio 显示由于原因 1200,循环未矢量化。我的示例代码如下。
#include <iostream>
#include <vector>
#include <time.h>
int main(char *argv[], int argc)
{
clock_t t=clock();
int tempSize=100;
std::vector<double> tempVec(tempSize);
std::vector<double> tempVec1(tempSize);
std::vector<double> tempVec2(tempSize);
for(int i=0;i<tempSize;i++)
{
tempVec1[i] = 20;
tempVec2[i] = 30;
}
for(int i=0,imax=tempSize;i<imax;i++)
tempVec[i] = tempVec1[i] + tempVec2[i];
t =clock()-t; // stop the clock
std::cout <<"Time in millisecs = " << t/double(CLOCKS_PER_SEC) << std::endl;
return 0;
}
下面是使用启用选项“/Qvec-report:2”的代码编译的输出。
2> --- 分析函数:main 2> d:\test\ssetestonvectors\main.cpp(12) : info C5002: loop not vectorized due to reason '1200' 2> d:\test\ssetestonvectors\main.cpp( 18) : info C5002: loop not vectorized 由于原因“1200”
当我在 msdn 页面上阅读错误代码 1200 时: https ://msdn.microsoft.com/en-us/library/jj658585.aspx 它指定错误代码 1200 是由于“循环包含循环携带的数据依赖”
我无法理解这个循环是如何包含它的。我有一些需要优化的代码,以便它可以使用 Visual Studio 的自动矢量化功能,以便可以针对 SSE2 进行优化。此代码包含向量操作。所以我无法做到这一点,因为每次视觉工作室都会显示一些这样的错误代码。