c - 不同机器的运行时间?

标签 c compiler-construction

我编写了一个对大量数据进行排序的函数。为了测试它的性能,我将它与qsort进行了比较。 。如果我在运行 FreeBSD 和 GCC 4.2.2 的桌面上编译它,结果是 qsort花费的时间比我的功能少。但是,我在运行 RedHat 和 GCC 4.1.2 的服务器上编译它,结果是我的函数花费的时间比 qsort 少。 .

我很困惑我的功能是否比qsort更好或不。有人能帮我解释一下这种奇怪的情况吗?

我已经使用相同的 CFLAGS 对其进行了多次测试,在同一台机器上运行它,并且除了不同的功能之外,所有其他条件都相同。

我的代码:

 53 int
 54 main(void)
 55 {
 56     int * array_first, * array_next;
 57     int len = 1000000;
 58     int i;
 59     struct timeval start, duration;
 60 
 61 
 62 
 63     array_first = malloc(sizeof(int) * len);
 64     array_next = malloc(sizeof(int) * len);
 65 
 66 
 67     for(i = 0; i < len; i++){
 68         *(array_first + i) = rand() % 1000;
 69         *(array_next + i) = *(array_first + i);
 70     }
 71 
 72     set_starttime(&start);
 73     quicksort(array_first, len, sizeof(int), compar);
 74     get_runningtime(start, &duration);
 75     printf("%lu\n", duration.tv_sec * MICRO_PER_SEC + duration.tv_usec);
 76     set_starttime(&start);
 77     qsort(array_next, len, sizeof(int), compar);
 78     get_runningtime(start, &duration);
 79     printf("%lu\n", duration.tv_sec * MICRO_PER_SEC + duration.tv_usec);
 80 
 81     assert(memcmp(array_first, array_next, sizeof(int) * len) == 0);
 82 
 83     free(array_first);
 84     free(array_next);
 85 
 86     return 0;
 87 }
 88 

最佳答案

导致性能不同的原因可能有很多。

  • 两个系统中的 qsort 实现可能有所不同,其中一个系统恰好更适合您的测试用例
  • 如果测试用例是随机生成的,您可能会因为一个测试用例而运气不佳
  • 使用不同的编译器版本编译代码意味着会进行不同的优化,从而改变代码的性能
  • 在不同的系统上运行测试意味着相同的代码会有不同的性能。在具有特定测试用例的一种架构上,缓存可能会被轻微滥用,而在另一种具有更大缓存的架构上,这不是问题。

我可以想到 10000 个其他原因,但这应该足以让您知道您不应该尝试进行这样的比较。

关于c - 不同机器的运行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11328861/

相关文章:

c++ - 如何从虚拟磁盘中提取文件?

c++ - Open Watcom 的优点和缺点

algorithm - 说明 token 流上的最左边的推导

c++ - 错误 :.。 'va_list' 尚未声明

c++ - 英特尔 C++ 编译器是否有资源编译器?

gcc - 将编译器添加到code::blocks

c - 在 C 中使用结构

c - 没有打印出任何字母?

C程序无法显示输出

c - 什么时候用Cygwin或MinGW编译C代码?