برای شرایط مخاطره‌آمیز مخاطره را ببینید.
**هازارد** یا **مخاطره** (به انگلیسی: Hazard) مشکلات مرتبط با خط لوله‌های دستورالعمل در ریزمعماری واحد پردازندهٔ مرکزی است و وقتی رخ می‌دهد که دستورالعمل بعدی در سیکل کلاک بعدی نمی‌تواند اجرا شود، و ممکن است که باعث محاسبات اشتباه شود. به‌طور معمول سه نوع مخاطره وجود دارد:

1. مخاطره داده
2. مخاطره ساختاری
3. مخاطره کنترل

چندین روش برای مقابله با مخاطره که شامل تأخیر در خط لوله، جلو فرستادن ثبات و در شرایط اجرای خارج از نوبت روش‌های اسکور بردینگ و الگوریتم توماسولو می‌باشد، موجود است.

پیش‌زمینه
---------

دستورالعمل‌ها در یک پردازنده با خط لوله در چند مرحله اجرا می‌شوند، بنابراین در هر زمانی چندین دستورالعمل در حال پردازش شدن در مراحل مختلف خط لوله می‌باشند، مانند واکشی و اجرا. چندین میکرو معماری خط لولهٔ دستورالعمل وجود دارد و ممکن است دستوالعمل‌ها خارج از نوبت اجرا شوند. مخاطره زمانی رخ می‌دهد که دو یا تعداد بیشتری از این برخوردهای دستورالعمل‌ها به‌طور هم‌زمان رخ دهد.

انواع
-----

### هزارد داده

هزارد داده زمانی رخ می‌دهد که دستورالعمل‌هایی که وابسته به داده‌ها هستند در مراحل مختلف خط لوله دست به ویرایش داده‌ها بزنند. در نظر نگرفتن مخاطره(hazard) داده‌ها می‌تواند منجر به شرایط ریس شود. (گاهی به عنوان هزارد ریس نیز شناخته می‌شود). دیتا بیش از ۵۰٪ کارایی خط لوله را پایین می آورد.
شرایط زیر شرایط احتمالی رخ دادن مخاطره داده‌است:

1. خواندن بعد از نوشتن، وابستگی واقعی
2. نوشتن بعد از خواندن، ضد وابستگی
3. نوشتن بعد از نوشتن، وابستگی خروجی

#### خواندن بعد از نوشتن R after w

مخاطره خواندن بعد از نوشتن اشاره به موقعیتی می‌کند که یک دستورالعمل به نتیجه‌ای اشاره دارد که یا هنوز محاسبه نشده یا هنوز دریافت نشده. این مشکل رخ می‌دهد چون یک دستورالعمل اجرا شده بعد از دستورالعمل قبلی در حالی که دستورالعمل قبلی به‌طور کامل از طریق خط لوله پردازش نشده.

##### مثال

i1. R2 <- R1 + R3  

i2. R4 <- R2 + R3

دستورالعمل اول مقداری را محاسبه می‌کند که قرار است در ثبات ۲ ذخیره شود، و دومی قرار است این مقدار را برای محاسبه نتیجه‌ای که برای ذخیره در ثبات ۴ است استفاده کند. اگرچه، در یک خط لوله وقتی ما عملوندها را برای دومین عملیات فچ می‌کنیم نتایج از اولی هنوز ذخیره نشده‌اند به همین دلیل وابستگی داده‌ای داریم.

در اینصورت می‌گوییم وابستگی داده‌ای بین دستورالعمل ۲ موجود است به این خاطر که به تکمیل شدن دستورالعمل ۱ وابسته است.

#### نوشتن بعد از خواندن

مخاطره نوشتن بعد از خواندن مشکلی است که به خاطر اجرای هم‌زمان رخ می‌دهد.

##### مثال

i1. R4 <- R1 + R5  

i2. R5 <- R1 + R2

