fast random

Mar. 9th, 2021 06:07 pm
amarao: (Default)
[personal profile] amarao

Когда-то Олег мне подсказал функцию быстрого псевдорандома:

        factor ^= factor << 13;
        factor ^= factor >> 17;
        factor ^= factor << 5;

Когда я был в недрах piston'а и очень далеко от criterion'а, я не мог её проверить. Сейчас (научившись работать criterion'ом и cargo asm'ом) я могу с уверенностью сказать, что функция эта много медленее, чем кажется. Причина - она не конвейеризируется. Если тело цикла большей частью состоит из рандома (и записи оного), то мы получаем, что каждая следующая строка зависит от предыдущей, и это полностью тормозит конвейер (за вычетом инструкций цикла).

По моим замерам одна инструкция примерно на 70% быстрее, чем три (т.е. трёхкратная разница), и ~25x кратная по сравнению с отсутствием математики (но тут могут быть какие-то ещё спецоптимизации).

Я планирую попробовать сделать рандом конвейеризируемым.

Мораль: viva Criterion.

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

amarao: (Default)
amarao

February 2026

S M T W T F S
123456 7
8910111213 14
15161718192021
22232425262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 26th, 2026 07:55 am
Powered by Dreamwidth Studios