Instrukciju konveijeru savienošana

Instrukciju konveijeru savienošana ir paņēmiens, ko izmanto mūsdienu mikroprocesoru, mikrokontrolleru un centrālo procesoru projektēšanā, lai palielinātu to instrukciju caurlaides spēju (instrukciju skaitu, ko var izpildīt laika vienībā).

Galvenā ideja ir sadalīt (saukts par "sadalīšanu") procesora instrukcijas apstrādi, kā to nosaka instrukcijas mikrokods, virknē neatkarīgu mikrooperāciju (sauktas arī par "mikroinstrukcijām", "mikrooperācijām" vai "µop"), katra soļa beigās veicot glabāšanu. Tas ļauj procesora vadības loģikai apstrādāt instrukcijas ar lēnākā soļa apstrādes ātrumu, kas ir daudz ātrāks nekā laiks, kas nepieciešams instrukcijas apstrādei vienā solī.

Termins "cauruļvads" attiecas uz to, ka katrs solis nes vienu mikroinstrukciju (kā ūdens piliens) un katrs solis ir saistīts ar citu soli (analoģija; līdzīgi kā ūdens caurules).

Lielāko daļu mūsdienu procesoru darbina pulkstenis. CPU iekšēji sastāv no loģikas un atmiņas (flip flopiem). Kad pienāk pulksteņa signāls, flip flopi saglabā savu jauno vērtību, tad loģikai nepieciešams laiks, lai atšifrētu flip flopu jaunās vērtības. Tad pienāk nākamais pulksteņa impulss, un flip flopi saglabā citas vērtības, un tā tālāk. Sadalot loģiku mazākos elementos un ievietojot flip flopus starp loģikas elementiem, tiek samazināts laiks, kas nepieciešams loģikai (lai atšifrētu vērtības līdz derīgu izeju ģenerēšanai atkarībā no šīm vērtībām). Šādā veidā var samazināt taktēšanas periodu.
Piemēram, RISC konveijers ir sadalīts piecās pakāpēs ar flip flopu komplektu starp katru pakāpi šādi:

  1. Instrukcijas iegūšana
  2. Instrukciju dekodēšana un reģistra atpazīšana
  3. Izpildīt
  4. Piekļuve atmiņai
  5. Reģistrēties rakstīt atpakaļ

Procesori ar konveijeru sistēmu iekšēji sastāv no posmiem (moduļiem), kas var daļēji neatkarīgi strādāt ar atsevišķām mikroinstrukcijām. Katrs posms ir savienots ar flip flopiem ar nākamo posmu (kā "ķēde"), lai posma izeja būtu ieeja citā posmā, līdz instrukciju apstrāde ir pabeigta. Šāda procesora iekšējo moduļu organizācija samazina kopējo instrukcijas apstrādes laiku.

Bezrindu arhitektūra nav tik efektīva, jo daži procesora moduļi ir dīkstāvē, kamēr cits modulis ir aktīvs instrukciju cikla laikā. Cauruļvadu procesors pilnībā nenovērš dīkstāves laiku, taču, liekot procesora moduļiem strādāt paralēli, tiek palielināta instrukciju caurlaides spēja.

Instrukciju konveijers tiek uzskatīts par pilnībā konveijeru konveijeru, ja tas var pieņemt jaunu instrukciju katrā takts ciklā. Nepilnīgi cauruļvadam ir gaidīšanas cikli, kas aizkavē cauruļvada virzību.

Pamata piecu pakāpju konveijers RISC mašīnā (IF = instrukcijas saņemšana, ID = instrukcijas dekodēšana, EX = izpilde, MEM = piekļuve atmiņai, WB = reģistra ierakstīšana atpakaļ). Vertikālā ass ir secīgas instrukcijas, horizontālā ass ir laiks. Tātad zaļajā slejā agrākais norādījums ir WB stadijā, bet visvēlākais norādījums ir instrukcijas ievākšanas stadijā.Zoom
Pamata piecu pakāpju konveijers RISC mašīnā (IF = instrukcijas saņemšana, ID = instrukcijas dekodēšana, EX = izpilde, MEM = piekļuve atmiņai, WB = reģistra ierakstīšana atpakaļ). Vertikālā ass ir secīgas instrukcijas, horizontālā ass ir laiks. Tātad zaļajā slejā agrākais norādījums ir WB stadijā, bet visvēlākais norādījums ir instrukcijas ievākšanas stadijā.

Cauruļvadu savienošanas priekšrocības un trūkumi

