Как решить BadMessageException: 400 Невозможно разобрать проблему с содержимым формы при переносе java7 в java8 в весеннем приложении?

Этот ответ предполагает, что вы уже поняли и рассмотрели прекрасные моменты, связанные с неопределенным поведением, который делает в его ответ . Он также указывает на трюки, которые компилятор может воспроизвести на вашем коде. Вы должны предпринять шаги, чтобы убедиться, что компилятор не распознает весь цикл как бесполезный. Например, изменение объявления итератора на volatile uint64_t i; предотвратит удаление цикла, а volatile int A; гарантирует, что второй цикл действительно будет работать больше, чем первый. Но даже если вы все это сделаете, вы все равно можете обнаружить, что:

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

clock(), возможно, вызвала ошибку icache после прочтения таймера и перед возвратом. Это вызовет некоторое дополнительное время в первом измеренном интервале. (Для более поздних вызовов код уже находится в кеше). Однако этот эффект будет крошечным, конечно, слишком малым для измерения clock(), даже если это была ошибка страницы вплоть до диска. Случайные переключатели контекста могут добавить к временному интервалу.

Что еще более важно, у вас есть процессор i5, который имеет динамический такт. Когда ваша программа начнет выполнение, тактовая частота, скорее всего, будет низкой, потому что процессор простаивает. Просто запуск программы заставляет процессор больше не работать, поэтому после небольшой задержки тактовая частота будет увеличиваться. Соотношение между частотой вращения на холостом ходу и частотой TurboBoosted CPU может быть значительным. (На моем Ultrawell's Haswell i5-4200U прежний множитель равен 8, а второй - 26, что делает код запуска менее 30% так же быстро, как и более поздний код! «Калиброванные» петли для реализации задержек - ужасная идея на современных компьютерах! )

Включая фазу прогрева (повторение теста и отбрасывание первого результата) для более точного времени не только для управляемых фреймворков с JIT-компиляторами!

0
задан Anand Nandeshwar 17 January 2019 в 09:05
поделиться