What's new

Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

Νήματα ανά πυρήνα

Tom G

Mind-flayer
Joined
Nov 30, 2012
Messages
1,736
Θέλω μια βοήθεια για να κατανοήσω τι είναι ακριβώς το νήμα ανά πυρήνα. Τι έχω καταλάβει μέχρι στιγμής:

Το νήμα είναι ένα σετ εντολών που επεξεργάζεται. Με το hyperthreading το λογισμικό βλέπει 2 πυρήνες με έναν φυσικό πυρήνα οπότε μπορεί εκτελέσει 2 σετ εντολών ταυτοχρόνως άρα είναι 2 threads per core. Κάνω κάπου λάθος;
 

nitro912gr

Ancient Red Dragon
Approval of the Admiral PCMaster Veteran Klika Member
Joined
Nov 26, 2012
Messages
14,280
Από ότι έχω καταλάβει εγώ, πρακτικά το νήμα όταν λέμε για επεξεργαστές, είναι απλά το idle μέρος ενός πυρήνα, δεν είναι κάποιο σετ εντολών ξεχωριστό.

Έχεις έναν 2πύρηνο i3, με 2 νήματα ανά πυρήνα.

Δουλεύεις firefox που παίζει youtube, τσιμπάει έναν πυρήνα, ανοίγεις την ίδια στιγμή το winamp να παίζει μουσική και τσιμπάει τον δεύτερο πυρήνα.
Ανοίγεις τώρα και το gimp και αρχίζεις να επεξεργάζεσαι κάτι φώτο, αλλά δεν έχεις άλλον πυρήνα, αλλά οι 2 πιασμένοι πυρήνες δουλεύουν ένα 15-20% ο κάθε ένας, οπότε το 60% του επεξεργαστή είναι πρακτικά ελεύθερο.

Οπότε ο controller του επεξεργαστή αναλαμβάνει να μοιράσει τα ελεύθερα resources σε 2 εικονικούς ακόμα πυρήνες για να τον αξιοποιήσει καλύτερα.
Πρακτικά δηλαδή αν έχεις έναν επεξεργαστή χωρίς HT, ο κάθε πυρήνας πρέπει να ξεμπερδέψει τις εντολές που τρέχει για το πρόγραμμα Α, πριν πιάσει το πρόγραμμα Β, ενώ όταν έχει ΗΤ τρέχει και τα 2 προγράμματα την ίδια στιγμή.

Με ένα απλό παράδειγμα, έχεις τα 2 χέρια σου και κάνεις μια δουλειά, χωρίς ΗΤ και τα 2 χέρια σου πλένουν τα πιάτα και μόλις τα πλύνεις όλα ξεκινάς με τα 2 χέρια σου το σκούπισμα τους.
Όταν έχεις ΗΤ, το ένα χέρι σου πλένει τα πιάτα και το άλλο τα σκουπίζει.

Φυσικά αυτό δεν είναι πάντα αποδοτικό, οπότε αρκετές εφαρμογές δεν βλέπουν καμία βελτίωση από το ΗΤ.

Αυτό έχω καταλάβει εγώ, μπορεί να κάνω λάθος.
 

grmadness

Death Knight
Approval of the Admiral
Joined
Apr 3, 2013
Messages
4,952
Στο γενικό πλαίσιο ισχύει ότι είπε ο Νίτρο.

Το βασικό μπέρδεμα είναι με τον Task Manager, που βλέπεις διπλάσιους πυρήνες, με την αντιστοιχία 1 φυσικός=2 λογικοί πυρήνες. Αλλά δεν είναι ακριβώς έτσι.

Σε τυπική χρήση, δηλαδή τσόντα στο internet, εφαρμογές γραφείου, κλπκλπ, δεν υπάρχει διαφορά. Και τα πιο πολλά προγράμματα αποκλείεται να αποτελούν πρόβλημα για τους σημερινούς επεξεργαστές, παραείναι γρήγοροι. Ακόμα και ο κώδικας τους παίζει ρόλο. Έχεις έναν ικανό επεξεργαστή, οκ, αλλά αν έχεις 5-6 διαφορετικά προγράμματα "ελαφριά" να τρέχουν ταυτόχρονα, θα παρατηρήσεις πως ο φόρτος δεν κατανέμεται εξίσου σε όλους τους πυρήνες.

