Prosessor Affinity

Innledning
Når en datamaskin har flere prosessorer, eller minst en multi-core prosessor, er det stort potensial for å øke ytelsen til applikasjoner, noe som kan gjøres på mange måter. I tidligere artikler har jeg skrevet om multi-threading programmer for å dra nytte av flere kjerner. I denne artikkelen vil jeg diskutere hva du kan gjøre for å dra nytte av flere kjerner mens du bruker programmer som er enkelt gjenget.
Processor affinitet er evnen til å lede en bestemt oppgave, eller annen prosess, for å bruke en bestemt kjerne. Hvorfor er dette nyttig? Vel, hvis en prosess går ofte det kan være rester av tidligere kjøringer av denne prosessen igjen i buffer for en gitt prosessor. Så, hvis prosessen er rettet mot bruk alltid den samme kjerne er det mulig at prosessen skal drives mer effektivt på grunn av den hurtigbufferen gjenbruk. En annen måte å bruke prosessoren affinitet ville være å lede bare en eller to ytelseskritiske prosesser til en kjerne, mens alle andre prosesser som er rettet mot andre kjerner. Dette skal sikre at når ytelseskritiske prosesser krever en kjerne vil være tilgjengelig.
Stille Prosessor Affinity i Vista
I Windows Vista kan du stille prosessor affinitet ved å åpne Oppgavebehandling.
Figur 1:
Windows Oppgavebehandling.

Velg en prosess som er oppført i kategorien Process. Høyre klikke på denne prosessen vil gi deg menyen vist i figur 2. Ved å velge menyelementet Set Affinity dialogen alternativet er vist i figur 3 vises


Figur 2:.
Høyre- Klikk på menyen.


Figur 3: dialog
prosessor affinitet alternativer.

i prosessoren affinitet dialogen alternativ, er hver kjerne er tilgjengelig for systemet vist. Ved å krysse av i boksen ved siden av en kjerne operativsystemet, i dette tilfellet Windows Vista, vil du tildele denne prosessen til at kjernen hver gang det kjøres. Ved å kontrollere mer enn én kjerne, vil operativsystemet forsøke å balansere belastningen mellom de spesifiserte kjerner.

Spesialiserte kjerner

Saken vist ovenfor er et typisk tilfelle, og er ganske enkel. I nær fremtid vil sette prosessoren affinitet blitt mye mer komplisert. Hvorfor? Fordi det ikke er noen grunn til at behandlingen kjerner for å være identiske. Når systemene begynne frakt med mange dusin kjerner er det sannsynlig at mange av disse kjerner vil være optimalisert for visse typer bruk. Dette vil skje på samme måte som hvordan en grafisk prosesseringsenhet (GPU) blir optimalisert for å utføre operasjoner til felles grafikkbehandling.

Så jeg er sikker på at du kan forestille deg at når det er dusinvis av kjerner, hvor de fleste er optimalisert for spesifikke operasjoner vil det være ganske komplisert oppgave å tildele prosessoren affinitet intelligent. Jeg tror at fremtidige versjoner av operativsystemer bør ta vare på dette samtidig gir bruker modifikasjoner.

Det kan skje ligner på hvordan jeg beskriver nedenfor.

Først når operativsystemet er installert, eller når ny maskinvare er lagt til, vil operativsystemet identifisere hver kjerne tilgjengelig. Dette vil være lik det den gjør nå, bortsett fra at det ville også sammenligne hver kjerne til en tidligere opprettet registret.

Dette registeret, som jeg vil kalle kjernen optimalisering registret, vil bli holdt av operativsystemet selskapet og være tilgjengelig for oppdateringer. Denne listen vil matche hver kjerne til operasjonene som den er optimalisert. Prosessor produsentene ville registrere sine kjerner med denne listen, eller det kan være en slags uavhengig gjennomgang av prosessorens optimaliseringer for å sikre et passende nivå av optimalisering (dette er sannsynligvis den foretrukne metoden) for å riktig plassere kjernene.

