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

 
 
> С и asm-вставки, Локальные переменные
Xeon
сообщение Mar 30 2012, 06:05
Сообщение #1


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

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Всем доброго времени суток!!! Использую AVR Stidio 5. Написал программу и теперь надо её оптимизировать... некоторые расчёты уж компилятор сделал больно длинные (в смысле по количеству команд), хотя можно намного проще... Как мне известно локальные переменные обычно хранятся либо в стеке либо в регистрах... Вопрос следующий: как назначить переменной конкретный регистр или как узнать в каком регистре находится переменная, чтоб в дальнейшем иметь к ней доступ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexeyv
сообщение Apr 2 2012, 04:56
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Перед тем как оптимизировать на асме, разберитесь сначала с оптимизацией ни СИ. Во-первых, при оптимизации на асме можно сделать очепятку, которую потом будете долго и упорно искать. Во-вторых, оптимизация на Си выполняется гораздо быстрее. В-третьих, при хорошо изученном поведении своего компилятора, отимизированный код на Си будет всего на 5...15% больше своего собрата на асме, зато скока сэкономленого времени?!
И если только оптимизация на Си не помогает, то необходимо залезать в ассемблер.
Но и при ассемблерной оптимизации есть куча подводных камней.

Примеры:
1. Использование указателей вместо индексации массивов
Код
    int8_t * val = &Values[0]; // в не тела цикла
    ..................................
    // в цикле:
    FsummRe[FLookignForFreq] += (int32_t) (*val) * cosVal;
    FsummIm[FLookignForFreq] += (int32_t) (*val) * sinVal;
    ..................................
    val++;

Это сокращает код на одно вычисление адреса Values[CurVal]. FsummIm и FsummRe, FsinTable и FcosTable также можно привести к использованию указателей

2. Оптимизация циклов.
Цикл i=N;do{.....}while(i--); в большинстве случаев более оптимизировано компилируется, чем цикл for(i = 0; i < N; i++){........};

3. При целочисленной арифметике, деление заменяется на умножение и сдвиг.
4. Объявление наиболее используемых локальных переменных как register (не вовсех компиляторах)
5. и т.д. и т.п..........................



Go to the top of the page
 
+Quote Post
Xeon
сообщение Apr 2 2012, 07:46
Сообщение #3


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

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Цитата(alexeyv @ Apr 2 2012, 07:56) *


Спасибо! Весьма полезные советы!!!
Go to the top of the page
 
+Quote Post
XVR
сообщение Apr 2 2012, 08:30
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Xeon @ Apr 2 2012, 11:46) *
Спасибо! Весьма полезные советы!!!
На достаточном уровне оптимизации (-О3 достаточно) gcc это все сделает сам. (Хотя в конверсии массивов в указатели может и запутаться - у вас там весьма накрученно массивы индексируются)

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Xeon   С и asm-вставки   Mar 30 2012, 06:05
- - Dog Pawlowa   Цитата(Xeon @ Mar 30 2012, 09:05) Всем до...   Mar 30 2012, 06:23
- - Сергей Борщ   QUOTE (Xeon @ Mar 30 2012, 09:05) Вопрос ...   Mar 30 2012, 06:32
|- - Xeon   Нашел немного инфы по asm-вставкам здесь (может ко...   Mar 30 2012, 08:13
- - Xeon   Использую оптимизацию -Оs...   Mar 30 2012, 06:35
- - MaxiMuz   Чем отличается обьявление: Кодregister uint16_t Tm...   Mar 30 2012, 07:24
- - XVR   Судя по листигну компилятор не в курсе, что сущест...   Mar 30 2012, 08:35
- - Xeon   Тип процессора правильный, точно... Использую XMeg...   Mar 30 2012, 09:02
- - XVR   Вообще код странный. Там ни одного перехода нет, и...   Mar 30 2012, 09:16
- - Сергей Борщ   QUOTE (MaxiMuz @ Mar 30 2012, 10:24) Чем ...   Mar 30 2012, 09:22
- - MaxiMuz   если всеже будет обьявлять регистровые переменные ...   Mar 30 2012, 12:17
|- - Сергей Борщ   QUOTE (MaxiMuz @ Mar 30 2012, 15:17) пиши...   Mar 30 2012, 14:17
|- - MaxiMuz   Цитата(Сергей Борщ @ Mar 30 2012, 17:17) ...   Mar 31 2012, 07:12
- - Xeon   Привожу исходники: Немного опишу: первоночальная ...   Apr 1 2012, 05:59
- - XVR   А вы все таки откомпилируйте реальный код и посмот...   Apr 1 2012, 08:46
- - Xeon   Попробую... Да одна такая таблица получается) это ...   Apr 1 2012, 17:58
|- - alexeyv   Цитата(XVR @ Apr 2 2012, 14:30) На достат...   Apr 2 2012, 09:04
|- - =GM=   Цитата(XVR @ Apr 2 2012, 07:30) ... у вас...   Apr 2 2012, 09:19
- - Xeon   Возник следующий вопрос - как в на асме прочитать ...   Apr 6 2012, 08:46
- - alexeyv   1. pm не используется для вызова подпрограм. Для в...   Apr 9 2012, 03:56
- - fox2trot   Вообще то, при постановке вопроса следовало бы уто...   Apr 12 2012, 16:40


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

 


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


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