Отговори на тема  [ 85 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5, 6  Следваща
Оптимизиране на код? 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
rumen написа:
За всичко си прав.
Но това не променя факта че кода генериран от ПРОТОНА е най оптимален.
Каквото всъщност е и заглавието на темата.


Какво значи:
"най оптимален"
?????
Дай определение!

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Вто Май 30, 2006 4:17 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение 
Броя на редовете на АСМ файла са около 30% по-малко.
И се изпълняват по-бързо.
За програмиране на пикове е номер едно.


Вто Май 30, 2006 4:56 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
rumen написа:
За програмиране на пикове е номер едно.

Само да попитам - ти на колко различни езика и компилатора си компилирал една и съща програма за да твърдиш, че тоя протон генерира 30% по-малко код. Дай листингите генерирани от различните компилатори да сравним. Стана ми много интересно това нещо - от кога бейсика е по-оптимален от с-то.


Вто Май 30, 2006 5:47 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение 
Няколко поста по-нагоре съм дал линк към темата дето които поиска се включи в състезанието на компилатори.
Там са и казусите които пригравахме.


Вто Май 30, 2006 5:53 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение 
На който не му се рови ето сентенцията.
По предложение на Пирев
Направихме следната математика

#include "16f877a.h"
#CASE

void main(void) {
signed int8 a8,b8,c8;
signed int16 a16,b16,c16;
float fa,fb,fc;

a8 = 122; b8 = -122;
c8 = a8 + b8;
c8 = a8 - b8;
c8 = a8 * b8;
c8 = a8 / b8;

a16 = 4321; b16 = -1234;
c16 = a16 + b16;
c16 = a16 - b16;
c16 = a16 * b16;
c16 = a16 / b16;

fa = 3,141593; fa = 6,283185;
fc = fa + fb;
fc = fa - fb;
fc = fa * fb;
fc = fc / fb;
}

ROM used: 1019 words (12%)
Largest free fragment is 2048
RAM used: 26 (15%) at main() level
42 (24%) worst case
Stack: 1 locations


Това е на ПРОТОН

Device = 16F877
XTAL = 4
'OPTIMISER_LEVEL = 6

Dim a8 As Byte
Dim b8 As DWord
Dim c8 As Byte

Dim a16 As Word
Dim b16 As DWord
Dim c16 As DWord

Dim fa As Float
Dim fb As Float
Dim fc As Float
a8 = 122; b8 = -122;
c8 = a8 + b8
c8 = a8 - b8
c8 = a8 * b8
c8 = a8 / b8

a16 = 4321
b16 = -1234
c16 = a16 + b16
c16 = a16 - b16
c16 = a16 * b16
c16 = a16 / b16

fa = 3.141593
fa = 6.283185
fc = fa + fb
fc = fa - fb
fc = fa * fb
fc = fc / fb


резултатите са
935 реда с изключен оптимизатор
927 със включен

61 променливи

На математиката се представи по зле само 20% по-добър
При работата с дисплеи резултата беше 34%


Вто Май 30, 2006 6:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Ама си еба си и тъпака.

този код не прави нищо и всеки свястен компиолатор при голямо ниво на оптимизация генерира 2 байта код.

тоест там най отдолу
GOTO A:?C_EXIT ; Overlay area size: 0

main:
REQUIRE ?CLPIC16C61_2_21_L00
; 2 {
; Function Enter ;
; 3
; 4 signed char a8,b8,c8;
; 5 signed int a16,b16,c16;
; 6 float fa,fb,fc;
; 7
; 8
; 9 a8 = 122; b8 = -122;
; 10 c8 = a8 + b8;
; 11 c8 = a8 - b8;
; 12 c8 = a8 * b8;
; 13 c8 = a8 / b8;
; 14
; 15 a16 = 4321; b16 = -1234;
; 16 c16 = a16 + b16;
; 17 c16 = a16 - b16;
; 18 c16 = a16 * b16;
; 19 c16 = a16 / b16;
; 20
; 21 fa = 3,141593; fa = 6,283185;
; 22 fc = fa + fb;
; 23 fc = fa - fb;
; 24 fc = fa * fb;
; 25 fc = fc / fb;
; 26 }
GOTO A:?C_EXIT ; Overlay area size: 0

END
; 27
;
; 2 bytes in segment CODE
;
; 2 bytes of CODE memory
;
;Errors: none
;Warnings: 3



това са варнингите които е нормално да ти даде компилатора.
E:\NewProjects\test\test.c (23) : Warning[Pe549]: variable "fb" is used before its value is set
E:\NewProjects\test\test.c (4) : Warning[Pe550]: variable "c8" was set but never used
E:\NewProjects\test\test.c (5) : Warning[Pe550]: variable "c16" was set but never used

Ако обичаш заври си в задника тоя протон.


Последна промяна Nikola Kirov на Вто Май 30, 2006 6:42 pm, променена общо 1 път



Вто Май 30, 2006 6:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Сори. Несъм видял. Явно наистина прави по-оптимален код. Аз също пробвах една елементарна сметка:


Код:
#include <pic1662x.h>

void main(void)
{
float   F1, F2, F3;

   while(1)
   {
      F1 = 3.14;
      F2 = 6.28;
      F3 = F1*F2;
   }
}

Компилирано с HT-PICC : 202 байта програмна памет и 21 байта RAM

Код:
Device = 16F628A               ' This will be ignored once inside MPLAB
       
        Dim F1 As Float
        Dim F2 As Float
        Dim F3 As Float
        While 1 = 1                  ' Create an infinite loop
            F1 = 3.14
            F2 = 6.28
            F3 = F1*F2           
        Wend                     ' Do it forever


Това дава в протеус 156 байта програмна памет и 27 байта RAM

С RAM-а явно е малко по-зле, но найстина прави по-оптимална програма
Въпроса е на какво точно се дължи това и, че наистина С си е С и може да си прехвърляш програмите на какъвто чип искаш, докато тоя бейсик е малко странна работа 8) .


