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

 
 
> Ускорение ARM (AT91SAM9260)
andrewlekar
сообщение Feb 12 2010, 05:45
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



По описанию на форуме включил на процессоре D-Cache и ощутил нехилый прирост производительности. Теперь появился ряд вопросов:
1. Видел несколько раз упоминания об ускорении Bus Matrix. Однако в даташите никаких намёков на управляющие регистры для этого дела не увидел. Можете поделиться примерами и теоретическим обоснованием ускорения?
2. Для области DMA сейчас использую некешируемый и небуферизированный сегмент памяти. Заметил упоминание aaarrr о том, что буферизацию можно включить. Как работать с DMA у которой есть буферизация, так чтобы ничего не развалилось?
3. Я принимаю по DMA из ISI большой объём данных - картинку. Пока что для этих целей тупо выделил под DMA область памяти в 1 мегабайт. После получения картинки сливаю в кэшируемую память и работаю с ней. Такие размеры буфера DMA это нормально или нужно реализовывать приём по DMA кусками?
4. Есть ли надёжный способ проверить что MMU и D-Cache настроен правильно и память распределена корректно? Просто у меня всё с первого раза завелось, хотя было внесено довольно много изменений в настройки линкера и в обработку переменных. Хотелось бы имуть уверенность, что всё через некоторое время не развалится smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
aaarrr
сообщение Feb 12 2010, 06:40
Сообщение #2


Гуру
******

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



2. Имеет смысл, если DMA работает на пересылку из памяти. Перед запуском выполняется команда drain write buffer.
3. Копирование лучше исключить. Имеет смысл разрешить кэш и выполнять invalidate перед началом обработки очередного полученного фрейма.
4. Внимательно все проверить глазами и головой smile.gif
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Feb 12 2010, 07:34
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Насколько я понял из доков, drain write buffer выполняется при любом чтении из этой памяти. Следовательно, если DMA используется и для чтения и для записи, можно включить на памяти для DMA буферизацию, а перед записью туда произвести хотя бы одно чтение. Всё верно?

По поводу invalidate: предлагается перед началом обработки полученной картинки его выполнить? Как произвести invalidate для кэша? Установить атрибут памяти как некешируемой а потом вернуть обратно? Или есть другой способ?

Да и ещё, FCSE для этого проца как включать и стоит ли? У меня там ртос и соответственно постоянно переключается контекст.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 12 2010, 09:31
Сообщение #4


Гуру
******

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



Цитата(andrewlekar @ Feb 12 2010, 10:34) *
Насколько я понял из доков, drain write buffer выполняется при любом чтении из этой памяти. Следовательно, если DMA используется и для чтения и для записи, можно включить на памяти для DMA буферизацию, а перед записью туда произвести хотя бы одно чтение. Всё верно?

Не при любом. Очистку буферов следует производить соответствующей инструкцией CP15 - Drain write buffer.

Цитата(andrewlekar @ Feb 12 2010, 10:34) *
Как произвести invalidate для кэша? Установить атрибут памяти как некешируемой а потом вернуть обратно? Или есть другой способ?

Опять-таки соответствующей инструкцией CP15. Самый грубый, простой но зато безопасный способ - выполнить команду Test, clean, and invalidate DCache.

Цитата(andrewlekar @ Feb 12 2010, 10:34) *
Да и ещё, FCSE для этого проца как включать и стоит ли? У меня там ртос и соответственно постоянно переключается контекст.

Для этого нужна соответствующая поддержка со стороны вашей RTOS.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Feb 12 2010, 10:13
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Ok. Я всё понял. Про команды CP15 прочитал. Только не понял, при очистке кэша можно передать адрес очищаемой области - какой именно адрес имеется в виду? И размер секции будет использован тот, который я указал в TLB - 1 Мб?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 12 2010, 10:33
Сообщение #6


Гуру
******

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



Кэш можно очищать:
а) полностью
б) построчно
Размер строки у ARM926EJ-S - восемь 32-битных слов.
Размер секции при операциях с кэшем не использутся.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 10:43
Рейтинг@Mail.ru


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