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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Скорость работы с памятью AT91RM9200...
Paramedic
сообщение Jun 19 2007, 07:14
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436



Использую AT91RM9200 + SDRAM. Приходится работать с изображениями и часто переливать данные из SDRAM и обратно. Протестировал скорость записи и выяснил что на запись слова в SDRAM тратится порядка 6-7 тактов MCK. По-моему это многовато. Нужно как-то повышать производительность.
Вообще SDRAM должна быстрее работать?
Это контроллер SDRAM в выбранном арме такой фиговый или я не так его использую?
Положение ещё усугубляет то, что на отладочной плате чипы памяти какие-то странные, не могу найти даташит, написано на них 8MX16TI и ещё вверху на одном буквы AHC а на другом AGM (что тоже настораживает). Аргуссофт сказал что это прямые аналоги микроновских MT48LC8M16A2.
Если я поставлю вместо SDRAM быструю статическую RAM, на сколько я смогу ощутить прирост производительности при активной работе с памятью?
Go to the top of the page
 
+Quote Post
Gemm
сообщение Jun 19 2007, 07:27
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 61
Регистрация: 2-08-05
Из: Коломна
Пользователь №: 7 283



Цитата(Paramedic @ Jun 19 2007, 11:14) *
Использую AT91RM9200 + SDRAM. Приходится работать с изображениями и часто переливать данные из SDRAM и обратно. Протестировал скорость записи и выяснил что на запись слова в SDRAM тратится порядка 6-7 тактов MCK. По-моему это многовато. Нужно как-то повышать производительность.
Вообще SDRAM должна быстрее работать?
Это контроллер SDRAM в выбранном арме такой фиговый или я не так его использую?
Положение ещё усугубляет то, что на отладочной плате чипы памяти какие-то странные, не могу найти даташит, написано на них 8MX16TI и ещё вверху на одном буквы AHC а на другом AGM (что тоже настораживает). Аргуссофт сказал что это прямые аналоги микроновских MT48LC8M16A2.
Если я поставлю вместо SDRAM быструю статическую RAM, на сколько я смогу ощутить прирост производительности при активной работе с памятью?



У меня похожая задача. Для копирования блоков сначала использовал стандартную функцию memcpy (IAR EWB for ARM). Копировалось ужасно медленно. Переписал ее на асме с использованием инструкций LDMIA STMIA - скорости подскочили на порядки. Как делаете Вы?
Go to the top of the page
 
+Quote Post
Paramedic
сообщение Jun 19 2007, 07:33
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436



Цитата(Gemm @ Jun 19 2007, 11:27) *
У меня похожая задача. Для копирования блоков сначала использовал стандартную функцию memcpy (IAR EWB for ARM). Копировалось ужасно медленно. Переписал ее на асме с использованием инструкций LDMIA STMIA - скорости подскочили на порядки. Как делаете Вы?


При обработке изображений у меня не последовательный доступ к памяти, поэтому не использую memcpy. Просто идёт чтение запись попиксельно. Пишу на C в ИАРе, в асме пока не силён. А какая скорость была при использовании memcpy у Вас?
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Jun 19 2007, 11:07
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(Paramedic @ Jun 19 2007, 10:14) *
Нужно как-то повышать производительность.
Вообще SDRAM должна быстрее работать?

Сильно улучшит ситуацию, если включите все кеши: инструкций и данных, причем данных в режим WriteBack. Соответственно придется задействовать MMU.
У меня общая производительность получалась на уровне 200-го пня.
Go to the top of the page
 
+Quote Post
Paramedic
сообщение Jun 19 2007, 11:35
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436



Цитата(AlexBoy @ Jun 19 2007, 15:07) *
Сильно улучшит ситуацию, если включите все кеши: инструкций и данных, причем данных в режим WriteBack. Соответственно придется задействовать MMU.
У меня общая производительность получалась на уровне 200-го пня.

Всё так и делаю. Вы мне однажды помогли настроить кэши и менеджер памяти соответствующим образом, когда я мучился с тестом производительности. Спасибо Вам! Тогда мне удалось достичь 100 DMIPS при исполнении кода из SDRAM. Но почему-то мне кажется что это не предел производительности. Может быть проблема в "плохой" SDRAM или всё-таки в кривизне моих рук надо искать причину? smile.gif
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Jun 19 2007, 11:54
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(Paramedic @ Jun 19 2007, 14:35) *
Но почему-то мне кажется что это не предел производительности. Может быть проблема в "плохой" SDRAM или всё-таки в кривизне моих рук надо искать причину? smile.gif

