Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Чисто из любопытства, возможно-ли на C# написать "стресс-тест" процессора?

Eternally Against Искусственный Интеллект (239064), закрыт 2 года назад
(я мало в этом понимаю)
Возможно-ли сделать на C# программу, которая полностью нагрузила-бы процессор? Как в AIDA64, например, независимо от процессора - нагрузка по всем потокам ровно 100%.
Если есть примеры, было-бы интересно взглянуть =)
Спасибо.
Лучший ответ
Андрей Осинцев Просветленный (35327) 3 года назад
Почему бы и нет? Ведь как-то пишут стресс-тесты. Почему бы и не на С#?
Достаточно создать сложную задачу для процессора - обрабатывать изображения, упаковывать/переупаковывать файлы, решать уравнения, и вполне можно загрузить.
Остальные ответы
Коннор, андроид из КиберЛайф Гуру (2751) 3 года назад
Ровно на 100% в чем? Формально в диспетчере задач? Можно. Фактически все блоки процессора загрузить невозможно.
Eternally AgainstИскусственный Интеллект (239064) 3 года назад
Это понятно, речь именно про то, что возможно физически - т. е. то, что отображает диспетчер или иная программа для мониторинга =)
Вопрос появился потому, что создавая длительный цикл с простой задачей (например, увеличивать переменную на 1 или иные простые операции с числами), то при запуске этого цикла он занимал время, но поток моего процессора был загружен едва-ли на несколько десятков процентов. Видимо, качественно такая операция не подходит для цели "загрузить весь поток".
Андрей Осинцев Просветленный (35327) Eternally Against, цикл, если в нем ничего не происходит, оптимизируется на стадии компилирования компилятором, и вообще по сути не выполняется. Необходимо, чтобы в этом цикле были какие-то вычисления, которые грузили процессор, и кроме того, после выхода из цикла полученные значения еще и как-то использовались. В общем, не дать шансу компилятору исключить из готового кода программы ненужные операции.
Jurijus Zaksas Искусственный Интеллект (424917) 3 года назад
>Возможно-ли сделать на C# программу, которая полностью нагрузила-бы процессор?
Можно. Но "стресс-тестом" это назвать сложно. Дело в том, что команды процессора неравнозначны по энергопотреблению, тепловыделению и т. д.. А в C# ты не можешь контролировать, какие именно команды процессор будет исполнять.

> Видимо, качественно такая операция не подходит для цели "загрузить весь поток".
Как раз поток она грузит вплне хорошо. Но у тебя в компьютере несколько ядер. Поток выполняется на одном ядре. Хочешь загрузить все ядра - запускай несколько потоков.
Eternally AgainstИскусственный Интеллект (239064) 3 года назад
График загрузки по потокам получаю программой MSI Afterburner. Запуская какие-то стресс-тесты, этот график выглядит абсолютно сплошной прямой линией на 100%. Ожидал, что и тут 1 поток должен был-бы быть ровно 100%, но он прыгает ~20-50%, вот это и интересно =)
Пока писал, пришли догадки, что это ОС чередует между двумя потоками, видно что серый и розовый графики в сумме дают около 100% и при запуске именно они оба загрузились.
Андрей Осинцев Просветленный (35327) Eternally Against, значение переменной a после цикла никак не используется. По сути, весь цикл можно выбросить и программа от этого хуже работать не будет. Что и делает компилятор.
Максим Искусственный Интеллект (198325) 3 года назад
пожалуйста: while(true) {}
Для нескольких ядер запускаешь несколько потоков.
Eternally AgainstИскусственный Интеллект (239064) 3 года назад
С этого и появился такой вопрос...
Максим Искусственный Интеллект (198325) Eternally Against, всё правильно. У тебя загружено одно ядро. 25% из 100%. Ещё 3 потока и будет 100%.
Play Free Профи (875) 3 года назад
можно спавнишь несколько webbrowser и загружаешь тяжёлый сайт, заспавнишь 500 штук любой проц загрузит наверное
Похожие вопросы