Suorittimien säikeiden toiminta

Liittynyt
02.04.2017
Viestejä
15
Olen nyt yrittänyt päästä jyvälle että miten nuo suorittimien säikeet toimivat, mutta vielä en ole löytänyt vastausta. Tubessa kaikki aihetta käsittelevät videot ovat olleet lähinnä "jos sulla on kaksytiminen prossu ja niissä kummassakin ytimessä on kaks säiettä, niin hahaa sitten se on niinku neliytiminen prossu!" ja säikeet on kyllä esitetty joka videolla visuaalisesti, mutta se visualisointi on joka videolla ollut erilainen mikä hämmentää vielä enemmän.

Kysymykseni siis on että miten säikeet toimivat teknisesti, miten data liikkuu niissä? Ovatko ne yksisuuntaisia (muusta raudasta vain prossuun päin/prossusta vain ulospäin) vai kaksisuuntaisia?
 
Liittynyt
17.10.2016
Viestejä
22 154
Kysymykseni siis on että miten säikeet toimivat teknisesti, miten data liikkuu niissä?
Tässä pitää ensin ymmärtää prosessorin toiminta. Prosessori hakee käskyn suoritusjonosta (tietokoneen keskusmuistista), ja sitten suorittaa sen. Ennen suoritusta rekistereissä/muistissa on joku joukko arvoja. Suorituksen jälkeen käsky on voinut tehdä jotain noille arvoille. Esim. käsky MOV EAX, ECX vaihtaa siirtää EAX-rekisteriin ECX-rekisterin sisällön. Ennen suorittamista EAX-rekisterissä oli joku arvo ja suorituksen jälkeen EAX=ECX.

Tämä on hyvin yksinkertaistettu kuva prosessorin toiminnasta, jossa unohdetaan cachet, oooe ja muut , ettei sotketa asioita enempää.

HT/SMT toimii niin, että prosessorin rekisterien tilaa pitäviä yksiköitä on monistettu, mutta ei varsinaisia suoritusyksiköitä. Sitten, kun oikean ytimen suoritusjonossa vapautuu paikka, voidaan suorittaa HT-virtuaaliytimen käskyjä. Käskyt kuitenkin suoritetaan oikeassa ytimessä, eikä HT/SMT-ytimessä. Sillä erolla, että ne käsittelevät HT/SMT-ytimen rekistereitä. Sitten tulos on normaalisti niistä luettavissa/kirjoitettu muistiin.

Jo 90-luvulla oli u- ja v- putket , joissa voitiin samaan aikaan suorittaa käskyjä. Otetaan se Pentium nyt esimerkiksi, kun se on yksinkertainen:
1699388379176.png

Tuossa on Pentiumin koko prosessi. Käsky haetaan FETCH/DECODE -yksiköllä, joka oli se Bulldozerin ongelma, mutta ei siitä enempää. Sitten se menee joko FPU:lle tai Integer Unitille, jossa voidaan suorittaa kaksi käskyä yhtä aikaa. Sitten tulos kirjoitetaan rekisteriin (WRITE).

Nykyisissä prosessoreissa voidaan suorittaa paljon enemmän käskyjä yhtä aikaa. Siten HT/SMT pyrkii maksimoimaan sen loogisen ytimen kapasiteettia, kun lähes aina on uusia käskyjä jonossa. Näin prosessorin ytimen sisäinen "moniajo" tulee käytettyä paljon korkeammalla asteella, kuin se olisi ilman HT/SMT.

Kuitenkin, suoritusyksikköjä on vain yksi, niin se vain "käytetään paremmin", eikä niitä ytimiä oikeasti ole lisää.

--

Eli meillä on nakkikioski. Siinä on yksi luukku. Luukulla on myyjä. Myyjä ei kokkaa. Siellä on kolme kokkia.
SMT/HT tapauksessa nakkikioskilla on kaksi luukkua, joissa on oma myyjä. Siellä on edelleen kolme kokkia. Tämän nakkikioskin myynnit ovat suuremmat.

Ovatko ne yksisuuntaisia (muusta raudasta vain prossuun päin/prossusta vain ulospäin) vai kaksisuuntaisia?
Tässä ei nyt ole ymmärretty jotain oikein. Tarkennatko kysymystä?
 
Liittynyt
18.11.2016
Viestejä
3 736
Kaikki ytimet ovat "kaksisuuntaisia". Ei niitä mitenkään tuolla tavalla hahmoiteta, kylläkään. Tuollaisella asialla ei ole mitään oikeaa merkitystä. Prosessori hyvin aktiivisesti lataa ja puskee dataa välimuistien kautta RAM muistin, ja prosessorin sisäisten rekisterien välillä.