اگر ما در شرایطی قرار داریم که ممکن است که دستورالعمل ۲ قبل از دستورالعمل ۱ کامل شود باید مطمئن شویم که نتیجهٔ ثبات ۵ را ذخیره نکنیم قبل از آنکه دستورالعمل ۱ شانسی برای فچ کردن عملوندها داشته باشد.

#### نوشتن بعد از نوشتن

مخاطره نوشتن بعد از نوشتن ممکن است در محیطی رخ دهد که شرایط اجرای هم‌زمان را دارد.

##### مثال

i1. R2 <- R4 + R7  

i2. R2 <- R1 + R3

باید رایت بک دستورالعمل ۲ را تا زمان اجرای دستورالعمل ۱ به تأخیر بیندازیم.
ویرایش شده توسط A.A

### مخاطره‌های ساختاری

مخاطره ساختاری زمانی رخ می‌دهد که قسمتی از سخت‌افزار پردازنده مورد نیاز دو یا بیشتر از دستورالعمل‌ها در یک زمان باشد.
یک مثال استاندارد یک واحد تک حافظه است زمانی که مورد دسترسی هم‌زمان هم در مرحلهٔ فچ کردن جایی که یک دستورالعمل بازیابی می‌شود از حافظه و مرحلهٔ حافظه جایی که داده نوشته شده ویا خوانده شده از حافظه است.
اغلب این مشکلات توسط جدا کردن مؤلفه به واحدهای متعامد (اورتوگنال) یا تأخیر در خط لوله حل می‌شوند.

### مخاطره کنترلی

مخاطره کنترل‌ها به همراه برنچ‌ها (Branch) رخ می‌دهند. روی بسیاری میکرو معماری دستورالعمل خط لوله، پردازنده خروجی برنچ را نمی‌داند زمانی که نیاز به وارد کردن دستورالعمل جدید به خط لوله دارد.

حذف مخاطره
----------

### عمومی

#### تأخیر خط لوله

تأخیر خط لوله یا وقفهٔ خط لوله روشی برای جلوگیری از انواع مختلف مخاطره می‌باشد. همان‌طور که دستورالعملها فچ می‌شوند.

کنترل منطق تشخیص می‌دهد که آیا مخاطره رخ می‌دهد یا خیر. اگر تشخیص دهد ان.او. پی‌ها را وارد خط لوله می‌کند؛ بنابراین دستورالعمل بعدی (که باعث مخاطره می‌شود) اجرا شده و قبلی زمان کافی برای تکمیل خود و جلوگیری از مخاطره را دارد.
اگر تعداد ان.او. پی‌ها برابر تعداد مراحل خط لوله باشند، پردازنده تمام دستورالعمل‌ها را پاک‌سازی کرده و می‌تواند بدون وجود مخاطره پیشروی کند. به این عمل فلاش کردن خط لوله گویند. تمام اشکال تأخیر، تأخیری قبل از ادامهٔ کار پردازنده دارند.

### مخاطره داده

چندین روش و الگوریتم اصلی برای حل مخاطره داده وجود دارد:

* وارد کردن تأخیر خط لوله هرگاه وابستگی خواندن بعد از نوشتن رخ می‌دهد، مطئنا تأخیر را زیاد می‌کند، یا
* استفاده کردن از اجرای بدون نوبت برای پیشگیری نیاز تأخیر خط لوله
* پیشروی ثبات برای استفاده از داده‌هایی که در مراحل بعدی خط لوله هستند.

در مورد اجرای خارج از نوبت الگوریتم مورد استفاده دو الگوریتم زیر است:

1. اسکوربردینگ، که در آن تأخیر خط لوله تنها زمانی مورد نیاز خواهد بود که هیچ واحد در حال کاری موجود نباشد
2. الگوریتم توماسولو که از نامگذاری دوبارهٔ ثبات استفاده می‌کند که اجازه به خروج مداوم دستورالعمل‌ها می‌دهد

می‌توان وظیفهٔ حذف وابستگی‌های داده‌ای را به کامپایلر سپرد، که می‌تواند تعداد مناسبی از دستورالعمل‌های ان.او. پی را پر کند
بین دستورالعمل‌های وابسته تا اطمینان حاصل کند از عملیات صحیح، یا جایی که ممکن است دستورالعمل‌ها را دوباره مرتب کند.

