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

April 2026

S M T W T F S
   1234
567 891011
12131415161718
19202122232425
2627282930  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 12th, 2026 05:39 pm
Powered by Dreamwidth Studios