Εκεί που θα δείς διαφορά είναι σε εφαρμογές 3D rendering, video/audio encoding/transcription, επεξεργασία εικόνας, παιχνίδια (ξέρεις, minecraft, Candy Crush, κλπκλπ <img src="/tongue.gif" width="" height="" alt=":p" title=":p" class="bbcode_smiley" /> )

Αυτό που πραγματικά κάνει το HT είναι να ξεμπουκώνει τον φόρτο, ότι είπε ήδη ο Νίτρο δηλαδή, με δικές μου σάλτσες. Καλύτερη διαχείρηση των εντολών, τίποτα περισσότερο. My 2 cents.

Aς γίνω λίγο πιο σαφής. Ο βασικός περιορισμός ενός επεξεργαστή ποιός είναι; Ο κάθε πυρήνας τρέχει μια διεργασία μόνο. Με το hyperthreading αυτό που συμβαίνει είναι να τρέξει περισσότερες εντολές για αυτή την διεργασία-πρόγραμμα στον ίδιο κύκλο ρολογιού. <img src="/smile.gif" width="" height="" alt=":)" title=":)" class="bbcode_smiley" />
 

zombiecow

Blackguard
Joined
Nov 26, 2013
Messages
1,358
Εβλεπα τις περιπλοκες (και ακριβεις) απαντησεις σας και ηθελα να γραψω αυτο:

"Ο κάθε πυρήνας τρέχει μια διεργασία μόνο. Με το hyperthreading αυτό που συμβαίνει είναι να τρέξει περισσότερες εντολές για αυτή την διεργασία-πρόγραμμα στον ίδιο κύκλο ρολογιού."

Για να ειναι πιο ευπεπτο αλλα με προλαβε ο Φραπες <img src="/tongue.gif" width="" height="" alt=":p" title=":p" class="bbcode_smiley" />
 

grmadness

Death Knight
Approval of the Admiral
Joined
Apr 3, 2013
Messages
4,952
:rofl: :rofl: :rofl:

Θεούλης. Και που να δείς τι ήθελε να γράψει το καλαμάκι μου.
Περί Intel και πόσο λάθος ήταν το timing του HT την πρώτη φορά με τους P4 (Northwood), και πήγε άπατο επειδή είχαν στο μυαλό τους τα 10GHz και το Netburst, μόνο και μόνο για να αξιοποιηθεί από τους Nehalem και έπειτα, αλλά θα φύγει off topic το νήμα και δεν λέει. <img src="/smile.gif" width="" height="" alt=":)" title=":)" class="bbcode_smiley" />
 

kuivamaa

Death Knight
Staff member
Joined
Nov 26, 2012
Messages
3,207
Η κεντρική ιδέα πίσω από το ΗΤ είναι η εκμετάλλευση πόρων του πυρήνα που δεν χρησιμοποιούνται από το ένα νήμα. Η intel έχει απλή υλοποίηση (2 νηματα ανα πυρήνα) ενώ η ΙΒΜ για παράδειγμα το είχε τεντώσει το θέμα οσο δεν πάει

http://www.itjungle.com/tfh/tfh060214-story01.html

8 νήματα ανα πυρήνα ειναι καλά; <img src="/tongue.gif" width="" height="" alt=":p" title=":p" class="bbcode_smiley" />

Ο πυρήνας έχει διάφορα υποσυστήματα λογικής τα οποία εκτελούν συγκεκριμένες λειτουργίες (υπολογισμούς ακεραίων, το integer κομμάτι δλδ ή κινητής υποδιαστολής, δλδ FPU) κλπ. Η ιντελ με τους haswell ουσιαστικά έδωσε ώθηση στο HT της προσθέτοντας λογική στο integer κομμάτι του πυρήνα (ενα εξτρα ALU) που κανονικά δεν θα γινόταν εκμεταλλεύσιμη από ενα και μόνο νήμα .Γι'αυτό σε φουλ φορτίο ενας υπερνηματικός μεγάλος πυρήνας haswell χοντρικά ισούται με δύο Piledriver πυρήνες ,γιατί έχει μόνος του όσες εκτελεστικές μονάδες έχουν οι άλλοι δύο μικροί πυρήνες μαζί. Ο i7 4770κ και ο FX 8350 για παράδειγμα είναι σχεδόν ισα βάρκα ισα πανια στο POV Ray που φορτώνει όλα τα νήματα κάργα και είναι ουδέτερο τεστ (δεν πριμοδοτεί την ιντελ και σαμποτάρει την AMD οπως το cinebench δλδ) ενώ ο i5 4690k μένει πιο πισω γιατί ναι μεν εχει όλες τις εκτελεστικές μονάδες του i7 αλλά όχι HT και έτσι δεν μπορεί να τις εκμεταλλευτεί.