#### مثال

برای مثال می‌خواهیم مقدار ۳ را به ثبات ۱ دهیم و سپس ۷را به ثبات ۱ دهیم و نتیجه را در ثبات ۲ ذخیره کنیم:

Instruction 0: Register 1 = ۶  

Instruction 1: Register 1 = ۳  

Instruction 2: Register 2 = Register 1 + 7 = ۱۰  

در این اجرا ثبات ۲ باید مقدار ۱۰ را نگهداری کند. اگرچه، اگر دستورالعمل ۱ کاملاً قبل از اجرای دستورالعمل ۲ از خط لوله خارج نشود بدین معنیست که ثبات ۱ مقدار ۳ را ندارد زمانی که دستورالعمل ۲ اضافه کردن خود را انجام می‌دهد. در این مورد دستورالعمل ۲٬۷را به مقدار قدیمی ثبات ۱ اضافه می‌کند به همین دلیل ثبات ۲ ،۱۳را در خود دارد:

Instruction 0: Register 1 = ۶  

Instruction 2: Register 2 = Register 1 + 7 = ۱۳  

Instruction 1: Register 1 = ۳  

این خطا زمانی رخ می‌دهد به این دلیل که دستورالعمل ۲ ثبات ۱ را می‌خواند قبل از اینکه دستورالعمل ۱ نتیجهٔ نوشتن عملیات را در ثبات ۱ ذخیره کند. پس زمانی که دستورالعمل ۲ در حال خواندن محتویات ثبات ۱ است، ثبات ۱ هنوز ۶ را در خود دارد به جای ۳.

پیشروی کمک به صحیح کردن چنین خطاهای می‌کند توسط وابستگی به این دلیل که خروجی دستورالعمل ۱ می‌تواند به عنوان دستورالعمل‌های بعدی استفاده شود قبل ازینکه مقدار ۳ در ثبات ۱ ذخیره شود.
این به این معنیست که ما منتظر ذخیرهٔ خروجی دستورالعمل ۱ در ثبات ۱ نمی‌شویم، قبل از آنکه آن خروجی را قابل دستیابی دستورالعمل‌های بعدی کنیم. (ذخیره به صورت بلادرنگ انجام گرفت و نه به صورت خط لوله‌ای)
هنگام استفاده از پیشروی مرحلهٔ دیکد و اجرای خط لوله دو ورودی دارد:۱-مقدار خوانده شده از ثبات ۱ و مقدار جدید ثبات ۱ که از مرحلهٔ بعد فرستاده شده‌است یا از اجرای دستورالعمل /دسترسی به حافظه فرستاده شده.

### مخاطره کنترلی

برای جلوگیری از میکرو معماری مخاطره کنترل می‌توان:

* وارد کردن یک تأخیر خط لوله، که مطمئناً تأخیر را زیاد می‌کند، یا
* از پیش‌بینی برنچ استفاده کرد و از حدس‌های حساب شده‌استفاده کرد که کدام دستورالعمل‌ها باید وارد شوند، که در این صورت تأخیر فقط برای پیش‌بینی نادرست بکار می‌رود.

در حالتی که یک برنچ باعث تأخیر خط لوله شود بعد از آنکه دستورالعمل‌های نا صحیح وارد خط لوله شدند، باید مراقب بود که جلوگیری شود از هر دستورالعمل بارگذاری شدهٔ اشتباه که هر گونه تأثیری بر حالت پردازنده که مانع هدر روی انرژی که برای پردازش آن‌ها قبل از اینکه کشف شود که اشتباه بارگذاری شده‌اند.

منابع
-----

1. ↑  Patterson & Hennessy 2009, p. 335.
2. ↑  Patterson & Hennessy 2009, pp. 335-343.
3. ↑  Patterson & Hennessy 2009, p. 336.

