Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • OS
  • Hyper-Threading: Intel's Two-në-One, ose Aftësitë e Fshehura të Xeon. Procesorët me shumë bërthama: si funksionojnë

Hyper-Threading: Intel's Two-në-One, ose Aftësitë e Fshehura të Xeon. Procesorët me shumë bërthama: si funksionojnë

s në makinë dhe gjeta disa postime por jam konfuz pasi disa kanë përmendur që ju merrni bërthama logjike dhe bërthama fizike etj.
Pra, cili është ndryshimi midis bërthamave logjike dhe fizike dhe a ka ndonjë mënyrë për të marrë bërthama fizike? Apo ka kuptim përfshirja e bërthamave logjike në llogarinë tonë?

4 Zgjidhjet mbledhin forma web për "Pra, çfarë janë bërthamat logjike të procesorit (në krahasim me bërthamat e procesorit fizik)?"

Bërthamat fizike janë thjesht bërthama fizike në një procesor. Bërthamat logjike janë aftësia e një bërthame për të bërë dy ose më shumë gjëra në të njëjtën kohë. Ai u rrit nga procesorët e hershëm Pentium 4 të aftë për të bërë atë që quhej Hyper Threading (HTT).

Ishte një lojë që luhej kur komponentët ndihmës të kernelit nuk përdoreshin për disa lloje udhëzimesh, ndërkohë që mund të kryheshin punë të tjera të gjata. Kështu, njësia qendrore e përpunimit mund të punonte në dy gjëra në të njëjtën kohë.

Bërthamat e reja janë procesorë plotësisht funksionalë, kështu që ato punojnë në shumë gjëra në të njëjtën kohë, por nuk janë procesorë të vërtetë si bërthama fizike. Mund të lexoni më shumë rreth kufizimeve të veçorisë së hiperthreading dhe aftësive fizike të kernelit këtu në tomshardware në këtë artikull me titull: Intel Core i5 dhe Core i7: Intel Mainstream Magnum Opus.

Ju mund të shihni ndarjen e dritares tuaj duke përdorur komandën lscpu:

$ lscpu Arkitektura: x86_64 CPU op-mode (s): 32-bit, 64-bit CPU (s): 4 Thread (s) për bërthamë: 2 Core (s) për fole: 2 fole CPU (s): 1 NUMA nyja (t): 1 ID e shitësit: Familja e CPU-së së vërtetë Intel: 6 Modeli: 37 Hapi: 5 CPU MHz: 2667.000 Virtualizimi: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 3070K ): 0-3

Laptopi im Intel i5 i mësipërm ka 4 "procesorë" gjithsej

Procesori (ët): 4

nga të cilat janë 2 bërthama fizike

Bërthama (t) për fole: 2

nga të cilat secila mund të kalojë deri në 2 fije

Tema (t) për bërthamë: 2

ne te njejten kohe. Këto fije janë aftësitë logjike të kernelit.

Bërthamat fizike janë numri i bërthamave fizike, komponentëve realë të harduerit.

Bërthamat logjike janë numri i bërthamave fizike i shumëzuar me numrin e thread-eve që mund të ekzekutohen në secilën bërthamë duke përdorur hiperthreading.

për shembull procesori im me 4 bërthama funksionon me 2 fije për bërthamë, kështu që unë kam 8 procesorë logjikë.

$ sudo dmidecode | egrep "Përcaktimi i foleve: Proc | ((Tema | Bërthama) Numri)" Përcaktimi i folesë: Proc 1 Numri i temave: 14 Numri i temave: 28 Përcaktimi i foleve: Proc 2 Numri i bërthamave: 14 Numri i temave: 28

Dy fole. Çdo lidhës ka 14 bërthama fizike. Çdo bërthamë ka dy fije (28/14). Numri i përgjithshëm i blloqeve logjike "cpus" ose përpunimi logjik është 56 (kjo është ajo që "top" dhe disa komanda të tjera ju tregojnë si numrin "cpus").

Teknologjia Hyperthreading lejon që një bërthamë e procesorit fizik të sillet si dy procesorë logjikë.

Kështu, një bërthamë procesori mund të ekzekutojë njëkohësisht dy fije të pavarura.

Intel i referohet një procesori fizik si një prizë.

Hyperthreading lejon një procesor fizik të sillet sikur të kishte dy procesorë fizikë, të quajtur procesorë logjik. Per cfare?

Ndërsa hiperthreading nuk dyfishon performancën e sistemit, ai mund të përmirësojë performancën duke shfrytëzuar burimet boshe, duke rezultuar në më shumë xhiro për disa lloje të rëndësishme ngarkesash pune. Një aplikacion që ekzekutohet në një procesor të vetëm logjik në një bërthamë të zënë mund të presë pak më shumë se gjysmën e gjerësisë së brezit që merr kur ekzekutohet në modalitetin e vetëm në një procesor jo-hiperthreading.

Përmbledhje

Procesori fizik është diçka që ne mund ta shohim dhe bie.

Një procesor logjik është i ngjashëm me: Bërthama fizike, që vepron si dy bërthama fizike

Në tregun e Shën Petersburgut është shfaqur një procesor Intel Pentium 4 me një frekuencë të orës 3.06 GHz, i cili përdor teknologjinë Hyper-Threading (HT).
E përdorur më parë vetëm në sistemet e serverëve, teknologjia lançoi një klasë të re kompjuterësh personalë desktop me performancë të lartë, thonë prodhuesit.
Me teknologjinë HT, një procesor fizik perceptohet nga sistemi operativ i PC dhe aplikacionet si dy procesorë logjikë. Sipas kreut të zyrës përfaqësuese të Intel në Rusi dhe vendet e CIS, Alexei Navolokin, të dhënat paraprake tregojnë se procesori i ri me teknologjinë NT siguron një rritje mesatare të performancës prej 25%.

Jashtë radhës
Teknologjia HT i lejon përdoruesit të përmirësojnë performancën e kompjuterit në dy mënyra: kur punojnë me softuer që përdor përpunimin e të dhënave me shumë fije dhe kur punojnë në mjedise me shumë detyra. Aplikacionet e shkruara duke marrë parasysh aftësinë e procesorit të ri për të punuar njëkohësisht me disa fragmente kodi (të ashtuquajturat "threads" - thread) do të "shohin" një procesor fizik Intel Pentium 4 me një shpejtësi ore prej 3.06 GHz me teknologjinë HT si dy procesorë logjikë. Teknologjia HT lejon procesorin të përpunojë dy rrjedha të pavarura të të dhënave jo me radhë, por në të njëjtën kohë.

Për biznes
Me ndihmën e teknologjisë HT, për shembull, mund të filloni të luani një album muzikor dhe në të njëjtën kohë të shkëmbeni mesazhe në një bisedë pa cenuar cilësinë e zërit. Duke shkarkuar një skedar MP3 nga Interneti në arkivin tuaj të muzikës, mund të ekzekutoni paralelisht një program antivirus, i cili do të mbrojë kompjuterin tuaj nga depërtimi i programeve të padëshiruara nga jashtë.
HT ofron mundësi të shumta në botën e biznesit - drejtuesi i ndërmarrjes mund të shikojë njëkohësisht raportet dhe indekset e aksioneve, të gjurmojë treguesit e sistemit të automatizuar të menaxhimit të ndërmarrjes dhe të jetë në kontakt me kontraktorët. Inxhinierët dhe studiuesit që përdorin një kompjuter të bazuar në procesorin Intel Pentium 4 me teknologjinë Hyper-Threading do të jenë në gjendje të punojnë me burimet e informacionit në mënyrë më efikase, ndërsa e shkarkojnë atë nga Interneti dhe e marrin atë nga kolegët në formën e skedarëve të formateve të ndryshme - nga PDF në XLS.
Firmat integruese të Petersburgut ("Svega +", "Computer Service 320-80-80", "Computer-Center KEY" dhe "Computer World") planifikojnë të shesin të paktën 15-20 kompjuterë të bazuar në procesorin Intel Pentium 4 3.06 GHz mujore me Teknologjia HT.