Cauruļvadu savienošanas priekšrocības:

  1. Tiek samazināts procesora cikla laiks, tādējādi palielinot instrukciju caurlaides spēju. Cauruļvadu savienošana nesamazina laiku, kas nepieciešams instrukcijas izpildei; tā vietā tā palielina instrukciju skaitu, ko var apstrādāt vienlaicīgi ("uzreiz"), un samazina aizkavi starp izpildītajām instrukcijām (to sauc par "caurlaides spēju").
    Jo vairāk cauruļvadu posmu procesoram ir, jo vairāk instrukciju tas var apstrādāt "vienlaicīgi" un jo mazāka ir aizkave starp izpildītajām instrukcijām. Katrā mūsdienās ražotajā
    lielākajā vispārējas nozīmes mikroprocesorā izmanto vismaz 2 līdz pat 30 vai 40 pakāpju konveijera posmus.
  2. Ja tiek izmantota konveijeru savienošana, procesora aritmētiskās loģikas bloku var izstrādāt ātrāk, taču tas būs sarežģītāks.
  3. Cauruļvadu savienošana teorētiski palielina veiktspēju salīdzinājumā ar nepipelīnu kodolu par posmu skaita koeficientu (pieņemot, ka arī takts frekvence palielinās par tādu pašu koeficientu), un kods ir ideāli piemērots izpildei pa cauruļvadiem.
  4. Cauruļveida procesori parasti strādā ar augstāku takts frekvenci nekā operatīvās atmiņas takts frekvence (kopš 2008. gada tehnoloģijas operatīvās atmiņas darbojas ar zemāku frekvenci salīdzinājumā ar procesoru frekvenci), tādējādi palielinot datoru kopējo veiktspēju.

Cauruļvadu savienošanas trūkumi:

Cauruļvadiem ir daudz trūkumu, lai gan procesoru un kompilatoru izstrādātāji izmanto daudz paņēmienu, lai pārvarētu lielāko daļu no tiem; turpmāk ir uzskaitīti biežāk sastopamie trūkumi:

  1. Nepilnveidīga procesora konstrukcija ir vienkāršāka un lētāka ražošanā, jo nepilnveidīgs procesors izpilda tikai vienu instrukciju vienā reizē. Tas novērš zaru novilcināšanu (programmvadošajā procesorā katrs zars tiek novilcināts), kā arī novērš problēmas, kad vienlaicīgi tiek izpildītas sērijveida instrukcijas.
  2. Cauruļveida procesorā flip flopu ievietošana starp moduļiem palielina instrukciju latentumu, salīdzinot ar procesoru bez cauruļveida savienojuma.
  3. Procesoram, kas nav pipelīnizēts, būs noteikta instrukciju caurlaides spēja. Cauruļveida procesora veiktspēju ir daudz grūtāk prognozēt, un tā var ievērojami atšķirties dažādām programmām.
  4. Daudzos projektos ir paredzēti 7, 10, 20, 20, 31 un pat vairāk posmu gari cauruļvadi; garu cauruļvadu trūkums ir tas, ka, programmai sazarojoties, viss cauruļvads ir jāizskalo (jāiztīra). Lielāka cauruļvadu caurlaidspēja nav pietiekama, ja izpildītajā kodā ir daudz atzarojumu: procesors nevar iepriekš zināt, kur nolasīt nākamo instrukciju, un tam jāgaida, kamēr atzarojuma instrukcija tiks pabeigta, atstājot aiz tās tukšu cauruļvadu. Šo trūkumu var mazināt, paredzot, vai nosacītā zara instrukcija tiks sazarota, pamatojoties uz iepriekšējām darbībām. Pēc atzarojuma atrisināšanas nākamajai instrukcijai ir jāveic viss ceļš pa cauruļvadu, pirms tās rezultāts kļūst pieejams un procesors atkal atsāk "strādāt". Šādos ekstrēmos gadījumos konveijera procesora veiktspēja var būt sliktāka nekā procesora bez konveijera.
  5. Diemžēl ne visi norādījumi ir neatkarīgi. Vienkāršā cauruļvadā instrukcijas izpildei var būt nepieciešami 5 posmi. Lai darbotos ar pilnu veiktspēju, šim konveijeram būs jāizpilda 4 nākamās neatkarīgās instrukcijas, kamēr tiek pabeigta pirmā. Jebkura no šīm 4 instrukcijām var būt atkarīga no pirmās instrukcijas izejas, liekot cauruļvada vadības loģikai gaidīt un ievietot cauruļvadā kavēšanos vai izšķērdētu takts ciklu, līdz atkarība tiek atrisināta. Par laimi, ar tādām metodēm kā pārsūtīšana var ievērojami samazināt to gadījumu skaitu, kad ir nepieciešams kavēties.
  6. Pašmodificējošās programmas var neizdoties pareizi izpildīt konveijeru arhitektūrā, ja modificējamās instrukcijas atrodas tuvu izpildāmajām instrukcijām. To var izraisīt tas, ka instrukcijas jau var atrasties iepriekšējas ievadei paredzētajā ieejas rindā, tāpēc modifikācija var nestāties spēkā attiecībā uz nākamo instrukciju izpildi. Instrukciju kešatmiņas šo problēmu vēl vairāk saasina.
  7. Bīstamība: Kad programmētājs (vai kompilators) raksta asemblera kodu, viņš parasti pieņem, ka katra instrukcija tiek izpildīta pirms tiek izpildīta nākamā instrukcija. Ja šis pieņēmums netiek apstiprināts ar konveijeru, tas izraisa nepareizu programmas darbību, un šo situāciju sauc par apdraudējumu. Pastāv
    dažādi
    paņēmieni apdraudējumu novēršanai vai apiešanai, piemēram, pārsūtīšana un kavēšana (ievietojot kavēšanos vai izšķērdētu takts ciklu).

Piemēri

Vispārīgs cauruļvads

Labajā pusē ir attēlots vispārējs cauruļvads ar četriem posmiem:

  1. Saņemt
  2. Dekodēt
  3. Izpildīt
  4. Atpakaļierakstīšana

Augšējā pelēkā lodziņā ir saraksts ar instrukcijām, kas gaida uz izpildi; apakšējā pelēkā lodziņā ir saraksts ar instrukcijām, kas ir pabeigtas, un vidējais baltais lodziņš ir konveijers.

Izpilde ir šāda:

Laiks

Izpilde

0

Tiek izpildīti četri norādījumi.

1

  • zaļā instrukcija tiek saņemta no atmiņas

2

  • tiek dekodēta zaļā instrukcija.
  • no atmiņas tiek saņemta violetā instrukcija.

3

  • tiek izpildīta zaļā instrukcija (tiek veikta faktiskā darbība).
  • tiek atšifrēta violetā instrukcija
  • tiek saņemta zilā instrukcija

4

  • zaļās instrukcijas rezultāti tiek ierakstīti atpakaļ reģistru failā vai atmiņā.
  • tiek izpildīta violetā instrukcija
  • zilā instrukcija tiek atšifrēta
  • tiek saņemta sarkanā instrukcija

5

  • zaļā instrukcija ir izpildīta
  • violetā instrukcija tiek ierakstīta atpakaļ
  • tiek izpildīts zilais norādījums
  • tiek atšifrēta sarkanā instrukcija.

6

  • Violetā instrukcija ir izpildīta
  • zilā instrukcija tiek ierakstīta atpakaļ
  • tiek izpildīta sarkanā instrukcija

7

  • zilā instrukcija ir izpildīta
  • sarkanā instrukcija tiek ierakstīta atpakaļ

8

  • sarkanā instrukcija ir izpildīta

9

Visi norādījumi tiek izpildīti

Burbulis

Kad izpildes procesā rodas "aizķeršanās" (pārtraukums), cauruļvadā tiek izveidots "burbulis", kurā nenotiek nekas noderīgs. Ciklā 2 tiek aizkavēta violetās instrukcijas ievākšana, un dekodēšanas posmā ciklā 3 tagad ir burbulis. Viss, kas atrodas aiz violetās instrukcijas, arī tiek aizkavēts, bet viss, kas atrodas pirms violetās instrukcijas, turpina izpildi.

Skaidrs, ka, salīdzinot ar iepriekšminēto izpildi, burbulis dod kopējo izpildes laiku 8 takts tiksi, nevis 7 takts tiksi.

Burbuļi ir kā aizkavēšanās (aizkavēšanās), kurā nekas noderīgs nenotiek, lai iegūtu, atšifrētu, izpildītu un ierakstītu atpakaļ. Tas ir kā NOP (saīsinājums no No OPeration) kods.

1. piemērs

Tipiska instrukcija divu skaitļu saskaitīšanai varētu būt ADD A, B, C, kas saskaita vērtības, kuras atrodas atmiņas vietās A un B, un pēc tam rezultātu ievieto atmiņas vietā C. Cauruļvadu procesorā cauruļvadu kontrolieris to sadalītu virknē uzdevumu, līdzīgi kā:

LOAD A, R1 LOAD B, R2 ADD R1, R2, R3 STORE R3, C LOAD nākamā instrukcija

Vietas "R1" un "R2" ir procesora reģistri. Vērtības, kas glabājas atmiņas vietās, kas apzīmētas ar "A" un "B", tiek ielādētas (kopētas) šajos reģistros, tad saskaitītas, un rezultāts tiek saglabāts atmiņas vietā, kas apzīmēta ar "C".

Šajā piemērā konveijers ir trīs posmi - ielādēšana, izpilde un saglabāšana. Katru no šiem posmiem sauc par cauruļvada posmiem.

Procesorā, kas nav izkliedēts, vienlaicīgi var strādāt tikai viens posms, tāpēc pirms nākamās instrukcijas izpildīšanas ir jāpabeidz visa instrukcija. Cauruļveida procesorā visi posmi var vienlaikus strādāt ar dažādām instrukcijām. Tātad, kad šī instrukcija ir izpildes posmā, otra instrukcija būs dekodēšanas posmā, bet trešā instrukcija būs atvasināšanas posmā.

