|
Помогите оттестировать производительность микроконтроллера ARM или AVR |
|
|
|
Jan 10 2014, 19:21
|
Группа: Новичок
Сообщений: 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);
|
|
|
|
|
Jan 10 2014, 21:04
|
Группа: Новичок
Сообщений: 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?
|
|
|
|
|
Jan 10 2014, 21:10
|

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

|
Цитата Уточню: такт - имеется в виду такт процессора? да. Цитата нет ли там какого-либо пересчета (кратности и т.д.). пока не наблюдаю Цитата То есть, действительно ли получается 250 млн тактов процессора / 72мгц = примерно 3,5 сек? вроде Цитата дальше, деление реализовано программно (через библиотеку)? да Цитата апппаратное деление бывает? бывает для целочисченных. Смотреть ссылкудля плавучки ручками, с приведением мантис Цитата или только в DSP? там может и есть. Поспрашивайте кто юзает CM4 или BF или прочее
Сообщение отредактировал Herz - Jan 11 2014, 08:34
Причина редактирования: Оформление цитат
--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
|
|
|
|
|
Jan 11 2014, 09:14
|

Профессионал
    
Группа: Свой
Сообщений: 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 штук).
|
|
|
|
|
Jan 11 2014, 14:04
|
Группа: Новичок
Сообщений: 5
Регистрация: 10-01-14
Пользователь №: 79 981

|
спасибо всем откликнувшимся Цитата(megajohn @ Jan 11 2014, 12:14)  проверял в симуляторах ( реальной железки не было под рукой ). можно ли отталкиваться от этих цифр, которые дал симулятор? точность порядка +-50% меня вполне устраивает На что в первую очередь нужно обращать внимание для увеличения производительности ARM (кроме увеличения такт. частоты): наличие аппаратного FPU? Есть ли заметная (в несколько раз) разница в производительности между различными семействами - ARM9, ARM11, Cortex и т.д., или в принципе они равнозначны, и нужно только выбрать макс. так частоту и аппаратный FPU?
|
|
|
|
|
Jan 12 2014, 12:03
|

Частый гость
 
Группа: Свой
Сообщений: 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 сек
|
|
|
|
|
Jan 12 2014, 15:58
|
Группа: Новичок
Сообщений: 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, и никаких альтернатив
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|