我编写了一个对大量数据进行排序的函数。为了测试它的性能,我将它与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/