Выделите больше циклов процессора для моей программы - PullRequest
4 голосов
/ 01 февраля 2010

Я некоторое время работал над win32, c, c ++. Я пишу код на визуальной студии. Большую часть времени я вижу, что процесс простоя системы использует больше ресурсов процессора. Есть ли способ выделить больше циклов процессора для моей программы, чтобы запустить ее быстрее? Я понимаю, что могут быть ограничения от ввода / вывода, в этих случаях этот вопрос не имеет никакого смысла. ИЛИ ЖЕ я неправильно понял номера менеджера задач? Я в замешательстве, пожалуйста, помогите мне. И я хочу сделать что-то в самой программе, кстати, я буду счастлив, если ответы будут касаться окон.

Заранее спасибо ~ Кельвин

Ответы [ 5 ]

5 голосов
/ 01 февраля 2010

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

Однако, если у вас многоядерный процессор и однопоточная программа, загрузка процессора вашим процессом, отображаемая в диспетчере задач, всегда будет ограничена значением 100 / Ncores.

Например, если у вас есть четырехъядерный компьютер, ваш процесс будет на 25% (с использованием одного ядра), а процесс простоя на уровне около 75%. Вы можете только увеличить мощность ЦП, разделив задачи на куски, которые могут обрабатываться отдельными потоками, которые затем будут запускаться на незанятых ядрах.

2 голосов
/ 01 февраля 2010

Простой процесс «запускается» только тогда, когда другой процесс не нужен.Если вы хотите использовать больше циклов ЦП, используйте их.

1 голос
/ 01 февраля 2010

Использовать темы для:

  • абстрагируйте все ожидания ввода / вывода.
  • назначить работу всем ядрам.

также удалите все состояния ожидания из основного потока.

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

Если ваш ЦП является многоядерным, и ваша проблема паралеллизуема, создайте столько потоков, сколько у вас ядер, изучите функции «установки сродства», чтобы распределить их между ядрами и при этом сохранить отдельный поток для всех операций ввода-вывода.

Также обратите внимание, чтобы не ждать в вашем основном потоке - usleep (1) не отправляет вас в фоновый режим в течение 1 микросекунды, но для "не менее ...", и это может означать что-нибудь между 1 мс и 100 мс, но вряд ли все меньше этого и никогда не приближается к микросекунде.

1 голос
/ 01 февраля 2010

В многозадачной / многопоточной ОС время процессора распределяется между потоками.
Если вы хотите, чтобы конкретный поток получал больший временной интервал, вы можете установить его приоритет с помощью функции SetThreadPriority ,хотя не стоит этого делать.
Только специальное программное обеспечение (должно) связываться с этими настройками.

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

1 голос
/ 01 февраля 2010

Если ваша программа работает вхолостую, она ничего не делает, то есть нет ничего, что можно было бы сделать быстрее. Так что процессор, вероятно, не является узким местом в вашем случае. Возможно, вы ждете данных, поступающих с диска или из сети?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...