Вспомнил. Попробую запустить у себя тест, если будет сильно отличаться выложу исходники. Мне хватало скорости делать полноэкранную анимацию 800х600 15fps.
Go to the top of the page
 
+Quote Post
Paramedic
сообщение Jun 19 2007, 12:27
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436



Цитата(AlexBoy @ Jun 19 2007, 15:54) *
Вспомнил. Попробую запустить у себя тест, если будет сильно отличаться выложу исходники. Мне хватало скорости делать полноэкранную анимацию 800х600 15fps.


Буду благодарен за тест.
А по поводу 800х600 15fps - это 139 нс на пиксел. Это просто вычитывание из памяти и вывод на экран или ещё какая-то раскодировка? Сколько байт данных на пиксел?
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Jun 19 2007, 12:42
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(Paramedic @ Jun 19 2007, 15:27) *
Буду благодарен за тест.
А по поводу 800х600 15fps - это 139 нс на пиксел. Это просто вычитывание из памяти и вывод на экран или ещё какая-то раскодировка? Сколько байт данных на пиксел?

Спрайтовая графика, копирование блоков с полупрозрачностью. 1 байт на точку.
Go to the top of the page
 
+Quote Post
Paramedic
сообщение Jun 19 2007, 13:10
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436



Цитата(AlexBoy @ Jun 19 2007, 16:42) *
Спрайтовая графика, копирование блоков с полупрозрачностью. 1 байт на точку.

Простите за назойливость, а полупрозрачность реализована по таблице? Величина спрайтов большая? Я просто хочу понять насколько интенсивной была работа с SDRAM.
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Jun 19 2007, 13:24
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Часть по альфа-таблице (16 градаций), часть по цвету. Макс. размер спрайта 120х120 15шт, и мелких около 20шт. В основном проверки и целочисленное сложение, сдвиги. Многое от компилятора зависит, как он сможет оптимизировать. Пользуюсь RVDS2.2.
Go to the top of the page
 
+Quote Post
Paramedic
сообщение Jun 20 2007, 05:12
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436



Цитата(AlexBoy @ Jun 19 2007, 17:24) *
Часть по альфа-таблице (16 градаций), часть по цвету. Макс. размер спрайта 120х120 15шт, и мелких около 20шт. В основном проверки и целочисленное сложение, сдвиги. Многое от компилятора зависит, как он сможет оптимизировать. Пользуюсь RVDS2.2.

Да, видимо Ваша система пошустрее моей работает с SDRAM... Жду с нетерпением от Вас результатов запуска теста.
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Jun 25 2007, 11:31
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(Paramedic @ Jun 20 2007, 08:12) *
Да, видимо Ваша система пошустрее моей работает с SDRAM... Жду с нетерпением от Вас результатов запуска теста.

Как обещал выкладываю проект. Скорость максимальная какую смог выжать. Можно еще уменьшить делитель MCK до 2 (90Mhz), но за надежность не отвечаю. Попробуйте залить готовый test.bin из проекта и сравните с результатом компиляции вышим компилятором. Интересно сравнение компиляторов. Мои результаты:
Core Clock: 180Mhz, Master Clock: 60Mhz

*** CPU Speed Test
71.95 BogoMips
472350 Dhrystone per second, 268 DMIPS

*** Memory Speed Test
Block 1Kb, Speed 353552 Kb/s
Block 2Kb, Speed 357616 Kb/s
Block 4Kb, Speed 361936 Kb/s
Block 8Kb, Speed 364148 Kb/s
Block 16Kb, Speed 358666 Kb/s
Block 32Kb, Speed 130316 Kb/s
Block 64Kb, Speed 113957 Kb/s
Block 128Kb, Speed 112377 Kb/s
Block 256Kb, Speed 112338 Kb/s
Block 512Kb, Speed 112345 Kb/s
Block 1024Kb, Speed 112351 Kb/s
Прикрепленные файлы
Прикрепленный файл  ARM_Speed.zip ( 168.27 килобайт ) Кол-во скачиваний: 134
 
Go to the top of the page
 
+Quote Post
Paramedic
сообщение Jun 25 2007, 12:11
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436



Цитата(AlexBoy @ Jun 25 2007, 15:31) *
Как обещал выкладываю проект. Скорость максимальная какую смог выжать. Можно еще уменьшить делитель MCK до 2 (90Mhz), но за надежность не отвечаю. Попробуйте залить готовый test.bin из проекта и сравните с результатом компиляции вышим компилятором. Интересно сравнение компиляторов. Мои результаты:
Core Clock: 180Mhz, Master Clock: 60Mhz

