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

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


Знающий
****

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



дсп еще не щупали.
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jan 12 2014, 18:15
Сообщение #17


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

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



Цитата(M_Andrey @ Jan 12 2014, 16:03) *
В железе: ATMega128 16MHz, замеры времени по TIMER1 плюс прерывание по его переполнению для увеличения разрядности.
float Time (1000000) = 0x0000230D 2135 36,7539393125 сек
double Time (1000000) = 0x0003887D 262C 948,42531475 сек


чойта странно, при double получилось 15 174 805 036 тактов, при float - 588 063 029 тактов. Смущает кратность в 26 раз.


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


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

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



Цитата(megajohn @ Jan 12 2014, 21:15) *
чойта странно, при double получилось 15 174 805 036 тактов, при float - 588 063 029 тактов. Смущает кратность в 26 раз.

Все вопросы к компилятору:
Прикрепленный файл  asm_float.txt ( 6.58 килобайт ) Кол-во скачиваний: 179


Прикрепленный файл  asm_double.txt ( 7.89 килобайт ) Кол-во скачиваний: 213


Go to the top of the page
 
+Quote Post
megajohn
сообщение Jan 12 2014, 19:21
Сообщение #19


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

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



Цитата(M_Andrey @ Jan 12 2014, 23:12) *
Все вопросы к компилятору:


ну а где D_ADD_L11, D_DIV_L11, SL2D_L11 ?




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


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

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



Ужесточил типы, теперь между double и float разница 8-9-и кратная!

float
Time (10000) = 00000107 BA45 1,0802283125 сек
Time (100000) = 00000A49 CDB9 10,7880595625 сек
Time (1000000) = 0000661C 332D 107,0702588125 сек

double
Time (10000) = 000007AD AF87 8,0514484375 сек
Time (100000) = 00005F37 60E0 99,84155 сек
Time (1000000) = 0003B3B0 8E95 993,7246493125 сек



Go to the top of the page
 
+Quote Post
megajohn
сообщение Jan 12 2014, 20:05
Сообщение #21


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

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



Цитата(M_Andrey @ Jan 12 2014, 23:58) *
Ужесточил типы, теперь между double и float разница 8-9-и кратная!
float Time (1000000) = 0000661C 332D 107,0702588125 сек
double Time (1000000) = 0003B3B0 8E95 993,7246493125 сек


Чой та я в шоке. Что вообще за компилятор ?
теперь у вас увеличилось время для float почти в три раза, но стало близко к моему с 1% ошибкой ( 1 713 124 141 vs 1 725 881 000 )
но double долго считается по отношению к коду сгенеренному в IAR.



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


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



PIC32, 80 MHz (оптимизация средненькая, такую дает бесплатный вариант лицензии MPLAB-C32 компилятора )
CODE
typedef long double f64;
typedef unsigned int u32;
volatile f64 a = 1;
volatile f64 b = 1234.567;

int main(void)
{
u32 i;
//рабочий цикл
for (i=0; i<1e6; i++)
{
a = a + ((f64)i / b );
b = b + 0.000001;
//на всякий пожарный
if (a>100000000) a = 1;
}
return 0;
}


510024595 машинных циклов
6.375307 секунд

Если 32-битные вычисления
Код
typedef float f64;

415782614 мц
5.197283 секунд
Go to the top of the page
 
+Quote Post
M_Andrey
сообщение Jan 13 2014, 08:52
Сообщение #23


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

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



Цитата(megajohn @ Jan 12 2014, 23:05) *
Чой та я в шоке. Что вообще за компилятор ?

IAR C/C++ Compiler for AVR 5.50.0 (5.50.0.50277)C:\Program Files\IAR EW 5.5\avr\bin\iccavr.exe
14.04.2010 16:14:06, 11579392 bytes
Full DLIB - \avr\LIB\DLIB\dlAVR-3s-ec_mul-64-f.r90
CODE
#define cycle 1000000L
#define TT double
//#define TT float

TT test(void)
{
TT a = (TT)1.0;
TT b = (TT)1234.567;

for (long i = 0; i < cycle; i++)
{
a = a + ( (TT)i / b );
b = b + (TT)0.000001;
if (a > (TT)100000000.0) a = (TT)1.0;
}
return(a);
}
Go to the top of the page
 
+Quote Post
ZASADA
сообщение Jan 13 2014, 11:02
Сообщение #24


Знающий
****

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



avr32 60MHz i = 1 000 000
без оптимизации
double 7,544 сек
float 3,177 сек
на макс оптимизации
double 6,904 сек
float 208 мсек
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jan 13 2014, 13:37
Сообщение #25


Знающий
****

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



Цитата(ZASADA @ Jan 13 2014, 06:02) *
avr32 60MHz i = 1 000 000
без оптимизации
double 7,544 сек
float 3,177 сек
на макс оптимизации
double 6,904 сек
float 208 мсек


208 миллисекунд?
Примерно 12 циклов на операцию?
Чегото слишком оптимистично..
12 миллионов циклов супротив майкрочиповских 500 миллионов?

Не верится..
Это в симуляторе?


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


Знающий
****

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



на реальной плате

причем double не особо круто соптимизировало.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jan 13 2014, 14:12
Сообщение #27


Знающий
****

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



Цитата(ZASADA @ Jan 13 2014, 09:01) *
на реальной плате

причем double не особо круто соптимизировало.

a ассемблерный код есть посмотреть?


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


Знающий
****

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



Цитата
800036E0 mov R8, 0
800036E2 movhi R7, 0x3f80
800036E6 sub R8, -1
800036E8 cp.w R8, 1000000
800036EC breq 0x8000370e
800036EE cop CP0, CR9, CR0, CR8, 12
800036F2 cop CP0, CR7, CR9, CR5, 14
800036F6 cop CP0, CR0, CR7, CR6, 24
800036FA brvs 0x80003702
800036FE brle 0x800036e6
80003702 movhi R7, 0x3f80
80003706 sub R8, -1


думаю гдето дурит, слишком сильно ускоряет вычисление даже при включение минимальной оптимизации
Go to the top of the page
 
+Quote Post
M_Andrey
сообщение Jan 13 2014, 14:41
Сообщение #29


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

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



Кстати, если посмотреть в float числа:

1234.567 = 0x449A 5225
1234.567001 = 0x449A 5225
и только
1234.5671 = 0x449A 5226

и компилятор наверное об этом знает sm.gif
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Jan 13 2014, 14:41
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(ZASADA @ Jan 13 2014, 16:01) *
на реальной плате
причем double не особо круто соптимизировало.

Такое ощущение, что там Ваш никнейм приключился sm.gif И оно "соптимизировало" переменные, так как они больше нигде не используются. или цикл "соптимизировало".
Попробуйте их объявить как volatile, ну или посмотрите что там в a и в b после выполнения.
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:51
Рейтинг@Mail.ru


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