Multithreading (számítógépes architektúra)

Interleaved/Temporal multithreadingEdit

Főcikk: Temporális többszálú futás

Durva szemcsés többszálú futásSzerkesztés

A többszálú futás legegyszerűbb típusa akkor következik be, amikor egy szál addig fut, amíg egy olyan esemény blokkolja, amely normál esetben hosszú késleltetésű leállást okozna. Ilyen akadozás lehet egy cache miss, amelynek a chipen kívüli memóriához kell hozzáférnie, ami több száz CPU-ciklusig is eltarthat, mire az adatok visszatérnek. Ahelyett, hogy megvárná az akadozás feloldódását, a szálakkal rendelkező processzor a végrehajtást egy másik, futtatásra kész szálra váltja át. Csak ha az előző szál adatai megérkeztek, akkor kerülne vissza az előző szál a futásra kész szálak listájára.

Példa:

    1. I ciklus: az A szál j utasítása kiadásra kerül.
    2. I + 1 ciklus: az A szál j + 1 utasítása kiadásra kerül.
    3. I + 2 ciklus: az A szál j + 2 utasítása kiadásra kerül, ami egy olyan betöltési utasítás, amely minden gyorsítótárban hiányzik.
    4. Ciklus i + 3: a szálütemezőt meghívják, átvált a B szálra.
    5. Ciklus i + 4: a B szálból k utasítás kerül kiadásra.
    6. Ciklus i + 5: a B szálból k + 1 utasítás kerül kiadásra.

    Koncepcionálisan ez hasonlít a valós idejű operációs rendszerekben használt kooperatív többfeladatos működéshez, amelyben a feladatok önként feladják a végrehajtási időt, amikor valamilyen eseményre kell várniuk. A többszálúságnak ezt a típusát blokkos, kooperatív vagy durva szemcsés többszálúságnak nevezik.

    A többszálúság hardvertámogatásának célja, hogy lehetővé tegye a gyors váltást egy blokkolt szál és egy másik, futásra kész szál között. E cél elérése érdekében a hardver költsége a program látható regisztereinek, valamint a processzor néhány vezérlőregiszterének (például a programszámlálónak) a lemásolása. Az egyik szálról egy másik szálra való váltás azt jelenti, hogy a hardver átvált az egyik regiszterkészlet használatáról egy másikra; az aktív szálak közötti hatékony váltáshoz minden aktív szálnak saját regiszterkészlettel kell rendelkeznie. Például két szál közötti gyors váltáshoz a regiszterhardvert kétszer kell instanciázni.

    A többszálú szálak kiegészítő hardveres támogatása lehetővé teszi, hogy a szálváltás egy CPU-ciklus alatt történjen, ami teljesítményjavulást eredményez. Emellett a kiegészítő hardver lehetővé teszi, hogy az egyes szálak úgy viselkedjenek, mintha egyedül futnának, és nem osztoznának hardveres erőforrásokon más szálakkal, így minimálisra csökkenthető az alkalmazásban és az operációs rendszerben a többszálúság támogatásához szükséges szoftveres változtatások száma.

    A mikrokontrollerek és beágyazott processzorok számos családja több regiszterbankkal rendelkezik a megszakítások gyors kontextusváltásának lehetővé tétele érdekében. Az ilyen sémák a felhasználói programszál és a megszakítási szálak közötti blokkos többszálúság egy típusának tekinthetők.

    Interleaved multithreadingEdit

    Főcikk: Barrel processzor

    A többszálú, egymásba ágyazott többszálú futás célja, hogy eltávolítson minden adatfüggő akadozást a végrehajtási csővezetékből. Mivel egy szál viszonylag független a többi száltól, kisebb az esélye annak, hogy az egyik csővezetési szakaszban lévő utasításnak szüksége lesz a csővezeték egy régebbi utasításának kimenetére. Fogalmilag hasonló az operációs rendszerekben használt preemptív multitaskinghoz; az analógia az lenne, hogy az egyes aktív szálaknak adott időszelet egy CPU-ciklus.

    Példa:

    1. i + 1 ciklus: a B szál utasítása kiadásra kerül.
    2. Ciklus i + 2: egy utasítás a C szálból kerül kiadásra.

    A többszálú feldolgozásnak ezt a típusát először hordófeldolgozásnak nevezték, amelyben a hordó vesszői a csővezeték szakaszait és azok végrehajtó szálait jelképezik. Az interleaved, preemptive, fine-grained vagy time-sliced multithreading modernebb terminológia.

    A blokk típusú multithreadingnél tárgyalt hardverköltségeken túlmenően az interleaved multithreadingnek további költsége, hogy minden egyes pipeline-szakasz követi az általa feldolgozott utasítás szálazonosítóját. Továbbá, mivel a csővezetékben több szál kerül egyidejűleg végrehajtásra, a megosztott erőforrásoknak, például a gyorsítótáraknak és a TLB-knek nagyobbnak kell lenniük, hogy elkerülhető legyen a különböző szálak közötti thrashing.

    Egyidejű többszálú futásSzerkesztés

    Fő cikk: Egyidejű többszálú futás

    A többszálú futás legfejlettebb típusa a szuperskalár processzorokra vonatkozik. Míg egy normál szuperskalár processzor CPU-ciklusonként több utasítást ad ki egyetlen szálból, a szimultán többszálúság (SMT) során egy szuperskalár processzor CPU-ciklusonként több szálból is adhat ki utasításokat. Felismerve, hogy minden egyes szál csak korlátozott mennyiségű utasításszintű párhuzamossággal rendelkezik, ez a fajta többszálú futás megpróbálja kihasználni a több szálon keresztül elérhető párhuzamosságot, hogy csökkentse a kihasználatlan kiadási résszel kapcsolatos pazarlást.

    Példa:

    1. i. ciklus: az A szál j és j + 1 utasítása és a B szál k utasítása egyidejűleg kerül kiadásra.
    2. i + 1. ciklus: az A szál j + 2 utasítása, a B szál k + 1 utasítása és a C szál m utasítása egyidejűleg kerül kiadásra.
    3. Ciklus i + 2: az A szálból származó j + 3 utasítás és a C szálból származó m + 1 és m + 2 utasítás egyidejűleg kerül kiadásra.

    A többszálú futás többi típusának az SMT-től való megkülönböztetésére az “időbeli többszálú futás” kifejezést használjuk, amikor egyszerre csak egy szál utasítása adható ki.

    Az egymásra épülő többszálú futásnál tárgyalt hardverköltségeken túlmenően az SMT további költsége, hogy minden egyes pipeline-szakasz nyomon követi az egyes feldolgozott utasítások szálazonosítóját. A megosztott erőforrásokat, például a gyorsítótárakat és a TLB-ket szintén a feldolgozott aktív szálak nagy számának megfelelően kell méretezni.

    A megvalósítások között szerepel a DEC (később Compaq) EV8 (nem fejeződött be), az Intel Hyper-Threading Technology, az IBM POWER5, a Sun Microsystems UltraSPARC T2, a Cray XMT, valamint az AMD Bulldozer és Zen mikroarchitektúrák.