Как замедлить работу компьютера (в целях тестирования)? [закрыто]

20

Как соглашается большинство людей, поощрять разработчиков создавать быстрый код, предоставляя им медленные машины, не очень хорошая идея . Но в этом вопросе есть смысл. Моя машина разработки быстра, и поэтому я время от времени пишу код, который может показаться бесполезным, но это становится очевидным только при запуске его на машинах других людей.

Каковы некоторые хорошие способы временно замедлить машину с турбонаддувом? Понятие «скорость» включает в себя несколько факторов, например:

  • Тактовая частота процессора.
  • Количество ядер процессора.
  • Объем памяти и кеш процессора.
  • Скорость различных автобусов.
  • Дисковый ввод / вывод.
  • GPU.
  • и т.п.
Joonas Pulakka
источник
34
Отжать "Турбо кнопку" ... нет, подожди.
LennyProgrammers
6
Вот корень вашей проблемы: «Беспорядочно неэффективно». изменить привычку кодирования
Darknight
16
@ Darknight: Нет, это не так. Вы должны сначала сделать это правильно, а затем сделать это быстро, если это необходимо . Чтобы знать, что оптимизировать, вы должны протестировать и выяснить, в чем проблема. Делать вещи как можно быстрее во-первых, это пустая трата вашего времени - и, скорее всего, трата делать это правильно .
Joonas Pulakka
1
Ну, я частично согласен. Однако, если у вас есть эффективная привычка кодирования для начала; тогда, когда вы «заставляете это работать правильно», вы можете тратить меньше времени на то, чтобы «сделать это быстрее».
Темная ночь
4
@Darknight: Я думаю, что @Joonas задает очень разумный вопрос. Идея, что достаточно просто «изменить привычку кодирования», нереальна. Вот пример: ( stackoverflow.com/questions/926266/... ) И идея , что вы можете просто время его на более медленной машине без IDE предполагает , что достаточно , чтобы найти ошибки производительности. Многие люди говорят о профилировании, но делать это (успешно) - это другой вопрос. Что действительно помогло бы мне (и другим, я думаю), - то, о чем просит Joonas.
Майк Данлавей

Ответы:

39

Запустите свои тесты на виртуальной машине с ограниченной памятью и только одним ядром.

Старые машины, которые люди до сих пор могут иметь, это в основном вещи эпохи Pentium 4. Это не так нереально - я использую один прямо сейчас. Производительность одного ядра на многих современных ПК обычно не намного лучше, а может быть и хуже. В любом случае, производительность ОЗУ для многих вещей важнее, чем производительность ЦП, и, ограничивая ее чуть более жестко, чем для старого 1 ГБ P4, вы компенсируете это немного.

В противном случае, если вы готовы потратить немного, купите нетбук. Запустите тесты на это.

Steve314
источник
1
Или старый ноутбук.
Проблема с виртуальными машинами заключается в том, что ни одна из них (AFAIK) не поддерживает порт IEEE 1394 (firewire). Некоторые из моих программ используют камеры, которые связаны с FireWire, так что ...
Joonas Pulakka
реальные позволяют назначить любое устройство PCI виртуальной
машине
3
Может быть работа для Xen - виртуальная машина не имеет O / S хоста, но сама по себе является верхним уровнем. Имеет большую историю Unix, но теперь может поддерживать проприетарные ОС. Но я никогда не использовал его и не знаю, насколько вы можете контролировать конкретную производительность и ресурсы виртуальных машин.
Steve314
1
+1 ВМ отлично настраивается и обеспечивает именно ту среду, которую вы ищете для тестирования. Я использую VMWare для этой цели.
Гари Роу
11

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

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

Майкл Шоу
источник
1
Нет, профилирование не уловит алгоритмическую неэффективность. Он покажет вам, где программа тратит свое время, если вам нужно ускорить его, но не если вам нужно ускорить его.
Дэвид Торнли
Я думаю, что я пропускаю различие здесь. Если вы имеете в виду, что профилирование не скажет вам, если вы неоптимальны, просто где вы тратите свои циклы процессора, то я согласен. Это требует опыта, чтобы сделать это суждение.
Майкл Шоу
4
@David Thornley & @Ptolemy: я думаю, что неэффективность алгоритма или горячие точки кода являются вторичными по отношению к основной проблеме: «Это слишком медленно или нет?» Это субъективно, но это также самый важный вопрос. Если на практике это не кажется медленным, то что, если ваш алгоритм неэффективен? Он делает то, что должен! Или, если программа чувствует себя слишком медленно, независимо от высокооптимальных алгоритмов, вам, возможно, придется полностью изменить подход (архитектура? Язык программирования? Что-то!). Наличие высокооптимальных алгоритмов не оправдывает медлительность программы :-)
Joonas Pulakka
1
Чтобы выявить неэффективность алгоритма, используйте наборы данных прогрессивного размера для тестирования.
Rwong
10

Все, что вы делаете для замедления вашей машины, вероятно, будет взломом.

Вот несколько предложений:

  • Использовать виртуальные машины
  • Профилируйте код на своей машине, ищите узкие места
  • Использовать старую машину для «тестирования производительности»
Джейсон
источник
@matt что это значит?
Джонни
1
@johnny: Я имею в виду, что я голосую, потому что Джейсон предложил профилировать приложение, которое, как мы надеемся, найдет источник проблемных мест производительности без необходимости переходить на более медленную систему.
Мэтт Эллен
4

Поймите, что это довольно старый вопрос, но для любого другого в этой ситуации; Вы можете попробовать CPUKiller. По сути, это небольшое приложение, которое вы можете настроить, чтобы потреблять разные% вашего процессора. http://www.cpukiller.com/

Дейв
источник