|
Производительность SAM9XE, непонятки с этим процом |
|
|
|
Jan 14 2010, 21:01
|
Группа: Участник
Сообщений: 13
Регистрация: 14-01-10
Пользователь №: 54 820

|
Имеется платка с 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 - Jan 14 2010, 21:06
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 14)
|
Jan 14 2010, 22:00
|
Группа: Участник
Сообщений: 13
Регистрация: 14-01-10
Пользователь №: 54 820

|
Цитата(AlexandrY @ Jan 14 2010, 23:35)  Классическая ошибка. ICache включить недостаточно, надо сконфигурировать MMU еще, сделать мапинг на этот код и там указать кэширование.
Спасибо, покопаю в этом направлении.
|
|
|
|
|
Jan 15 2010, 06:55
|
Группа: Участник
Сообщений: 13
Регистрация: 14-01-10
Пользователь №: 54 820

|
Цитата(AlexandrY @ Jan 15 2010, 00:03)  Интересно в какой среде вы работаете. В IAR-е в их примерах так сразу эту операцию делают с MMU. Как раз им и пользуюсь, но ничего такого в коде и не видел.
|
|
|
|
|
Jan 15 2010, 08:40
|
Группа: Участник
Сообщений: 13
Регистрация: 14-01-10
Пользователь №: 54 820

|
Почитал даташит по MMU, понял, что можно закопаться в написании с нуля сего дела. Полазил по форуму, по гуглу, что-то нет примеров реализации MMU. Может, у кого есть чего?
Сообщение отредактировал EugenB2 - Jan 15 2010, 08:41
|
|
|
|
|
Jan 15 2010, 08:56
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Да не, в IAR-е полно этого добра. Только для Atmel-ов нет. Дело видимо в том, что Atmel-ы плотно пасет Adeneo и из бесплатных сорсов повытягивал все что только можно чтобы усложнить самостоятельный стартап на Atmel-ах. Смотрите файлы ttbl.c в других директориях IAR-а. И по аналогии можете создать свой для Atmel-а. А лучше переходите сразу на NXP. Меньше дурных проблем будет. Цитата(EugenB2 @ Jan 15 2010, 10:40)  Почитал даташит по MMU, понял, что можно закопаться в написании с нуля сего дела. Полазил по форуму, по гуглу, что-то нет примеров реализации MMU. Может, у кого есть чего?
|
|
|
|
|
Jan 15 2010, 10:34
|
Группа: Участник
Сообщений: 13
Регистрация: 14-01-10
Пользователь №: 54 820

|
Цитата(andrewlekar @ Jan 15 2010, 12:23)  То есть я так понял атмеловские примеры для армов работают с производительностью в два раза меньше чем могли бы? Это именно для процов с поддержкой MMU? Получается что да, если с MMU. Ищу вот пример реализации... Цитата(AlexandrY @ Jan 15 2010, 10:56)  Да не, в IAR-е полно этого добра. Только для Atmel-ов нет. Дело видимо в том, что Atmel-ы плотно пасет Adeneo и из бесплатных сорсов повытягивал все что только можно чтобы усложнить самостоятельный стартап на Atmel-ах. Смотрите файлы ttbl.c в других директориях IAR-а. И по аналогии можете создать свой для Atmel-а. А лучше переходите сразу на NXP. Меньше дурных проблем будет. Да полно уже нароботок на SAM7S, а вот с NXP тоже не так все гладко. Там оказывается, что ДМА реализован совершенно не так, как в атмелах. Есть несколько каналов ДМА на ВСЮ периферию и крутись как хочешь. Вот у меня были потоковые приложения, где вводилась инфа через 4 порта посредством PDC на постоянке. А если бы на NXP, то все, уперся бы в стену. Потому как каналы все были бы заняты. Но зато в NXP есть DMA SRAM to SRAM... )) и нет глюков с периферией таких.
Сообщение отредактировал EugenB2 - Jan 15 2010, 10:28
|
|
|
|
|
Jan 15 2010, 11:32
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070

|
Пример инициализации MMU для SAM9XE под IAR 5.x Раскладка ОЗУ - кешируются 31 мегабайт из 32, последний мегабайт оставлен для буферов при работе с DMA (некешируемый). Секцию "TLB" нужно задать в .icf - файле, я ее клал в последние 16К последнего мегабайта ОЗУ (в некешируемую область), с адреса 0x21FFC000.
Прикрепленные файлы
mmu.rar ( 1.94 килобайт )
Кол-во скачиваний: 187
|
|
|
|
|
Jan 15 2010, 12:20
|
Группа: Участник
Сообщений: 13
Регистрация: 14-01-10
Пользователь №: 54 820

|
Цитата(andrewlekar @ Jan 15 2010, 13:06)  А почему для указанного кода недостаточно 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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|