Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 27.05.2012, 07:19  
Flopix
Гражданин KAZUS.RU
 
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
Flopix на пути к лучшему
По умолчанию Оптимизация программ для AVR32 32UC3A

1. Подскажите как можно оптимизировать программы написанные для 32UC3A (AVR32) на Си в Atmel Studio 6. В частности интересует ускорение работы с числами с плавающей запятой. В алгоритме при расчете данных в цикле есть строка в которой осуществляется умножение double числа на int32.

Пример:
double a = 1.032545876;
int32 b = 15;
double c = a * b;

В описании серии контроллеров 32UC3 Atmel пишет что они поддерживают некоторые DSP команды и могут умножать числа с плавающей запятой чуть ли не за 2 такта. Но в реальности компилятор (GNU ToolChain) генерирует не менее 50 ассемблерных строк.

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



2. В частности интересует мнение форумчан о Atmel Studio 6. Очень смущает то, что она генерирует даже для простейших программ код размером не один десяток килобайт. На Atmega16 (язык тоже Си компилировал в Codevision) такие же алгоритмы занимали в разы меньше ПЗУ контроллера. При написании использую Atmel Fraimwork.
Реклама:

Последний раз редактировалось Flopix; 27.05.2012 в 07:23.
Flopix вне форума  
Сказали "Спасибо" Flopix
warel (29.06.2019)
Непрочитано 27.05.2012, 08:20  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Оптимизация программ для AVR32 32UC3A

Вместо double попробуйте float. double 64 бита на 32 битных ядрах и никто не обещал поддержку плавучки шире разрядности процессора. float 32 бита - вполне может компилятор задействовать аппаратные возможности. Но все равно в 2 такта не будет. И b тоже сделайте плавучим, иначе даже при аппаратных средствах 15 в 15.0 будет преобразовываться и соответственно потреблять память и такты.
kison вне форума  
Сказали "Спасибо" kison
warel (29.06.2019)
Непрочитано 27.05.2012, 09:41  
Flopix
Гражданин KAZUS.RU
 
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
Flopix на пути к лучшему
По умолчанию Re: Оптимизация программ для AVR32 32UC3A

kison, попробую. При прогоне алгоритма на ПК в Borland Builder в режиме отладки, если поставить тип float вместо double, то программа иногда генерирует исключение переполнения переменной.


И еще, значения переменных на avr32 хранятся в памяти не в обратном порядке как на ПК (сначала младший, а потом старшие байты). Это особенность компилятора или архитектуры?
Flopix вне форума  
Сказали "Спасибо" Flopix
warel (29.06.2019)
Непрочитано 27.05.2012, 11:52  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Оптимизация программ для AVR32 32UC3A

умножение на 15 можно представить в виде (a‹‹4)-a.
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
warel (29.06.2019)
Непрочитано 27.05.2012, 11:58  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,539
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Оптимизация программ для AVR32 32UC3A

Сообщение от Easyrider83 Посмотреть сообщение
умножение на 15 можно представить в виде (a‹‹4)-a.
У него число с плавающей точкой.
realid вне форума  
Сказали "Спасибо" realid
warel (29.06.2019)
Непрочитано 27.05.2012, 11:59  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Оптимизация программ для AVR32 32UC3A

Сообщение от realid Посмотреть сообщение
У него число с плавающей точкой.
Да я не обратил внимания.
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
warel (29.06.2019)
Непрочитано 27.05.2012, 13:15  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Оптимизация программ для AVR32 32UC3A

Есть быстрые методы умножения длинных чисел, думаю, по простоте, для мк. лучше всего подходит , интуитивно понятный, метод умножения Карацубы: http://ru.wikipedia.org/wiki/%D0%A3%...83%D0%B1%D1%8B , или более наглядно :http://habrahabr.ru/post/124258/ , как говориться, разделяй и властвуй!
nonamedov вне форума  
Сказали "Спасибо" nonamedov
warel (29.06.2019)
Непрочитано 27.05.2012, 13:26  
Flopix
Гражданин KAZUS.RU
 
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
Flopix на пути к лучшему
По умолчанию Re: Оптимизация программ для AVR32 32UC3A

nonamedov, число не длинное. Уверенны что алгоритм Карацубы поможет при умножении дробных чисел?
Flopix вне форума  
Сказали "Спасибо" Flopix
warel (29.06.2019)
Непрочитано 27.05.2012, 13:52  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Оптимизация программ для AVR32 32UC3A

Сообщение от Flopix Посмотреть сообщение
kison, попробую. При прогоне алгоритма на ПК в Borland Builder в режиме отладки, если поставить тип float вместо double, то программа иногда генерирует исключение переполнения переменной.
Значит не судьба на чисто аппаратных особенностях поездить. 50 команд вообще неплохой результат для перемножения double и целого. Если там конечно циклов нет Целое сначала преобразуется в плвучее - это такты и команды. Потом перемножается. Если не лезет в float то нужно либо смириться, либо подогнать алгоритм так, чтоб float хватало, либо переписать функцию перемножения самостоятельно. На ассемблере. Но не думаю что выигрыш будет больше пары тактов.

Сообщение от Flopix Посмотреть сообщение
Это особенность компилятора или архитектуры?
Архитектура определяет порядок байт в слове. Порядок слов может быть любым и отдан на откуп компилятору. Проц все равно не умеет работать с данными длинней своей разрядности.
kison вне форума  
Сказали "Спасибо" kison
warel (29.06.2019)
Непрочитано 27.05.2012, 14:03  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Оптимизация программ для AVR32 32UC3A

Flopix, нет, конечно, но попробовать стоит, тем более метод проверенный и теоретически подкрепленный, хотя, я бы на Вашем месте сперва попробовал "нормализовать" множители, т.е. сделать так, чтобы дробная и целая часть были примерно равными по размеру, ведь, то что число определено как float, далеко не значит, что битовый размер отведенный под эти части "плавающий", скорее всего он фиксированный, а у Вас дробная часть размером в 4 байта.
nonamedov вне форума  
Эти 2 пользователя(ей) сказали Спасибо nonamedov за это сообщение:
Flopix (27.05.2012), warel (29.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Diptrace - пакет программ для разработки печатных плат alder Proteus, KiCAD и другие ECAD 4556 16.10.2024 19:39
Компилятор для AVR32 Archer07 Микроконтроллеры, АЦП, память и т.д 2 25.05.2011 12:37
Оптимизация кода для термореле neid_nnov Микроконтроллеры, АЦП, память и т.д 10 27.10.2010 17:35
Разработка программ для PIC сразу и без всякого труда! NOPROBLEM Proteus, KiCAD и другие ECAD 47 10.04.2009 23:42
Написание программ для PIC на C DrEl Proteus, KiCAD и другие ECAD 15 28.07.2005 14:12


Часовой пояс GMT +4, время: 18:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot