És millor el cicle per instrucció?
El Megahertz Myth va convertir-se en una tàctica promocional degut a les diferències entre el processador INTEL 8086 i el processador Rockwell 6502 d'Apple. El 8086 va córrer a 4.77MHz mentre el 6502 va córrer a 1MHz. No obstant això, les instruccions sobre el 6502 necessiten menys cicles; molts menys, de fet, va córrer més ràpid que el 8086. Per què les instruccions necessiten menys cicles? I per què les instruccions del 6502 necessiten menys cicles, que es combina amb un processador de fum ràpid del 8086?
L' article de la Viquipèdia per instruccions per cicle (IPC) diu
Factors que governen IPC Un nivell donat d' instruccions per segon es pot aconseguir amb una alta velocitat del CP i baixa del rellotge... o des d'una velocitat baixa IPC i alta del rellotge.
Per què no pots tenir les dues altes instruccions per cicle i velocitat del rellotge alt?
Potser això té a veure amb el cicle del rellotge? La Viquipèdia menciona la sincronització dels circuits? No sé què vol dir.
O potser això té a veure amb com funciona un canonada? No estic segur de per què les instruccions en una canonada curta són diferents de les instruccions en una canonada llarga.
Qualsevol coneixement seria genial! Només intentava entendre l'arquitectura que hi ha darrere del mite. Gràcies!
A cada -> hi ha un cost de temps que és un deute. A més a més, cada marca ( cicle real), tot es mou des d'una etapa a la següent, de manera que el vostre escenari més lent esdevé la velocitat de totes les fases (això els paga per a ells a ser tan semblants en longitud com sigui possible).
Diguem que teniu 5 instruccions, i voleu executar- les (pic presa de wikipedia, aquí l'actualització del PC no està feta). Semblaria així:
Tot i que cada instrucció pren 5 cicles de rellotge per completar, una instrucció acabada surt de la canonada cada cicle. Si el temps que triga a cada etapa és 40 ns, i 15 ns per als bits intermedis (usant la meva canonada de sis etapa més amunt), agafarà 40 * 6 + 5 * 15 = 315 ns per obtenir la primera instrucció.
En canvi, si jo hagués d'eliminar completament la canonada (però mantenir tota la resta igual), seria agafar uns 240 ns per obtenir la primera instrucció. (Aquesta diferència a velocitat per obtenir les instruccions "primera" s'anomena retardenc. Generalment és menys important que el rendiment, que és el nombre d' instruccions per segon.
La diferència real és que, a l'exemple canonada, tinc una nova instrució feta (després del primer) cada 60 ns. En el no-clineat n'hi ha un, costa 240 cada vegada. Això demostra que les canonades són bones en millorar el rendiment.
Anar més enllà, semblaria que a l'escenari de l'accés de memòria necessitaré una unitat d'addició (per fer càlculs d'adreça). Això vol dir que si hi ha una instrucció que no fa servir l'escenari del cicle, llavors puc fer una altra suma. Puc fer dues fases d'execució (amb una a l'escenari d'accés de memòria) en un processador en una sola marca (la planificació és un malson, però no anem allà. A més, l'escenari d' actualització del PC també necessitarà una unitat de suma en el cas d' un salt, per tant puc fer tres estats d' afegit en una marca). En tenir una canonada, es pot dissenyar de manera que dues (o més) instruccions poden utilitzar diferents fases (o fases blofog, etc), estalviar temps valuós.
Noteu que per fer-ho, els processadors fan moltes "màgiques" sense execució de l' ordre , predicció de la branca i molt més), però això permet múltiples instruccions a sortir més ràpid que sense canonada (tingueu en compte que són massa difícils de gestionar, i inflar un cost més alt esperant entre fases). El costat de gir és que si fas la canonada massa llarga, pots aconseguir una velocitat del rellotge boig, però perdre molt dels beneficis originals (de tenir el mateix tipus de lògica que pot existir en múltiples llocs, i ser utilitzat al mateix temps).
Resposta # 2:
SIMD (Closes d' instrucció múltiples dades) (com la majoria de la GPU) fan molta feina en molts bits d' informació, però els porta més temps a fer. Llegint en tots els valors és més llarg (que significa un rellotge més lent, tot i que aquest desplaçament tenint un bus molt més ampli fins a cert punt) però podeu obtenir moltes instruccions més fetes alhora (més eficaç instruccions per cicle).
Resposta # 3:
Perquè es pot "chat" una longitud artificial amb el compte de cicles de manera que es pugui fer dues instruccions cada cicle (just avelar la velocitat del rellotge). També és possible fer només una cosa cada una de les dues marques en contra d'una (per a la velocitat del rellotge 2x, però no canviar en instruccions un segon).
Estic molt sobresimplificant això, però el punt important per recordar és que aquests termes estan comparant pomes a taronges. Un "Cycle" no és una unitat unificada de mesura que és el mateix en tots els processadors, com un "segon" és una mesura unificada de temps. En comptes d'això, un cicle representa una certa unitat de treball, que està definit en certa manera, però lligat per la complexitat del disseny de canonada i, per descomptat, per física.
En molts casos, treballar en un cicle pot permetre't netejar tota la canonada. Si tens èxit, això vol dir que el teu proper cicle serà desoptimitzat perquè has d'omplir la canonada un altre cop, que pot trigar una mica.
Podria dissenyar un processador molt simplista que processa una etapa d'una instrucció RISC cada cicle, i si aquesta fos la base de la meva CPU, podria aconseguir un cicle molt alt per segon degut a la complexitat reduïda del que constitueix "un cicle."
Els detalls arriben a un munt d'enginyeria física i elèctrica que realment no entenc, però recordeu que el ritme del rellotge no s'ha aconseguit simplement afegint una entrada innocentment al processador i esperem el millor. Com a mínim, el perfil tèrmic és una altra preocupació necessària.
Aquí teniu una explicació molt simple (potser sobresimplificada): Suposeu que teniu una feina en particular a fer, diguem-ne dos números de 32 bits. Podeu fer-vos dos enfocaments. El podeu dividir en un nombre molt gran de passos molt petits o el podeu dividir en un petit nombre de passes molt grans.
Per exemple, simplement pots dir "afegiu els dos números." Ara només tens un pas. Però aquest pas té múltiples parts i trigarà més a fer. Així que tens instruccions altes per cicle -- una en aquest cas. Però la velocitat del rellotge no pot ser alta perquè tu tens un lot Per fer-ho en aquest cicle.
Podríeu dir alternativament: "Fetch el primer número en un registre. Després agafa el segon número. Després afegiu les bits menys significatives. A continuació, afegiu la segona part significativa de l'atac des d'abans. A continuació afegiu les terceres parts... i després afegiu les parts més significatives. Si hi hagués una càrrega, posa la bandera de sobres. Doncs escriu el resultat a la memòria. " Ara tens un gran nombre de passos. Però cada pas pot ser absurdament ràpid. Teniu instruccions baixes per cicle (1/36 o així en aquest cas). Però la velocitat del rellotge pot ser molt alta ja que cada cicle només té una mica més a fer.
Per tenir ambdues instruccions per cicle i una velocitat del rellotge alta, haureu de dividir una instrucció complexa en un nombre molt petit de passos molt simples. Però això no es pot fer perquè les instruccions són complexes.
Els números de comerç i cicles reals són molt diferents perquè les CPU modernes són canonades i instruccions sobreposen. Però la idea bàsica és correcta.
Vós llauna Tenen dues instruccions per cicle i una alta velocitat del rellotge. A on us trobeu límits és quan el retard del cicle digital supera l'amplada del cicle del rellotge. Això es pot superar incrementant el voltatge de la CPU, però s' hauria d'emetre que això incrementarà el consum d'energia (i per tant, la calor dessupitat).
Així que si voleu una velocitat del rellotge més ràpida, heu d'augmentar el voltatge (incristant la Velocitat de deriva d' electrons ) per reduir el retard de la propagació. Si aquest retard excedeix un cicle del rellotge, la CPU probablement no es comportarà com s' espera, i el programari que s' està executant s'estavellarà o llançarà una excepció. És evident que hi ha un límit per al volatge que pots córrer a través d'un processador, però, i això és dictat pel disseny de la CPU mateixa - sobretot, la capacitat actual de càrrega de les vies internes.
La transmissió permet velocitats de rellotge més altes en alguns casos, perquè cada instrucció està dividida en diverses petites operacions "mòmics." Aquestes microoperacions són operacions molt simples, usant circuits molt més petits interconnectats en una cadena (en el sentit físic, com la menys distància que els electrons necessiten per viatjar, més curta el retard de la propagació mitjançant un subunit particular).
L'avantatge afegit a una CPU canonada és que es pot incrementar molt el nombre d' instruccions que s' executen per unitat, a costa d'un disseny més complex.
Pel que fa a les instruccions necessiten més o menys cicles, depèn de quina instrucció esteu executant. Per exemple, a les instruccions x86, hi ha un MOVS instrucció que pot moure una cadena sencera en memòria des d'un lloc a un altre. Clarament, no es pot copiar instantàniament una cadena llarga, però podeu copiar-la amb paraula per paraula, fent múltiples cicles de rellotge. Per tant, la MOVS Les instruccions necessiten una quantitat de temps variable (segons la quantitat de caràcters a copiar).
L' efecte d' operacions multi- cicles és menys llegible en una RISC Disseny (p. e. ARM) en lloc d' un CISC Disseny (p. e. x86). Això és perquè els dissenys basats en RISC només tindran les operacions elementals més usades, i són molt més fàcils de canonada d'una manera per aconseguir un rendiment d'una instrucció per cicle.
Quant triga el vostre ordinador a finalitzar una tasca en particular no depèn de la velocitat del rellotge de l' ordinador... depèn de com estan dissenyades les unitats computacionals i dissenyades.
La velocitat del rellotge és de fet una decisió arbitrària (més o menys) presa pel dissenyador de la CPU, a vegades per bones raons (feficiència), de vegades per a pobres (advertència).
Diguem que una CPU donada té una barreja d' instruccions que prenen entre 1 i 100 nanosegons (n) per acabar. Es podria establir la taxa de rellotge, de manera que 1 "tick" és 100 ns (10 MHz), que vol dir que cada instrucció acabaria exactament en una paparra. No obstant això, si els temps d' execució d' instruccions es distribueixen fins i tot, això vol dir que les vostres unitats computacionals estarien fora del 50% del temps (la velocitat mitjana d' execució serien 50ns, deixant els altres 50ns de la marca inactiva). Si, d'altra banda, poses la teva paparra a ser 10ns, les instruccions agafarien entre 1 i 10 marques, però la unitat mai estaria inactiva més que 9ns abans que comenci la següent instrucció, i la mitjana d' inactivitat seria de 5ns. Significa que el vostre temps d' inactivitat mitjana està baixant des del 50% (el promig de 50ns de cada 100) al 9% (ja que el temps d' execució mitjana és de 55ns (execució mitjana de 50ns + mig inactiu de 5ns).
Durant el desenvolupament, es dissenyarà una CPU per executar a una certa velocitat, basada en la quantitat de treball que la CPU és realment capaç de carregar. Si augmenteu o baixeu la velocitat del rellotge, no esteu canviant la quantitat de treball que la CPU pot aconseguir, només us esteu embolicant amb la proporció d'eficiència d'això.
(I abans de plorar per sobre de les CPU de rellotge: això us dóna dos avantatges que resulta que en la velocitat real del món guanya: instruccions d' execució ràpides (que prenen menys d' 1 cicle) acaben amb temps d'execució més ràpid, i totes les instruccions tenen menys temps d' inactivitat. Les dues d'aquestes poden augmentar la quantitat de treball que el vostre ordinador pot realitzar, però veureu que durant el forçat d' una CPU per l' X% no sempre és igual a l' augment X% de la feina feta quan feu una referència de referència.)
TL;DR
Una CPU pot aconseguir que X funcioni en un segon. Si useu velocitat H rellotge i IPC, tenim I=X/H. El canvi d' H no canvia X, però afecta inversament a l' I.
Un no pot tenir instruccions altes per cicle i velocitat del rellotge perquè els requeriments són contradictòries.
Un pot mostrar-ho, en la primera aproximació, el PCP depèn de la complexitat (A) del disseny com a
IPC = un sqA sqA sq\\ xC3)
mentre que la freqüència màxima (F) achievable per les escales de disseny com a [[ 1]
F = 1 / { b + c sqrt(A) }
amb paràmetres b i c.
L'augment de la complexitat del muarch augmenta la despesa IPC a costa de reduir la freqüència de treball, mentre que la reducció de la complexitat augmenta la freqüència a costa del CP. Aquesta correspon als dos casos extrems mencionats a l'article de la Viquipèdia, però la Viquipèdia no menciona els noms: el cervell i la velocitat.
- Disseny cerebral: freqüència alta IPC i baixa
- Desviament de velocitat: freqüència alta i baixa IPC.
[ 1] Alguns autors reclamen que l' expressió de la freqüència és "1 / { b + c}" en el seu lloc, però en ambdós casos la complexitat augmenta la freqüència màxima achievable.
Artículos Relacionados:
- Quin ordinador és millor per a classes en línia?
- És millor el nucli per a la codificació?
- Quin és el millor ordinador per aconseguir ara?
- Quin és el millor entre el portàtil i l'escriptori?
- Els cicles per instrucció poden ser inferiors a 1?
- Processador -