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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> IMX6S, Скорость SDMA
mantech
сообщение Apr 7 2018, 17:27
Сообщение #1


Гуру
******

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



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

Вопрос к тому, кто копал данный сабж поглубже, а именно на предмет работы контроллера SDMA. Решил посмотреть, с какой скоростью он перекачивает данные из памяти в память, копировал блоками по 64Кб (16384х32 бита) (больше за одну транзакцию он не может). Создал 21 транзакцию (buffer descriptor) (1376235 байт) И засек время, итого получилось 30 копирований в сек. Что составляет примерно 42 мегабайта в сек.
Это очень мало, если сравнить, например, скорость выдачи данных на дисплей - при разрешении 1024х768, 32х битном цвете и 2хслойной графике - это будет 158 мегабайт в сек. Что в несколько раз быстрее. Конечно, здесь разные получатели, в первом случае память, во втором дисплейный порт, но это не должно давать такой разницы.

Может у кого есть варианты, почему так и можно-ли ускорить копирование?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 7 2018, 19:29
Сообщение #2


Гуру
******

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



Цитата(mantech @ Apr 7 2018, 20:27) *
Может у кого есть варианты, почему так и можно-ли ускорить копирование?

А что делал CPU и другие bus-master-ы во время этого теста?
Если он у Вас крутился в цикле ожидания некоего флага и постоянно перечитывал из памяти участок кода с циклом и приоритет доступа к шине у CPU выше чем у DMA, то в таком случае вообще ничего гарантировать нельзя - DMA в таком случае может и вообще ни одной транзакции не выполнить.
Вобщем - непонятно как меряете - правильно ли? Или среднюю температуру по больнице? wink.gif
Думаю, что если положить CPU в сон на время копирования, то процесс может ускориться.
Go to the top of the page
 
+Quote Post
mantech
сообщение Apr 7 2018, 19:38
Сообщение #3


Гуру
******

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



Цитата(jcxz @ Apr 7 2018, 22:29) *
А что делал CPU и другие bus-master-ы во время этого теста?
Если он у Вас крутился в цикле ожидания некоего флага и постоянно перечитывал из памяти участок кода с циклом и приоритет доступа к шине у CPU выше чем у DMA, то в таком случае вообще ничего гарантировать нельзя - DMA в таком случае может и вообще ни одной транзакции не выполнить.
Вобщем - непонятно как меряете - правильно ли? Или среднюю температуру по больнице? wink.gif
Думаю, что если положить CPU в сон на время копирования, то процесс может ускориться.


Да, процессор ждал флага, с памятью работал только видеомодуль, отображая статическую картинку из пямяти.

Не забывайте одну вещь - у процессора есть кэш 1 и 2го уровня, причем большой (64+512Кбайт), вся программа умещается в него т.ч. к памяти (в смысле внешней) он не лезет вообще...

На счет результатов и "средней температуры" - за конкретными цифрами и их точностью не гонюсь, мне гораздо интереснее, можно-ли что ускорить, результаты были получены, измеряя скорость 5 раз, и были одинаковыми, что исключает влияние каких-либо случайных процессов. Программа baremetal, ОС не использовалось.

Сообщение отредактировал mantech - Apr 7 2018, 19:46
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 7 2018, 19:43
Сообщение #4


Гуру
******

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



А на какой частоте работает DMA? И сколько тактов длится копирование одного слова - считали?
Go to the top of the page
 
+Quote Post
mantech
сообщение Apr 7 2018, 19:49
Сообщение #5


Гуру
******

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



Цитата(jcxz @ Apr 7 2018, 22:43) *
А на какой частоте работает DMA? И сколько тактов длится копирование одного слова - считали?


На какой частоте - честно не смотрел, конфигурация по дефолту, но глянуть, пожалуй, можно.
Сколько тактов - подсчитать довольно сложно.
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Apr 14 2018, 19:03
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(mantech @ Apr 7 2018, 20:27) *
копировал блоками по 64Кб (16384х32 бита) (больше за одну транзакцию он не может). Создал 21 транзакцию (buffer descriptor) (1376235 байт) И засек время, итого получилось 30 копирований в сек. Что составляет примерно 42 мегабайта в сек.

Если я правильно понял, то это будет 64К * 21 * 30 = 39МБ/сек чтений и столько же записей.

Цитата
Это очень мало, если сравнить, например, скорость выдачи данных на дисплей - при разрешении 1024х768, 32х битном цвете и 2хслойной графике - это будет 158 мегабайт в сек.

