LINUX.ORG.RU

А кто нить встречал ситуации когда использование __builtin_expect() (или likely()/unlikely()) вообще на чтото влияют?

 , likely, unlikely


0

2

Я пытался использовать с последними gcc для AMD64 и для ARM и это никак не повлияло на генерируемый код. Я дизасемблировал обьектники.

★★★★★

У x86-64 есть вроде как префиксы к опкодам branch taken/branch not taken. Причём на AMD не факт, что они вообще работают. Кроме того такие оптимизации могут заставить прыгать на менее вероятную ветку, а на более вероятной код будет выполняться без прыжков.

Как ты вообще проверял совпадает или нет? Глазами по дисассемблу? Смотри и опкоды комманд и адреса всякие.

И вообще, нафиг тебе дисассембл, ты скорость работы замерял?

anonymous
()

IIRC, на x86 branch hint только на микроархитектуре Netburst на что-то влияет.

mv ★★★★★
()
Ответ на: комментарий от anonymous

После того как измерения скорости не показали какой либо разницы я дифом сравнил диз-асмы и был удивлен ихней идентичностью.

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

Ну попробуй теперь с march=prescott. Хотя для arm это тоже должно работать, может быть это глюк компилятора. Ну потому что ему лучше известно, какие оптимизации применять. Например, PGO может показывать очень значительные результаты. А может и не показывать.

wakuwaku ★★★★
()
Последнее исправление: wakuwaku (всего исправлений: 3)

Использую и в glib, и в ядре. Благо и там, и там есть аккуратные стандартные макросы, которые еще код позволяют часто сделать понятнее. Так что где они действительно нужны, имхо лучше ставить. Даже если сегодня не работают в полную силу, завтра на другом gcc/процессоре/с другими флагами сборки могут ускорить код.

Tayler ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.