close

Multithreading

Hop til navigation Hop til søgning

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.

Image
En enkelt trådprocessor udfører kun én tråd ad gangen
Image
Et klassisk multiprocessorsystem kører kun én tråd pr. computerenhed

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:

  1. Sløjfe i: Tråd En instruktion j er indlæst
  2. Sløjfe i + 1: J + 1-instruktionen for tråd A er indlæst
  3. 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
  4. Cyklus i + 3: processoren starter udførelsen af ​​tråd B
  5. Sløjfe i + 4: instruktion k for gevind B er indlæst
  6. 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

Image
Et finkornet flertrådssystem planlægger flere tråde og udfører deres instruktioner samtidigt for at optage behandlingsenhederne bedst muligt.

Grundidé

En meget stærk type multithreading kræver, at processoren skifter den løbende tråd ved hver clock-cyklus.

For eksempel:

  1. Sløjfe i: Tråd En instruktion j er indlæst
  2. Sløjfe i + 1: instruktion k for gevind B er indlæst
  3. 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

Samtidig multi-threading

Image
Et simultan multi-threading-system planlægger flere tråde, men kører kun én pr. clock-cyklus

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:

  1. Sløjfe i: instruktion j og j + 1 fra tråd A, instruktion k fra tråd B, alt udført samtidigt
  2. Sløjfe i + 1: instruktion j + 2 fra gevind A, instruktion k + 1 fra gevind B, instruktion m fra gevind C, udføres samtidigt
  3. 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

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