26кадров/сек?

Цитата
Что в несколько раз быстрее.

А вот тут начинается самое интересное - SDRAM память нетороплива при случайных обращениях, но шустро отдает/принимает данные блоками. Выдача данных на дисплей скорее всего идет через буфер, по последовательным адресам и издержки получаются минимальные. Стоит посмотреть имеется ли буфер (и какой) у SDMA, поскольку если для каждого 32битного слова дергать память на чтение/запись, да еще и по разным адресам производительность сильно просядет (тем более у Вас и так подсистема памяти нагружена выводом на дисплей).

Кстати для ускорения можно положить видеобуфер, буфер откуда данные копируются и буфер куда данные копируются в разные банки памяти wink.gif.

P.S. А память то какая (DDR3?) и на какой частоте работает?
P.P.S. Заглянул в доки, я надеюсь Вы используете burst DMA unit?

Сообщение отредактировал Шаманъ - Apr 14 2018, 19:11
Go to the top of the page
 
+Quote Post
mantech
сообщение Apr 17 2018, 16:54
Сообщение #7


Гуру
******

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



Цитата(Шаманъ @ Apr 14 2018, 22:03) *
Если я правильно понял, то это будет 64К * 21 * 30 = 39МБ/сек чтений и столько же записей.


26кадров/сек?


А вот тут начинается самое интересное - SDRAM память нетороплива при случайных обращениях, но шустро отдает/принимает данные блоками. Выдача данных на дисплей скорее всего идет через буфер, по последовательным адресам и издержки получаются минимальные. Стоит посмотреть имеется ли буфер (и какой) у SDMA, поскольку если для каждого 32битного слова дергать память на чтение/запись, да еще и по разным адресам производительность сильно просядет (тем более у Вас и так подсистема памяти нагружена выводом на дисплей).

Кстати для ускорения можно положить видеобуфер, буфер откуда данные копируются и буфер куда данные копируются в разные банки памяти wink.gif.

P.S. А память то какая (DDR3?) и на какой частоте работает?
P.P.S. Заглянул в доки, я надеюсь Вы используете burst DMA unit?


39МБ/сек чтений и столько же записей. - конечно, нужно прочитать по одному адресу и записать в другой.

ДМА работает в режиме линейного адреса, поэтому режиму burst DMA никто не мешает, в даташите написано, что копирует по 16 байт в блоке.

А память то какая (DDR3?) и на какой частоте работает?
DDR3 шириной 32 бита на частоте 400МГц. Судя по этому должна быть очень шустрой rolleyes.gif

Сообщение отредактировал mantech - Apr 17 2018, 16:57
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 17 2018, 21:24
Сообщение #8


Гуру
******

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



Цитата(mantech @ Apr 17 2018, 19:54) *
DDR3 шириной 32 бита на частоте 400МГц. Судя по этому должна быть очень шустрой rolleyes.gif

По моему (весьма небольшому) опыту работы с i.MX6, создалось впечатление, что шустрым на нем не бывает ничего в принципе.
Скажем, в tinymembench i.MX6Q с x64 LPDDR2 @ 400MHz умудряется местами сливать в 2(!) раза Allwinner'у A20 с x32 DDR3 @ 400MHz.
Так что не удивлюсь, если с SDMA такое же "не шмогла", как с гигабитным Ethernet'ом и прочим.
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Apr 18 2018, 05:33
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(mantech @ Apr 17 2018, 19:54) *
в даташите написано, что копирует по 16 байт в блоке.

Т.е. по 4ре слова, ИМХО, это мало для того, чтобы эффективно использовать полосу SDRAM по полной.

Проведите простой эксперимент - просто вычитайте через SDMA какой-нить достаточно большой кусок SDRAMа (страницу, например), и второй эксперимент - просто запишите такой же кусок SDRAMa, а потом сравните время просто чтения, просто записи и копирования по 4ре слова, можете еще поиграться с выводом на дисплей (тест с отключенным и с включенным). Думаю кое-что может проясниться.

Цитата
DDR3 шириной 32 бита на частоте 400МГц. Судя по этому должна быть очень шустрой rolleyes.gif

Это при работе достаточно большими блоками, а случайным доступом или очень маленькими блоками можно производительность SDRAM легко убить.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 18 2018, 08:52
Сообщение #10


Гуру
******

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



Цитата(mantech @ Apr 17 2018, 19:54) *
ДМА работает в режиме линейного адреса, поэтому режиму burst DMA никто не мешает, в даташите написано, что копирует по 16 байт в блоке.