Ne kemi shkruar që përdorimi i sistemeve Xeon me një procesor nuk ka kuptim, pasi me një çmim më të lartë performanca e tyre do të jetë e njëjtë me atë të një Pentium 4 me të njëjtën frekuencë. Tani, pas një studimi më të kujdesshëm, kjo deklaratë ndoshta do të duhet të bëhet një ndryshim i vogël. Teknologjia Hyper-Threading e implementuar në Intel Xeon me bërthamën Prestonia funksionon vërtet dhe jep një efekt mjaft të dukshëm. Edhe pse lindin shumë pyetje kur e përdorni atë ...

Jep performancë

"Më shpejt, edhe më shpejt ...". Gara për performancë ka vazhduar për vite me rradhë dhe ndonjëherë është madje e vështirë të thuhet se cili komponent i kompjuterit tuaj po përshpejtohet më shpejt. Për këtë, po shpiken gjithnjë e më shumë mënyra të reja dhe sa më tej, aq më shumë punë e kualifikuar dhe truri me cilësi të lartë investohen në këtë proces të ngjashëm me ortek.

Sigurisht që nevojitet një rritje e vazhdueshme e performancës. Të paktën, ky është një biznes fitimprurës dhe do të ketë gjithmonë një mënyrë të bukur për të inkurajuar përdoruesit që të përmirësojnë "CPU-në me super-performancë" të djeshme në "edhe më super..." të së nesërmes. Për shembull, njohja e njëkohshme e të folurit dhe përkthimi i njëkohshëm në një gjuhë tjetër nuk është ëndrra e të gjithëve? Ose lojëra jashtëzakonisht realiste me cilësi pothuajse "kinematike" (duke thithur plotësisht vëmendjen dhe ndonjëherë duke çuar në ndryshime serioze në psikikë) - a nuk është kjo aspirata e shumë lojtarëve, të rinj dhe të vjetër?

Por le t'i heqim nga kutia aspektet e marketingut në këtë rast, duke u fokusuar në ato teknike. Për më tepër, jo gjithçka është aq e zymtë: ka detyra urgjente (aplikime serverash, llogaritje shkencore, modelim, etj.), ku performanca gjithnjë e më e lartë, veçanërisht e procesorëve qendrorë, është vërtet e nevojshme.

Pra, cilat janë mënyrat për të rritur performancën e tyre?

Overclocking... Është e mundur të "hollohet" më tej procesi teknologjik dhe të rritet frekuenca. Por, siç e dini, kjo nuk është e lehtë dhe është e mbushur me të gjitha llojet e efekteve anësore si problemet e shpërndarjes së nxehtësisë.

Rritja e burimeve të procesorit- për shembull, rritja e madhësisë së cache, shtimi i blloqeve të reja (Njësitë Ekzekutuese). E gjithë kjo nënkupton një rritje të numrit të transistorëve, një rritje të kompleksitetit të procesorit, një rritje të zonës së prerjes dhe, rrjedhimisht, në kosto.

Për më tepër, dy metodat e mëparshme japin, si rregull, një rritje jo lineare të produktivitetit. Kjo dihet mirë në shembullin e Pentium 4: gabimet në parashikimin e degëve dhe ndërprerjet shkaktojnë rënien e një tubacioni të gjatë, gjë që ndikon shumë në performancën e përgjithshme.

Multiprocessing... Instalimi i shumë CPU-ve dhe shpërndarja e punës midis tyre është shpesh mjaft efikase. Por kjo qasje nuk është shumë e lirë - çdo procesor shtesë rrit koston e sistemit, dhe një motherboard i dyfishtë është shumë më i shtrenjtë se ai i rregullt (për të mos përmendur pllakat amë me mbështetje për katër ose më shumë CPU). Përveç kësaj, jo të gjitha aplikacionet përfitojnë nga performanca e shumëprocesorëve sa për të justifikuar koston.

Përveç shumëpërpunimit "të pastër", ekzistojnë disa opsione "të ndërmjetme" për të shpejtuar ekzekutimin e aplikacioneve:

Përpunimi i shumëfishtë i çipeve (CMP)- dy bërthama procesori janë të vendosura fizikisht në një die duke përdorur një memorie të përbashkët ose të veçantë. Natyrisht, madhësia e kristalit rezulton të jetë mjaft e madhe, dhe kjo nuk mund të ndikojë në kosto. Vini re se disa nga këto CPU "të dyfishta" mund të funksionojnë gjithashtu në një sistem shumëprocesorësh.

Time-Slice Multithreading... Procesori kalon ndërmjet temave të programit në intervale fikse. Shpenzimet e përgjithshme mund të jenë mjaft mbresëlënëse ndonjëherë, veçanërisht nëse një proces është në pritje.

Ndërprerja e ngjarjeve me shumë fije... Ndërrimi i detyrave kur ndodhin pauza të gjata, të tilla si "humbjet e cache", një numër i madh i të cilave janë tipike për aplikacionet e serverit. Në këtë rast, një proces që pret të ngarkojë të dhënat nga memoria relativisht e ngadaltë në cache pezullohet, duke liruar burimet e CPU-së për procese të tjera. Megjithatë, Switch-on-Event Multithreading, si Time-Slice Multithreading, nuk lejon gjithmonë arritjen e përdorimit optimal të burimeve të procesorit, në veçanti, për shkak të gabimeve në parashikimin e degëve, varësive të instruksioneve, etj.

Multithreading i njëkohshëm... Në këtë rast, temat e programit ekzekutohen në një procesor "njëkohësisht", domethënë pa kaluar midis tyre. Burimet e CPU-së shpërndahen në mënyrë dinamike, sipas parimit "nëse nuk e përdorni, jepjani dikujt tjetër". Është kjo qasje që qëndron në themel të teknologjisë Intel Hyper-Threading, të cilës ne i drejtohemi tani.

Si funksionon Hyper-Threading

Siç e dini, "paradigma kompjuterike" aktuale supozon llogaritjen me shumë fije. Kjo vlen jo vetëm për serverët, ku një koncept i tillë ekziston fillimisht, por edhe për stacionet e punës dhe sistemet desktop. Temat mund t'i referohen njërit ose aplikacioneve të ndryshme, por pothuajse gjithmonë ka më shumë se një fije aktive (për t'u siguruar për këtë, mjafton të hapni Task Manager në Windows 2000 / XP dhe të aktivizoni shfaqjen e numrit të temave) . Në të njëjtën kohë, një procesor konvencional mund të ekzekutojë vetëm një nga temat në të njëjtën kohë dhe detyrohet të kalojë vazhdimisht midis tyre.

Për herë të parë, teknologjia Hyper-Threading u implementua në procesorin Intel Xeon MP (Foster MP), në të cilin u testua. Kujtojmë se Xeon MP, i prezantuar zyrtarisht në IDF Spring 2002, përdor bërthamën Pentium 4 Willamette, përmban 256 KB cache L2 dhe 512 KB / 1 MB L3 cache dhe mbështet konfigurimet me 4 procesorë. Gjithashtu, mbështetja për Hyper-Threading është e pranishme në procesorin për stacionet e punës - Intel Xeon (core Prestonia, 512 KB L2 cache), i cili doli në treg pak më herët se Xeon MP. Lexuesit tanë janë tashmë të njohur me konfigurimet me procesorë të dyfishtë në Intel Xeon, kështu që ne do të shqyrtojmë aftësitë e Hyper-Threading duke përdorur këto CPU si shembull - si teorikisht ashtu edhe praktikisht. Gjithsesi, një Xeon "i thjeshtë" është një gjë më e zakonshme dhe më e tretshme se Xeon MP në sistemet me 4 procesorë ...

