реклама на сайте
подробности

 
 
> Производительность SAM9XE, непонятки с этим процом
EugenB2
сообщение Jan 14 2010, 21:01
Сообщение #1





Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3  
Start new topic
Ответов (30 - 39)
vmp
сообщение Feb 10 2010, 07:52
Сообщение #31


Местный
***

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



Цитата(V_M_Luck @ Feb 10 2010, 10:38) *
Я пользуюсь примером EugenB2. Единственное, я маплю адреса Boot Memory на Flash, поэтому первая запись TT 0x00000C1A.

В третий раз повторяю - первая запись должна быть 0x00200C1A.
Цитата(V_M_Luck @ Feb 10 2010, 10:38) *
Если использовать SRAM, то необходимо его дробить на мелкие страницы?

Зачем? Его и так мало. Тогда проще вообще не заморачиваться с кешированием, оставить только один I-cache, который не требует включения MMU.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 10 2010, 09:21
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(V_M_Luck @ Feb 10 2010, 10:38) *
Попадаю из первого обращения к стеку.

Куда в этот момент указывает SP?

Цитата(V_M_Luck @ Feb 10 2010, 10:38) *
Я пользуюсь примером EugenB2. Единственное, я маплю адреса Boot Memory на Flash, поэтому первая запись TT 0x00000C1A.

Режим кэширования (WB или WT) никакого значения не имеет.

Цитата(V_M_Luck @ Feb 10 2010, 10:38) *
Когда отключаю DCache, убираю запись в TT 0x00300C1E (SRAM) - попадаю в Data Abort. То же, если TT не исправлять.

Очень похоже, что вы пытаетесь обратиться к памяти, которой физически не существует. Кэш в режиме WT просто маскирует этот косяк. Попробуйте исправить запись на 0x00300C1A - должны тоже получить abort.

Цитата(V_M_Luck @ Feb 10 2010, 10:38) *
Если использовать SRAM, то необходимо его дробить на мелкие страницы?

Нет.

Цитата(vmp @ Feb 10 2010, 10:52) *
В третий раз повторяю - первая запись должна быть 0x00200C1A.

Еще раз спрашиваю: почему? Ответ "потому что иначе не работают прерывания" совершенно не устраивает.


Цитата(vmp @ Feb 10 2010, 09:32) *
В некешируемой области биты С и B должны быть равны 0 (некешируемая и небуферируемая).

Ну, буферизацию как раз можно оставить - зачем гробить производительность окончательно? Благо буфер записи легко очистить перед запуском DMA.
Go to the top of the page
 
+Quote Post
V_M_Luck
сообщение Feb 10 2010, 12:21
Сообщение #33


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 26-11-05
Пользователь №: 11 420



Похоже, что все-таки я неправильно настраивал ТТ.
Вариан тпервых записей, с которыми я мог отключать и подключать DCache:
0x00200C1A, 0x00100C1A,0x00200C1A,0x00300C1E
Цитата(aaarrr @ Feb 10 2010, 11:21) *
Еще раз спрашиваю: почему? Ответ "потому что иначе не работают прерывания" совершенно не устраивает.

Первая запись существенна. Хотя действительно, это совершенно не очевидно.
Цитата(aaarrr @ Feb 10 2010, 11:21) *
Нет.

Я имел ввиду, если под DMA выделить часть SRAM, отключив в ней кэширование и буферизацию.
В общем я так и сделал. Описал таблицу дескрипторов второго уровня и дал 1 КБ SRAM под DMA.

Кстати: в PDC нужно указывать физические, а не виртуальные адреса. Как-то не удобно...


Похоже, что все-таки я неправильно настраивал ТТ.
Вариан тпервых записей, с которыми я мог отключать и подключать DCache:
0x00200C1A, 0x00100C1A,0x00200C1A,0x00300C1E
Цитата(aaarrr @ Feb 10 2010, 11:21) *
Еще раз спрашиваю: почему? Ответ "потому что иначе не работают прерывания" совершенно не устраивает.

