amarao: (Default)
[personal profile] amarao
Я поправил функцию рандома до 1ns (для u8). Удивительно, но ключевым решением была не борьба с ковейером процессора, а #[inline(always)], с u128 в качестве базового типа. (Как всегда, спасибо Олегу).

Проблема в том, что этого не достаточно. 2560*1440*60*4 - это 884 миллиона в секунду (1.1 ns), и это не считая всего остального (например, процесса копирования в текстуру и отправки текстуры в GPU). В целом, чтобы получить желаемые 200 fps (fade in/out примерно столько показывает) нужно делать 339 ps на один байт (плюс запас на вывод), что опасно близко к одному тику процессора (270ps/тик).

Я сейчас подошёл к интереснейшей микрозадачке rust'а (как из [u8] сделать [u128] бесплатно, т.е. с помощью typecast'а), и если мы перейдём на u128, то требования сильно упростятся. u128 - это аж 4 полных пиксела, т.е. можно иметь аж 5.4 ns на каждый рандом. Вероятнее всего, это и будет решение.

На всякий случай, вот формулы:

1/(2560*1440*200*4)*1000*1000*1000 (время на одну u8 компоненту пиксела для вывода 200 fps на 2560x1440)
1/(2560*1440*200/4)*1000*1000*1000 (время на 4 u32 пиксела для вывода 200 fps на 2560x1440)

Profile

amarao: (Default)
amarao

December 2025

S M T W T F S
 12 3456
78910111213
14151617181920
212223242526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 30th, 2025 09:44 pm
Powered by Dreamwidth Studios