പൈപ്പ്‌ലൈനിങ്ങ്

കമ്പ്യൂട്ടിംഗിൽ, ഒരു പൈപ്പ്ലൈൻ, ഡാറ്റാ പൈപ്പ്ലൈൻ എന്നും അറിയപ്പെടുന്നു, ഒരു ശ്രേണിയിൽ ബന്ധിപ്പിച്ചിരിക്കുന്ന ഡാറ്റ പ്രോസസ്സിംഗ് ഘടകങ്ങളുടെ ഒരു കൂട്ടമാണ്, അവിടെ ഒരു മൂലകത്തിന്റെ ഔട്ട്പുട്ട് അടുത്തതിന്റെ ഇൻപുട്ടാണ്. ഒരു പൈപ്പ്ലൈനിന്റെ ഘടകങ്ങൾ പലപ്പോഴും സമാന്തരമായോ സമയബന്ധിതമായ രീതിയിലോ നടപ്പിലാക്കുന്നു. മൂലകങ്ങൾക്കിടയിൽ പലപ്പോഴും ബഫർ സ്റ്റോറേജ് ചിലത് ചേർക്കുന്നു.

കമ്പ്യൂട്ടറുമായി ബന്ധപ്പെട്ട പൈപ്പ്ലൈനുകളിൽ ഇവ ഉൾപ്പെടുന്നു:

* ഒരേ സർക്യൂട്ട് ഉപയോഗിച്ച് ഒന്നിലധികം നിർദ്ദേശങ്ങൾ ഓവർലാപ്പുചെയ്യാൻ അനുവദിക്കുന്നതിന് സെൻട്രൽ പ്രോസസ്സിംഗ് യൂണിറ്റുകളിലും (സിപിയു) മറ്റ് മൈക്രോപ്രൊസസ്സറുകളിലും ഉപയോഗിക്കുന്ന ക്ലാസിക് RISC പൈപ്പ്ലൈൻ പോലുള്ള ഇൻസ്ട്രക്ഷൻ പൈപ്പ്ലൈനുകൾ. സർക്യൂട്ട് സാധാരണയായി ഘട്ടങ്ങളായി വിഭജിക്കപ്പെടുന്നു, ഓരോ ഘട്ടവും ഒരു നിർദ്ദേശത്തിന്റെ ഒരു പ്രത്യേക ഭാഗം ഒരു സമയം പ്രോസസ്സ് ചെയ്യുന്നു, ഭാഗിക ഫലങ്ങൾ അടുത്ത ഘട്ടത്തിലേക്ക് കൈമാറുന്നു. ഇൻസ്ട്രക്ഷൻ ഡീകോഡ്, അരിത്മെറ്റിക്/ലോജിക്, രജിസ്റ്റർ ഫെച്ച് എന്നിവയാണ് ഘട്ടങ്ങളുടെ ഉദാഹരണങ്ങൾ. അവ സൂപ്പർസ്‌കലാർ എക്‌സിക്യൂഷൻ, ഓപ്പറാൻറ് ഫോർവേഡിംഗ്, ഊഹക്കച്ചവട നിർവ്വഹണം, ഔട്ട്-ഓഫ്-ഓർഡർ എക്‌സിക്യൂഷൻ എന്നിവയുടെ സാങ്കേതിക വിദ്യകളുമായി ബന്ധപ്പെട്ടിരിക്കുന്നു.
* സാധാരണ റെൻഡറിംഗ് പ്രവർത്തനങ്ങളുടെ വിവിധ ഘട്ടങ്ങൾ നടപ്പിലാക്കുന്ന ഒന്നിലധികം ഗണിത യൂണിറ്റുകൾ അല്ലെങ്കിൽ സമ്പൂർണ്ണ സിപിയുകൾ അടങ്ങുന്ന മിക്ക ഗ്രാഫിക്സ് പ്രോസസ്സിംഗ് യൂണിറ്റുകളിലും (ജിപിയു) കാണപ്പെടുന്ന ഗ്രാഫിക്സ് പൈപ്പ്ലൈനുകൾ (പെർസ്പെക്റ്റീവ് പ്രൊജക്ഷൻ, വിൻഡോ ക്ലിപ്പിംഗ്, കളർ ആൻഡ് ലൈറ്റ് കണക്കുകൂട്ടൽ, റെൻഡറിംഗ് മുതലായവ) .
* കമ്പ്യൂട്ടിംഗ് പ്രക്രിയകളുടെ ഒരു ശ്രേണി (കമാൻഡുകൾ, പ്രോഗ്രാം റണ്ണുകൾ, ടാസ്‌ക്കുകൾ, ത്രെഡുകൾ, നടപടിക്രമങ്ങൾ മുതലായവ) അടങ്ങുന്ന സോഫ്റ്റ്‌വെയർ പൈപ്പ് ലൈനുകൾ, ആശയപരമായി സമാന്തരമായി നടപ്പിലാക്കുന്നു, ഒരു പ്രക്രിയയുടെ ഔട്ട്‌പുട്ട് സ്ട്രീം അടുത്തതിന്റെ ഇൻപുട്ട് സ്ട്രീമായി സ്വയമേവ നൽകപ്പെടുന്നു. . Unix സിസ്റ്റം കോൾ പൈപ്പ് ഈ ആശയത്തിന്റെ ഒരു മികച്ച ഉദാഹരണമാണ്.
* HTTP പൈപ്പ്ലൈനിംഗ്, പുതിയത് നൽകുന്നതിന് മുമ്പ് മുമ്പത്തേത് പൂർത്തിയാകുന്നതുവരെ കാത്തിരിക്കാതെ, ഒരേ TCP കണക്ഷനിലൂടെ ഒന്നിലധികം HTTP അഭ്യർത്ഥനകൾ നൽകുന്ന സാങ്കേതികത.

