Un programa pot executar- se amb múltiples nuclis?
Estic intentant entendre, en un alt nivell, com un sol fil passa per múltiples nuclis. A sota hi ha la meva millor comprensió. Però no crec que sigui correcte.
Basat en la meva lectura de Hyper-threadingCity name (optional, probably does not need a translation) Sembla que l'OSM s'organitzen. les instruccions de tots els fils d' aquesta manera que no són S'espera l'un a l'altre. Llavors el frontal de la CPU més enllà Organitza aquestes instruccions distribuir un fil a cada base, i distribueix instruccions independents de cada fil entre qualsevol cicles oberts.
Així que si només hi ha un sol fil, l'OSM no farà cap optimització. No obstant això, el frontal de la CPU distribuirà les instruccions independents entre cada nucli.
Només per aclarir-me, estic preguntant per un sol fil que passa per múltiples nuclis, no sobre executar múltiples fils en un únic nucli.
Què té de dolent el meu resum? On i com es divideixen les instruccions d'un fil entre múltiples nuclis? El llenguatge de programació importa? Sé que això és un tema ampli, espero tenir un enteniment alt nivell d'això.
3 respostes 3
El sistema operatiu ofereix tall de temps s de CPU a fils que estan decidits a executar.
Si tan sols hi ha un nucli, llavors el sistema operatiu planifica el fil més important per executar- se en aquest nucli durant un tall de temps. Després de completar un tall de temps, o quan s' executa els blocs de fil en l' EO, o quan el processador està interromput per esdeveniments externs, el sistema operatiu torna a avaluar quin fil s' executarà el següent (i podria escollir el mateix fil de nou o un altre).
La responsabilitat d'executar variacions consisteix en variacions sobre la justícia i la prioritat, i per aquest mètode diversos fils reben talls de temps, alguns més que d'altres.
Si hi ha múltiples nuclis, N, llavors la planificació del sistema operatiu executa els fils N que més elegin per a que s' executin en els nuclis.
Processador d' afinitat És una consideració d'eficiència. Cada vegada que una CPU executa un fil diferent que abans, tendeix a alentir-se una mica perquè la seva memòria cau és calenta per al fil anterior, però el fred al nou. Així doncs, posar el mateix fil en el mateix processador sobre nombrosos talls de temps és un avantatge d'eficiència.
No obstant això, el sistema operatiu és lliure d'oferir un fil de temps a diferents CPU, i podria girar a través de totes les CPU en diferents talls de temps. No pot, però, com @gnasher729 diu , executar un fil en múltiples CPU simultàniament.
Hyperthreading és un mètode en maquinari pel qual un sol Millorat El nucli de la CPU pot suportar l' execució de dos o més diferent fils simultàniament. (Suchich una CPU pot oferir fils addicionals a baix cost a l' estat real de silici que addicionals nuclis sencers.) Aquest nucli de la CPU millorat necessita implementar l' estat addicional per als altres fils, com els valors de registre de la CPU, i també té el & comportament de la coordinació i el comportament que permet compartir unitats funcionals dintre d' aquesta CPU sense recomprimir els fils.
Hyperthreading, mentre tècnicament desafia des d'una perspectiva del maquinari, des de la perspectiva del programador, el model d'execució és simplement això dels nuclis de CPU addicionals en comptes de qualsevol altra cosa més complexa. Per tant, el sistema operatiu veu nuclis de la CPU addicionals, tot i que hi ha nous problemes afinitat de processador com a diversos fils hiperfils estan compartint una arquitectura de memòria cau de la CPU.
Podríem pensar ingenuament que dos fils executant-se en un cor hiperpotat cada una va córrer la meitat tan ràpid com cadascun amb el seu propi nucli total. Però aquest no és necessàriament el cas, ja que l'execució d'un sol fil està plena de cicles febles, i algunes d'elles poden ser usades per l'altre fil hiperthreadd. Més, fins i tot durant els cicles no-sack, un fil pot estar usant diferents unitats funcionals que l'altra execució simultània pot ocórrer. La CPU millorada per al hiperfilisme pot tenir algunes unitats molt més usades especialment per donar suport a això.
Resum: Trobar i explotar la (traducció de nivell) paral· lelisme En un programa de només lectura es fa purament en el maquinari, pel nucli de la CPU en el que s' està executant. I només per sobre d'una finestra d'un parell de centenars de instruccions, no de reordenació a gran escala.
Els programes amb una única lectura no reben beneficis de CPU multi-core, excepte que això altra Les coses poden córrer per altres nuclis en lloc de prendre temps lluny de la tasca única lectura.
L' SO organitza les instruccions de tots els fils d'aquesta manera que no s'estan esperant.
L' SO NO mira dins els fluxos d' instruccions dels fils. Només planifica els fils fins als nuclis.
De fet, cada nucli executa la funció del planificador de l' OSM quan cal esbrinar què fer a continuació. La planificació és un algoritme distribuït. Per a entendre millor les màquines multi-core, penseu en cada nucli en executar el nucli per separat. Igual que un programa multi- fil, el nucli està escrit de manera que el seu codi en un nucli pot interactuar amb el seu codi d'altres nuclis per actualitzar les estructures de dades compartides (com la llista de fils que estan llests per a executar.
De tota manera, l' OSM està implicat en ajudar els processos amb múltiples intencions L' paral· lelisme de fils que s'ha d'exposar explícitament per escrit manualment un programa multi-filla . (O mitjançant un compilador automàtic amb OpenMP o alguna cosa així).
A continuació, el frontal de la CPU organitza més aquestes instruccions distribuir un fil a cada nucli, i distribuirà instruccions independents des de cada fil entre els cicles oberts.
Un nucli de la CPU només està executant un flux d' instruccions, si no s'atura (un somni fins la següent interromp, p. ex. S' ha interromput el temporitzador. Sovint això és un fil, però també podria ser un gestor d' interrupció del nucli, o codi de nucli variat si el nucli va decidir fer alguna cosa més que tornar al fil anterior després de gestionar i interrompre o cridar el sistema.
Amb hiperThreading o altres dissenys STT, un nucli de la CPU física actua com a nuclis "de l'indilògica." L'única diferència d' una perspectiva de l' OSM entre una quadràtica amb una CPU (4c8t) i una màquina normal de 8 bits (8c8t) és que un SO HT tracta de planificar fils per separar els nuclis físics de manera que no es puguin competir entre ells. Un SO que no sabia sobre hiperthreading només veuria 8 nuclis (a no ser que deshabiliteu HT a la BIOS, llavors només es detectaria 4).
El terme " El frontal " es refereix a la part d'un nucli de la CPU que recupera el codi màquina, descodifica les instruccions, i els emet en la part de fora de l'ordre de la base . Cada nucli té el seu propi frontal, i és part del nucli com a tot. Instrucció per obtenir són El que actualment s' està executant la CPU.
A l' interior de la part de l' ordre final del nucli, les instruccions (o uops) s'envien als ports d' execució quan els seus operands d' entrada estan llests i hi ha un port d' execució lliure. Això no ha de passar en ordre de programa, així que Així és com una CPU OO pot explotar Nivell d' instrucció paral· lelisme dins d' un sol fil .
Si substitueixes "cor" amb "unitat d'execució" a la idea, estàs a punt de corregir. Sí, la CPU distribueix instruccions independents/uops per executar unitats en paral·lel. (Però hi ha una barreja de terminologia, des que vas dir "al front" quan realment és l'estació d'inplanificació de la CPU aka que tria instruccions llestes per executar).
L'execució de l'entrada només pot trobar la ILP en un nivell molt local, només fins a un parell de instruccions, no entre dos bucles independents (a menys que siguin curts).
Per exemple, l'equivalent a això
int i=0,j=0;
do {
i++;
j++;
} mentre(42);
Correrà tan ràpid com el mateix bucle que l'increment d'un contra d'Intel Haswell. i++ Tan sols dependrà del valor anterior i , mentre j++ Tan sols dependrà del valor anterior j Així que els dos Cadenes de dependències Pot executar-se en paral· leles sense trencar la il·lusió de tot sent executada en ordre de programa.
A x86, el bucle sembla una cosa així:
top_ de_ bloop: ic eax ic edx jmp.loop
Té 4 ports d'execució enters, i tots ells tenen unitats adders, per tant pot mantenir un rendiment de fins a 4 incunit description in lists instruccions per rellotge si tots són independents. (Amb retard=1, així que només necessites 4 registres a un màxim de l'aprovació mantenint 4 incunit description in lists Les instruccions de vol. Contrastar això amb Mapp o FMA: 5 de lateència a través de la taxa=0. 5 necessita 10 vectors acumuladors per mantenir 10 FMAs en vol a un màxim a través de la taxa. I cada vector pot ser 256b, amb 8 flotacions simples).
El joc de màda també és un coll embotellat: un bucle sempre té com a mínim un rellotge sencer per iteracions, perquè s'ha pres un forat a través del rendiment és limitat a 1 per rellotge. Podria posar una instrucció més dins del bucle sense reduir el rendiment, a no ser que també llegeixi/escrits Etax o edx En aquest cas longitudaria aquesta cadena de dependències. Posar dues instruccions més en el bucle (o una instrucció multiuop complexa) crearia un coll embotellat a la part frontal, ja que només pot emetre 4 uops per rellotge en el nucli de sortida. (Mira.) aquesta SO QiA Per alguns detalls sobre el que passa per bucles que no són un múltiple de 4 uops: el bucle-bufer i la memòria cau uop fan coses interessants.)
En casos més complexos, trobar el paral·lelisme requereix mirar una finestra més gran d' instruccions . (E.g. Potser hi ha una seqüència de 10 instruccions que totes depenen de l'altre, llavors algunes independents).
La capacitat de re-Order Buffer és un dels factors que limiten la mida de la finestra per ordre. A Intel·ligència Haswell, és en 192 uops. (I vostè pot fins i tot mesura experimentalment , juntament amb la capacitat de registre (mida del fitxer de registre). Els nuclis de la CPU de baix potència com l'ARM tenen mides més petites de ROB, si fan l'execució de l'execució per ordre en absolut.
També tingueu en compte que les CPU han de ser canonades, així com fora de l'ordre. Per tant, s'ha de recollir instruccions idecoode ben endavant dels que s'estan executant, preferiblement amb prou rendiment per a omplir la memòria intermèdia després de perdre qualsevol cicles de recuperació. Les branques són complicades, perquè no sabem d'on anar ni de si no sabem quin camí ha anat una branca. Aquesta és la raó per la qual la branca-predicció és tan important. (I per què les CPU modernes utilitzen l'execució especuliva: saben quina manera pujarà una branca i començarà a recuperar/decorar/ executar aquest flux d' instruccions. Quan es detecta una malapredicció, tornen a l' últim estat conegut i s' executen des d' aquí.)
Aquest és un diagrama de blocs d' un single Nucli de la CPU . Una CPU quadre té 4 d' aquests xips, cadascun amb les seves pròpies caudes L1/ L2 (intercanvieu un cau de L3, controladors de memòria i connexions PCIe amb els dispositius del sistema).
Sé que això és aclaparadorament complicat. L'article del Kanter també mostra parts d'això per a parlar del frontal per separat de les unitats d'execució o de la memòria cau, per exemple.
No hi ha tal cosa com un sol fil en execució en múltiples nuclis simultàniament.
No vol dir, però, que les instruccions d'un fil no es poden executar en paral·lel. Hi ha mecanismes anomenats instrucció paral· lelisme i Execució fora de l' execució de l' ordre Això ho permet. Cada nucli té un munt de recursos redundants que no s' usen per instruccions simples, de manera que es poden executar múltiples instruccions (sempre que el següent no depenen del resultat anterior). No obstant això, això encara passa dins d'un únic nucli.
Hiper- lectura és una variant extrema d' aquesta idea, en la qual un nucli no tan sols executa instruccions des d' un fil en paral· lel, sinó que barreja instruccions de dos fils diferents per optimitzar l' ús de recursos encara més.
Artículos Relacionados:
- Com puc aconseguir que un programa utilitzi múltiples nuclis?
- Quants nuclis necessito per programar?
- Com fas que s'executen 4 processadors?
- Quin processador pot executar tots els jocs?
- És compatible amb la programació multi-core?
- Un procés pot executar en múltiples nuclis?
- Processador -