Первая запись существенна. Хотя действительно, это совершенно не очевидно.
Цитата(aaarrr @ Feb 10 2010, 11:21) *
Нет.

Я имел ввиду, если под DMA выделить часть SRAM, отключив в ней кэширование и буферизацию.
В общем я так и сделал. Описал таблицу дескрипторов второго уровня и дал 1 КБ SRAM под DMA.

Кстати: в PDC нужно указывать физические, а не виртуальные адреса. Как-то не удобно...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 10 2010, 12:41
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(V_M_Luck @ Feb 10 2010, 15:21) *
Первая запись существенна. Хотя действительно, это совершенно не очевидно.

Пока не станет очевидно, все действия можно приравнять к битью в бубен.
Мапить что-то вручную в нулевой адрес может понадобится только в двух случаях:
1. Если не установлен GPNVM[3], но тогда процессор стартовал бы с ROM
2. Если "случайно" выполняется ремап

Цитата(V_M_Luck @ Feb 10 2010, 15:21) *
Я имел ввиду, если под DMA выделить часть SRAM, отключив в ней кэширование и буферизацию.
В общем я так и сделал. Описал таблицу дескрипторов второго уровня и дал 1 КБ SRAM под DMA.

Понятно.

Цитата(V_M_Luck @ Feb 10 2010, 15:21) *
Кстати: в PDC нужно указывать физические, а не виртуальные адреса. Как-то не удобно...

Зато абсолютно логично. Не знает периферия о виртуальных адресах ничего.
Go to the top of the page
 
+Quote Post
V_M_Luck
сообщение Feb 10 2010, 12:56
Сообщение #35


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 26-11-05
Пользователь №: 11 420



Цитата
2. Если "случайно" выполняется ремап

Что вы имеете в виду?
Я использую как основу Atmel пример. Там в board_lowlevel.c был вызов BOARD_RemapRam(); - я его закоментарил. На всякий случай проверяю на старте GPNVM[3] бит. Еще есть лазейки для "случайного" ремапа?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 10 2010, 13:44
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(V_M_Luck @ Feb 10 2010, 15:56) *
Еще есть лазейки для "случайного" ремапа?

Нет, но проверьте на всякий случай MATRIX_MRCR. Кроме того, следует учитывать, что remap существует только для ядра, периферия (например, PDC) будет всегда использовать обычную карту памяти - тоже потенциальный источник ошибки, правда, не в данном случае.

При обычном раскладе по адресам 0x000000 и 0x200000 будет находится одно и то же содержимое, что исключает необходимость манипуляций с MMU для отражения flash в 0.
Go to the top of the page
 
+Quote Post
V_M_Luck
сообщение Feb 10 2010, 18:07
Сообщение #37


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 26-11-05
Пользователь №: 11 420



Большое спасибо за ответы! a14.gif
Go to the top of the page
 
+Quote Post
vmp
сообщение Feb 11 2010, 06:03
Сообщение #38


Местный
***

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



Цитата(aaarrr @ Feb 10 2010, 12:21) *
Еще раз спрашиваю: почему? Ответ "потому что иначе не работают прерывания" совершенно не устраивает.

Все-таки полез разбираться в работающую программу. smile.gif
Действительно у меня стартап включал ремап. Поскольку программа была слинкована на адреса ПЗУ (0x00200000), то ей было все равно, включен ремап или нет. После отключения ремапа программа работает как с TLB[0] = 0x00200C1A, так и с TLB[0] = 0x00000C1A.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 11 2010, 06:25
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Славно, ПСС найдены, все встало на свои места smile.gif
Go to the top of the page
 
+Quote Post
sulsher
сообщение Sep 23 2011, 06:27
Сообщение #40





Группа: Участник
Сообщений: 6
Регистрация: 23-09-11
Пользователь №: 67 341



а не подскажите пример решения данной проблемы на ассемблере?
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 02:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01477 секунд с 7
ELECTRONIX ©2004-2016