これに対する解決策は、Executable runs faster on Wine than Windows -- why?の質問に見つかりました。Glibcのfloor()
はおそらくシステムライブラリの観点から実装されています。WindowsよりLinuxで同じプログラムの方が高速です - なぜですか?
私は物理シミュレーションのために非常に小さなC++プログラム(〜100行)を持っています。私は同じコンピュータ上のUbuntu OneiricとWindows XPの両方でgcc 4.6.1でコンパイルしました。私は正確に同じコマンドラインオプション(同じメイクファイル)を使用しました。
奇妙なことに、Ubuntuでは、プログラムは(Windowsの場合よりも7.5秒~13.5秒)速く終了します。この時点では、コンパイラの違いだと思っていました(同じバージョンを使用していても)。
さらに奇妙なことに、ワインの下で実行可能なWindowsを実行すると、Windowsよりも高速です(実際には11秒、「ユーザー」は7.7秒です)。
私は混乱しています。確かに同じコードが同じCPU上で実行されている場合、タイミングに違いはありません。
これはどのような理由が考えられますか?どうしたらいいですか?
プログラムは最小限のI/O(1行出力)を行い、固定長のvector
(STLからのみ)を使用します(つまり、システムライブラリは関係ありません)。 Ubuntuではデフォルトのgccを使用し、WindowsではNuwen distributionを使用しました。私はベンチマークを行う際にCPU使用率がゼロに近いことを確認しました(ほとんどのプログラムを閉じました)。 Linuxではタイミングのためにtime
を使用しました。 Windowsではtimethis.exe
を使用しました。
UPDATE
私は、Windows XP上のgccとMSVC-コンパイルされたプログラムの異なる入力のために実行されている時間を比較するいくつかのより正確なタイミング、(実行時に入力に比例しなければならない)、ワインを行なったし、 Linux。すべての数値は秒単位で、少なくとも3回以上実行されます。
Windowsでは、timethis.exe(壁の時間)を使用しました。LinuxではWineを使用し、時間(CPU時間)を使用しました。 (timethis.exeはWineで壊れています)他のプログラムがCPUを使用していないことを確認し、ウイルススキャナを無効にしました。
gccのコマンドラインオプションは-march=pentium-m -Wall -O3 -fno-exceptions -fno-rtti
(例外が無効)でした。
実行時間が入力
に比例するよう差は、起動時間を処理することによるものではない。我々は、このデータから見る何
WineとWindowsでの実行の違いは、gccコンパイルされたプログラムの場合のみであり、msvcでコンパイルされたプログラムの場合には存在しません.Windows上のCPUまたはhtogの他のプログラムでは、 ethis.exeが壊れています。
このことは、どのくらいのメモリを使用しているの?プロファイラの下で実行しようとしましたか? – bdonlan
2台の異なる車(トラックと小型スポーツカー)が同じエンジンを使用している場合、同じ速度で加速すべきですか? – CrazyDart
Windowsで起動時間が長いことはありますか?プログラムの実行時間を長くすると、WindowsとLinuxの時間差はどのように影響しますか? – celtschk