Eikö käyttöjärjestelmät tosiaan osaa ohjata näitä säikeitä sellaisille ytimille, joilla on vähiten kuormaa? Mikä pakko se on tunkea kaikkein kuormitetuimmalle ytimelle jos muut ytimet ns. pyörittelevät peukaloitaan?
Olet nyt ilmeisesti tajunnut jotain väärin. Ei siellä ole mitään "peukaloita pyöritteleviä" ytimiä silloin kun ne säikeet on valmiina suoritukseen. ja silloin kun siellä pyöritellään peukaloita, ne
kaikki pyörittelee peukaloita pääosin yhtä aikaa. Säie haluaa suoriutua maksiminopeudella tai ollenkaan, ei "kevyt" säie millään ajanhetkellä kuluta suoritinydintä "osittain" vaan se käyttää sitä CPUta täysillä hetken ja sitten idlaa.
Väännetään rautalangasta esimerkki:
Pelissä aloitetaan 16.66 ms (60 fps) välein uuden framen laskenta. Ajoon tule
yhtä aikaa 5 säiettä.
4 säikeistä laskee vähemmän ja valmistuu n. 8 ms jälkeen. Tämän jälkeen näitä säikeitä ajaneet ytimet pyörittelevät peukaloitaan.
Viimeinen säie laskee enemmän ja valmistuu n. 16ms jälkeen. viimeiset 0.66ms odotellaan vsyncciä.
Mikäli meillä on käytössä vain 4 fyysistä ydintä ja SMT, näistä viidestä säikeestä 2 menee samalle fyysiselle ytimelle, ja molemmat näistä säikeistä hidastuvat, esim. siten että hommaan menee molemmilta 13ms.
Mikäli sattuu käymään niin, että kaksi näistä 8ms CPU aikaa tarvitsevista "kevyemmistä" säikeista sattuu samalle ytimelle, ei mitään ongelmaa, niillä molemmilla kestää n. 13ms hommaansa, ja niille jää edelleen 3 ms aikaa idalta
Mutta mikäli sattuu käymään niin, että sen 16ms CPU-aikaa tarvitsevan säikeen kanssa sattuu päällekkäin samalle ytimelle yksi näistä toisista säikeistä, menee sen ensimmäisen puolikkaan suorittamiseen n. 13ms ja toiseen sama 8ms kuin normaalistikin, eli kokonaisuudessaan 21ms.
Ja muut säikeet odottelee sen 13ms ennen kuin frame on valmis ja ne pääsevät laskemaan seuraavaa framea.
Ja useat skedulerit vieläpä pyrkivät nimenomaan "reiluuteen" eli antamaan eri säikeille
yhtä paljon CPU-aikaa. Jos monta säiettä tappelee siitä, kuka pääsee ajoon, valitaan se, joka on tähän mennessä kuluttanut
vähiten cpu-aikaa.
Ja tosiaan, osa peleistä laukoo niin monta säiettä, kuin mitä koneesta löytyy virtuaaliytimiä. Jos virtuaaliytimiä on vähän (SMT pois päältä) noita kevyempiä aputaskeja suoritetaan peräkkäin samassa säikeessä (vähemmän yhtäaikaisia säikeitä), mutta jos virtuaaliytimiä on paljon, on enemmän taskeja yhtä aikaa ajossa omissa säikeissään.