|
Скорость работы с памятью AT91RM9200... |
|
|
|
 |
Ответов
|
Jun 19 2007, 11:07
|

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

|
Цитата(Paramedic @ Jun 19 2007, 10:14)  Нужно как-то повышать производительность. Вообще SDRAM должна быстрее работать? Сильно улучшит ситуацию, если включите все кеши: инструкций и данных, причем данных в режим WriteBack. Соответственно придется задействовать MMU. У меня общая производительность получалась на уровне 200-го пня.
|
|
|
|
|
Jun 19 2007, 11:35
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(AlexBoy @ Jun 19 2007, 15:07)  Сильно улучшит ситуацию, если включите все кеши: инструкций и данных, причем данных в режим WriteBack. Соответственно придется задействовать MMU. У меня общая производительность получалась на уровне 200-го пня. Всё так и делаю. Вы мне однажды помогли настроить кэши и менеджер памяти соответствующим образом, когда я мучился с тестом производительности. Спасибо Вам! Тогда мне удалось достичь 100 DMIPS при исполнении кода из SDRAM. Но почему-то мне кажется что это не предел производительности. Может быть проблема в "плохой" SDRAM или всё-таки в кривизне моих рук надо искать причину?
|
|
|
|
|
Jun 19 2007, 12:27
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(AlexBoy @ Jun 19 2007, 15:54)  Вспомнил. Попробую запустить у себя тест, если будет сильно отличаться выложу исходники. Мне хватало скорости делать полноэкранную анимацию 800х600 15fps. Буду благодарен за тест. А по поводу 800х600 15fps - это 139 нс на пиксел. Это просто вычитывание из памяти и вывод на экран или ещё какая-то раскодировка? Сколько байт данных на пиксел?
|
|
|
|
|
Jun 19 2007, 13:10
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(AlexBoy @ Jun 19 2007, 16:42)  Спрайтовая графика, копирование блоков с полупрозрачностью. 1 байт на точку. Простите за назойливость, а полупрозрачность реализована по таблице? Величина спрайтов большая? Я просто хочу понять насколько интенсивной была работа с SDRAM.
|
|
|
|
|
Jun 20 2007, 05:12
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

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

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jun 25 2007, 12:11
|
Частый гость
 
Группа: Свой
Сообщений: 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 разные. В любом случае у Вас цифры почти в три раза лучше. Буду пробовать компилировать Ваш проект. Спасибо огромное. Как запущу - отпишусь.
|
|
|
|
|
Jun 25 2007, 13:13
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jun 25 2007, 14:11
|

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

|
Цитата(Paramedic @ Jun 25 2007, 16:13)  Правда пришлось по другому настроить контроллер SDRAM (иначе не заработало): Странно, но почему-то в цикл теста CalcBogoMips() программа не попадает, не дожидается и вываливается по while((loops_per_sec <<= 1)). Кстати, где в Вашем коде инициализируется системный таймер? Попробуйте использовать мой модуль AT91_SDRAM.c, только заменить AT91C_SDRC_NC_8 на AT91C_SDRC_NC_9, должно пойти. Таймер инициализируется там-же в CalcBogoMips, просто задается делитель set_systimer_divider(1); Можно попробовать увеличить задержку delay_long(0x10000), т.к. после установки делителя таймер вначале выдает бяку. Странные результаты по скорости памяти, почти нет разницы что внутри кеша, что вне. P.S. Добейтесь работы моего проекта с минимальными измерениями иначе не поймем отчего тормозит.
|
|
|
|
|
Jun 26 2007, 08:15
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(AlexBoy @ Jun 25 2007, 18:11)  Попробуйте использовать мой модуль AT91_SDRAM.c, только заменить AT91C_SDRC_NC_8 на AT91C_SDRC_NC_9, должно пойти.
Странные результаты по скорости памяти, почти нет разницы что внутри кеша, что вне. P.S. Добейтесь работы моего проекта с минимальными измерениями иначе не поймем отчего тормозит. SDRAM заработала когда заменил T91C_SDRC_NC_8 на AT91C_SDRC_NC_9. Но скорости остались такие же. И еще: функция AT91F_InitPMC() выполняется успешно, только если закоментировать AT91F_EnableMainClock() и AT91F_SetMasterClock(), в противном случае программа виснет. Частоты PLLA, PLLB и MCKL при коментировании вышеназванных функций выставляются правильные.
|
|
|
|
|
Jun 26 2007, 09:31
|

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

