Обновить

Я попробовал считать нейросетевой слой в конечном поле Галуа GF(137): 4x по памяти, ARM NEON и честные ограничения

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели7.5K
Всего голосов 5: ↑5 и ↓0+6
Комментарии6

Комментарии 6

Пробовали переписать реализацию на компилируемые ЯП?

Да, это мой следующий шаг, слишком уж много расходов и ограничений встретил на питоне. Новые бенчмарки будут на чистом c++.

Зачем здесь редукция Барретта?

Потому что она не нужна (godbolt). Самая наивная реализация даёт более оптимальный код, чем то, что Вы написали.

Да, посмотрел, вы правы. Для constexpr-модуля компилятор сам оптимизирует % 137, причем лучше моего ручного варианта с while. Поправлю у себя, спасибо.

Не для constexpr, а просто для любого деления на константу. Для деления на неконстанту есть libdivide — лучше оттуда взять алгоритм (чтобы не было while)

На scalar-редукции % 137 быстрее Барретта примерно в 1.1-1.5 раза, но в полном бенчмарке эффект небольшой, около пары процентов.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации