Если устранение ветвей является вашей целью, вы можете рассмотреть математику или некоторые непереносимые решения.
Рассмотрим следующий пример:
if (a < b)
y = C;
else
y = D;
Это может быть переписана в виде ...
x = -(a < b); /* x = -1 if a < b, x = 0 if a >= b */
x &= (C - D); /* x = C - D if a < b, x = 0 if a >= b */
x += D; /* x = C if a < b, x = D if a >= b */
Для того чтобы это сработало, это предполагает, что ваш процессор может оценить с < б без генерации инструкции перехода. Он также убивает читаемость.
Стоило ли? Иногда, но обычно нет. Если неверное предсказание ветвления или ветви вас дорого стоит, потому что оно не смещено в сторону одной ветви или другой, то может того стоить. Но, вероятно, нет. Как всегда, профиль.
Немного математики/арифметики может пройти долгий путь в устранении ветвей, если это ваша цель. Хотя было сказано много раз раньше, просто потому, что вы можете что-то сделать, это не значит, что вы должны.
Надеюсь, это поможет.
Бесстыдный плагин, но я позову ссылку на [этот вопрос] (http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted -array). У моего ответа есть до и после для устранения ветки в вопросе. – Mysticial