При оптимизации времени выполнения алгоритма, использующего ЛДПК декодер, профайлер привели к появлению функции, которая вычисляет следующее значение:
Где а И б - целые числа.
Количество вызовов исчислялось миллионами, а реализация была достаточно простой и незамысловатой:
По сути, функция состоит из трех последовательных операций сравнения.int LLR(int a, int b) { if (a>0) return (b>0) ? __min(a,b) : -__min(a,-b); else return (b>0) ? -__min(-a,b) : __min(-a,-b); }
Это дает (с учетом оптимизации компилятора) два (если числа имеют разные знаки) или три (если один) условных перехода для получения результата.
Вспоминая потенциальные проблемы конвейер При большом количестве условных переходов было решено сократить их количество или вообще избавиться от них.
Чтобы оценить производительность, небольшой тестовый проект #include <Windows.h>
static inline int LLR(int a, int b)
{
Теги: #программирование #c++ #Алгоритмы #оптимизация программ #программирование #C++ #Алгоритмы
-
Кафка Наносит Ответный Удар
19 Oct, 24 -
Ntt Docomo Готовит Мобильный Телефон С Lte
19 Oct, 24 -
Текущие Криптовалюты, Кроме Биткойна
19 Oct, 24 -
Barcamp Krasnodar Ищет «Мобильных» Спикеров
19 Oct, 24 -
Обзор Камеры Galaxy (Часть Ii)
19 Oct, 24