Domanda:
Perché i computer hanno solo poche migliaia di istruzioni quando potrebbero averne milioni?
Trevor Mershon
2020-03-13 19:15:59 UTC
view on stackexchange narkive permalink

La maggior parte dei computer contiene solo un paio di migliaia di istruzioni, ma l'ampiezza di bit (solitamente 64 bit) tecnicamente consente ai computer di avere accesso a milioni o addirittura miliardi di istruzioni.Alcuni potrebbero essere estremamente utili, come DIVIDE, EXPONENT o operazioni condizionali.Inoltre, le velocità di clock si stanno arrestando e il calcolo quantistico è molto lontano.Perché non hanno ancora aggiunto ulteriori istruzioni ai microprocessori?

I commenti non sono per discussioni estese;questa conversazione è stata [spostata in chat] (https://chat.stackexchange.com/rooms/108571/discussion-on-question-by-trevor-mershon-why-do-computers-have-only-a-few-migliaia).
Sei risposte:
Simon B
2020-03-13 21:03:37 UTC
view on stackexchange narkive permalink

Perché ogni istruzione necessita di un circuito per implementarla.Più istruzioni aggiungi, più grande diventa il processore.Poiché la maggior parte di queste operazioni non verrà mai utilizzata, è solo una complessità sprecata.

Tutta la complessità può persino rallentare il processore.I processori RISC, come ARM, erano basati sull'idea di buttare via un gran numero di operazioni e rendere il core del processore più piccolo risultante il più velocemente possibile.

Anche i moderni processori X86, con un enorme set di istruzioni, hanno finito per avere un processore più veloce nascosto al suo interno, che ne emula uno enorme e complicato.

Inoltre, più vuoi rendere la tua CPU intelligente (e quindi, come dici tu, più grande nei circuiti), più facile è creare difetti e forse violazioni della sicurezza.Vedi Spectre e Meltdown, per citarne due.
Molti processori Intel effettuano il downclock di alcune centinaia di MHz quando si utilizzano le istruzioni AVX2 o AVX512.
Eduardo1992
2020-03-13 21:49:58 UTC
view on stackexchange narkive permalink

Per completare la risposta di Simon B, le GPU, d'altra parte, fanno molti calcoli complessi.Ma possono essere ridotti a istruzioni di moltiplicazione-addizione, A = B * C + D.Quindi cercano almeno di avere complesse istruzioni di moltiplicazione-addizione perché sono istruzioni comuni.

Ricapitolando.Se aggiungi più istruzioni la CPU diventerà:

  1. più complesso, ovvero CPU più grande e più difficile da usare in modo efficiente
  2. più lento.La velocità a cui puoi eseguire dipende dall'unità più lenta
  3. più costoso.È questo ciò che vuole il tuo cliente?

Inoltre, leggi informazioni su "architetture risc vs cisc"

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

La maggior parte dei computer contiene solo un paio di migliaia di istruzioni, ma l'ampiezza di bit (solitamente 64 bit) tecnicamente consente ai computer di avere accesso a milioni o addirittura miliardi di istruzioni.

Innanzitutto, sia chiaro che essere a 64 bit non significa nulla per le istruzioni. La maggior parte dei sistemi a 64 bit utilizza istruzioni lunghe a 32 bit, ad eccezione di x86 dove le istruzioni possono essere dovunque da meno di 32 bit a diverse centinaia di bit.

Per quanto riguarda il motivo per cui il numero di istruzioni è limitato, per un sistema che utilizza istruzioni a 32 bit (che è un numero molto efficiente da usare), il numero di possibili istruzioni che possono essere codificate è piuttosto limitato poiché idealmente si desidera avere a almeno 3 registri per almeno alcuni codici operativi. Tuttavia, anche x86, dove le istruzioni possono avere una lunghezza arbitraria, ha dell'ordine di qualche migliaio di istruzioni uniche (non tutte sono necessariamente ancora utilizzate) perché non ci sono molte cose utili che un'istruzione può fare. Codificare molte istruzioni inutili (come fa x86) non necessariamente ti fa male, ma non aiuta neanche.

Perché non hanno ancora aggiunto ulteriori istruzioni ai microprocessori?

Intel e ARM aggiungono regolarmente nuove istruzioni. Concentrandosi sulle informazioni, ci sono state nuove istruzioni Haswell, nuove istruzioni Broadwell, nuove istruzioni Skylake, nuove istruzioni Palm Cove (Cannonlake) e nuove istruzioni Sunny Cove (Icelake) dell'anno scorso.

La maggior parte delle istruzioni utili sono state aggiunte molto tempo fa, quindi in genere hanno in media un effetto marginale, ma ci sono applicazioni specifiche in cui queste possono fare una grande differenza.

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

La maggior parte dei computer contiene solo un paio di migliaia di istruzioni,

Dipende da come li conti. Tutte le istruzioni con una funzione simile dovrebbero essere raggruppate o diverse varianti conteggiate separatamente? O dovrebbero essere raggruppati in base alle operazioni che la CPU deve eseguire per implementarli (e quanto devono essere diverse queste operazioni per rendere le istruzioni "diverse")?

Quante istruzioni x86-64 ci sono comunque?

La risposta? Ovunque da 981 a 3683 a seconda dei criteri utilizzati.

Ma perché così pochi (o così tanti) quando potrebbero essercene anche di più? Fondamentalmente il limite non è tecnico, ma economico. Nessuno vuole abbastanza quelle istruzioni extra da giustificarne l'aggiunta.

Alcuni potrebbero essere estremamente utili, come DIVIDE, EXPONENT o condizionale operazioni.

Ciò spiega una dozzina di così, la maggior parte delle quali le attuali CPU hanno già. Milioni o miliardi di istruzioni? Nessuno li vuole.

Solo perché pensi che un'istruzione possa essere "utile" non significa che valga la pena implementarla. Poiché quasi tutta la codifica moderna è eseguita in linguaggi di alto livello, finché ci sono istruzioni sufficienti per soddisfare gli autori di compilatori, tutti sono contenti. Qualsiasi altra operazione "utile" desiderata può essere implementata in codice di livello superiore.

Ci sono ovviamente delle eccezioni, motivo per cui le CPU moderne tendono ad avere più istruzioni al loro interno. Ma ci sono stati anche casi in cui le istruzioni sono state rimosse perché non erano usate abbastanza per giustificare il loro mantenimento. Questo può essere fatto per risparmiare silicio, ridurre la complessità, aumentare la velocità o semplicemente per evitare di dover supportare funzionalità che nessuno vuole.

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

Ho problemi a trovare il documento che mostra esplicitamente il formato del codice operativo per ARM, ma molti codici operativi hanno gran parte del loro campo di bit riservato ai dati immediati o agli offset dei rami.quindi non tutti i 64 bit o 32 bit sono lì per codificare istruzioni diverse, ma sono lì per codificare i dati incorporati nell'istruzione.

Questi sono i manuali di riferimento dell'architettura, gli ARM ARM, e sono immediatamente disponibili nell'infocenter di ARM.
@ElliotAlderson [ho trovato questo] (https://static.docs.arm.com/100076/0100/arm_instruction_set_reference_guide_100076_0100_00_en.pdf), ma ancora non vedo dove sono disposti i codici operativi.
Questo perché il documento che hai collegato non è un manuale di riferimento dell'architettura.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.architecture.reference/index.html (la registrazione è richiesta dal link ufficiale, ma puoi trovare copie delmanuali su google se non vuoi registrare un account).
alex.forencich
2020-03-14 06:05:18 UTC
view on stackexchange narkive permalink

Direi che, probabilmente, supportano milioni di istruzioni. Ma dipende davvero da come si definisce una "istruzione".

In generale, le istruzioni sono suddivise in diversi campi: una parte indica qual è l'operazione (addizione, sottrazione, divisione, ramificazione, salto, lettura, scrittura, ecc.) e poi altre parti possono fornire argomenti - valori immediati o registri indicies. Quindi, se raggruppate tutti i possibili valori immediati e tutti i possibili indici di registro insieme, avrete solo un numero relativamente piccolo di operazioni. Poiché ogni operazione deve essere valutata su hardware dedicato (beh, più o meno ... cose come add e sottract possono essere fatte sullo stesso hardware con qualche configurazione / pre-elaborazione) il numero di operazioni distinte deve essere limitato dall'area e dalla complessità del il chip.

Tuttavia, argomenti diversi producono un codice macchina diverso. Ad esempio, prendi l'istruzione RISC-V add, ADD rd, rs1, rs2 che accetta due valori di registro, rs1 e rs2 , li aggiunge insieme e inserisce il risultato in un terzo registro, rd . RISC-V ha 32 registri, quindi significa che ci sono 32 * 32 * 32 = 32.768 diverse "istruzioni" che mappano tutte su ADD, ma con argomenti diversi. Allo stesso modo, ADDI rd, rs1, imm accetta un valore immediato di 12 bit, lo aggiunge a rs1 e scrive il risultato in rd . Quindi, questo si traduce in 32 * 32 * 4096 = 4.194.304 codifiche distinte solo per ADDI .

La suddivisione dello "spazio delle istruzioni" è una parte molto importante del progetto di un ISA.Quali bit usi per gli argomenti del registro, quali bit usi per valori immediati, quali bit usi per determinare l'operazione, quali bit usi per determinare il formato dell'istruzione, quali bit usi per determinare la dimensione dell'istruzione, ecc.tenendo conto della flessibilità e dell'espressività del set di istruzioni e della complessità dell'hardware di decodifica richiesto nella CPU.L'aumento del numero di operazioni disponibili generalmente va a scapito della flessibilità : dimensione immediata, numero di argomenti, numero di registri indirizzabili, ecc.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...