madkite's blog

By madkite, 12 years ago, In Russian

Тут стал вопрос производительности операций чтения/записи. Напомню, что в С++ есть замечательная функция-флаг ios_base::sync_with_stdio() с помощью которой можно отключить синхронизацию стандартных потоков C и С++, и тем самым повысить производительность. Замечательный компилятор от не менее замечательной фирмы Microsoft этот флаг тупо игнорирует. Т.к. я не директор Microsoft и даже не ответственный за выпуск Visual Studio — мне глубоко всё равно кто в этом виноват. Для меня главное — результат.

Простой тест показал:

1255626 — G++ с выключенным sync_with_stdio — 50 мс

1255624 — G++ c включенным sync_with_stdio — 200 мс

1255627 — MS C++ с проигнорированным sync_with_stdio — 230 мс

Но, т.к. на этом сайте GNU C++ используется через одно место, т.е. через Microsoft Windows, используя непонятный порт под названием MinGW, то мне стало интересно какова реальная ситуация. Я взял две одинаковые виртуальные машины, запущенные на одной и той же физической — одну с 32-хбитной Windows, другую с 32-хбитным Linux. Сгенерировал файл с 10 млн. рандомных чисел (около 100МБ, генерировал, между прочим, кодом из этого поста). Взял простой код, считывающий эти 10 млн. чисел. И вот скриншоты того, что получилось:

Windows/MSVS с проигнорированным sync_with_stdio ~15 с

Windows/MinGW c включенным sync_with_stdio ~14 с

Windows/MinGW c выключенным sync_with_stdio ~3 с

Linux/GCC c включенным sync_with_stdio ~8 с

Linux/GCC c выключенным sync_with_stdio <3 с

Т.о. в некоторых случаях можно добиться несколько кратного увеличения производительности простой сменой ОС и компилятора. Можете попробовать сами ;)

  • Vote: I like it
  • 0
  • Vote: I do not like it