Публикации по теме 'branch-prediction'


Является ли обработка отсортированного массива быстрее, чем обработка несортированного массива?
Это самый популярный вопрос о переполнении стека. Введение В C++ по какой-то причине сортировка данных перед выполнением делает основной цикл почти в шесть раз быстрее. См. этот фрагмент кода C++, иллюстрирующий такое поведение. #include <algorithm> #include <ctime> #include <iostream> int main() { // Generate an array of integers with a size of 32768 const unsigned arraySize = 32768; int data[arraySize]; // Assign each array item with a random..

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

Как эволюция архитектуры ЦП повлияла на производительность вызова виртуальных функций?
Несколько лет назад я изучал ассемблер x86, конвейерную обработку ЦП, промахи в кеше, предсказание ветвлений и все такое прочее. Это была сказка о двух половинах. Я читал обо всех замечательных преимуществах длинных конвейеров в процессоре, а...
4633 просмотров

Как справиться с прогнозированием ветвлений при использовании переключателя в эмуляции ЦП
Недавно я прочитал здесь вопрос Почему это быстрее обрабатывать отсортированный массив, а не несортированный? и нашел ответ абсолютно захватывающим, и он полностью изменил мой взгляд на программирование при работе с ветвями, основанными на данных....
5600 просмотров

Могут ли предикторы ветвления точно предсказать, когда количество итераций цикла не является постоянным?
Привлечет ли следующий код штраф за неправильное предсказание ветвления, скажем, для Intel Core i7? for(i = 0, count = *ptr; i < count; i++) { // do something } число может быть 0, 1 или 2.
242 просмотров
schedule 01.06.2023

Предсказание ветвления: написание кода для его понимания; Получение странных результатов
Я пытаюсь получить хорошее представление о прогнозировании ветвлений, измеряя время запуска циклов с предсказуемыми ветвями по сравнению с циклами со случайными ветвями. Итак, я написал программу, которая берет большие массивы 0 и 1, расположенные...
3736 просмотров
schedule 08.06.2023

Микрооптимизация функции сравнения C++
У меня есть функция Compare() , которая выглядит так: inline bool Compare(bool greater, int p1, int p2) { if (greater) return p1>=p2; else return p1<=p2; } Я решил оптимизировать, чтобы избежать ветвления: inline bool...
1869 просмотров
schedule 04.11.2022

Стоимость полиморфизма
Я смотрю на вызов виртуального метода ниже в x86-64: mov rcx, qword ptr [x] mov rax, qword ptr [rcx] call qword ptr [rax+8] а также таблицы задержки Агнера Фога: http://www.agner.org/optimize/instruction_tables.pdf...
469 просмотров
schedule 09.07.2023

Почему тернарные и логические операторы более эффективны, чем if-ветви?
Я наткнулся на этот вопрос/ответ , в котором упоминается, что на большинстве языков логические операторы, такие как: x == y && doSomething(); может быть быстрее, чем делать то же самое с веткой if : if(x == y) {...
365 просмотров

Прогнозирование ветвлений и многопоточность
Предположим, что простой if выглядит следующим образом: if (something) // do_something else // do_else Предположим, что этот оператор if-else выполняется параллельно в разных потоках, и каждый поток дает разный результат, но...
838 просмотров
schedule 19.09.2022

В Java может ли & быть быстрее, чем &&?
В этом коде: if (value >= x && value <= y) { когда value >= x и value <= y равновероятны как истина, так и ложь без определенного шаблона, будет ли использование оператора & быстрее, чем использование...
8575 просмотров

Существует ли конструкция цикла, которая повторяется n раз без вычисления каких-либо условий?
Этот вопрос возник из-за контекста оптимизации кода для устранения потенциальных сбоев прогнозирования ветвлений... фактически, удаления всех ветвей вместе. В моем примере типичный цикл for использует следующий синтаксис: #include...
148 просмотров

Как подсчитать ошибочные предсказания ветвей?
У меня есть задача посчитать штраф за неверное предсказание ветвления (в тиках), поэтому я написал такой код: int main (int argc, char ** argv) { unsigned long long start, end; FILE *f; f = fopen("output", "w"); long long int k =...
223 просмотров
schedule 28.06.2022

Почему этот спецполин не работает на озере Каби?
Я пытаюсь создать на мой Kabe lake 7600U , я использую CentOS 7. Полный тестовый репозиторий доступен на GitHub . Моя версия спецполина выглядит следующим образом ( cfr. spec.asm ): specpoline: ;Long dependancy chain fld1...
114 просмотров

Состояния 2-битного предсказателя переходов
Я читал раздел предсказания динамического ветвления в главе 5 книги Computer Organization and Design: The Hardware/Software Interface 5th Edition Паттерсона и Хеннесси, когда наткнулся на следующую диаграмму состояний 2-битного предсказателя:...
745 просмотров
schedule 08.09.2022

Как понять, что макрос «вероятно» влияет на предсказание переходов?
Я заметил, что если мы знаем, что есть хороший шанс, что поток управления является истинным или ложным, мы можем сообщить об этом компилятору, например, в ядре Linux есть много likely unlikely , фактически подразумеваемых __builtin_expect ,...
54 просмотров

В примере ЦП с несколькими проблемами в учебнике, почему инструкция после инструкции ветвления должна ждать один цикл перед выдачей?
Пример приведен в разделе 3.8 Использование ILP с использованием динамического планирования, множественных проблем и предположений книги Архитектура компьютера — количественный подход . Учитывая динамическое планирование, процессор с двумя...
33 просмотров
schedule 29.11.2022

Математически найти значение, ближайшее к 0
Есть ли способ математически определить, ближе ли значение к 0, чем другое? Например, closerToZero(-2, 3) вернет -2 . Я попытался удалить знак, а затем сравнил значения для минимума, но тогда я бы назначал беззнаковую версию исходных чисел. a...
88 просмотров

С# эквивалентен __builtin_expect
Есть ли у C# мира эквивалент __builtin_expect ? if (__builtin_expect(is_xyz, true)) // <---- do we have that (or an alternative to it)? { // ... } or if (likely(is_xyz)) // <---- do we have that (or an alternative to it)? { // ......
16 просмотров
schedule 10.06.2022

Почему петля, переходящая от подачи своих мопов из кэша Uop к LSD, вызывает всплеск промахов ветвления?
Все тесты выполняются на Icelake или Whiskey Lake (в семье Skylake). Резюме Я наблюдаю странное явление, когда кажется, что когда петля переходит от исчерпания кэша Uop к исчерпанию LSD (детектора циклического потока) , возникает...
158 просмотров