Та же программа работает быстрее в Linux, чем в Windows - почему?

Решение этой проблемы было найдено в вопросе Исполняемый файл работает в Wine быстрее, чем в Windows - почему? Glibc floor () , вероятно, реализован в виде системных библиотек.


У меня есть очень маленькая программа на C ++ (~ 100 строк) для моделирования физики. Я скомпилировал его с помощью gcc 4.6.1 как на Ubuntu Oneiric, так и на Windows XP на одном компьютере. Я использовал точно такие же параметры командной строки (тот же файл makefile).

Как ни странно, в Ubuntu программа завершает работу намного быстрее, чем в Windows (~ 7,5 с против 13,5 с). На данный момент я подумал, что это разница между компиляторами (несмотря на то, что используется одна и та же версия).

Но что еще более странно, если я запускаю исполняемый файл Windows под вином, он все равно быстрее, чем под Windows (я получаю 11 с «реальное» и 7,7 с «пользовательское» время, включая запуск Wine).

Я запутался. Конечно, если один и тот же код выполняется на одном и том же процессоре, не должно быть разницы во времени.

В чем может быть причина этого? Что я делал не так?

Программа выполняет минимальный ввод-вывод (выводит одну строку) и использует только вектор фиксированной длины из STL (т.е. никакие системные библиотеки задействовать не должны). В Ubuntu я использовал gcc по умолчанию, а в Windows - дистрибутив Nuwen .Я проверил, что загрузка ЦП близка к нулю при проведении бенчмаркинга (я закрыл большинство программ). В Linux я использовал время для измерения времени. В Windows я использовал timethis.exe .

ОБНОВЛЕНИЕ

Я сделал несколько более точных таймингов, сравнив время работы для разных входов (время выполнения должно быть пропорционально входу) программ, скомпилированных с помощью gcc и msvc, в Windows XP, Wine и Linux. Все числа указаны в секундах и являются минимумом из 3 прогонов.

В Windows я использовал timethis.exe (время стены), в Linux и Wine я использовал время (время процессора). (timethis.exe не работает в Wine) Я убедился, что никакие другие программы не используют ЦП, и отключил антивирусный сканер.

Параметры командной строки для gcc были -march = pentium-m -Wall -O3 -fno-exceptions -fno-rtti (т.е. исключения были отключены).

Timings

Что мы видим из этих данных:

  1. разница не связана со временем запуска процесса, поскольку время выполнения пропорционально вводу.

  2. Разница между запуском в Wine и Windows существует только для скомпилированного gcc программа, а не скомпилированная msvc: она не может быть вызвана другими программами, загружающими процессор в Windows, или нарушением timethis.exe.

5
задан Community 23 May 2017 в 12:00
поделиться