相关疑难解决方法(0)

Linux上的程序速度比Windows快 - 为什么?

问题的解决方案是在问题上找到的,Executable在Wine上的运行速度比Windows快 - 为什么? Glibc floor()可能是根据系统库实现的.


我有一个非常小的C++程序(~100行)用于物理模拟.我在同一台计算机上的Ubuntu Oneiric和Windows XP上用gcc 4.6.1编译了它.我使用了完全相同的命令行选项(相同的makefile).

奇怪的是,在Ubuntu上,在程序完成比在Windows(〜7.5 s和13.5 S)更快.在这一点上,我认为这是编译器的差异(尽管使用相同的版本).

但更奇怪的是,如果我跑下酒Windows可执行文件,它仍然快于在Windows(我得到11的"真实"和7.7的"用户"时间 - 这包括酒启动.)

我糊涂了.当然,如果在同一个CPU上运行相同的代码,则时间应该没有差别.

这可能是什么原因? 我能做错什么?

该程序执行最小I/O(输出单行),并且仅使用vectorSTL中的固定长度(即不应涉及系统库).在Ubuntu上我使用了默认的gcc,在Windows上使用了Nuwen发行版.我确认在进行基准测试时CPU使用率接近于零(我关闭了大多数程序).在Linux上我用于time计时.在我使用的Windows上timethis.exe.

UPDATE

我做了一些更精确的计时,比较适用于Windows XP,葡萄酒和Linux的GCC和MSVC编译程序的不同输入(运行时间必须是正比于输入)的运行时间.所有数字均以秒为单位,是至少3次运行的最小值.

在Windows上我使用timethis.exe(挂机时间),在Linux和Wine上我使用了时间(CPU时间).(timethis.exe在Wine上断了)我确保没有其他程序使用CPU并禁用了病毒扫描程序.

gcc的命令行选项-march=pentium-m -Wall -O3 -fno-exceptions -fno-rtti(即禁用了例外).

计时

我们从这些数据中看到的是:

  1. 差异不是由于过程启动时间,因为运行时间与输入成比例

  2. 运行Wine和Windows之间的区别只存在于gcc编译的程序,而不是msvc编译的程序:它不能被其他程序在Windows上占用CPU或者timethis.exe被破坏.

c++ linux windows benchmarking gcc

5
推荐指数
1
解决办法
6013
查看次数

标签 统计

benchmarking ×1

c++ ×1

gcc ×1

linux ×1

windows ×1