Parimi i Hyper-Threading bazohet në faktin se në çdo moment, vetëm një pjesë e burimeve të procesorit përdoren gjatë ekzekutimit të kodit të programit. Burimet e papërdorura gjithashtu mund të ngarkohen me punë - për shembull, ato mund të përdoren për ekzekutimin paralel të një aplikacioni tjetër (ose një fije tjetër të të njëjtit aplikacion). Në një procesor fizik Intel Xeon, formohen dy procesorë logjikë (LP - Logical Processor), të cilët ndajnë burimet kompjuterike të CPU. Sistemi operativ dhe aplikacionet "shohin" saktësisht dy CPU dhe mund të shpërndajnë punën midis tyre, si në rastin e një sistemi të plotë me procesor të dyfishtë.

Një nga qëllimet e zbatimit të Hyper-Threading është që ta lejojë atë të funksionojë me të njëjtën shpejtësi si në një CPU të rregullt nëse ka vetëm një thread aktiv. Për këtë, procesori ka dy mënyra kryesore të funksionimit: Single-Task (ST) dhe Multi-Task (MT). Në modalitetin ST, është aktiv vetëm një procesor logjik, i cili përfiton plotësisht nga burimet e disponueshme (modalitetet ST0 dhe ST1); LP tjetër është ndalur nga komanda HALT. Kur shfaqet filli i dytë i programit, procesori logjik i papunë aktivizohet (nëpërmjet një ndërprerjeje) dhe CPU-ja fizike vendoset në modalitetin MT. Ndalimi i LP-ve të papërdorura me komandën HALT është përgjegjësi e sistemit operativ, i cili është në fund të fundit përgjegjës për të njëjtin ekzekutim të shpejtë të një thread si në rastin pa Hyper-Threading.

Për secilin nga dy LP-të ruhet i ashtuquajturi Gjendja e Arkitekturës (AS), e cila përfshin gjendjen e llojeve të ndryshme të regjistrave - qëllimi i përgjithshëm, kontrolli, APIC dhe shërbimi. Çdo LP ka APIC-in e vet (kontrolluesin e ndërprerjes) dhe një grup regjistrash, për funksionimin e saktë me të cilin prezantohet koncepti i Tabela e Regjistrit Alias ​​(RAT), i cili monitoron korrespondencën midis tetë regjistrave IA-32 për qëllime të përgjithshme dhe 128. regjistrat fizikë të CPU-së (një RAT për çdo LP).

Kur punoni me dy rryma, mbështeten dy grupe përkatëse të treguesve të udhëzimeve të ardhshme. Shumica e udhëzimeve janë marrë nga Trace Cache (TC), ku ruhen në formë të deshifruar, dhe dy LP-të aktive marrin akses në TC në mënyrë alternative, përmes një cikli të orës. Në të njëjtën kohë, kur vetëm një LP është aktiv, ai fiton akses ekskluziv në TC pa ndërthurur nga ora. ROM-i i Mikrokodit aksesohet në të njëjtën mënyrë. Blloqet ITLB (Instruction Translation Look-Aside Buffer), të cilat përdoren në mungesë të udhëzimeve të nevojshme në cache-in e instruksioneve, dublikohen dhe secili jep udhëzime për rrjedhën e vet. Njësia e deshifrimit të udhëzimeve IA-32 Instruction Decode është e përbashkët dhe, kur kërkohet të deshifrohen instruksionet për të dy rrymat, ajo u shërben atyre një nga një (përsëri, çdo cikël orësh). Blloqet Uop Queue dhe Allocator ndahen në dysh, duke ndarë gjysmën e elementeve për çdo LP. Schedulers, 5 në numër, përpunojnë radhët e komandave të dekoduara (Uops), pavarësisht se i përkasin LP0 / LP1, dhe dërgojnë komanda për të ekzekutuar Njësitë e nevojshme Ekzekutuese, në varësi të gatishmërisë për të ekzekutuar të parën dhe disponueshmërisë së kësaj të fundit. Memoria e fshehtë e të gjitha niveleve (L1 / L2 për Xeon, si dhe L3 për Xeon MP) ndahen plotësisht midis dy LP-ve, megjithatë, për të siguruar integritetin e të dhënave, regjistrimet në DTLB (Data Translation Look-Aside Buffer) ofrohen me përshkrues në forma e ID-ve logjike të procesorit.

Kështu, udhëzimet e të dy CPU-ve logjike mund të ekzekutohen njëkohësisht në burimet e një procesori fizik, të cilët ndahen në katër klasa:

  • dublikuar (Duplicated);
  • plotësisht i ndarë (Plotësisht i ndarë);
  • me përshkruesit e elementeve (Entry Tagged);
  • ndahet në mënyrë dinamike në varësi të mënyrës së funksionimit ST0 / ST1 ose MT.

Në të njëjtën kohë, shumica e aplikacioneve të përshpejtuara në sistemet me shumë procesorë mund të përshpejtohen gjithashtu në një CPU me Hyper-Threading të aktivizuar pa asnjë modifikim. Por ka edhe probleme: për shembull, nëse një proces është në një lak pritjeje, ai mund të marrë të gjitha burimet e CPU-së fizike, duke mos lejuar që LP-ja e dytë të funksionojë. Kështu, performanca gjatë përdorimit të Hyper-Threading ndonjëherë mund të bjerë (deri në 20%). Për të parandaluar këtë, Intel rekomandon përdorimin e udhëzimit PAUSE (i prezantuar në IA-32 që nga Pentium 4) në vend të sytheve boshe të pritjes. Një punë mjaft serioze është duke u zhvilluar edhe për optimizimin automatik dhe gjysmë-automatik të kodit gjatë përpilimit - për shembull, përpiluesit e serisë Intel OpenMP C ++ / Fortran Compilers () kanë bërë përparim të rëndësishëm në këtë drejtim.

Një qëllim tjetër i zbatimit të parë të Hyper-Threading, sipas Intel, ishte minimizimi i rritjes së numrit të tranzistorëve, zonës së ndarjes dhe konsumit të energjisë me një rritje të dukshme të performancës. Pjesa e parë e këtij angazhimi tashmë është përmbushur: shtimi i mbështetjes Hyper-Threading në Xeon / Xeon MP ka rritur zonën e mbulimit dhe konsumin e energjisë me më pak se 5%. Çfarë ndodhi me pjesën e dytë (performancën), duhet të kontrollojmë ende.

Pjesa praktike

Për arsye të dukshme, ne nuk testuam sistemet e serverëve me 4 procesorë në një MP Xeon me Hyper-Threading të aktivizuar. Së pari, kërkon mjaft kohë. Dhe së dyti, nëse vendosim për një sukses të tillë - gjithsesi, tani, më pak se një muaj pas njoftimit zyrtar, është absolutisht joreale të marrim këtë pajisje të shtrenjtë. Prandaj, u vendos që të kufizohemi në të njëjtin sistem me dy Intel Xeon 2.2 GHz, mbi të cilat u krye testimi i parë i këtyre procesorëve (shih lidhjen në fillim të artikullit). Sistemi bazohej në motherboard Supermicro P4DC6 + (Chipset Intel i860), përmbante 512 MB RDRAM, një kartë video të bazuar në një çip GeForce3 (64 MB DDR, drejtues Detonator 21.85), një hard disk Western Digital WD300BB dhe 6X DVD- ROM; Windows 2000 Professional SP2 u përdor si një OS.

