我在C语言中编写了一个多线程的归并排序程序,并编写了一个基准测试程序,可用0、1、2或4个线程进行测试。我还编写了一个Python程序来执行多个测试并汇总结果。
奇怪的是,当我运行Python程序时,测试时间总是比直接在shell中运行测试程序快一半左右。
例如,当我仅使用4百万个整数运行测试程序(最后两个参数是生成整数的种子和模数):
$ ./mergetest 4000000 4194819 140810581084
0 threads: 1.483485s wall; 1.476092s user; 0.004001s sys
1 threads: 1.489206s wall; 1.488093s user; 0.000000s sys
2 threads: 0.854119s wall; 1.608100s user; 0.008000s sys
4 threads: 0.673286s wall; 2.224139s user; 0.024002s sys
使用 Python 脚本:
$ ./mergedata.py 1 4000000
Average runtime for 1 runs with 4000000 items each:
0 threads: 0.677512s wall; 0.664041s user; 0.016001s sys
1 threads: 0.709118s wall; 0.704044s user; 0.004001s sys
2 threads: 0.414058s wall; 0.752047s user; 0.028001s sys
4 threads: 0.373708s wall; 1.24008s user; 0.024002s sys
无论我排序多少次,或者运行多少次,都会出现这种情况。Python程序使用subprocess模块调用测试器,然后解析和聚合输出。有什么想法为什么会发生这种情况吗?Python是否在优化执行?还是当我直接运行时有一些我不知道的东西在减慢它的速度?代码:https://gist.github.com/2650009
stdout
重定向到/dev/null
,看看是否会改变情况。 - Aidan Steeleint
,而C语言的int
仍然是32位。 - Daniel Fischer