u128 (без всяких доп.трюков) сделало почти чудо, да.
На форуме мне показали bytemuck, позволяющий сделать "запретное" в расте и кастануть [u8] к [u128] с правильным пересчётом размера.
Итог:
2.2ms на полное наполнение 2560х1440 (x4), это 454 раз за секунду, более чем достаточно для практических задач шума.
Собственно, это же подтверждается и практическим замером: 100% шума в каждом кадре даёт 260 FPS.
Итого:
1) u128
2) #[inline(always)]
... И ещё одно доказательство тезиса, что не-многопроцессные оптимизации лучше. От 6 тредов я бы получил максимум 5x улучшение, а тут - 9-кратное, причём, практически, без крупноархитектурных усложнений.
Сам код тут: https://github.com/amarao/sdl_random
На форуме мне показали bytemuck, позволяющий сделать "запретное" в расте и кастануть [u8] к [u128] с правильным пересчётом размера.
Итог:
noise fill 2560x1440 time: [2.2220 ms 2.2227 ms 2.2239 ms]
change: [-88.993% -88.989% -88.984%] (p = 0.00 < 0.05)
Performance has improved.
2.2ms на полное наполнение 2560х1440 (x4), это 454 раз за секунду, более чем достаточно для практических задач шума.
Собственно, это же подтверждается и практическим замером: 100% шума в каждом кадре даёт 260 FPS.
Итого:
1) u128
2) #[inline(always)]
... И ещё одно доказательство тезиса, что не-многопроцессные оптимизации лучше. От 6 тредов я бы получил максимум 5x улучшение, а тут - 9-кратное, причём, практически, без крупноархитектурных усложнений.
Сам код тут: https://github.com/amarao/sdl_random
no subject
Date: 2021-03-13 08:40 am (UTC)Я очень плохо читаю ассемблер x86_64. Вроде бы, вот это, хотя я не понимаю, что это значит.
(первая строчка - rust, дальше asm).
no subject
Date: 2021-03-13 08:57 am (UTC)no subject
Date: 2021-03-13 10:28 am (UTC)Там дофига инлайнинга.
no subject
Date: 2021-03-13 10:43 am (UTC)no subject
Date: 2021-03-13 10:47 am (UTC)Ага. Я после недавнего срачика на тему fdiv'а (когда выяснилось, что компилятор на 0.5 умножал вместо деления), часто заглядываю в ассемблер. Чаще всего всего не нахожу ничего из того, что было написано.
no subject
Date: 2021-03-13 09:58 am (UTC)