Së pari, disa përshtypje të përgjithshme. Kur instaloni një Xeon me kernelin Prestonia, në fillim të sistemit, BIOS shfaq një mesazh për praninë e dy CPU-ve; nëse janë instaluar dy procesorë, përdoruesi sheh një mesazh për katër CPU. Sistemi operativ normalisht do të njohë "të dy procesorët", por vetëm nëse plotësohen dy kushte.

Së pari, në konfigurimin CMOS të versioneve më të fundit BIOS të tabelave Supermicro P4DCxx, është shfaqur artikulli Enable Hyper-Threading, pa të cilin OS njeh vetëm procesorin (ët) fizik. Së dyti, aftësitë ACPI përdoren për të informuar OS për praninë e procesorëve logjikë shtesë. Prandaj, për të aktivizuar Hyper-Threading, opsioni ACPI duhet të aktivizohet në CMOS Setup dhe HAL (Hardware Abstraction Layer) me mbështetje ACPI duhet gjithashtu të instalohet për vetë OS. Për fat të mirë, në Windows 2000, ndryshimi i HAL nga PC standard (ose MPS Uni- / Multiprocessor PC) në ACPI Uni- / Multiprocessor PC është i lehtë - duke zëvendësuar "shoferin e kompjuterit" në menaxherin e pajisjes. Në të njëjtën kohë, për Windows XP, mënyra e vetme ligjore për të migruar në ACPI HAL është riinstalimi i sistemit mbi instalimin ekzistues.

Por tani të gjitha përgatitjet janë bërë, dhe Windows 2000 Pro ynë tashmë beson me vendosmëri se funksionon në një sistem me procesor të dyfishtë (megjithëse në fakt ka vetëm një procesor të instaluar). Tani, tradicionalisht, është koha për të vendosur për qëllimet e testimit. Pra ne duam:

  • Vlerësoni ndikimin e Hyper-Threading në performancën e aplikacioneve të klasave të ndryshme.
  • Krahasoni këtë efekt me efektin e instalimit të një procesori të dytë.
  • Kontrolloni se si burimet "të drejta" i jepen procesorit logjik aktiv kur LP i dytë është i papunë.

Për të vlerësuar performancën, ne morëm një sërë aplikacionesh tashmë të njohura për lexuesit tanë dhe të përdorura në testimin e sistemeve të stacioneve të punës. Le të fillojmë nga fundi dhe të kontrollojmë "drejtësinë" e CPU-ve logjike. Gjithçka është jashtëzakonisht e thjeshtë: fillimisht ne kryejmë teste në një procesor me Hyper-Threading të çaktivizuar, dhe më pas e përsërisim procesin, duke mundësuar Hyper-Threading dhe duke përdorur vetëm një nga dy CPU-të logjike (duke përdorur Task Manager). Meqenëse në këtë rast ne jemi të interesuar vetëm për vlerat relative, rezultatet e të gjitha testeve reduktohen në "më e madhe është më mirë" dhe normalizohen (treguesit e një sistemi njëprocesorësh pa Hyper-Threading merren si njësi).

Epo, siç mund ta shihni, premtimet e Intel-it janë përmbushur këtu: me vetëm një fije aktive, performanca e secilit prej dy LP-ve është saktësisht e barabartë me shpejtësinë e një CPU fizike pa Hyper-Threading. Një LP boshe (si LP0 ashtu edhe LP1) është pezulluar në të vërtetë dhe burimet e përbashkëta, për aq sa mund të gjykojmë nga rezultatet e marra, transferohen plotësisht në përdorimin e LP aktive.

Prandaj, nxjerrim përfundimin e parë: dy procesorë logjikë janë në të vërtetë të barabartë, dhe aktivizimi i Hyper-Threading nuk "ndërhyn" në punën e një thread (gjë që në vetvete nuk është e keqe). Tani le të shohim nëse kjo përfshirje "ndihmon", dhe nëse po, ku dhe si?

Rendering... Rezultatet e katër testeve në paketat e modelimit 3D 3D Studio MAX 4.26, Lightwave 7b dhe A | W Maya 4.0.1 kombinohen në një diagram për shkak të ngjashmërisë së tyre.

Në të katër rastet (për Lightwave - dy skena të ndryshme), ngarkesa e CPU me një procesor me Hyper-Threading të çaktivizuar mbahet pothuajse gjithmonë në 100%. Sidoqoftë, kur aktivizohet Hyper-Threading, llogaritja e skenës përshpejtohet (si rezultat i së cilës kishim edhe një shaka për ngarkesën e CPU mbi 100%). Në tre teste, mund të shohim një rritje prej 14-18% të performancës nga Hyper-Threading - nga njëra anë, jo shumë në krahasim me CPU-në e dytë, por nga ana tjetër, është mjaft e mirë, duke pasur parasysh efektin "falas". të këtij efekti. Në një nga dy testet me Lightwave, fitimi i performancës është praktikisht zero (me sa duket, kjo është për shkak të specifikës së këtij aplikacioni, i cili është plot me çuditshmëri). Por askund nuk ka asnjë rezultat negativ dhe një rritje e dukshme në tre rastet e tjera është inkurajuese. Dhe kjo përkundër faktit se proceset e paraqitjes paralele bëjnë një punë të ngjashme dhe me shumë mundësi mund të mos jetë mënyra më e mirë për të përdorur njëkohësisht burimet e CPU-së fizike.

Photoshop dhe kodimi MP3... Kodeku GOGO-no-coda 2.39c është një nga të paktët që mbështet SMP dhe tregon një përfitim prej 34% të performancës nga teknologjia me përpunues të dyfishtë. Në të njëjtën kohë, efekti i Hyper-Threading në këtë rast është zero (ne nuk e konsiderojmë një ndryshim prej 3% si të rëndësishëm). Por në testin me Photoshop 6.0.1 (një skrip i përbërë nga një grup i madh komandash dhe filtrash) mund të shihni një ngadalësim kur aktivizohet Hyper-Threading, megjithëse CPU-ja e dytë fizike shton 12% performancë në këtë rast. Ky është, në fakt, rasti i parë kur Hyper-Threading shkakton një rënie të performancës ...

OpenGL profesionale... Dihet prej kohësh që SPEC ViewPerf dhe shumë aplikacione të tjera OpenGL shpesh ngadalësohen në sistemet SMP.

OpenGL dhe procesori i dyfishtë: Pse ata nuk janë miq

Shumë herë në artikujt tanë, ne kemi tërhequr vëmendjen e lexuesve për faktin se platformat me procesorë të dyfishtë, kur kryejnë teste profesionale OpenGL, shumë rrallë tregojnë ndonjë avantazh të rëndësishëm ndaj atyre me një procesor. Për më tepër, shpesh ka raste kur instalimi i një procesori të dytë, përkundrazi, degradon performancën e sistemit kur jep skena dinamike tre-dimensionale.

Natyrisht, jo vetëm ne e vumë re këtë çudi. Disa testues thjesht e anashkaluan këtë fakt në heshtje - për shembull, duke përmendur rezultatet e standardit të SPEC ViewPerf vetëm për konfigurimet me dy procesorë, duke shmangur kështu shpjegimin "pse një sistem me dy procesorë është më i ngadalshëm?" Të tjerët bënë të gjitha supozimet e mundshme fantastike në lidhje me koherencën e cache-ve, nevojën për ta ruajtur atë, shpenzimet e përgjithshme që rezulton, etj. Dhe për disa arsye askush nuk u befasua që, për shembull, përpunuesit ishin të padurueshëm për të monitoruar koherencën e përpunuesve pikërisht gjatë paraqitjes së OpenGL me dritare (në thelbin e tij "llogaritës" nuk është shumë i ndryshëm nga çdo problem tjetër llogaritës).

