> и> = на уровне сборки - PullRequest
       1

> и> = на уровне сборки

1 голос
/ 30 августа 2011

Я две time_t переменные говорят, start_sec и end_sec. Теперь я должен выполнить миллион операций, чтобы выяснить, попадает ли данный случайный случай time_t в этот диапазон.

if(given_sec >= start_sec && given_sec <= end_sec) {
    /* given_sec falls in the interval*/
}

или

start_sec -= -1; //keep it for million comparisons
end_sec += 1; //keep it for million comparisons

if(given_sec > start_sec && given_sec < end_sec) {
    /* given_sec falls in the interval*/
}

какой из них лучше?

Я думаю, на уровне сборки je loc; jle loc; jg loc; jge loc используются для прыжка. Мне было интересно, если jg loc; jl loc сохранить какие-либо циклы процессора.

Ответы [ 2 ]

6 голосов
/ 30 августа 2011

Нет, они ничего не сохраняют, и если бы они были, оптимизатор все равно помог бы вам.

0 голосов
/ 30 августа 2011

Прекрасный пример преждевременной оптимизации на микроуровне, беспокоясь о единичных циклах ЦП, который ничего не дает, но запутывает ваш код - start_sec и end_sec больше не содержат значений, предлагаемых именами.И вы даже оптимизировали его неправильно:

start_sec -= -1; //keep it for million comparisons

Это добавит единицу к start_sec.

Откуда берутся миллионы time_t значений?Входной файл?База данных?Из системных часов?Случайный генератор?Каждый из этих источников будет на несколько медленнее, чем сравнение.Таким образом, даже если <и> на несколько циклов ЦП быстрее, чем <= и> = (для заданного вами набора команд на заданном конкретном ЦП), и профилирование показывает, что этот цикл на самом деле является вашим узким местом, эта «оптимизация» вряд ли решитЭта проблема.Специально для нескольких миллионов сравнений на современных ГГц ЦП с миллиардами циклов в секунду.

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