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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Оптимизация кода.
Dog Pawlowa
сообщение Jan 3 2016, 20:24
Сообщение #16


Гуру
******

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



Цитата(smalcom @ Jan 3 2016, 22:36) *
что вам даст т.н. "преамбула"?

Мне, и в общем случае - ничего.
Может, в конкретном случае это даст что-то топикстартеру (а именно он интересовался потерями быстродействия на вызов функций):
Цитата(Jenya7 @ Dec 31 2015, 10:50) *
переход в функцию и обратно это 4 такта если я не ошибаюсь

Ошибается, еще регистры сохранять надо, а при оптимизации без функций у компилятора больше возможностей.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
smalcom
сообщение Jan 4 2016, 07:27
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Цитата
Может, в конкретном случае это даст что-то топикстартеру (а именно он интересовался потерями быстродействия на вызов функций):

я вам отвечу: ничего она не даст. если вы посмотрите на листинг, то увидите, что ничего из сторонних адресов(и др. ресурсов) не используется.

вот с преамбулой для авр
Код
prog:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         00000000  00800100  000000a8  0000011c  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  1 .text         000000a8  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .stab         00000078  00000000  00000000  0000011c  2**2
                  CONTENTS, READONLY, DEBUGGING
  3 .stabstr      00000058  00000000  00000000  00000194  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .comment      00000011  00000000  00000000  000001ec  2**0
                  CONTENTS, READONLY
  5 .note.gnu.avr.deviceinfo 00000040  00000000  00000000  00000200  2**2
                  CONTENTS, READONLY
  6 .debug_info   000006cc  00000000  00000000  00000240  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_abbrev 0000066e  00000000  00000000  0000090c  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_line   0000001d  00000000  00000000  00000f7a  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_str    00000255  00000000  00000000  00000f97  2**0
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

00000000 <__vectors>:
   0:   0c 94 3e 00     jmp     0x7c   ; 0x7c <__ctors_end>
   4:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
   8:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
   c:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  10:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  14:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  18:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  1c:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  20:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  24:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  28:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  2c:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  30:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  34:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  38:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  3c:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  40:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  44:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  48:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  4c:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  50:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  54:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  58:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  5c:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  60:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  64:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  68:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  6c:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  70:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  74:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>
  78:   0c 94 48 00     jmp     0x90   ; 0x90 <__bad_interrupt>

0000007c <__ctors_end>:
  7c:   11 24           eor     r1, r1
  7e:   1f be           out     0x3f, r1       ; 63
  80:   cf ef           ldi     r28, 0xFF      ; 255
  82:   d0 e1           ldi     r29, 0x10      ; 16
  84:   de bf           out     0x3e, r29      ; 62
  86:   cd bf           out     0x3d, r28      ; 61
  88:   0e 94 4e 00     call    0x9c   ; 0x9c <main>
  8c:   0c 94 4f 00     jmp     0x9e   ; 0x9e <exit>

00000090 <__bad_interrupt>:
  90:   0c 94 00 00     jmp     0      ; 0x0 <__vectors>

00000094 <Reset>:
  94:   08 95           ret

00000096 <Failure>:
  96:   08 95           ret

00000098 <Run>:
  98:   08 95           ret

0000009a <Init>:
  9a:   08 95           ret

0000009c <main>:
  9c:   ff cf           rjmp    .-2            ; 0x9c <main>

0000009e <exit>:
  9e:   f8 94           cli
  a0:   0c 94 52 00     jmp     0xa4   ; 0xa4 <_exit>

000000a4 <_exit>:
  a4:   f8 94           cli

000000a6 <__stop_program>:
  a6:   ff cf           rjmp    .-2            ; 0xa6 <__stop_program>
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 4 2016, 09:28
Сообщение #18


Гуру
******

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



Цитата(smalcom @ Jan 4 2016, 10:27) *
я вам отвечу: ничего она не даст.

Это потому что функции пустые, в них не изменяются регистры.
Допустим, регистры все-таки изменяются, тогда они при вызове будут сохраняться, а при возврате - восстанавливаться, и время, потраченное на это, может быть намного больше чем собственно сохранение-восстановления PC.
Это может быть определяющим для выбора цикл с функциями/цикл без функций

Вот начало какой-то функции текущего проекта на MSP430, перед выполнением значащих действий 6 подготовительных команд:

Код
void ConvertStatSeconds(unsigned long sec)
{   unsigned long my_hour;
ConvertStatSeconds:
00D60C    120A               push.w  R10
00D60E    120B               push.w  R11
00D610    1208               push.w  R8
00D612    1209               push.w  R9
00D614    4C08               mov.w   R12,R8
00D616    4D09               mov.w   R13,R9
    my_hour=sec/3600;
00D618    403E 0E10          mov.w   #0xE10,R14
......


А вот функция инициализации портов, в которой регистры не искажаются. "Две большие разницы"

Код
ClockConfiguration:
00E614    40F2 0056 0056     mov.b   #0x56,&DCOCTL
    BCSCTL1=0x7;                //  CPU faster  RSEL=7
00E61A    40F2 0007 0057     mov.b   #0x7,&BCSCTL1
    BCSCTL2=SELS;               //select SMCLK=XT2CLK
00E620    42F2 0058          mov.b   #0x8,&BCSCTL2
    WDTCTL = WDTPW + WDTHOLD;   // Stop WDT
00E624    40B2 5A80 0120     mov.w   #0x5A80,&WDTCTL
    OnLed();
00E62A    D0F2 0080 001D     bis.b   #0x80,&P4OUT
}


Так о каких функциях в главном цикле говорит топикстартер?
Да он сам не знает - 4 такта и все. Ни реальных требований не прозвучало, ни реальных потерь.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
smalcom
сообщение Jan 4 2016, 10:36
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Цитата
Это потому что функции пустые, в них не изменяются регистры.

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

Цитата
Так о каких функциях в главном цикле говорит топикстартер?

перед нажатием кнопки "Ответить" пробуйте читать, что написал ТС.

Цитата
Да он сам не знает - 4 такта и все.

вызов и возврат - 4 такта.

приведённые вами куски дизасма - бред. ТС сразу написал, в чём проблема. Мне парили про преамбулу, а сами выложили "рванину".
уже вроде прошёл НГ.
-----------------------------------
ps. пролог и эпилог функции добавляется по решению компилятора, также компилятор решает какой размер этих кусков. ну и ещё NAKED есть.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 4 2016, 11:01
Сообщение #20


Гуру
******

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



Цитата(smalcom @ Jan 4 2016, 13:36) *
куски дизасма - бред... выложили "рванину"... уже вроде прошёл НГ...

Тю...


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 5 2016, 09:39
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



вобщем инлайнить функции и будет всем счастье. sm.gif с новым годом! sm.gif
Go to the top of the page
 
+Quote Post
smalcom
сообщение Jan 5 2016, 09:42
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



говоришь, показываешь - бестолку sm.gif да-да, с НГ ))
-------------
инлайнами тоже надо уметь пользоваться, farjump - он такой
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 23:58
Рейтинг@Mail.ru


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