Multithreading
Inden for databehandling refererer multithreading til hardwareunderstøttelse af en processor til at udføre flere tråde . Denne teknik adskiller sig fra det underliggende multiprocessorsystem ved, at de individuelle tråde deler det samme adresserum, den samme cache og den samme oversættelses-lookaside-buffer .
Multithreading forbedrer kun programmers ydeevne , når de er udviklet ved at dele arbejdsbyrden på tværs af flere tråde, der kan køre parallelt . Mens multiprocessorsystemer er udstyret med flere uafhængige beregningsenheder, for hvilke udførelsen er effektivt parallel, har et multitrådsystem i stedet en enkelt beregningsenhed, der bedst bruges ved at køre flere tråde i den samme computerenhed. De to teknikker er komplementære: Nogle gange implementerer multiprocessorsystemer også multithreading for at forbedre systemets overordnede ydeevne.
Oversigt
Multithreading- paradigmet blev meget populært i slutningen af 1990'erne , da forskningen i stigende instruktionsniveau-parallelisme gik i stå. På det tidspunkt blev fokus flyttet fra at køre et enkelt program med maksimal hastighed til at optage computerenhederne så effektivt som muligt. Det viste sig, at mange programmer var sammensat af flere parallelle strømme eller kunne opdeles i flere parallelle tråde med små ændringer i kildekoden . Så en forbedring af udførelsen af parallelle tråde kunne forbedre den overordnede udførelse af programmerne. Dette har foranlediget udviklingen af multithreading-systemer og multiprocessor-systemer.
Denne forskningslinje har også ført til kritik, de vigtigste er:
- Flere tråde deler de samme ressourcer såsom cache- eller oversættelses-lookaside-buffere og kan derfor forstyrre hinanden og sænke farten.
- Ydeevnen af individuelle tråde forbedres ikke, men kan forringes, når samtidige tråde øges.
- Hardwareunderstøttelsen af multithreading og multiprocessorsystemer kræver også et bidrag fra softwaren , programmer og operativsystemer skal tilpasses til at håndtere denne nye mulighed.
Clustered Multi-Thread
Clustered Multi-Thread er en teknik, der tillader design af superskalære processorer uden at ofre cyklustid, men på bekostning af højere kommunikationsforsinkelser. [1]
Eksempler
En af hovedeksponenterne for denne arkitektur er AMD's Bulldozer-processorer [2]
Grovkornet multithreading
Grundidé
Grovkornet multithreading kræver, at processoren udfører en enkelt tråd, indtil den er blokeret af en hændelse, der normalt har en høj latenstid (for eksempel en cache-miss ), i dette tilfælde udfører processoren en anden tråd, der var klar til at køre. Udskiftningstråden forbliver kørende, indtil den første tråd er klar til at køre.
For eksempel:
- Sløjfe i: Tråd En instruktion j er indlæst
- Sløjfe i + 1: J + 1-instruktionen for tråd A er indlæst
- Cyklus i + 2: instruktion j + 2 i tråd A er indlæst, indlæsning forårsager en cache-miss med tilsvarende anmodning i hovedhukommelsen
- Cyklus i + 3: processoren starter udførelsen af tråd B
- Sløjfe i + 4: instruktion k for gevind B er indlæst
- Sløjfe i + 5: K + 1 instruktionen for tråd B er indlæst
Konceptuelt er det en teknik, der ligner den, der findes i den kooperative multitasking af RTOS -systemer , i disse operativsystemer, når et program skal vente på en begivenhed frivilligt prioriterer et andet program klar til at køre.
Terminologi
Ud over Grovkornet flertrådning er det defineret Blok eller Cooperativ multithreading.
Hardwareomkostninger
Multithreading antager, at skift mellem tråde sker hurtigt, denne teknik foretager overgangen i en clock-cyklus. For at opnå dette skal processoren replikere nogle komponenter for de to tråde, såsom de interne registre , programtælleren og nogle statusregistre. Tilpasningerne på softwareniveau er også relativt beskedne, da operativsystemet skal håndtere et beskedent antal tråde, der kører samtidigt.
Eksempler
Mange familier af mikrocontrollere og indlejrede processorer implementerer en styring af flere banker af registre for at tillade en hurtig kontekstswitch til håndtering af interrupts . Dette kan betragtes som en flertrådstype.
Finkornet multithreading
Grundidé
En meget stærk type multithreading kræver, at processoren skifter den løbende tråd ved hver clock-cyklus.
For eksempel:
- Sløjfe i: Tråd En instruktion j er indlæst
- Sløjfe i + 1: instruktion k for gevind B er indlæst
- Loop i + 2: Tråd C's h-instruktion er indlæst
Denne type multithreading bør fjerne afhængigheden af dataene for de enkelte tråde, og den bør derfor eliminere eller under alle omstændigheder reducere rørledningens stall på grund af afhængigheden af dataene. Da hver tråd formodes at fungere uafhængigt, vil de individuelle tråde udføre ikke-relaterede programmer, og derfor er der ringe chance for, at instruktionerne fra en tråd skal behandle resultaterne af en instruktion fra en anden tråd, der kører på det tidspunkt.
Konceptuelt ligner denne teknik den forebyggende multitasking, der findes i mange operativsystemer. Denne analogi antager, at hver programtidsslot er sat lig med én processorklokcyklus.
Terminologi
Denne multithreading-teknik blev oprindeligt kaldt tøndebehandling, men i øjeblikket definerer moderne terminologi denne teknik som forebyggende eller interleaved eller tidsskåret eller finkornet multithreading.
Hardwareomkostninger
Ud over komponenterne nævnt ovenfor kræver denne multithreading-teknik yderligere komponenter, der tildeler hver udførelsesinstruktion et ID, der gør det muligt at identificere ejertråden. Denne teknik kræver, at udvekslingen mellem tråde sker uden stall-clock-cyklusser og kræver derfor mere sofistikeret hardware; desuden kræver tilstedeværelsen af mange tråde, der kører parallelt, generelt mere rummelige caches og TLB'er for at kunne betjene de forskellige tråde effektivt.
Eksempler
- Denelcor Heterogene Element Processor
- Sun Microsystems UltraSPARC T1
- Lexra NetVortex
- MIPS kerne 34K, der implementerer Multi-Threaded ASE
- Raza Microelectronics Inc XLR
Samtidig multi-threading
Grundidé
Moderne processorer har flere beregningsenheder, der bruges ved at udføre instruktionerne fra individuelle tråde parallelt. Nuværende processorer er kun i stand til at udføre nogle få instruktioner parallelt med en enkelt tråd på grund af den reducerede parallelitet på det instruktionsniveau, som tråde normalt besidder. Så ofte forbliver nogle behandlingsenheder ubrugte under behandlingen. For at undgå dette kører Simultaneous Multi-threading (SMT) flere tråde samtidigt og bruger instruktionerne fra de enkelte tråde til at holde behandlingsenhederne altid i drift.
For eksempel:
- Sløjfe i: instruktion j og j + 1 fra tråd A, instruktion k fra tråd B, alt udført samtidigt
- Sløjfe i + 1: instruktion j + 2 fra gevind A, instruktion k + 1 fra gevind B, instruktion m fra gevind C, udføres samtidigt
- Sløjfe i + 2: instruktion j + 3 fra gevind A, instruktion m + 1 og m + 2 fra gevind C, udført samtidigt.
Terminologi
For at skelne det fra andre typer multithreading angiver udtrykket temporal multithreading en type multithreading, der tillader fuldførelsen af instruktioner for kun én tråd pr. clock-cyklus.
Hardwareomkostninger
Ud over den hardware, der kræves af den tidligere type multithreading, kræver denne teknik, at hvert trin i pipelinen sporer instruktionstråden, og da processoren har flere eksekveringsenheder, er der mange instruktioner at spore. Endvidere skal cachen og TLB'en være meget store for at kunne håndtere et så stort antal tråde, da der ved at udføre mange flere instruktioner parallelt gøres en meget intensiv brug af de førnævnte ressourcer.
Eksempler
- DEC Alpha EV8 (ufærdig)
- Intel Hyper-Threading
- IBM POWER5
- Strømbehandlingselementer i celleprocessoren
- Sun Microsystems UltraSPARC T2
Søg
I øjeblikket fokuserer sektorforskningen på teknikker, der giver dig mulighed for hurtigt at vælge den tråd, der skal udføres i tilfælde af en dødvande af tråden i udførelsen. En vigtig forskningslinje er trådplanlæggeren , som kan styres på hardwareniveau, på softwareniveau eller med en blandet tilgang.
Et andet forskningsområde vedrører den type hændelser, der skal forårsage en udveksling af løbende tråde (cache-miss, DMA, inter-thread-kommunikation osv.).
Hvis multithreading replikerer alle synlige softwarelogfiler, kan du bruge multithreading til at implementere virtuelle maskiner . Hver tråd skulle administrere sin egen virtuelle maskine, som om den blev udført af en separat processor og derfor endda kunne køre et helt uafhængigt operativsystem.
Noter
Relaterede emner
Eksterne links
- Transparenter om multithreading ( PDF ), på di.unito.it ( arkiveret den 9. juni 2006) .
- Multi-thread programmering , på University of Naples ( arkiveret den 23. april 2012) .