2. piemērs

Lai labāk izprastu šo jēdzienu, mēs varam aplūkot teorētisku trīs posmu cauruļvadu:

Posms

Apraksts

Ielādēt

Instrukcijas nolasīšana no atmiņas

Izpildīt

Instrukcijas izpilde

Veikals

Rezultāta saglabāšana atmiņā un/vai reģistros

un pseidokoda asamblejas sarakstu, kas jāizpilda:

LOAD #40, A ; ielādēt 40 A MOVE A, B ; kopēt A B ADD #20, B ; pievienot 20 B STORE B, 0x300 ; saglabāt B atmiņas šūnā 0x300

Šādi tas tiktu izpildīts:

Pulkstenis 1

Ielādēt

Izpildīt

Veikals

LOAD

 

 

LOAD instrukcija tiek ielādēta no atmiņas.

Pulkstenis 2

Ielādēt

Izpildīt

Veikals

MOVE

LOAD

 

Tiek izpildīta LOAD instrukcija, bet MOVE instrukcija tiek ielādēta no atmiņas.

Pulkstenis 3

Ielādēt

Izpildīt

Veikals

PIEVIENOT

MOVE

LOAD

Instrukcija LOAD atrodas glabāšanas posmā, kur tās rezultāts (skaitlis 40) tiks saglabāts reģistrā A. Tikmēr tiek izpildīta instrukcija MOVE. Tā kā tai jāpārvieto A saturs uz B, tai jāgaida LOAD instrukcijas beigas.

Pulkstenis 4

Ielādēt

Izpildīt

Veikals

VEIKALS

PIEVIENOT

MOVE

STORE instrukcija tiek ielādēta, kamēr MOVE instrukcija tiek pabeigta un ADD tiek aprēķināta.

Un tā tālāk. Ņemiet vērā, ka dažkārt kāda instrukcija ir atkarīga no citas instrukcijas rezultāta (piemēram, mūsu piemērā MOVE). Ja vairāk nekā viena instrukcija atsaucas uz konkrētu operanda atrašanās vietu, to vai nu nolasot (kā ievadi), vai ierakstot (kā izvadi), šo instrukciju izpilde tādā secībā, kas atšķiras no sākotnējās programmas secības, var radīt bīstamu situāciju (minēts iepriekš).

Vispārējs 4 posmu cauruļvads; krāsainajos lodziņos attēlotas instrukcijas, kas ir neatkarīgas viena no otras.Zoom
Vispārējs 4 posmu cauruļvads; krāsainajos lodziņos attēlotas instrukcijas, kas ir neatkarīgas viena no otras.

Burbulis 3. ciklā aizkavē izpildiZoom
Burbulis 3. ciklā aizkavē izpildi

Saistītās lapas

  • Cauruļvads (skaitļošana)
  • Paralēlā skaitļošana
  • Instrukciju līmeņa paralēlisms

Jautājumi un atbildes

J: Kas ir instrukciju konveijeru izkārtojums?


A: Instrukciju konveijeru savienošana ir metode, ko izmanto mūsdienu mikroprocesoru, mikrokontrolleru un centrālo procesoru konstrukcijā, lai palielinātu instrukciju caurlaides spēju, sadalot procesora instrukcijas apstrādi vairākos neatkarīgos soļos ar glabāšanu katra soļa beigās.

J: Kā darbojas konveijeru savienošana?


A: Cauruļvadu savienošana darbojas, sadalot loģiku mazākos gabaliņos un ievietojot flip flopus starp loģikas gabaliem, kas samazina laiku, kas nepieciešams loģikai, lai atšifrētu vērtības, līdz tiek ģenerēti derīgi izejas rezultāti atkarībā no šīm vērtībām. Tas ļauj paātrināt taktēšanas periodus.

J: Kādi ir daži cauruļvadu piemēri?


A.: Cauruļvada piemērs ir RISC cauruļvads, kas ir sadalīts piecos posmos ar flip flopu kopumu starp katru posmu.

J: Kā konveijeru savienošana palielina instrukciju caurlaides spēju?


A. Cauruļvadu savienošana palielina instrukciju caurlaides spēju, ļaujot procesora moduļiem strādāt paralēli, kas samazina dīkstāves laiku instrukciju cikla laikā un palielina kopējo apstrādes laiku.

J: Vai katrs konveijers ir pilnībā cauruļvadīts?


A.: Nē, ne visi cauruļvadi ir pilnībā savienoti; dažos cauruļvados ir gaidīšanas cikli, kas aizkavē virzību pa cauruļvadu.

AlegsaOnline.com - 2020 / 2023 - License CC3