169 похожих чатов

@S54820 подскажи плиз, вот если у нас есть 2 функции

и в первом случае с равной вероятностью при помощи ветвления выбирается вызов одной из них, во втором же случае у нас есть массив с указателями на функции, откуда вызываются функции по оффсету в виде выражения с такой же вероятностью, что из этого должно работать быстрее на x86/x64?

9 ответов

7 просмотров

Не знаю. Я бы сделал явные вызовы без jump table.

А меня почему не спросил😕

КТ315
А меня почему не спросил😕

Так а ты что думаешь по этому поводу?

BlackBloodyRabbit Rabbit
Так а ты что думаешь по этому поводу?

Ниже написал. Есть свои нюансы. s54820 отказался от jump table, потому что, вроде как, на новых процессорах это внутри неплохо оптимизируется. Дело в том, что при использовании jump table, от процессора не требуется нагрузка на предсказатель ветвлений, а лишь вычислить адрес по формуле (ALU/AGU), однако при больших размерах, это всё требует большего размера программы, и соотв. требует некоторого нахождения в кэше, чтобы быстро обратиться к каждой ячейке массива указателей. В случае с ветвлениями, размер программы уменьшается, но идёт нагрузка на предсказатель ветвлений. Соотв., что я думаю.. Если, допустим, условий 10+ — естественно, гуманно использовать таблицу с указателями, если это возможно. Ну вы сами представьте себе такой код с ветвлениями, это же ужас для процессора будет. Если же условий 2-3, тогда зачем обращаться к памяти, вычислять адрес и т.д и т.п., если процессор вполне неплохо и сам может это оптимизировать (использовать ветвление).

КТ315
Ниже написал. Есть свои нюансы. s54820 отказался ...

Ну, а вообще, ответ s54820 не изменяется. Т.к функций в условии всего 2, тогда и использовать jump table не надо. Я просто хотел подробнее расписать свою точку))

КТ315
Ниже написал. Есть свои нюансы. s54820 отказался ...

Так а что же всё-таки дольше - пенальти от неудачного предсказания или же ожидание вычисления линейного адреса вызываемой функции (при условии, что она есть в кэше), имхо тут необходимо ещё рассматривать вероятности переходов.

BlackBloodyRabbit Rabbit
Так а что же всё-таки дольше - пенальти от неудачн...

Если функции всего 2, удачнее использовать обычное ветвление. На новых процессорах, всякие "пенальти" уже не так критичны будут, если они вообще ещё могут быть. Рассматриваются идеальные варианты, а не кривой код. На старых процессорах, уже всё меняется.

BlackBloodyRabbit Rabbit
Так а что же всё-таки дольше - пенальти от неудачн...

вычисление будет занимать не больше команды lea, а вот промах предсказателя может много

Mixail Frolov
вычисление будет занимать не больше команды lea, а...

Так там не только вычисление, там ж зависимость загрузки инструкций функции от вычисления адреса, т.е. в конвейер не могут быть загружены инструкции пока не будет получен адрес (а это происходит примерно в середине конвейера), т.е. мы тоже получаем пенальти, собственно как и при колбек вызове. Я вот и хотел узнать соотношение пенальти ошибки предсказания и пенальти вычисления адреса.

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann ٩( 💢•̀ з•́)و Chapmann
19
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Карта сайта