У меня есть программа, написанная на C++, которая запускает несколько циклов для циклов в секунду без использования чего-либо, что заставит его ждать по какой-либо причине. Он последовательно использует 2-10% CPU. Есть ли способ заставить его использовать больше процессора и делать большее количество вычислений, не делая программу более сложной? Кроме того, я компилирую с C :: B на компьютере под управлением Windows. По сути, я спрашиваю, есть ли способ сделать мою программу быстрее за счет увеличения использования процессора, и если да, то каким образом.Увеличение использования CPU на C++
ответ
Предполагая, что ваше приложение имеет мощность (PROCESS_SET_INFORMATION
), вы можете использовать SetPriorityClass
, чтобы поднять ваш приортий (к обычному ущербу от всех других процессов, конечно).
Вы можете пойти ABOVE_NORMAL_PRIORITY_CLASS
(попробуйте этот первый), HIGH_PRIORITY_CLASS
(будьте очень осторожны с этим) или REALTIME_PRIORITY_CLASS
(я бы настоятельно рекомендуем вам, вероятно, не должны дать этому выстрел).
Если вы попробуете более высокие приоритеты, и он все еще работает очень низко, то это, вероятно, потому, что вы не привязаны к ЦП (например, если вы записываете данные в выходной файл). Если это так, вам, вероятно, придется найти способ: сделать сам процессор.
Просто имейте в виду, что это может не понадобиться (или даже желательно). Если вы работаете с более высоким приоритетом, чем другие потоки, и вы по-прежнему не всасываете много CPU, это, вероятно, потому, что Windows (скорее всего, по праву) решила, что вам это не нужно.
Создание потока &, придающего более высокий приоритет потоку, может быть одним из способов.
Использует 10% при высоком приоритете. – TimeCoder
Если вы используете C++, рассмотрите возможность использования Intel Threading Building Block. Вы можете найти несколько примеров: here.
Это действительно не право программы или ответственность требовать дополнительных ресурсов от системы. Это работа ОС, как планировщик ресурсов.
Если необходимо использовать больше процессорного времени, чем подходит ОС, вы должны запросить его у операционной системы, используя API-интерфейс, зависящий от платформы. В этом случае это похоже на что-то вроде строк SetPriorityClass
или SetThreadPriority
.
Это зависит от того, почему он использует только 10% процессора. Если это потому, что вы используете многопроцессорную машину, и ваша программа использует только один процессор, то нет, вам придется вводить параллелизм в свой код, чтобы использовать эту дополнительную мощность.
Если это ограничено чем-то другим (например, копирование данных на диск и с диска), вам не нужно сосредотачиваться на ЦП, вам нужно сосредоточиться на том, что узкое место. Скорее всего, ограничитель будет считывать с диска, который вы можете улучшить, используя лучшие механизмы кэширования.
Некоторые профилометры дают очень хорошие указания на то, где узкие места в вашем коде. Например, CodeAnalyst (только для чипов AMD) имеет инструкции для каждого цикла. Я уверен, что профилировщики Intel похожи.
Как Билли О'Нил говорит, что если ваш запуск на 8-ядерном процессоре, застрявший на 10% от процессора, будет прав. Если это ваша проблема, то Windows msvC++ имеет параллельный режим (parallel patterns library) для стандартных алгоритмов. Это может дать бесплатную параллелизацию, если вы написали свои циклы на C++-пути (ваша ответственность за то, чтобы ваши петли были потокобезопасными). Я не использовал версию msvc, но gnu::__parallel_for_each
и т. Д. Работают.
- 1. Получение использования CPU процесса в C#
- 2. Увеличение использования процессора в AIX
- 3. OperatingSystemMXBean методы использования CPU
- 4. Multiprocessing - Предел использования CPU
- 5. Увеличение использования памяти в MATLAB
- 6. О функции использования CPU
- 7. мониторинг использования java cpu
- 8. Увеличение на холсте - C#
- 9. Увеличение использования ЦП
- 10. Чтение CPU на Linux C++
- 11. SoftLayer несоответствие использования API CPU
- 12. CPU против использования памяти (теория)
- 13. Увеличение переменной на единицу без использования функции
- 14. C++ High CPU Use
- 15. Увеличение использования ЦП и сохранение его на определенном уровне с помощью кода C
- 16. Увеличение использования памяти в sqlite3?
- 17. C# График CPU с завихрением
- 18. CPU на Redhat 6
- 19. CPU В настоящее время используется на C++
- 20. Как сделать контроль использования CPU в WPF
- 21. Письменный тест JUnit случае программы использования CPU
- 22. Анимация Javascript, вызывающая высокий уровень использования cpu
- 23. MongoDB Service на 100% CPU
- 24. #pragma OMP критического VS CPU использования 100%
- 25. Мониторинг использования CPU Cassandra с JMX/MBeans
- 26. Ошибка использования CPU VBA (запрос данных Bloomberg)
- 27. C# regex high cpu use
- 28. Увеличение использования мьютекса для многопроцессорных процессов
- 29. CPU высокого использования в USleep на Cent OS 6.3
- 30. Получить статистику использования cpu, ram и сети на Android
Добавить пустой цикл? – Flimzy
Почему я читаю * вилку бомбы * .. – karlphillip
@karlphillip, почему бы потреблять процессор, если бы я делал вилку? Я не, но если бы я был, я бы хотел, чтобы мои процессы потребляли меньше энергии, а не больше. Я спрашиваю, потому что моя программа должна генерировать числа. Кроме того, для чего я получил -1? Моя особенность касается конкретной цели, и она весьма полезна для повышения качества. Я ничего не нашел, объясняя решение. – TimeCoder