Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Autotools
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Forum di discussione italiano
View previous topic :: View next topic  
Author Message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Mon May 07, 2007 11:23 am    Post subject: Autotools Reply with quote

Salve, vi propongo un quesito sugli autotools.
In pratica, ho sviluppato un piccolo software in C che, per vari motivi, volevo trattare con i tool di cui sopra per renderlo maneggevole, portabile e quant'altro. In fase di sviluppo, essendo sviluppatore unico, testavo sulla mia macchina passo dopo passo.
Attualemente, il codice funziona, se compilo con gcc senza alcun parametro di ottimizzazione, cioè giusto per fare dei test. Una volta però realizzato il contorno tramite l'uso dei tool sopra citati, ottengo (al termine di un ./configure && make all) un eseguibile di dimensione doppia rispetto al caso precedente e che "pianta" letteralmente la macchina, esaurendo (credo) la memoria e costringendo a continui swap su disco (vado un pò a intuito, perchè noto che il disco va sotto sforzo e niente funziona più fino a quando un bel CTRL-C mi viene in aiuto, dopo di che tutto torna alla normalità).
Ora, non nego che sono un novellino di tali tool e quindi ho tanto da imparare (ma proprio tanto), però questa cosa è alquanto strana e non riesco a spiegarmela, ma forse c'è una motivazione che ignoro e qualcuno potrà indicarmela... Almeno spero!!!!
Resto in attesa di una voce amica...

Ciao
Back to top
View user's profile Send private message
randomaze
Bodhisattva
Bodhisattva


Joined: 21 Oct 2003
Posts: 9985

PostPosted: Mon May 07, 2007 11:48 am    Post subject: Re: Autotools Reply with quote

skypjack wrote:
ma forse c'è una motivazione che ignoro e qualcuno potrà indicarmela... Almeno spero!!!!


Beh intanto puoi controllare cosa mette nel Makefile e in cosa tale file è diverso dal tuo.... :roll:
_________________
Ciao da me!
Back to top
View user's profile Send private message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Mon May 07, 2007 12:30 pm    Post subject: Reply with quote

Ti dirò, ieri andavo un pò di fretta e mi ero già appuntato di fare quanto mi hai detto, il fatto è che l'unica variante significativa mi pare proprio la presenza di -O2, per questo ho sottolineato anche nella spiegazione che non usavo ottimizzazione ne quant'altro, ma proprio un semplice: gcc -o nome_prog *.c .
In ogni caso lo farò, ma altre indicazioni?
Back to top
View user's profile Send private message
Scen
Retired Dev
Retired Dev


Joined: 29 Jul 2003
Posts: 2470
Location: Padova, Italy

PostPosted: Mon May 07, 2007 1:12 pm    Post subject: Reply with quote

skypjack wrote:
l'unica variante significativa mi pare proprio la presenza di -O2

Non è poco, -O2 introduce un bel pò di ottimizzazioni, e probabilmente il codicillo del tuo programma necessita di qualche correzione, se queste ottimizzazioni ne "sballano" il funzionamento.

Potresti configurare il tuo Makefile per far impostare in modo predefinito le ottimizzazioni ad un livello "basso" (-Os o -O1), e poi provare a sistemare il codice per renderlo funzionante con ottimizzazioni più spinte.

Comunque è normale che un binario compilato con ottimizzazioni varie abbia dimensioni più grosse di uno compilato "as-is"

Altri consigli non te ne so dare, non sono un esperto programmatore :?
_________________
I was born in a deep forest/I wish I could live here all my life/I am made from stones and roots/My home, these woods and roads
All my life I loved this sound/Of the woods all around/Eagles flies where the winds blows free
Journey is my destiny
Back to top
View user's profile Send private message
drizztbsd
Retired Dev
Retired Dev


Joined: 21 Nov 2004
Posts: 278
Location: Cesano Maderno

PostPosted: Mon May 07, 2007 1:32 pm    Post subject: Reply with quote

Scen wrote:
skypjack wrote:
l'unica variante significativa mi pare proprio la presenza di -O2

Non è poco, -O2 introduce un bel pò di ottimizzazioni, e probabilmente il codicillo del tuo programma necessita di qualche correzione, se queste ottimizzazioni ne "sballano" il funzionamento.

Potresti configurare il tuo Makefile per far impostare in modo predefinito le ottimizzazioni ad un livello "basso" (-Os o -O1), e poi provare a sistemare il codice per renderlo funzionante con ottimizzazioni più spinte.

Comunque è normale che un binario compilato con ottimizzazioni varie abbia dimensioni più grosse di uno compilato "as-is"

