Як уповільнити роботу комп'ютера (для тестування)? [зачинено]


20

Як погоджується більшість людей, спонукати розробників до швидкого кодування, надаючи їм повільні машини, - це не дуже гарна ідея . Але в цьому питанні є сенс. Моя машина розробки швидка, і тому я час від часу пишу код, який тривожно неефективний, але це стає очевидним лише під час роботи на інших машинах.

Які є хороші способи тимчасового уповільнення роботи приладу з турбонаддувом? Поняття "швидкість" включає кілька факторів, наприклад:

  • Тактова частота процесора.
  • Кількість ядер CPU
  • Об'єм пам'яті та кеш-пам'яті процесора.
  • Швидкість різних автобусів.
  • Дисковий ввід / вивід.
  • GPU.
  • тощо.

34
Видаліть "Turbo кнопку" ... ні, зачекайте.
LennyProgrammers

6
Ось корінь вашої проблеми: "Тривожно неефективний". змінити звичку кодування
Darknight

16
@Darknight: Ні, це не все. Ви повинні спочатку зробити це правильно, а потім зробити це швидко, якщо потрібно . Щоб знати, що оптимізувати, вам доведеться протестувати і з’ясувати, в чому полягає проблема. Робити речі , як швидко , наскільки це можливо , в першу чергу це марна трата вашого часу - і , ймовірно , трата робити це правильно .
Joonas Pulakaka

1
Ну я частково згоден. Однак якщо у вас є звична звичка кодування, для початку; то, як "примушуючи це працювати правильно", ви можете витрачати менше часу на "швидше".
Темна ніч

4
@Darknight: Я думаю, що @Joonas задає дуже розумне запитання. Ідея, що достатньо лише "змінити звичку кодування", не є реалістичною. Ось приклад: ( stackoverflow.com/questions/926266/… ) І, ідея про те, що ви можете просто проводити його на повільній машині без IDE, припускає, що цього достатньо, щоб знайти помилки в продуктивності. Багато людей говорять про профілювання, але робити це (успішно) - інша справа. Що б мені справді допомогло (та іншим, на мою думку), те, про що Йоонас просить.
Майк Данлаве

Відповіді:


39

Виконайте свої тести у віртуальній машині з обмеженою пам’яттю та лише одним ядром.

Старі машини, які люди все ще можуть мати, - це в основному речі епохи Pentium 4. Це не так нереально - я зараз використовую один. Продуктивність однієї основної системи на багатьох поточних ПК зазвичай не настільки краща, а може бути і гірша. Продуктивність оперативної пам’яті важливіша, ніж продуктивність процесора для багатьох речей, і, обмежившись трохи жорсткіше, ніж для старого 1 Гб P4, ви трохи компенсуєте це.

Якщо цього не вдасться витратити, придбайте нетбук. Запустіть тести на цьому.


1
Або літній ноутбук.

Проблема віртуальних машин полягає в тому, що жодна з них (AFAIK) не підтримує порт IEEE 1394 (firewire). Деяке моє програмне забезпечення використовує камери, підключені до брандмауера, тому ...
Joonas Pulakka

справжні дозволяють призначити будь-який пристрій PCI для VM
Хав'є

3
Можливо, це робота для Xen - віртуальна машина не має хост-O / S, але є самим верхнім шаром. Має велику історію Unix, але тепер може підтримувати власні ОС. Але я ніколи не використовував це, і не знаю, який контроль ви можете мати над конкретною роботою та ресурсами віртуальних машин.
Steve314

1
+1 VM дуже настроюється і забезпечує саме те середовище, яке вам потрібно для тестування. Я використовую VMWare сам для цієї мети.
Гері Роу

11

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

Якщо ви пишете потоковий код, тестування на декількох машинах з різною швидкістю процесора допоможе виділити конкретні помилки, пов'язані з тимчасовим регулюванням, у вашій обробці потоків, але агресивне тестування логіки потоку обов'язково.


1
Ні, профілювання не сприймає алгоритмічну неефективність. Він покаже вам, де програма витрачає свій час, якщо вам потрібно пришвидшити її, але не, якщо вам потрібно пришвидшити її.
Девід Торнлі

Я думаю, що тут я пропускаю різницю. Якщо ви маєте на увазі, що профілювання не скаже вам, якщо ви перебуваєте на оптимальному рівні, саме там, де ви проводите свої цикли процесора, тоді я згоден. Для того, щоб зробити це судження, потрібен досвід.
Майкл Шоу

4
@David Thornley & @Ptolemy: Я думаю, що неефективність алгоритму чи гарячі точки коду є вторинними для основної проблеми: "Це занадто повільно чи ні?" Це суб'єктивно, але це також найважливіше питання. Якщо на практиці це не повільно, то що робити, якщо ваш алгоритм неефективний? Це робить те, що потрібно робити! Або якщо програма відчуває себе занадто повільно, незалежно від надзвичайно оптимальних алгоритмів, можливо, вам доведеться взагалі змінити підхід (архітектура? Мова програмування? Щось!). Наявність високооптимальних алгоритмів не є приводом для повільності програми :-)
Joonas Pulakka

1
Щоб виявити неефективність алгоритму, використовуйте для тестування набори даних прогресивного розміру.
rwong

10

Все, що ви зробите для уповільнення роботи машини, ймовірно, буде злом.

Ось пара пропозицій:

  • Використовуйте віртуальні машини
  • Профілюйте код на своїй машині, шукаючи вузькі місця
  • Використовуйте стару машину для "перевірки працездатності"

@matt, що це означає?
johnny

1
@johnny: Я маю на увазі, що я голосую за те, що Джейсон запропонував профайлювати додаток, яке, сподіваємось, знайде джерело шийок продуктивності без необхідності переходити до повільнішої системи.
Метт Еллен


4

Зрозумійте це досить старе питання, але для всіх, хто в цій ситуації; ви можете спробувати CPUKiller. Це в основному невелике додаток, яке можна налаштувати на споживання різних% процесора. http://www.cpukiller.com/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.