5

У меня есть программа на С ++ (скомпилированная с Visual Studio 2010 для Windows x64), которая выполняет некоторую математическую оптимизацию и не имеет интерактивных элементов ((одиночный) процесс только запускается через консоль и заканчивается после завершения оптимизации). Время выполнения зависит от заданного ввода и может быть, например, приблизительно. 4 минуты.

Когда я запускаю этот процесс на своей машине (Dell Latitude E6420, Intel Core i7-2720QM 2,2 ГГц, 8 ГБ ОЗУ, Windows 7 (64 бита)), он использует 13% всего процессора (это должно быть правильно, поскольку он также может использовать одно ядро). Проблема заключается в том, что он работает более чем в 4-8 раз медленнее, чем на другом Dell Latitude E6420 (с точно такой же статистикой и даже в основном тем же установленным программным обеспечением), при использовании ресурсов одного ядра. Например: процесс выполняется на моей машине 20 минут, а на другой - 4 минуты.

Другие процессы не выполняются, за исключением системных процессов (загрузка процессора составляет почти 0%, за исключением запущенного процесса c++).

Численные ошибки или другие математические проблемы не подлежат сомнению, проверено, что алгоритм работает одинаково на обеих машинах, только медленнее (при одинаковом использовании процессора (= 13%).

Я хочу избежать переустановки Windows, поэтому вопрос в том, могут ли быть другие причины, такие как неисправное оборудование, неправильные настройки BIOS и т.д.? Все драйверы обновлены.

Любая идея, что может вызвать эту чрезвычайную разницу во времени выполнения?

5 ответов5

4

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

Другие вещи, которые нужно проверить, - это настройки BIOS (те же настройки и та же версия BIOS).

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

Наконец, следите за процессорами с помощью CPU-Z.

3

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

2

Вы запускаете программу одинаково на обеих машинах? Вы говорите, что он медленнее на вашей машине - запускаете ли вы его из DevStudio (т.е. Debug-> Start Without Debugging, или как там это называется)? Это может замедлить процесс, поскольку он запускается в несколько ином контексте, чем если бы он был запущен из командной строки / оболочки.

0

Причиной может быть то, что на более медленной машине активирована расширенная отладка (например, для отладки с повреждением кучи). Чтобы увидеть процессы, для которых включена эта отладка, откройте приложение "Глобальные флаги" (Пуск -> Все программы -> Инструменты отладки для Windows (x64)), перейдите на вкладку "Файл образа" и введите имя программы (ПРИМЕЧАНИЕ! используйте кнопку "Tab" для обновления) и убедитесь, что не установлены флаги Global Flags. Другой вариант - открыть командную строку и набрать «gflags /p», он покажет список всех программ с расширенной отладкой (вашей программы там не должно быть). Подробнее об этом https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/gflags-overview

0

Вы сказали, что программа использует только одно ядро, но это не обязательно ограничивает его до 1/N от вычислительной мощности. Он может быть многопоточным (тем более что это современная программа, написанная на VS2010), поэтому одна система может искусственно ограничивать ее.

Если программа, кажется, задерживается и использует меньше ресурсов ЦП, чем должно быть (особенно по сравнению с той же программой, запущенной в другой системе), проверьте соответствие ЦП:

  1. Запустите программу
    • Нажмите Pause в окне консоли, если это необходимо (т. Е. Если оно закрывается слишком быстро)
  2. Откройте диспетчер задач
  3. Щелкните правой кнопкой мыши процесс программы и выберите Set Affinities.
  4. Убедитесь, что выбраны все ядра / процессоры / потоки (т.е. нажмите )
  5. [OK]

Теперь программа должна использовать столько вычислительной мощности, сколько она может использовать (это зависит от характера процесса).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .