Публикации по теме '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 просмотров
schedule
28.10.2022
Как справиться с прогнозированием ветвлений при использовании переключателя в эмуляции ЦП
Недавно я прочитал здесь вопрос Почему это быстрее обрабатывать отсортированный массив, а не несортированный? и нашел ответ абсолютно захватывающим, и он полностью изменил мой взгляд на программирование при работе с ветвями, основанными на данных....
5600 просмотров
schedule
02.12.2022
Могут ли предикторы ветвления точно предсказать, когда количество итераций цикла не является постоянным?
Привлечет ли следующий код штраф за неправильное предсказание ветвления, скажем, для 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 просмотров
schedule
17.05.2024
Прогнозирование ветвлений и многопоточность
Предположим, что простой 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 просмотров
schedule
18.07.2023
Существует ли конструкция цикла, которая повторяется n раз без вычисления каких-либо условий?
Этот вопрос возник из-за контекста оптимизации кода для устранения потенциальных сбоев прогнозирования ветвлений... фактически, удаления всех ветвей вместе.
В моем примере типичный цикл for использует следующий синтаксис:
#include...
148 просмотров
schedule
04.05.2022
Как подсчитать ошибочные предсказания ветвей?
У меня есть задача посчитать штраф за неверное предсказание ветвления (в тиках), поэтому я написал такой код:
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 просмотров
schedule
04.08.2022
Состояния 2-битного предсказателя переходов
Я читал раздел предсказания динамического ветвления в главе 5 книги Computer Organization and Design: The Hardware/Software Interface 5th Edition Паттерсона и Хеннесси, когда наткнулся на следующую диаграмму состояний 2-битного предсказателя:...
745 просмотров
schedule
08.09.2022
Как понять, что макрос «вероятно» влияет на предсказание переходов?
Я заметил, что если мы знаем, что есть хороший шанс, что поток управления является истинным или ложным, мы можем сообщить об этом компилятору, например, в ядре Linux есть много likely unlikely , фактически подразумеваемых __builtin_expect ,...
54 просмотров
schedule
09.07.2023
В примере ЦП с несколькими проблемами в учебнике, почему инструкция после инструкции ветвления должна ждать один цикл перед выдачей?
Пример приведен в разделе 3.8 Использование ILP с использованием динамического планирования, множественных проблем и предположений книги Архитектура компьютера — количественный подход .
Учитывая динамическое планирование, процессор с двумя...
33 просмотров
schedule
29.11.2022
Математически найти значение, ближайшее к 0
Есть ли способ математически определить, ближе ли значение к 0, чем другое?
Например, closerToZero(-2, 3) вернет -2 .
Я попытался удалить знак, а затем сравнил значения для минимума, но тогда я бы назначал беззнаковую версию исходных чисел.
a...
88 просмотров
schedule
05.02.2023
С# эквивалентен __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 просмотров
schedule
24.05.2022