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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> плавающая точка
dimka76
сообщение Aug 16 2007, 11:48
Сообщение #1


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



пример проекта умножения с плавающей точкой.
работает быстрее, чем стандартная Си операция благодаря использованию аппаратного умножителя.
Подходит только для серии Mega
Прикрепленные файлы
Прикрепленный файл  test_float_good_last.rar ( 46.41 килобайт ) Кол-во скачиваний: 112
 


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Aug 16 2007, 13:13
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



так вроде ж есть тема специально для исходников сверху.....
Или вывыложили потестить??
05.gif
Go to the top of the page
 
+Quote Post
dimka76
сообщение Aug 16 2007, 13:36
Сообщение #3


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Kuzmi4 @ Aug 16 2007, 17:13) *
так вроде ж есть тема специально для исходников сверху.....
Или вывыложили потестить??
05.gif


Я туда тоже выложил, но сначала сюда - по ошибке 05.gif


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
m16
сообщение Aug 16 2007, 14:12
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 27-01-05
Пользователь №: 2 225



плавучка на 8-ми битнике? глупости всё это . целочисленки за глаза хватает и пошустрее будет
Go to the top of the page
 
+Quote Post
Proton
сообщение Aug 16 2007, 14:42
Сообщение #5


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

Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334



Цитата(dimka76 @ Aug 16 2007, 18:48) *
работает быстрее, чем стандартная Си операция благодаря использованию аппаратного умножителя.

Причём тут аппаратный умножитель? ИАР его уже давно использует. Выигрыш действительно есть 173цикла против 210 ИАРовских, но это не за счёт умножителя, а за счёт уменьшения гибкости реализации(перемножение только фиксированных переменных).


--------------------
Всяк хорошая мысля к нам приходит опосля.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Aug 17 2007, 05:04
Сообщение #6


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Proton @ Aug 16 2007, 18:42) *
Причём тут аппаратный умножитель? ИАР его уже давно использует. Выигрыш действительно есть 173цикла против 210 ИАРовских, но это не за счёт умножителя, а за счёт уменьшения гибкости реализации(перемножение только фиксированных переменных).



Попробуйте написать такой код:

void main(void)
{
float a = 4.56789;
float b = 10.45321; // или любые другие цифры

a = a*b;
}

И посмотрите сгенерированный IARом ассемблерный код. И никаких mul вы там не увидите.
А время выполнения составит порядка 600 тактов. На asme порядка 200 - 300 тактов.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
mse
сообщение Aug 17 2007, 06:08
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Аналогичная библиотека пролетала года три-четыре назад. Подключалась к ИАР
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Aug 17 2007, 06:44
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



А продолжении темы - так а давайте кто нибудь потестит этот код и други - например тут про иар было заявление и выложит результаты.. Ну что б пустого трёпа не возникало....
Я думаю всем будет интересно... smile.gif
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 17 2007, 07:34
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Kuzmi4 @ Aug 17 2007, 09:44) *
А продолжении темы - так а давайте кто нибудь потестит этот код и други - например тут про иар было заявление и выложит результаты.. Ну что б пустого трёпа не возникало....
Я думаю всем будет интересно... smile.gif

Ну, интерес преувеличен.
Обычно - или тупо плавучка, встроенная в компилятор, или целочисленная арифметика с тщательной проверкой, чтобы не было выхода за диапазон. Разбираться с какой-то левой библиотекой ? 05.gif
Ни за что! smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
_artem_
сообщение Aug 17 2007, 08:29
Сообщение #10


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Цитата(dimka76 @ Aug 17 2007, 08:04) *
Попробуйте написать такой код:

void main(void)
{
float a = 4.56789;
float b = 10.45321; // или любые другие цифры

a = a*b;
}

И посмотрите сгенерированный IARом ассемблерный код. И никаких mul вы там не увидите.
А время выполнения составит порядка 600 тактов. На asme порядка 200 - 300 тактов.


Хорошо бы это проверить тем у кого покупной иар стоит а не еволюейшн.


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Aug 17 2007, 09:01
Сообщение #11


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

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



iar 430a не купленный, лицензия сгенерирована.
Оптимизация отключена. мега48 195 тактов.
MUL используется вовсю.
Вот кусок (не весь) полученного кода:
+000003A2: 9F04 MUL R16,R20 Multiply unsigned
+000003A3: 01F0 MOVW R30,R0 Copy register pair
+000003A4: 9F05 MUL R16,R21 Multiply unsigned
+000003A5: 0DF0 ADD R31,R0 Add without carry
+000003A6: 2D71 MOV R23,R1 Copy register
+000003A7: 1F73 ADC R23,R19 Add with carry
+000003A8: 9F14 MUL R17,R20 Multiply unsigned
+000003A9: 0DF0 ADD R31,R0 Add without carry
+000003AA: 1D71 ADC R23,R1 Add with carry
+000003AB: 1C22 ROL R2 Rotate Left Through Carry
+000003AC: 9F06 MUL R16,R22 Multiply unsigned
+000003AD: 0D70 ADD R23,R0 Add without carry
+000003AE: 1C21 ADC R2,R1 Add with carry
+000003AF: 1C33 ROL R3 Rotate Left Through Carry
+000003B0: 9F15 MUL R17,R21 Multiply unsigned
+

