EugenB2 0 14 января, 2010 Опубликовано 14 января, 2010 (изменено) · Жалоба Имеется платка с 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????? Или я где-то ошибся? Изменено 14 января, 2010 пользователем EugenB2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 14 января, 2010 Опубликовано 14 января, 2010 · Жалоба Классическая ошибка. ICache включить недостаточно, надо сконфигурировать MMU еще, сделать мапинг на этот код и там указать кэширование. Потом включаю ICache. Вуаля, производительность сразу в два раза 92мипса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EugenB2 0 14 января, 2010 Опубликовано 14 января, 2010 · Жалоба Классическая ошибка. ICache включить недостаточно, надо сконфигурировать MMU еще, сделать мапинг на этот код и там указать кэширование. Спасибо, покопаю в этом направлении. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 14 января, 2010 Опубликовано 14 января, 2010 · Жалоба Интересно в какой среде вы работаете. В IAR-е в их примерах так сразу эту операцию делают с MMU. Спасибо, покопаю в этом направлении. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 15 января, 2010 Опубликовано 15 января, 2010 · Жалоба Может быть пригодится - производительность SAM9XE в разных условиях: http://caxapa.ru/144973.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EugenB2 0 15 января, 2010 Опубликовано 15 января, 2010 · Жалоба Интересно в какой среде вы работаете. В IAR-е в их примерах так сразу эту операцию делают с MMU. Как раз им и пользуюсь, но ничего такого в коде и не видел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EugenB2 0 15 января, 2010 Опубликовано 15 января, 2010 (изменено) · Жалоба Почитал даташит по MMU, понял, что можно закопаться в написании с нуля сего дела. Полазил по форуму, по гуглу, что-то нет примеров реализации MMU. Может, у кого есть чего? Изменено 15 января, 2010 пользователем EugenB2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 15 января, 2010 Опубликовано 15 января, 2010 · Жалоба Да не, в IAR-е полно этого добра. Только для Atmel-ов нет. Дело видимо в том, что Atmel-ы плотно пасет Adeneo и из бесплатных сорсов повытягивал все что только можно чтобы усложнить самостоятельный стартап на Atmel-ах. Смотрите файлы ttbl.c в других директориях IAR-а. И по аналогии можете создать свой для Atmel-а. А лучше переходите сразу на NXP. Меньше дурных проблем будет. Почитал даташит по MMU, понял, что можно закопаться в написании с нуля сего дела. Полазил по форуму, по гуглу, что-то нет примеров реализации MMU. Может, у кого есть чего? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 15 января, 2010 Опубликовано 15 января, 2010 · Жалоба То есть я так понял атмеловские примеры для армов работают с производительностью в два раза меньше чем могли бы? Это именно для процов с поддержкой MMU? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EugenB2 0 15 января, 2010 Опубликовано 15 января, 2010 (изменено) · Жалоба То есть я так понял атмеловские примеры для армов работают с производительностью в два раза меньше чем могли бы? Это именно для процов с поддержкой MMU? Получается что да, если с MMU. Ищу вот пример реализации... Да не, в IAR-е полно этого добра. Только для Atmel-ов нет. Дело видимо в том, что Atmel-ы плотно пасет Adeneo и из бесплатных сорсов повытягивал все что только можно чтобы усложнить самостоятельный стартап на Atmel-ах. Смотрите файлы ttbl.c в других директориях IAR-а. И по аналогии можете создать свой для Atmel-а. А лучше переходите сразу на NXP. Меньше дурных проблем будет. Да полно уже нароботок на SAM7S, а вот с NXP тоже не так все гладко. Там оказывается, что ДМА реализован совершенно не так, как в атмелах. Есть несколько каналов ДМА на ВСЮ периферию и крутись как хочешь. Вот у меня были потоковые приложения, где вводилась инфа через 4 порта посредством PDC на постоянке. А если бы на NXP, то все, уперся бы в стену. Потому как каналы все были бы заняты. Но зато в NXP есть DMA SRAM to SRAM... )) и нет глюков с периферией таких. Изменено 15 января, 2010 пользователем EugenB2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 15 января, 2010 Опубликовано 15 января, 2010 · Жалоба А почему для указанного кода недостаточно I-Cache? Как там поможет кэш данных, если данные особо не используются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 15 января, 2010 Опубликовано 15 января, 2010 · Жалоба Пример инициализации MMU для SAM9XE под IAR 5.x Раскладка ОЗУ - кешируются 31 мегабайт из 32, последний мегабайт оставлен для буферов при работе с DMA (некешируемый). Секцию "TLB" нужно задать в .icf - файле, я ее клал в последние 16К последнего мегабайта ОЗУ (в некешируемую область), с адреса 0x21FFC000. mmu.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewlekar 0 15 января, 2010 Опубликовано 15 января, 2010 · Жалоба Пример инициализации MMU для SAM9XE под IAR 5.x Раскладка ОЗУ - кешируются 31 мегабайт из 32, последний мегабайт оставлен для буферов при работе с DMA (некешируемый). Секцию "TLB" нужно задать в .icf - файле, я ее клал в последние 16К последнего мегабайта ОЗУ (в некешируемую область), с адреса 0x21FFC000. То есть секция TLB у вас размещалась в SDRAM? Это не слишком било по производительности? Разглядываю примеры - там располагали эту секцию в SRAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 15 января, 2010 Опубликовано 15 января, 2010 · Жалоба Потом включаю ICache. Вуаля, производительность сразу в два раза 92мипса. А теперь вопрос! Где обещанные 200MIPS????? Или я где-то ошибся? Настройте MMU, включите DCache, настройте Bus Matrix. И выйдете на 200MIPS. Для примера. Простой пакетный bridge на XE512 с включенным одним только ICache - обрабатывает 7K пакетов в секунду. А с настроенным BusMatrix'ом, MMU, и включенным DCache - 30K пакетов в секунду. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EugenB2 0 15 января, 2010 Опубликовано 15 января, 2010 · Жалоба А почему для указанного кода недостаточно 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться