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

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

1781344-->First test

1264558-->Second test

1388058-->Third test

Я use __rdtsc() для записи циклов и использую встроенный AVX512。

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


person yueluojieying    schedule 25.04.2019    source источник
comment
Покажи свой код.   -  person BeeOnRope    schedule 25.04.2019


Ответы (1)


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

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

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

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

person Peter Cordes    schedule 25.04.2019
comment
SMI и NMI нельзя отключить вручную, но в обработчике SMI все прерывания, включая SMI и NMI, блокируются автоматически. В обработчике NMI прерывания NMI блокируются автоматически, но я не помню, блокируются ли и SMI. Тем не менее, набор микросхем может позволить программному обеспечению вручную блокировать NMI и/или SMI с помощью инструкции OUT, но я не могу сейчас придумать пример. - person Hadi Brais; 25.04.2019