Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

εγώ πάντως εχω πρόβλημα σε παλιά παιχνίδια που βλέπουν 1core.

 

ειδικά στο command end conquer generals & timberium wars που βλέπουν ένα core, όταν βάζω μεγάλες πιστεσ με πολλές ομάδες σέρνεται το σύμπαν !

 

κ βλέπω τον 8350 που εχω να έχει έναν πυρήνα στο 100% και οι άλλοι να κάθονται κ να το ξύνουν !

κ προσπαθώ να βρω πωσ θα κάνω τέτοια παιχνίδια να δουλεύουν τουλάχιστον με 2 πυρήνες !

δοκίμασε το μια να μας πεις τα συμπεράσματα σου.

είναι καλό να ακουστούν και άλλες προσωπικές εμπειρίες πέρα απ τις δικές μου.

  • Like 1
Δημοσ.

Δεν διαφωνώ,ο scheduler θα ορίσει που θα τρέξει τελικά,απλά κάθε νήμα έχει και την προτίμησή του,που όπως λέω μπορεί να είναι και για όλα τα νήματα το 0,από εκεί και πέρα ο scheduler μπορεί να τους βάλει σε άλλους πυρήνες.

 

Αν βάλει όλα τα νήματα ενός παιχνιδιού στο 0 για να κοιμούνται οι υπόλοιποι, εσύ με το afinity του λες να τα τρέξει σε διαφορετικούς πυρήνες και έτσι έχεις καλύτερη ταχύτητα.

Δεν ισχύει αυτό. Την "προτίμηση" του κάθε νήματος την καθορίζει ο scheduler, το ίδιο το νήμα δεν έχει τέτοια δυνατότητα.

 

Το affinity καθορίζει που επιτρέπεται να τρέξει το κάθε νήμα, όχι που προτιμάει. Δες το documenation της SetProcessAffinityMask:

 

A process affinity mask is a bit vector in which each bit represents a logical processor on which the threads of the process are allowed to run.

 

Νομίζω από τα παραπάνω ότι έχεις λάθος ιδέα στο μυαλό σου για το τι κάνει το processor affinity. Για παράδειγμα θα δεις αν ψάξεις ότι βάζοντας το affinity σε ένα μόνο processor αναγκάζεις το όποιο πρόγραμμα να τρέξει μόνο σ' αυτόν. Μπορείς να το δοκιμάσεις και μόνος σου για να δεις τα αποτελέσματα.

 

Το θέμα είναι ότι ο scheduler μπορεί να βάλει το κεντρικό νήμα ενός παιχνιδιού να τρέχει στο core 0 που τρέχει ήδη αρκετά άλλα πράγματα.

 

Δεδομένου ότι ένας core μπορεί να τρέχει μόνο ένα πράγμα κάθε στιγμή, μέσες άκρες (αφήνοντας απέξω L1 cache και ψιλά γράμματα) το τι άλλο τρέχει ή δεν τρέχει στον core 0 όταν δεν τρέχει το πρόγραμμά μας, τι σημασία έχει; Σημασία έχει το πρόγραμμά μας να τρέχει κάθε φορά που αυτό είναι δυνατό. Το σε ποιόν core και τι άλλο κάνει αυτός ο core στα διαλείμματα είναι αδιάφορο.

  • Like 2
Δημοσ.

Δεν ισχύει αυτό. Την "προτίμηση" του κάθε νήματος την καθορίζει ο scheduler, το ίδιο το νήμα δεν έχει τέτοια δυνατότητα.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684251(v=vs.85).aspx

Thread Ideal Processor

When you specify a thread ideal processor, the scheduler runs the thread on the specified processor when possible. Use the SetThreadIdealProcessor function to specify a preferred processor for a thread. This does not guarantee that the ideal processor will be chosen but provides a useful hint to the scheduler. On systems with more than 64 processors, you can use the SetThreadIdealProcessorEx function to specify a preferred processor in a specific processor group.

 

 

Δεδομένου ότι ένας core μπορεί να τρέχει μόνο ένα πράγμα κάθε στιγμή, μέσες άκρες (αφήνοντας απέξω L1 cache και ψιλά γράμματα) το τι άλλο τρέχει ή δεν τρέχει στον core 0 όταν δεν τρέχει το πρόγραμμά μας, τι σημασία έχει; Σημασία έχει το πρόγραμμά μας να τρέχει κάθε φορά που αυτό είναι δυνατό. Το σε ποιόν core και τι άλλο κάνει αυτός ο core στα διαλείμματα είναι αδιάφορο.

