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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Помогите оттестировать производительность микроконтроллера ARM или AVR
RomaRoma
сообщение Jan 10 2014, 19:21
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 10-01-14
Пользователь №: 79 981



Добрый день/ночь!

Прошу помощи форумчан. Хочу использовать микроконтроллер для произведения большого объема вычислений, но не уверен в том, достаточна ли его мощность. Марка микроконтроллера еще не выбрана, скорее всего, на ядре ARM или Cortex.

Прошу счастливых владельцев микроконтроллеров на ядре ARM и/или AVR произвести замер времени выполнения простейшего вычисления с вещественными числами.
Покупать отладочную плату и программатор для этого слишком накладно.

Если производительности не хватит, буду вынужден использовать мощный РС под управлением ОС реального времени. Либо можно запараллелить несколько микроконтроллеров.

Детали кода значения не имеют, нужно просто ПРИМЕРНО оценить длительность вычислений с применением умножения и деления вещественных чисел. Желательно использовать real двойной точности (64 бит), но это не принципиально.

Заранее благодарен всем откликнувшимся!


Пример кода на псевдоязыке

//желательно использовать real двойной точности (64 бит), но это не принципиально
real a = 1;
real b = 1234.567;

//получить текущее значение системного время в мсек или мксек
int StartTime = getCurrentTime();

//рабочий цикл
for (int i=0; i<1000000; i++)
{ a = a + (real(i) / b );
b = b + 0.000001;

//на всякий пожарный
If (a>100000000) {a=1};
}

//итоговая длительность вычислений
int Dur = getCurrentTime() - StartTime;

//используем полученное значение, чтобы слишком умный компилятор не удалил неиспользуемые вычисления
//вместо Print можно сделать что угодно, лишь бы использовать значение!
//например, сохранить в EEPROM
Print(a);
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jan 10 2014, 20:18
Сообщение #2


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



с максимальной оптимизацией по скорости получилось:

для CM3:( IAR DLIB )
250 572 180 тактов для float ( 32 бита )
347 571 190 тактов для double ( 64 бита )

для AVR: ( IAR DLIB )
1 725 881 000 тактов для float ( 32 бита )
3 697 655 000 тактов для double ( 64 бита )


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jan 10 2014, 20:46
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(megajohn @ Jan 10 2014, 15:18) *
с максимальной оптимизацией по скорости получилось:

для CM3:( IAR DLIB )
250 572 180 тактов для float ( 32 бита )

* 72 MHz = 4 секунды примерно? Ы?


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jan 10 2014, 20:53
Сообщение #4


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(A. Fig Lee @ Jan 11 2014, 00:46) *
* 72 MHz = 4 секунды примерно? Ы?


сам офигел. Смотрю дизасм, и вызываются либовские aeabi_i2d, __aeabi_ddiv, __aeabi_dadd, __aeabi_cdrcmple


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
RomaRoma
сообщение Jan 10 2014, 21:04
Сообщение #5





Группа: Новичок
Сообщений: 5
Регистрация: 10-01-14
Пользователь №: 79 981



Цитата(megajohn @ Jan 10 2014, 23:53) *
сам офигел. Смотрю дизасм, и вызываются либовские aeabi_i2d, __aeabi_ddiv, __aeabi_dadd, __aeabi_cdrcmple


Спасибо!
Уточню: такт - имеется в виду такт процессора? нет ли там какого-либо пересчета (кратности и т.д.).
То есть, действительно ли получается 250 млн тактов процессора / 72мгц = примерно 3,5 сек?

дальше, деление реализовано программно (через библиотеку)?
апппаратное деление бывает? или только в DSP?
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jan 10 2014, 21:10
Сообщение #6


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата
Уточню: такт - имеется в виду такт процессора?

да.
Цитата
нет ли там какого-либо пересчета (кратности и т.д.).

пока не наблюдаю
Цитата
То есть, действительно ли получается 250 млн тактов процессора / 72мгц = примерно 3,5 сек?

вроде
Цитата
дальше, деление реализовано программно (через библиотеку)?

да
Цитата
апппаратное деление бывает?

бывает для целочисченных. Смотреть ссылку
для плавучки ручками, с приведением мантис
Цитата
или только в DSP?

там может и есть. Поспрашивайте кто юзает CM4 или BF или прочее

Сообщение отредактировал Herz - Jan 11 2014, 08:34
Причина редактирования: Оформление цитат


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
mantech
сообщение Jan 11 2014, 05:40
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Может имеет смысл глянуть в сторону STM32F407 или иже с ним (M4F) с аппаратным FPU и 168МГц?

Или обязательное условие double-вычисления?

ЗЫ. Может не совсем в тему, но тестировал на АВР и АРМе сишную вирт. задачу, так производительность арма раз в 15 быстрее (целочисленная 16 и 32х битная арифметика)
Тактовая авр 12МГц АРМ - 168..

Сообщение отредактировал Herz - Jan 11 2014, 08:34
Go to the top of the page
 
+Quote Post
slog
сообщение Jan 11 2014, 07:04
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



AVR 8 разрядов, ARM 32. Понятно что производительность AVR на такой арифметике будет на порядки медленнее. AVR хорош для обрадотки 8-ми битных данных. Тексты, всякие протоколы на основе ASCII через UART и другие 8-ми битные порты. Ногами подрыгать тоже не плохо получается. Если нужны 64-бит вычисления то на AVR и смотреть не стоит.


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
stells
сообщение Jan 11 2014, 07:12
Сообщение #9


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(slog @ Jan 11 2014, 11:04) *
AVR 8 разрядов, ARM 32. Понятно что производительность AVR на такой арифметике будет на порядки медленнее.

http://ru.wikipedia.org/wiki/AVR32
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 11 2014, 08:11
Сообщение #10


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

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



Цитата(megajohn @ Jan 10 2014, 23:18) *
с максимальной оптимизацией по скорости получилось:

Можете сам исходный файл показать? Тогда можно будет на разных контроллерах проверить.
Go to the top of the page
 
+Quote Post
ZASADA
сообщение Jan 11 2014, 09:01
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 738
Регистрация: 13-01-11
Из: Минск
Пользователь №: 62 210



+1. кидайте законченный код, запущу на авр32 60 мгц

но вообще за счет более высокой тактовой частоты должны выигрывать ARMы с FPU
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jan 11 2014, 09:14
Сообщение #12


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(ViKo @ Jan 11 2014, 12:11) *
Можете сам исходный файл показать? Тогда можно будет на разных контроллерах проверить.


дык автар дал же, ну вот
Код
void test(void)
{
    #define TT double
//    #define TT float
    
    TT a = 1.0;
    TT b = 1234.567;
    
    for ( int i = 0; i < 1000000; i++ )
    {
        a = a + (TT(i) / b );
        b = b + 0.000001;
        
        if( a > 100000000 ) a = 1;
    }
    LPC_TIM0->TCR = (u32)a;
//    PORTA = ((int)a) & 0x0F;
}


проверял в симуляторах ( реальной железки не было под рукой ).
для AVR делал max_i = 1000; для CM3 max_i = 100000; и умножал результат.


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
RomaRoma
сообщение Jan 11 2014, 14:04
Сообщение #13





Группа: Новичок
Сообщений: 5
Регистрация: 10-01-14
Пользователь №: 79 981



спасибо всем откликнувшимся

Цитата(megajohn @ Jan 11 2014, 12:14) *
проверял в симуляторах ( реальной железки не было под рукой ).


можно ли отталкиваться от этих цифр, которые дал симулятор?
точность порядка +-50% меня вполне устраивает

На что в первую очередь нужно обращать внимание для увеличения производительности ARM (кроме увеличения такт. частоты): наличие аппаратного FPU?
Есть ли заметная (в несколько раз) разница в производительности между различными семействами - ARM9, ARM11, Cortex и т.д., или в принципе они равнозначны, и нужно только выбрать макс. так частоту и аппаратный FPU?

Go to the top of the page
 
+Quote Post
M_Andrey
сообщение Jan 12 2014, 12:03
Сообщение #14


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

Группа: Свой
Сообщений: 158
Регистрация: 15-10-07
Из: Й-Ола
Пользователь №: 31 376



Цитата(megajohn @ Jan 10 2014, 23:18) *
для AVR: ( IAR DLIB )
1 725 881 000 тактов для float ( 32 бита )
3 697 655 000 тактов для double ( 64 бита )


В железе: ATMega128 16MHz, замеры времени по TIMER1 плюс прерывание по его переполнению для увеличения разрядности.


float

Time (10000) = 0x00000063 C069 0,4085825625 сек
Time (100000) = 0x000003B3 6C89 3,8806485625 сек
Time (1000000) = 0x0000230D 2135 36,7539393125 сек


double

Time (10000) = 0x00000942 3A67 9,7084544375 сек
Time (100000) = 0x00005AF5 3CA3 95,3763301875 сек
Time (1000000) = 0x0003887D 262C 948,42531475 сек
Go to the top of the page
 
+Quote Post
RomaRoma
сообщение Jan 12 2014, 15:58
Сообщение #15





Группа: Новичок
Сообщений: 5
Регистрация: 10-01-14
Пользователь №: 79 981



Цитата(M_Andrey @ Jan 12 2014, 15:03) *
В железе: ATMega128 16MHz, замеры времени по TIMER1 плюс прерывание по его переполнению для увеличения разрядности.


float

Time (10000) = 0x00000063 C069 0,4085825625 сек
Time (100000) = 0x000003B3 6C89 0,8806485625 сек
Time (1000000) = 0x0000230D 2135 36,7539393125 сек


double

Time (10000) = 0x00000942 3A67 9,7084544375 сек
Time (100000) = 0x00005AF5 3CA3 95,3763301875 сек
Time (1000000) = 0x0003887D 262C 948,42531475 сек



спасибо.
цифры заставили задуматься, что что-то я не там ищу....Значит мощный x86, и никаких альтернатив
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 August 2025 - 13:50
Рейтинг@Mail.ru


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