Как уменьшить использование процессора программой? - PullRequest
6 голосов
/ 07 марта 2009

Я написал многопоточную программу, которая выполняет некоторые тяжелые вычисления с большим количеством операций с плавающей запятой. В частности, это программа, которая сравнивает последовательности анимации кадр за кадром. То есть он сравнивает данные кадра из анимации A со всеми кадрами в анимации B для всех кадров в анимации A. Я выполняю эту интенсивную операцию параллельно для различных анимаций, поэтому программа может работать с парой AB, парой BC и парой CA в параллельно. Программа использует QtConcurrent и функцию «map», которая отображает контейнер с движениями на функцию. QtConcurrent управляет пулом потоков для меня, я работаю на процессоре Intel Quad Core, поэтому он порождает 4 потока.

Теперь проблема в том, что мой процесс разрушает мой процессор. Использование является постоянным на 100%, и я на самом деле получаю «Синий экран смерти», если запускаю свою программу с достаточно большим набором движений (ошибка страницы в невыгружаемой области). Я подозреваю, что это потому, что мой компьютер разогнан. Однако может ли это быть из-за того, как я кодировал свою программу? Некоторые очень интенсивные тестовые инструменты, которые я использовал для проверки стабильности своей машины, никогда не ломали мой компьютер. Есть ли способ контролировать, как моя программа использует мой процессор для снижения нагрузки? Или, может быть, я неправильно понимаю свою проблему?

Ответы [ 13 ]

0 голосов
/ 07 марта 2009

Из-за отсутствия кода ошибки BSOD (полезного для поиска) вам немного сложнее помочь с этим.

Вы можете попытаться физически переустановить свою память ((выньте ее и вставьте). Я и некоторые другие мои знакомые работали на нескольких машинах, где это было необходимо. Например, однажды я пытался обновить OS X машина, и она продолжала падать ... наконец, я вынул память и бросил ее обратно, и все было хорошо.

0 голосов
/ 07 марта 2009

Если на платформе Windows, после некоторой работы включите один вызов функции, чтобы сообщить процессору, что вы хотите сделать процессор для других процессов. Сделайте вызов функции сна следующим образом:

Slepp (0);

0 голосов
/ 07 марта 2009

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

Что ж, если вы создаете несколько потоков, каждый из которых выполняет тяжелые операции с плавающей запятой, то определенно ваша загрузка ЦП достигнет 100%.

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

...