Εδώ μιλάνε για πολύ παλιά παιχνίδια που είναι γραμμένα μονοκόμματα δεν έχει περίμενε και δεν έχει διαλύματα δεν έχει «όταν δεν τρέχει» αν πρέπει να τρέξει κάτι άλλο στον ίδιο πυρήνα πρέπει να διακόψει ο scheduler την εκτέλεση του παιχνιδιού για να το τρέξει.

Δημοσ.

Όταν έχουμε ένα παλιό παιχνίδι που έχει μόνο ένα tread που έχει το core0 σαν affinity

 

A process affinity mask is a bit vector in which each bit represents a logical processor on which the threads of the process are allowed to run.

οπότε μπορεί να θα τρέξει μόνο εκεί εκτός και αν δεν είναι δυνατόν κάτι τέτοιο

 

the scheduler runs the thread on the specified processor when possible

άρα και φορτωμένος να είναι ο core0 εκεί θα το τρέξει αφού μπορεί και δεν είναι αδύνατον.

 

Αν του αλλάξεις afinity θα μπορεί ο scheduler να το βάλει σε άλλον πυρήνα το ένα και μοναδικό thread(ή και τα 2-3 thread) για να μην χρειάζεται να το διακόπτει όταν θα πρέπει να τρέχει τα υπόλοιπα που τρέχουν στο core0.

Εγώ αυτήν την σχέση βλέπω.

Δημοσ.

Όταν έχουμε ένα παλιό παιχνίδι που έχει μόνο ένα tread που έχει το core0 σαν affinity

 

Μα αυτό δεν το είπαμε νωρίτερα (εκεί που λέω δε στέκει λογικά)?

 

Αν το default affinity ήταν μόνο στον core0 τότε οι multicore CPU μας θα ήταν άχρηστες για το 99.999% του συνόλου των χρηστών που δεν ξέρουν από affinity. Προφανώς και το default affinity είναι "all processors"  εκτός αν το αλλάξεις εσκεμμένα. Θυμάμαι μάλιστα ότι υπήρξαν περιπτώσεις παλιών games που δεν έτρεχαν σωστά με το default για κάποιο λόγο και έπρεπε να πας να περιορίσεις το affinity προκειμένου να μην κρασάρουν (κάποιο Thief? δεν είμαι σίγουρος).

 

Επομένως δε χρειάζεται ο processor να διακόψει εσένα που τρέχεις στον 0 γιατί μπορεί πολύ απλά να βάλει το άλλο τάδε πρόγραμμα να τρέξει αλλού.

  • Like 3
Δημοσ.

Όταν έχουμε ένα παλιό παιχνίδι που έχει μόνο ένα tread που έχει το core0 σαν affinity

οπότε μπορεί να θα τρέξει μόνο εκεί εκτός και αν δεν είναι δυνατόν κάτι τέτοιο

άρα και φορτωμένος να είναι ο core0 εκεί θα το τρέξει αφού μπορεί και δεν είναι αδύνατον.

 

Αν του αλλάξεις afinity θα μπορεί ο scheduler να το βάλει σε άλλον πυρήνα το ένα και μοναδικό thread(ή και τα 2-3 thread) για να μην χρειάζεται να το διακόπτει όταν θα πρέπει να τρέχει τα υπόλοιπα που τρέχουν στο core0.

Εγώ αυτήν την σχέση βλέπω.

Ότι process να πας να δεις στον task manager έχει affinity all processors..

  • Like 2
Δημοσ.

Μα αυτό δεν το είπαμε νωρίτερα (εκεί που λέω δε στέκει λογικά)?

 

Αν το default affinity ήταν μόνο στον core0 τότε οι multicore CPU μας θα ήταν άχρηστες για το 99.999% του συνόλου των χρηστών που δεν ξέρουν από affinity. Προφανώς και το default affinity είναι "all processors"  εκτός αν το αλλάξεις εσκεμμένα. Θυμάμαι μάλιστα ότι υπήρξαν περιπτώσεις παλιών games που δεν έτρεχαν σωστά με το default για κάποιο λόγο και έπρεπε να πας να περιορίσεις το affinity προκειμένου να μην κρασάρουν (κάποιο Thief? δεν είμαι σίγουρος).

 

Επομένως δε χρειάζεται ο processor να διακόψει εσένα που τρέχεις στον 0 γιατί μπορεί πολύ απλά να βάλει το άλλο τάδε πρόγραμμα να τρέξει αλλού.

Μα εδώ ο αληθινός μας μιλάει για το 0,001% των περιπτώσεων που ο προγραμματιστής ακόμα και αν έχει πολλά Thread το παιχνίδι έχει βάλει σε όλα(αμελήσει να το αλλάξει) ideal processor 0 ,ο scheduler θα μπορούσε να στείλει άλλα thread σε άλλους πυρήνες αν έβλεπε τον λόγο,το «the scheduler runs the thread on the specified processor when possible» δεν σημαίνει αυτό το πράγμα;; Μόνο όταν γεμίσει ο πυρήνας θα αρχίσει να στέλνει νήματα αλλού,ακόμα και να έχει 8 νήματα και 8 πυρήνες αν σε όλα έχει ideal processor 0 μπορεί να τρέξει 2 νήματα σε κάθε πυρήνα απλά και μόνο επειδή δεν υπάρχει κάτι που το κάνει αδύνατον να γίνει.

Εκτός και αν το when possible έχει διαφορετική έννοια για τους προγραμματιστές.

Ότι process να πας να δεις στον task manager έχει affinity all processors..

process explorer ,βρίσκεις το εκτελέσιμο του παιχνιδιού και κάνεις διπλό κλικ πάνω του,πας στην καρτέλα threads και εκεί μπορείς να δεις πρώτων πόσα νήματα έχει το παιχνίδι και σε πόσο % του συνόλου του επεξεργαστή τρέχει το κάθε ένα,αλλά μπορούμε να δούμε και το ideal processor που λέει στο σύστημα σε ποιον πυρήνα θέλει να τρέχει το κάθε νήμα του,μπορεί σε όλα να έχει 0 ,πρώτος πυρήνας, οπότε εσύ με το afinity τα μοιράζεις σε όλους.

Αυτή η λίστα είναι τα process πρέπει να πας στην καρτέλα για να δεις ποια threads τρέχει το κάθε process,δεν είναι το ίδιο πράγμα.
Δημοσ.

 

Μα εδώ ο αληθινός μας μιλάει για το 0,001% των περιπτώσεων που ο προγραμματιστής ακόμα και αν έχει πολλά Thread το παιχνίδι έχει βάλει σε όλα(αμελήσει να το αλλάξει) ideal processor 0 ,ο scheduler θα μπορούσε να στείλει άλλα thread σε άλλους πυρήνες αν έβλεπε τον λόγο,το «the scheduler runs the thread on the specified processor when possible» δεν σημαίνει αυτό το πράγμα;; Μόνο όταν γεμίσει ο πυρήνας θα αρχίσει να στέλνει νήματα αλλού,ακόμα και να έχει 8 νήματα και 8 πυρήνες αν σε όλα έχει ideal processor 0 μπορεί να τρέξει 2 νήματα σε κάθε πυρήνα απλά και μόνο επειδή δεν υπάρχει κάτι που το κάνει αδύνατον να γίνει.

Εκτός και αν το when possible έχει διαφορετική έννοια για τους προγραμματιστές.

 

Το topic μιλάει για αλλαγή του processor affinity. Εδώ μιλάς για ideal processor. Τι σχέση έχει το ένα με το άλλο;

 

Επίσης και πάλι θα πω ότι δεν έχει καμία λογική το να "δημιουργεί πρόβλημα" η default τιμή του ideal processor σε συνδυασμό με το τι σημαίνει αυτή η ρύθμιση. Είναι τελείως παράλογο να υποθέσουμε ότι by default ένα λειτουργικό σαν τα Windows έχει θέμα με το να μοιράσει N threads σε M cores.

 

Anyway νομίζω δε χρειάζεται να το κουράσουμε άλλο το θέμα.

  • Like 1
Δημοσ.

Δοκιμασμενο πολλες φορες αλλοτε ισχυει και αλλοτε οχι τοσο πολυ και για το unparking ισχυει ενα registry setting.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...