Δημοσιεύτηκε: 13 Νοέμ 2010, 10:58
από kalakouentin
Είμαι τελείως κοτόπουλο και πάω για ύπνο τώρα, αλλά όπως το λες έτσι μου φαίνεται παράλογο. Τί εννοείς θα κάνει "την επανάληψη του iteration πιο γρήγορα"? Προφανώς αν απαιτείται η χρήση προηγούμενων τιμών, δε μπορείς να αλλάξεις την διαδικασία σου σε παράλληλη. Καταλαβαίνω τί λες με το ότι ο "σειριακός" μπορεί να είναι γρηγορότερος, όντως συμβαίνει αλλά είσαι σίγουρος ότι είσαι τόσο άτυχος? Υπάρχουν συνήθως κάποιες εναλλακτικές block-related που μπορεί να σου σώσουν χρόνο.

Ευρύτερα πάντως:
Vectorization τα loop σου μπορείς να τα κάνεις?
Εφόσον έχεις Fortran (φτου κακά) έχεις βεβαιωθείς ότι κάνεις Unit-Stride κατά την διαδικασία Memory Access? Θυμήσου ότι η Fortran σε αντίθεση με την C, είναι Column-major.
Επίσης σκέψου αν αξίζει να κάνεις unroll κάποια Inner loops.
Ακόμα αν μπορείς χρησιμοποίησε πολλαπλασιασμούς και όχι διαιρέσεις.

Τέλος βεβαιώσου ότι δεν μπορείς να γράψεις το πρόβλημα σου σε μορφή που επιτρέπει parallelism... Θα σου σώσει χρόνο σίγουρα τελικά.

(Θεωρώ δεδομένο ότι χρησιμοποιείς έτοιμες βιβλιοθήκες για τον παραμικρό υπολογισμό και ότι έχει ενεργοποιημένες "-03", ή/και αντίστοιχες επιλογές optimaization κατά το compile σου.)

Α! Και αν θεωρείς ότι το parallel σε καταστρέφει τόσο γενικά, βάλε το Scalasca να δεις από πού χάνεται το παιχνίδι...