|
Цитата(Paramedic @ Jun 26 2007, 11:15)  И еще: функция AT91F_InitPMC() выполняется успешно, только если закоментировать AT91F_EnableMainClock() и AT91F_SetMasterClock(), в противном случае программа виснет. Частоты PLLA, PLLB и MCKL при коментировании вышеназванных функций выставляются правильные. Так в этом и ответ, скорость проца не выставляется, он работает на MainClock (18.432) без умножения. Номиналы деталей в обвязке PLL правильные? Пошагово посмотрите где виснет. Без AT91F_EnableMainClock() не заработает и AT91F_SetMasterClock(). Попробуйте вместо ожидания готовности вставить задержку побольше. Уберите DBG() на всякий случай. Перед запуском нужен аппаратный ресет для сброса настроек плл.
|
|
|
|
|
Jun 26 2007, 09:39
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(AlexBoy @ Jun 26 2007, 13:31)  Так в этом и ответ, скорость проца не выставляется, он работает на MainClock (18.432) без умножения. Номиналы деталей в обвязке PLL правильные? Пошагово посмотрите где виснет. Без AT91F_EnableMainClock() не заработает и AT91F_SetMasterClock(). Попробуйте вместо ожидания готовности вставить задержку побольше. Уберите DBG() на всякий случай. Перед запуском нужен аппаратный ресет для сброса настроек плл. Нет, я навреное не правильно объяснил. Частоты у меня правильные выставляются и процессор работает на 180МГц (смотрел осциллом программируемые клоки). инициализаци возможно не проходит потому что если я работаю с бутлоадером, то инициализация уже там проведена, а если под отладчиком, то тоже в mac-файле настраиваются тактовые. Если бы проц работал на 18МГц, то результаты были б ыгораздо меньше, на эти грабли уже наступал... Меня насторожило сообщение http://electronix.ru/forum/index.php?showtopic=33473 . Может быть дело в компиляторе? Используемый Вами компилятор где можно найти, не подскажете?
|
|
|
|
|
Jun 26 2007, 09:55
|

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

|
Цитата(Paramedic @ Jun 26 2007, 12:39)  Нет, я навреное не правильно объяснил. Частоты у меня правильные выставляются и процессор работает на 180МГц ... Используемый Вами компилятор где можно найти, не подскажете? Понял. Можно в mac файле временно отключить установку частоты и глянуть что получится. Да, для чистоты эксперемента лучше взять такой-же компилятор: RVDS2.2 Есть на местном фтп /pub/MCs/_ARM_/ARM.REALVIEW.DEVELOPER.STUDIO.2.2, если нет доступа, то в муле.
|
|
|
|
|
Jun 26 2007, 11:23
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(AlexBoy @ Jun 26 2007, 13:55)  Понял. Можно в mac файле временно отключить установку частоты и глянуть что получится. Так не получается, потому что чтобы загрузить код в SDRAM надо в mac-файле проинициализировать и PLL и SDRAM контроллер...
|
|
|
|
|
Jun 27 2007, 07:39
|
Частый гость
 
Группа: Свой
Сообщений: 181
Регистрация: 15-01-07
Пользователь №: 24 436