Virtuaaliytimet ovat toteuttu eri tavoin niin, että prosessori pystyy suorittamaan enemmän konekielisiä käskyjä ja niiden osia kerralla. Aiemmin osa prosessorin ytimien osista oli kahdennettu, mutta vain osa muutoin olisi kyse kahdesta ytimestä. Mä veikkaan että nykyään systeemit ovat hieman abstraktimmat ja monimutkaisemmat.
 
Liittynyt
02.04.2017
Viestejä
15
Tässä ei nyt ole ymmärretty jotain oikein. Tarkennatko kysymystä?
Tarkoitin sitä että kun yhdellä ytimellä on kaksi säiettä, niin onko toinen säie vain input eli lataa käskyt muistista ja toinen vain output eli joka tallettaa sen tuloksen vai voivatko ne toimia molempiin suuntiin?
 
Liittynyt
17.10.2016
Viestejä
22 154
Tarkoitin sitä että kun yhdellä ytimellä on kaksi säiettä, niin onko toinen säie vain input eli lataa käskyt muistista ja toinen vain output eli joka tallettaa sen tuloksen vai voivatko ne toimia molempiin suuntiin?
Ei. Niillä on oma input ja output molemmilla.
Edelleen, jos on nakkikioski, jossa on kaksi luukkua ja niissä eri myyjät, niin toinen luukku ei palvele toisen luukun asiakkaita. Hodarit tilataan ja haetaan samalta luukulta. Ne tehdään samassa loogisessa ytimessä, mutta jaetaan niiltä luukuilta, josta ne on tilattu.

Tässä hodarin tilaus = se käskyn lukeminen ja hodarin jakelu = käskyn suorituksen tuloksen kirjoitus.

--

Lisäksi oikeassa prosessorissa on välimuisteja ja muuta tässä välissä, mutta ne on jätetty pois yksinkertaisuuden vuoksi. Ja käyttöjärjestelmällä on omat säikeet, joilla moniajoa saadaan tehtyä, vaikka olisi yksiytiminen prosessori.
 
Liittynyt
17.10.2016
Viestejä
12 045
Ei. Niillä on oma input ja output molemmilla.
Edelleen, jos on nakkikioski, jossa on kaksi luukkua ja niissä eri myyjät, niin toinen luukku ei palvele toisen luukun asiakkaita. Hodarit tilataan ja haetaan samalta luukulta. Ne tehdään samassa loogisessa ytimessä, mutta jaetaan niiltä luukuilta, josta ne on tilattu.

Tässä hodarin tilaus = se käskyn lukeminen ja hodarin jakelu = käskyn suorituksen tuloksen kirjoitus.

--

Lisäksi oikeassa prosessorissa on välimuisteja ja muuta tässä välissä, mutta ne on jätetty pois yksinkertaisuuden vuoksi. Ja käyttöjärjestelmällä on omat säikeet, joilla moniajoa saadaan tehtyä, vaikka olisi yksiytiminen prosessori.
Joo, pitää varmaan tähdentää sitä, että ohjelmistopuolen säikeet ja prosessorin säikeet ovat täysin eri asioita, vaikka termi säie / thread on sama.

Se prosessorin "thread" on tosiaan vain nakkikiskan luukku ja sitten se ohjelmistopuolen "säie" on ikäänkuin asiakasjono siellä nakkikiskan edessä. Jotkut asiakasjonot ovat enemmän tai vähemmän keskenään tekemisissä (witcher.exe käynnistänee tilanteesta riippuen paljonkin säikeitä), mutta ne witcher.exe:n säikeet eivät ole missään tekemisissä chrome.exe:n säikeiden kanssa ja käyttöjärjestelmä huolehtii siitä, että ne eivät voi käpistellä toisensa muistialueita / tietoja.

Kun katsotaan windowssin task-managerista niitä pyöriviä prosesseja ja niiden säikeitä, niin huomataan että modernissa tietokoneessa ollaan tilanteessa jossa nakkikiskan edessä on kymmeniä asiakasjonoja ja niiden pääsyä sinne kiskan luukuille säätelee käyttöjärjestelmän scheduler-prosessi, joka päättää sitten omien sääntöjensä mukaan, että mistä asiakasjonosta päästetään ekana asiakkaita millekin kiskan luukulle.

Osa jonoista on melkein kokoajan tyhjiä - se taustalla pyörivät Outlook.exe ei pääsääntöisesti tee yhtään mitään ja siellä ei ole juuri mitään käskyjä koskaan jonossa, mutta vastaavasti joku witcher.exe työntää sinne jonoihin raivoisalla tahdilla suoritettavia käskyjä.
 
Toggle Sidebar

Statistiikka

Viestiketjut
241 193
Viestejä
4 215 441
Jäsenet
71 014
Uusin jäsen
Murtz

Hinta.fi

Ylös Bottom