А почему кстати "байт", а не "слов"? Вы надеюсь DMA не в байтовом режиме запускаете?
Ещё часто DMA-контроллеры имеют возможность блокировки шины на время burst-пересылки - можно попробовать использовать её и посмотреть что получится.
Да, конечно, для теста нужно отключить все прочие активности, делать тест только чтения (или только записи). Во внутреннюю память.
Можно отключить рефреш SDRAM на время теста - может какие-то проблемы с конфигурированием SDRAM?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2018, 09:15
Сообщение #11


Гуру
******

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



Больше 19МБайт/с!!!!1111
Или даже 50-60

В любом случае ловить особо нечего.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 18 2018, 09:45
Сообщение #12


Гуру
******

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



Цитата(aaarrr @ Apr 18 2018, 12:15) *
В любом случае ловить особо нечего.

Имхо - наоборот. Раз есть такая разница в результатах, значит есть какие-то факторы на неё влияющие приводящие к таким разным данным. И значит есть перспективы для изменения этих факторов. Вот если-б данные были примерно такими-же - тогда да.....
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 18 2018, 09:51
Сообщение #13


Гуру
******

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



Цитата(jcxz @ Apr 18 2018, 12:45) *
Раз есть такая разница в результатах, значит есть какие-то факторы на неё влияющие приводящие к таким разным данным.

Основным влияющим фактором, думаю, является кривой код примера в первом случае.

Цитата(jcxz @ Apr 18 2018, 12:45) *
И значит есть перспективы для изменения этих факторов. Вот если-б данные были примерно такими-же - тогда да.....

А есть, например, перспективы получения скорости обмена через Ethernet более 400Мбит/с? Вот и здесь, похоже, перспективы аналогичные.
Go to the top of the page
 
+Quote Post
mantech
сообщение Apr 18 2018, 10:36
Сообщение #14


Гуру
******

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



Цитата(jcxz @ Apr 18 2018, 11:52) *
А почему кстати "байт", а не "слов"? Вы надеюсь DMA не в байтовом режиме запускаете?
Ещё часто DMA-контроллеры имеют возможность блокировки шины на время burst-пересылки - можно попробовать использовать её и посмотреть что получится.
Да, конечно, для теста нужно отключить все прочие активности, делать тест только чтения (или только записи). Во внутреннюю память.
Можно отключить рефреш SDRAM на время теста - может какие-то проблемы с конфигурированием SDRAM?


Просто я ошибся, конечно блок 16 DWords. Копирую тоже по 32бита. Без графики не пробовал, просто потому, что без нее нет смысла в этом копировании вообще biggrin.gif

Цитата(aaarrr @ Apr 18 2018, 12:51) *
Основным влияющим фактором, думаю, является кривой код примера в первом случае.


А есть, например, перспективы получения скорости обмена через Ethernet более 400Мбит/с? Вот и здесь, похоже, перспективы аналогичные.


Ну 19метров - это надо искусственно тормозить или многослойную графику фуллХД включать, у меня как раз ближе ко второму результату.

ЗЫ. Сейчас осваиваю аллвиннер, посмотрим, что на нем будет laughing.gif
Go to the top of the page
 
+Quote Post
mantech
сообщение Apr 26 2018, 17:38
Сообщение #15


Гуру
******

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



Цитата(mantech @ Apr 18 2018, 13:36) *
ЗЫ. Сейчас осваиваю аллвиннер, посмотрим, что на нем будет laughing.gif



Вообщем, дошли руки до теста А13
С чем запускалось:
DDR333-16bit mode - 168MHz clock. MMU Enable, DDR Region no cashed, SRAM Region cashed. CPU Clock 682MHz.

Вот что получилось:

Тест копирования с помощью DMA - копировались блоки по 3 МБайта
Без включенного видеоконтроллера 65-72 Мбайт\сек
С видеоконтроллером (1024х600х32) - 55-59 Мбайт\сек

Вот такие дела, и это при том, что МХ6 ДДР - 400 и 32 Бита!!!

ДМА в А13 очень понравился, процедура запуска 10 строчек кода, полная поддержка 2D-режима, жаль в V3s его заменили на МХ6-подобную хрень с кучей дескрипторов crying.gif

Ну и больше 682МГц проц завести не удалось - нужно делать выше питание, 1.2В больше не тянут, как у олимексовцев получилось запустить гигагерц на 1.2В - для меня загадка laughing.gif
Go to the top of the page
 
+Quote Post

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

 


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


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