Выделение всей мощности процессора на задачу - PullRequest
3 голосов
/ 22 мая 2010

Допустим, у нас есть очень ресурсоемкая задача, которую можно эффективно распараллелить.Как мы можем выделить все или почти всю доступную мощность процессора для выполнения этой задачи?

Задача может быть разнообразной, и итеративная генерация чисел Фибоначчи, которая сохраняет записанные числа, была бы только одним примером.

Ответы [ 4 ]

3 голосов
/ 23 мая 2010

Возможно, вы предоставили слишком мало информации о вашей целевой среде.

Обычно при использовании ОСРВ вы можете либо отключить прерывания, чтобы не запускались ни планировщик, ни подпрограммы обработки прерываний, либо вы можете применить блокировку задачи, чтобы планировщик не работал, но ISR продолжали работать. Вы можете добиться того же эффекта, что и блокировка задачи, повысив приоритет задачи до наивысшего приоритета.

Если вы не используете и ОСРВ (или не ОС), у вас обычно не так много контроля над планированием, но если ваш поток работает без уступок (т.е. вызывает функцию, которая заставляет поток ждать), и другие потоки и процессам не нужно много циклов, ваш поток получит почти весь процессор. Например, занятый цикл в Windows в большинстве случаев будет отображаться как 100% использование одного ядра в мониторе задач, если вы не запускаете другие задачи, интенсивно использующие процессор. Если ваш процессор имеет несколько ядер, вам придется как-то распараллелить задачу, чтобы он использовал все из них.

Вызовы ввода / вывода обычно вызывают блокировку потоков, поэтому ваше требование «сохранить» результаты может вызвать проблему. Решение состоит в том, чтобы буферизовать результаты в памяти (напрямую или в виде очереди или кэша записи) и отложить вывод до завершения всех вычислений.

0 голосов
/ 23 мая 2010

Удалите все ненужные процессы.

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

Установите высокий приоритет процесса, чтобы он стал больше.

0 голосов
/ 23 мая 2010

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

Рассмотрим эти два примера :

1 / Процессор выполняет только некоторые задания с низким приоритетом , скажем, в виде связи по USB, CAN, SPI или что-то еще, что вас не волнует во время вычислений (задача, интенсивно использующая процесс) Например, потому что уровень коммуникаций ожидает вывода этой задачи. Затем вы можете назначить (статически или динамически, в зависимости от используемой операционной системы) эту задачу с очень высоким приоритетом . Вы также можете остановить другие задачи, используя любую доступную вам синхронизацию (сообщения, пауза задачи ...)

2 / Процессор выполняет высокоприоритетные задания , даже малые (сторожевой таймер, регулирование, измерения), поэтому вы можете назначить своей задаче более низкий приоритет , поскольку она будет Остаточная мощность микропроцессора, и этого может быть достаточно!

Так что, возможно, у вас возникнут вопросы о том, КАК назначить приоритет задаче ... но все зависит от вашей архитектуры прошивки и выбора, который вы сделали между операционной системой или большим "основным" вручную!

Дайте нам больше подробностей, если вам нужны точные ответы.

0 голосов
/ 22 мая 2010

Операционная система обрабатывает выделение ЦП. Большую часть времени, если вашей программе потребуется больше энергии, она получит ее, но процессы с более высоким приоритетом («приятно» в Linux) будут выше в очереди для запросов времени процессора.

...