Προς το περιεχόμενο

-O2 optimization option GDB


kfoynt

Προτεινόμενες αναρτήσεις

Να δούμε λίγο κώδικα;

 

ναι, σωστά... αν και δεν νομίζω να βοηθήσει γιατι ειναι πολύ απλός. Λοιπόν, δεν μπορώ να φανερώσω συγκεκριμένα πράγματα γιατι έχω υπογράψει, αλλα μια γενική ιδέα μπορώ να δώσω:

 

>
   long var; // δήλωση μεταβλητής

   if ( L->iterslv > 0 && L->mtxF != 1 ) {
       var = 8 * ( L->max_m + L->max_n );
   } else {
       var = 2;
   }

   VECT(L->var, double, var); 
   if ( L->var == NULL ) {
       printf("solver:  failed for var.\n");
       exit(1);
   }
   L->lvar = var; // XXX εδώ μου πετάει το segmentation

 

Ο L pointer δειχνει σε μία structure, η οποία υπάρχει στην μνήμη κανονικά, το τσέκαρα απο τον debugger. Επίσης η L->lvar υπάρχει στην μνήμη και έχει την τιμή που της έδωσα σε μία άλλη function. Τέλος η var ύστερα απο τα if statements παίρνει την τιμή 2, επίσης το τσέκαρα.

 

Αλλά!! όταν πάω να κάνω την ανάθεση L->lvar = var; παίρνω segmentation fault, η οποία ανάθεση, άμα δεν χρησιμοποιήσω το option -O2 δουλεύει μια χαρά.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

θα ήταν δύσκολο να στείλεις κάτι compileable;

 

Δυστυχώς ναι, θα πρέπει να πάρω άδεια πρώτα. To -O2 option κάνει αυτό:

 

Do not use compiler optimization directive such as "-O" or "-O2" which rearrange computing operations to gain speed as this reordering will not match the order of execution in the source code and it may be impossible to follow.

 

και μάλλον αυτό ειναι και το πρόβλημα? τι γνώμη έχετε?

 

Edit: Ναι, μπορώ να το τρέξω και χωρίς αυτό, αλλά ο κόσμος εκει έξω είναι πολύ ανταγωνιστικός :-D

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η επιλογή -O2 κανονικά δεν πρέπει να προκαλεί τέτοιες παρενέργειες. Μάλλον λάθος στον κώδικα υπάρχει...

 

Χρησιμοποιείς την επιλογή -Wall;

 

Συχνά δείχνει χρήσιμα πράγματα. Επίσης: είσαι απόλυτα σίγουρος ότι με το -O2 κερδίζεις στην πράξη στην εφαρμογή σου;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η επιλογή -O2 κανονικά δεν πρέπει να προκαλεί τέτοιες παρενέργειες. Μάλλον λάθος στον κώδικα υπάρχει...

 

Χρησιμοποιείς την επιλογή -Wall;

 

Συχνά δείχνει χρήσιμα πράγματα. Επίσης: είσαι απόλυτα σίγουρος ότι με το -O2 κερδίζεις στην πράξη στην εφαρμογή σου;

 

Οχι την -Wall δεν την έχω δοκιμάσει, αλλα το πρωί με το καλο θα την δοκιμάσω, δεν έχω να χάσω κάτι.

Η εφαρμογή είναι 20 χρονών δουλεια κάποιου καθηγητή, για να έχει βάλει το -O2 λογικά κάτι θα ξέρει, αλλα θα το διπλοτσεκάρω.

Τώρα για το αν έχω λάθος, και έγω το ίδιο πίστευα... αλλα οι εντολές που εκτελώ και μου δινουν το segmentation ειναι πολύ απλές + αν βγάλω το -Ο2 δουλεύει αρα? μάλλον θα φταιει αυτό που έκανα quote πιο πάνω και χρειάζομαι καλύτερη διαχείριση των μεταβλητών για να ταιριάζει με την ροή του -Ο2?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν ξέρω πού βρήκες αυτό το σχόλιο, γενικά το -O2 θεωρείται μάλλον ασφαλές.

 

Κάτι ακόμα: μήπως η εφαρμογή αποτελείται από πολλά αρχεία κώδικα; Αν ναι, μην ξεχνάς να τα κάνεις όλα compile από την αρχή εφόσον αλλάζεις τέτοιες παραμέτρους.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επειδή παω για ύπνο, θα τολμίσω να πω ότι κανείς δεν θα μυρίσει τα νύχια του να το λύσει. Δεν το έννοο με τον αγενή τρόπο αλλά αν δεν μπορείς έστω να στίλεις binary με τα debugging symbols..

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...