*** CPU Speed Test
71.95 BogoMips
472350 Dhrystone per second, 268 DMIPS

*** Memory Speed Test
Block 1Kb, Speed 353552 Kb/s
Block 2Kb, Speed 357616 Kb/s
Block 4Kb, Speed 361936 Kb/s
Block 8Kb, Speed 364148 Kb/s
Block 16Kb, Speed 358666 Kb/s
Block 32Kb, Speed 130316 Kb/s
Block 64Kb, Speed 113957 Kb/s
Block 128Kb, Speed 112377 Kb/s
Block 256Kb, Speed 112338 Kb/s
Block 512Kb, Speed 112345 Kb/s
Block 1024Kb, Speed 112351 Kb/s



Бинарник не запустился - наверное SDRAM разные. В любом случае у Вас цифры почти в три раза лучше. Буду пробовать компилировать Ваш проект. Спасибо огромное. Как запущу - отпишусь.
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Jun 25 2007, 12:24
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(Paramedic @ Jun 25 2007, 15:11) *
Бинарник не запустился - наверное SDRAM разные.

Заливали терминалом по Х-модем? порт 11520.8.1
Go to the top of the page
 
+Quote Post
Paramedic
сообщение Jun 25 2007, 13:13
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436



Цитата(AlexBoy @ Jun 25 2007, 16:24) *
Заливали терминалом по Х-модем? порт 11520.8.1

Если Вы имели ввиду скорость 115200 - то да.


Вот что получилось у меня:

Core Clock: 180Mhz, Master Clock: 60Mhz

*** CPU Speed Test
198121 Dhrystone per second, 112 DMIPS

*** Memory Speed Test
Block 1Kb, Speed 57192 Kb/s
Block 2Kb, Speed 57368 Kb/s
Block 4Kb, Speed 57394 Kb/s
Block 8Kb, Speed 57436 Kb/s
Block 16Kb, Speed 57415 Kb/s
Block 32Kb, Speed 44703 Kb/s
Block 64Kb, Speed 42534 Kb/s
Block 128Kb, Speed 42329 Kb/s
Block 256Kb, Speed 42330 Kb/s
Block 512Kb, Speed 42331 Kb/s
Block 1024Kb, Speed 42331 Kb/s
//----------------------------------------------------------------------------------------------------
Правда пришлось по другому настроить контроллер SDRAM (иначе не заработало):

int i;
volatile int *pSDRAM = (int *)BASE_EBI_CS1_ADDRESS;

//* Configure PIOC as peripheral (D16/D31)
AT91F_SDRC_CfgPIO();

//* Setup MEMC to support CS1=SDRAM
AT91C_BASE_EBI->EBI_CSA |= AT91C_EBI_CS1A;
AT91C_BASE_EBI->EBI_CFGR = (AT91C_EBI_DBPUC & 0x00) | (AT91C_EBI_EBSEN & 0x00);

//* Init SDRAM
//* 1. A minimum pause of 200us is provided to precede any signal toggle
AT91C_BASE_SDRC->SDRC_CR = AT91C_SDRC_NC_9 | AT91C_SDRC_NR_12 | AT91C_SDRC_NB_4_BANKS | AT91C_SDRC_CAS_2
| 0x100 | 0x4000 | 0x8000
| 0x880000
| 0x21000000;


//* 2. A Precharge All command is issued to the SDRAM
AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_PRCGALL_CMD;
*pSDRAM = 0;

//* 3. Eight Auto-refresh are provided
AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_RFSH_CMD;
for(i=0;i<8;i++)
*pSDRAM = 0;

//* 4. A mode register cycle is issued to program the SDRAM parameters
AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_LMR_CMD;
*(pSDRAM+0x80) = 0;

//* 5. Write refresh rate into SDRAMC refresh timer COUNT register
AT91C_BASE_SDRC->SDRC_TR = (AT91C_SDRC_COUNT & 0x2E0);
*pSDRAM = 0;

//* 6. A Normal Mode Command is provided, 3 clocks after tMRD is set
AT91C_BASE_SDRC->SDRC_MR = AT91C_SDRC_MODE_NORMAL_CMD;
*pSDRAM = 0;

Странно, но почему-то в цикл теста CalcBogoMips() программа не попадает, не дожидается и вываливается по while((loops_per_sec <<= 1)). Кстати, где в Вашем коде инициализируется системный таймер?

Сообщение отредактировал Paramedic - Jun 25 2007, 13:15
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 15th August 2025 - 09:39
Рейтинг@Mail.ru


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