|
Цитата(AlexBoy @ Jun 26 2007, 16:02)  Я не знаю есть ли в IARe понятие scatter файла, т.е. грузить код в SRAM, а после инициализации периферии код перебрасывается в SDRAM. Или ищите RVDS2.2 Удалось запустить Ваш проект под ИАРом с минимальными переделками (только настройки SDRAM вместо 8 Columns поставил 9). BogoMips-тест не запускался, потому что оптимизатор ИАРа пустой цикл просто отказывался выполнять :) Пришлось снизить оптимизацию для функции void delay(int loops). *** CPU Speed Test 59.96 BogoMips 198203 Dhrystone per second, 112 DMIPS *** Memory Speed Test Block 1Kb, Speed 57638 Kb/s Block 2Kb, Speed 57816 Kb/s Block 4Kb, Speed 57848 Kb/s Block 8Kb, Speed 57889 Kb/s Block 16Kb, Speed 57865 Kb/s Block 32Kb, Speed 45038 Kb/s Block 64Kb, Speed 42835 Kb/s Block 128Kb, Speed 42654 Kb/s Block 256Kb, Speed 42653 Kb/s Block 512Kb, Speed 42653 Kb/s Block 1024Kb, Speed 42655 Kb/s Вот такие цифры. Итого BogoMips на 16% хуже, Dhrystone в 2,4 хуже, память при малых блоках почти в 7 раз медленнее, а при больших блоках в 2 с небольшим раза медленнее Ваших. Не утешительно. Как думаете, в чём ещё может быть дело? Судя по BogoMips ядро вроде не сильно медленнее работает, а вот когда дело касается памяти и кэшей - всё тормозит... И ещё: не нашёл в Вашем проекте карты распределения памяти. Вы всё храните в SDRAM? И код, и данные, и стек? -------------------------------------------------------------------------- Попробовал с выключенным DCACH: *** CPU Speed Test 59.96 BogoMips 31597 Dhrystone per second, 17 DMIPS *** Memory Speed Test ... Block 16Kb, Speed 6501 Kb/s ... Block 1024Kb, Speed 6502 Kb/s и с выключенными MMU и DCACH: *** CPU Speed Test 59.96 BogoMips 29022 Dhrystone per second, 16 DMIPS *** Memory Speed Test ... Block 16Kb, Speed 5809 Kb/s ... Block 1024Kb, Speed 5808 Kb/s Т.е. можно сделать вывод, что кэширование работает. Но почему так медленно, не понятно.
Сообщение отредактировал Paramedic - Jun 27 2007, 08:14
|
|
|
|
|
Jun 27 2007, 16:07
|

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

|
Цитата(Paramedic @ Jun 27 2007, 10:39)  И ещё: не нашёл в Вашем проекте карты распределения памяти. Вы всё храните в SDRAM? И код, и данные, и стек? Информация для компилятора в файле t1.scf, а способ кеширования для каждого региона в функции AT91F_InitMMU(). Что могу сказать  пробуйте другой компилятор.
|
|
|
|
Сообщений в этой теме
Paramedic Скорость работы с памятью AT91RM9200... Jun 19 2007, 07:14 Gemm Цитата(Paramedic @ Jun 19 2007, 11:14) Ис... Jun 19 2007, 07:27 Paramedic Цитата(Gemm @ Jun 19 2007, 11:27) У меня ... Jun 19 2007, 07:33                    MemoryTest получил следующее:
*** CPU Speed Test
71.95 BogoMi... Jun 27 2007, 13:50                     Paramedic Цитата(AlexBoy @ Jun 27 2007, 20:07) Инфо... Jun 28 2007, 04:53                      AlexBoy Цитата(Paramedic @ Jun 28 2007, 07:53) Ко... Jun 28 2007, 12:49                       Paramedic Цитата(AlexBoy @ Jun 28 2007, 16:49) могё... Jun 28 2007, 13:05                     Paramedic Цитата(AlexBoy @ Jun 27 2007, 20:07) Инфо... Jul 2 2007, 07:07                      AlexBoy Цитата(Paramedic @ Jul 2 2007, 10:07) Раз... Jul 3 2007, 10:54                       Paramedic Цитата(AlexBoy @ Jul 3 2007, 14:54) Забыл... Jul 3 2007, 11:33                        AlexBoy Цитата(Paramedic @ Jul 3 2007, 14:33) Ког... Jul 3 2007, 11:44                         Paramedic Цитата(AlexBoy @ Jul 3 2007, 15:44) Рад б... Jul 3 2007, 12:12 sergeeff Самая шустрая memcpy для ARM, что я видел, в netbs... Jul 3 2007, 11:54 sergeeff У меня функция из netbsd копирует 1 Mbytes блок за... Jul 3 2007, 14:50 AlexBoy Цитата(sergeeff @ Jul 3 2007, 17:50) У ме... Jul 3 2007, 15:25 sergeeff Попробовал функцию от уважаемого zltigo. У меня он... Jul 3 2007, 18:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|