Në fakt, shpjegimi, për mendimin tonë, është shumë më i thjeshtë. Siç e dini, një aplikacion mund të funksionojë në dy procesorë më shpejt se në një nëse:

  • ka më shumë se dy ose më shumë fije që funksionojnë në të njëjtën kohë;
  • këto threads nuk ndërhyjnë në ekzekutimin e njëri-tjetrit - për shembull, ato nuk konkurrojnë për një burim të përbashkët si një pajisje ruajtëse e jashtme ose një ndërfaqe rrjeti.

Tani le të hedhim një vështrim të thjeshtuar se si duket interpretimi i OpenGL kur kryhet nga dy thread. Nëse një aplikacion, duke "duke parë" dy procesorë, krijon dy fije të interpretimit OpenGL, atëherë për secilën prej tyre, sipas rregullave të OpenGL, krijohet konteksti i tij gl. Prandaj, çdo thread jepet në kontekstin e vet gl. Por problemi është se për dritaren në të cilën shfaqet imazhi, vetëm një kontekst gl mund të jetë aktual në të njëjtën kohë. Prandaj, fijet në këtë rast thjesht "nga ana tjetër" nxjerrin imazhin e krijuar në dritare, duke e bërë në mënyrë alternative kontekstin e tyre aktual. Eshtë e panevojshme të thuhet se ky "alternim i konteksteve" mund të jetë shumë i shtrenjtë për sa i përket shpenzimeve?

Gjithashtu, për shembull, do të japim grafikët e përdorimit të dy CPU-ve në disa aplikacione që shfaqin skena OpenGL. Të gjitha matjet janë marrë në një platformë me konfigurimin e mëposhtëm:

  • një ose dy Intel Xeon 2.2 GHz (Hyper-Threading i çaktivizuar);
  • 512 MB memorie RDRAM;
  • Supermicro P4DC6 + motherboard;
  • Karta video ASUS V8200 Deluxe (NVidia GeForce3, 64 MB DDR SDRAM, drejtues Detonator 21,85);
  • Windows 2000 Professional SP2
  • modaliteti i videos 1280x1024x32 bpp, 85 Hz, Vsync i çaktivizuar.

Blu dhe e kuqe tregojnë grafikët e përdorimit të CPU 0 dhe CPU 1, respektivisht. Vija në mes është grafiku përfundimtar i përdorimit të CPU-së. Tre grafikët korrespondojnë me dy skena nga 3D Studio MAX 4.26 dhe një pjesë të standardit SPEC ViewPerf (AWadvs-04).


Përdorimi i CPU: Animation 3D Studio MAX 4.26 - Anibal (me manipulatorë) .max


Përdorimi i CPU: Animacion 3D Studio MAX 4.26 - Rabbit.max


Përdorimi i CPU: SPEC ViewPerf 6.1.2 - AWadvs-04

I njëjti model përsëritet në shumë aplikacione të tjera që përdorin OpenGL. Dy procesorë nuk shqetësohen fare me punën, dhe përdorimi total i CPU rezulton të jetë në nivelin 50-60%. Në të njëjtën kohë, për një sistem me një procesor, në të gjitha këto raste, Përdorimi i CPU-së mbahet me siguri në 100%.

Prandaj, nuk është për t'u habitur që kaq shumë aplikacione OpenGL nuk shpejtohen shumë në sistemet e dyfishta. Epo, fakti që ato ndonjëherë edhe ngadalësohen, për mendimin tonë, ka një shpjegim krejtësisht logjik.

Mund të themi se me dy CPU logjike rënia e performancës është edhe më e rëndësishme, gjë që është mjaft e kuptueshme: dy procesorë logjik ndërhyjnë me njëri-tjetrin në të njëjtën mënyrë si dy ata fizikë. Por performanca e tyre e përgjithshme, natyrisht, rezulton të jetë më e ulët, kështu që kur aktivizohet Hyper-Threading, zvogëlohet edhe më shumë se kur funksionojnë dy CPU fizike. Rezultati është i parashikueshëm dhe përfundimi është i thjeshtë: Hyper-Threading, si SMP "e vërtetë", ndonjëherë është kundërindikuar për OpenGL.

aplikacionet CAD... Përfundimi i mëparshëm konfirmohet nga rezultatet e dy testeve CAD - SPECapc për SolidEdge V10 dhe SPECapc për SolidWorks. Performanca grafike e këtyre testeve për Hyper-Threading është e ngjashme (edhe pse në rastin e sistemit SMP për SolidEdge V10, rezultati është pak më i lartë). Por rezultatet e testeve të CPU_Score që ngarkojnë procesorin të bëjnë të mendosh: 5-10% fitim nga SMP dhe 14-19% ngadalësim nga Hyper-Threading.

Por në fund, Intel sinqerisht pranon në disa raste mundësinë e degradimit të performancës gjatë Hyper-Threading - për shembull, kur përdorni sythe boshe pritjeje. Mund të supozojmë vetëm se kjo është arsyeja (një studim i detajuar i kodit SolidEdge dhe SolidWorks është përtej qëllimit të këtij artikulli). Në fund të fundit, të gjithë e dinë konservatorizmin e zhvilluesve të CAD që preferojnë besueshmërinë e provuar dhe nuk janë veçanërisht me nxitim për të rishkruar kodin duke marrë parasysh tendencat e reja në programim.

Duke përmbledhur, ose "Vëmendje, pyetja e duhur"

Hyper-Threading funksionon, nuk ka dyshim për këtë. Sigurisht, teknologjia nuk është universale: ka aplikacione që janë "më keq" nga Hyper-Threading dhe nëse kjo teknologji përhapet, do të ishte e dëshirueshme që ato të modifikoheshin. Por a nuk ndodhi e njëjta gjë në kohën e duhur me MMX dhe SSE dhe vazhdon të ndodhë me SSE2? ..

Megjithatë, kjo ngre pyetjen e zbatueshmërisë së kësaj teknologjie në realitetet tona. Ne do të heqim menjëherë versionin e një sistemi me një procesor të vetëm të bazuar në Xeon me Hyper-Threading (ose le të jetë vetëm i përkohshëm, në pritje të blerjes së një procesori të dytë): edhe një rritje prej 30% e performancës nuk e justifikon çmimin në në çdo mënyrë - atëherë është më mirë të blini një Pentium 4 të rregullt. Numri i CPU-ve mbetet nga dy ose më shumë.

Tani le të imagjinojmë se po blejmë një sistem Xeon me procesor të dyfishtë (të themi, me Windows 2000 / XP Professional). Dy CPU janë instaluar, Hyper-Threading është aktivizuar, BIOS gjen katër procesorë logjikë, tani, si mund të heqim ... Stop. Por sa procesorë do të shohë sistemi ynë operativ? Është e drejtë, dy. Vetëm dy, pasi thjesht nuk është projektuar për një numër më të madh. Këta do të jenë dy procesorë fizikë, domethënë, gjithçka do të funksionojë saktësisht njësoj si me Hyper-Threading me aftësi të kufizuara - jo më ngadalë (dy CPU "shtesë" logjike thjesht do të ndalojnë), por jo më shpejt (verifikuar nga teste shtesë, rezultatet nuk janë janë dhënë për shkak të dëshmisë së tyre të plotë). Hmmm, pak e këndshme ...