ചില ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങൾ[ഉദാഹരണം ആവശ്യമാണ്] ഒരു പൈപ്പ്ലൈനിൽ നിരവധി പ്രോഗ്രാമുകൾ സ്ട്രിംഗ് ചെയ്യുന്നതിന് UNIX പോലെയുള്ള വാക്യഘടന നൽകിയേക്കാം, എന്നാൽ രണ്ടാമത്തേത് യഥാർത്ഥ പൈപ്പ്ലൈനിങ്ങിന് പകരം ലളിതമായ സീരിയൽ എക്സിക്യൂഷൻ ആയി നടപ്പിലാക്കുക-അതായത്, ഓരോ പ്രോഗ്രാമും അടുത്തത് ആരംഭിക്കുന്നതിന് മുമ്പ് പൂർത്തിയാകുന്നതുവരെ കാത്തിരിക്കുക. .[അവലംബം ആവശ്യമാണ്]

## ആശയവും പ്രചോദനവും
ദൈനംദിന ജീവിതത്തിൽ സാധാരണയായി ഉപയോഗിക്കുന്ന ഒരു ആശയമാണ് പൈപ്പ്ലൈനിംഗ്. ഉദാഹരണത്തിന്, ഒരു കാർ ഫാക്ടറിയുടെ അസംബ്ലി ലൈനിൽ, എഞ്ചിൻ ഇൻസ്റ്റാൾ ചെയ്യുക, ഹുഡ് ഇൻസ്റ്റാൾ ചെയ്യുക, ചക്രങ്ങൾ സ്ഥാപിക്കുക എന്നിങ്ങനെയുള്ള ഓരോ നിർദ്ദിഷ്ട ജോലിയും പലപ്പോഴും ഒരു പ്രത്യേക വർക്ക് സ്റ്റേഷനാണ് ചെയ്യുന്നത്. സ്റ്റേഷനുകൾ അവരുടെ ചുമതലകൾ സമാന്തരമായി നിർവഹിക്കുന്നു, ഓരോന്നും വ്യത്യസ്ത കാറിൽ. ഒരു കാർ ഒരു ജോലി ചെയ്തുകഴിഞ്ഞാൽ, അത് അടുത്ത സ്റ്റേഷനിലേക്ക് നീങ്ങുന്നു. ടാസ്‌ക്കുകൾ പൂർത്തിയാക്കാൻ ആവശ്യമായ സമയത്തിലെ വ്യതിയാനങ്ങൾ അടുത്ത സ്റ്റേഷൻ ലഭ്യമാകുന്നത് വരെ "ബഫറിംഗ്" (സ്റ്റേഷനുകൾക്കിടയിലുള്ള ഒരു സ്ഥലത്ത് ഒന്നോ അതിലധികമോ കാറുകൾ പിടിക്കുക) കൂടാതെ/അല്ലെങ്കിൽ "സ്തംഭനം" (താൽക്കാലികമായി അപ്‌സ്ട്രീം സ്റ്റേഷനുകൾ നിർത്തുക) വഴിയും ഉൾക്കൊള്ളാൻ കഴിയും. .

