2008-11-17 2 views
1

У меня есть консольное приложение Win32, которое выполняет некоторые вычисления, скомпилированные в Compaq Visual Fortran (что, вероятно, не имеет значения).Процессы консоли Win32 в VISTA - 10% CPU, но ОЧЕНЬ МЕДЛЕННО

Мне нужно запустить много из них одновременно.

В XP они занимают около 90-100% процессора вместе, работают очень быстро. В Vista, независимо от того, сколько из них я запускаю, они занимают не более 10% процессора (вместе) и работают очень медленно соответственно.

Происходит довольно много консольных выходов, но теперь ОЧЕНЬ много. Я могу свести к минимуму все окна, это не поможет. CPU в основном ничего не делает ...

Любые идеи?

Update:

Нет, это разные машины, но они работают сравнительно то же аппаратное обеспечение. 2. Нити не используются, это ОЧЕНЬ СТАРОЕ (20-летнее) приложение для DOS, скомпилированное в win32. Предполагается вычислить итерации до тех пор, пока они не соберутся, и не уничтожит все, что у него есть. Мое впечатление - VISTA просто НЕ ДАЕТ БОЛЬШЕ CPU

ответ

0

Является ли это одним и тем же аппаратным оборудованием на вашей Vista и XP? Он может использовать только 10% от Vista, потому что это не требует больше. Вы используете Thread? Я думаю, для этого требуется больше информации о вашем проекте. Вы пытаетесь использовать профилировщик, чтобы узнать, что происходит?

+0

1. Нет, это разные машины, но они работают на одном и том же оборудовании. 2. Темы не используются, это приложение OLY (20 лет) для DOS, составленное в win32. Предполагается вычислить итерации до тех пор, пока они не соберутся, и не уничтожит все, что у него есть. Мое впечатление - VISTA просто НЕ ДАЕТ БОЛЬШЕ CPU .. – badbadboy 2008-11-17 19:32:33

+0

Впечатления не являются измерениями, к сожалению. – 2008-11-17 20:06:14

1

Чтобы разъяснить пост Даока, ваш компьютер XP может быть связан с процессором для этого процесса, тогда как машина Vista связана каким-либо другим ресурсом.

Чтобы уточнить: вывод на стандартный вывод (или другой) может замедлить обработку. (как можно переключать контекст или доступ к файлам и т. д.)

+0

Написал комментарий к сообщению Даока. О «bound» - есть ли способ «привязать» VISTA к этим процессам? Дело в том, что процессы проходят длинные петли без сна или что-то еще. Таким образом, они просто не получают больше процессора. Но остальное - 90% CPU - идет в System idle! .. :) – badbadboy 2008-11-17 19:38:02

2

Вы пытались перенаправить вывод консоли в файл? Если ваши приложения переносятся на консоль (это случается, к сожалению, иногда), то перенаправление вывода должно помочь, так как гораздо быстрее писать в простой файл, чем писать на консоль.

Вы можете сделать это как так

c:\temp> dir > output.log 

Если вы действительно не заботятся о выходе на всех, вы можете его выбросить, за счет перенаправления на nul. например:

c:\temp> dir > nul 
+0

Удивительно, что файл пишет (ну, кэшируется, а затем записывается) может быть быстрее, чем консольный вывод. – Tim 2008-11-17 20:00:14

1

Как Тим намекнул, выход на консоль (стандартный вывод) очень дорогой.

Предлагаю повторить тест, перенаправляя вывод консоли в отдельный файл журнала для каждого процесса. Если возможно, настройте многословность вывода в другом тестовом прогоне.

Помимо этого существуют и другие очевидные возможности: значительно ли отличается аппаратное обеспечение, существуют ли другие основные процессы, существует ли общий ресурс, который находится под угрозой?

Кроме очевидного, найдите непрозрачный конфликт ресурсов, такой как общий файл.

Но основная область, где я бы посмотрел, является ли существенная разница в том, как скомпилирован ваш код для двух сред ОС - мне интересно, возникает ли у вашего кода Fortran какое-то особое наказание при работе в Vista, таких как режим совместимости. Посмотрите, насколько хорошо поддерживается Vista и можно ли настроить таргетинг на ваш компилятор для Vista. Также обратите внимание на тех, кто сообщает о подобных проблемах, например, в отчетах об ошибках, запросах функций и т. Д.

2

В Vista была установлена ​​known "feature", которая ограничивает использование определенных консольных приложений до 32 МБ ОЗУ. Я не знаю, повлияет ли на эту компиляцию Compaq Visual Fortran эту «функцию».

This article, похоже, обновлен не ранее октября 2008 года, поэтому проблема все еще существует.

1

Ваши петли, очевидно, не являются простыми вычислениями. Там где-то есть системный вызов блокировки. Просто потому, что он работал на XP, это не означает, что приложение является ошибкой.

Поскольку вы можете минимизировать окна консоли и не видите улучшения, я бы не стал рассматривать эту проблему. По моему опыту консольный вывод замедляет работу программы, только если окно консоли рисует текст, а не когда оно сведено к минимуму.

Смежные вопросы