| * ن
* ب
* و
فناوری‌های واحد پردازش مرکزی |
| --- |
| مدل‌های محاسبه | 
* ماشین تورینگ
	+ ماشین محاسبه تورینگ
	+ ماشین پست-تورینگ
	+ ماشین تورینگ کوانتومی
* Belt machine
* ماشین پشته‌ای
* ماشین حالات متناهی
	+ with datapath
	+ ماشین حالت یو.ام.ال
	+ ماشین صف
* Register machines
	+ Counter
	+ Pointer
	+ Random-access
	+ ماشین برنامه ذخیره‌شده با دسترسی تصادفی

 |
| معماری رایانه | 
* ریزمعماری
* معماری فون نویمان
* معماری هاروارد
	+ modified
* معماری جریان داده
* Transport-triggered
* Cellular
* اندیان
* ذخیره‌سازی داده رایانه
	+ حافظه دسترسی غیریکپارچه
	+ HUMA
	+ Load/store
	+ معماری حافظه ثبات
* Cache hierarchy
* سلسله‌مراتب حافظه
	+ حافظه مجازی
	+ ذخیره‌سازی داده رایانه
* Heterogeneous
* Fabric
* چندپردازشی
* رایانش شناختی
* نورومورفیک

 |
| مجموعه دستورالعملs | 

|  |  |
| --- | --- |
| Types | 
* رایانه با دستورهای پیچیده
* رایانه کم‌دستور
* Application-specific
* EDGE
	+ TRIPS
* کلمه دستورالعمل بسیار طولانی
	+ رایانش موازی صریح دستورالعمل‌ها
* MISC
* OISC
* NISC
* ZISC
* comparison
	+ حالت آدرس‌دهیs

 |

* اکس۸۶
* معماری آرم
* معماری میپس
* Power ISA
* اسپارک
* Itanium
* Unicore
* MicroBlaze
* RISC-V
* others
 |
| Execution | 

|  |  |
| --- | --- |
| خط لوله (رایانه) | 
* حباب (رایانه)
* Operand forwarding
* Classic RISC pipeline

 |
| مخاطره (معماری رایانه)s | 
* وابستگی داده
* مخاطره (معماری رایانه)
* مخاطره (معماری رایانه)
* False sharing

 |
| خروج از دستور در حال اجرا | 
* Tomasulo algorithm
	+ Reservation station
	+ Re-order buffer
* تغییر نام ثبات

 |
| Speculative | 
* پیش‌بینی‌کننده پرش
* Memory dependence prediction

 |

 |
| رایانش موازی | 

|  |  |
| --- | --- |
| Level | 
* موازی‌سازی بیتی
	+ Bit-serial
	+ کلمه (معماری رایانه)
* دستورالعمل
* خط لوله (رایانه)
	+ Scalar
	+ سوپراسکالر
* Task
	+ ریسه (رایانه)
	+ فرایند (رایانه)
* Data
	+ پردازنده برداری
* Memory
* رایانش توزیع‌شده

 |
| چندریسمانی | 
* چندرشته زمانی
* چندرشتگی همزمان
	+ فراریسمانی
* Speculative
* قبضه‌کردن (رایانش)
* چند وظیفه‌ای بدون قبضه‌ای

 |
| طبقه‌بندی فلین | 
* یک دستور یک داده
* یک دستور چند داده
	+ SWAR
* SIMT
* چند دستور یک داده
* چند دستور چند داده
	+ یک برنامه چند داده

 |

 |
| Processorperformance | 
* Transistor count
* Instructions per cycle (IPC)
	+ Cycles per instruction (CPI)
* Instructions per second (IPS)
* فلاپس (FLOPS)
* تراکنش بر ثانیه (TPS)
* Synaptic updates per second (SUPS)
* Performance per watt (PPW)
* Cache performance metrics
* Computer performance by orders of magnitude

 |
| Types | 
* واحد پردازش مرکزی (CPU)
* واحد پردازش گرافیکی (GPU)
	+ محاسبات همه‌منظوره بر روی واحد پردازش گرافیکی
