【问题标题】:Any intuition or insight into why these programs run differently on Windows vs Linux? [closed]对为什么这些程序在 Windows 和 Linux 上的运行方式不同有任何直觉或见解吗? [关闭]
【发布时间】:2013-11-24 23:59:37
【问题描述】:

我有一个小程序,它实现了三种排序算法,并对每种算法的执行时间进行时间分析(使用 C 时间库并调用 clock())。该程序在对数组进行排序之前读取 9999、19999 和 29999 个整数。完成后,发现新排序数据的中位数作为数据正确排序的证明。

问题是,在我的个人 Windows 7 机器上,尽管有正确排序的集合,但我无法找到通过快速排序算法排序的数据的中位数。然而,当在 Linux 机器上运行时,一切正常但是时间运行与预期不符。

快速排序算法是nlog(n) 平均情况。因此,我们预计执行时间会随着更大的数据集而增加(在我的个人机器上就是这样)。但是,当在 linux 机器上运行时,最小数据集的执行时间为 0,而以下两个数据的执行时间相同。

我可以理解与执行时间相关的计算结果为 0(由于整数运算的截断),但我的个人机器在所有其他算法上运行得更快。为这个特定实例指出的滞后促使我询问差异。

如果您认为差异背后的原因可能与我阅读/排序方式的实施有关,那么请发表评论。但是,我对两个系统之间处理系统时间的方式之间的差异以及可能是罪魁祸首的各种其他事情之间的差异更感兴趣。

而且,有时当程序在 linux 机器上运行时,输出的执行时间实际上会类似于10 0 10,所以我自然对此很感兴趣。

【问题讨论】:

  • 您可能会通过此查看是否存在精度差异问题:stackoverflow.com/questions/8594277/clock-precision-in-time-h
  • 你没有说任何关于机器的架构,或者你是使用 32 位还是 64 位实现,或者当你运行这些测试时机器可能在做什么.简而言之,您的数据毫无意义。
  • 我在问一个一般性问题。我没有考虑这个输出在不同架构中可能不同的依赖关系。我想知道是否有立即明显的区别。我并不是要求对正在发生的事情进行非常精确的定义。

标签: c linux time


【解决方案1】:

除了显而易见的内容之外,我不确定您在这里寻找什么,但是...

  1. 您的 Windows 代码中有错误,因此中位数不好

  2. 在 unix 机器上,计时信息的分辨率很低,因此您只能看到 10 的倍数。所以任何持续在 0 到 10 之间的进程(无论单位是什么)都可能显示 0 或 10,具体取决于正是它开始和停止的时间。这与您通过根据其他运行缩放窗口结果所期望的时间一致。

【讨论】:

  • 这就是我的想法。我所寻找的只是一种普遍的可能性。我对linux系统几乎一无所知,所以我真的不确定。有一个有趣的问题是,在 Linux 机器上成功计算了中位数,而在 Windows 机器上,正确的中位数恰好在返回的中位数之前(在排序整数数组中)的 1 个位置。
猜你喜欢
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 2018-10-10
相关资源
最近更新 更多