http://www.anandtech.com/show/6355/intels-haswell-architecture/8
 

rikimaru

Umber Hulk
Joined
Jan 24, 2014
Messages
959
<blockquote>Aς γίνω λίγο πιο σαφής. Ο βασικός περιορισμός ενός επεξεργαστή ποιός είναι; Ο κάθε πυρήνας τρέχει μια διεργασία μόνο. Με το hyperthreading αυτό που συμβαίνει είναι να τρέξει περισσότερες εντολές για αυτή την διεργασία-πρόγραμμα στον ίδιο κύκλο ρολογιού. <img src="/smile.gif" width="" height="" alt=":)" title=":)" class="bbcode_smiley" /></blockquote>

objection
Ο επεξεργαστής από μόνος κοιτάει να αξιοποιήσει το ILP (instruction level parallelism) που υπάρχει στο κάθε thread. Το θέμα είναι ότι επειδή ο κόσμος δεν είναι ιδανικός και ο κώδικας που του έρχεται δεν είναι πάντα παραλληλοποιήσιμος, ο αρχιτέκτονας πρέπει να βρει τρόπο να αξιοποιεί με τον καλύτερο τρόπο το υλικό που έχει.
Όταν μιλάμε για multithreading στην ουσία μιλάμε για ένα πυρήνα ο οποίος έχει κάποιες εξτρα μονάδες οι οποίες του επιτρέπουν να διαχειριστεί διαφορετικά blocks εντολών. Για να το κάνει αυτό θεωρητικά τουλάχιστον υπάρχουν διάφοροι τρόποι, στην πράξη τουλάχιστον όμως νομίζω ότι οι intel είναι 2 way SMT που σημαίνει ότι μπορούν να παίζουν μπάλα ταυτόχρονα με 2 διαφορετικά streams. Που ακόμα και χωρίς αυτό πάλι μάλλον σωστό είναι να πούμε ότι τρέχουν ταυτόχρονα στα πλαίσια του pipeline.
Τέλος, με κίνδυνο να κάνω λάθος με τις ορολογίες, αυτό που είπε ο φραπές μπορεί να ισχύει αλλά θα είναι κάτι το οποίο έχει δηλωθεί ρητά από τον προγραμματιστή. Δηλαδή άμα εγώ έχω γράψει ένα σειριακό κώδικα που τρέχει κάποια πράγματα με μία ορισμένη σειρά το Ht δεν θα μου αλλάξει την επίδοση (θεωρητικά πάντα για απομονωμένη εκτέλεση, γιατί στην πράξη ανάλογα μπορεί να υπάρξει εως και επιβράδυνση). Αν όμως εγώ τον κώδικα μου τον έχω βάλει να ψήνει καφέ και σε κάποιο σημείο του έσψ δηλώσει ρητά να αρχίσει να κυνηγάει κουνέλια τότε αυτά τα 2 θα μπορούν να τρέξουν και παράλληλα. Γενικά μπορεί να υπάρξει μία σύγχυση ως προς το τι είναι πρόγραμμα και τι διεργασία.

<blockquote>Περί Intel και πόσο λάθος ήταν το timing του HT την πρώτη φορά με τους P4 (Northwood), και πήγε άπατο επειδή είχαν στο μυαλό τους τα 10GHz και το Netburst, μόνο και μόνο για να αξιοποιηθεί από τους Nehalem και έπειτα, αλλά θα φύγει off topic το νήμα και δεν λέει.</blockquote>

Χωρίς να έχω ιδιαίτερη επαφή με τα της αγοράς, σε ερευνητικό επίπεδο τουλάχιστον νομίζω είχε αρχίσει ήδη να διαφαίνεται από τότε ότι κάπου θα έσκαγε το θέμα με τα ρολόγια. Το πρόβλημα με τους συγκεκριμένους έχω την εντύπωση ότι ήταν πως τη δεδομένη στιγμή δεν μπορούσαν να φτιάξουν υλοποίηση που οι κοινοί πόροι των threads να μπορούν να μοιράζονται δυναμικά (εντελώς χοντρικά αυτό)
 
Top Bottom