реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Cortex A8 L1 Cache mode, работа с кэшем в экранной области
mantech
сообщение Aug 19 2018, 15:05
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Приветствую.

Есть задумка ускорить печать текста в экранной области (framebuffer), которая некэширована. Рисование прямоугольников сейчас выполняется с помощью ДМА, а вот текст приходится печатать просто записью в эту область цветовую составляющую пикселя (24бита+альфа). Вопрос, можно каким-либо образом ускорить этот процесс, кэшированием данной области или еще чем-то, но так, чтобы это не отражалось на выводе на дисплей? Например, использование ускорения кэша только для записи в данную область?

Сообщение отредактировал mantech - Aug 19 2018, 15:06
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 19 2018, 15:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Включите для этой области кэш в режиме write-through.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Aug 19 2018, 15:47
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Кэш плюc DMA - хардкор, но попробовать стоит, в худшем случае экспириенс получите sm.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 19 2018, 16:21
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(mantech @ Aug 19 2018, 18:05) *
Приветствую.

Есть задумка ускорить печать текста в экранной области (framebuffer), которая некэширована. Рисование прямоугольников сейчас выполняется с помощью ДМА, а вот текст приходится печатать просто записью в эту область цветовую составляющую пикселя (24бита+альфа). Вопрос, можно каким-либо образом ускорить этот процесс, кэшированием данной области или еще чем-то, но так, чтобы это не отражалось на выводе на дисплей? Например, использование ускорения кэша только для записи в данную область?


Если позволяет ОЗУ, то я бы создал экранную область еще и там, а содержимое целиком переносил бы в экранную область дисплея по DMA.
Причем, это не обязательно делать с частотой обновления экрана, а желательно синхронизировать с частотой обновления дисплея.
Скажем, частота "кадровой развертки" дисплея 60 Гц, то обновление картинки можно сделать и 20 Гц и даже 10 Гц.
Визуально это будет оч. сложно заметить. Разумеется, если нет видео-анимации и т.п.
В этом случае можно спокойно и фактически не спеша рисовать в этом импровизированном видео-ОЗУ, а в определенные моменты запускать по DMA переброс всего этого ОЗУ во внутреннюю память дисплея.
Если эти две "процедуры" "разнести" во времени, то визуально не будет видно, как например, прорисовывается текст.
К тому же это дает очень строгую детерменированность при обращении к функциям, рисующим/печатающим на дисплее - ведь по сути пишем в собственное ОЗУ, а не куда-то там.
И поэтому уже не нужны мьютексы, чтобы обращаться к этим функциям безопасно из разных RTOS потоков (про printf не вспоминаем - это отдельная "песня").
Фишка тут в том, что скорость записи напрямую во внешний интерфейс всегда будет ниже обращения к собственному ОЗУ, да и она зачастую не детерминирована по времени.

Я так делал даже на обычных копеечных графических монохромных ЖК (без DMA на частоте обновления 10Гц).
Но повторюсь - если есть лишнее ОЗУ и, конечно, если позволяет производительность МК.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 19 2018, 17:14
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(aaarrr @ Aug 19 2018, 18:37) *
Включите для этой области кэш в режиме write-through.

Можно по-подробнее, что будет в этом случае, как это работает. Просто с режимами кэша серьезно не имел отношения, достаточно было просто включить его и указать на кэшируемые и некэшируемые регионы...
ЗЫ Сейчас режим кэша Writeback.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 19 2018, 17:48
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(mantech @ Aug 19 2018, 20:14) *
Можно по-подробнее, что будет в этом случае, как это работает.

В режиме write-through записанные данные немедленно отправляются в память, а не оседают в кэше.
Если экранную область не предполагается читать, то логичнее будет использовать просто режим
буферизованной записи без кэширования.
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 19 2018, 18:18
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(aaarrr @ Aug 19 2018, 20:48) *
В режиме write-through записанные данные немедленно отправляются в память, а не оседают в кэше.
Если экранную область не предполагается читать, то логичнее будет использовать просто режим
буферизованной записи без кэширования.

На сколь я понимаю ускорение записи в экранную область производится в основном не из за ее кэширования, а блочной записи в память всей линии кэша (burst mode). В кэш контроллерах случаем нет такого режима, чтоб он просто накапливал 32-64 байта и потом одной транзакцией скидывал в память, НО при чтении читал из памяти, а не кэша?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 19 2018, 18:24
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(mantech @ Aug 19 2018, 21:18) *
В кэш контроллерах случаем нет такого режима, чтоб он просто накапливал 32-64 байта и потом одной транзакцией скидывал в память, НО при чтении читал из памяти, а не кэша?

Я же только что о нем написал, а Вы процитировали: буферизация без кэширования. Есть такой режим.
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 19 2018, 18:37
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(aaarrr @ Aug 19 2018, 21:24) *
Я же только что о нем написал, а Вы процитировали: буферизация без кэширования. Есть такой режим.

Может, конечно что-то не так сделал, но флаг bufferable устанавливал - только прироста скорости нет никакого...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 19 2018, 18:41
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(mantech @ Aug 19 2018, 21:37) *
Может, конечно что-то не так сделал, но флаг bufferable устанавливал - только прироста скорости нет никакого...

Когда-то давно экспериментировал, скорость последовательной записи в bufferable соответствовала таковой в режимах с кэшированием. Какие цифры получаются?
Go to the top of the page
 
+Quote Post
mantech
сообщение Aug 19 2018, 18:56
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(aaarrr @ Aug 19 2018, 21:41) *
Когда-то давно экспериментировал, скорость последовательной записи в bufferable соответствовала таковой в режимах с кэшированием. Какие цифры получаются?

Пока только "на глазок" Отрисовывается мгновенно или разворачивается заметно на глаз... Надо как-то скорость замерить...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 17:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01461 секунд с 7
ELECTRONIX ©2004-2016