Сообщение отредактировал aleksey_g - Aug 17 2007, 09:18
Go to the top of the page
 
+Quote Post
_artem_
сообщение Aug 17 2007, 09:23
Сообщение #12


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



aleksey_g, большое спасибо. Mда, у меня тоже mul есть.

reducted ...


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
dimka76
сообщение Aug 17 2007, 11:30
Сообщение #13


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(aleksey_g @ Aug 17 2007, 13:01) *
iar 430a не купленный, лицензия сгенерирована.
Оптимизация отключена. мега48 195 тактов.
MUL используется вовсю.
Вот кусок (не весь) полученного кода:
+000003A2: 9F04 MUL R16,R20 Multiply unsigned
+000003A3: 01F0 MOVW R30,R0 Copy register pair
+000003A4: 9F05 MUL R16,R21 Multiply unsigned
+000003A5: 0DF0 ADD R31,R0 Add without carry
+000003A6: 2D71 MOV R23,R1 Copy register
+000003A7: 1F73 ADC R23,R19 Add with carry
+000003A8: 9F14 MUL R17,R20 Multiply unsigned
+000003A9: 0DF0 ADD R31,R0 Add without carry
+000003AA: 1D71 ADC R23,R1 Add with carry
+000003AB: 1C22 ROL R2 Rotate Left Through Carry
+000003AC: 9F06 MUL R16,R22 Multiply unsigned
+000003AD: 0D70 ADD R23,R0 Add without carry
+000003AE: 1C21 ADC R2,R1 Add with carry
+000003AF: 1C33 ROL R3 Rotate Left Through Carry
+000003B0: 9F15 MUL R17,R21 Multiply unsigned
+



а какие настройки проекта


Цитата(aleksey_g @ Aug 17 2007, 13:01) *
iar 430a не купленный, лицензия сгенерирована.
Оптимизация отключена. мега48 195 тактов.
MUL используется вовсю.
Вот кусок (не весь) полученного кода:
+000003A2: 9F04 MUL R16,R20 Multiply unsigned
+000003A3: 01F0 MOVW R30,R0 Copy register pair
+000003A4: 9F05 MUL R16,R21 Multiply unsigned
+000003A5: 0DF0 ADD R31,R0 Add without carry
+000003A6: 2D71 MOV R23,R1 Copy register
+000003A7: 1F73 ADC R23,R19 Add with carry
+000003A8: 9F14 MUL R17,R20 Multiply unsigned
+000003A9: 0DF0 ADD R31,R0 Add without carry
+000003AA: 1D71 ADC R23,R1 Add with carry
+000003AB: 1C22 ROL R2 Rotate Left Through Carry
+000003AC: 9F06 MUL R16,R22 Multiply unsigned
+000003AD: 0D70 ADD R23,R0 Add without carry
+000003AE: 1C21 ADC R2,R1 Add with carry
+000003AF: 1C33 ROL R3 Rotate Left Through Carry
+000003B0: 9F15 MUL R17,R21 Multiply unsigned
+


а подскажите где лекарство брали


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Proton
сообщение Aug 17 2007, 16:10
Сообщение #14


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

Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334



Цитата(dimka76 @ Aug 16 2007, 12:04) *
Попробуйте написать такой код:

void main(void)
{
float a = 4.56789;
float b = 10.45321; // или любые другие цифры

a = a*b;
}

Код писал и даже привёл результаты его выполнения в тактах. Или Вы считаете что если изменить сомножители аппаратный умножитель не будет использоваться?

Цитата(dimka76 @ Aug 16 2007, 18:48) *
пример проекта умножения с плавающей точкой.
Подходит только для серии Mega

А по какой причине происходит дискриминация семейства tiny? Ведь оперативки требуется около 70 байт, практически у всех контроллеров семейства tiny её больше. Компилируется и работает это всё на них без проблем, или может я что-то не так делаю?


--------------------
Всяк хорошая мысля к нам приходит опосля.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Aug 20 2007, 04:38
Сообщение #15


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Proton @ Aug 17 2007, 20:10) *
Код писал и даже привёл результаты его выполнения в тактах. Или Вы считаете что если изменить сомножители аппаратный умножитель не будет использоваться?
А по какой причине происходит дискриминация семейства tiny? Ведь оперативки требуется около 70 байт, практически у всех контроллеров семейства tiny её больше. Компилируется и работает это всё на них без проблем, или может я что-то не так делаю?


У меня IAR 4.11 и при использовании операций с плавающей точкой компилятор не использует аппаратный умножитель. При любых сочетаниях сомножителей.
У тини нет аппаратного умножителя.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:20
Рейтинг@Mail.ru


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