Çfarë ka mbetur? Epo, vërtet mos e vendosni Serverin e Avancuar ose Serverin .NET në stacionin tonë të punës? Jo, sistemi do të instalohet vetë, do të njohë të katër procesorët logjikë dhe do të funksionojë. Por sistemi operativ i serverit duket pak i çuditshëm në një stacion pune, për ta thënë butë (për të mos përmendur aspektet financiare). Rasti i vetëm i arsyeshëm është kur sistemi ynë Xeon me procesor të dyfishtë do të veprojë si një server (të paktën disa koleksionistë kanë nisur tashmë prodhimin e serverëve në përpunuesit e stacionit të punës Xeon pa hezitim). Por për stacionet e punës të dyfishtë me sisteme operative përkatëse, zbatueshmëria e Hyper-Threading mbetet e diskutueshme. Intel tani po mbron në mënyrë aktive licencimin e OS bazuar në numrin e CPU-ve jo logjike, por fizike. Diskutimet janë ende duke vazhduar, dhe, në përgjithësi, shumë varet nëse do të shohim një OS për stacionet e punës me mbështetje për katër procesorë.

Epo, me serverët, gjithçka del mjaft thjesht. Për shembull, Windows 2000 Advanced Server, i instaluar në një sistem Xeon me procesor të dyfishtë me Hyper-Threading të aktivizuar, do të "shohë" katër procesorë logjikë dhe do të funksionojë pa probleme në të. Për të vlerësuar përfitimet e Hyper-Threading në sistemet e serverëve, ne paraqesim rezultatet nga Intel Microprocessor Software Labs për sistemet Xeon MP me procesorë të dyfishtë dhe disa aplikacione të serverëve të Microsoft.

Një rritje prej 20-30% e performancës për një server me dy procesorë "falas" është më se joshëse (veçanërisht në krahasim me blerjen e një sistemi "të vërtetë" me 4 procesorë).

Pra, rezulton se për momentin zbatueshmëria praktike e Hyper-Threading është e mundur vetëm në serverë. Problemi me stacionet e punës varet nga zgjidhja e licencimit të OS. Megjithatë, një aplikim tjetër i Hyper-Threading është mjaft realist - nëse edhe procesorët desktop marrin mbështetje për këtë teknologji. Për shembull (le të fantazojmë), pse është instaluar një sistem me Pentium 4 me mbështetje Hyper-Threading dhe Windows 2000 / XP Professional me mbështetje SMP? - nga serverët në sistemet desktop dhe celular.

  • Tutorial

Në këtë artikull do të përpiqem të përshkruaj terminologjinë e përdorur për të përshkruar sisteme të afta për të ekzekutuar programe të shumta paralelisht, domethënë, multicore, multiprocessor, multithreaded. Llojet e ndryshme të paralelizmit në CPU-të IA-32 janë shfaqur në kohë të ndryshme dhe në një mënyrë disi jokonsistente. Është shumë e lehtë të ngatërrohesh në gjithë këtë, veçanërisht duke pasur parasysh që sistemet operative fshehin me kujdes detajet nga aplikacionet jo shumë të sofistikuara.

Qëllimi i artikullit është të tregojë se me gjithë larminë e konfigurimeve të mundshme të sistemeve multiprocesorike, multicore dhe multithreaded për programet që ekzekutohen në to, krijohen mundësi si për abstraksion (duke shpërfillur dallimet) ashtu edhe për të marrë parasysh specifikat (aftësia për të zbuloni në mënyrë programore konfigurimin).

Paralajmërim për shenjat ®, ™, në artikull

Komenti im shpjegon pse punonjësit e kompanisë duhet të përdorin shenjat e të drejtave të autorit në komunikimet publike. Në këtë artikull, më është dashur t'i përdor ato mjaft shpesh.

CPU

Sigurisht, termi më i vjetër, më i përdorur dhe më i diskutueshëm është "përpunues".

Në botën moderne, një procesor është ajo që blejmë në një kuti të bukur me pakicë ose në një paketë jo shumë të bukur OEM. Një entitet i pandashëm që futet në një prizë në motherboard. Edhe nëse nuk ka lidhës dhe nuk mund të hiqet, domethënë nëse është ngjitur fort, është një çip.

Sistemet celulare (telefonat, tabletët, laptopët) dhe shumica e desktopëve kanë një procesor të vetëm. Stacionet e punës dhe serverët ndonjëherë mburren me dy ose më shumë procesorë në një motherboard të vetëm.

Mbështetja e shumë CPU-ve në një sistem kërkon ndryshime të shumta në dizajn. Së paku, është e nevojshme të sigurohet lidhja e tyre fizike (sigurimi i disa prizave në motherboard), të zgjidhen çështjet e identifikimit të procesorëve (shih më vonë në këtë artikull, si dhe shënimin tim të mëparshëm), duke negociuar akseset e kujtesës dhe dhënien e ndërprerjeve ( kontrolluesi i ndërprerjeve duhet të jetë në gjendje të drejtojë ndërprerjet për procesorë të shumtë) dhe, natyrisht, mbështetje nga sistemi operativ. Fatkeqësisht, nuk munda të gjeja një përmendje dokumentare të krijimit të sistemit të parë multiprocesorik në procesorët Intel, megjithatë, Wikipedia pretendon se Sequent Computer Systems i furnizoi ato tashmë në 1987 duke përdorur procesorët Intel 80386. Mbështetja e përhapur për çipa të shumtë në një sistem po bëhet e disponueshme duke filluar me Intel® Pentium.

Nëse ka disa procesorë, atëherë secili prej tyre ka lidhësin e vet në tabelë. Në të njëjtën kohë, secila prej tyre ka kopje të plota të pavarura të të gjitha burimeve, të tilla si regjistrat, ekzekutuesit, cache. Ata ndajnë një memorie të përbashkët - RAM. Kujtesa mund të lidhet me ta në mënyra të ndryshme dhe jo të parëndësishme, por kjo është një histori më vete përtej qëllimit të këtij artikulli. Është e rëndësishme që në çdo skenar për programet e ekzekutueshme të krijohet iluzioni i një memorie të përbashkët uniforme të disponueshme nga të gjithë procesorët e përfshirë në sistem.


Gati për ngritje! Intel® Desktop Board D5400XS

Bërthamë

Historikisht, multi-core në Intel IA-32 u shfaq më vonë se Intel® HyperThreading, por në hierarkinë logjike ajo vjen më pas.

Duket se nëse sistemi ka më shumë procesorë, atëherë performanca e tij është më e lartë (për detyrat që mund të përdorin të gjitha burimet). Megjithatë, nëse kostoja e komunikimit ndërmjet tyre është shumë e lartë, atëherë i gjithë fitimi nga paralelizmi vritet nga vonesat e gjata në transferimin e të dhënave të përbashkëta. Kjo është pikërisht ajo që vërehet në sistemet multiprocesorike - si fizikisht ashtu edhe logjikisht, ato janë shumë larg njëri-tjetrit. Për të komunikuar në mënyrë efektive në një mjedis të tillë, duhet të shpiken autobusë të specializuar si Intel® QuickPath Interconnect. Konsumi i energjisë, madhësia dhe çmimi i zgjidhjes përfundimtare, natyrisht, nuk ulen nga e gjithë kjo. Integrimi i lartë i komponentëve duhet të vijë në shpëtim - qarqet që ekzekutojnë pjesë të një programi paralel duhet të tërhiqen më afër njëri-tjetrit, mundësisht në një kristal. Me fjalë të tjera, një procesor duhet të organizojë disa bërthamat, në çdo gjë identike me njëra-tjetrën, por duke punuar në mënyrë të pavarur.

Procesorët e parë me shumë bërthama IA-32 të Intel u prezantuan në 2005. Që atëherë, numri mesatar i bërthamave në platformat e serverëve, desktopit dhe tani celularë është rritur në mënyrë të qëndrueshme.

