Prúdové spracovanie inštrukcií

Prúdové spracovania inštrukcií (pipelining) je urýchlenie činnosť procesora tým, že sa inštrukcie vykonávajú paralelne vo viacerých kanáloch (pipeline) procesora. Tento spôsob práce procesora sa používa vo viacerých typoch procesorov (CPU, GPU ...). Princíp vychádza z toho, že každá inštrukcia sa dá logicky rozložiť na viacero úkonov, ktoré na seba nadväzujú:

  • prenos inštrukcie z pamäti do procesora (IF Instruction Fetch)
  • dekódovanie (ID Instruction Decode) príkaz (inštrukcia) sa konvertuje do základných inštrukcií procesora (mikrooperácií), pre výkonné jednotky procesora.
  • výber operandu z pamäte (DA Data Access)
  • vykonanie inštrukcie (EX Execution)
  • zápis výsledku do pamäte (WB Write Back)

Každý úkon sa vykonáva v samostatnom bloku, resp. sa rozloží na jednoduchšie operácie a vykonáva sa v niekoľkých funkčných blokoch. Funkčný blok (functional unit) je skupina logických obvodov, ktoré vykonávajú spoločnú prácu (aritmeticko-logická jednotka). Pri klasickom spracovaní údajov sa ďalšia inštrukcia začne spracúvavať až po ukončení spracovania predchádzajúcej inštrukcie. Pri takomto spôsobe práce by funkčné bloky väčšinou čakali na ďalšie údaje. Prúdové spracovanie prebieha tak, že funkčné bloky sú zoradené logicky za sebou a tvoria kanál (pipe). Hneď ako spracovanie inštrukcie postúpi z prvého stupňa (funkčného bloku) do druhého, môže prísť ďalšia inštrukcia a vstúpiť do prvej fázy svojho spracovania. Tým sa dosiahne, že až na niekoľko výnimiek sa v každom hodinovom cykle ukončí jedna inštrukcia. Procesor má takýchto kanálov niekoľko (napr. P4 ich má 39, grafické GPU 12 a viac).

V niekoľkých prípadoch sa môže narušiť plynulosť inštrukčného toku (pipeline hazards):

  • dátová závislosť - vyskytuje sa, keď zdrojový operand jednej inštrukcie je cieľovým operandom predchádzajúcej inštrukcie.
  • konflikty riadenia -Vetviaca inštrukcia obsahuje nejakú podmienku, ktorá sa vyhodnotí a vykoná sa skok na adresu, ak je podmienka splnená. Do pipelinu však prichádzajú inštrukcie ešte predtým, ako sa podmienka vyhodnotí. Ak sa v okamihu vyhodnotenia podmienky zistí, že pipeline obsahuje inštrukcie z tej vetvy programu, ktorá sa nebude vykonávať, je potrebné pipeline vyprázdniť a načítať inštrukcie zo správnej vetvy.
  • štrukturálne konflikty - vyskytujú sa v prípade, že viac inštrukcií súčasne požaduje rovnaký prostriedok procesora, napr. súčasný prístup ku cache pamäti. V boji o prostriedok dostáva prednosť tá inštrukcia, ktorá je viac rozpracovaná (je dlhšie v pipeline), zatiaľ čo druhá inštrukcia (a všetky, ktoré za ňou nasledujú v pipeline) musí čakať, kým sa prostriedok uvoľní.

Dátové a štrukturálne konflikty sa riešia zdržaním pipelinu (zaradením prázdneho taktu). Súvislý tok inštrukcií sa tým naruší a vznikajú v ňom medzery v ktorých pracuje len jeden funkčný blok, ostatné stoja.