Чтобы иметь возможность профилировать время выполнения приложений, двоичные файлы которых будут фактически запускаться под симулятором (NS-3 / DCE). Я хотел использовать счетчики производительности linux, я ожидал, что счетчик инструкций для приложения, не имеющего источника недетерминизма, будет детерминированным. Судя по счетчикам производительности Linux, я не мог больше ошибаться, давайте рассмотрим простой пример:
$ (perf stat -c -- sleep 1 2>&1 && perf stat -c -- sleep 1 2>&1) |grep instructions
669218 instructions # 0,61 insns per cycle
682286 instructions # 0,58 insns per cycle
1) В чем источник этого недетерминизма? Происходит ли это из-за низкоуровневого прогнозирования ветвлений и других механизмов в ЦП.
2) Другой вопрос: есть ли способ узнать количество инструкций, переданных в ЦП (в отличие от количества инструкций в выходных данных примера), чтобы получить количество выполненного кода детерминированным способом?