我有一个用C编写的多线程mergesorting程序,以及一个用0、1、2或4个线程进行基准测试的程序。我还用Python编写了一个程序来执行多个测试并聚合结果。在
奇怪的是,当我运行Python时,测试运行的时间总是比直接在shell中运行的时间少一半。在
例如,当我用400万个整数单独运行测试程序时(最后两个参数是生成整数的种子和模数):
$ ./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脚本:
^{pr2}$无论我排序多少次,或者运行多少次,都会发生这种情况。python程序用subprocess模块调用测试人员,然后解析并聚合输出。你知道为什么会这样吗?Python是否在某种程度上优化了执行?或者,当我直接运行它时,是否有什么我不知道的东西在减慢它?在
原来我路过系统最大值作为生成随机数的模。C截短64位整数并将其解释为有符号,即2的补码中的-1,因此每个随机数都被这个数修改,变成0。因此,对所有相同的值进行排序所花费的时间似乎是随机数据的一半。在
在这个shell中包装一个脚本可能会有相同的效果。如果是这样,那就是控制台操作了
相关问题 更多 >
编程相关推荐