Программа на C # работает быстрее на медленном ПК и наоборот - PullRequest
1 голос
/ 26 марта 2012

У меня есть программа OCR, написанная с C # (приложение WinForms). Так что главная цель - обрезать, модифицировать, сравнивать изображения ocr .. не более или менее. Когда я запускаю эту программу на более медленной машине - я получаю лучшие результаты!

Мой основной аппарат (стационарный ПК):

  • Windows 7 X64
  • AMD64 5000+ X2 процессор
  • Samsung HD502IJ 500 ГБ, 7200 об / мин, 16 МБ, кэш, жесткий диск SATA
  • 4 ГБ оперативной памяти DDR2
  • 9600GT GF видеокарта

конфигурация ноутбука (benq joybook P52)

  • ОС: WinXP x86 SP3
  • медленнее AMD Turion 64 X2 1,6 ГГц
  • медленнее, 80 ГБ, 5400 об / мин, sata-диск
  • В 4 раза меньше оперативной памяти: всего 1 ГБ памяти DDR2 266 Гц
  • 100-кратная медленная графика: интегрированный ATI X1600 ( Я не думаю, что графическая карта действительно имеет значение в этом тесте )
  • Я едва могу путешествовать по сети с 8 открытыми хромированными вкладками

Можете ли вы угадать, что быстрее?

  • Win7 время выполнения: 600-700 + мс
  • WinXP exec. время: 450-500 мс

Итак, вопрос - как вы объясните эту ненормальную производительность? Можно ли повысить производительность на моем основном ПК?

П.С .: Я знаю, что трудно сказать, не глядя на код .. извините за это

Ответы [ 4 ]

4 голосов
/ 26 марта 2012

OCR - нетривиальный код.Самый логичный первый шаг - это измерение!Профилируйте производительность по сравнению с одинаковыми тестовыми данными в обеих средах.Это должно дать вам представление о том, какие фрагменты кода занимают больше всего времени на «более быстрой» машине.

0 голосов
/ 04 сентября 2012

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

В принципе, тип процессора в сочетании с количеством ядер и модель памяти вашего приложения могут иметь многосказать.

http://igoro.com/archive/volatile-keyword-in-c-memory-model-explained/

Выдержка:

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

Основные процессоры x86 и x64 реализуют сильную модель памяти, в которой доступ к памяти является фактически энергозависимым.Таким образом, энергозависимое поле заставляет компилятор избегать некоторых высокоуровневых оптимизаций, таких как поднятия чтения цикла, но в противном случае приводит к тому же коду сборки, что и к энергонезависимому чтению.

Процессор Itanium реализуетболее слабая модель памяти.Чтобы нацелиться на Itanium, JIT-компилятор должен использовать специальные инструкции для доступа к энергозависимой памяти: LD.ACQ и ST.REL вместо LD и ST.Инструкция LD.ACQ фактически говорит: «обновите мой кеш, а затем прочитайте значение», а ST.REL говорит: «записать значение в мой кеш, а затем сбросить кэш в основную память».LD и ST, с другой стороны, могут просто обращаться к кешу процессора, который не виден другим процессорам.

0 голосов
/ 26 марта 2012

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

Также я бы сказал, что ОС - это большая разница, возможно, получитеUSB загрузочный мини XP, 200-300 Мб скачать.И запустите код на хорошей машине на этом.

Также то же самое можно протестировать с двумя виртуальными машинами, просто создайте одну виртуальную машину с XP и одну с Windows 7 и посмотрите, есть ли разница на том же оборудовании.

0 голосов
/ 26 марта 2012

Без дополнительной информации сложно сказать, но ЕСЛИ вы запускаете код, скомпилированный для x64, на своем стационарном ПК, вы можете столкнуться с проблемой, возникшей у меня на клиентском сайте. 64-битный код использует большие числа, поэтому может быстрее заполнять кэш процессора, а значит, ваш код работает медленнее. Вот ранее отвеченный вопрос, который касается той же проблемы: Как компиляция моего приложения для 64-битной системы может сделать его быстрее или лучше?

...