Новая функция: #36
-
Думаю что оправдано. Ещё думаю что не надо было делать такой универсальный блиттер, хватило бы 8, 24 и 32 bpp. И можно на порядок ускорить функцию если для верхнего окна рисовать без проверки принадлежности пикселя.
Сделал несколько тестов Пентиум 4 2.6 ГГц
Доступ к видеопямяти действительно очень медленный. На сохраниние кадра уходит 0.68 с.
Лучший вариант - если функция будет сохранять картинку в формате экрана с выравниванием длины строки на 16 или 32 байта (под будущий AVX)
Ещё интересно потестить ф.65
Кстати ф.36 грабит экран вместе с курсором.
Code: Select all
1024x768x32 время в тактах
24 bpp 32 bpp 32 bpp movnti
69E412A0 6957A6EC 692ACB40
69D14E60 6955F3D8 69197DB0
69E58298 6944330C 692E3B38
69E60C10 6958D6C0 693DB21D
пропускная способность 4.4 Mb/c
Лучший вариант - если функция будет сохранять картинку в формате экрана с выравниванием длины строки на 16 или 32 байта (под будущий AVX)
Ещё интересно потестить ф.65
Кстати ф.36 грабит экран вместе с курсором.
Serge
Меня давно интересовал вопрос, а если курсор аппаратный, будет ли он так копироватся?Кстати ф.36 грабит экран вместе с курсором.
От Mario79:
Serge: я буду дорабатывать функцию
Ghost: нет, не будет
Serge: я буду дорабатывать функцию
Ghost: нет, не будет
Предыдущие тесты конечно не совсем точные потому что прерывания не маскировались.
Но если чтение из видеопамяти упрётся в 10Мб/с при чтении movdq/movups то вероятно самым быстрым вариантом будет просто перерисовать часть экрана.
Есть ещё радикальный вариант с shadowfb. Сделать для видеопамяти кеш со сквозной записью. Скорость чтения должна возрасти на пару порядков. Ещё это решает старую проблему с курсором и ускоряет все операции с курсором. В минусе большой расход памяти и некоторое снижение скорости на записи.
Но если чтение из видеопамяти упрётся в 10Мб/с при чтении movdq/movups то вероятно самым быстрым вариантом будет просто перерисовать часть экрана.
Есть ещё радикальный вариант с shadowfb. Сделать для видеопамяти кеш со сквозной записью. Скорость чтения должна возрасти на пару порядков. Ещё это решает старую проблему с курсором и ускоряет все операции с курсором. В минусе большой расход памяти и некоторое снижение скорости на записи.
Попробуйте вот это.
P.S. Расширение asm запрещено администратором. (((
P.S. Расширение asm запрещено администратором. (((
- Attachments
-
-
memcpy.asm.txt (7.46 KiB)
- Пример из AMD Athlon™ Processor x86 Code Optimization Guide (Part.No 22007).
Downloaded 450 times
-
Сделал ещё два теста. Чтение из видеопамяти это зло !
Максимум что удалось выжать на чтении из movdqa/movntdq 5.47 Мб/с. На записи получил 144 Мб/с без оптимизации.
Максимум что удалось выжать на чтении из movdqa/movntdq 5.47 Мб/с. На записи получил 144 Мб/с без оптимизации.
Mario79 wrote:
Serge
Даже текущей реализации хватает для элемента управления типа MENU, даже на слабых машинах вроде P100 (разумеется не считая того что нужно отключить курсор). Когда я делал функцию, я всего лишь хотел убрать кучу вызовов от приложения к ядру, которые бы дико тормозили, если использовать 35 функцию. Для других примений разумеется нужны другие подходы, а так вполне хватает.
Serge
Даже текущей реализации хватает для элемента управления типа MENU, даже на слабых машинах вроде P100 (разумеется не считая того что нужно отключить курсор). Когда я делал функцию, я всего лишь хотел убрать кучу вызовов от приложения к ядру, которые бы дико тормозили, если использовать 35 функцию. Для других примений разумеется нужны другие подходы, а так вполне хватает.
Who is online
Users browsing this forum: No registered users and 12 guests