Полная версия этой страницы:
быстродействие at91rm9200
sergeeff
Jan 3 2007, 20:30
Уважаемые коллеги!
Повторно возвращаюсь к проблеме быстродействия at91rm9200. Из SDRAM запускаю Dhrystone 2.1 тест (из AT91 Basic Mmu project for AT91RM9200DK). Получаю при PCK=180 MHz, MCK=60 MHz:
-I- WO MMU & I+D Caches Disabled
-I- 8013 Dhrystone per second :: 4 DMIPS
-I- 7984 Dhrystone per second :: 4 DMIPS
-I- 7984 Dhrystone per second :: 4 DMIPS
-I- 7985 Dhrystone per second :: 4 DMIPS
-I- WO MMU & I Cache Enabled
-I- 31030 Dhrystone per second :: 17 DMIPS
-I- 30916 Dhrystone per second :: 17 DMIPS
-I- 30916 Dhrystone per second :: 17 DMIPS
-I- 30916 Dhrystone per second :: 17 DMIPS
-I- MMU & I Cache Enabled
-I- 31030 Dhrystone per second :: 17 DMIPS
-I- 30916 Dhrystone per second :: 17 DMIPS
-I- 30916 Dhrystone per second :: 17 DMIPS
-I- 30916 Dhrystone per second :: 17 DMIPS
-I- MMU & D Cache Enabled
-I- 36358 Dhrystone per second :: 20 DMIPS
-I- 36223 Dhrystone per second :: 20 DMIPS
-I- 36224 Dhrystone per second :: 20 DMIPS
-I- 36224 Dhrystone per second :: 20 DMIPS
Мне думается - катастрофически мало.
Перепроверил все настройки PLLA, PLLB, MCK, SDRAM. Ноль эффекта.
Не запустит ли кто из владельцев at91rm9200 у себя этот тест для сравнения?
Может это я зря из кожи вон лезу?
Цитата(sergeeff @ Jan 3 2007, 20:30)

Может это я зря из кожи вон лезу?
Вряд ли - цифры должны быть примерно на порядок больше. Платы с RM9200 под рукой нет, к сожалению. Проверьте еще, что у Вас время работы правильно считается.
sergeeff
Jan 3 2007, 21:36
Насчет времени работы алгоритма. В проекте идет привязка к 1 сек. такту таймера реального времени. Он работает всегда и не использует прерываний (по крайней мере в данном проекте).
sergeeff
Jan 3 2007, 21:55
Да, хочу добавить. Интересно, что цифры похоже на порядок меньше ожидаемых. У меня сложилось впечатление, что процессор работает на main clk = 18,432 MHz. Но вроде это не так. По крайней мере, изменение значения PLLA отражается на величине dhrystone.
defunct
Jan 4 2007, 05:59
Цитата(sergeeff @ Jan 3 2007, 21:55)

Да, хочу добавить. Интересно, что цифры похоже на порядок меньше ожидаемых. У меня сложилось впечатление, что процессор работает на main clk = 18,432 MHz. Но вроде это не так. По крайней мере, изменение значения PLLA отражается на величине dhrystone.
А включить оба кеша D и I не пробовали?
20 MIPS вполне нормальный показатель с учетом, что ICache выключен.
Сейчас не могу, после праздников.
некоторые версии u-boot на autoboot-е запускает при включенных кэшах, а в ручную при выключенном
...их предки занимались военным делом в течении по меньшей мере двух тысяч лет...
sergeeff
Jan 4 2007, 12:26
Ну вроде сам разобрался, что к чему. Все дело было в TTB. Область SDRAM не была помечена как Cachable.
В результате имеем следующие цифры:
-I- WO MMU & I+D Caches Disabled
4 DMIPS
-I- WO MMU & I Cache Enabled, D Cache Disable
17 DMIPS
-I- MMU & I Cache Enabled, D Cache Disable
17 DMIPS (non buffered, cachable/noncachable)
20 DMIPS (buffered, cachable/noncachable)
-I- MMU & I Cache Enabled, D Cache Enabled
20 DMIPS (non buffered, noncachable)
24 DMIPS (buffered, noncachable)
97 DMIPS (write-through, cachable)
158 DMIPS (write-back, cachable)
Так что частоты все установились вроде правильно, и MIPS'ы похожи на правду.
Цитата(sergeeff @ Jan 4 2007, 12:26)

Так что частоты все установились вроде правильно, и MIPS'ы похожи на правду.
Похоже, что у Вас не вся программа исполняется из SDRAM. Сравните:
Цитата
-I- WO MMU & I+D Caches Disabled
4 DMIPS
и
Цитата
-I- MMU & I Cache Enabled, D Cache Enabled
20 DMIPS (non buffered, noncachable)
Эти значения должны быть почти одинаковыми.
Вот что получилось у меня на ARM9 200MHz и 100MHz шине:
Код
-I- WO MMU & I+D Caches Disabled
8.0 DMIPS
-I- WO MMU & I Cache Enabled, D Cache Disabled
34.9 DMIPS
-I- MMU & I Cache Enabled, D Cache Enabled
8.1 DMIPS (non buffered, noncachable)
8.1 DMIPS (buffered, noncachable)
254.1 DMIPS (write-back, cachable)
sergeeff
Jan 4 2007, 16:13
Спасибо за найденную неточность. Действительно, так и оказалось. Перепроверил, получил такие же цифры.
Ясно, что надо в будущем включать оба кеша. Но пока не видел ни одного внятного примера совместного использования dcache и DMA.
Не попадалось ли кому, что-то на эту тему?
defunct
Jan 4 2007, 20:39
Цитата(sergeeff @ Jan 4 2007, 16:13)

Ясно, что надо в будущем включать оба кеша. Но пока не видел ни одного внятного примера совместного использования dcache и DMA.
Использовать ncnb для работы с DMA..
MMU ARM9 позволяет задавать параметры кеширования страницам памяти:
- no cache, no buffer (ncnb)
- no cache, buffer (ncb)
- cache, no buffer (cnb)
- cache, buffer (cb)
Т.о. вы легко можете задать произвольное количество некешируемой памяти для нормальной работы с DMA.
Неудивительно, что нет внятных примеров совместной работы DCache+DMA, т.к. использовать кешируемый регион для DMA чреват дополнительными небыстрыми операциями Cache Clean (выгрузка в память) и Cache Invalidate (загрузка из памяти).
sergeeff
Jan 4 2007, 23:43
Спасибо за совет. На следующей неделе попробую.
vanokuten
Jan 16 2007, 13:28
Проверил на плате Kwikbyte KB9202:
-I- WO MMU & I+D Caches Disabled
-I- 12550 Dhrystone per second
-I- 12532 Dhrystone per second
-I- 12532 Dhrystone per second
-I- 12531 Dhrystone per second
-I- WO MMU & I Cache Enabled
-I- 47998 Dhrystone per second
-I- 47933 Dhrystone per second
-I- 47933 Dhrystone per second
-I- 47934 Dhrystone per second
-I- MMU & I Cache Enabled
-I- 47998 Dhrystone per second
-I- 47933 Dhrystone per second
-I- 47933 Dhrystone per second
-I- 47934 Dhrystone per second
-I- MMU & D Cache Enabled
-I- 56998 Dhrystone per second
-I- 56921 Dhrystone per second
-I- 56922 Dhrystone per second
-I- 56921 Dhrystone per second
-I- MMU & I+D Caches but I cache reduced (locked elsewhere)
-I- 28860 Dhrystone per second
-I- 28820 Dhrystone per second
-I- 28821 Dhrystone per second
-I- 28820 Dhrystone per second
sergeeff
Jan 16 2007, 15:48
Vanokuten!
Спасибо за присланный тест. У тебя тоже ошибка в TTB - по адресам SDRAM секция определена как uncachable + bufferable. Поэтому не наблюдается существенного прироста производительности.
Ну, а я набрел на следующую проблему. У меня по адресам CS2 сидит FPGA. Определяю эту секцию в TTB как uncachable + unbufferable. Виртуальные адреса определяю как физические (т.е. Virtual Base = Actual Base).
Но при первой же попытке что-то записать в FPGA вылетаю по Data Abort. Пока не могу понять почему.
vanokuten
Jan 24 2007, 18:26
sergeeff,
Пока не было времени разбираться с тестом
я просто запустил приложенный тест бинарник AT91RM9200_BasicMmu.zip
Когда дойдут руки разберусь c cache (надеюсь в течение 1-2 недель)
то опубликую результаты теста еще на одной плате собственной сборки
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.