在Visual Studio 2010上,当我在以下代码上启用增强指令集时,执行时间实际上增加了。启用拱形:SSE2使程序变慢
void add(float * input1, float * input2, float * output, int size)
{
for(int iter = 0; iter < size; iter++)
{
output[iter] = input1[iter] * input2[iter];
}
}
int main()
{
const int SIZE = 10000000;
float *in1 = new float[SIZE];
float *in2 = new float[SIZE];
float *out = new float[SIZE];
for(int iter = 0; iter < SIZE; iter++)
{
in1[iter] = std::rand();
in2[iter] = std::rand();
out[iter] = std::rand();
}
clock_t start = clock();
for(int iter = 0; iter < 100; iter++)
{
add(in1, in2, out, SIZE);
}
clock_t end = clock();
double time = difftime(end,start)/(double)CLOCKS_PER_SEC;
system("PAUSE");
return 0;
}
我一直获得约2.0
秒为time
变量,支持SSE2,而是1.7
秒当“未设置”。我建立在Windows 7 64位,VS 2010专业版,发布配置,优化速度。
有没有解释为什么启用SSE会导致更长的执行时间?
你看过生成的程序集,看它是否使用了任何SSE指令? – 2012-03-13 21:54:34
你是用调试版本还是发行版本来做这个? – 2012-03-13 22:01:50
@RetiredNinja我真的不太了解汇编,但是我可以确认它只使用启用了SSE的版本编译时使用SSE(xmm1和xmm0)所需的寄存器。 – contrapsych 2012-03-13 22:04:31