Перейти к содержанию
    

Производительность SAM9XE

Имеется платка с SAM9XE512, все запускает, шьется, работает. Но есть одно неприятное НО. Решил я затестить производительность сей штуки. Сделал тупо просто:

t=GetTickCount(); 1ms тики

for(k=0;k < 6600000; k++); подобрал, чтобы 1секунду примерно

t=GetTickCount()-t; равно 1000

(вообще сделал вывод в DEBUG и компом проверил отсчет 1 секунды)

 

Итак получаем в дизасме(позже выложу), что цикл занимает 5 инструкций, одна из них 2такта . Итого 7 тактов.

Итак 7*6600000=46200000 46 MIPS

Потом включаю ICache. Вуаля, производительность сразу в два раза 92мипса.

А теперь вопрос! Где обещанные 200MIPS????? Или я где-то ошибся?

Изменено пользователем EugenB2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Классическая ошибка. ICache включить недостаточно, надо сконфигурировать MMU еще, сделать мапинг на этот код и там указать кэширование.

Потом включаю ICache. Вуаля, производительность сразу в два раза 92мипса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Классическая ошибка. ICache включить недостаточно, надо сконфигурировать MMU еще, сделать мапинг на этот код и там указать кэширование.

Спасибо, покопаю в этом направлении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно в какой среде вы работаете. В IAR-е в их примерах так сразу эту операцию делают с MMU.

Спасибо, покопаю в этом направлении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть пригодится - производительность SAM9XE в разных условиях:

http://caxapa.ru/144973.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно в какой среде вы работаете. В IAR-е в их примерах так сразу эту операцию делают с MMU.

Как раз им и пользуюсь, но ничего такого в коде и не видел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал даташит по MMU, понял, что можно закопаться в написании с нуля сего дела. Полазил по форуму, по гуглу, что-то нет примеров реализации MMU. Может, у кого есть чего?

Изменено пользователем EugenB2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да не, в IAR-е полно этого добра. Только для Atmel-ов нет.

Дело видимо в том, что Atmel-ы плотно пасет Adeneo и из бесплатных сорсов повытягивал все что только можно чтобы усложнить самостоятельный стартап на Atmel-ах.

Смотрите файлы ttbl.c в других директориях IAR-а. И по аналогии можете создать свой для Atmel-а.

А лучше переходите сразу на NXP. Меньше дурных проблем будет.

 

Почитал даташит по MMU, понял, что можно закопаться в написании с нуля сего дела. Полазил по форуму, по гуглу, что-то нет примеров реализации MMU. Может, у кого есть чего?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть я так понял атмеловские примеры для армов работают с производительностью в два раза меньше чем могли бы? Это именно для процов с поддержкой MMU?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть я так понял атмеловские примеры для армов работают с производительностью в два раза меньше чем могли бы? Это именно для процов с поддержкой MMU?

Получается что да, если с MMU. Ищу вот пример реализации...

 

Да не, в IAR-е полно этого добра. Только для Atmel-ов нет.

Дело видимо в том, что Atmel-ы плотно пасет Adeneo и из бесплатных сорсов повытягивал все что только можно чтобы усложнить самостоятельный стартап на Atmel-ах.

Смотрите файлы ttbl.c в других директориях IAR-а. И по аналогии можете создать свой для Atmel-а.

А лучше переходите сразу на NXP. Меньше дурных проблем будет.

Да полно уже нароботок на SAM7S, а вот с NXP тоже не так все гладко. Там оказывается, что ДМА реализован совершенно не так, как в атмелах. Есть несколько каналов ДМА на ВСЮ периферию и крутись как хочешь. Вот у меня были потоковые приложения, где вводилась инфа через 4 порта посредством PDC на постоянке. А если бы на NXP, то все, уперся бы в стену. Потому как каналы все были бы заняты.

Но зато в NXP есть DMA SRAM to SRAM... )) и нет глюков с периферией таких.

Изменено пользователем EugenB2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему для указанного кода недостаточно I-Cache? Как там поможет кэш данных, если данные особо не используются?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример инициализации MMU для SAM9XE под IAR 5.x

Раскладка ОЗУ - кешируются 31 мегабайт из 32, последний мегабайт оставлен для буферов при работе с DMA (некешируемый).

Секцию "TLB" нужно задать в .icf - файле, я ее клал в последние 16К последнего мегабайта ОЗУ (в некешируемую область), с адреса 0x21FFC000.

mmu.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример инициализации MMU для SAM9XE под IAR 5.x

Раскладка ОЗУ - кешируются 31 мегабайт из 32, последний мегабайт оставлен для буферов при работе с DMA (некешируемый).

Секцию "TLB" нужно задать в .icf - файле, я ее клал в последние 16К последнего мегабайта ОЗУ (в некешируемую область), с адреса 0x21FFC000.

То есть секция TLB у вас размещалась в SDRAM? Это не слишком било по производительности? Разглядываю примеры - там располагали эту секцию в SRAM.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потом включаю ICache. Вуаля, производительность сразу в два раза 92мипса.

А теперь вопрос! Где обещанные 200MIPS????? Или я где-то ошибся?

Настройте MMU, включите DCache, настройте Bus Matrix. И выйдете на 200MIPS.

 

Для примера.

Простой пакетный bridge на XE512 с включенным одним только ICache - обрабатывает 7K пакетов в секунду. А с настроенным BusMatrix'ом, MMU, и включенным DCache - 30K пакетов в секунду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему для указанного кода недостаточно I-Cache? Как там поможет кэш данных, если данные особо не используются?

Cам в догадках...

\ ??testit_0:

\ 00000008 10109FE5 LDR R1,??testit_1 ;; 0xd59f80 единственное обращение к памяти, а производительности особо не прибавилось

\ 0000000C 010050E1 CMP R0,R1

\ 00000010 0100002A BCS ??testit_2

\ 00000014 010090E2 ADDS R0,R0,#+1

\ 00000018 FAFFFFEA B ??testit_0

468 }

\ ??testit_2:

\ 0000001C 1EFF2FE1 BX LR ;; return

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...