JaguarOne Ιανουάριος 12, 2009 #21 Κοινοποίηση Ιανουάριος 12, 2009 well το έχω δει. χωρίς να είμαι σίγουρος πρέπει να έχει να κάνει με concurrency control το αν θα ανοίξει το thread σε άλλο πυρήνα. Αμα το επόμενο thread κάνει access δεδομένα του αρχικού thread λογικά το o/s θα κάνει schedule το thread στον πυρήνα με το αρχικό thread Link to comment Share on other sites More sharing options...
Jaco Ιανουάριος 12, 2009 #22 Κοινοποίηση Ιανουάριος 12, 2009 Ίσως έχει να κάνει και με την προηγούμενη gcc και το implementation της pthreads... πάντως με openmp όντως είχα πιο μοιρασμένο φορτίο... Link to comment Share on other sites More sharing options...
dop Φεβρουάριος 9, 2009 #23 Κοινοποίηση Φεβρουάριος 9, 2009 Εφόσον έχεις shared memory (δηλαδή το 100% των υπολογιστών του απλού κόσμου), τότε ένα thread μπορεί να τρέξει και σε διαφορετικό πυρήνα από αυτόν που τρέχει το process που το δημιούργησε (και συνήθως αυτό γίνεται). Για το λειτουργικό, ένας core, φυσικός ή λογικός (βλ. Simultaneous Multithreading - SMT ή Hyperthreading - HT) είναι ακριβώς το ίδιο - δεν μπορεί να τους ξεχωρίσει (παραπέμπω στην συζήτηση από τον Ingo Molnar για την HT-support στο linux http://lwn.net/Articles/8553/ ). Επιπλέον, αν έχεις 2 chips που μοιράζονται την ίδια μνήμη με κάποιον τρόπο, ισχύουν και πάλι τα παραπάνω. Μάλιστα, το OS μπορεί να σταματήσει την εκτέλεση μιας process και όταν την συνεχίσει, να την δώσει σε άλλο πυρήνα. @jaco: αυτό που περιγράφεις είναι η υποστήριξη multithreading από ένα single core και ναι χοντρικά αυτό γίνεται. Η διαφορά είναι ότι η ταχύτητα ΔΕΝ αυξάνεται παρά μόνον η ΑΠΟΚΡΙΣΗ - ήτοι η αντιλαμβανόμενη ταχύτητα. Μάλιστα, με κάθε thread οι επιδόσεις μειώνονται, μια και η διαχείρηση threads από το λειτουργικό κοστίζει. Μέχρι σήμερα οι εφαρμογές ήταν απλά multithreaded για να κρύβουν το I/O latency - όσο περίμενες δεδομένα από/προς δίσκο, οθόνη κλπ έκανες κάτι άλλο. Και για αυτό δεν εμφανίζεται ταχύτητα σήμερα. Όταν έχεις 8 πυρήνες που είναι γρήγοροι, δεν υπάρχει αρκετή δουλειά για αυτούς. Όσο περιμένεις για I/O, το thread είναι idle και απλά γίνεται κάτι άλλο schedule. Αλλά το μεγάλο μέρος της computationally-intensive δουλειάς γίνεται ακόμα από έναν πυρήνα και ένα thread - κοινώς, δεν έχεις παράλληλη επεξεργασία. Ένα μικρό παράδειγμα: 1 εργάτης βάφει έναν τοίχο με δύο διαφορετικά χρώματα εναλλάξ και επιπλέον σταματάει για να φέρνει τις δύο διαφορετικές μπογιές. Ο εργάτης δεν έχει νόημα να φέρνει περισσότερη μπογιά από όση χρειάζεται, καθώς ο χώρος στο δωμάτιο που βάφεται είναι περιορισμένος. Τώρα, βάζουμε έναν ακόμη εργάτη να φέρνει μπογιά και ο πρώτος να βάφει απλώς, ο δεύτερος να φέρνει μπογιά. Ο δεύτερος εργάτης υποαπασχολείται, μια και η μπογιά έρχεται πιο γρήγορα από ότι ξοδεύεται. Άρα η λύση είναι να χρησιμοποιήσουμε κάπως τον εργάτη αυτόν - και αρα βάζουμε τον πρώτο να βάφει με ένα χρώμα και να φέρνει τη μπογιά του και τον δεύτερο το άλλο χρώμα και να φέρνει τη δικιά του μπογιά και απλά να τους δώσουμε σαφείς οδηγίες για να μη βάφει ο ένας στο μέρος του άλλου και να μη σκοντάψουν μεταξύ τους. Οι εργάτες είναι τα threads, το βάψιμο η καθεαυτού computational εργασία, η μεταφορά μπογιάς I/O και memory transactions και οι οδηγίες το synchronization μεταξύ τους. Το επικρατές μοντέλο μέχρι σημέρα έχει έναν εργάτη να βάφει και πολλούς να φέρνουν μπογιές. Το OpenMP είναι ένας απλός τρόπος να λες σε πολλούς εργάτες ΠΩΣ να βάψουν ταυτόχρονα, χωρίς να χρειάζεται να μπλέκεις με τα απαράδεκτο API των threads (σημ. το OpenMP χρησιμοποιεί threads για να παρέχει στον χρήστη task και data parallelism). ΥΓ σε μερικές πλατφόρμες μπορείς να πεις που θα τρέξει το κάθε process/thread. Επιπλέον, σε κάποιες ερευνητικές προσπάθειες μπορούσες να στείλεις thread να τρέξει σε άλλο μηχάνημα. Μην κολλάτε σε έννοιες, τα πάντα είναι δεδομένα και αλγόριθμοι που εφαρμόζονται σε αυτά. Όλα τα υπόλοιπα περιορίζονται από την φαντασία μας Link to comment Share on other sites More sharing options...
Chosen Φεβρουάριος 10, 2009 #24 Κοινοποίηση Φεβρουάριος 10, 2009 <3 Link to comment Share on other sites More sharing options...
Jaco Φεβρουάριος 10, 2009 #25 Κοινοποίηση Φεβρουάριος 10, 2009 dop, αυτό το είχε ξεκαθαρίσει και ο JaguarOne στην προηγούμενη σελίδα... η λάθος εντύπωση για τα threads, σε πολυπύρηνους, που είχα οφειλόταν στον στην βιβλιοθήκη του pthreads και μάλλον του concurrency control των windows, ενώ με το OpenMP όλα δουλεύουν όπως πρέπει... Link to comment Share on other sites More sharing options...
dop Φεβρουάριος 10, 2009 #26 Κοινοποίηση Φεβρουάριος 10, 2009 Και με τα threads θα δουλεύουν όλα όπως πρέπει, καθώς το OpenMP χρησιμοποιεί threads. Η μόνη διαφορά είναι ότι προσφέρει ένα καλύτερο abstraction το οποίο προϋποθέτει υποστήριξη από τον compiler ΚΑΙ ένα runtime system.Μπορείς να κάνεις το δικό σου OpenMP-like runtime (ίσως και καλύτερο) χρησιμοποιώντας απλώς threads, locks και atomic operations. Link to comment Share on other sites More sharing options...
christaras Φεβρουάριος 11, 2009 #27 Κοινοποίηση Φεβρουάριος 11, 2009 παντως εχει πεσει διαβασμα full:banging: Link to comment Share on other sites More sharing options...
dop Φεβρουάριος 11, 2009 #28 Κοινοποίηση Φεβρουάριος 11, 2009 Δεν κάνουμε και τίποτα όλη μέρα, ασχολιόμαστε με τους πυρήνες των άλλων Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.