Ndryshe nga dy procesorë me një bërthamë në të njëjtin sistem, që ndajnë vetëm memorie, dy bërthama mund të ndajnë gjithashtu cache dhe burime të tjera që janë përgjegjëse për ndërveprim me memorien. Më shpesh, cache-et e nivelit të parë mbeten private (secila bërthamë ka të vetin), ndërsa niveli i dytë dhe i tretë mund të ndahen ose të ndara. Ky organizim i sistemit ju lejon të zvogëloni vonesat në shpërndarjen e të dhënave midis bërthamave fqinje, veçanërisht nëse ata janë duke punuar në një detyrë të përbashkët.


Një mikrograf i një procesori me katër bërthama Intel, me emrin e koduar Nehalem. Bërthamat e veçanta, një memorie e përbashkët L3, si dhe lidhje QPI me procesorë të tjerë dhe një kontrollues i përbashkët i memories janë ndarë.

Hiperthreading

Deri në vitin 2002, e vetmja mënyrë për të marrë një sistem IA-32 të aftë për të ekzekutuar dy ose më shumë programe paralelisht ishte përdorimi i sistemeve me shumë procesor. Intel® Pentium® 4, si dhe linja Xeon, e koduar Foster (Netburst), prezantoi një teknologji të re - hiperthreading ose hiperthreading - Intel® HyperThreading (në tekstin e mëtejmë HT).

Nuk ka asgjë të re nën diell. HT është një rast i veçantë i asaj që literatura e quan simultaneous multithreading (SMT). Ndryshe nga bërthamat "reale", të cilat janë kopje të plota dhe të pavarura, në rastin e HT, vetëm një pjesë e nyjeve të brendshme dublikohen në një procesor, kryesisht përgjegjës për ruajtjen e regjistrave shtetërorë arkitektonikë. Nyjet ekzekutive përgjegjëse për organizimin dhe përpunimin e të dhënave mbeten në njëjës, dhe në çdo kohë të caktuar përdoren nga më së shumti një prej fijeve. Ashtu si kernelet, hiperthread-et ndajnë cache mes tyre, por nga cili nivel varet nga sistemi specifik.

Nuk do të përpiqem të shpjegoj të gjitha të mirat dhe të këqijat e modeleve me SMT në përgjithësi dhe me HT në veçanti. Lexuesi i interesuar mund të gjejë një diskutim mjaft të detajuar të teknologjisë në shumë burime, dhe sigurisht në Wikipedia. Sidoqoftë, do të vërej pikën e mëposhtme të rëndësishme, e cila shpjegon kufijtë aktualë të numrit të hiperthreadave në produktet reale.

Kufijtë e transmetimit
Kur justifikohet prania e multicore "të pandershme" në formën e HT? Nëse një thread aplikacioni nuk është në gjendje të ngarkojë të gjitha nyjet ekzekutuese brenda kernelit, atëherë ato mund të "huazohen" në një thread tjetër. Kjo është tipike për aplikacionet që kanë një "fyt të ngushtë" jo në llogaritje, por në aksesin e të dhënave, domethënë, ata shpesh gjenerojnë gabime në cache dhe duhet të presin që të dhënat të dorëzohen nga memoria. Në këtë kohë, kerneli pa HT do të detyrohet të jetë i papunë. Prania e HT ju lejon të kaloni shpejt nyjet e lira ekzekutuese në një gjendje të ndryshme arkitekturore (pasi është thjesht e dyfishuar) dhe të ekzekutoni udhëzimet e tij. Ky është një rast i veçantë i një teknike të quajtur fshehja e vonesës, kur një operacion i gjatë, gjatë të cilit burimet e dobishme janë të papunë, maskohet nga ekzekutimi paralel i detyrave të tjera. Nëse aplikacioni tashmë ka një përdorim të lartë të burimeve të kernelit, prania e hiperthreads nuk do ta lejojë atë të përshpejtohet - këtu nevojiten kernelet "të ndershëm".

Skenarët tipikë të aplikacioneve për desktop dhe server për arkitekturat e makinerive me qëllime të përgjithshme kanë potencialin për njëkohësi të aktivizuar nga HT. Megjithatë, ky potencial "shfrytëzohet" shpejt. Ndoshta për këtë arsye, në pothuajse të gjithë procesorët IA-32, numri i hiperthreadave të harduerit nuk i kalon dy. Në skenarët tipikë, fitimi nga përdorimi i tre ose më shumë hiperthreadave do të ishte i vogël, por humbja në madhësinë e kristalit, konsumin e energjisë dhe koston është e konsiderueshme.

Një situatë e ndryshme vërehet në detyrat tipike të kryera në përshpejtuesit video. Prandaj, këto arkitektura karakterizohen nga përdorimi i teknikave SMT me një numër të madh të thread-ave. Meqenëse bashkëprocesorët Intel® Xeon Phi (të prezantuar në 2010) janë ideologjikisht dhe gjenealogjikisht mjaft afër me kartat video, ata mund të jenë katër hiperthreading në çdo bërthamë - një konfigurim unik për IA-32.

Procesor logjik

Nga tre "nivelet" e përshkruara të paralelizmit (procesorë, bërthama, hiperthreads), disa ose të gjitha mund të mungojnë në një sistem të caktuar. Kjo ndikohet nga cilësimet e BIOS (multi-core dhe multithreading janë çaktivizuar në mënyrë të pavarur), veçoritë mikroarkitekturore (për shembull, HT mungonte në Intel® Core ™ Duo, por u kthye me lëshimin e Nehalem) dhe ngjarjet e sistemit (serverët me shumë procesorë mund të kthehen fikni procesorët e dështuar në rast të keqfunksionimeve dhe vazhdoni të "fluturoni" në pjesën tjetër). Si është i dukshëm ky kopsht zoologjik me shumë nivele të konkurencës për sistemin operativ dhe, në fund të fundit, për aplikacionin?

Më tej, për lehtësi, ne shënojmë numrin e përpunuesve, bërthamave dhe fijeve në një sistem me trefishin ( x, y, z), ku xështë numri i procesorëve yështë numri i bërthamave në çdo procesor, dhe z- numri i hiperthreadave në çdo bërthamë. Këtu e tutje, unë do ta quaj këtë treshe topologji- një term i mirëpërcaktuar që ka pak të bëjë me seksionin e matematikës. Puna fq = xyz përcakton numrin e entiteteve të emërtuara procesorë logjik sistemeve. Ai përcakton numrin total të konteksteve të pavarura të procesit të aplikimit të njëkohshëm në një sistem memorie të përbashkët që sistemi operativ është i detyruar të marrë parasysh. Them "i detyruar" sepse nuk mund të kontrollojë rendin e ekzekutimit të dy proceseve në procesorë të ndryshëm logjik. Kjo vlen edhe për hiper-thread-et: megjithëse ato punojnë "në mënyrë sekuenciale" në të njëjtën bërthamë, rendi specifik diktohet nga hardueri dhe nuk është i disponueshëm për monitorim ose kontroll të programeve.

Më shpesh, sistemi operativ fsheh tiparet e topologjisë fizike të sistemit në të cilin funksionon nga aplikacionet fundore. Për shembull, tre topologjitë e mëposhtme: (2, 1, 1), (1, 2, 1) dhe (1, 1, 2) - OS do të përfaqësojë në formën e dy procesorëve logjikë, megjithëse i pari prej tyre ka dy procesorë, i dyti - dy bërthama, dhe i treti ka vetëm dy fije.


Windows Task Manager tregon 8 procesorë logjikë; por sa është në procesorë, bërthama dhe hiperthreads?


Top Linux tregon 4 procesorë logjikë.

Kjo është mjaft e përshtatshme për zhvilluesit e aplikacioneve - ata nuk duhet të merren me veçoritë e harduerit që shpesh janë të parëndësishme për ta.

Përkufizimi i topologjisë në mënyrë programore