Вто Май 30, 2006 6:41 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
аиде стига де от теб не очаквах да ръсиш глупости.

първо

E:\NewProjects\test\test.c (5) : Warning[Pe550]: variable "F3" was set but never used

и второ тоя код не прави нищо и нормално е да се компилира с такъв резултат
SEGMENT SPACE START ADDRESS END ADDRESS SIZE TYPE ALIGN
======= ===== ============= =========== ==== ==== =====
INTVEC CODE 0000 - 0001 2 com 1
RCODE CODE 0002 rel 1
<CODE> 1 CODE 0002 - 0003 2 rel 1
SCODE CODE 0014 - 0015 2 rel 1

****************************************
* *
* END OF CROSS REFERENCE *
* *
****************************************

6 bytes of CODE memory

Errors: none
Warnings: none


Вто Май 30, 2006 6:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Незнам ти с какво го компилираш, но аз го компилирам с HI-TECH PICC 9.50 и на мен ми дава следния резултат.
Пък сега, че кода нищо неправи - така е. Ама тъпия протеус го прави същото неправене с 25% по-малко код. Със същия успех можех тоя резултат да го преобразувам в стринг и да го пратя по серийния порт например - само идея. Аз също преди да го пробвам щях да се закълна, че няма как да стане - ама явно май не е така. Ако имаш някъква идея - съм готов да я обсъдим 8) .

The target "C:\temp\Proba\HT\Proba.obj" is already up to date.
Executing: "C:\Program Files\HI-TECH Software\PICC\9.50\BIN\PICC.EXE" -E"Proba.lde" "C:\temp\Proba\HT\Proba.obj" -M"Proba.map" -O"Proba.cof" -O"Proba.hex" -Q -MPLAB -16F628A

Memory Usage Map:

Program space:
CODE used CAh ( 202) of 800h words ( 9.9%)
CONST used 0h ( 0) of 800h words ( 0.0%)
ENTRY used 0h ( 0) of 800h words ( 0.0%)
STRING used 0h ( 0) of 800h words ( 0.0%)

Data space:
BANK0 used 15h ( 21) of 60h bytes ( 21.9%)
BANK1 used 0h ( 0) of 50h bytes ( 0.0%)
BANK2 used 0h ( 0) of 30h bytes ( 0.0%)
COMBANK used 0h ( 0) of 10h bytes ( 0.0%)

EEPROM space:
EEDATA used 0h ( 0) of 80h bytes ( 0.0%)

ID Location space:
IDLOC used 0h ( 0) of 4h bytes ( 0.0%)

Configuration bits:
CONFIG used 0h ( 0) of 1h word ( 0.0%)

Summary:
Program space used CAh ( 202) of 800h words ( 9.9%)
Data space used 15h ( 21) of E0h bytes ( 9.4%)
EEPROM space used 0h ( 0) of 80h bytes ( 0.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)
Configuration bits used 0h ( 0) of 1h word ( 0.0%)

Loaded C:\temp\Proba\HT\Proba.cof.
BUILD SUCCEEDED: Tue May 30 11:11:41 2006


Вто Май 30, 2006 7:15 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Хахахаха - Кольо май ще излезнеш прав. Направих резултата от умножението да се ползва - изкарвам го на единия порт и резултата се смени. 260 байта срещу 295 в полза на с-то. Тоя протон верно, че като е видял, че не се ползва и сигурно даже въобще не го е смятал. Верно нещо съм изперкал. Айде Румене пак ти си на ход да доказваш 8) .
ПП. Ама трябва да ми е простено - днес и вчера тука са едни жеги премесени с едни високи влажности, че ако не е климатика в офиса съм умрял направо. Недава да си покажеш носа навън - имам чувство, че дробовете ми ще се разкъсат. Та затова изперквам де 8) .


Вто Май 30, 2006 7:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Явно трябва да пообясня.

Кода не прави нищо докато не се използва резултата за нещо или операциите които прави не са върху volatile променливи.

Откъде знаеш какво изхвърлят от кода тия беисици?

това с което го компилирах беше IARс включена оптимизация на високо ниво.
Да не говорим че това е за пик 16 и не е развиван от 2-3 години и няма оттогава нови версии тоя компилатор.

предполагам че не си си включил оптимизациите на Hi tech-a. А режимите без оптимизация са само за дебъгване.

ПС. А сетил си се. Постовете ни излязоха почти едновременно


Последна промяна Nikola Kirov на Вто Май 30, 2006 7:29 pm, променена общо 1 път



Вто Май 30, 2006 7:27 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение 
Дай това което правиш и С то Бейсика да ги видя


Вто Май 30, 2006 7:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Нали съм ги сложил по-горе - негледаш ли :) .


Вто Май 30, 2006 7:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Няма най-оптимален код. Това са глупости.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Май 30, 2006 7:31 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
еи не си седна на задника тоз келеш.
Като изкараш резултатите на IAR -a za тия 2 кода а те са 2 баита и 6 баита. Тогава може да продължим да сравняваме


Вто Май 30, 2006 7:35 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 85 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5, 6  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни