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

 
 
> Float-ядро для double операций, Как использовать Float-ядро для double операций
AlexeyT
сообщение Nov 16 2013, 11:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 5-06-07
Пользователь №: 28 207



Ожидаем поставку процессора с ядром Cortex-M4F с аппаратно реализованными операциями с плавающей точкой (32-битные float).

Точности float для некоторых наших вычислений недостаточно, приходится использовать 64-битный double.

Вопрос - есть ли способ использовать float-сопроцессор для операций формата double? Хотя бы для самых простых - сложение и вычитание?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vlad_new
сообщение Nov 17 2013, 02:01
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



А я не знал что незяяяяя. Взял и включил сопр. В итоге на флоатах скорость поднялась в 12-15 раз, а на дублях в 3-4. sm.gif
Go to the top of the page
 
+Quote Post
AlexeyT
сообщение Nov 17 2013, 07:14
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 5-06-07
Пользователь №: 28 207



Цитата(vlad_new @ Nov 17 2013, 06:01) *
А я не знал что незяяяяя. Взял и включил сопр. В итоге на флоатах скорость поднялась в 12-15 раз, а на дублях в 3-4. sm.gif



Эвона как! А ассемблерный листинг можете выложить? Допустим, ассемблерная реализация:

double a=2.123456789012345, b=-5.123456789012345, res; res = a+b;

в двух вариантах - при включенном и выключенном сопроцессоре.
Меня вот никак не отпускает ощущение, что ДОЛЖНО float ядро хоть как-то ускорять операции double.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Nov 17 2013, 14:48
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Цитата(AlexeyT @ Nov 17 2013, 11:14) *
Эвона как! А ассемблерный листинг можете выложить? Допустим, ассемблерная реализация:

double a=2.123456789012345, b=-5.123456789012345, res; res = a+b;

в двух вариантах - при включенном и выключенном сопроцессоре.
Меня вот никак не отпускает ощущение, что ДОЛЖНО float ядро хоть как-то ускорять операции double.

Код
//----------------------FPU OFF ----------------------------------------//

0x08000512 4E93      LDR           r6,[pc,#588] ; @0x08000760
0x08000514 6AB2      LDR           r2,[r6,#0x28]
0x08000516 6AF3      LDR           r3,[r6,#0x2C]
0x08000518 6A30      LDR           r0,[r6,#0x20]
0x0800051A 6A71      LDR           r1,[r6,#0x24]
0x0800051C F003F89B  BL.W          __aeabi_dadd (0x08003656)
0x08000520 6330      STR           r0,[r6,#0x30]
0x08000522 6371      STR           r1,[r6,#0x34]

//----------------------FPU ON -----------------------------------------//
0x08000522 4D94      LDR           r5,[pc,#592] ; @0x08000774
0x08000524 ED950B0A  VLDR          d0,[r5,#0x28]
0x08000528 EC532B10  VMOV          r2,r3,d0
0x0800052C ED950B08  VLDR          d0,[r5,#0x20]
0x08000530 EC510B10  VMOV          r0,r1,d0
0x08000534 F003F841  BL.W          __aeabi_dadd (0x080035BA)
0x08000538 EC410B10  VMOV          d0,r0,r1
0x0800053C ED850B0C  VSTR          d0,[r5,#0x30]


Вот пришлось посидеть и понять почему у меня ускорение произошло. Просто у меня кучка всякой математики и некоторые ее части производились во флоуте ( ну где дубль не нужен был),
вот поэтому прога и ускорилась в 3-4 раза. Так что народ прав. В чистом виде для дубля сопр бесполезен. Но при грамотном смешевании дубля и флоута эффект будет.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AlexeyT   Float-ядро для double операций   Nov 16 2013, 11:18
- - scifi   Цитата(AlexeyT @ Nov 16 2013, 15:18) Вопр...   Nov 16 2013, 12:18
- - fatlortroll   Цитата(AlexeyT @ Nov 16 2013, 15:18) Вопр...   Nov 16 2013, 17:25
- - Rst7   QUOTE Вопрос - есть ли способ использовать float-с...   Nov 16 2013, 21:51
- - SII   Как видим, для деления вызывается подпрограмма, чт...   Nov 18 2013, 06:37
- - etoja   Цитата(AlexeyT @ Nov 16 2013, 15:18) Ожид...   Nov 18 2013, 12:19
- - Golikov A.   число дабл - это мантисса + порядок. если его ра...   Nov 18 2013, 17:33
|- - AlexeyT   Цитата(etoja @ Nov 18 2013, 16:19) Вы в с...   Nov 18 2013, 19:37
|- - jcxz   Цитата(Golikov A. @ Nov 18 2013, 23:33) я...   Nov 19 2013, 06:53
- - Golikov A.   ну вот так как-то (А+B ) * (D + C) = AD + BD + AC...   Nov 19 2013, 08:32
|- - jcxz   Цитата(Golikov A. @ Nov 19 2013, 14:32) н...   Nov 19 2013, 08:50
|- - SII   Цитата(Golikov A. @ Nov 19 2013, 12:32) н...   Nov 19 2013, 10:18
|- - DASM   Цитата(SII @ Nov 19 2013, 14:18) если для...   Nov 19 2013, 10:43
|- - SII   Цитата(DASM @ Nov 19 2013, 14:43) ARM раз...   Nov 19 2013, 13:55
- - Golikov A.   я не ошибся, я имел ввиду другое двойная точность...   Nov 19 2013, 10:25
- - Golikov A.   а я о теоретической применимости 32 битного флотов...   Nov 19 2013, 16:28
- - SII   В третий раз повторяю: изучите матчасть, а заодно ...   Nov 20 2013, 05:35
- - Golikov A.   ну вот теперь понятно... а 32 битный умножитель ц...   Nov 20 2013, 07:05
|- - Сергей Борщ   QUOTE (Golikov A. @ Nov 20 2013, 10:05) в...   Nov 20 2013, 08:21
|- - SII   Цитата(Golikov A. @ Nov 20 2013, 11:05) а...   Nov 20 2013, 08:54
- - Golikov A.   в лоб без оптимизации [32]*[32] дает [32].... имее...   Nov 20 2013, 11:40
- - Сергей Борщ   QUOTE (Golikov A. @ Nov 20 2013, 14:40) б...   Nov 20 2013, 12:54


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:43
Рейтинг@Mail.ru


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