ഒരു കാർ കൂട്ടിച്ചേർക്കുന്നതിന് യഥാക്രമം 20, 10, 15 മിനിറ്റ് എടുക്കുന്ന മൂന്ന് ജോലികൾ ആവശ്യമാണെന്ന് കരുതുക. തുടർന്ന്, മൂന്ന് ജോലികളും ഒരു സ്റ്റേഷനാണ് നിർവഹിക്കുന്നതെങ്കിൽ, ഓരോ 45 മിനിറ്റിലും ഫാക്ടറി ഒരു കാർ ഔട്ട്പുട്ട് ചെയ്യും. മൂന്ന് സ്റ്റേഷനുകളുടെ പൈപ്പ് ലൈൻ ഉപയോഗിച്ച്, ഫാക്ടറി 45 മിനിറ്റിനുള്ളിൽ ആദ്യത്തെ കാർ ഔട്ട്പുട്ട് ചെയ്യും, തുടർന്ന് ഓരോ 20 മിനിറ്റിലും പുതിയത്.

ഈ ഉദാഹരണം കാണിക്കുന്നത് പോലെ, പൈപ്പ്ലൈനിംഗ് ലേറ്റൻസി കുറയ്ക്കുന്നില്ല, അതായത്, ഒരു ഇനം മുഴുവൻ സിസ്റ്റത്തിലൂടെ കടന്നുപോകാനുള്ള ആകെ സമയം. എന്നിരുന്നാലും, ഇത് സിസ്റ്റത്തിന്റെ ത്രൂപുട്ട് വർദ്ധിപ്പിക്കുന്നു, അതായത്, ആദ്യത്തേതിന് ശേഷം പുതിയ ഇനങ്ങൾ പ്രോസസ്സ് ചെയ്യുന്ന നിരക്ക്.

## ഡിസൈൻ പരിഗണനകൾ

### ഘട്ടങ്ങൾ ബാലൻസ് ചെയ്യുന്നു
ഒരു പൈപ്പ്ലൈനിന്റെ ത്രൂപുട്ട് അതിന്റെ വേഗത കുറഞ്ഞ ഘടകത്തേക്കാൾ മികച്ചതായിരിക്കാൻ കഴിയാത്തതിനാൽ, ഡിസൈനർ ജോലിയും വിഭവങ്ങളും ഘട്ടങ്ങൾക്കിടയിൽ വിഭജിക്കാൻ ശ്രമിക്കണം, അതിലൂടെ അവയെല്ലാം അവരുടെ ജോലികൾ പൂർത്തിയാക്കാൻ ഒരേ സമയം എടുക്കും. മുകളിലുള്ള കാർ അസംബ്ലി ഉദാഹരണത്തിൽ, മൂന്ന് ടാസ്‌ക്കുകൾക്കും 20, 10, 15 മിനിറ്റുകൾക്ക് പകരം 15 മിനിറ്റ് വീതം എടുത്താൽ, ലേറ്റൻസി 45 മിനിറ്റായിരിക്കും, എന്നാൽ 20-ന് പകരം ഓരോ 15 മിനിറ്റിലും ഒരു പുതിയ കാർ പൂർത്തിയാക്കും.

### ബഫറിംഗ്
അനുയോജ്യമായ സാഹചര്യങ്ങളിൽ, എല്ലാ പ്രോസസ്സിംഗ് ഘടകങ്ങളും സമന്വയിപ്പിക്കുകയും പ്രോസസ്സ് ചെയ്യുന്നതിന് ഒരേ സമയം എടുക്കുകയും ചെയ്യുന്നുവെങ്കിൽ, ഓരോ ഇനവും മുമ്പത്തെ ഒരെണ്ണം റിലീസ് ചെയ്തതുപോലെ, ഒരൊറ്റ ക്ലോക്ക് സൈക്കിളിൽ ഓരോ ഘടകത്തിനും ലഭിക്കും. അങ്ങനെ, ഇനങ്ങൾ പൈപ്പ്ലൈനിലൂടെ ജലചാലിലെ തിരമാലകൾ പോലെ സ്ഥിരമായ വേഗതയിൽ ഒഴുകും. അത്തരം "വേവ് പൈപ്പ് ലൈനുകളിൽ", ഡാറ്റാ ഇനങ്ങൾക്ക് ആവശ്യമായ സ്റ്റോറേജ് കൂടാതെ, ഘട്ടങ്ങൾക്കിടയിൽ സിൻക്രൊണൈസേഷനോ ബഫറിംഗോ ആവശ്യമില്ല.

കൂടുതൽ പൊതുവെ, പ്രോസസ്സിംഗ് സമയം ക്രമരഹിതമാകുമ്പോഴോ പൈപ്പ്ലൈനിനൊപ്പം ഇനങ്ങൾ സൃഷ്ടിക്കപ്പെടുകയോ നശിപ്പിക്കപ്പെടുകയോ ചെയ്യുമ്പോൾ പൈപ്പ്ലൈൻ ഘട്ടങ്ങൾക്കിടയിൽ ബഫർ ആവശ്യമാണ്. ഉദാഹരണത്തിന്, സ്‌ക്രീനിൽ റെൻഡർ ചെയ്യേണ്ട ത്രികോണങ്ങൾ പ്രോസസ്സ് ചെയ്യുന്ന ഒരു ഗ്രാഫിക്‌സ് പൈപ്പ്‌ലൈനിൽ, ഓരോ ത്രികോണത്തിന്റെയും ദൃശ്യപരത പരിശോധിക്കുന്ന ഒരു ഘടകം ത്രികോണം അദൃശ്യമാണെങ്കിൽ അത് നിരസിച്ചേക്കാം, അല്ലെങ്കിൽ മൂലകത്തിന്റെ രണ്ടോ അതിലധികമോ ത്രികോണ കഷണങ്ങൾ ഭാഗികമാണെങ്കിൽ അവ ഔട്ട്‌പുട്ട് ചെയ്യാം. മറഞ്ഞിരിക്കുന്നു. ആപ്ലിക്കേഷൻ ആദ്യ ഘട്ടത്തിലേക്ക് ഇനങ്ങൾ ഫീഡ് ചെയ്യുകയും അവസാനത്തേതിന്റെ ഔട്ട്പുട്ട് ഉപയോഗിക്കുകയും ചെയ്യുന്ന നിരക്കുകളിലെ ക്രമക്കേടുകൾ ഉൾക്കൊള്ളാനും ബഫറിംഗ് ആവശ്യമാണ്.

രണ്ട് ഘട്ടങ്ങൾക്കിടയിലുള്ള ബഫർ രണ്ട് ഘട്ടങ്ങൾക്കിടയിൽ അനുയോജ്യമായ സമന്വയവും സിഗ്നലിംഗ് ലോജിക്കും ഉള്ള ഒരു ഹാർഡ്‌വെയർ രജിസ്റ്ററായിരിക്കാം. ഒരു ഘട്ടം A ഒരു ഡാറ്റ ഇനം രജിസ്റ്ററിൽ സൂക്ഷിക്കുമ്പോൾ, അത് അടുത്ത ഘട്ടമായ B ലേക്ക് ഒരു "ഡാറ്റ ലഭ്യം" സിഗ്നൽ അയയ്‌ക്കുന്നു. B ആ ഡാറ്റ ഉപയോഗിച്ചുകഴിഞ്ഞാൽ, A യിലേക്ക് "ഡാറ്റ സ്വീകരിച്ചു" എന്ന സിഗ്നലോടെ അത് പ്രതികരിക്കുന്നു. സ്റ്റേജ് A നിർത്തുന്നു, കാത്തിരിക്കുന്നു ഈ സിഗ്നലിനായി, രജിസ്റ്ററിൽ അടുത്ത ഡാറ്റാ ഇനം സംഭരിക്കുന്നതിന് മുമ്പ്. സ്റ്റേജ് ബി നിർത്തുന്നു, "ഡാറ്റ ലഭ്യം" സിഗ്നലിനായി കാത്തിരിക്കുന്നു, അത് അടുത്ത ഇനം പ്രോസസ്സ് ചെയ്യാൻ തയ്യാറാണെങ്കിലും സ്റ്റേജ് എ ഇതുവരെ നൽകിയിട്ടില്ലെങ്കിൽ.

ഒരു മൂലകത്തിന്റെ പ്രോസസ്സിംഗ് സമയം വേരിയബിൾ ആണെങ്കിൽ, മുഴുവൻ പൈപ്പ്ലൈനും പലപ്പോഴും നിർത്തേണ്ടി വന്നേക്കാം, ആ ഘടകത്തിനും മുമ്പുള്ളവയെല്ലാം അവയുടെ ഇൻപുട്ട് ബഫറുകളിലെ ഇനങ്ങൾ ഉപയോഗിക്കുന്നതിനായി കാത്തിരിക്കുന്നു. ആ ഘട്ടത്തിലെ ഇൻപുട്ട് ബഫറിൽ ഒന്നിലധികം ഇനങ്ങൾക്ക് ഇടം നൽകുന്നതിലൂടെ അത്തരം പൈപ്പ്ലൈൻ സ്റ്റാളുകളുടെ ആവൃത്തി കുറയ്ക്കാൻ കഴിയും. അത്തരത്തിലുള്ള ഒന്നിലധികം ഇനം ബഫർ സാധാരണയായി ഫസ്റ്റ്-ഇൻ, ഫസ്റ്റ്-ഔട്ട് ക്യൂ ആയി നടപ്പിലാക്കും. ക്യൂ പൂർണ്ണമാകുമ്പോൾ അപ്‌സ്ട്രീം ഘട്ടം നിർത്തേണ്ടി വന്നേക്കാം, എന്നാൽ കൂടുതൽ ബഫർ സ്ലോട്ടുകൾ നൽകുന്നതിനാൽ ആ ഇവന്റുകളുടെ ആവൃത്തി കുറയും. ക്യൂയിംഗ് തിയറിക്ക് ആവശ്യമായ ബഫർ സ്ലോട്ടുകളുടെ എണ്ണം പറയാൻ കഴിയും, പ്രോസസ്സിംഗ് സമയത്തിന്റെ വ്യതിയാനവും ആവശ്യമുള്ള പ്രകടനവും അനുസരിച്ച്.

### രേഖീയമല്ലാത്ത പൈപ്പ് ലൈനുകൾ
ചില ഘട്ടങ്ങൾ മറ്റുള്ളവയേക്കാൾ കൂടുതൽ സമയമെടുക്കുന്നു (അല്ലെങ്കിൽ എടുത്തേക്കാം), വേഗത്തിലാക്കാൻ കഴിയുന്നില്ലെങ്കിൽ, ഒരൊറ്റ ഇൻപുട്ട് ബഫറും ഒരൊറ്റ ഔട്ട്പുട്ട് ബഫറും ഉപയോഗിച്ച് സമാന്തരമായി ആ ചുമതല നിർവഹിക്കുന്നതിന് ഡിസൈനർക്ക് രണ്ടോ അതിലധികമോ പ്രോസസ്സിംഗ് ഘടകങ്ങൾ നൽകാൻ കഴിയും. ഓരോ ഘടകവും അതിന്റെ നിലവിലെ ഡാറ്റാ ഇനം പ്രോസസ്സ് ചെയ്യുന്നത് പൂർത്തിയാകുമ്പോൾ, അത് സാധാരണ ഔട്ട്‌പുട്ട് ബഫറിലേക്ക് അത് ഡെലിവർ ചെയ്യുകയും സാധാരണ ഇൻപുട്ട് ബഫറിൽ നിന്ന് അടുത്ത ഡാറ്റാ ഇനം എടുക്കുകയും ചെയ്യുന്നു. "നോൺ-ലീനിയർ" അല്ലെങ്കിൽ "ഡൈനാമിക്" പൈപ്പ്‌ലൈൻ എന്ന ഈ ആശയം ഒരു കാത്തിരിപ്പ് ക്യൂവിൽ നിന്ന് ക്ലയന്റുകൾക്ക് സേവനം നൽകുന്ന രണ്ടോ അതിലധികമോ കാഷ്യർമാരുള്ള കടകളോ ബാങ്കുകളോ ഉദാഹരണമാണ്.

**ഇനങ്ങൾ തമ്മിലുള്ള ആശ്രിതത്വം**