Natyrisht, abstragimi i topologjisë në një numër të vetëm procesorësh logjikë në disa raste krijon arsye të mjaftueshme për konfuzion dhe keqkuptime (në mosmarrëveshjet e nxehta të internetit). Aplikacionet kompjuterike që duan të shtrydhin performancën maksimale nga hardueri kërkojnë kontroll të detajuar se ku do të vendosen thread-et e tyre: më afër njëri-tjetrit në hiper-thread-et fqinje, ose, anasjelltas, më larg në procesorë të ndryshëm. Shpejtësia e komunikimit ndërmjet procesorëve logjikë në një bërthamë ose procesor të vetëm është shumë më e lartë se shpejtësia e transferimit të të dhënave ndërmjet procesorëve. Mundësia e heterogjenitetit në organizimin e RAM-it gjithashtu e ndërlikon pamjen.

Informacioni në lidhje me topologjinë e sistemit në tërësi, si dhe pozicionin e secilit procesor logjik në IA-32, është i disponueshëm duke përdorur udhëzimin CPUID. Që nga shfaqja e sistemeve të para multiprocesorike, skema logjike e identifikimit të procesorit është zgjeruar disa herë. Deri më sot, pjesë të tij gjenden në fletët 1, 4 dhe 11 të CPUID. Cila fletë për të parë mund të përcaktohet nga grafiku i mëposhtëm i rrjedhës i marrë nga artikulli:

Nuk do t'ju mërzit këtu me të gjitha detajet e pjesëve individuale të këtij algoritmi. Nëse lind interes, atëherë pjesa tjetër e këtij artikulli mund t'i kushtohet kësaj. Do t'i referohem lexuesit të interesuar, në të cilin kjo çështje trajtohet në mënyrë sa më të detajuar. Këtu fillimisht do të përshkruaj shkurtimisht se çfarë është APIC dhe si lidhet me topologjinë. Më pas merrni parasysh punën me fletën 0xB (njëmbëdhjetë në dhjetore), e cila aktualisht është fjala e fundit në "apicostroenie".

ID APIC
Local APIC (kontrolluesi i avancuar i ndërprerjeve i programueshëm) është një pajisje (tani pjesë e procesorit) përgjegjëse për të punuar me ndërprerjet që vijnë në një procesor logjik specifik. Çdo procesor logjik ka APIC-un e vet. Dhe secila prej tyre në sistem duhet të ketë një vlerë unike ID APIC. Ky numër përdoret nga kontrollorët e ndërprerjeve për adresimin gjatë dërgimit të mesazheve dhe nga të gjithë të tjerët (për shembull, sistemi operativ) për të identifikuar procesorët logjik. Specifikimi për këtë kontrollues ndërprerës ka evoluar nga Intel 8259 PIC përmes Dual PIC, APIC dhe xAPIC në x2APIC.

Aktualisht, gjerësia e numrit të ruajtur në ID APIC ka arritur plot 32 bit, megjithëse në të kaluarën ishte i kufizuar në 16, dhe madje edhe më herët - vetëm 8 bit. Në ditët e sotme, mbetjet e kohëve të vjetra janë të shpërndara në të gjithë CPUID-in, por të gjitha 32 bitet e ID APIC kthehen në CPUID.0xB.EDX. Çdo procesor logjik, duke ekzekutuar në mënyrë të pavarur instruksionin CPUID, do të kthejë vlerën e vet.

Sqarimi i lidhjeve familjare
Vlera APIC ID në vetvete nuk thotë asgjë për topologjinë. Për të zbuluar se cilët dy procesorë logjikë janë brenda një procesori fizik (d.m.th., ata janë "vëllezër" të hiperthread-ve), cilët dy janë brenda të njëjtit procesor dhe cilët janë në procesorë krejtësisht të ndryshëm, duhet të krahasoni vlerat e tyre APIC ID. Në varësi të shkallës së marrëdhënies, disa nga pjesët e tyre do të jenë të njëjta. Ky informacion gjendet në nënlistat CPUID.0xB, të cilat janë të koduara duke përdorur operandin ECX. Secila prej tyre përshkruan pozicionin e fushës së biteve të njërit prej niveleve të topologjisë në EAX (më saktë, numrin e biteve që duhet të zhvendosen në ID APIC në të djathtë për të hequr nivelet më të ulëta të topologjisë), si dhe lloji i këtij niveli - hiperthread, bërthamë ose procesor - në ECX.

Procesorët logjikë të vendosur brenda të njëjtës bërthamë do të kenë të njëjtat bit APIC ID, me përjashtim të atyre që i përkasin fushës SMT. Për procesorët logjikë në të njëjtin procesor, të gjithë bitët përveç fushave Core dhe SMT. Meqenëse numri i nënlistave për CPUID.0xB mund të rritet, kjo skemë do të lejojë mbështetjen e përshkrimit të topologjive me më shumë nivele, nëse lind nevoja në të ardhmen. Për më tepër, do të jetë e mundur të futen nivele të ndërmjetme midis atyre ekzistuese.

Një pasojë e rëndësishme e organizimit të kësaj skeme është se mund të ketë "vrima" në grupin e të gjitha ID-ve APIC të të gjithë procesorëve logjikë në sistem; ata nuk do të shkojnë radhazi. Për shembull, në një procesor me shumë bërthama me HT të fikur, të gjitha ID-të APIC mund të rezultojnë të jenë çift, pasi biti më pak i rëndësishëm përgjegjës për kodimin e numrit të hiperstreamit do të jetë gjithmonë zero.

Vini re se CPUID.0xB nuk është burimi i vetëm i informacionit për procesorët logjikë të disponueshëm për sistemin operativ. Një listë e të gjithë procesorëve të disponueshëm për të, së bashku me vlerat e tyre APIC ID, kodohen në tabelën MADT ACPI.

Sistemet operative dhe topologjia

Sistemet operative ofrojnë informacion logjik të topologjisë së procesorit për aplikacionet përmes ndërfaqeve të tyre.

Në Linux, informacioni i topologjisë përmbahet në skedarin pseudo / proc / cpuinfo dhe daljen e komandës dmidecode. Në shembullin e mëposhtëm, unë jam duke filtruar përmbajtjen e cpuinfo në disa sisteme me katër bërthama pa HT, duke lënë vetëm hyrjet që lidhen me topologjinë:

Teksti i fshehur

[email i mbrojtur]: ~ $ cat / proc / cpuinfo | grep "procesor \ | fizik \ id \ | vëllezërit e motrat \ | bërthama \ | bërthamat \ | apicid" procesori: 0 id fizik: 0 vëllezër e motra: 4 bërthama id: 0 bërthama të procesorit: 2 apicid: 0 apicid fillestar: 0 procesor: 1 id fizik: 0 vëllezër: 4 bërthama id: 0 bërthama të procesorit: 2 apicid: 1 apicid fillestar: 1 procesor: 2 id fizik: 0 vëllezër: 4 id bërthama: 1 bërthama të procesorit: 2 apicid: 2 apicid fillestar: 2 procesor: 3 id fizik: 0 vëllezër e motra: 4 bërthama id: 1 bërthama cpu: 2 apicid: 3 apicid fillestar: 3

Në FreeBSD, topologjia raportohet nëpërmjet mekanizmit sysctl në variablin kern.sched.topology_spec si XML:

Teksti i fshehur

[email i mbrojtur]: ~ $ sysctl kern.sched.topology_spec kern.sched.topology_spec: 0, 1, 2, 3, 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7 0, 1 grupi THREADGrupi SMT 2, 3 grupi THREADGrupi SMT 4, 5 grupi THREADGrupi SMT 6, 7 grupi THREADGrupi SMT

Në MS Windows 8, informacioni i topologjisë mund të shihet në Task Manager.

Artikujt kryesorë të lidhur