Δεν είσαι σκλάβος!
Κλειστό εκπαιδευτικό μάθημα για παιδιά της ελίτ: «Η αληθινή διάταξη του κόσμου».
http://noslave.org
Από την Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). | ||||||||||||||||||||||||||||||||||||
Τύπος | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Συγγραφέας |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
Προγραμματιστής | ||||||||||||||||||||||||||||||||||||
προγραμματιστές |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
Γραμμένο σε |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
Διεπαφή |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
λειτουργικό σύστημα | ||||||||||||||||||||||||||||||||||||
Γλώσσες διεπαφής |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
Πρώτη έκδοση |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
Πλατφόρμα υλικού | ||||||||||||||||||||||||||||||||||||
τελευταία έκδοση | ||||||||||||||||||||||||||||||||||||
υποψήφιος απελευθέρωσης |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
δοκιμαστική έκδοση |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
άλφα έκδοση |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
Δοκιμαστική έκδοση |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
Αναγνώσιμες μορφές αρχείων |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
Δημιουργήθηκαν μορφές αρχείων |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
κατάσταση |
Σφάλμα Lua στο Module:Wikidata στη γραμμή 170: προσπάθεια δημιουργίας ευρετηρίου του πεδίου "wikibase" (τιμή μηδενική). |
|||||||||||||||||||||||||||||||||||
Αδεια |
Βασικά χαρακτηριστικά:
Ο μεταγλωττιστής υποστηρίζει το πρότυπο OpenMP 3.0 για τη σύνταξη παράλληλων προγραμμάτων. Περιέχει επίσης μια τροποποίηση του OpenMP που ονομάζεται Cluster OpenMP, με την οποία μπορείτε να εκτελέσετε εφαρμογές γραμμένες σύμφωνα με το OpenMP σε συμπλέγματα χρησιμοποιώντας MPI. Ο μεταγλωττιστής Intel C++ χρησιμοποιεί ένα frontend (το τμήμα του μεταγλωττιστή που αναλύει το πρόγραμμα που μεταγλωττίζεται) από την ομάδα σχεδίασης Edison. Το ίδιο frontend χρησιμοποιείται από τους μεταγλωττιστές SGI MIPSpro, Comeau C++, Portland Group. Αυτός ο μεταγλωττιστής χρησιμοποιείται ευρέως για τη μεταγλώττιση σημείων αναφοράς CPU SPEC. Υπάρχουν 4 σειρές προϊόντων από την Intel που περιέχουν τον μεταγλωττιστή:
Τα μειονεκτήματα της έκδοσης Linux του μεταγλωττιστή περιλαμβάνουν μερική ασυμβατότητα με τις επεκτάσεις GNU της γλώσσας C (που υποστηρίζονται από τον μεταγλωττιστή GCC), η οποία μπορεί να προκαλέσει προβλήματα κατά τη μεταγλώττιση ορισμένων προγραμμάτων.
Πειραματικές παραλλαγέςΟι ακόλουθες πειραματικές εκδόσεις του μεταγλωττιστή έχουν δημοσιευτεί:
Κύριες σημαίες
Γράψτε μια κριτική για το άρθρο "Intel C++ compiler"Σημειώσειςδείτε επίσηςΣυνδέσεις
Ένα απόσπασμα που χαρακτηρίζει τον μεταγλωττιστή Intel C++Κι όμως, επέστρεψε για να δει τον Λευκό Μάγο για τελευταία φορά... Τον άντρα της και πιο αληθινό φίλο της, τον οποίο δεν μπορούσε ποτέ να ξεχάσει. Στην καρδιά της τον συγχώρεσε. Αλλά, προς μεγάλη του λύπη, δεν μπόρεσε να του φέρει τη συγχώρεση της Μαγδαληνής… Έτσι, όπως βλέπεις, Ισιδώρα, ο μεγάλος χριστιανικός μύθος για τη «συγχώρηση» είναι απλώς ένα παιδικό ψέμα για αφελείς πιστούς που τους επιτρέπουν να κάνουν οτιδήποτε Κακό, γνωρίζοντας ότι ό,τι και να κάνουν, στο τέλος θα συγχωρεθούν. Αλλά μπορείτε να συγχωρήσετε μόνο αυτό που αξίζει πραγματικά συγχώρεση. Ο άνθρωπος πρέπει να καταλάβει ότι πρέπει να λογοδοτήσει για κάθε κακό που γίνεται... Και όχι ενώπιον κάποιου μυστηριώδους Θεού, αλλά ενώπιον του εαυτού του, αναγκάζοντας τον εαυτό του να υποφέρει σκληρά. Η Magdalena δεν συγχώρεσε τον Vladyka, αν και τον σεβόταν βαθιά και τον αγαπούσε ειλικρινά. Όπως δεν κατάφερε να συγχωρήσει όλους μας για τον τρομερό θάνατο του Ράντομιρ. Άλλωστε, ΑΥΤΗ ήταν που κατάλαβε καλύτερα από όλα - μπορούσαμε να τον βοηθήσουμε, μπορούσαμε να τον σώσουμε από έναν σκληρό θάνατο... Αλλά δεν θέλαμε. Θεωρώντας την ενοχή του Λευκού Μάγου πολύ σκληρή, τον άφησε να ζήσει με αυτή την ενοχή, χωρίς να το ξεχάσει ούτε στιγμή... Δεν ήθελε να του δώσει μια εύκολη συγχώρεση. Δεν την είδαμε ποτέ ξανά. Όπως δεν είδαν ποτέ τα μωρά τους. Μέσω ενός από τους ιππότες του Ναού της - του μάγου μας - η Magdalena μετέφερε την απάντηση στον Κύριο στο αίτημά του να επιστρέψει σε εμάς: «Ο ήλιος δεν ανατέλλει δύο φορές σε μια μέρα ... Η χαρά του κόσμου σας (Ράντομιρ) δεν θα επιστρέψω σε εσένα, όπως δεν θα επιστρέψω σε σένα και εγώ... Βρήκα την ΠΙΣΤΗ και την ΑΛΗΘΕΙΑ μου, είναι ΖΩΝΤΑΝΑ, τα δικά σου είναι ΠΕΘΑΜΕΝΑ... Θλίψε τους γιους σου - σε αγάπησαν. Δεν θα σας συγχωρήσω ποτέ για τον θάνατό τους όσο ζω. Και ας μείνει μαζί σου η ενοχή σου. Ίσως κάποια μέρα να σου φέρει Φως και Συγχώρεση... Αλλά όχι από εμένα. Το κεφάλι του Μάγου Ιωάννη δεν μεταφέρθηκε στα Μετέωρα για τον ίδιο λόγο - κανένας από τους Ιππότες του Ναού δεν ήθελε να επιστρέψει σε εμάς ... Τους χάσαμε, όπως χάσαμε πολλούς άλλους περισσότερες από μία φορές, που δεν ήθελαν να καταλάβουν και δεχτείτε τα θύματά μας ... Ποιος είναι όπως εσείς - έφυγαν καταδικάζοντας μας.Ένιωσα ζάλη!.. Ως διψασμένος, ικανοποιώντας την αιώνια πείνα μου για γνώση, απορρόφησα λαίμαργα τη ροή των καταπληκτικών πληροφοριών που έδωσε απλόχερα ο Βορράς... Και ήθελα πολύ περισσότερα!.. Ήθελα να τα μάθω όλα μέχρι τέλους . Ήταν μια ανάσα γλυκού νερού στην καμένη από τον πόνο και την ατυχία έρημο! Και δεν μπορούσα να πιω αρκετά... Έχω χίλιες ερωτήσεις! Αλλά δεν μένει χρόνος… Τι να κάνω, Σέβερ; .. - Ρώτα Ισιδώρα!.. Ρώτα, θα προσπαθήσω να σου απαντήσω... - Πες μου, Σέβερ, γιατί μου φαίνεται ότι σε αυτή την ιστορία συνδέονται δύο ιστορίες ζωής, συνυφασμένες με παρόμοια γεγονότα, και παρουσιάζονται ως η ζωή ενός ανθρώπου; Ή δεν έχω δίκιο; – Έχεις απόλυτο δίκιο Ισιδώρα. Όπως σας είπα προηγουμένως, οι «ισχυροί αυτού του κόσμου», που δημιούργησαν μια ψεύτικη ιστορία της ανθρωπότητας, «έβαλαν» στην αληθινή ζωή του Χριστού την εξωγήινη ζωή του Εβραίου προφήτη Joshua, ο οποίος έζησε πριν από μιάμιση χιλιάδες χρόνια (από την ιστορία του Βορρά). Και όχι μόνο ο ίδιος, αλλά και η οικογένειά του, οι συγγενείς και οι φίλοι του, οι φίλοι και οι οπαδοί του. Άλλωστε, ήταν η σύζυγος του προφήτη Τζόσουα, η Εβραία Μαρία, που είχε μια αδερφή τη Μάρθα και έναν αδερφό τον Λάζαρο, την αδελφή της μητέρας του Μαρία Γιακόμπε και άλλους που δεν ήταν ποτέ κοντά στον Ράντομιρ και τη Μαγδαλένα. Όπως δεν υπήρχαν άλλοι «απόστολοι» δίπλα τους - ο Παύλος, ο Ματθαίος, ο Πέτρος, ο Λουκάς και οι υπόλοιποι ... Ήταν η οικογένεια του προφήτη Joshua που μετακόμισε πριν από μιάμιση χιλιάδες χρόνια στην Προβηγκία (που τότε ονομαζόταν Γαλατία (Transalpine Gaul), στην ελληνική πόλη της Μασσαλίας (σημερινή Μασσαλία), αφού η Μασσαλία εκείνη την εποχή ήταν η «πύλη» μεταξύ Ευρώπης και Ασίας, και ήταν ο ευκολότερος τρόπος για όλους τους «διωκόμενους» να αποφύγουν τις διώξεις και την κακοτυχία.
|
Εισαγωγή Στα τέλη του 2003, η Intel παρουσίασε την έκδοση 8.0 της συλλογής μεταγλωττιστών της. Οι νέοι μεταγλωττιστές έχουν σχεδιαστεί για να βελτιώνουν την απόδοση των εφαρμογών που εκτελούνται σε διακομιστές, επιτραπέζιους υπολογιστές και κινητά συστήματα(φορητοί υπολογιστές, κινητά τηλέφωνα και PDA) με βάση Επεξεργαστές Intel. Είμαστε στην ευχάριστη θέση να σημειώσουμε ότι αυτό το προϊόν δημιουργήθηκε με την ενεργή συμμετοχή εργαζομένων του Κέντρου Ανάπτυξης Λογισμικού Intel Nizhny Novgorod και ειδικών της Intel από το Sarov.
Η νέα σειρά περιλαμβάνει μεταγλωττιστές Intel για C++ και Fortran για Windows και Linux, καθώς και μεταγλωττιστές Intel για C++ για Windows CE .NET. Οι μεταγλωττιστές στοχεύουν συστήματα που βασίζονται στους ακόλουθους επεξεργαστές Intel: Intel Itanium 2, Intel Xeon, Intel Pentium 4, επεξεργαστές Intel Personal Internet Client Architecture για κινητά τηλέφωνα και PDA και επεξεργαστή Intel Pentium M για φορητούς υπολογιστές (συστατικό της τεχνολογίας Intel Centrino για κινητά τηλέφωνα). Η/Υ).
Ο μεταγλωττιστής Intel Visual Fortran για Windows παρέχει τεχνολογίες μεταγλώττισης επόμενης γενιάς για υπολογιστές υψηλής απόδοσης. Συνδυάζει τη λειτουργικότητα της γλώσσας Compaq Visual Fortran (CVF) με τις βελτιώσεις απόδοσης που έγιναν δυνατές από τις τεχνολογίες βελτιστοποίησης μεταγλώττισης και δημιουργίας κώδικα της Intel και απλοποιεί το έργο της μεταφοράς πηγαίος κώδικας, που αναπτύχθηκε με CVF, στο περιβάλλον Intel Visual Fortran. Αυτός ο μεταγλωττιστής είναι ο πρώτος που εφαρμόζει λειτουργίες CVF τόσο για συστήματα Intel 32-bit όσο και για συστήματα που βασίζονται στην οικογένεια επεξεργαστών Intel Itanium που εκτελούνται σε περιβάλλον Windows. Επιπλέον, αυτός ο μεταγλωττιστής σάς επιτρέπει να εφαρμόσετε λειτουργίες γλώσσας CVF σε συστήματα Linux που βασίζονται σε επεξεργαστές Intel 32-bit και στην οικογένεια επεξεργαστών Intel Itanium. Το 2004, σχεδιάζεται να κυκλοφορήσει μια εκτεταμένη έκδοση αυτού του μεταγλωττιστή - του μεταγλωττιστή Intel Visual Fortran Compiler Professional Edition για Windows, ο οποίος θα περιλαμβάνει τη Βιβλιοθήκη IMSL Fortran 5.0 που αναπτύχθηκε από την Visual Numerics, Inc.
"Οι νέοι μεταγλωττιστές υποστηρίζουν επίσης τους επερχόμενους επεξεργαστές της Intel, με την κωδική ονομασία Prescott, οι οποίοι παρέχουν νέες εντολές για τη βελτίωση της απόδοσης γραφικών και βίντεο, καθώς και άλλες βελτιώσεις απόδοσης. Υποστηρίζουν επίσης νέα τεχνολογία Mobile MMX(tm), το οποίο βελτιώνει ομοίως την απόδοση των εφαρμογών γραφικών, ήχου και βίντεο για κινητά τηλέφωνα και PDA, - δήλωσε ο Alexei Odinokov, συνδιευθυντής του Κέντρου Ανάπτυξης Λογισμικού Intel στο Νίζνι Νόβγκοροντ. - Αυτοί οι μεταγλωττιστές παρέχουν στους προγραμματιστές εφαρμογών ένα ενιαίο σύνολο εργαλείων για τη δημιουργία νέων εφαρμογών ασύρματα δίκτυαβασίζεται στην αρχιτεκτονική της Intel. Οι νέοι μεταγλωττιστές της Intel υποστηρίζουν επίσης την τεχνολογία Hyper-Threading της Intel και τις βιομηχανικές προδιαγραφές OpenMP 2.0, οι οποίες καθορίζουν τη χρήση οδηγιών υψηλό επίπεδογια τον έλεγχο της ροής των οδηγιών στις εφαρμογές».
Μεταξύ των νέων εργαλείων που περιλαμβάνονται στους μεταγλωττιστές είναι τα εργαλεία Intel Code Coverage και Intel Test Prioritization. Μαζί, αυτά τα εργαλεία βοηθούν στην επιτάχυνση της ανάπτυξης εφαρμογών και βελτιώνουν την ποιότητα της εφαρμογής βελτιώνοντας τη διαδικασία δοκιμών. λογισμικό.
Το εργαλείο κάλυψης κώδικα, κατά τη δοκιμή μιας εφαρμογής, παρέχει πλήρεις λεπτομέρειες σχετικά με τη λογική χρήση της εφαρμογής και τη θέση των περιοχών που χρησιμοποιούνται στον πηγαίο κώδικα της εφαρμογής. Εάν γίνουν αλλαγές στην εφαρμογή ή εάν αυτή η δοκιμή δεν επιτρέπει τον έλεγχο του τμήματος της εφαρμογής που ενδιαφέρει τον προγραμματιστή, το εργαλείο Test Prioritization σάς επιτρέπει να ελέγξετε τη λειτουργία της επιλεγμένης περιοχής κώδικα προγράμματος.
Οι νέοι μεταγλωττιστές της Intel διατίθενται σε διάφορες διαμορφώσεις που κυμαίνονται από 399 $ έως 1.499 $. Μπορούν να αγοραστούν σήμερα από την Intel Corporation ή από μεταπωλητές σε όλο τον κόσμο, μια λίστα των οποίων βρίσκεται στον ιστότοπο. http://www.intel.com/software/products/reseller.htm#Russia.
Υποστήριξη για επεξεργαστές Prescott
Η υποστήριξη για τον επεξεργαστή Intel Pentium 4 (Prescott) στην όγδοη έκδοση του μεταγλωττιστή είναι η εξής:1. Υποστήριξη για εντολές SSE3 (ή PNI, Prescott New Instructions). Υπάρχουν τρεις τρόποι για να τονίσετε εδώ:
ΕΝΑ. Ένθετα Assembler (Inline assembly). Για παράδειγμα, ο μεταγλωττιστής θα αναγνωρίσει την ακόλουθη χρήση της εντολής SSE3 _asm(addsubpd xmm0, xmm1). Έτσι, οι χρήστες που ενδιαφέρονται για βελτιστοποίηση χαμηλού επιπέδου μπορούν να έχουν άμεση πρόσβαση στις εντολές του assembler.
σι. Στον μεταγλωττιστή C/C++, νέες εντολές είναι διαθέσιμες από υψηλότερο επίπεδο από ό,τι χρησιμοποιώντας ένθετα assembler. Δηλαδή, μέσω ενσωματωμένων συναρτήσεων (εσωτερικές συναρτήσεις):
Ενσωματωμένες Λειτουργίες
ενσωματωμένη λειτουργία | Δημιουργήθηκε εντολή |
---|---|
_mm_addsub_ps | Προσθέτει υποσυστήματα |
_mm_hadd_ps | Haddps |
_mm_hsub_ps | Msubps |
_mm_moveldup_ps | Movsldup |
_mm_movehdup_ps | Movshdup |
_mm_addsub_pd | Προσθήκη subpd |
_mm_hadd_pd | Haddpd |
_mm_hsub_pd | hsubpd |
_mm_loaddup_pd | movddup xmm, m64 |
_mm_movedup_pd | movddup reg, reg |
_mm_lddqu_si128 | Lddqu |
Ο πίνακας δείχνει τις ενσωματωμένες λειτουργίες και τις αντίστοιχες οδηγίες συναρμολόγησης από το σετ SSE3. Η ίδια υποστήριξη υπάρχει για εντολές από τα σύνολα MMX\SSE\SSE2. Αυτό επιτρέπει στον προγραμματιστή να εκτελεί βελτιστοποίηση κώδικα χαμηλού επιπέδου χωρίς να καταφεύγει σε προγραμματισμό γλώσσας συναρμολόγησης: ο ίδιος ο μεταγλωττιστής φροντίζει για την αντιστοίχιση (αντιστοίχιση "e) των ενσωματωμένων λειτουργιών στις αντίστοιχες οδηγίες του επεξεργαστή και τη βέλτιστη χρήση των καταχωρητών. επικεντρωθείτε στη δημιουργία ενός αλγορίθμου που χρησιμοποιεί αποτελεσματικά νέα σύνολα εντολών.
V. Αυτόματη δημιουργία νέων εντολών από τον μεταγλωττιστή. Οι δύο προηγούμενες μέθοδοι περιλαμβάνουν τη χρήση νέων εντολών από τον προγραμματιστή. Αλλά ο μεταγλωττιστής είναι επίσης σε θέση (χρησιμοποιώντας τις κατάλληλες επιλογές - βλέπε ενότητα 3 παρακάτω) να δημιουργεί αυτόματα νέες οδηγίες από το σύνολο SSE3 για τον κώδικα C/C++ και Fortran. Για παράδειγμα, η βελτιστοποιημένη εντολή φόρτωσης μη ευθυγραμμισμένης (lddqu), η οποία σας επιτρέπει να έχετε κέρδος απόδοσης έως και 40% (για παράδειγμα, σε εργασίες κωδικοποίησης βίντεο και ήχου). Άλλες εντολές από το σύνολο SSE3 σάς επιτρέπουν να επιτύχετε σημαντική επιτάχυνση σε εργασίες τρισδιάστατων γραφικών ή υπολογιστικές εργασίες χρησιμοποιώντας μιγαδικούς αριθμούς. Για παράδειγμα, το γράφημα στην ενότητα 3.1 παρακάτω δείχνει ότι για την εφαρμογή 168.wupwise από τη σουίτα SPEC CPU2000 FP, η επιτάχυνση που ελήφθη από την αυτόματη δημιουργία εντολών SSE3 ήταν ~25%. Η απόδοση αυτής της εφαρμογής εξαρτάται σε μεγάλο βαθμό από την ταχύτητα της αριθμητικής μιγαδικών αριθμών.
2. Χρησιμοποιώντας τα μικροαρχιτεκτονικά πλεονεκτήματα του επεξεργαστή Prescott. Κατά τη δημιουργία κώδικα, ο μεταγλωττιστής λαμβάνει υπόψη τις μικροαρχιτεκτονικές αλλαγές στον νέο επεξεργαστή. Για παράδειγμα, ορισμένες λειτουργίες (όπως μετατοπίσεις ακεραίων, πολλαπλασιασμοί ακεραίων ή μετατροπές αριθμών μεταξύ διαφορετικών μορφών κινητής υποδιαστολής στο SSE2) είναι πιο γρήγορες στον νέο επεξεργαστή σε σύγκριση με προηγούμενες εκδόσεις (ας πούμε, μια μετατόπιση ακεραίων απαιτεί τώρα έναν κύκλο επεξεργαστή έναντι τεσσάρων προηγούμενη έκδοση).Επεξεργαστής Intel Pentium 4). Η πιο εντατική χρήση τέτοιων εντολών σας επιτρέπει να έχετε σημαντική επιτάχυνση των εφαρμογών.
Ένα άλλο παράδειγμα μικροαρχιτεκτονικών αλλαγών είναι ο βελτιωμένος μηχανισμός προώθησης αποθήκευσης (ταχεία φόρτωση δεδομένων που είχαν αποθηκευτεί προηγουμένως στη μνήμη). Η πραγματική αποθήκευση δεν λαμβάνει χώρα καν στη μνήμη cache, αλλά σε κάποιο ενδιάμεσο buffer αποθήκευσης, το οποίο στη συνέχεια επιτρέπει πολύ γρήγορη πρόσβαση στα δεδομένα. Ένα τέτοιο χαρακτηριστικό της αρχιτεκτονικής καθιστά δυνατή, για παράδειγμα, την πραγματοποίηση πιο επιθετικής αυτόματης διανυσματοποίησης του κώδικα προγράμματος.
Ο μεταγλωττιστής λαμβάνει επίσης υπόψη την αυξημένη ποσότητα μνήμης cache στο πρώτο και το δεύτερο επίπεδο.
3. Βελτιωμένη υποστήριξη για τεχνολογία Hyper-Threading. Αυτό το στοιχείο μπορεί κάλλιστα να σχετίζεται με το προηγούμενο - μικροαρχιτεκτονικές αλλαγές και τη χρήση τους στον μεταγλωττιστή. Για παράδειγμα, μια βιβλιοθήκη χρόνου εκτέλεσης που υποστηρίζει τις βιομηχανικές προδιαγραφές OpenMP έχει βελτιστοποιηθεί ώστε να εκτελείται στον νέο επεξεργαστή.
Εκτέλεση
Η χρήση μεταγλωττιστών είναι ένας εύκολος και αποτελεσματικός τρόπος για να αξιοποιήσετε τις αρχιτεκτονικές επεξεργαστών της Intel. Παρακάτω, δύο τρόποι χρήσης μεταγλωττιστών επισημαίνονται υπό όρους (πολύ): α) η εκ νέου μεταγλώττιση προγραμμάτων με πιθανή αλλαγήρυθμίσεις μεταγλωττιστή, β) εκ νέου μεταγλώττιση με αλλαγή τόσο στις ρυθμίσεις του μεταγλωττιστή όσο και στο κείμενο προέλευσης, καθώς και με χρήση διαγνωστικών μεταγλωττιστή για συνεχείς βελτιστοποιήσεις και την πιθανή χρήση άλλων εργαλεία λογισμικού(για παράδειγμα, profilers).1.1 Βελτιστοποίηση προγραμμάτων με εκ νέου μεταγλώττιση και αλλαγή ρυθμίσεων μεταγλωττιστή
Συχνά, το πρώτο βήμα για τη μετάβαση σε έναν νέο μεταγλωττιστή βελτιστοποίησης είναι η χρήση του με τις προεπιλεγμένες ρυθμίσεις. Το επόμενο λογικό βήμα είναι να χρησιμοποιήσετε επιλογές για πιο επιθετική βελτιστοποίηση. Τα σχήματα 1, 2, 3 και 4 δείχνουν το αποτέλεσμα της μετάβασης στην έκδοση 8.0 μεταγλωττιστή Intel σε σύγκριση με τη χρήση άλλων κορυφαίων προϊόντων του κλάδου (-O2 - προεπιλεγμένες ρυθμίσεις μεταγλωττιστή, βάση - ρυθμίσεις σε μέγιστη απόδοση). Η σύγκριση γίνεται σε αρχιτεκτονικές Intel 32-bit και 64-bit. Ως δοκιμαστικό σετ χρησιμοποιούνται εφαρμογές από το SPEC CPU2000.
Εικόνα 1
Σχήμα 2
Εικόνα 3
Εικόνα 4
Μερικές από τις επιλογές παρατίθενται παρακάτω (εφεξής, οι επιλογές είναι για την οικογένεια λειτουργικών συστημάτων Windows, για την οικογένεια λειτουργικών συστημάτων Linux, υπάρχουν επιλογές με το ίδιο αποτέλεσμα, αλλά το όνομα μπορεί να διαφέρει. για παράδειγμα, -Od ή QxK για Windows έχουν παρόμοιο αποτέλεσμα με -O0 ή -xK για Linux αντίστοιχα, περισσότερα λεπτομερείς πληροφορίεςμπορείτε να βρείτε στο εγχειρίδιο του μεταγλωττιστή) που υποστηρίζεται από τον μεταγλωττιστή της Intel.
Έλεγχος επιπέδων βελτιστοποίησης: Επιλογές -Od (χωρίς βελτιστοποιήσεις, χρησιμοποιείται για προγράμματα εντοπισμού σφαλμάτων), -O1 (μέγιστη ταχύτητα ελαχιστοποιώντας το μέγεθος κώδικα), -O2 (βελτιστοποίηση για ταχύτητα εκτέλεσης κώδικα, χρησιμοποιείται από προεπιλογή), -O3 (επιτρέπει τις πιο επιθετικές βελτιστοποιήσεις για την εκτέλεση κώδικα ταχύτητα, σε ορισμένες περιπτώσεις μπορεί να οδηγήσει στο αντίθετο αποτέλεσμα, δηλαδή σε επιβράδυνση· πρέπει να σημειωθεί ότι στο IA-64 η χρήση του -O3 οδηγεί σε επιτάχυνση στις περισσότερες περιπτώσεις, ενώ η θετική επίδραση στο IA-32 είναι λιγότερο έντονη ). Παραδείγματα βελτιστοποιήσεων που ενεργοποιούνται από το -O3 είναι η ανταλλαγή βρόχων, η σύντηξη βρόχου, η κατανομή βρόχου (βελτιστοποίηση σύντηξης αντίστροφου βρόχου), η προκαταρκτική λήψη δεδομένων από λογισμικό. Ο λόγος για τον οποίο η βραδύτητα είναι δυνατή όταν χρησιμοποιείται -O3 μπορεί να είναι ότι ο μεταγλωττιστής χρησιμοποίησε μια ευρετική προσέγγιση για να επιλέξει επιθετική βελτιστοποίηση για συγκεκριμένη περίπτωση, χωρίς να υπάρχουν επαρκείς πληροφορίες για το πρόγραμμα (για παράδειγμα, δημιουργήθηκαν οδηγίες προφόρτωσης για τα δεδομένα που χρησιμοποιούνται στον βρόχο, πιστεύοντας ότι ο βρόχος εκτελείται πολλές φορές, ενώ στην πραγματικότητα έχει μόνο λίγες επαναλήψεις). Η βελτιστοποίηση διαδικαστικού προφίλ, καθώς και μια ποικιλία "συμβουλών" προγραμματιστή (βλ. Ενότητα 3.2) μπορούν να βοηθήσουν σε αυτήν την κατάσταση.
Διαδικαστική βελτιστοποίηση: -Qip (εντός ενός μόνο αρχείου) και -Qipo (εντός πολλών ή όλων των αρχείων έργου). Περιλαμβάνει βελτιστοποιήσεις όπως, για παράδειγμα, ενσωματωμένη αντικατάσταση κώδικα που χρησιμοποιείται συχνά (μειώνοντας το κόστος κλήσης μιας συνάρτησης/διαδικασίας). Αντιπροσωπεύει πληροφορίες σε άλλα στάδια βελτιστοποίησης - για παράδειγμα, πληροφορίες σχετικά με το άνω όριο του βρόχου (για παράδειγμα, εάν είναι μια σταθερά χρόνου μεταγλώττισης που ορίζεται σε ένα αρχείο, αλλά χρησιμοποιείται σε πολλά) ή πληροφορίες σχετικά με την ευθυγράμμιση δεδομένων στη μνήμη (πολλά MMX Οι εντολές \SSE\SSE2\SSE3 λειτουργούν πιο γρήγορα εάν οι τελεστές είναι ευθυγραμμισμένοι στη μνήμη σε όριο 8 ή 16 byte). Η ανάλυση των διαδικασιών εκχώρησης μνήμης (που υλοποιείται/κλείται σε ένα από τα αρχεία έργου) μεταβιβάζεται σε εκείνες τις συναρτήσεις/διαδικασίες όπου χρησιμοποιείται αυτή η μνήμη (αυτό μπορεί να βοηθήσει τον μεταγλωττιστή να εγκαταλείψει τη συντηρητική υπόθεση ότι τα δεδομένα δεν είναι σωστά ευθυγραμμισμένα στη μνήμη. και η υπόθεση θα πρέπει να είναι συντηρητική όταν δεν υπάρχουν πρόσθετες πληροφορίες). Η αποσαφήνιση, η ανάλυση αλιοποίησης δεδομένων μπορεί να χρησιμεύσει ως ένα άλλο παράδειγμα: ελλείψει πρόσθετων πληροφοριών και αδυναμίας απόδειξης της απουσίας διασταυρώσεων, ο μεταγλωττιστής βασίζεται στη συντηρητική υπόθεση ότι υπάρχουν διασταυρώσεις. Μια τέτοια απόφαση μπορεί να επηρεάσει αρνητικά την ποιότητα τέτοιων βελτιστοποιήσεων όπως, για παράδειγμα, η αυτόματη διανυσματοποίηση στο IA-32 ή η διοχέτευση λογισμικού (σωλήνωση λογισμικού ή SWP) στο IA-64. Η διαδιαδικαστική βελτιστοποίηση μπορεί να βοηθήσει στην ανάλυση της παρουσίας διασταυρώσεων μνήμης.
Βελτιστοποίηση προφίλ: Περιλαμβάνει τρία στάδια. 1) δημιουργία κώδικα με όργανα χρησιμοποιώντας την επιλογή -Qprof_gen. 2) ο κώδικας που προκύπτει εκτελείται σε αντιπροσωπευτικά δεδομένα, ενώ εκτελείται, συλλέγονται πληροφορίες σχετικά με διάφορα χαρακτηριστικά εκτέλεσης κώδικα (για παράδειγμα, πιθανότητες μετάβασης ή μια τυπική τιμή για τον αριθμό των επαναλήψεων βρόχου). 3) Εκ νέου μεταγλώττιση με την επιλογή -Qprof_use, η οποία διασφαλίζει ότι ο μεταγλωττιστής χρησιμοποιεί τις πληροφορίες που συλλέχθηκαν στο προηγούμενο βήμα. Έτσι, ο μεταγλωττιστής έχει τη δυνατότητα να χρησιμοποιεί όχι μόνο στατικές εκτιμήσεις σημαντικών χαρακτηριστικών του προγράμματος, αλλά και δεδομένα που λαμβάνονται κατά τη διάρκεια μιας πραγματικής εκτέλεσης του προγράμματος. Αυτό μπορεί να βοηθήσει με την επακόλουθη επιλογή ορισμένων βελτιστοποιήσεων (για παράδειγμα, μια πιο αποτελεσματική διάταξη στη μνήμη διαφόρων κλάδων του προγράμματος, με βάση πληροφορίες σχετικά με το ποιοι κλάδοι εκτελέστηκαν σε ποια συχνότητα ή εφαρμογή μιας βελτιστοποίησης σε έναν βρόχο με βάση πληροφορίες σχετικά με ο τυπικός αριθμός επαναλήψεων σε αυτό) . Η βελτιστοποίηση προφίλ είναι ιδιαίτερα χρήσιμη όταν είναι δυνατό να επιλέξετε ένα μικρό αλλά αντιπροσωπευτικό σύνολο δεδομένων (για το βήμα #2) που απεικονίζει καλά τις πιο τυπικές περιπτώσεις μελλοντικής χρήσης του προγράμματος. Σε ορισμένες θεματικές περιοχές, η επιλογή ενός τέτοιου αντιπροσωπευτικού συνόλου είναι αρκετά δυνατή. Για παράδειγμα, η βελτιστοποίηση προφίλ χρησιμοποιείται από προγραμματιστές DBMS.
Οι βελτιστοποιήσεις που αναφέρονται παραπάνω είναι γενικού τύπου, δηλ. ο παραγόμενος κώδικας θα λειτουργεί σε όλους τους διαφορετικούς επεξεργαστές της οικογένειας (για παράδειγμα, στην περίπτωση αρχιτεκτονικής 32 bit, σε όλους τους παρακάτω επεξεργαστές: Intel Pentium-III, Pentium 4, συμπεριλαμβανομένου του πυρήνα Prescott, Intel Pentium M). Υπάρχουν επίσης βελτιστοποιήσεις για συγκεκριμένο επεξεργαστή.
Βελτιστοποιήσεις ειδικά για τον επεξεργαστή: -QxK (Pentium-III; χρήση εντολών SSE, χαρακτηριστικά μικροαρχιτεκτονικής), -QxW και -QxN (Pentium 4; χρήση εντολών SSE και SSE2, χαρακτηριστικά μικροαρχιτεκτονικής), -QxB (Pentium M; χρήση εντολών SSE και SSE2, microarchitecture specifics) ), QxP (Prescott; χρήση εντολών SSE, SSE2 και SSE3, χαρακτηριστικά μικροαρχιτεκτονικής). Σε αυτήν την περίπτωση, ο κώδικας που δημιουργείται με αυτές τις επιλογές ενδέχεται να μην λειτουργεί σε άλλους εκπροσώπους της οικογένειας επεξεργαστών (για παράδειγμα, ο κωδικός -QxW μπορεί να οδηγήσει στην εκτέλεση μιας μη έγκυρης εντολής εάν εκτελεστεί σε ένα σύστημα που βασίζεται σε Intel Pentium-III επεξεργαστής). Ή να μην λειτουργεί με τη μέγιστη απόδοση (για παράδειγμα, κωδικός -QxB σε επεξεργαστή Pentium 4 λόγω διαφορών στη μικροαρχιτεκτονική). Με αυτές τις επιλογές, είναι επίσης δυνατό να χρησιμοποιηθούν βιβλιοθήκες χρόνου εκτέλεσης βελτιστοποιημένες για έναν συγκεκριμένο επεξεργαστή χρησιμοποιώντας το σύνολο εντολών του. Για να ελεγχθεί ότι ο κώδικας εκτελείται πραγματικά στον επεξεργαστή-στόχο, εφαρμόζεται ένας μηχανισμός αποστολής (cpu-dispatch): έλεγχος του επεξεργαστή κατά την εκτέλεση του προγράμματος. Σε διάφορες καταστάσεις, αυτός ο μηχανισμός μπορεί είτε να ενεργοποιηθεί είτε όχι. Η αποστολή χρησιμοποιείται πάντα εάν χρησιμοποιείται η παραλλαγή της επιλογής -Qax(KWNP). Σε αυτήν την περίπτωση, δημιουργούνται δύο εκδόσεις του κώδικα: βελτιστοποιημένη για συγκεκριμένο επεξεργαστή και "γενική" (γενική), η επιλογή γίνεται κατά την εκτέλεση του προγράμματος. Έτσι, αυξάνοντας το μέγεθος του κώδικα, είναι δυνατό να επιτευχθεί εκτέλεση προγράμματος σε όλους τους επεξεργαστές της γραμμής και βέλτιστη εκτέλεση στον επεξεργαστή στόχο. Μια άλλη επιλογή είναι να χρησιμοποιήσετε τη βελτιστοποίηση κώδικα για τον προηγούμενο εκπρόσωπο της γραμμής και να χρησιμοποιήσετε αυτόν τον κώδικα σε αυτόν και σε επόμενους επεξεργαστές. Για παράδειγμα, ο κώδικας -QxN μπορεί να τρέξει σε Pentium 4 με πυρήνες Northwood και Prescott. Δεν υπάρχει αύξηση στο μέγεθος του κώδικα. Με αυτήν την προσέγγιση, μπορείτε να έχετε καλή, αλλά όχι βέλτιστη απόδοση σε ένα σύστημα με επεξεργαστή Prescott (επειδή δεν χρησιμοποιείται SSE3 και δεν λαμβάνονται υπόψη οι διαφορές μικροαρχιτεκτονικής) με βέλτιστη απόδοση στο Northwood. Παρόμοιες επιλογές υπάρχουν και για επεξεργαστές αρχιτεκτονικής IA-64. Επί αυτή τη στιγμήυπάρχουν δύο από αυτά: -G1 (Itanium) και -G2 (Itanium 2, προεπιλεγμένη επιλογή).
Το παρακάτω γράφημα (Εικόνα 5) δείχνει την επιτάχυνση (με βάση ένα - χωρίς επιτάχυνση) από τη χρήση ορισμένων από τις βελτιστοποιήσεις που αναφέρονται παραπάνω (δηλαδή -O3 -Qipo -Qprof_use -Qx(N,P)) σε έναν επεξεργαστή Prescott σε σύγκριση με τις προεπιλεγμένες ρυθμίσεις (-Ο2). Η χρήση -QxP βοηθά σε ορισμένες περιπτώσεις να επιτύχετε επιτάχυνση σε σύγκριση με -QxN. Η μεγαλύτερη επιτάχυνση επιτυγχάνεται στην εφαρμογή 168.wupwise που αναφέρθηκε ήδη στην προηγούμενη ενότητα (λόγω της εντατικής βελτιστοποίησης σύνθετης αριθμητικής με χρήση εντολών SSE3).
Εικόνα 5
Το σχήμα 6 παρακάτω δείχνει την αναλογία (σε φορές) της ταχύτητας του κώδικα με βέλτιστες ρυθμίσειςσε σύγκριση με τον εντελώς μη βελτιστοποιημένο κώδικα (-Od) στους επεξεργαστές Pentium 4 και Itanium 2. Μπορεί να φανεί ότι το Itanium 2 εξαρτάται πολύ περισσότερο από την ποιότητα της βελτιστοποίησης. Αυτό είναι ιδιαίτερα έντονο για τους υπολογισμούς κινητής υποδιαστολής (FP), όπου ο λόγος είναι περίπου 36 φορές. Οι υπολογισμοί κινητής υποδιαστολής είναι δυνατό σημείοΑρχιτεκτονικές IA-64, αλλά πρέπει να δίνεται προσοχή στη χρήση των πιο αποτελεσματικών ρυθμίσεων μεταγλωττιστή. Το προκύπτον κέρδος στην παραγωγικότητα πληρώνει την εργασία που δαπανάται για την εύρεση τους.
Εικόνα 6. Επιτάχυνση κατά τη χρήση των καλύτερων επιλογών βελτιστοποίησης SPEC CPU200
Οι μεταγλωττιστές της Intel υποστηρίζουν τις βιομηχανικές προδιαγραφές OpenMP για τη δημιουργία εφαρμογών πολλαπλών νημάτων. Υποστηρίζεται η ρητή (επιλογή -Qopenmp) και η αυτόματη (-Qparallel) παραλληλοποίηση. Στην περίπτωση της ρητής λειτουργίας, ο προγραμματιστής είναι υπεύθυνος για τη σωστή και αποτελεσματική χρήση του προτύπου OpenMP. Στην περίπτωση της αυτόματης παραλληλοποίησης, ο μεταγλωττιστής έχει ένα πρόσθετο βάρος που σχετίζεται με την ανάλυση του κώδικα του προγράμματος. Για το λόγο αυτό, προς το παρόν, η αυτόματη παραλληλοποίηση λειτουργεί αποτελεσματικά μόνο σε αρκετά απλούς κώδικες.
Το γράφημα στο Σχήμα 7 δείχνει την επιτάχυνση από τη χρήση σαφούς παραλληλισμού σε ένα σύστημα δειγμάτων μηχανικής (προπαραγωγής) που βασίζεται σε επεξεργαστή Intel Pentium 4 (Prescott) με υποστήριξη τεχνολογίας Hyper-Threading: 2,8 GHz, 2 GB RAM, 8K L1-Cache, 512K L2-Cache . Το SPEC OMPM2001 χρησιμοποιείται ως δοκιμαστική σουίτα. Αυτό το σετ εστιάζει σε μικρά και μεσαία συστήματα SMP, η κατανάλωση μνήμης είναι έως και δύο gigabyte. Οι εφαρμογές μεταγλωττίστηκαν χρησιμοποιώντας Intel 8.0 C/C++ και Fortran με δύο σετ επιλογών: -Qopenmp -Qipo -O3 -QxN και -Qopenmp -Qipo -O3 -QxP, με καθεμία από τις οποίες οι εφαρμογές ξεκίνησαν με το Hyper-Threading ενεργοποιημένο και απενεργοποιημένο . Οι τιμές επιτάχυνσης στο γράφημα κανονικοποιούνται στην απόδοση της έκδοσης με ένα νήμα με απενεργοποιημένο το Hyper-Threading.
Εικόνα 7: Εφαρμογές από τη σουίτα SPEC OMPM2001 σε επεξεργαστή Prescott
Μπορεί να φανεί ότι σε 9 από τις 11 περιπτώσεις, η χρήση ρητής παραλληλοποίησης χρησιμοποιώντας OpenMP δίνει ώθηση στην απόδοση όταν είναι ενεργοποιημένη η τεχνολογία Hyper-Threading. Μία εφαρμογή (312.swim) παρουσιάζει επιβράδυνση. Είναι γνωστό ότι αυτή η εφαρμογή χαρακτηρίζεται από υψηλό βαθμό εξάρτησης εύρος ζώνηςμνήμη. Όπως και με το SPEC CPU2000, το wupwise επωφελείται πολύ από τις βελτιστοποιήσεις Prescott (-QxP).
1.2 Βελτιστοποίηση προγραμμάτων με αλλαγές στον πηγαίο κώδικα και χρήση διαγνωστικών μεταγλωττιστή
Στις προηγούμενες ενότητες, εξετάσαμε την επίδραση του μεταγλωττιστή (και των ρυθμίσεών του) στην ταχύτητα εκτέλεσης του κώδικα. Ταυτόχρονα, οι μεταγλωττιστές της Intel παρέχουν περισσότερες ευκαιρίες για βελτιστοποίηση κώδικα παρά απλώς αλλαγή ρυθμίσεων. Συγκεκριμένα, οι μεταγλωττιστές επιτρέπουν στον προγραμματιστή να κάνει «υπαινιγμούς» στον κώδικα του προγράμματος, που επιτρέπουν τη δημιουργία πιο αποτελεσματικού κώδικα από άποψη απόδοσης. Παρακάτω είναι μερικά παραδείγματα για τη γλώσσα C/C++ (υπάρχουν παρόμοια εργαλεία για τη γλώσσα Fortran, που διαφέρουν μόνο στη σύνταξη).
Το #pragma ivdep (όπου ivdep σημαίνει παράβλεψη διανυσματικών εξαρτήσεων) χρησιμοποιείται πριν από τους βρόχους του προγράμματος για να πει στον μεταγλωττιστή ότι δεν υπάρχουν εξαρτήσεις δεδομένων μέσα. Αυτή η υπόδειξη λειτουργεί όταν ο μεταγλωττιστής (βάσει της ανάλυσης) υποθέτει συντηρητικά ότι τέτοιες εξαρτήσεις μπορεί να υπάρχουν (εάν ο μεταγλωττιστής μπορεί να αποδείξει ότι η εξάρτηση υπάρχει ως αποτέλεσμα της ανάλυσης, τότε η "υπόδειξη" δεν έχει αποτέλεσμα), ενώ ο συντάκτης κώδικα γνωρίζει ότι τέτοιες εξαρτήσεις δεν μπορούν να προκύψουν. Με αυτήν την υπόδειξη, ο μεταγλωττιστής μπορεί να δημιουργήσει πιο αποτελεσματικό κώδικα: αυτόματη διανυσματοποίηση για IA-32 (χρησιμοποιώντας διανυσματικές οδηγίες από τα σύνολα MMX\SSE\SSE2\SSE3 για βρόχους προγραμμάτων C/C++ και Fortran. μπορείτε να μάθετε περισσότερα για αυτήν την τεχνική, για παράδειγμα, επόμενο άρθρο στο Intel Technology Journal), διοχέτευση λογισμικού (SWP) για IA-64.
Το #pragma vector χρησιμοποιείται πάντα για να αναγκάσει τον μεταγλωττιστή να αλλάξει την απόφαση σχετικά με την αναποτελεσματικότητα της διανυσματοποίησης βρόχου (τόσο αυτόματο για το IA-32 όσο και το SWP για το IA-64), με βάση μια ανάλυση των ποσοτικών και ποιοτικών χαρακτηριστικών της εργασίας σε κάθε επανάληψη.
Το #pragma novector κάνει πάντα το αντίθετο από το #pragma vector.
Το #pragma vector aligned χρησιμοποιείται για να πει στον μεταγλωττιστή ότι τα δεδομένα που χρησιμοποιούνται στον βρόχο είναι ευθυγραμμισμένα σε ένα όριο 16 byte. Αυτό σας επιτρέπει να δημιουργήσετε πιο αποτελεσματικό και/ή πιο συμπαγή (λόγω της έλλειψης ελέγχων χρόνου εκτέλεσης) κώδικα.
Το #pragma vector unaligned κάνει το αντίθετο από το #pragma aligned. Είναι δύσκολο να μιλήσουμε για κέρδη απόδοσης σε αυτήν την περίπτωση, αλλά μπορείτε να βασιστείτε σε έναν πιο συμπαγή κώδικα.
Το σημείο διανομής #pragma χρησιμοποιείται μέσα στον βρόχο του προγράμματος, έτσι ώστε ο μεταγλωττιστής να μπορεί να χωρίσει τον βρόχο διανομής σε αυτό το σημείο σε πολλούς μικρότερους. Για παράδειγμα, μια τέτοια "υπόδειξη" μπορεί να χρησιμοποιηθεί όταν ο μεταγλωττιστής αποτυγχάνει να διανυσματοποιήσει αυτόματα τον βρόχο πηγής (για παράδειγμα, λόγω εξάρτησης δεδομένων που δεν μπορεί να αγνοηθεί ακόμη και με το #pragma ivdep), ενώ κάθε (ή μέρος) του νέου Οι σχηματισμένοι κύκλοι μπορούν να διανυσματοποιηθούν αποτελεσματικά.
Το #pragma loop count (N) χρησιμοποιείται για να πει στον μεταγλωττιστή ότι η πιο πιθανή τιμή για τον αριθμό των επαναλήψεων του βρόχου θα είναι N. Αυτές οι πληροφορίες βοηθούν να αποφασίσετε για την πιο αποτελεσματική βελτιστοποίηση για αυτόν τον βρόχο (για παράδειγμα, εάν θα ξετυλιχτεί , είτε να κάνετε SWP είτε να κάνετε αυτόματη διανυσματοποίηση, είτε να χρησιμοποιήσετε εντολές προφόρτωσης δεδομένων λογισμικού, ...)
Το "hint" _assume_aligned(p, base) χρησιμοποιείται για να πει στον μεταγλωττιστή ότι η περιοχή μνήμης που σχετίζεται με τον δείκτη p είναι ευθυγραμμισμένη σε μια βάση = όριο 2^n byte.
Αυτό απέχει πολύ από πλήρης λίσταδιάφορες «συμβουλές» προς τον μεταγλωττιστή, οι οποίες μπορούν να επηρεάσουν σημαντικά την αποτελεσματικότητα του παραγόμενου κώδικα. Μπορεί να προκύψει το ερώτημα πώς να προσδιορίσετε ότι ο μεταγλωττιστής χρειάζεται μια υπόδειξη.
Αρχικά, μπορείτε να χρησιμοποιήσετε τα διαγνωστικά μεταγλωττιστή με τη μορφή αναφορών που παρέχει στον προγραμματιστή. Για παράδειγμα, χρησιμοποιώντας την επιλογή -Qvec_reportN (όπου το N ποικίλλει από 0 έως 3 και αντιπροσωπεύει το επίπεδο λεπτομέρειας) μπορείτε να λάβετε μια αναφορά αυτόματης διανυσματικής διαμόρφωσης. Ο προγραμματιστής θα έχει πρόσβαση σε πληροφορίες σχετικά με το ποιοι βρόχοι έχουν διανυσματοποιηθεί και ποιοι όχι. Διαφορετικά, ο μεταγλωττιστής αναφέρει τους λόγους για τους οποίους απέτυχε η διανυσματοποίηση. Ας υποθέσουμε ότι η αιτία ήταν μια συντηρητικά υποτιθέμενη εξάρτηση από τα δεδομένα. Σε αυτήν την περίπτωση, εάν ο προγραμματιστής είναι σίγουρος ότι η εξάρτηση δεν μπορεί να συμβεί, τότε μπορεί να χρησιμοποιηθεί το #pragma ivdep. Ο Compiler παρέχει παρόμοιες (σε σύγκριση με το Qvec_reportN για IA-32) δυνατότητες στο IA-64 για τον έλεγχο της παρουσίας και της αποτελεσματικότητας του SWP. Γενικά, οι μεταγλωττιστές της Intel παρέχουν άφθονες ευκαιρίες για τη διάγνωση βελτιστοποιήσεων.
Δεύτερον, άλλα προϊόντα λογισμικού (όπως το Intel VTune profiler) μπορούν να χρησιμοποιηθούν για την εύρεση σημείων συμφόρησης απόδοσης στον κώδικα. Τα αποτελέσματα της ανάλυσης μπορούν να βοηθήσουν τον προγραμματιστή να κάνει τις απαραίτητες αλλαγές.
Μπορείτε επίσης να χρησιμοποιήσετε τη λίστα κώδικα assembler που δημιουργείται από τον μεταγλωττιστή για ανάλυση.
Εικόνα 8
Το σχήμα 8 παραπάνω δείχνει τη διαδικασία βήμα προς βήμα βελτιστοποίησης μιας εφαρμογής χρησιμοποιώντας έναν μεταγλωττιστή (και άλλα προϊόντα λογισμικού) Intel σε γλώσσα Fortran για αρχιτεκτονική IA-64. Ως παράδειγμα, θεωρείται ένα μη αδιαβατικό περιφερειακό σχήμα πρόβλεψης για 48 ώρες του Roshydrometcenter (μπορείτε να διαβάσετε σχετικά, για παράδειγμα, σε αυτό το άρθρο. Το άρθρο μιλά για τον χρόνο υπολογισμού των περίπου 25 λεπτών, αλλά έχουν σημειωθεί σημαντικές αλλαγές Από τότε που γράφτηκε. Η απόδοση κώδικα λαμβάνεται ως σημείο εκκίνησης σε ένα σύστημα Cray-YMP Ο μη τροποποιημένος κώδικας με προεπιλεγμένες επιλογές μεταγλωττιστή (-O2) έδειξε κέρδος απόδοσης 20% σε ένα σύστημα 4 κατευθύνσεων που βασίζεται σε ένα Intel Itanium 2 900 MHz επεξεργαστής Η εφαρμογή πιο επιθετικής βελτιστοποίησης (-O3) οδήγησε σε ~2,5x επιτάχυνση χωρίς αλλαγή του κώδικα, κυρίως λόγω του SWP και της ανάλυσης προφόρτωσης δεδομένων με χρήση διαγνωστικών μεταγλωττιστή και το προφίλ Intel VTune αποκάλυψε ορισμένα σημεία συμφόρησης Για παράδειγμα, ο μεταγλωττιστής δεν διοχέτευσε μέσω προγραμματισμού αρκετές επιδόσεις- κρίσιμοι βρόχοι, αναφέροντας στην αναφορά ότι προτείνει εξάρτηση δεδομένων. Μικρές αλλαγές στον κώδικα (οδηγία ivdep) βοήθησαν στην επίτευξη του αποτελέσματος ενεργητική μετάδοση. Χρησιμοποιώντας το πρόγραμμα προφίλ VTune, διαπιστώθηκε (και η αναφορά του μεταγλωττιστή το επιβεβαίωσε) ότι ο μεταγλωττιστής δεν άλλαξε τη σειρά των ένθετων βρόχων (εναλλαγή βρόχου) για πιο αποτελεσματική χρήση της κρυφής μνήμης. Ο λόγος ήταν και πάλι οι συντηρητικές υποθέσεις για την εξάρτηση από τα δεδομένα. Έχουν γίνει αλλαγές στον πηγαίο κώδικα του προγράμματος. Ως αποτέλεσμα, καταφέραμε να πετύχουμε 4πλάσια επιτάχυνση σε σχέση με την αρχική έκδοση. Χρησιμοποιώντας ρητή παραλληλοποίηση με οδηγίες OpenMP και μετά μετάβαση σε σύστημα με περισσότερα από υψηλή συχνότηταεπέτρεψε τη μείωση του χρόνου υπολογισμού σε λιγότερο από 8 λεπτά, γεγονός που έδωσε πάνω από 16 φορές μεγαλύτερη ταχύτητα σε σύγκριση με την αρχική έκδοση.
Intel Visual Fortran
Το Intel Visual Fortran 8.0 χρησιμοποιεί το front-end (μέρος του μεταγλωττιστή που είναι υπεύθυνο για τη μετατροπή του προγράμματος από κείμενο στη γλώσσα προγραμματισμού στην εσωτερική αναπαράσταση του μεταγλωττιστή, η οποία είναι σε μεγάλο βαθμό ανεξάρτητη είτε από τη γλώσσα προγραμματισμού είτε από τη μηχανή-στόχο), μεταγλωττιστή CVF τεχνολογίες και στοιχεία του μεταγλωττιστή Intel, υπεύθυνα για ένα σύνολο βελτιστοποιήσεων και δημιουργίας κώδικα.Εικόνα 9
Εικόνα 10
Τα Σχήματα 9 και 10 δείχνουν γραφήματα σύγκρισης Απόδοση Intel Visual Fortran 8.0 με την προηγούμενη έκδοση του Intel Fortran 7.1 και με άλλους διάσημους μεταγλωττιστές από αυτήν τη γλώσσα που εκτελούνται υπό το λειτουργικό σύστημα Οικογένειες Windowsκαι Linux. Για σύγκριση, χρησιμοποιήθηκαν δοκιμές, τα κείμενα πηγής των οποίων, που πληρούν τα πρότυπα F77 και F90, είναι διαθέσιμα στη διεύθυνση http://www.polyhedron.com/. Στον ίδιο ιστότοπο, είναι διαθέσιμες πιο λεπτομερείς πληροφορίες σχετικά με τη σύγκριση της απόδοσης του μεταγλωττιστή (Σύγκριση μεταγλωττιστή Win32 -> Fortran (77, 90) Συγκρίσεις χρόνου εκτέλεσης και συγκρίσεις μεταγλωττιστών Linux -> Σημεία αναφοράς χρόνου εκτέλεσης Fortran (77, 90): περισσότεροι διαφορετικοί μεταγλωττιστές είναι φαίνεται και ο γεωμετρικός μέσος όρος δίνεται σε συνδυασμό με τα επιμέρους αποτελέσματα για κάθε δοκιμή.
Στο προηγούμενο τεύχος του περιοδικού, συζητήσαμε προϊόντα της οικογένειας Intel VTune Performance Analyzer - εργαλεία ανάλυσης απόδοσης που είναι επάξια δημοφιλή στους προγραμματιστές εφαρμογών και σας επιτρέπουν να εντοπίσετε στον κώδικα ομαδικές εφαρμογές, που καταναλώνει πάρα πολλούς πόρους επεξεργαστή, γεγονός που δίνει στους προγραμματιστές την ευκαιρία να εντοπίσουν και να εξαλείψουν πιθανά σημεία συμφόρησης που σχετίζονται με τέτοια τμήματα κώδικα, επιταχύνοντας έτσι τη διαδικασία ανάπτυξης εφαρμογών. Σημειώστε, ωστόσο, ότι η απόδοση των εφαρμογών εξαρτάται σε μεγάλο βαθμό από το πόσο αποτελεσματικοί είναι οι μεταγλωττιστές που χρησιμοποιούνται στην ανάπτυξή τους και ποιες δυνατότητες υλικού χρησιμοποιούν κατά τη δημιουργία κώδικα μηχανής.
Οι πιο πρόσφατοι μεταγλωττιστές Intel C++ και Intel Fortran για Windows και Linux παρέχουν έως και 40% κέρδη στην απόδοση εφαρμογών για συστήματα που βασίζονται σε επεξεργαστές Intel Itanium 2, Intel Xeon και Intel Pentium 4 σε σχέση με υπάρχοντες μεταγλωττιστές από άλλους προμηθευτές, χρησιμοποιώντας αυτές τις δυνατότητες επεξεργαστές, όπως η τεχνολογία Hyper-Threading.
Οι διαφορές που σχετίζονται με τη βελτιστοποίηση κώδικα από αυτήν την οικογένεια μεταγλωττιστών περιλαμβάνουν τη χρήση μιας στοίβας για την εκτέλεση λειτουργιών κινητής υποδιαστολής, τη διαδιαδικαστική βελτιστοποίηση (Interprocedural Optimization, IPO), τη βελτιστοποίηση σύμφωνα με το προφίλ της εφαρμογής (Profile Guided Optimization, PGO), την προφόρτωση δεδομένων σε την προσωρινή μνήμη (Προανάκτηση δεδομένων), η οποία αποφεύγει την καθυστέρηση που σχετίζεται με την πρόσβαση στη μνήμη, υποστήριξη για χαρακτηριστικά χαρακτηριστικά των επεξεργαστών Intel (για παράδειγμα, επεκτάσεις για επεξεργασία ροής δεδομένων Intel Streaming SIMD Extensions 2, ειδικά για το Intel Pentium 4), αυτόματη παραλληλοποίηση της εκτέλεσης κώδικα , δημιουργία εφαρμογών, που τρέχουν σε πολλαπλές ΔΙΑΦΟΡΕΤΙΚΟΙ ΤΥΠΟΙεπεξεργαστές κατά τη βελτιστοποίηση για ένα από αυτά, μέσα "πρόβλεψης" του επόμενου κώδικα (πρόβλεψη κλάδου), εκτεταμένη υποστήριξη για εργασία με νήματα εκτέλεσης.
Σημειώστε ότι οι μεταγλωττιστές της Intel χρησιμοποιούνται σε γνωστές εταιρείες όπως Alias/Wavefront, Oracle, Fujitsu Siemens, ABAQUS, Silicon Graphics, IBM. Βάσει ανεξάρτητων δοκιμών από έναν αριθμό εταιρειών, η απόδοση των μεταγλωττιστών Intel ξεπερνά σημαντικά τους μεταγλωττιστές άλλων κατασκευαστών (βλ., για παράδειγμα, http://intel.com/software/products/compilers/techtopics/compiler_gnu_perf.pdf).
Παρακάτω θα δούμε μερικά από τα χαρακτηριστικά πιο πρόσφατες εκδόσειςΜεταγλωττιστές Intel για επιτραπέζιους υπολογιστές και διακομιστή λειτουργικά συστήματα.
Μεταγλωττιστές για την πλατφόρμα Microsoft Windows
Intel C++ Compiler 7.1 για Windows
Το Intel C++ Compiler 7.1 είναι ένας μεταγλωττιστής που κυκλοφόρησε νωρίτερα φέτος και σας επιτρέπει να το επιτύχετε υψηλός βαθμόςβελτιστοποιήσεις κώδικα για τους επεξεργαστές Intel Itanium, Intel Itanium 2, Intel Pentium 4 και Intel Xeon, καθώς και για τον επεξεργαστή Intel Pentium M που χρησιμοποιεί τεχνολογία Intel Centrino και έχει σχεδιαστεί για χρήση σε κινητές συσκευές.
Ο καθορισμένος μεταγλωττιστής είναι πλήρως συμβατός με τα εργαλεία ανάπτυξης Microsoft Visual C++ 6.0 και Microsoft Visual Studio .NET: Μπορεί να ενσωματωθεί σε κατάλληλα περιβάλλοντα ανάπτυξης.
Αυτός ο μεταγλωττιστής υποστηρίζει τα πρότυπα ANSI και ISO C/C++.
Intel Fortran Compiler 7.1 για Windows
Το Intel Fortran Compiler 7.1 για Windows, που κυκλοφόρησε επίσης νωρίτερα φέτος, σας επιτρέπει να δημιουργήσετε βελτιστοποιημένο κώδικα για επεξεργαστές Intel Itanium, Intel Itanium 2, Intel Pentium 4 και Intel Xeon, Intel Pentium M.
Αυτός ο μεταγλωττιστής είναι πλήρως συμβατός με τα εργαλεία ανάπτυξης Microsoft Visual C++ 6.0 και Microsoft Visual Studio .NET, δηλαδή μπορεί να ενσωματωθεί στα αντίστοιχα περιβάλλοντα ανάπτυξης. Επιπλέον, αυτός ο μεταγλωττιστής σάς επιτρέπει να αναπτύξετε εφαρμογές 64-bit για λειτουργικά συστήματα που εκτελούνται σε επεξεργαστές Itanium / Itanium 2, με βοήθεια από τη Microsoft Visual Studio σε επεξεργαστή Pentium 32 bit που χρησιμοποιεί τον μεταγλωττιστή Intel Fortran 64 bit. Κατά τον εντοπισμό σφαλμάτων κώδικα, αυτός ο μεταγλωττιστής σάς επιτρέπει να χρησιμοποιείτε το πρόγραμμα εντοπισμού σφαλμάτων για την πλατφόρμα Microsoft .NET.
Εάν έχετε εγκατεστημένο το Compaq Visual Fortran 6.6, μπορείτε να χρησιμοποιήσετε το Intel Fortran Compiler 7.1 αντί για τον αρχικό μεταγλωττιστή επειδή αυτοί οι μεταγλωττιστές είναι συμβατοί σε επίπεδο πηγαίου κώδικα.
Το Intel Fortran Compiler 7.1 για Windows είναι πλήρως συμβατό με το πρότυπο ISO Fortran 95 και υποστηρίζει τη δημιουργία και τον εντοπισμό σφαλμάτων δίγλωσσων εφαρμογών C και Fortran.
Μεταγλωττιστές για την πλατφόρμα Linux
Intel C++ Compiler 7.1 για Linux
Ένας άλλος μεταγλωττιστής που κυκλοφόρησε στις αρχές του έτους, ο Intel C++ Compiler 7.1 για Linux, σας επιτρέπει να επιτύχετε υψηλό βαθμό βελτιστοποίησης κώδικα για επεξεργαστές Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Αυτός ο μεταγλωττιστής είναι πλήρως συμβατό με τον μεταγλωττιστή GNU C σε ενότητες πηγαίου κώδικα και αντικειμένου επιπέδου, επιτρέποντας τη μετεγκατάσταση εφαρμογών που έχουν δημιουργηθεί με GNU C χωρίς επιπλέον κόστος. λειτουργικά συστήματα SCO, πρώιμες εκδόσεις του Sun Solaris κ.λπ.), που σημαίνει πλήρη συμβατότητα με ο μεταγλωττιστής gcc 3.2 σε δυαδικό επίπεδο. Τέλος, με το Intel C++ Compiler 7.1 για Linux, μπορείτε ακόμη και να μεταγλωττίσετε εκ νέου τον πυρήνα του Linux με μερικές μικρές αλλαγές στον πηγαίο κώδικα του.
Intel Fortran Compiler 7.1 για Linux
Ο μεταγλωττιστής Intel Fortran Compiler 7.1 για Linux σάς επιτρέπει να δημιουργείτε βελτιστοποιημένο κώδικα για επεξεργαστές Intel Itanium, Intel Itanium 2, Intel Pentium 4, Intel Pentium M. Αυτός ο μεταγλωττιστής είναι πλήρως συμβατός με τον μεταγλωττιστή Compaq Visual Fortran 6.6 σε επίπεδο πηγαίου κώδικα, επιτρέποντας μπορείτε να μεταγλωττίσετε εκ νέου εφαρμογές με αυτό που δημιουργήθηκαν με το Compaq Visual Fortran, βελτιώνοντας έτσι την απόδοσή τους.
Επιπλέον, ο καθορισμένος μεταγλωττιστής είναι συμβατός με βοηθητικά προγράμματα που χρησιμοποιούνται από προγραμματιστές, όπως το πρόγραμμα επεξεργασίας emacs, το πρόγραμμα εντοπισμού σφαλμάτων gdb και το βοηθητικό πρόγραμμα δημιουργίας εφαρμογής make.
Όπως και η έκδοση Windows αυτού του μεταγλωττιστή, το Intel Fortran Compiler 7.1 για Linux είναι πλήρως συμβατό με το πρότυπο ISO Fortran 95 και υποστηρίζει τη δημιουργία και τον εντοπισμό σφαλμάτων εφαρμογών που περιέχουν κώδικα σε δύο γλώσσες C και Fortran.
Πρέπει να τονιστεί ότι σημαντική συνεισφορά στη δημιουργία των καταγεγραμμένων μεταγλωττιστών Intel είχαν ειδικοί Ρωσικό Κέντρο Intel για ανάπτυξη λογισμικού στο Nizhny Novgorod. Περισσότερες πληροφορίες σχετικά με τους μεταγλωττιστές της Intel μπορείτε να βρείτε στον ιστότοπο της Intel στη διεύθυνση: www.intel.com/software/products/.
Το δεύτερο μέρος αυτού του άρθρου θα αφιερωθεί στους μεταγλωττιστές της Intel που δημιουργούν εφαρμογές για φορητές συσκευές.