SCREPTOS Δημοσιεύτηκε Ιανουάριος 10, 2009 #1 Κοινοποίηση Δημοσιεύτηκε Ιανουάριος 10, 2009 Άκουσα για ένα πρόγραμμα που δίνει την δυνατότητα σε έναν τετραπύρηνο επεξεργαστή να εκμεταλλεύεται ακόμα και στην πιο απλή εφαρμογή όλους τους πυρήνες τους με αποτέλεσμα να είναι πολύ πιο γρήγορος ο ηλεκτρονικός υπολογιστής, υπάρχει κάτι τέτοιο?? Link to comment Share on other sites More sharing options...
unstoppable Ιανουάριος 10, 2009 #2 Κοινοποίηση Ιανουάριος 10, 2009 Οχι. Link to comment Share on other sites More sharing options...
alexkhr Ιανουάριος 11, 2009 #3 Κοινοποίηση Ιανουάριος 11, 2009 Αν το βρεις πες το και σε εμας πάντως. Link to comment Share on other sites More sharing options...
neuromancer Ιανουάριος 11, 2009 #4 Κοινοποίηση Ιανουάριος 11, 2009 οχι Link to comment Share on other sites More sharing options...
sebastian Ιανουάριος 11, 2009 #5 Κοινοποίηση Ιανουάριος 11, 2009 Μονο στα ονειρα μας θα το ειχαμε αυτο! Link to comment Share on other sites More sharing options...
ericin Ιανουάριος 11, 2009 #6 Κοινοποίηση Ιανουάριος 11, 2009 καλά θα ήταν.θα "πέταγα" τον 8500 και θα πήγαινα για τετραπυρινο...αλλά που. Link to comment Share on other sites More sharing options...
konn43121416003283 Ιανουάριος 11, 2009 #7 Κοινοποίηση Ιανουάριος 11, 2009 Μηπως το ashampoo core tuner; Link to comment Share on other sites More sharing options...
aeroengine Ιανουάριος 11, 2009 #8 Κοινοποίηση Ιανουάριος 11, 2009 Παντως το ashampoo λεει οτι το κανει... τωρα δεν ξερω.... Link to comment Share on other sites More sharing options...
neuromancer Ιανουάριος 11, 2009 #9 Κοινοποίηση Ιανουάριος 11, 2009 Μπορείς να το βάλεις και να μας πεις εντυπώσεις (bench, κτλ). Δεν γίνονται αυτά. Link to comment Share on other sites More sharing options...
aeroengine Ιανουάριος 11, 2009 #10 Κοινοποίηση Ιανουάριος 11, 2009 Παιδια το προγραμμα ειναι φολα..αφηστε που θελει και λεφτα..δεν ειναι freeware.. Link to comment Share on other sites More sharing options...
basilakis Ιανουάριος 11, 2009 #11 Κοινοποίηση Ιανουάριος 11, 2009 Στα ονειρά μας ... Link to comment Share on other sites More sharing options...
Jaco Ιανουάριος 11, 2009 #12 Κοινοποίηση Ιανουάριος 11, 2009 Η απάντηση είναι ένα απλό και ξερό όχι, αλλά όποιος θέλει μπορεί να διαβάσει και την εξήγηση παρακάτω...Υπάρχουν δυο τρόποι πολυεπεξεργασίας, ο ένας είναι το multithreading και ο άλλος το multiprocessing... 1. το multithreading σπάει κομμάτια της εφαρμογής σε threads ώστε να τα εκτελεί ο ίδιος επεξεργαστής... Αυτό γίνεται λόγο του ότι η αρχιτεκτονική των λειτουργικών είναι βασισμένη στο multithreading οπότε για να εκτελούν πολλές λειτουργίες παράλληλα κάνουν το εξής, τρέχουν για μερικά ms μια εφαρμογή, μετά σε τυχαίο χρόνο την σταματάνε, όπου έχει φτάσει και φυλάνε την κατάσταση της στην μνήμη, μετά συνεχίζουν να τρέχουν μια άλλη, την σταματάνε και τρέχουν μια άλλη... κάποια στιγμή κάνει κύκλο και ξαναφτάνει στην πρώτη, παίρνει από την μνήμη την προηγούμενη της κατάσταση και την συνεχίζει από εκεί που είχε μείνει... οπότε το multithreading δεν σημαίνει ότι τρέχουν πολλές εφαρμογές ταυτόχρονα, απλά ότι σε μια περίοδο επεξεργασίας μοιράζεται η κάθε μια ένα ποσοστό του χρόνου, δηλαδή η εκτέλεση είναι σειριακή... οπότε αν έχει πέντε εφαρμογές ο επεξεργαστής μέσα σε μια χρονική περίοδο τις τρέχει ως εξής...: 13254 12345 κτλ... ο τρόπος με τον οποίο δημιουργείται συτή η σειρά και πόσο χρόνο καταναλώνει η cpu για την κάθε εφαρμογή είναι άλλο θέμα, το οποίο είναι αρκετά πολύπλοκο και ξεφεύγει από το νόημα...Αν μια εφαρμογή έχει γραφτεί υποστηρίζοντας multithreading, στην ουσία πάει να ξεγελάσει την cpu ότι είναι μια άλλη εφαρμογή, οπότε αν η εφαρμογή σπάει τον εαυτό της σε 3 threads, δηλαδή 1α, 1β, 1γ τότε πλέον η cpu μοιράζει τον χρόνο εκτέλεσής της ως εξής... (1α)2(1β)34(1γ)5... οπότε εκεί που στην πρώτη περίπτωση έτρεχε μια φορά μέσα στον κύκλο τώρα τρέχει τρεις, οπότε θεωρητικά τριπλασιάζει την ταχύτητά της... (στην πραγματικότητα όμως, όσα περισσότερα threads τρέχεις δεν πολλαπλασιάζεται ανάλογα η ταχύτητα, αλλά γι' αυτό υπάρχουν άλλες θεωρίες που δεν έχουν τώρα νόημα...)Για να σπάσει μια εφαρμογή τον εαυτό της σε πολλά threads θα πρέπει να έχει γραφτεί ο κώδικάς της να το υποστηρίζει... δεν μπορεί να συμβεί με κανέναν άλλο τρόπο... υπάρχουν ειδικές προγραμματιστικές βιβλιοθήκες και ρουτίνες που το κάνουν αυτό και θα πρέπει η ίδια και μόνο η ίδια εφαρμογή να τις εκμεταλλεύεται και να τις χρησιμοποιεί...2. Το multiprocessing σε αντίθεση με το multithreading, όταν το εκμεταλλεύεται ένα πρόγραμμα, εκτελεί έναν μέρος του κώδικά του σε όσους επεξεργαστές βρίσκει διαθέσιμους (και μάλιστα παράλληλα αυτή την φορά και όχι σειριακά) και αυτό μόνο αν έχουμε γράψει τον κώδικα να το υποστηρίζει αυτό... πχ αν έχει κάποιος 4πύρινο επεξεργαστή και η εφαρμογή υποστηρίζει multiprocessing, αν αυτός που την έχει γράψει, το έχει λάβει υπόψιν του να εκμεταλλεύεται όσες cpu υπάρχουν, τότε μόνο θα δει και τους 4 πυρήνες, διαφορετικά μπορεί να δει μόνο τους 2 ή μόνο τους 3, αν το έχει διαλέξει έτσι ο προγραμματιστής... επομένως πάλι είναι θέμα του κώδικα του προγράμματος και δεν μπορεί να ελεγχθεί εξωτερικά...Και τέλος ένα απλό παράδειγμα είναι μια τηλεόραση με ένα τηλεκοντρόλ... όταν ο κατασκευαστής σου δίνει την τηλεόραση έχει κάποιες λειτουργίες τις οποίες τις διαχειρίζεται το τηλεκοντρόλ... όταν κάποια στιγμή αλλάξεις τηλεκοντρόλ και πάρεις ένα super ουάου, ψηφιακό και με 100 λειτουργίες, η τηλεόρασή σου δεν πρόκειται ποτέ να ανταποκριθεί σε αυτές γιατί απλά δεν τις αναγνωρίζει, γιατί δεν έχει φτιαχτεί έτσι ώστε να τις υποστηρίζει... οπότε αν έχει ο παππούς μια τηλεόραση 40ετίας και αλλάζει κανάλια από τον καναπέ του με το τηλεκοντάρ' δεν μπορεί να αγοράσει τηλεκοντρόλ και η τηλαεόραση να δουλέψει, γιατί απλά όταν φτιάχτηκε δεν είχαν προβλεφθεί καν οι υπέρυθρες... έτσι και τα δυο παραπάνω (multithreading/processing) θα πρέπει να τα υποστηρίζουν τα ίδια τα λογισμικά με τον κώδικά τους...ίσως υπάρχει καλύτερο παράδειγμα, αλλά αυτό μου ρθε... Link to comment Share on other sites More sharing options...
felix Ιανουάριος 11, 2009 #13 Κοινοποίηση Ιανουάριος 11, 2009 Γιάκοπο...έχεις ρέντα στις αναλύσεις τις τελευταίες μέρες...τα σπάς γενικά...τεκμηριωμένες απαντήσεις και άρτια σκέψη...αυτά είναι... Link to comment Share on other sites More sharing options...
Jaco Ιανουάριος 11, 2009 #14 Κοινοποίηση Ιανουάριος 11, 2009 τεκμηριωμένες απαντήσεις και άρτια σκέψη Η αλήθεια είναι, πως είναι η Αφροδίτη στον Δία μου τις τελευταίες μέρες και επειδή η Σελήνη επιτέλους έφυγε από τον Κρόνο μου, μπορώ να χαρώ τον ανάδρομο Ερμή στον αστερισμό μου... Απλά έχω όρεξη για ανάλυση, γιατί ξεκίνησε καλά η χρονιά φέτος σε κάποια άλλα θέματα, δεν είναι τίποτα... θα φροντίσει η καθημερινότητα να μου την ξαναπάρει... Link to comment Share on other sites More sharing options...
JaguarOne Ιανουάριος 11, 2009 #15 Κοινοποίηση Ιανουάριος 11, 2009 στα λεγόμενα του jaco να προσθέσω ότι το multithreading είναι πιο εύκολο από ότι ακούγεται, κάθε σοβαρή γλώσσα που σέβεται τον εαυτό της δίνει κάποιο εργαλείο για να μπορείς να υλοποιείς το μοντέλο αυτό ευκολότερα. Αυτό που είναι δυσκολότερο είναι ο σχεδιασμός ενός προγράμματος που να είναι multithreaded και η κατανομή επεξεργασίας να είναι τετοια στα threads ώστε να χρησιμοποιούνται εξ ισου οι πυρήνες του συστήματος (ώστε να είναι αποδοτικό). Συχνά πυκνά βλέπουμε multi-threaded εφαρμογές που core #1 τρέχει 100%, core #2 τρέχει 50% και τα υπόλοιπα (αν υπάρχουν) τρέχουν κάτι σαν 5%. Είναι απόλυτα λογικό γιατί πριν καν φτάξεις το πρόγραμμα σου πρέπει να έχεις προβλέψει στον σχεδιασμό πόσο βαριές εργασίες θα κάνουν τα thread που ανοίγεις . Αν σε ένα πρόγραμμα που κάνει encoding ας πούμε, ανοίγεις 1 thread για το encoding του βίντεο και μετά ανοίγεις ένα thread για να δείχνεις την ώρα και για να κάνεις +1% στο progress bar λογικό είναι ότι ο πυρήνας που πήρε το encoding thread έχει τεζάρει στο 100% και οι υπόλοιποι πυρήνες πίνουν καφεδάκι. Δυστυχώς, άπαξ και έχει φτιαχτεί ένα πρόγραμμα με κάποιο συγκεκριμμένο flow είναι συνήθως δύσκολο εώς αδύνατο να αλλαχτεί ώστε να κάνει πιο αποδοτικό threading.Η δημιουργία threads είναι στην ουσία ένα abstraction για το λειτουργικό: Άν υπάρχουν πολλοί πυρήνες στο μηχάνημα το λειτουργικό μπορεί να στείλει threads σε άλλο πυρήνα, και συγκεκριμμένα σε όποιον κάθεται (ή έστω σε όποιον είναι φορτωμένος λιγότερο). Να πω επίσης ότι απο windows στην "διαχείριση εργασιών->Προβολή->επιλογή στηλών-> check το 'πλήθος νημάτων'" και πλέον σε κάθε process βλέπετε πόσα threads τρέχουν.Τα multiprocess είναι άλλο φρούτο και έχουν νόημα όταν ένα πρόγραμμα θέλει να κάνει ακριβώς την ίδια δουλειά με πολλά αντικείμενα. Άριστο παράδειγμα είναι ο Google Chrome που για κάθε Tab που ανοίγουμε δημιουργεί νέο process (και το κάθε process μπορεί να έχει πολλαπλά threads). Πρακτικά λοιπόν μπορείς να κάνεις μια Μultithreaded εφαρμογή και multi-process το πρόβλημα όμως είναι ότι 1) αυτό είναι χρήσιμο σε συγκεκριμμένες περιπτώσεις μόνο 2) έχεις θέμα όταν και άμα θες τα 2+ process να είναι συγχρονισμένα!. O google chrome, για το κάθε tab δεν έχει λόγο να είναι συγχρονισμένα οπότε ήταν λογικό να ακολουθήσουν το multi-process μοντέλο (που επιτρέπει αν κολήσει ένα tab, να μην κρεμάει όλη η εφαρμογή). Το μόνο που χρειάστηκε είναι ένα gui module που δίνει την ψευδαίσθηση ότι τρέχεις 1 πρόγραμμα ενώ στην ουσία τρέχεις πολλαπλά instances μιας εφαρμογήςΕδώ πάλι έχουμε abstraction για το λειτουργικό: Άν υπάρχουν πολλοί πυρήνες στο μηχάνημα το λειτουργικό μπορεί να στείλει τα νέα process σε άλλο πυρήνα, και συγκεκριμμένα σε όποιον κάθεται(ή έστω σε όποιον είναι φορτωμένος λιγότερο). Λογικό και επόμενο μετά από ένα σημείο θα καταλήξουν πολλά threads/processes στον ίδιο πυρήνα αλλά επειδή ακριβώς το καθένα εκτελεί διαφορετική εργασία, και το πρόγραμμα περιμένει το αποτέλεσμα του συνόλου, οι πυρήνες (εκτός του πρώτου) ποτέ δεν κάθονται.είναι προφανές λοιπόν ότι δεν γίνεται ένα πρόγραμμα να μεταβάλλει την λειτουργία ενός άλλου προγράμματος... Link to comment Share on other sites More sharing options...
Jaco Ιανουάριος 11, 2009 #16 Κοινοποίηση Ιανουάριος 11, 2009 Τα threads δεν μπορείς να διαλέξεις σε ποιόν πυρήνα θα τρέξουν, τρέχουν στον ίδιο πυρήνα με το parent process, εκτός και αν δεν κατάλαβα την πρώτη παράγραφο... απλά ορισμένες φορές αν τα threads θέλουν μεγάλη επεξεργαστική ισχύ και πιάσουν το 100% της cpu, τότε έναν καινούργιο process που θα τρέξει, θα πάει σε άλλο πυρήνα, από το λειτουργικό, γι' αυτό ο #2 θα είναι στο 50%, από ένα καινούργιο process όχι από καινούργιο thread... Link to comment Share on other sites More sharing options...
JaguarOne Ιανουάριος 12, 2009 #17 Κοινοποίηση Ιανουάριος 12, 2009 ναι δεν μπορεις να διαλέξεις explicitly να πάει κάποιο thread σε κάποιον πυρήνα, αλλά το λειτουργικό αναλαμβάνει την δουλειά αυτή (HAL). Δεν είναι υποχρεωτικό τα threads ενός process να μείνουν σε ένα πυρήνα. Και πάλι είναι δουλειά του λειτουργικού να στείλει ή όχι ένα νέο thread σε άλλο πυρήναΚαινούριο process της εφαρμογής δεν ανοίγει από μόνο του. Αν έχω ένα winrar (single-process application) και ας πουμε ότι είναι single-threaded κιόλας, όσο και να τεζάρει το core στο οποίο είναι ανατεθειμένο δεν θα ανοίξει άλλο process για το winrar. Αυτό που μπορεί να γίνει είναι την στιγμή που τρέχω το winrar, αν τρέξω άλλο προγραμμα, ας πούμε winamp, τότε το process του winamp θα πάει σε άλλο core γιατι το core που βόσκει το winrar είναι ήδη τεζαρισμένο. Αυτό όμως είναι κάτι που κάνει το λειτουργικό.Εν συντομία για να μην μπερδευόμαστε.multi-process: θέλει μερικές φορές*** special programming, την κατανομή των process σε cores την αναλαμβάνει το O/S.multi-threading: θέλει απαραίτητα special programming, την κατανομή των threads σε cores την αναλαμβάνει το O/S***: μπορεί μια εφαρμογή να είναι asynchronous multi-process δηλαδή κάθε instance της εφαρμογής δεν ενδιαφέρεται για τα άλλα instances της εφαρμογής. Παράδειγμα1: winamp, μπορείς να το τρέξεις 2 φορές για να κάνεις τον DJ. Το instance1 δεν το νοιάζει τι κάνει το instance2. παράδειγμα2: orthos, προτείνει να το τρέξεις τόσες φορές όσους πυρήνες έχεις. Ανοίγει νέο process για κάθε φορά που το τρέχεις, και το καθένα process κάθεται σε άλλο core (αν και το orthos συγκεκριμμένα κανει stress 2 πυρήνες οπότε φτάνει να το τρέχεις 1 φορά για κάθε 2 πυρήνες) Link to comment Share on other sites More sharing options...
Jaco Ιανουάριος 12, 2009 #18 Κοινοποίηση Ιανουάριος 12, 2009 Όσων αφορά τα process έτσι όπως τα λέμε και οι δυο είναι, αλλά για τα threads πρέπει να ισχύει ότι τρέχουν στην cpu στην οποία τρέχει το process και αυτό γιατί για κάθε process το σύστημα δημιουργεί ένα sandboxed stack του συστήματος με το id του επεξεργαστή του parent process, στην μνήμη... οπότε αυτό δεν μπορεί να αλλάξει γιατί το thread τρέχει μέσα στο stack αυτό...Άσχετο, αλλά το Multiprocessing μέχρι στιγμής στα windows με τα framework της ms (και στο linux μέχρι την προηγούμενη έκδοση του gcc) γίνεται με την πατέντα των instances, αλλά στην νέα έκδοση του gcc, που ενσωματώθηκε το OpenMP, πλέον μέσα από τον ίδιο τον κώδικα τρέχεις ένα τμήμα του κώδικα (μια function πχ ή όσες γραμμές θες μέσα από μια function) σε ένα αυτόνομο process, χωρίς να προ-υπάρχει ένα instance της ρουτίνας, το οποίο απλά καλείται όσες φορές θέλει ο προγραμματιστής... οπότε τώρα πλεον μιλάμε για ουσιαστικό mp, χωρίς το overhead μνήμης και cpu με φόρτωμα πολλαπλών instances... Link to comment Share on other sites More sharing options...
JaguarOne Ιανουάριος 12, 2009 #19 Κοινοποίηση Ιανουάριος 12, 2009 Όσων αφορά τα process έτσι όπως τα λέμε και οι δυο είναι, αλλά για τα threads πρέπει να ισχύει ότι τρέχουν στην cpu στην οποία τρέχει το process και αυτό γιατί για κάθε process το σύστημα δημιουργεί ένα sandboxed stack του συστήματος με το id του επεξεργαστή του parent process, στην μνήμη... οπότε αυτό δεν μπορεί να αλλάξει γιατί το thread τρέχει μέσα στο stack αυτό...Άσχετο, αλλά το Multiprocessing μέχρι στιγμής στα windows με τα framework της ms (και στο linux μέχρι την προηγούμενη έκδοση του gcc) γίνεται με την πατέντα των instances, αλλά στην νέα έκδοση του gcc, που ενσωματώθηκε το OpenMP, πλέον μέσα από τον ίδιο τον κώδικα τρέχεις ένα τμήμα του κώδικα (μια function πχ ή όσες γραμμές θες μέσα από μια function) σε ένα αυτόνομο process, χωρίς να προ-υπάρχει ένα instance της ρουτίνας, το οποίο απλά καλείται όσες φορές θέλει ο προγραμματιστής... οπότε τώρα πλεον μιλάμε για ουσιαστικό mp, χωρίς το overhead μνήμης και cpu με φόρτωμα πολλαπλών instances...για το πρώτο:από εδώ http://en.wikipedia.org/wiki/Thread_(computer_science) ..."However, perhaps the most interesting application of the technology is when it is applied to a single process to enable parallel execution on a multiprocessor system". Και εδώ είναι που κερδίζει το HT της intel, φαίνεται σαν +1 core στο O/S, και το Ο/S κάνει schedule threads σε άλλους πυρήνες. Και πάλι το λέω και ας γίνομαι κουραστικός, είναι δουλειά του O/Sγια το δεύτερο ναι έτσι είναι. Έχει δουλειά να γίνει ακόμη από πλευράς των λειτουργικών και των API που τα συνοδεύουν.btw, να γινόταν Move το topic στο "Web works, προγραμματισμός, δημιουργικά" που είναι και πιο σχετικό? Link to comment Share on other sites More sharing options...
Jaco Ιανουάριος 12, 2009 #20 Κοινοποίηση Ιανουάριος 12, 2009 Ναι, όντως έτσι το αναφέρει εκεί... Το έχεις δοκιμάσει σε winxp...? Παρόλ' αυτά που λέει στο link, είδα ότι από τον διπύρηνό μου χρησιμοποιούσε μόνο τον ένα επεξεργαστή, ανεξάρτητα από τα threads που έτρεχε... αν έτρεχα άλλο process τότε έβλεπα και τον άλλο επεξεργαστή να δουλεύει... Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.