Kysymys:
Miksi tietokoneilla on vain muutama tuhat ohjetta, kun heillä voi olla miljoonia?
Trevor Mershon
2020-03-13 19:15:59 UTC
view on stackexchange narkive permalink

Useimmissa tietokoneissa on vain parituhatta käskyä, mutta bittileveys (yleensä 64-bittinen) antaa tietokoneille teknisen pääsyn miljooniin tai jopa miljardeihin ohjeisiin.Jotkut voivat olla erittäin hyödyllisiä, kuten DIVIDE, EXPONENT tai ehdolliset toiminnot.Lisäksi kellonopeudet hiontuvat pysähtymään, ja kvanttilaskenta on kaukana.Miksi he eivät ole vielä lisänneet lisäohjeita mikroprosessoreille?

Kommentteja ei käytetä laajempaan keskusteluun;tämä keskustelu on siirretty chattiin] (https://chat.stackexchange.com/rooms/108571/discussion-on-question-by-trevor-mershon-why-do-computers-have-only-a-few-tuha).
Kuusi vastused:
Simon B
2020-03-13 21:03:37 UTC
view on stackexchange narkive permalink

Koska jokainen käsky tarvitsee piirejä sen toteuttamiseksi.Mitä enemmän ohjeita lisäät, sitä suurempi prosessori saa.Koska suurinta osaa näistä toiminnoista ei koskaan käytetä, se on vain hukkaan menevää monimutkaisuutta.

Kaikki monimutkaisuudet voivat jopa hidastaa prosessoria.RISC-prosessorit, kuten ARM, perustuivat ajatukseen heittää pois suuri määrä toimintoja ja tehdä tuloksena olevasta pienemmästä prosessorisydämestä mahdollisimman nopea.

Jopa nykyaikaisilla X86-prosessoreilla, joissa on valtava käskyjoukko, on päätynyt piilossa nopeampi prosessori, joka jäljittelee valtavaa monimutkaista.

Lisäksi mitä enemmän haluat tehdä suorittimestasi fiksu (ja siten, kuten sanot, isompi piirissä), sitä helpompaa on luoda puutteita ja ehkä tietoturvaloukkauksia.Katso Spectre and Meltdown ja mainitse kaksi.
Monet Intel-suorittimet alittavat muutaman sadan MHz: n käyttäessään AVX2- tai AVX512-ohjeita.
Eduardo1992
2020-03-13 21:49:58 UTC
view on stackexchange narkive permalink

Simon B: n vastauksen lisäksi GPU: t tekevät toisaalta paljon monimutkaisia laskelmia.Mutta ne voidaan keittää moninkertaistamaan-lisäämällä käskyjä, A = B * C + D. Joten he ainakin yrittävät saada monimutkaisia kertolasku-ohjeita, koska ne ovat yleisiä ohjeita.

Yhteenvetona.Jos lisäät ohjeita, suorittimesta tulee:

  1. monimutkaisempi, ts. suurempi suoritin ja vaikeampi käyttää tehokkaasti
  2. hitaammin.Nopeus, jonka voit käyttää, riippuu hitaimmasta yksiköstä
  3. kalliimpaa.Onko tämä mitä asiakkaasi haluaa?

Lue myös "risc vs cisc -arkkitehtuureista"

user1850479
2020-03-14 00:38:10 UTC
view on stackexchange narkive permalink

Useimmissa tietokoneissa on vain parituhatta käskyä, mutta bittileveys (yleensä 64-bittinen) antaa tietokoneille teknisen pääsyn miljooniin tai jopa miljardeihin ohjeisiin.

Ensinnäkin, selvennetään, että 64-bittinen oleminen ei tarkoita mitään ohjeita. Suurin osa 64-bittisistä järjestelmistä käyttää 32-bittisiä käskyjä, lukuun ottamatta x86: ta, jossa ohjeet voivat olla missä tahansa alle 32 bitistä useaan sataan bittiin.

Miksi ohjeiden lukumäärä on rajallinen, järjestelmissä, jotka käyttävät 32-bittisiä käskyjä (mikä on erittäin tehokas luku), koodattavien mahdollisten ohjeiden määrä on jonkin verran rajoitettu, koska haluat mieluiten saada vähintään 3 rekisteriä ainakin joillekin opkodeille. Jopa x86: lla, jossa käskyjen pituus voi olla mielivaltainen, on kuitenkin muutama tuhat yksilöllistä käskyä (joita kaikkia ei välttämättä vielä käytetä), koska käskyllä ​​ei ole niin paljon hyödyllisiä asioita. Paljon turhien ohjeiden koodaaminen (kuten x86 tekee) ei välttämättä vahingoita sinua, mutta se ei myöskään auta.

Miksi he eivät ole vielä lisänneet lisäohjeita mikroprosessoreille?

Intel ja ARM lisäävät säännöllisesti uusia ohjeita. Intelille on keskitytty Haswell New Instructions, Broadwell New Instructions, Skylake New Instructions, Palm Cove (Cannonlake) New Instructions ja viime vuoden Sunny Cove (Icelandake) uudet ohjeet.

Suurin osa hyödyllisistä ohjeista on lisätty kauan sitten, joten niillä on yleensä keskimäärin marginaalivaikutus, mutta on olemassa erityisiä sovelluksia, joissa niillä voi olla suuri ero.

Bruce Abbott
2020-03-14 03:51:17 UTC
view on stackexchange narkive permalink

Useimmissa tietokoneissa on vain parituhatta ohjetta,

Se riippuu siitä, kuinka lasket ne. Pitäisikö kaikki ohjeet, joilla on samanlainen toiminto, ryhmitellä yhteen tai laskea eri muunnelmat erikseen? Vai pitäisikö ne ryhmitellä sen mukaan, mitkä toiminnot suorittimen on suoritettava niiden toteuttamiseksi (ja kuinka erilaisten näiden toimintojen on oltava, jotta ohjeista tehdään "erilaisia")?

Kuinka monta x86-64-ohjetta on olemassa?

Vastaus? Missä tahansa 981 - 3683, riippuen käytetyistä kriteereistä.

Mutta miksi niin vähän (tai niin monta), kun niitä voisi olla vielä enemmän? Pohjimmiltaan raja ei ole tekninen, vaan taloudellinen. Kukaan ei halua näitä ylimääräisiä ohjeita tarpeeksi pahasti perustellakseen niiden lisäämistä.

Jotkut voivat olla erittäin hyödyllisiä, kuten DIVIDE, EXPONENT tai ehdolliset toimintoja.

Tämä vastaa tusinaa, joista suurin osa nykyisillä suorittimilla on jo. Miljoonia tai miljardeja ohjeita? Kukaan ei halua niitä.

Se, että käsky voi olla hyödyllinen, ei tarkoita, että se kannattaa toteuttaa. Koska melkein kaikki nykyaikaiset koodaukset tehdään korkean tason kielillä, niin kauan kuin kääntäjien kirjoittajien tyydyttämiseksi on riittävät ohjeet, kaikki ovat onnellisia. Muut halutut 'hyödylliset' toiminnot voidaan toteuttaa korkeamman tason koodeilla.

Tästä on tietysti poikkeuksia, minkä vuoksi nykyaikaisissa suorittimissa on yleensä enemmän ohjeita. Mutta on myös ollut tapauksia, joissa ohjeet poistettiin , koska niitä ei käytetty tarpeeksi oikeuttamaan niiden pitämistä. Tämä voidaan tehdä piin säästämiseksi, monimutkaisuuden vähentämiseksi, nopeuden lisäämiseksi tai yksinkertaisesti välttääkseen tarvetta tukea ominaisuuksia, joita kukaan ei halua.

robert bristow-johnson
2020-03-14 00:58:43 UTC
view on stackexchange narkive permalink

Minulla on vaikeuksia löytää asiakirja, joka näyttää nimenomaisesti ARM: n opcode-muodon, mutta monilla opcodeilla on suuri osa bittikentastaan varattu välittömille tiedoille tai haaroitussiirtymille.joten kaikkia 64 tai 32 bittiä ei ole tarkoitettu koodaamaan erilaisia käskyjä, vaan koodaamaan käskyyn sisäänrakennettuja tietoja.

Nämä ovat arkkitehtuurin käyttöoppaita, ARM ARM: ita, ja ne ovat helposti saatavissa ARM: n infokeskuksesta.
@ElliotAlderson [löysin tämän] (https://static.docs.arm.com/100076/0100/arm_instruction_set_reference_guide_100076_0100_00_en.pdf), mutta eivät silti näe, missä opkoodit ovat.
Tämä johtuu siitä, että linkittämäsi asiakirja ei ole arkkitehtuurin viitekäsikirja.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.architecture.reference/index.html (rekisteröinti vaaditaan virallisesta linkistä, mutta löydät kopiotGoogle-käyttöoppaat, jos et halua rekisteröidä tiliä).
alex.forencich
2020-03-14 06:05:18 UTC
view on stackexchange narkive permalink

Sanoisin, että he todennäköisesti tukevat miljoonia ohjeita. Mutta se riippuu todella siitä, miten määrität "käskyn".

Yleensä ohjeet on jaettu useisiin kenttiin - yksi osa osoittaa operaation (lisätä, vähentää, jakaa, haara, hypätä, lukea, kirjoittaa jne.) ja sitten muut osat voivat antaa argumentteja - välittömiä arvoja rekisterimerkinnät. Joten jos ryhmität kaikki mahdolliset välittömät arvot ja kaikki mahdolliset rekisterimerkinnät yhteen, sinulla on vain suhteellisen pieni määrä toimintoja. Koska jokainen operaatio on arvioitava omistetulla laitteistolla (hyvin, enemmän tai vähemmän ... asioita, kuten summaus ja vähennys, voidaan tehdä samalla laitteistolla joillakin kokoonpanoilla / esikäsittelyllä), erillisten operaatioiden määrää on rajoitettava laitteiden alueella ja monimutkaisuudessa. siru.

Eri argumentit johtavat kuitenkin erilaisiin konekoodeihin. Ota esimerkiksi RISC-V-lisäysohje, ADD rd, rs1, rs2 , joka ottaa kaksi rekisteriarvoa, rs1 ja rs2 , lisää ne yhdessä ja sijoittaa tuloksen kolmanteen rekisteriin, rd . RISC-V: llä on 32 rekisteriä, joten se tarkoittaa, että on olemassa 32 * 32 * 32 = 32 768 erilaista "ohjetta", jotka kaikki yhdistyvät ADD: hen, mutta eri argumenteilla. Vastaavasti ADDI rd, rs1, imm ottaa välitöntä 12-bittistä arvoa, lisää sen kohtaan rs1 ja kirjoittaa tuloksen kohtaan rd . Joten tämä johtaa 32 * 32 * 4096 = 4,194,304 erilliseen koodaukseen vain ADDI : lle.

"Ohjaustilan" jakaminen on erittäin tärkeä osa ISA: n suunnittelua.Millä bitillä käytät rekisteröintiargumentteja, millä bitillä käytät välittömiä arvoja, millä bitillä käytät operaatiota, millä bitillä käytät komentomuotoa, millä bitillä käytät komentokokoa jne.ottaen huomioon komentosarjan joustavuuden ja ilmeikkyyden sekä prosessorissa vaaditun dekoodauslaitteiston monimutkaisuuden.Käytettävissä olevien toimintojen määrän lisääminen tapahtuu yleensä joustavuuden kustannuksella - välitön koko, argumenttien lukumäärä, osoitettavien rekistereiden määrä jne.



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 4.0-lisenssistä, jolla sitä jaetaan.
Loading...