gpt4 book ai didi

c - C代码: more instructions executes faster than fewer ones的奇怪表现

转载 作者:行者123 更新时间:2023-12-01 23:38:25 25 4
gpt4 key购买 nike

我使用 GCC 编译器在 C 中运行以下两个代码。

#include <stdio.h>
#include <time.h>

int
main()
{
int i, j, k, l, step, count = 0;
double duration;
float multi;

const clock_t begin_time = clock();

for (step = 1; step < 10000; step++)
for (k = 1; k < 27000; k++) {
for (i = 1; i < 5; i++)
for (j = 1; j < 9; j++) {
count++; // INSTRUCTION-1
}
};

duration = (double) (clock() - begin_time) / CLOCKS_PER_SEC;

printf("C program count = %d \n", count);
printf("clock = %f \n", duration);
}

第二段代码如下:

#include <stdio.h>
#include <time.h>

int
main()
{

int i, j, k, l, step, count = 0;
double duration;
float multi;

const clock_t begin_time = clock();

for (step = 1; step < 10000; step++)
for (k = 1; k < 27000; k++) {
for (i = 1; i < 5; i++)
for (j = 1; j < 9; j++) {
count++; // INSTRUCTION-1
multi = 9.56587458 * 8.547458748; // INSTRUCTION-2
}
};

duration = (double) (clock() - begin_time) / CLOCKS_PER_SEC;

printf("C program count = %d \n", count);
printf("clock = %f \n", duration);
}

两个代码几乎相同。唯一的区别是第一个代码在循环内只有一条指令,而第二个代码在循环内有两条指令。因此,我预计第二个代码应该需要更长的时间来执行。然而,令我惊讶的是,第一个代码的执行时间是 22.45 秒,而第二个代码的执行时间是 17.96 秒。为什么第二个代码比第一个代码执行得更快,即使它涉及更多的计算?

如果此信息相关,使用的 CPU 是 Intel Xeon E5-2670V 2.5 GHz 2 CPU-IvyBridge(20 核)。

最佳答案

如果您查看 https://godbolt.org/z/136qsc 处的程序集输出

这个函数:

double multiply(void) {
return 9.56587458 * 8.547458748; ;
}

不包括乘法指令,或常量 9.56587458 或 8.547458748。编译器注意到结果可以在编译时计算,因此没有理由在输出中包含该代码或在运行时执行它。您没有按照自己的想法对两个示例进行操作,因此不增加额外复杂性的示例并没有显着变慢是有道理的。

关于c - C代码: more instructions executes faster than fewer ones的奇怪表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65257180/

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