Altri consigli non te ne so dare, non sono un esperto programmatore :?


-Os è peggio di -O2, non usatelo che spesso e volentieri rompe qualcosa.
Per debug prova con -O0 o -O1.
Solitamente la cosa che rompe di -O2 è -fstrict-aliasing, prova ad aggiungere -fno-strict-aliasing alle CFLAGS
_________________
Gentoo/Alt lead
Gentoo/*BSD and Gentoo/FreeBSD deputy lead
Paludis contributor
Back to top
View user's profile Send private message
randomaze
Bodhisattva
Bodhisattva


Joined: 21 Oct 2003
Posts: 9985

PostPosted: Mon May 07, 2007 1:58 pm    Post subject: Reply with quote

Da come descrivi il problema puoi usare top per vedere la memoria allocata dal tuo processo. E' un pò grezzo ma il tuo programma va a consumare tutta la memoria e poi la swap dovresti vederlo chiaramente.

Poi, quando sviluppi (e, perché no, quando rilasci non solo) sarebbe il caso di usare almeno -Wall per avere i warnings (i quali, anche se sono warnings e non error sarebbe bene che venissero risolti).

Già che ci sei controlla anche la fase di linking... con quali librerie e quali parametri vengono usati per l'eseguibile?
_________________
Ciao da me!
Back to top
View user's profile Send private message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Mon May 07, 2007 6:20 pm    Post subject: Reply with quote

Scusate, che cosa intendete dicendo che nel caso in cui -O2 da certi problemi bisogna rivedere il codice perchè potrebbe avere qualche problemuccio?
Così, giusto per capire di cosa devo andare alla ricerca...
Grazie per l'aiuto a tutti, intanto!!
Back to top
View user's profile Send private message
Scen
Retired Dev
Retired Dev


Joined: 29 Jul 2003
Posts: 2470
Location: Padova, Italy

PostPosted: Mon May 07, 2007 6:24 pm    Post subject: Reply with quote

skypjack wrote:
Scusate, che cosa intendete dicendo che nel caso in cui -O2 da certi problemi bisogna rivedere il codice perchè potrebbe avere qualche problemuccio?

Alt, prendi le mie parole con le pinze, non sono un esperto programmatore, ma spero di non avere detto castronerie! :P

Quello che penso è che un programma, se scritto bene, dovrebbe funzionare altrettanto egregiamente anche se vengono applicate delle ottimizzazioni di vario tipo al codice da parte del compilatore.
_________________
I was born in a deep forest/I wish I could live here all my life/I am made from stones and roots/My home, these woods and roads
All my life I loved this sound/Of the woods all around/Eagles flies where the winds blows free
Journey is my destiny
Back to top
View user's profile Send private message
jordan83
Apprentice
Apprentice


Joined: 17 Apr 2006
Posts: 222
Location: check your closet...

PostPosted: Mon May 07, 2007 9:14 pm    Post subject: Reply with quote

Scen wrote:

Quello che penso è che un programma, se scritto bene, dovrebbe funzionare altrettanto egregiamente anche se vengono applicate delle ottimizzazioni di vario tipo al codice da parte del compilatore.


Le ottimizzazioni non devono assolutamente andare a modificare il comportamento di un programma (ho fatto un corso all'università sull'argomento).
Il loro scopo è quello di rendere più efficiente l'esecuzione del codice (ad esempio rimuovendo variabili non utilizzate, estraendo dai cicli espressioni calcolate più volte, rimuovendo codice non raggiungibile, sostituendo il valore numerico alle costanti e molte altre tecniche).
Ne consegue che se il tuo programma esegue allegramente divisioni per 0, un'ottimizzazione non deve assolutamente modificare tale comportamento... :D

Alcune ottimizzazioni tuttavia possono essere potenzialmente dannose, ad esempio perché valide solo in particolari "contesti", in presenza di particolari condizioni. Di conseguenza, se il compilatore sbaglia nel valutare il verificarsi di tali condizioni, l'eseguibile prodotto è potenzialmente instabile e la sua esecuzione probabilmente produce risultati diversi da quelli prodotti dallo stesso eseguibile non ottimizzato. Chiaramente questo deve essere considerato come un bug del compilatore, non un problema da ricondursi al programma.

Quindi, a meno che per gcc le regole in gioco non siano diverse (per qualche motivo a me ignoto), il codice del programma non deve essere "adeguato" alle ottimizzazioni ;)
_________________
Time is a great teacher, but unfortunately it kills all its pupils.
Louis-Hector Berlioz
--
When the Boogeyman goes to sleep every night, he checks his closet for Chuck Norris.
chucknorrisfacts.com
Back to top
View user's profile Send private message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Tue May 08, 2007 11:14 am    Post subject: Reply with quote

Quindi, visto che compilando senza parametri tutto funziona e valgrind non mi da problemi dopo svariati test, verso cosa dovrei orientarmi?
Il codice sembra funzionare correttamente, ho percorso quasi tutte le possibilità e non ha presentato errori, ma compilando con -O2 si "pianta" letteralmente... Che ne pensate??
Ora faccio alcune prove e vi so dare notizie per certo...
Back to top
View user's profile Send private message
randomaze
Bodhisattva
Bodhisattva


Joined: 21 Oct 2003
Posts: 9985

PostPosted: Tue May 08, 2007 11:29 am    Post subject: Reply with quote

skypjack wrote:
Il codice sembra funzionare correttamente, ho percorso quasi tutte le possibilità e non ha presentato errori, ma compilando con -O2 si "pianta" letteralmente... Che ne pensate??


randomaze wrote:
Poi, quando sviluppi (e, perché no, quando rilasci non solo) sarebbe il caso di usare almeno -Wall per avere i warnings (i quali, anche se sono warnings e non error sarebbe bene che venissero risolti).

_________________
Ciao da me!
Back to top
View user's profile Send private message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Tue May 08, 2007 12:10 pm    Post subject: Reply with quote

Ovvio, rand, intendevo se avete altre strade o idee da suggerirmi, così appena mi ci metto le controllo tutte.
Riformulo la domanda: Alla luce del fatto che su quanto già detto fin'ora ho preso appunti, avete altri suggerimenti? :wink:
Back to top
View user's profile Send private message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Tue May 08, 2007 3:25 pm    Post subject: Reply with quote

Ok, ho fatto alcune prove di compilazione e proprio passando il parametro -O2 le prestazioni degradano come sopra detto.
Senza passare quel parametro, tutto funziona correttamente!!
Qualcuno saprebbe spiegarmi il perchè? Mi sembra assurdo... Sbaglio o dimentico qualcosa??
Back to top
View user's profile Send private message
jordan83
Apprentice
Apprentice


Joined: 17 Apr 2006
Posts: 222
Location: check your closet...

PostPosted: Tue May 08, 2007 4:32 pm    Post subject: Reply with quote

skypjack wrote:
Ok, ho fatto alcune prove di compilazione e proprio passando il parametro -O2 le prestazioni degradano come sopra detto.
Senza passare quel parametro, tutto funziona correttamente!!
Qualcuno saprebbe spiegarmi il perchè? Mi sembra assurdo... Sbaglio o dimentico qualcosa??

Mah, potresti provare a debuggare e vedere a che punto il programma inizia ad abbuffarsi di risorse.

Probabilmente qualche ottimizzazione non ha fatto bene il suo lavoro, non so. Personalmente non ho una grandissima esperienza.
In più è difficile dare risposte senza poter vedere il sorgente o sapere cosa fa sto programma.

Un'altra cosa che potresti fare è usare le ottimizzazioni raccolte in O2 singolarmente, in modo da capire quale sia quella che crea problemi.
Inoltre potresti ricontrollare il codice, soprattutto i cicli; magari uno di essi presenta un comportamento bizzarro sotto certe condizioni, anche se è molto improbabile visto che dici che tutto funziona senza O2... :|

Magari hai trovato un bug di gcc! ;)
_________________
Time is a great teacher, but unfortunately it kills all its pupils.
Louis-Hector Berlioz
--
When the Boogeyman goes to sleep every night, he checks his closet for Chuck Norris.
chucknorrisfacts.com
Back to top
View user's profile Send private message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Tue May 08, 2007 5:00 pm    Post subject: Reply with quote

jordan83 wrote:

Mah, potresti provare a debuggare e vedere a che punto il programma inizia ad abbuffarsi di risorse.

Probabilmente qualche ottimizzazione non ha fatto bene il suo lavoro, non so. Personalmente non ho una grandissima esperienza.
In più è difficile dare risposte senza poter vedere il sorgente o sapere cosa fa sto programma.

Un'altra cosa che potresti fare è usare le ottimizzazioni raccolte in O2 singolarmente, in modo da capire quale sia quella che crea problemi.
Inoltre potresti ricontrollare il codice, soprattutto i cicli; magari uno di essi presenta un comportamento bizzarro sotto certe condizioni, anche se è molto improbabile visto che dici che tutto funziona senza O2... :|

Magari hai trovato un bug di gcc! ;)

Vedi, per punti:
- ora sto facendo debug sotto -O2, poi vi dirò
- il codice al momento non posso distribuirlo per motivi che, se vuoi, ti spiego anche (ma è un pò lunga)
- come scovo le ottimizzazioni fatte in O2?
- bug di gcc? lo vedo molto ma molto probabile, sai, viste le mie indubbie capacità!! :wink:
Back to top
View user's profile Send private message
Guglie
Apprentice
Apprentice


Joined: 01 Mar 2004
Posts: 240
Location: switzerland - zürich

PostPosted: Tue May 08, 2007 5:08 pm    Post subject: Reply with quote

skypjack wrote:
- come scovo le ottimizzazioni fatte in O2?

http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Optimize-Options.html
_________________
A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath!
Back to top
View user's profile Send private message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Tue May 08, 2007 5:27 pm    Post subject: Reply with quote

Ok, sono un idiota, perchè lo sapevo pure!! Sorry per la domanda inutile... :wink:

[EDIT]:
Ho ristretto il campo ad una funzione, controllando che all'ingresso tutto sia corretto (e lo è) e valutando che all'uscita qualcosa è andato storto!!
Ristringere i dubbi ad un solo file .c non è poco, direi!! :D
Il fatto è che questa funzione ha mille piccole funzioni di supporto!!!!!!! :(
Quel file .c in particolare è un pò lungo, mi ci vorra un bel pò a scovare il bug...
Grazie dell'aiuto, per adesso, a tutti!!
Back to top
View user's profile Send private message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Wed May 09, 2007 5:45 pm    Post subject: Reply with quote

Salve a tutti, oltre che ringraziare ancora per l'aiuto, chiedo pubblicamente di essere crocifisso in sala mensa!!
Astutamente, mi era sfuggito un -Wall fra i parametri e, una volta notato e dato, ha messo in risalto due o tre pecchè che effettivamente compromettevano il corretto funzionamento del programma, una volta ottimizzato.
Mi è bastato risolvere i warning e tutto è tornato a funzionare, anche post-ottimizzazione!!
Grazie ancora e scusate l'inutile discussione causa sbadataggine!!
Back to top
View user's profile Send private message
randomaze
Bodhisattva
Bodhisattva


Joined: 21 Oct 2003
Posts: 9985

PostPosted: Thu May 10, 2007 8:40 am    Post subject: Reply with quote

skypjack wrote:
Mi è bastato risolvere i warning e tutto è tornato a funzionare, anche post-ottimizzazione!!


Per curiosità, cosa dicevano i messaggi in questione?
_________________
Ciao da me!
Back to top
View user's profile Send private message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Thu May 10, 2007 9:07 am    Post subject: Reply with quote

Ora, ovviamente, non so ripeterteli, perchè corretti.
In ogni caso, se non sbaglio, erano un valore di ritorno che non tornava, una %d al posto di un %f e una macro _GNU_SOURCE mancante, ma mi pare ci fosse un'altro punto.
Se mi viene altro in mente, te lo dico.
Perchè ti incuriosisce tanto?
Back to top
View user's profile Send private message
randomaze
Bodhisattva
Bodhisattva


Joined: 21 Oct 2003
Posts: 9985

PostPosted: Thu May 10, 2007 10:32 am    Post subject: Reply with quote

skypjack wrote:
Perchè ti incuriosisce tanto?


Perché (sto ragionando alla cieca sulla base delle tue informazioni) il tuo problema era, presumibilmente, un ciclo che allocava la memoria e non terminava. Questo potrebbe essere dato da un cast errato su una variabile signed/unsigned o da un controllo su un puntatore che in realtà puntava a qualcos'altro.

Volevo vedere se ci avevo preso o meno... escludo il problema possa essere dipeso dalla stringa di formattazione (in quel caso alla peggio o stampa valori errati oppure lascia un core) ma probabilmente era il _GNU_SOURCE mancante (e qui bisognerebbe vedere quali ifdef/ifndef vengono eseguiti dalle librerie su quella macro per capire la discordanza dei dati a cosa era dovuta.
_________________
Ciao da me!
Back to top
View user's profile Send private message
skypjack
l33t
l33t


Joined: 05 Aug 2006
Posts: 884
Location: Italia - Firenze

PostPosted: Thu May 10, 2007 6:40 pm    Post subject: Reply with quote

Anch'io mi sono orientato sul _GNU_SOURCE mancante, come fonte del problema. In ogni caso, avendo risolto, non ho indagato ulteriormente.
Mi capirai, credo...
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Forum di discussione italiano All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum