Перейти к содержанию
    

Помогите оттестировать производительность микроконтроллера ARM или AVR

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

 

Прошу помощи форумчан. Хочу использовать микроконтроллер для произведения большого объема вычислений, но не уверен в том, достаточна ли его мощность. Марка микроконтроллера еще не выбрана, скорее всего, на ядре 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);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

для 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 бита )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

для CM3:( IAR DLIB )

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Спасибо!

Уточню: такт - имеется в виду такт процессора? нет ли там какого-либо пересчета (кратности и т.д.).

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

 

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

апппаратное деление бывает? или только в DSP?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

да.

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

пока не наблюдаю

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

вроде

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

да

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

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

для плавучки ручками, с приведением мантис

или только в DSP?

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

Изменено пользователем Herz
Оформление цитат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Тактовая авр 12МГц АРМ - 168..

Изменено пользователем Herz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AVR 8 разрядов, ARM 32. Понятно что производительность AVR на такой арифметике будет на порядки медленнее.

http://ru.wikipedia.org/wiki/AVR32

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Можете сам исходный файл показать? Тогда можно будет на разных контроллерах проверить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

но вообще за счет более высокой тактовой частоты должны выигрывать ARMы с FPU

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можете сам исходный файл показать? Тогда можно будет на разных контроллерах проверить.

 

дык автар дал же, ну вот

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; и умножал результат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

проверял в симуляторах ( реальной железки не было под рукой ).

 

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

точность порядка +-50% меня вполне устраивает

 

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для 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 сек

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В железе: 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, и никаких альтернатив

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...