How to slow down a program and why it can be useful
-
Зачем замедлять программу?
Искать race-conditions, «виртуально» оценить выгоду оптимизации (как в Coz) и проверять точность профилировщиков. Для этого меняют расписание потоков или вставляют задержки. -
Как замедляют сейчас?
Грубо:Thread.sleep
, остановка потоков, вставка лишнего байт-кода. Это снижает точность. -
Наша идея
Вставлять задержки внутри basic block на уровне x86. Нужны инструкции, которые:
– надёжно тратят циклы;
– не искажают семантику;
– не оптимизируются CPU за счёт out-of-order. -
Проблема
Современные процессоры выполняют независимыеmov
параллельно, поэтому просто добавить «тяжёлые» команды недостаточно — нужно учитывать зависимости и микроархитектуру.