ചില ആപ്ലിക്കേഷനുകളിൽ, ഒരു സ്റ്റേജ് എ വഴി ഒരു ഇനം Y പ്രോസസ്സ് ചെയ്യുന്നത് പൈപ്പ്ലൈനിന്റെ പിന്നീടുള്ള ചില ഘട്ടം ബി വഴി മുമ്പത്തെ ഇനം X പ്രോസസ്സ് ചെയ്യുന്നതിന്റെ ഫലങ്ങളെയോ ഫലത്തെയോ ആശ്രയിച്ചിരിക്കും. അങ്ങനെയെങ്കിൽ, ഇനം X ഘട്ടം ബി മായ്‌ക്കുന്നതുവരെ, സ്റ്റേജ് എയ്ക്ക് Y ഇനം ശരിയായി പ്രോസസ്സ് ചെയ്യാൻ കഴിയില്ല.

നിർദ്ദേശ പൈപ്പ്ലൈനുകളിൽ ഈ സാഹചര്യം പലപ്പോഴും സംഭവിക്കാറുണ്ട്. ഉദാഹരണത്തിന്, Y എന്നത് ഒരു രജിസ്റ്ററിലെ ഉള്ളടക്കം വായിക്കുന്ന ഒരു ഗണിത നിർദ്ദേശമാണെന്ന് കരുതുക, അത് മുമ്പത്തെ നിർദ്ദേശം X വഴി പരിഷ്‌ക്കരിച്ചുവെന്ന് കരുതപ്പെടുന്നു. A എന്നത് നിർദ്ദേശ ഓപ്പറണ്ടുകൾ ലഭ്യമാക്കുന്ന ഘട്ടവും B എന്നത് ഫലം എഴുതുന്ന ഘട്ടവുമാകാം. നിർദ്ദിഷ്ട രജിസ്റ്ററിലേക്ക്. ഇൻസ്ട്രക്ഷൻ X ഘട്ടം B-യിൽ എത്തുന്നതിന് മുമ്പ് ഘട്ടം A നിർദ്ദേശം Y പ്രോസസ്സ് ചെയ്യാൻ ശ്രമിക്കുകയാണെങ്കിൽ, രജിസ്റ്ററിൽ ഇപ്പോഴും പഴയ മൂല്യം അടങ്ങിയിരിക്കാം, Y യുടെ പ്രഭാവം തെറ്റായിരിക്കും.

അത്തരം പൊരുത്തക്കേടുകൾ ശരിയായി കൈകാര്യം ചെയ്യുന്നതിനായി, പൈപ്പ്ലൈനിൽ അധിക സർക്യൂട്ട് അല്ലെങ്കിൽ ലോജിക്ക് നൽകണം, അത് അവയെ കണ്ടെത്തി ഉചിതമായ നടപടിയെടുക്കുന്നു. അങ്ങനെ ചെയ്യുന്നതിനുള്ള തന്ത്രങ്ങളിൽ ഇവ ഉൾപ്പെടുന്നു:

* **സ്‌റ്റാലിംഗ്:** ആശ്രിതത്വം പരിഹരിക്കപ്പെടുന്നതുവരെ-അതായത്, ആവശ്യമായ വിവരങ്ങൾ ലഭ്യമാകുന്നത് വരെ കൂടാതെ/അല്ലെങ്കിൽ ആവശ്യമായ അവസ്ഥ കൈവരിക്കുന്നത് വരെ, എ പോലുള്ള എല്ലാ ബാധിത ഘട്ടങ്ങളും നിർത്തിവെക്കും.

