【发布时间】:2016-02-01 17:12:34
【问题描述】:
使用 -O3 优化时,这段代码几乎不需要任何时间
void foo()
{
int *A = (int *)malloc(1024*1024*sizeof(int));
int *B = (int *)malloc(1024*1024*sizeof(int));
double total_time = 0;
for(int i=0;i<1024;i++)
for(int j=0;j<1024;j++)
A[i*1024+j] = rand()%1000;
for(int t=0;t<10;t++)
{
double t1 = get_clock();
for(int i=0;i<1024;i++)
for(int j=0;j<1024;j++)
B[j*1024+i] = A[i*1024+j];
double t2 = get_clock();
total_time += (t2-t1);
}
double time_taken = total_time/10;
free(A);
printf("time taken = %7.16f\n",time_taken);
}
什么编译器优化使这段代码从 -O0 的 0.014 秒变为 -03 的 0.000000 秒
【问题讨论】:
-
你为什么要问我们?要求编译器生成汇编代码,然后检查它。
-
为什么不反汇编两个版本,对比一下asm代码?
-
对实际上不执行任何操作的任意代码进行性能优化是一项无望的努力。通过花时间优化重要的事情,您将了解更多信息。
标签: c intel compiler-optimization icc