Konseptet med kjernen optimalisering registret kan selv gi en annen arena for konkurranse mellom operativsystemer; mens forskjellige operativsystemer vil sannsynligvis ha ulike kjerne optimalisering registre muligens også på ulike grader av detaljer. For eksempel kan ett operativsystem rangere en gitt kjerne på blir optimalisert for grafiske operasjoner, mens et annet operativsystem med en mer omfattende kjerne optimalisering registret kan rangere på samme kjerne på blir optimalisert til 3d grafiske operasjoner

For det andre, etter at systemet kjenner til alle kjerner som er tilgjengelige og har kontrollert dem mot kjerne optimalisering registeret, må operativsystemet for å tilordne hver prosess til en eller flere kjerner basert på de typer operasjoner som kreves av prosessen. Under installasjon av operativsystemet operativsystemet kan matche alle forhåndsinstallert programvare til en eller flere kjerner samt matchende alle driftssystemprosesser ett eller flere kjerner. Passer disse prosesser til de tilgjengelige kjerner vil være en vanskelig oppgave.

Hvordan ville operativsystemet vite hva slags operasjoner som kreves av prosessene i et gitt stykke programvare? Dette er et krav for å kunne intelligent tildele prosessor affinitet. Det kan være en programvarevirksomheten register, hvor programvaren er registrert i registeret sammen med hvilke typer operasjoner som kreves av programvaren. Men, jeg er ikke overbevist om at dette er en god idé. Programvare har en så raske tempoet i utviklingen som jeg tviler på denne typen register kunne gjøres praktisk. En bedre idé, etter min mening, er å gi programmatisk tilgang til kjernen optimalisering registeret slik at programvaren kan skrives til å sette sin egen tilhørighet. Dette er trolig best brukes av programvare installatører som vil sette affinitet (etter bekreftelse fra brukeren) under installasjonen av programvaren.

For det tredje ville det fortsatt må være en måte for en bruker å endre prosessoren affinitet. Dette bør gjøres i en likefrem måte som ligner fremgangsmåten for å sette prosessoren affinitet i Windows Vista som jeg beskrevet ovenfor. Selvfølgelig hvis det er dusinvis av kjerner tilgjengelig oppsettet for hvordan denne informasjonen vises må være annerledes, men uansett metode besluttes det skal være enkelt og rett frem. Dette kan være en måte for brukerne å tilpasse driften av sin egen datamaskin. Kanskje noen smarte brukere vil være uenig med affinitet valgt av operativsystemet, kanskje på grunn av en dårlig kjerne optimalisering registeret, og disse brukerne skal kunne endre affinitet for å matche sine ønsker.

Dette er vel og bra, men mange programmer vil kreve forskjellig optimalisert kjerner hele driften av programvare basert på innspill fra brukeren, eller fra andre programmer. Dette bringer meg til mitt fjerde punkt. (Vel, egentlig er det ikke egentlig et poeng i det hele tatt, jeg er bare forsvare mine ideer mot eventuelle lesere som kan føle jeg har neglisjert denne felles sak). Et stykke programvare skal ha tilgang til kjernen optimalisering registeret, som jeg forklarte i mitt andre punkt, dette er ikke bare tillater programvaren å sette sin affinitet under oppstart det gjør også programvare for å sette affinitet for ulike prosesser og for å endre affinitet til enhver tid. På samme måte hvis en installatør setter affinitet for det programmet er det ingenting som hindrer installasjonsprogrammet fra mange slektskap for de ulike typer prosesser mulige i programvaren.

Konklusjon

Den metoden jeg beskrev ovenfor for å sette prosessoren affinitet i systemer med mange kjerner noen som er optimalisert for ulike prosesser er bare én måte å oppnå dette. En annen metode jeg har lest om, og er uenig med, er der operativsystemet overvåker aktivitetene til et program og hvordan det er å utnytte kjernene og deretter tildele prosessen til kjernen føles det er riktig for den type prosess. Jeg tror dette er den rette måten å oppnå lastbalansering. Men hvis denne overvåkingen har som oppgave å bestemme den matematiske innholdet i prosessen, tror jeg at tid og prosessorkraft som kreves for å gjøre dette ville være bortkastet. Metoden jeg beskrev ovenfor gjør at en programvareutvikler å skifte denne avgjørelsen til installasjonsprosessen i stedet for ved kjøring. Jeg tror dette vil føre til en bedre, mer brukervennlig, sluttresultatet.