Επειδή ρωτήθηκε ...
Το ξέρετε ότι μπορεί να γράψει κανείς assembly μέσα σε ένα αρχείο C++? Σίγουρα το ξέρετε οι παλιοί, αλλά οι καινούριοι μπορεί να μην ξέρουν και τί είναι assembly. Γλώσσα μηχανής για τους καθαρευουσιάνους.
Η Visual C++ επιτρέπει "εξ από ανέκαθεν" να γράψει κανείς assembly κώδικα μέσα σε ένα αρχείο C++, είτε με τη μορφή function είτε σαν χύμα statements. Χρησιμοποιώντας assembly μπορεί να γράψει κανείς ΠΟΛΥ γρήγορο κώδικα αλλά κυρίως, μπορεί να χρησιμοποιήσει απευθείας εντολές MMX, SSE, SSE2 για να φτιάξει ένα ΠΟΛΥ γρήγορο αλγόριθμο, αλλά και νέες εντολές για νέους επεξεργαστές, για τους οποίους δεν υπάρχει ακόμα υποστήριξη από τον compiler.
Από την άλλη, ο προγραμματισμός σε assembly είνα τρελό μανίκι. Άσε που θα πρέπει να ξανακοιτάξεις αυτό τον ωραίο κώδικα με SSE9 όταν θα βγει ο AMD XX999 που δεν θα το υποστηρίζει ακόμα

.
Ευτυχώς για μας τους κάπως κοινούς θνητούς οι compiler της C++ από την 7 και μετά έχουν keywords για να χρησιμοποιήσει κανείς τις εντολές
MMX, SSE, SSE2 και AMD 3DNow. Για τη Visual C++6 θα πρέπει να κατεβάσουμε το
Visual C++ 6 Processor Pack. Αυτές οι εντολές είναι ουσιαστικά οι εντολές σε assembly σε μορφή functions, για να μην χρειάζεται κανείς να γράφει assembly για να τις καλέσει. Δυστυχώς, πάλι χρειάζεται πολύ δουλειά και προσεγμένος κώδικας για να πετύχει κανείς την απόδοση που θέλει. Άσε που θα πρέπει να μάθει νέα κόλπα όπως ενεργοποίηση-απενεργοποίηση του cache του επεξεργαστή, αλλιώς ο κώδικας του θα τρέχει ... πιό αργά απ' ότι πριν

! Και να μην μιλήσουμε για τις επιπτώσεις του hyperthreading ή των multi-core επεξεργαστών.

Πληροφορίες θα βρείτε, για τις .NET εκδόσεις στο
http://msdn.microsoft.com/library/en-us/vclang/html/_core_Assembler_.28.Inline.29_.Topics.asp και για την Visual C++6 στο
http://msdn.microsoft.com/library/en-us/vccore98/html/_core_assembler_.28.inline.29_.topics.asp.
Τελικά η καλύτερη λύση είναι να κατεβάσει κανείς τις έτοιμες βιβλιοθήκες της Intel ή της AMD που έχουν έτοιμους υλοποιημένους αλγόριθμους για πάρα πολλές περιπτώσεις, τόσο για desktop όσο και για mobile επεξεργαστές. Για όποιον μάλιστα θέλει να πετύχει την καλύτερη απόδοση, θα πρότεινα να αγοράσει τους compilers της κάθε εταιρείας. Για παράδειγμα, η Intel έχει βιβλιοθήκες με έτοιμους codecs για ήχο και video, αλγόριθμους συμπίεσης και επεξεργασίας σήματος αλλά και άλγεβρα, στατιστική και ανάλυση Fourier. Για να μην πω και ότι την καλύτερη επίδοση θα την πετύχει κανείς μόνο χρησιμοποιώντας τα εργαλεία τις κάθε εταιρείας.
Τα εργαλεία και τις βιβλιοθήκες της Intel θα τα βρείτε στο
http://www.intel.com/software/products/ (κοιτάξτε τα Performance Libraries). Τα αντίστοιχα εργαλεία της AMD στο
http://developer.amd.com/devtools.aspx .
Και ένα ωραίο. Αυτό τον καιρό είναι σε beta η έκδοση 5 των
Integrated Performance Primitives της Intel με νέους αλγόριθμους για επεξεργασία σημάτων, λόγου, κρυπτογράφησης και βίντεο, τόσο για Pentium όσο και για XScale επεξεργαστές.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos