maksimp 0 5 февраля, 2012 Опубликовано 5 февраля, 2012 · Жалоба Ещё вот подумал об использовании фиксированной точки по сравнению с плавающей. В большинстве практических задач известен диапазон обрабатываемых величин и, как ни странно, диапазон не такой уж большой. Если взять к примеру 40-битную фиксированную точку, то диапазон предcтавимых чисел составит 240 дБ. Можно с Сатурна сообщения обрабатывать :-). В то же время быстродействие обработки фиксточки на порядок выше по сравнению с плавающей. Так что, стоит покумекать и принормировать свою задачу к определенному диапазону. В плавучке мантисса занимает 23 бита плюс один не хранимый всегда равный 1. Итого 3 байта. Чтобы перемножить два числа нужно перемножить мантиссы. AVR выполняет умножение байт на байт за одну команду, чтобы перемножить два 3-байтовых числа нужно 9 команд умножения. И порядки сложить. В плавучке вычисление spline = ds + tmp * (cs + tmp * (bs + as*tmp)); - то есть 6 операций - занимает 860 тактов (см ссылку выше в теме). то есть 146 тактов на операцию. А чтобы перемножить два 40 битных числа с фиксированной точкой, то есть 5 байтных, нужно 25 команд умножения. Каждая команда умножения даёт два байта результата, которые нужно прибавить к промежуточному результату (для всех кроме 5 первых умножений). То есть нужно почти в 2 раза больше команд сложения ещё, 40 штук вроде. Итого уже 25*2+40*1=90 тактов. Это без учёта пересылок, вызова функций и т.д. Таким образом 40 битная фиксированная точка может оказаться и вовсе не быстрее плавучки. И по крайней мере не на порядок быстрее. я и так вынужден хранить в плавучке только дробные части чисел а целые - в отдельных байтах, чтобы не терять абсолютную точность! Выглядит сомнительно. Плавучка не теряет точности целой части от того что появляется дробная. Вы точно убедились что это необходимо? А ещё в требуемой заказчиком mega48P запросто может нехватить программной памяти! Её там всего 4 кб. Мало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivana 0 5 февраля, 2012 Опубликовано 5 февраля, 2012 · Жалоба Выглядит сомнительно. Плавучка не теряет точности целой части от того что появляется дробная. Вы точно убедились что это необходимо? При увеличении абсолютного значения числа его точность (ака точность дробной части) теряется. Поэтому необходимо. А ещё в требуемой заказчиком mega48P запросто может нехватить программной памяти! Её там всего 4 кб. Мало. Что делать - будем пытаться вписаться. Тем более, что на самом деле её там всего 512 байт :rolleyes: http://www.ekits.ru/index.php?productID=2567 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 5 февраля, 2012 Опубликовано 5 февраля, 2012 · Жалоба Программная память = flash в данном случае. И её действительно всего 4КБ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivana 0 6 февраля, 2012 Опубликовано 6 февраля, 2012 · Жалоба Верно - я прокололся :) Просто чаще встречался с ограничениями в нехватке ОЗУ, вот и тут не вдумавшись подумал что речь про неё, ан нет. Гарвардская архитектура, однако :) А программной памяти там да - 4кб, и туда ещё надо будет засунуть модуль связи, математику расчета движения, ПИД-регулятор тока, сервисные функции индикации и таблицу синуса... Тоже придется проявлять чудеса впихивания. На крайний случай конечно остается вариант тяжеловесную внешнюю связь вынести во вторую мегу48 с транзитом в основную управляющую тоже мегу48 по SPI - если не будем влезать, то попробуем так. А может и 3 меги затребуем - пусть осваивает складские запасы :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 7 февраля, 2012 Опубликовано 7 февраля, 2012 · Жалоба В плавучке мантисса занимает 23 бита плюс один не хранимый всегда равный 1. Итого 3 байта. Чтобы перемножить два числа нужно перемножить мантиссы. AVR выполняет умножение байт на байт за одну команду, чтобы перемножить два 3-байтовых числа нужно 9 команд умножения. И порядки сложить. В плавучке вычисление spline = ds + tmp * (cs + tmp * (bs + as*tmp)); - то есть 6 операций - занимает 860 тактов (см ссылку выше в теме). то есть 146 тактов на операцию. А чтобы перемножить два 40 битных числа с фиксированной точкой, то есть 5 байтных, нужно 25 команд умножения. Каждая команда умножения даёт два байта результата, которые нужно прибавить к промежуточному результату (для всех кроме 5 первых умножений). То есть нужно почти в 2 раза больше команд сложения ещё, 40 штук вроде. Итого уже 25*2+40*1=90 тактов. Это без учёта пересылок, вызова функций и т.д. Таким образом 40 битная фиксированная точка может оказаться и вовсе не быстрее плавучки. И по крайней мере не на порядок быстрее 1) Ну да, надо 9 команд умножения и 6 сложения, чтобы перемножить 3-байтные мантиссы двух чисел с плавающей запятой. Но это не всё, ещё со знаком повозиться, еще надо 48-битную мантиссу результата отнормировать, и экспоненту подправить, ещё надо сравнить с мин. и мах. числом...Вы всё же посмотрите на подпрограммы умножения двух чисел с плавающей запятой. Что интересно, сложение в плавучке не такое простое дело, как может показаться. Надо мантиссы выровнять, сложить, результат пронормировать... 2) Теперь про 40-битные числа с фиксированной точкой. Ну 40 я взял от фонаря, вы и ухватились, а если бы я сказал 64? Поэтому давайте подойдём к вопросу с разумных позиций. Для хранения плавточки нужно 32 бита, т.е. 4 байта., вот и возьмём для фиксточки те же 32 бита. Диапазон представления тоже не маленький 192 дБ. Сигналы с Луны можно обработать :-). Умножение 32х32 я бы точно уложил в 100 тактов, ну а сложение - 4 такта. Вгрубе для вычисления spline хватит 300 тактов против ваших 900 (это ещё проверить бы надо), в ТРИ раза, не хило, хоть и не на порядок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivana 0 11 февраля, 2012 Опубликовано 11 февраля, 2012 · Жалоба Возможно вас это позабавит, но я написал на 1С симулятор работы с моим МК, плавучей библиотекой, ОЗУ.... :) С выводом любой - текстовой и графической отладочной информации, статистики и прочего по результатам работы алгоритма, возможностью сначала написать и отладить алгоритм в человеческой математике, проверить графически результаты его работы и там же перевести и посмотреть в математике МК. Ошибки ловятся на ура - я просто не представляю, как бы я их ловил в АВР-студио, без графики, с долгим временем симулирования. А если добавить в мой симулятор регистры и asm команды (что несложно но врядли нужно), будет почти труЪ :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 11 февраля, 2012 Опубликовано 11 февраля, 2012 · Жалоба 1С? Нда.. Месье однако знает толк в извращениях и совсем не слыхал про протеус для симуляции МК. И про маткад для С выводом любой - текстовой и графической отладочной информации, статистики и прочего по результатам работы алгоритма, возможностью сначала написать и отладить алгоритм в человеческой математике, проверить графически результаты его работы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivana 0 11 февраля, 2012 Опубликовано 11 февраля, 2012 · Жалоба Про Протеус и Маткад слышал, но ни разу не видел и не пользовался. И мне действительно проще написать симулятор в 1С, чем ставить вышеупомянутый софт, разбираться в его интерфейсах и возможностях, спрашивать как там сделать то-то и се-то и расстраиваться если что-то там сделать нельзя. А в моем симуляторе я сам сделаю все что мне нужно, быстро и понятно. Это же ведь всего лишь инструмент для работы - а он должен быть удобен и делать то что нужно, и все. Можно конечно относиться к 1С с пренебрежением, но на текущий момент мне помогает. Куратор вообще говорит - хоть в Экселе в Вижуал Бэйсике макросы пиши и хоть какие графики строй - лишь бы результат был :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 12 февраля, 2012 Опубликовано 12 февраля, 2012 · Жалоба Оффтоп — просто вспомнилось. Где-то когда-то в эхах прозвучало по поводу какого-то вируса «в отместку я антивирус написал на Clipper-е» Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 12 февраля, 2012 Опубликовано 12 февраля, 2012 · Жалоба Маленькое замечание. В старозатертые времена у Майкрочипа предлагалась даже специальная ассмовская библиотека плавучки, оптимизированная под скорость. Она вся была написана под внутренний формат представления данных (порядок следования битов был иной чем в 754-м стандарте). Причем варианты (если правильно помню) были и под 4 байта и под 3 байта. Для общения с внешним миром были функции конвертации этого внутреннего формата в стандартный IEEE. Может и Атмел такое сделал под свои камни, а вам только поискать нужно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 13 февраля, 2012 Опубликовано 13 февраля, 2012 · Жалоба Может и Атмел такое сделал под свои камни, а вам только поискать нужно?Нет. Атмел ничего "такого" не делал. Максимум fixed-point арифметика в avr-gcc. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 13 февраля, 2012 Опубликовано 13 февраля, 2012 · Жалоба Нет. Атмел ничего "такого" не делал. Максимум fixed-point арифметика в avr-gcc. Вы хотите сказать, что у Атмела в официальных аппнотах не предлагаются ассемблерные библиотеки для своих кристаллов для пишущих на ассме? Ни плавающей точки, ни тригонометрических функций? что-то слабо верится. Хм. хотя они вроде сразу нормальный Си предлагали, наверное тогда да, никто на ассемблере и не извращался в AVR. PS Упаси Боже подумать что хвалю одного производителя в угоду другому. Просто как-то сомневаюсь что у Атмела этого не было. Больше поверю что у них там это хитрозасунуто или вообще снесено с официальной страницы как устаревшее.... PPS Ну нет так нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivana 0 13 февраля, 2012 Опубликовано 13 февраля, 2012 · Жалоба С наличием плавучей библиотеки то как раз проблем нет - она дадена. Только конечно некоторые простые функции придется ещё дописать. И самое что меня больше всего в ней беспокоит, это следующие вопросы 1) выдает ли она когда нибудь -0 в качестве результата (ноль с выставленным байтом знака) 2) как она пережевывает этот -0 в качестве входящего параметра 3) как она пережевывает +- бесконечность в качестве входящего параметра для арифметических операций и что выдает 4) как переводит в целое число если оно не вмещается в подготовленные для него 3 байта Ну и ещё некоторые вопросы. Часть из них можно проверить, но есть ли гарантия что поведение при проверке будет аналогичное всегда при любых случаях? :rolleyes: И конечно, волнуют больше другие алгоритмы, не влезая даже внутрь реализации плавучих функций. Сейчас мне требуется на цикл навскидку десяток умножений, десяток сложений/вычитаний и пара делений - думаю, можно ли оптимизировать логику и уменьшить их количество. ЗЫ ну и конечно если библиотека работает в своем формате, это потребует перевода всех входных и выходных параметров из IEEE и обратно - а это должно быть оправдано только существенной прибавкой скорости выполнения операций в ней, иначе как-то необоснованно получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 13 февраля, 2012 Опубликовано 13 февраля, 2012 · Жалоба Хм. хотя они вроде сразу нормальный Си предлагали, наверное тогда да, никто на ассемблере и не извращался в AVR. Это Вы всю пьесу пропустили, видимо. И увидели только занавес. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться