Вопросы с тегом 'branch-prediction'

В компьютерной архитектуре предсказатель ветвления представляет собой цифровую схему, которая пытается угадать, к какой ветке (например, структура if-then-else) будет идти, прежде чем это будет известно наверняка. Целью прогнозирования ветвей является улучшение потока в конвейере команд. Отраслевые предиктора играют решающую роль в достижении высокой эффективности во многих современных конвейерных микропроцессорных архитектурах, таких как x86.
3 отв.

Непрерывная реализация f (x): = if x == 0, затем 0 else (x * log (x))

У меня есть эта функция C: double f(int x) { if (x <= 0) return 0.0; else return x * log(x); } который я вызываю в узком цикле, и хотел бы избавиться от ветки, чтобы узнать, улучшает ли она производительность. Я не мог...
15 нояб. '12 в 20:54
1 отв.

Небольшие ветки в современных процессорах

Как современные процессоры, такие как Kaby Lake, справляются с небольшими ветвями? (в приведенном ниже коде это переход к метке LBB1_67). Из того, что я знаю, ветвь не будет вредной, потому что переход уступает 16-байтовому размеру блока, который яв...
03 марта '19 в 1:58
0 отв.

Логические операторы и ошибка прогнозирования ветвления

Рассмотрим следующие циклы: while((expressionA) & (expressionB)){ // do something }   while((expressionA) && (expressionB)){ // do something } где expressionA и expressionB - выражения типа bool, а expressionB не имеет побо...
03 дек. '15 в 11:00
3 отв.

Избегайте срыва трубопровода путем вычисления условного раннего

Когда мы говорим о производительности ifs, мы обычно говорим о том, как ошибочные прогнозы могут остановить трубопровод. Рекомендуемые решения, которые я вижу: Доверяйте предиктору ветки для условий, которые обычно имеют один результат; или Избега...
20 апр. '18 в 3:26
1 отв.

Как продемонстрировать влияние ограничений кэша команд

Моя идея заключалась в том, чтобы дать элегантный пример кода, который продемонстрировал бы влияние ограничений кэша команд. Я написал следующий фрагмент кода, который создает большое количество идентичных функций, используя метапрограммирование шабл...
04 сент. '13 в 4:56
3 отв.

Почему Intel изменила механизм прогнозирования статических ветвей на протяжении этих лет?

Отсюда я знаю, что Intel внедряет несколько статических механизмов прогнозирования ветвей в эти годы: 80486 Возраст: Всегда не принято Pentium4 возраст: обратный захват/вперед не принимаются Новые процессоры, такие как Ivy Bridge, Haswell стан...
13 авг. '18 в 15:46
1 отв.

Запуск функции с ветвью

Из оптимизационной и отраслевой точки зрения, существует ли разница между этими двумя кодами? Во-первых: void think_and_do(){ if(expression){ //Set_A of instructions } else{ //Set_B of instructions } } int main()...
24 окт. '16 в 15:47
2 отв.

Как отменить предсказание ветвей?

Из чтения this Я наткнулся на следующие две цитаты: Первая цитата: Типичный случай непредсказуемого поведения ветвей - результат сравнения зависит от данных. Вторая цитата: Никаких ветвей не существует Mispredicts Для моего проекта я раб...
10 февр. '17 в 23:24
1 отв.

Почему Swift с использованием синтаксиса подстроки в циклах for-in работает быстрее, чем использование прямого доступа к элементу?

Я читал знаменитый. Почему быстрее обрабатывать отсортированный массив, чем несортированный массив? и я решил поиграть и экспериментировать с другими языками, такими как Swift. Я был удивлен разницей времени выполнения между двумя очень похожими фра...
30 июня '18 в 0:15
1 отв.

Стоимость полиморфизма

Я смотрю вызов виртуального метода ниже в x86-64: mov rcx, qword ptr [x] mov rax, qword ptr [rcx] call qword ptr [rax+8] а также таблицы задержки Agner Fog: http://www.agner.org/optimize/instruction_tables.pdf Поскольку я использ...
08 марта '14 в 7:13
1 отв.

Как я могу динамически намекнуть цель ветки на процессор x64?

Я хотел бы знать, как писать эффективные таблицы перехода для процессоров x64, либо в C, С++, либо в сборку. Ввод известен заранее, но невозможно предсказать алгоритмически. Предполагая, что я могу смотреть так далеко вперед, как хочу во входном пото...
26 апр. '13 в 11:13
1 отв.

Переключаться так же плохо, как если бы?

Я читаю в StackOverflow, который использует if(someCondition) { someCode(); } else { alternateCode(); } может быть неэффективным из-за восприимчивости к неверному прогнозированию отрасли (например, этот вопрос). Итак, switch -конструкция,...
03 июня '13 в 9:29
2 отв.

Можете ли вы использовать builtin_expect с оператором switch

У меня есть оператор switch в некотором критическом по времени коде. Я пытался оптимизировать его с помощью __builtin_expect, но он, похоже, не работает. Мне интересно, может ли кто-нибудь сказать мне, не хватает ли я каких-либо деталей, или если ко...
06 февр. '14 в 21:56
10 отв.

Являются ли If Thens быстрее, чем умножение и присваивание?

У меня есть быстрый вопрос, предположим, что у меня есть следующий код, и он повторяется, например, 10 раз, например. if blah then number = number + 2^n end if Было бы быстрее оценивать: number = number + blah*2^n? Что также вызывает вопрос...
26 окт. '10 в 16:35
1 отв.

Размер BTB для Haswell, Sandy Bridge, Ivy Bridge и Skylake?

Есть ли способ определить или любой ресурс, где я могу найти размер целевого буфера ветки для процессоров Haswell, Sandy Bridge, Ivy Bridge и Skylake Intel?
21 июля '16 в 22:33