View previous topic :: View next topic |
Author |
Message |
skypjack l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/125299789148407c8d02083.jpg)
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Mon May 07, 2007 11:23 am Post subject: Autotools |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
randomaze Bodhisattva
![Bodhisattva Bodhisattva](/images/ranks/rank-bodhisattva.gif)
![](images/avatars/191195238462262e08ea92.jpg)
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Mon May 07, 2007 11:48 am Post subject: Re: Autotools |
|
|
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.... ![Rolling Eyes :roll:](images/smiles/icon_rolleyes.gif) _________________ Ciao da me! |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
skypjack l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/125299789148407c8d02083.jpg)
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Mon May 07, 2007 12:30 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
Scen Retired Dev
![Retired Dev Retired Dev](/images/ranks/rank-retired.gif)
![](images/avatars/13649464064b974bf2b19cc.jpg)
Joined: 29 Jul 2003 Posts: 2470 Location: Padova, Italy
|
Posted: Mon May 07, 2007 1:12 pm Post subject: |
|
|
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 ![Confused :?](images/smiles/icon_confused.gif) _________________ 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 |
|
![](templates/gentoo/images/spacer.gif) |
drizztbsd Retired Dev
![Retired Dev Retired Dev](/images/ranks/rank-retired.gif)
![](images/avatars/84221162347457c55a967d.png)
Joined: 21 Nov 2004 Posts: 278 Location: Cesano Maderno
|
Posted: Mon May 07, 2007 1:32 pm Post subject: |
|
|
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 ![Confused :?](images/smiles/icon_confused.gif) |
-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 |
|
![](templates/gentoo/images/spacer.gif) |
randomaze Bodhisattva
![Bodhisattva Bodhisattva](/images/ranks/rank-bodhisattva.gif)
![](images/avatars/191195238462262e08ea92.jpg)
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Mon May 07, 2007 1:58 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
skypjack l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/125299789148407c8d02083.jpg)
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Mon May 07, 2007 6:20 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
Scen Retired Dev
![Retired Dev Retired Dev](/images/ranks/rank-retired.gif)
![](images/avatars/13649464064b974bf2b19cc.jpg)
Joined: 29 Jul 2003 Posts: 2470 Location: Padova, Italy
|
Posted: Mon May 07, 2007 6:24 pm Post subject: |
|
|
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!
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 |
|
![](templates/gentoo/images/spacer.gif) |
jordan83 Apprentice
![Apprentice Apprentice](/images/ranks/rank_rect_2.gif)
![](images/avatars/30437556144435121ccef1.png)
Joined: 17 Apr 2006 Posts: 222 Location: check your closet...
|
Posted: Mon May 07, 2007 9:14 pm Post subject: |
|
|
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...
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 ![Wink ;)](images/smiles/icon_wink.gif) _________________ 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 |
|
![](templates/gentoo/images/spacer.gif) |
skypjack l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/125299789148407c8d02083.jpg)
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Tue May 08, 2007 11:14 am Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
randomaze Bodhisattva
![Bodhisattva Bodhisattva](/images/ranks/rank-bodhisattva.gif)
![](images/avatars/191195238462262e08ea92.jpg)
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Tue May 08, 2007 11:29 am Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
skypjack l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/125299789148407c8d02083.jpg)
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Tue May 08, 2007 12:10 pm Post subject: |
|
|
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 :wink:](images/smiles/icon_wink.gif) |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
skypjack l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/125299789148407c8d02083.jpg)
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Tue May 08, 2007 3:25 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
jordan83 Apprentice
![Apprentice Apprentice](/images/ranks/rank_rect_2.gif)
![](images/avatars/30437556144435121ccef1.png)
Joined: 17 Apr 2006 Posts: 222 Location: check your closet...
|
Posted: Tue May 08, 2007 4:32 pm Post subject: |
|
|
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! ![Wink ;)](images/smiles/icon_wink.gif) _________________ 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 |
|
![](templates/gentoo/images/spacer.gif) |
skypjack l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/125299789148407c8d02083.jpg)
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Tue May 08, 2007 5:00 pm Post subject: |
|
|
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! ![Wink ;)](images/smiles/icon_wink.gif) |
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 :wink:](images/smiles/icon_wink.gif) |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
Guglie Apprentice
![Apprentice Apprentice](/images/ranks/rank_rect_2.gif)
![](images/avatars/33683012042171e97ee913.jpg)
Joined: 01 Mar 2004 Posts: 240 Location: switzerland - zürich
|
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
skypjack l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/125299789148407c8d02083.jpg)
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Tue May 08, 2007 5:27 pm Post subject: |
|
|
Ok, sono un idiota, perchè lo sapevo pure!! Sorry per la domanda inutile...
[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!!
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 |
|
![](templates/gentoo/images/spacer.gif) |
skypjack l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/125299789148407c8d02083.jpg)
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Wed May 09, 2007 5:45 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
randomaze Bodhisattva
![Bodhisattva Bodhisattva](/images/ranks/rank-bodhisattva.gif)
![](images/avatars/191195238462262e08ea92.jpg)
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Thu May 10, 2007 8:40 am Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
skypjack l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/125299789148407c8d02083.jpg)
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Thu May 10, 2007 9:07 am Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
randomaze Bodhisattva
![Bodhisattva Bodhisattva](/images/ranks/rank-bodhisattva.gif)
![](images/avatars/191195238462262e08ea92.jpg)
Joined: 21 Oct 2003 Posts: 9985
|
Posted: Thu May 10, 2007 10:32 am Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
skypjack l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/125299789148407c8d02083.jpg)
Joined: 05 Aug 2006 Posts: 884 Location: Italia - Firenze
|
Posted: Thu May 10, 2007 6:40 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
|