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

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


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Попробовал на Stm32f407 с использованием аппаратной плавающей точки, получилось 28000000 тактов процессора на 1000000 (миллион) итераций цикла - 28 тактов на итерацию.
Для double нет аппаратной поддержки и результат куда печальнее 1117999516 тактов, ~1118 тактов на итерацию.
Компилятор arm-none-eabi-gcc 4.7.3.
Go to the top of the page
 
+Quote Post
ZASADA
сообщение Jan 13 2014, 15:28
Сообщение #32


Знающий
****

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



а не сокращает, я его после цикла распечатываю =)
наибольший эффект дает ключ -ffast -math, без него при минимальной оптимизации float = 1,992 сек

быстродействие победил =).
b принималось за константу
заменил на
Код
b = b + 0.001;


итоговый результат
без оптимизации float = 3,256 сек
после оптимизации float = 2,64 сек

результаты вычислений в обоих случаев одинаковы, т.е. ничего в цикле не сокращается
Go to the top of the page
 
+Quote Post
RomaRoma
сообщение Jan 14 2014, 07:57
Сообщение #33





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



всем спасибо
тема закрыта
вижу, что на микроконтроллере такие задачи не решить
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jan 14 2014, 08:21
Сообщение #34


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

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



Цитата(RomaRoma @ Jan 14 2014, 11:57) *
вижу, что на микроконтроллере такие задачи не решить


теоретически, вам нужен microcontroller with double-precision FPU

это только в ARM9.
к примеру у NXP значится LPC3180 This CPU coprocessor provides full support for single-precision and double-precision

или искать другие контроллеры с ядром VFP9-S


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


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

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



Цитата(neiver @ Jan 13 2014, 17:47) *
Попробовал на Stm32f407 с использованием аппаратной плавающей точки, получилось 28000000 тактов процессора на 1000000 (миллион) итераций цикла - 28 тактов на итерацию.

Мне кажется, вы ошиблись в 10 раз. Сам пробовал, в симуляторе.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 14 2014, 10:06
Сообщение #36


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

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



С вашего позволения, предлагаю тест, который 1000 раз вычисляет число Пи (по формуле каких-то трех мудрецов). Тогда можно будет удостовериться, что программа работает правильно.
Код
  typedef float tt;
  // typedef double tt;
  volatile tt pi;
  for (int n = 1000; n--; ) {
    pi = 4.0 / 1 - 2.0 / 4 - 1.0 / 5 - 1.0 / 6;
    for (int i = 1; i < 8; i++) {
      tt i8 = i * 8;
      tt p = 4 / (i8 + 1) - 2 / (i8 + 4) - 1 / (i8 + 5) - 1 / (i8 + 6);
      for (int j = i; j > 0; j--) {
        p /= 16;
      }
      pi += p;
    }
  }
  return pi;

float pi = 3.14159274 (ошибка связана с недостаточной точностью float формата при расчетах)
double pi = 3.141592653589

Keil, STM32, -O3 -Otime, симулятор, тактов на один цикл:
STM32F207: float = 4506, double = 8125
STM32F407, no use FPU: float = 4506, double = 8125
STM32F407, use FPU: float = 662, double = 10094

Последняя цифра меня удивила. Видимо, использование FPU STM32 для double в Keil недоработано. rolleyes.gif
Go to the top of the page
 
+Quote Post
yes
сообщение Jan 14 2014, 13:21
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(RomaRoma @ Jan 14 2014, 11:57) *
всем спасибо
тема закрыта
вижу, что на микроконтроллере такие задачи не решить


на всякий случай - есть микроконтроллеры с поддержкой double FPU

например LPC3xxx (ARM9+FPU)

также у renesas-а есть SH-2|3|4 семейство с 64бит FPU у них и по целым числам получше чем у ARM-ов - может есть и не BGA корпуса

если BGA не смущает, то imx

