Когда я проверяю номер цикла модуля, результаты каждого теста совершенно разные。 - PullRequest
0 голосов
/ 25 апреля 2019

Когда я проверяю номер цикла модуля, результаты каждого теста совершенно разные?

1781344-->First test

1264558-->Second test

1388058-->Third test

I use __rdtsc() для записи циклов , и использования встроенного AVX512。

Существуют ли какие-либо методы, позволяющие сделать номер цикла каждого теста в основном согласованным?

1 Ответ

3 голосов
/ 25 апреля 2019

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

(Обратите внимание, что RDTSC на современных процессорах учитывает эталонный циклов, а не фактических тактов ядра. Получить счетчик циклов ЦП? )

И вам придется прогреть кеширование + прогнозирование ветвлений + все и довести процессор до максимальной тактовой частоты перед первым временным тестом. Если вы проводите временные тесты отдельно, на самом деле полезно синхронизировать первое с «холодным» состоянием.

На практике люди не отключают прерывания, а просто игнорируют сильные выбросы в предположении, что прерывание или что-то произошло во время этого теста. В любом случае вы не можете отключить SMM или NMI.

...