Максимизировать использование процессора - PullRequest
10 голосов
/ 28 октября 2009

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

Я работаю в Windows XP с Visual C ++ 2005.

Ответы [ 4 ]

28 голосов
/ 28 октября 2009

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

Если в вашем приложении только один поток выполнения, он может быть запущен только на одном ядре ЦП. Решение этой проблемы состоит в том, чтобы разделить работу пополам и заставить одно ядро ​​ЦП запускать одну половину, а другое ядро ​​- другую. Конечно, вы можете обобщить это для работы с 4 ядрами или более ....

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

Для ознакомления с многопоточностью ознакомьтесь со следующими вопросами:

9 голосов
/ 28 октября 2009

Возможно, у вас двухъядерный процессор, и ваша программа, вероятно, однопоточная.

5 голосов
/ 28 октября 2009

Приоритет практически не зависит от того, сколько ЦП использует ваш процесс. Это потому, что если есть что-то доступное для запуска, ОС запланирует его запуск, даже если он имеет низкий приоритет. Приоритет вступает в силу только тогда, когда есть два или более запускаемых потока на выбор. (Примечание: это крайнее упрощение.)

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

0 голосов
/ 28 октября 2009

Реальное время не обязательно съест циклы процессора. Попробуйте порождать нить, две или три, которые работают в узких петлях, которые считаются, самое основное. Если вы хотите (ab) использовать память, вы также можете выделить и освободить некоторые произвольные объекты в ваших циклах.

...