* **ഇനങ്ങൾ പുനഃക്രമീകരിക്കുന്നു**: സ്‌റ്റാൾ ചെയ്യുന്നതിനുപകരം, സ്റ്റേജ് A, Y ഇനം മാറ്റിവെക്കുകയും, മുമ്പത്തെ ഏതെങ്കിലും ഇനവുമായി യാതൊരു ആശ്രിതത്വവും തീർപ്പുകൽപ്പിക്കാത്ത, അതിന്റെ ഇൻപുട്ട് സ്‌ട്രീമിൽ തുടർന്നുള്ള ഏതെങ്കിലും ഇനം Z തിരയുകയും ചെയ്യാം. നിർദ്ദേശ പൈപ്പ്ലൈനുകളിൽ, ഈ സാങ്കേതികതയെ ഔട്ട്-ഓഫ്-ഓർഡർ എക്സിക്യൂഷൻ എന്ന് വിളിക്കുന്നു.
* **ഊഹിച്ചു പിന്നിലേക്ക്:** ഐറ്റം ടു ഐറ്റം ഡിപൻഡൻസിയുടെ ഒരു പ്രധാന ഉദാഹരണം ഒരു ഇൻസ്ട്രക്ഷൻ പൈപ്പ് ലൈൻ വഴി സോപാധിക ബ്രാഞ്ച് ഇൻസ്ട്രക്ഷൻ X കൈകാര്യം ചെയ്യുന്നതാണ്. എക്സിക്യൂട്ട് ചെയ്യേണ്ട അടുത്ത നിർദ്ദേശം Y ലഭ്യമാക്കുന്ന പൈപ്പ്ലൈനിന്റെ ആദ്യ ഘട്ടം A, X അതിന്റെ പ്രവർത്തനരേഖ ലഭ്യമാക്കുകയും ബ്രാഞ്ച് എടുക്കണോ വേണ്ടയോ എന്ന് തീരുമാനിക്കുകയും ചെയ്യുന്നതുവരെ അതിന്റെ ചുമതല നിർവഹിക്കാൻ കഴിയില്ല. ഇതിന് നിരവധി ക്ലോക്ക് സൈക്കിളുകൾ എടുത്തേക്കാം, കാരണം എക്‌സിന്റെ ഓപ്പറാൻറ് മെയിൻ മെമ്മറിയിൽ നിന്ന് ഡാറ്റ ലഭ്യമാക്കുന്ന മുൻ നിർദ്ദേശങ്ങളെ ആശ്രയിച്ചിരിക്കും.  X പൂർത്തിയാകാൻ കാത്തിരിക്കുമ്പോൾ നിർത്തുന്നതിനുപകരം, ബ്രാഞ്ച് എടുക്കുമോ ഇല്ലയോ എന്ന് ഘട്ടം എ ഊഹിച്ചേക്കാം, കൂടാതെ ആ ഊഹത്തിന്റെ അടിസ്ഥാനത്തിൽ അടുത്ത നിർദ്ദേശം Y കൊണ്ടുവരിക. ഊഹം പിന്നീട് തെറ്റായി മാറുകയാണെങ്കിൽ (അപൂർവ്വമായി മാത്രം), സിസ്റ്റം പിന്നോട്ട് പോയി ശരിയായ ചോയിസ് ഉപയോഗിച്ച് പുനരാരംഭിക്കേണ്ടിവരും. അതായത്, സ്റ്റേജ് എ പ്രകാരം മെഷീന്റെ അവസ്ഥയിൽ വരുത്തിയ എല്ലാ മാറ്റങ്ങളും ആ ഊഹത്തെ അടിസ്ഥാനമാക്കിയുള്ള തുടർന്നുള്ള ഘട്ടങ്ങളും പഴയപടിയാക്കേണ്ടതുണ്ട്, ഇതിനകം പൈപ്പ്ലൈനിലുള്ള X-ന് താഴെയുള്ള നിർദ്ദേശങ്ങൾ ഫ്ലഷ് ചെയ്യേണ്ടതുണ്ട്, കൂടാതെ ഘട്ടം എ പുനരാരംഭിക്കേണ്ടതുണ്ട്. ശരിയായ നിർദ്ദേശ സൂചിക. ഈ ബ്രാഞ്ച് പ്രവചന തന്ത്രം ഊഹക്കച്ചവട നിർവ്വഹണത്തിന്റെ ഒരു പ്രത്യേക കേസാണ്.

**ചെലവുകളും പോരായ്മകളും**

ഒരു പൈപ്പ്ലൈൻ സംവിധാനത്തിന് ഒരു സമയം ഒരു ബാച്ച് എക്സിക്യൂട്ട് ചെയ്യുന്നതിനേക്കാൾ കൂടുതൽ വിഭവങ്ങൾ (സർക്യൂട്ട് ഘടകങ്ങൾ, പ്രോസസ്സിംഗ് യൂണിറ്റുകൾ, കമ്പ്യൂട്ടർ മെമ്മറി മുതലായവ) ആവശ്യമാണ്, കാരണം അതിന്റെ ഘട്ടങ്ങൾക്ക് ആ ഉറവിടങ്ങൾ പങ്കിടാൻ കഴിയില്ല, കൂടാതെ ബഫറിംഗും അധിക സമന്വയ ലോജിക്കും ആവശ്യമായി വന്നേക്കാം. ഘടകങ്ങൾ.

കൂടാതെ, പ്രത്യേക പ്രോസസ്സിംഗ് ഘടകങ്ങൾ തമ്മിലുള്ള ഇനങ്ങളുടെ കൈമാറ്റം ലേറ്റൻസി വർദ്ധിപ്പിക്കും, പ്രത്യേകിച്ച് നീണ്ട പൈപ്പ്ലൈനുകൾക്ക്.

വ്യത്യസ്‌ത ഇനങ്ങളുടെ സംസ്‌കരണം തമ്മിൽ ആശ്രിതത്വം ഉണ്ടെങ്കിൽ, പ്രത്യേകിച്ചും അവ കൈകാര്യം ചെയ്യാൻ ഊഹവും ബാക്ക്‌ട്രാക്ക് തന്ത്രവും ഉപയോഗിക്കുകയാണെങ്കിൽ, പൈപ്പ്ലൈനിംഗിന്റെ അധിക സങ്കീർണ്ണത ചെലവ് ഗണ്യമായി വരും. തീർച്ചയായും, സങ്കീർണ്ണമായ ഇൻസ്ട്രക്ഷൻ സെറ്റുകൾക്കായി ആ തന്ത്രം നടപ്പിലാക്കുന്നതിനുള്ള ചെലവ്, RISC, VLIW പോലുള്ള കമ്പ്യൂട്ടർ ആർക്കിടെക്ചർ ലളിതമാക്കാൻ ചില സമൂലമായ നിർദ്ദേശങ്ങൾക്ക് പ്രചോദനം നൽകി. ഇൻസ്ട്രക്ഷൻ പൈപ്പ് ലൈനുകളുടെ പ്രകടനം മെച്ചപ്പെടുത്തുന്നതിനായി മെഷീൻ നിർദ്ദേശങ്ങൾ പുനഃക്രമീകരിക്കുന്നതിനുള്ള ചുമതലയും കംപൈലർമാർക്ക് ചുമത്തിയിട്ടുണ്ട്.

**പുതിയ സാങ്കേതികവിദ്യകൾ**

സമീപ വർഷങ്ങളിൽ ആപ്ലിക്കേഷനുകളുടെയും അവയുടെ അടിസ്ഥാന ഹാർഡ്‌വെയറിന്റെയും ആവശ്യകതകൾ പ്രാധാന്യമർഹിക്കുന്നുണ്ടെന്നത് ശരിയാണ്. ഉദാഹരണത്തിന്, ഒറ്റ നോഡ് ആപ്ലിക്കേഷനുകൾ ഉപയോഗിച്ച് പൈപ്പ് ലൈനുകൾ നിർമ്മിക്കുന്നത്, വലിയ ഡാറ്റയുടെ വോളിയവും വൈവിധ്യവും ഉപയോഗിച്ച് ഡാറ്റാ വരികളിലൂടെ സഞ്ചരിക്കുന്നത് ഇനി സാധ്യമല്ല. എന്നിരുന്നാലും, ഹഡൂപ്പ് അല്ലെങ്കിൽ അടുത്തിടെ അപ്പാച്ചെ സ്പാർക്ക് പോലുള്ള ഡാറ്റാ അനലിറ്റിക്സ് എഞ്ചിനുകളുടെ ആവിർഭാവത്തോടെ, ഒന്നിലധികം പ്രോസസ്സിംഗ് നോഡുകളിലുടനീളം വലിയ ഡാറ്റാസെറ്റുകൾ വിതരണം ചെയ്യാൻ സാധിച്ചു, ഇത് മുമ്പ് സാധ്യമായതിനേക്കാൾ നൂറുകണക്കിന് മടങ്ങ് കാര്യക്ഷമത കൈവരിക്കാൻ ആപ്ലിക്കേഷനുകളെ അനുവദിക്കുന്നു. ഈ രീതിയിലുള്ള ഡിസ്ട്രിബ്യൂട്ടഡ് പ്രോസസ്സിംഗ് ഉപയോഗിക്കുന്ന ഒരു മിഡ്-ലെവൽ പിസിക്ക് പോലും വലിയ ഡാറ്റാ പൈപ്പ്ലൈനുകളുടെ നിർമ്മാണവും നടത്തിപ്പും കൈകാര്യം ചെയ്യാൻ കഴിയും എന്നതാണ് ഇന്നത്തെ ഇതിന്റെ ഫലം.

വർഗ്ഗം:കമ്പ്യൂട്ടർ