Абсолютный, грандиозный успех!
Mar. 16th, 2021 11:43 pmИтог:
render fps: 2400 fps
draw fps: 60 fps
cpu use: 120%
или
render fps: 2100 fps
draw fps: 310 fps
cpu use: 200%
lockless rendering. Один тред считает в цикле (тупо fill новым цветом, 100% CPU в треде), второй это читает и выводит, либо asap (310 fps, 100% CPU в треде), либо по vsync (60 fps, 20% CPU в треде).
Сам код - я на питоне бы не смог написать короче. 55 строк вся библиотека (и то, я не уверен, что нужно руками clone делать). ... Уверен, вся библиотека 47 строк.
https://github.com/amarao/equart/tree/switching_to_sdl/src
Это просто счастье какое-то! Наконец-таки, у моего нового быстрого компьютера появился новый быстрый код!
Ближайший роадмп: сделать инверсию (вынести SDL в тред, в main сделать только рисование), чтобы остался только init_graphics()...
Заметим, этот же алгоритм идеально режется на параллельны треды. Каждому свой диапазон значений считать, а вывод - в общий буффер, и всё. Сравните это со старой версией (piston) - 1200+ строк, в которых ад и погибель с message'ами и копированиями буферов.
AtomicU32 вместе с Arc и Ordering::Relaxed звучит как читерство. Слишком просто, слишком волшебно, слишком легко.
render fps: 2400 fps
draw fps: 60 fps
cpu use: 120%
или
render fps: 2100 fps
draw fps: 310 fps
cpu use: 200%
lockless rendering. Один тред считает в цикле (тупо fill новым цветом, 100% CPU в треде), второй это читает и выводит, либо asap (310 fps, 100% CPU в треде), либо по vsync (60 fps, 20% CPU в треде).
Сам код - я на питоне бы не смог написать короче. 55 строк вся библиотека (и то, я не уверен, что нужно руками clone делать). ... Уверен, вся библиотека 47 строк.
https://github.com/amarao/equart/tree/switching_to_sdl/src
Это просто счастье какое-то! Наконец-таки, у моего нового быстрого компьютера появился новый быстрый код!
Ближайший роадмп: сделать инверсию (вынести SDL в тред, в main сделать только рисование), чтобы остался только init_graphics()...
Заметим, этот же алгоритм идеально режется на параллельны треды. Каждому свой диапазон значений считать, а вывод - в общий буффер, и всё. Сравните это со старой версией (piston) - 1200+ строк, в которых ад и погибель с message'ами и копированиями буферов.
AtomicU32 вместе с Arc и Ordering::Relaxed звучит как читерство. Слишком просто, слишком волшебно, слишком легко.