* پردازنده برداری
* Barrel
* پردازش جریان
* Coprocessor
* مدارهای مجتمع با کاربرد خاص
* مدار مجتمع دیجیتال برنامه‌پذیر
* CPLD
* Multi-chip module (MCM)
* System in package (SiP)

|  |  |
| --- | --- |
| By application | 
* ریزپردازنده
* ریزکنترل‌گر
* Mobile
* Notebook
* Ultra-low-voltage
* ASIP

 |
| Systemson chip | 
* سامانه روی یک تراشه (SoC)
* Multiprocessor (MPSoC)
* Programmable (PSoC)
* شبکه درون یک تراشه (NoC)

 |
| شتاب‌دهنده سخت‌افزاری | 
* AI accelerator
* Vision processing unit (VPU)
* Physics processing unit (PPU)
* پردازشگر سیگنال دیجیتال (DSP)
* واحد پردازشی تنسور (TPU)
* Secure cryptoprocessor
* پردازنده‌های شبکه‌ای
* Baseband processor

 |

 |
| کلمه (معماری رایانه) | 
* معماری ۱-بیتی
* بیت برش
* ۴-بیت
* ۸ بیتی
* ۱۶ بیتی
* ۳۲-بیت
* 48-bit
* 64-bit
* ۱۲۸-بیت
* 256-bit
* 512-bit
* کلمه (معماری رایانه)
	+ کلمه (معماری رایانه)

 |
| Core count | 
* Single-core
* پردازنده چندهسته‌ای
* Manycore
* Heterogeneous architecture

 |
| اجزاء | 
* واحد پردازش مرکزی
* حافظه نهان (رایانش)
	+ حافظه نهان سی‌پی‌یو
	+ الگوریتم حافظه پنهان
	+ انسجام حافظه نهان
* گذرگاه (رایانه)
* سرعت ریزپردازنده
* سیگنال ساعت
* خروج به ترتیب ورود (رایانه و الکترونیک)

|  |  |
| --- | --- |
| Functional units | 
* واحد محاسبه و منطق (ALU)
* Address generation unit (AGU)
* واحد ممیز شناور (FPU)
* واحد مدیریت حافظه (MMU)
	+ Load–store unit
	+ تی‌ال‌بی (TLB)
* کنترلگر حافظه (IMC)

 |
| دروازه منطقی | 
* مدار ترکیبی
* مدارهای ترتیبی
* Glue
* دروازه منطقی
	+ دروازه‌های منطقی کوانتومی
	+ دروازه آرایه

 |
| ثبت سخت‌افزاریs | 
* ثبات
* ثبات وضعیت
* ثبات پشته‌ای
* Register file
* Memory buffer
* شمارنده برنامه

 |
| Control unit | 
* Instruction unit
* حافظه میانگیر
* Write buffer
* ریزبرنامه‌سازی تصویر رام
* شمارنده

 |
| دیتاپد | 
* تسهیم‌کننده
* تسهیم‌کننده
* جمع‌کننده
* ضرب‌کننده دودویی
	+ پردازنده چندبرابر
* رمزگشا
	+ Address decoder
	+ Sum addressed decoder
* شیفت دهنده بشکه‌ای

 |
| مدار الکترونیکی | 
* مدار مجتمع
	+ 3D
	+ Mixed-signal
	+ Power management
* مدار بولی
* الکترونیک دیجیتال
* الکترونیک آنالوگ
* Quantum
* کلید (مدار)

 |

 |
| مدیریت نیرو | 
* PMU
* APM
* رابط قدرت و تنظیمات پیشرفته
* درجه‌بندی پویای بسامد
* Dynamic voltage scaling
* Clock gating
* Performance per watt (PPW)
* Race to sleep

 |
| مرتبط | 
* History of general-purpose CPUs
* Microprocessor chronology
* طراحی پردازنده
* الکترونیک دیجیتال
* ماژول امنیتی سخت‌افزاری
* Semiconductor device fabrication
* Tick–tock model

 |