PDA

View Full Version : Πρόβλημα: 128 bits ακέραιοι σε x86-64


DarthMoul
18-11-2004, 13:36
Για την επόμενη έκδοση του pctbench θα χρειαστώ 128 bits ακεραίους σε x86-64 πλατφόρμα. Έχει αντιμετωπίσει κανείς την περίπτωση; Η compilers για pc που χρησιμοποιώ, δηλαδή gcc, msvc και icc χειρίζονται και τους long και τους long long με 64 bits. Πρόκειται για ανωριμότητα και ελλειπή υποστήριξη της συγκεκριμένης πλατφόρμας, όμως σίγουρα υπάρχει κάποιος τρόπος για τον χειρισμό 128μπιτων ακεραίων χωρίς την χρήση assembly και sse2 instructions.

Στον gcc κατάφερα να ορίσω 128μπιτους ακεραίους με την παρακάτω δήλωση:

typedef unsigned int __attribute__((__mode__(__TI__))) UINT128;
UINT128 sum = 0;

αλλά όταν έρχεται η ώρα για το shift left και shift right, τα αποτελέσματα που πέρνω δεν είναι σωστά.

Αν το έχει αντιμετωπίσει κανείς και έχει καμμιά ιδέα καλό θα ήταν να το δούμε μαζί εδώ. Είναι κρίμα να αγοράζουμε 64μπιτους και να δουλεύουμε όπως πριν.
Θα είναι πολύ χρήσιμο reference για το μέλλον.

DarthMoul
18-11-2004, 18:47
Τελικά το πρόβλημα λύθηκε. Το μεγαλύτερο εύρος για shifting που επιδέχετε ο Athlon 64 είναι 32 bits και όχι 64. Συνεπώς αν θέλουμε να κάνουμε shift 64 bits, κάνουμε 2 φορές από 32.

Οι δοκιμές που έκανα δείχνουν εκπληκτικά αποτελέσματα για τον Athlon 64 σε linux. H 64μπιτη έκδοση του bench είναι σχεδόν 30% πιο γρήγορη από την 32μπιτη. Windows 64 bits δεν έχω για x86, για να κάνω σύγκριση. Ούτε 64 bit compiler για windows.

Η επόμενη έκδοση θα έχει πολύ ενδιαφέρον. Πάω να συνεχίσω :024:

circular
18-11-2004, 19:53
Happy Coding! Περιμένουμε εναγωνίως παρόλο που δεν έχουμε (ακόμα!!! :059: ) χ86-64