Описание тега likely-unlikely

None Вероятные и маловероятные - это намеки компилятору на выдачу инструкций, которые вызовут предсказание ветвления в пользу "вероятной" стороны инструкции перехода.
11 ответов

Как работают вероятные / маловероятные макросы в ядре Linux и в чем их выгода?

Я копался в некоторых частях ядра Linux и нашел такие вызовы: if (unlikely(fd < 0)) { /* Do something */ } или же if (likely(!err)) { /* Do something */ } Я нашел их определение: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __bui…
2 ответа

gcc маловероятно использование макроса

Я пишу критический кусок кода с примерно следующей логикой if(expression is true){ //do something with extremely low latency before the nuke blows up. This branch is entered rarely, but it is the most important case }else{ //do unimportant thing tha…
06 июн '12 в 21:29
2 ответа

Использование макросов препроцессора Likely() / Unlikely() в цепочке if-else if

Если у меня есть: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) if (A) return true; else if (B) return false; ... else if (Z) return true; else //this will never really happen!!!! raiseError(); return false; М…
2 ответа

Использование вероятного / маловероятного в качестве аргумента возврата в ядре Linux

Просто посмотрите на эту конструкцию в ядре Linux, и я не могу понять, что это значит. 110 return unlikely(sl->sequence != start); я знаю это likely/unlikely сделаны с __builtin_expect Функция описана здесь: http://gcc.gnu.org/onlinedocs/gcc/Othe…
1 ответ

Изучение примеров подсказок компилятора вероятности () и маловероятного ()

Как я могу продемонстрировать студентам удобство использования likely а также unlikely подсказки компилятора (__builtin_expect)? Можете ли вы написать пример кода, который будет в несколько раз быстрее с этими подсказками, сравнивая код без подсказо…
29 апр '10 в 16:03
1 ответ

Скорее всего, в ядре Linux есть макрос

У меня есть понимание того, как работают макросы вероятности ()/ маловероятного (), и у меня также есть понимание предсказания переходов. К сожалению, я не изучал предсказание ветвлений в контексте программирования высокого уровня. Что я хочу знать,…
13 июл '16 в 17:41
4 ответа

Должен ли я использовать, если маловероятно для серьезных ошибок сбоя?

Я часто пишу код, который выглядит примерно так: if(a == nullptr) throw std::runtime_error("error at " __FILE__ ":" S__LINE__); Должен ли я предпочесть обработку ошибок с if unlikely? if unlikely(a == nullptr) throw std::runtime_error("error at " __…
26 июн '17 в 09:42
8 ответов

Вероятный / маловероятный эквивалент для MSVC

Компилятор GCC поддерживает оператор __builtin_expect, который используется для определения вероятных и маловероятных макросов. например. #define likely(expr) (__builtin_expect(!!(expr), 1)) #define unlikely(expr) (__builtin_expect(!!(expr), 0)) Ест…
1 ответ

Ядро Linux: скорее всего () против маловероятного ()

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

Могут ли вероятные / маловероятные макросы использоваться в коде пользовательского пространства?

Я наткнулся на эти 2 макроса в коде ядра Linux. Я знаю, что это инструкции для компилятора (gcc) для оптимизации в случае ветвления. У меня вопрос, можем ли мы использовать эти макросы в коде пользовательского пространства? Это даст какую-то оптимиз…
03 ноя '09 в 15:25
0 ответов

Какой смысл в "вряд ли ()"?

Возможный дубликат: вероятные / маловероятные макросы в ядре Linux В ядре Linux я натолкнулся на строку в ./linux/include/shed.h: if (unlikely(atomic_dec_and_test(&mm->mm_count))) В чем именно смысл вряд ли? Я нашел его определение в .arch / …
09 дек '12 в 06:57
1 ответ

Что означает .text.unlikely в объектных файлах ELF?

В моем objdump -t вывода, я вижу следующие две строки: 00000000000004d2 l F .text.unlikely 00000000000000ec function-signature-goes-here [clone .cold.427] а также 00000000000018e0 g F .text 0000000000000690 function-signature-goes-here Я знаю l озна…
0 ответов

C++20 Вероятная и маловероятная оптимизация производительности

Я читал об атрибутах likely а также unlikely из C++20, и я хочу спросить, есть ли какие-то разумные и официальные данные о преимуществах производительности, которые эти новые атрибуты дают выполнению. Я имею в виду, что есть примеры тестов выполнени…
11 янв '20 в 17:55
1 ответ

Могу ли я улучшить предсказание ветвлений с помощью моего кода?

Это наивный общий вопрос, открытый для любой платформы, языка или компилятора. Хотя меня больше всего интересуют Aarch64, C++, GCC. При кодировании неизбежного перехода в потоке программы, зависящего от состояния ввода-вывода (компилятор не может пр…
06 янв '22 в 02:00
1 ответ

[[(маловероятно)]] атрибуты и циклы do-while

КОРОТКО: есть ли место для размещения атрибута, чтобы считалось, что поток управления в at может принять ложную ветвь, не влияя на возможность ветвей в? if (cond1) { do { foo(); } while (cond2); } Если я положу [[unlikely]]в do [[unlikely]] {или же …
25 май '22 в 09:14
2 ответа

Почему мой код с вероятными/маловероятными атрибутами C++20 не работает быстрее?

Код выполнялся в Visual Studio 2019 версии 16.11.8 с оптимизацией /O2 и процессором Intel. Я пытаюсь найти основную причину этого нелогичного результата. Я получаю, что без атрибутов статистически быстрее, чем с атрибутами через t-тест. Я не уверен,…
02 июн '22 в 06:55
2 ответа

Имеют ли атрибуты вероятности смысл с одним оператором if?

Cppreference и эта документация прямо не заявляют, что атрибуты правдоподобия не будут работать с однимifзаявление. Или я просто не понимаю, что подразумевается под альтернативным путем исполнения . Итак, это мой вопрос, будет ли атрибут, скажем,[[u…
24 янв '23 в 17:13
0 ответов

Правильное использование маловероятного макроса в нескольких условиях

Я вижу много примеров использования макроса (а не атрибута С++20) какif( unlikely( server == 0 ) ), но никогда не объединяя их какif( unlikely( server == 0 ) || unlikely( client == 0 ) )или . Могу ли я использовать два на двух условных выражениях дл…
12 янв '23 в 18:45
1 ответ

Где следует разместить утверждение «вероятное/маловероятное», чтобы повысить производительность?

Некоторое программное обеспечение (часто ориентированное на производительность, например ядро ​​Linux, DPDK) имеет помощники C для влияния на предсказание ветвей . У меня есть абсолютно простой фрагмент кода ( предположим, я знаю процент a > b), …