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

 
 
> Kinetis K70, DMA, memcpy: сравнение скорости копирования., DMA почему то проигрывает
shreck
сообщение Sep 25 2014, 11:57
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Имеем K70 c внешней DDRAM.
Сравниваю скорость копирования блока памяти 500KB из одного места DDRAM в другое место DDRAM.
Оба метода работают в одинаковых условиях.

штатная memcpy: 12ms.
DMA (16-byte burst режим): 18ms.

DMA медленнее.
Как можно объяснить эти результаты.
Может что-то недоглядел/недонастроил в этом DMA.

P.S. По запарке не в тот раздел запостил.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
shreck
сообщение Sep 29 2014, 02:36
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Убрал из idle задачи доступ к ОЗУ, скорость dma возрасла в 2 раза (9ms стало).
Повышение приоритета dma также уменьшает время до 9ms.
И, видимо, это предел, т.к. применение обоих условий, более не уменьшает время копирования.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 29 2014, 16:30
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(shreck @ Sep 29 2014, 08:36) *
Убрал из idle задачи доступ к ОЗУ, скорость dma возрасла в 2 раза (9ms стало).

Лучшее решение - idle-задача состоящая из одной инструкции WFE в цикле!

Как-то (не помню уже на каком именно CPU) сталкивался с ситуацией, что у меня затыкался DMA (вообще, из-за таймаута доступа к шине)
из-за того, что CPU, ожидая флага о завершении DMA-транзакции крутился в пустом цикле. Размер этого цикла (команд) был очень маленький,
и сам цикл лежал ещё на границе элемента предвыборки инструкций (весь цикл нельзя было загрузить одним prefetch). Из-за этого шина
постоянно была занята непрерывными операциями выборки команд этого цикла и никакой другой bus master не мог получить доступа к ней.
Вроде это было на ком-то из LPC175/6x.
И самое поганое было в том, что при малейшем изменении кода (в любом месте) этот самый цикл сдвигался немного в памяти и всё чудесным образом начинало работать.
Но недолго, до след. модификации. wink.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Sep 29 2014, 17:18
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Sep 29 2014, 19:30) *
Как-то (не помню уже на каком именно CPU) сталкивался с ситуацией, что у меня затыкался DMA (вообще, из-за таймаута доступа к шине)


NXP небось и не в курсе что у них DMA "затыкается",
а еще есть где-то скрытый регистр со статусом "таймаута доступа к шине". biggrin.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 29 2014, 22:07
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Sep 29 2014, 23:18) *
а еще есть где-то скрытый регистр со статусом "таймаута доступа к шине". biggrin.gif

где? и зачем он?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Sep 30 2014, 07:33
Сообщение #6


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Sep 30 2014, 01:07) *
где? и зачем он?


А как вы узнали про таймаут? В мануале на LPC17xx таймаут шины нигде не упоминается.

Цитата(shreck @ Sep 30 2014, 04:50) *
Выравнивание на границу 16 байт. Здесь все в порядке.

Это само собой. Просто исходно idle задача была штатной от ОСи. Заменил на свою.


Тогда надо еще указать компилятор и опции компиляции потому как memcpy у всех сильно отличается.

А на какую задачу заменили. И зачем вообще включили MQX?
Там же сразу идет инициализация кучи периферии с прерываниями и системный тик включается. Оно надо для таких тестов?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 30 2014, 07:59
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Sep 30 2014, 13:33) *
А как вы узнали про таймаут? В мануале на LPC17xx таймаут шины нигде не упоминается.

Не "таймаут шины", а "таймаут доступа DMA-контроллера к шине".
Я сделал вывод из симптомов:
1. Перенос цикла в ОЗУ - решало проблему.
2. Выравнивание начала цикла на границу предвыборки - решало проблему.
3. Увеличение кол-ва команд в цикле - решало проблему.
4. Ранее на другом CPU (CC5502) сталкивался с подобной проблемой. Там генерилось прерывание ошибки, о котором так и говорилось "генерится после 512 (вроде) безуспешных попыток доступа к шине DMA-контроллера".
К тому-же у LPC175/6x приоритет доступа к шине CPU всегда выше чем у DMA и изменить это невозможно sad.gif((( Это исправлено только в LPC177/8x.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- shreck   Kinetis K70, DMA, memcpy: сравнение скорости копирования.   Sep 25 2014, 11:57
- - AlexandrY   Цитата(shreck @ Sep 25 2014, 14:57) Имеем...   Sep 25 2014, 19:31
|- - shreck   Цитата(AlexandrY @ Sep 26 2014, 02:31) Ну...   Sep 26 2014, 01:38
- - jcxz   Цитата(shreck @ Sep 25 2014, 17:57) DMA м...   Sep 27 2014, 13:56
|- - AlexandrY   Цитата(shreck @ Sep 29 2014, 05:36) Убрал...   Sep 29 2014, 12:11
||- - AlexandrY   Цитата(jcxz @ Sep 30 2014, 10:59) Не ...   Sep 30 2014, 08:45
||- - jcxz   Цитата(AlexandrY @ Sep 30 2014, 14:45) На...   Sep 30 2014, 10:04
|- - shreck   Цитата(AlexandrY @ Sep 30 2014, 14:33) То...   Sep 30 2014, 09:09
|- - AlexandrY   Цитата(shreck @ Sep 30 2014, 12:09) IAR 7...   Sep 30 2014, 09:53
|- - shreck   Цитата(AlexandrY @ Sep 30 2014, 16:53) А ...   Sep 30 2014, 10:26
- - shreck   Цитата(AlexandrY @ Sep 29 2014, 19:11) Ту...   Sep 30 2014, 01:50


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:38
Рейтинг@Mail.ru


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