gpt4 book ai didi

c - 用于循环速度 c 的英特尔编译器

转载 作者:太空狗 更新时间:2023-10-29 16:01:06 26 4
gpt4 key购买 nike

我很难理解为什么这段代码在 Intel 编译器 12 上以惊人的速度运行,而在 Intel 编译器 16 上却真的变慢了

#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
int i,t;
int n=10000000;
int T=1000;
time_t t1,t2;

// double A[n],B[n],C[n];
double *A = (double*) malloc (sizeof(double)*n);
double *B = (double*) malloc (sizeof(double)*n);
double *C = (double*) malloc (sizeof(double)*n);



for (i=0;i<n;i++)
{
A[i]=1.0;
B[i]=2.0;
}
t1=clock();

for (t=0;t<T;t++)
for (i=0;i<n;i++)
C[i]=A[i]*B[i];

t2=clock();
double sum=0.0;
for (i=0;i<n;i++) sum += C[i];
printf("sum %f\n",sum);
printf("time %f\n",(double)(t2-t1)/CLOCKS_PER_SEC);
}

  • Intel 编译器 12:在 sandy bridge 上运行需要 0.1 秒;英特尔编译器 16:在 sandy bridge 上运行需要 25 秒

制作文件: icc -O2 -o array 数组.c

最佳答案

很可能,其中一个编译器积极优化了整个繁琐的嵌套循环。您优化后的代码似乎最终会变成:

t1=clock();
t2=clock();
double sum=0.0;
for (i=0;i<n;i++) sum += A[i]*B[i];

编译器做这样的优化是完全没问题的。您可以通过使循环迭代器 volatile 来阻止优化。

确保您在两个编译器上启用了相同级别的优化。

关于c - 用于循环速度 c 的英特尔编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36310999/

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