Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
20
Shadery.ZaawansowaneprogramowaniewGLSL
wykonawcze1ļ4
ļ,nstrukcjawymagającapobranLadanychzpamLęcL
(konteksty)
BOokL
BOokwykonawczy1|
BOokwykonawczy2|
BOokwykonawczy3|
BOokwykonawczy4|
ALU1
ALU2
ALU...
ALUn
cykle
BW1
wkoOejce
gotowy
wkoOejce
BW2
gotowy
wkoOejce
czekanadane
BW3
gotowy
czekanadane
BW4
gotowy
czekanadane
czekanadane
gotowy
BW1
Rysunek2.3.Schematprzełączaniakontekstówwewnątrzmultiprocesoragrupyjednostek
wykonawczych.Każdyblokwykonawczyzłożonyznwątków,jestprzetwarzanyrównolegle
przeznjednostekwykonawczych(ALU).Zmianykontekstupowodująutrzymanieciągłej
pracynamultiprocesorzeipozwalająukrywaćopóźnieniapowodowaneprzestojami
2.2.4.Przetwarzanierozgałęzień
Przejdźmyterazdobardzoistotnejimplikacjistosowaniaopisanegowyżejgrupo-
wegomodeluprzetwarzania,gdziewdanymblokuwykonawczymkażdywątek
wykonujewtymsamymczasietęsamąinstrukcjęprogramu,aledlainnegozesta-
wudanych.Wstępniewszystkowydajesiębyćwporządku,sekwencyjnieprzecho-
dzimy,krokpokroku,pokolejnychinstrukcjach.Cojednakzdarzysięwsytuacji,
gdynatramynainstrukcjękontroliprzepływutaką,jakif-else,switch,czy
nawetpętlęzpewnymwarunkiemstopu.Przeanalizujmytąsytuacjedlatypowej
strukturyif-else.Każdyzwątkówoperujenainnychdanych,dlategomożesię
zdarzyć,żewarunekwejściadoblokuifzostaniespełniony(określonyjakopraw-
dziwy)tylkoprzezczęśćznich,ajegowynikdlaresztybędzienegatywny(okre-
ślonyjakofałszywy).Tymsamymdwiegrupywątkówbędąchciaływnastępnym
krokuprzeskoczyćdoinnegofragmentuprogramu,atoniejestdopuszczalneze
względunaarchitekturęgrupowego,aniejednostkowegowykonywaniainstrukcji.
Niestetytym,conastąpi,dokładniewtejsytuacji,jestkoniecznośćwykonania
obublokówwsposóbsekwencyjny,przechodzącpokażdejinstrukcjipokolei.
Najpierwwykonującblokif,anastępnieelse.Typowerozwiązaniestosowane
wtakiejsytuacjiprzezproducentówGPU,poleganaużyciumaski,nakładanejna
każdywątek,którapozwalaignorowaćobliczeniatychwątków,któreniepowin-
nybraćwnichudziału.Mimotokażdywątekitakodwiedzakażdąinstrukcję.
Wyobraźmysobieteraz,żeliczbatakichrozgałęzieńwprogramiejestznacznie
większa,gdziemamykilkanaścienastępującychposobieinstrukcjiif,if-else,
if-else,itd.Wnajbardziejpesymistycznymprzypadku,gdyrozgałęzieńjesttyle,
ilewątkówwblokuwykonawczymigdykażdywarunekjestspełnionydlatylko
jednegowątku,GPUbędziezmuszoneprzejśćprzezkażdągałąź.Problemten
dobrzezilustrowanonarysunku2.4.