[Advcomparch] Loop interchange και αριθμος εντολων

Konstantinos Nikas knikas at cslab.ece.ntua.gr
Thu Jul 23 20:22:32 EEST 2009


Καλησπέρα,

ο compiler επηρεάζει προφανώς τον κώδικα που δημιουργείται. Ακόμα και αν 
κάποιος κάνει compile με τα ίδια flags σε διαφορετικά μηχανήματα που 
έχουν διαφορετικές εκδόσεις του ίδιου compiler, είναι πολύ πιθανό να δει 
τελείως διαφορετικό παραγόμενο κώδικα.

Βασικά υπάρχουν 2 λόγοι για τους οποίους δεν επιλέξαμε το -O0 (ή αλλιώς 
το compilation χωρίς optimizations).

1) Αν κάνετε compile με -Ο0 ο αριθμός των instructions είναι μεν 
σταθερός, αλλά από την άλλη είναι τόσο μεγάλος που να αυξάνει κατά πολύ 
το χρόνο προσομοίωσης (κάτι που θέλαμε να αποφύγουμε εν καιρώ εξεταστικής).

2) Όλα αυτά τα χρόνια στα διάφορα μαθήματα (τουλάχιστον της 
Αρχιτεκτονικής) έχουμε συζητήσει διάφορα optimizations (cache blocking 
etc) τα οποία λέμε ότι βελτιώνουν την απόδοση (μέσω της βελτίωσης ας 
πούμε του cache access pattern). Στην πραγματικότητα όμως τα πράγματα 
δεν είναι τόσο απλά. Υπάρχει η επιροή του compiler, την οποία μέχρι τώρα 
δεν είχατε την ευκαίρια να διαπιστώσετε σε τέτοιο βαθμό.

Για μας λοιπόν το ιδανικό, είναι ακριβώς αυτό που έκανες, δηλαδή κάποιος 
να μην πάρει απλά κάποια νούμερα και να τα πετάξει στο χαρτί, αλλά να 
σκεφτεί και να καταλάβει ότι εδώ "κάτι δεν πάει καλά", οπότε να αρχίσει 
να σκέφτεται τι άλλο μπορεί να φταίει (καταλήγωντας βεβαίως στον compiler).

Σε κάθε περίπτωση (είτε κάποιος ενδιαφερθεί και κάνει το παραπάνω είτε 
όχι) έχουμε δώσει και ένα μοντέλο απόδοσης, το οποίο και προτείνουμε να 
χρησιμοποιήσετε σαν μέτρο σύγκρισης μεταξύ των διαφορετικών υλοποίησεων.

Κ.

Lefkaditis Giorgos wrote:
> Απο τις προσομοιωσεις για τις διαφορετικες αναδιαταξεις των loops 
> προκυπτει διαφορετικο instructions executed καθε φορα και μαλιστα η 
> αποκλιση απο το μικροτερ στο μεγαλυτερο ειναι κοντα στα 85 Μ εντολες. 
> Υστερα απο καποια πειραματα που εκανα βρηκα οτι χωρις το -Ο1 flag κατα 
> το compile ο αριθμος των εντολων που εκτελουνται ειναι ιδιοσ για ολες 
> ις αναδιαταξεις. Επομενως φαινεται οτι οι διαφορες στα instructions 
> executed ειναι απορροια του -Ο1 flag και οχι των αναδιαταξεων.
>
> Ομως το γεγονος οτι στις προσομοιωσεις που τελικα κανουμε (με -Ο1 
> compiled προγραμματα) ο αριθμος των εντολων διαφερει απο προγραμμα σε 
> προγραμμα και μαλιστα σημαντικα, περιπλεκει πολυ τα πραματα ως προς 
> την επιλογη της αναδιαταξης με την καλυτερη αποδοση αφου αλλοιωνει τον 
> υπολογισμο των κυκλων με βαση τον τυπο που δινεται στην εκφωνηση.
>
> Το ερωτημα μου τελικα ειναι: Πρεπει να λαβουμε υποψη και τα παραπανω 
> και να κανουμε τη ζωη μας ακομα πιο δυσκολη ή να τα αγνοησουμε και να 
> χρησιμοποιησουμε απλα τα instructions executed και τα misses που 
> προκυπτουν ως output των προσομοιωσεων;;




More information about the Advcomparch mailing list