то есть, микроконтроллеры бывают разные, можно к ПК (типа на атоме Жsm.gif по скорости вычислений приблизиться

Цитата(ViKo @ Jan 14 2014, 14:06) *
Последняя цифра меня удивила. Видимо, использование FPU STM32 для double в Keil недоработано. rolleyes.gif


ну я сам лудить/паять, в тонкую математику не лезу, но наши математики, когда им предлагаю взять замечательный проц без FPU или с 32х битным FPU (что для даблов одноикственно) сразу же с негодованием отвергают и приблизительно такими же соотношениями мотивируют sm.gif
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 14 2014, 14:19
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Добавлю к списку еще MCU на Cortex-R4F, такие тоже есть, например TMS570 и RM4 (например RM48L930), они тоже имеют в составе дабл плавучку (VFPv3), еще ренесас - SuperH ядро, там тоже она есть.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jan 14 2014, 16:23
Сообщение #39


Знающий
****

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



Цитата(ViKo @ Jan 14 2014, 05:06) *
С вашего позволения, предлагаю тест, который 1000 раз вычисляет число Пи (по формуле каких-то трех мудрецов). Тогда можно будет удостовериться, что программа работает правильно.
Код
  typedef float tt;
  // typedef double tt;
  volatile tt pi;
  for (int n = 1000; n--; ) {
    pi = 4.0 / 1 - 2.0 / 4 - 1.0 / 5 - 1.0 / 6;
    for (int i = 1; i < 8; i++) {
      tt i8 = i * 8;
      tt p = 4 / (i8 + 1) - 2 / (i8 + 4) - 1 / (i8 + 5) - 1 / (i8 + 6);
      for (int j = i; j > 0; j--) {
        p /= 16;
      }
      pi += p;
    }
  }
  return pi;

float pi = 3.14159274 (ошибка связана с недостаточной точностью float формата при расчетах)
double pi = 3.141592653589

Keil, STM32, -O3 -Otime, симулятор, тактов на один цикл:
STM32F207: float = 4506, double = 8125
STM32F407, no use FPU: float = 4506, double = 8125
STM32F407, use FPU: float = 662, double = 10094

Последняя цифра меня удивила. Видимо, использование FPU STM32 для double в Keil недоработано. rolleyes.gif


для сравнения:

Mac OS X 10.9.1 i7-2.2 GHz:
gcc -O3
10,000,000 cycles

float -
real 0m1.322s
user 0m1.316s
sys 0m0.004s

double -
real 0m2.073s
user 0m2.067s
sys 0m0.004s


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
ZASADA
сообщение Jan 14 2014, 16:45
Сообщение #40


Знающий
****

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



могу завтра на авр32 запустить=)
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jan 14 2014, 17:24
Сообщение #41


Знающий
****

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



Цитата(ZASADA @ Jan 14 2014, 11:45) *
могу завтра на авр32 запустить=)

ждемс.. rolleyes.gif


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
ZASADA
сообщение Jan 15 2014, 07:56
Сообщение #42


Знающий
****

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



итак вычисление числа Пи, код ViKo
AVR32, 60MHz, живое железо
float
без оптимизации
cycles= 6 738 017 time=112.3 мсек pi=3.141592741013
с безопасной оптимизацией
cycles= 2 936 003 time=48.90 мсек pi=3.141592741013
оптимизация с ускоренным вычислением float
cycles= 442 001 time=7.37 мсек pi=3.141327857971 - кривое значение в мелких разрядах, зато быстро =)

double
без оптимизации
cycles= 16 482 018 time=274.7 мсек pi=3.141592653589
с безопасной оптимизацией
cycles= 11 361 996 time=189.4 мсек pi=3.141592653589
оптимизация с ускоренным вычислением float
cycles= 11 813 997 time=196.9 мсек pi=3.141592653589 - даже чуть медленнее чем с обычными библиотеками float, но точность не пострадала
Go to the top of the page
 
+Quote Post
mantech
сообщение Jan 15 2014, 09:22
Сообщение #43


Гуру
******

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



Цитата(ZASADA @ Jan 15 2014, 11:56) *
итак вычисление числа Пи


Ну дак к чему пришли? Может у кого есть желание сбацать сводную табличку, в процентном выражении от типа проца? wink.gif
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 Текстовая версия Сейчас: 24th August 2025 - 20:29
Рейтинг@Mail.ru


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