Чтобы дать вам пример разминки, я недавно протестировал некоторые вызовы ядра nvidia cuda:
Скорость выполнения, кажется, со временем увеличивается, вероятно, по нескольким причинам, таким как тот факт, что частота графического процессора переменная (для экономии энергии и перезарядки).
Иногда более медленный вызов оказывает еще большее влияние на следующий вызов, поэтому тест может вводить в заблуждение.
Если вам нужно чувствовать себя в безопасности в отношении этих точек Я советую вам:
- зарезервировать всю динамическую c память (подобно векторам) сначала
- сделать для l oop, чтобы выполнить ту же работу несколько раз перед измерение
- это подразумевает инициализацию входных данных (особенно случайных) только один раз перед l oop и их копирование каждый раз внутри l oop, чтобы гарантировать, что вы выполняете ту же работу
- если вы имеете дело со сложными объектами с кешем, я советую вам упаковать их в структуру и создать массив этой структуры (с той же техникой построения или клонирования), чтобы Убедитесь, что та же самая работа выполняется с теми же начальными данными в l oop
- , вы можете избежать выполнения for l oop и копирования данных, если вы чередуете два вызова очень часто и предполагаете, что влияние различия в поведении будут взаимно компенсировать друг друга, например, при моделировании непрерывных данных, таких как позиции
относительно инструментов измерения, я всегда сталкивался с проблемами с high_resolution_clock на разных машинах, такими как непоследовательность продолжительность. Напротив, windows QueryPerformanceCounter очень хорош.
Надеюсь, это поможет!
РЕДАКТИРОВАТЬ
Я забыл добавить это эффективно, как сказано в комментариях, Поведение оптимизации компилятора может раздражать. Самый простой способ, который я нашел, - это приращение переменной в зависимости от некоторых нетривиальных операций как от разминки, так и от измеренных данных, чтобы максимально ускорить последовательное вычисление.