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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> ARM cycle count, как правильно мерять производительность кода.
tocha
сообщение Dec 3 2009, 17:21
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 16-05-05
Из: Kiev
Пользователь №: 5 080



Цитата(aaarrr @ Dec 3 2009, 14:44) *
P.S. LDR выполняется 3 такта.

почему три?
по документации один вроде, если результат не используется на следующем такте и не модифицируется смещение.
или я - неправ?
Go to the top of the page
 
+Quote Post
klen
сообщение Dec 3 2009, 20:32
Сообщение #17


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



мое мнение - 1 лапка + 1 осцилограф
реальное время
Go to the top of the page
 
+Quote Post
KRS
сообщение Dec 3 2009, 20:59
Сообщение #18


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(klen @ Dec 3 2009, 23:32) *
мое мнение - 1 лапка + 1 осцилограф
реальное время

Да так можно померять только короткую опреацию - на несколько тактов ядра! То что подлиннее будет не точно! Проще встроенным таймером на частоте ядра, или если совсем длинное чтото с прескалером.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 3 2009, 21:34
Сообщение #19


Гуру
******

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



Цитата(tocha @ Dec 3 2009, 20:21) *
почему три?
по документации один вроде, если результат не используется на следующем такте и не модифицируется смещение.
или я - неправ?

По документации - S+N+I (+S+N if R15 loaded), т.е. 3 или 5 тактов.

P.S. Пардон, речь о Cortex-M3? Тогда вы отчасти правы, но один такт это все равно исключение.
Go to the top of the page
 
+Quote Post
KRS
сообщение Dec 3 2009, 21:42
Сообщение #20


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(aaarrr @ Dec 4 2009, 00:34) *
По документации - S+N+I (+S+N if R15 loaded), т.е. 3 или 5 тактов.

А я вроде мерял на ARM7 LPC - 2 такта получалось.

Кстати если работать с FAST IO у LPC эти регистры прямо к ядру подключены то на ARM7 цикл
Код
while(1) {
FIO0SET0 = 1;
FIO0CLR0 = 1;
}

выполняетя 6 таков - по 2 такта STR и 2 такта branch
а вот на LPC1700 уже за 4 такта - по 1 такту STR и 2 такта branch, потому что если добавить еще пару SET CLR - то цикл становится 6 тактов. (причем мерял на 100 Mhz частоте, но код был из RAM).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 3 2009, 21:48
Сообщение #21


Гуру
******

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



Цитата(KRS @ Dec 4 2009, 00:42) *
А я вроде мерял на ARM7 LPC - 2 такта получалось.

На ARM7 STR - 2, LDR - 3/5.

B - тоже 3, так что должно было получится 7 тактов у вашего цикла.
Go to the top of the page
 
+Quote Post
KRS
сообщение Dec 3 2009, 23:52
Сообщение #22


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(aaarrr @ Dec 4 2009, 00:48) *
B - тоже 3, так что должно было получится 7 тактов у вашего цикла.

На ARM7 уже давно измерял, наверное там полный регистр FIO использовал 32 бита.
Но вот на Cortex-M3 точно байтовый - меня и поразила скорость, подумал было что PLL слишком сильно разогнал smile.gif
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Dec 4 2009, 00:40
Сообщение #23


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(KRS @ Dec 3 2009, 15:59) *
Да так можно померять только короткую опреацию - на несколько тактов ядра! То что подлиннее будет не точно! Проще встроенным таймером на частоте ядра, или если совсем длинное чтото с прескалером.

Logic Analyzer. У tech-tools удобный для таких измерений -- разрешение 10нс, а периоды можно мерять хоть 1 час хоть 10. самые полезные 500 баксов которые я когда либо потратил на иструменты.

Сообщение отредактировал ar__systems - Dec 4 2009, 00:44
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 4 2009, 16:25
Сообщение #24


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Bosicc @ Dec 3 2009, 17:03) *
Я запускаю Keil Simulator, ставлю брейкпоин на нужную мне функцию, открываю Performance Analyzer и вижу в нем
Calls, Time(Sec), Time(%). Следовательно, могу померять только время. А где можно посмотреть Cycles?
У меня uVision V3.62c, MDK 3.22a

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


Запускаете отладку, внизу, в статусе, ближе к правому краю t1: ...
Жмете правой кнопкой мыши... наводите мышь... А время в такты перевести сможете, вы же частоту генератора знаете.
Правда, у меня Keil 4.0

Сообщение отредактировал ViKo - Dec 4 2009, 16:28
Go to the top of the page
 
+Quote Post
tocha
сообщение Dec 16 2009, 12:22
Сообщение #25


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 16-05-05
Из: Kiev
Пользователь №: 5 080



Цитата(AlexandrY @ Dec 3 2009, 17:27) *
А.. , так у вас притензии к Performance Analyzer-у Keil-а. biggrin.gif
Смотрите описание команды командной строки Keil-а - PerformanceAnalyze

Открываю mVision3 v3.62с - Смотрю описание PerformanceAnalyze и вижу сноску
что команда не доступна в arm симуляторе.


Я правильно понимаю, что в симуляторе (без железа) кол-во тактов ядра на выполнение куска кода подсчитать невозможно или я не прав?
Если неправ, ткните где написано, как это сделать.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 5th July 2025 - 03:43
Рейтинг@Mail.ru


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