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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> YAGARTO и math
aaarrr
сообщение Jul 27 2009, 16:16
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Атмег @ Jul 27 2009, 20:07) *
Увеличиваю частоту на выходе фапч с 200 до 240 МГц. Ожидаю, что время выполнения моего кода должно пропорционально сократиться. Однако сокращается оно не на 20, а на доли процента... Рассчитывается преобразование фурье, работа алгоритма с периферией никак не связана.

А измеритель времени не от тех же клоков запитан случайно?

Цитата(Атмег @ Jul 27 2009, 20:07) *
На данный момент у меня на 200Мгц на вычисление sin тратится в среднем 50 мкс, то есть 10000 циклов... Не много ли это? От чего зависит скорость работы с fp помимо оптимизации самого кода, что бы почитать на эту тему? В документации на Newlib (http://sources.redhat.com/newlib/) ничего интересного не нашел =/

Это похоже на нормальное значение, хотя библиотеки RVCT работают примерно вдвое быстрее. Просто sin/cos по определению тормозные и мало подходят для работы в реальном времени.
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Jul 27 2009, 23:28
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



Цитата(aaarrr @ Jul 27 2009, 20:16) *
Это похоже на нормальное значение, хотя библиотеки RVCT работают примерно вдвое быстрее.

А я, кажется, догадываюсь почему: в newlib-е libm раздваивается
(в math и mathfp) и вызов sin() считает синус два раза, очевидно для
проверки, что бы не ошибиться :)

10,000 клоков не предел, в DM6446 sin() (из DDR2, cache off,
release, no dbg info) считает здак 45,000 клоков и ничего,
только чип горячий и дым из эмулятора...

Сообщение отредактировал AndrewN - Jul 27 2009, 23:29
Go to the top of the page
 
+Quote Post
Атмег
сообщение Jul 28 2009, 06:30
Сообщение #18


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

Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787



Цитата(aaarrr @ Jul 27 2009, 20:16) *
А измеритель времени не от тех же клоков запитан случайно?

нет, от RTC

Цитата(aaarrr @ Jul 27 2009, 20:16) *
Это похоже на нормальное значение, хотя библиотеки RVCT работают примерно вдвое быстрее. Просто sin/cos по определению тормозные и мало подходят для работы в реальном времени.

А есть ли способ ускорить работу, пожертвовав точностью? (Есть еще мысль таблицей задать, но уж больно некрасивое решение).

Цитата(AndrewN @ Jul 28 2009, 03:28) *
в newlib-е libm раздваивается (в math и mathfp) и вызов sin() считает синус два раза

ээ.. то есть??
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 28 2009, 09:51
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Атмег @ Jul 28 2009, 10:30) *
А есть ли способ ускорить работу, пожертвовав точностью? (Есть еще мысль таблицей задать, но уж больно некрасивое решение).

Есть, и использование таблицы - один из наиболее распространенных. Что же в ней некрасивого?
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Jul 28 2009, 12:36
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



Цитата(Атмег @ Jul 28 2009, 10:30) *
А есть ли способ ускорить работу, пожертвовав точностью? (Есть еще мысль таблицей задать, но уж больно некрасивое решение).

Можно, например, ограничится одним битом и считать что синус на [0, pi) равен 1, а на [pi,2*pi) равен 0. Но это путь скорби. Обычно, всё-же, сначала задаются необходимым значением точности, а потом ищут вычислитель, который зту точность обеспечит вместе с заданным временем вычисления - т.е. жертвуют деньгами вместо точности.

Табличный синус это, конечно, хорошо, но останутся скалярные произведения в вычислении преобразования, и они тоже будут симулироваться вызовами подпрограмм.

Мой вчерашний эксперимент с DM6446 показал удивительные результаты: огромное количество тактов тратится на всевозможные варианты переходов и на обращение к ОЗУ, тогда как обычные арифметические инструкции завершаются за 3-5 тактов.

Что, конечно, неудивительно само по себе, но что бы так много - 95 на переход, от 125 до 250 на LDM-ы в эпилогах (STM-ы в прологах укладываются за около 20 тактов). Понятно, что тайминг операций с памятью прямо пропорционален отношению частоты ЦПУ и частоты памяти и если включить кэш (я пока не научился работать с CP15) то времена должны улучшиться (в том числе и скорость переходов, так как она косвенно зависит от скорости обмена с памятью), но пока не знаю на сколько.

Вот эти операции и определяют, в итоге, скорость (точнее, медленность) симуляции плавающей точки, где на каждый чих (e.g. целое -> вещественное) свой вызов подпрограммы, т.е. переход, пролог и эпилог. Суммируя, ARM без аппаратной плавающей точки для вычисленений с этой самой точкой можно использовать только от отчаяния. Более подходящее применение - целочисленное преобразование.

Цитата(Атмег @ Jul 28 2009, 10:30) *
ээ.. то есть??

Как-так само-собой получилось, ни причины, ни логики не смог увидеть. Может быть, экпериментирование с разными способами. Только вот в math некоторые функции (kf_...) проектировал явно бухгалтер. Еще одна спорная вещь - использование полиномиальной аппроксимации для тангенса. В C&W используется дробно-рациональная аппроксимация, т.е. меньше коэффициентов (6) плюс деление, что м.б. быстрее чем Хорнер с 13-ю коэффициентами, - как сделано в mathfp.
Go to the top of the page
 
+Quote Post
Атмег
сообщение Jul 29 2009, 06:55
Сообщение #21


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

Группа: Участник
Сообщений: 149
Регистрация: 17-05-07
Пользователь №: 27 787



Спасибо, информацию принял к сведению. У меня правда уже есть сомнения относительно моих 10000 циклов на sin, проверю. Не уверен, что частота была действительно 200 МГц, еще не научился правильно ей управлять..
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 - 20:11
Рейтинг@Mail.ru


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